de41280e07
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3698 8092fc87-c524-0410-9efc-e669fe64eaf9
121 lines
5.2 KiB
Plaintext
121 lines
5.2 KiB
Plaintext
High priority items:
|
|
|
|
|
|
Medium-priority:
|
|
- For the battle ending synchronisation, set the end at at least
|
|
getBattleInputDelay() + 1 frames in the future (instead of just 1),
|
|
so that there will be no hickup during the end synchronisation.
|
|
Also check this value for incoming packets.
|
|
- If a player only moves away from 'Battle!' there's no need for the other
|
|
to have to reconfirm.
|
|
- decent pause handling
|
|
- make compilation of crc.c and checksum.c conditional.
|
|
- negotiate checksum interval
|
|
- Closing and destroying of NetConnections is a terrible mess.
|
|
- Checks allConnected() shouldn't be needed if CHECK_ABORT is set
|
|
on disconnect.
|
|
- Shorten or lengthen the time between frames depending on how full the input
|
|
buffer is, to prevent one side constantly stalling when the connection in
|
|
one direction is slower than in the other direction.
|
|
|
|
|
|
Low-priority:
|
|
- Some difference in pictures to indicated confirmed/unconfirmed.
|
|
A check mark perhaps.
|
|
- Check whether the random seed and frame delay have been agreed before
|
|
continuing (in doConfirmSettings).
|
|
- Replacement for TOS. It is IPv4 only.
|
|
- Integrate network check functions with doInput
|
|
It will be easy to get rid of the separate threads then too.
|
|
- The state changes from interBattle to interBattle. That shouldn't happen,
|
|
but it doesn't seem to cause any problems. Need to investigate.
|
|
Addition: negotiateReadyConnections() is called again just to make sure
|
|
all sides pass this checkpoint. This is not a problem. It should be
|
|
documented in STATES though.
|
|
- More files define NETCONNECTION_INTERNAL than they should.
|
|
- voice transmission during the game (using an external lib)
|
|
read ramjee94adaptive.pdf
|
|
- Keep-alive packets. Store time of last packet sent, use alarms to determine
|
|
when to send the next one. Count received messages?
|
|
- Some way to (optionally) hide your fleet setup until the start of the
|
|
game? With either a previously determined maximum fleet value, or
|
|
just display a number to the opponent.
|
|
- (when ships stats are in the content) Negotiate the ship stats, so people
|
|
can play with non-default ships.
|
|
- Pre-fleet-setup setup
|
|
The values negotiated could include handicapping (different values for
|
|
each player)
|
|
- hide fleets (also handicapping here)
|
|
- maximum number of ships per side
|
|
- maximum ship cost per side
|
|
- ship properties
|
|
- Send taunts (prerecorded samples) at the touch of a button?
|
|
Use taunt add-on packages? Send the opponent's package before the start
|
|
of a game?
|
|
|
|
|
|
Future improvements/optimisations:
|
|
- For BSD sockets: use dup2() to move fds to lower values, so that less fds
|
|
have to be checked on select().
|
|
- Use writev() to send multiple packets in one syscall, instead of
|
|
calling send() for each packet.
|
|
- Refusing games with both parties network controlled is not always
|
|
necessary. In theory it should be possible to have a client work
|
|
as "proxy". The client can watch as the actual players play the game.
|
|
Checking for "loops" would be tricky (eventually there should be a human
|
|
or computer controller for each side).
|
|
- Concurrent selection of ships. Note that if this is handled properly, it
|
|
will also be easy to take care of the "Allow Shofixti to choose last" bug.
|
|
Note that one party will still have to send his choice to the other side
|
|
first, which may be "exploited". Encryption would take care of this,
|
|
but at the least make sure the same player who gets to chose first
|
|
every time.
|
|
- meta-server. Use HTTP? Existing libs can be used, no problems with NAT,
|
|
human-readable. Speed is not an issue.
|
|
- move to UDP. Repeat past battleinput packets for each new packet that
|
|
is sent until they are confirmed.
|
|
- Once the protocol is stable: register the port number with IANA
|
|
- Per state data (in NetConnection.stateData) is unnecessarilly complicated.
|
|
Putting all fields directly in NetConnection simplifies things a lot.
|
|
It's not as generic, but this code won't be used elsewhere anyhow.
|
|
- Send captain names to the other side
|
|
|
|
|
|
Bugs:
|
|
- as positions are dependant on the screen resolution, you won't be able
|
|
to keep sync on games with a different resolution.
|
|
- collision detection is dependant on the images used. Using different
|
|
graphics packs will result in a desync.
|
|
- Both sides need identical battle frame rates. This value is not
|
|
negotiated.
|
|
- If one player closes the connection while the other player is selecting
|
|
a ship to put in his fleet, or loading a fleet, the "Network Control"
|
|
button won't be updated.
|
|
- If one side is computer-controlled, sync loss will occur, because the AI
|
|
uses the RNG. It needs its own RNG context.
|
|
- Pressing F10 to exit the supermelee setup when a connection is active
|
|
will cause an attempt to draw a NULL frame. (possibly the disconnect
|
|
feedback)
|
|
|
|
|
|
Final actions:
|
|
- Check out TODO, XXX, WORK tags
|
|
- memleak testing
|
|
- check for and remove mtrace()/muntrace() calls.
|
|
- update documentation
|
|
- FILES, also note which part of the separation they are in
|
|
- check coding style (search for '\>(')
|
|
- compile with maximum warnings
|
|
|
|
|
|
To put in the announcement of Netplay:
|
|
- Slow connections is acceptable. Packet loss isn't.
|
|
|
|
|
|
Bugs and todos unrelated to netplay.
|
|
- other player being able to choose the next ship after 3 seconds
|
|
of inactivity
|
|
- DoRunAway() shouldn't be handled in ProcessInput()
|
|
|
|
|