registered clients will auto-kick unregistered clients central clearingghouse for active servers server logon messages problem with reconnect to same server out of order packets acknowledge all command line parameters annoying pause on intermission screen seperate accept/reject list for server packets and client packets server compile time should be part of connect message and status allocate new cvars during file parse remote console should be able to do cvar setting/reading make punchangle a client side operation remove sys_printf remove host_client packet filter list client move by test final pos and test 1/16 down simulate world first, then clients, clients explicitly sim weapon projectiles allow remote locations to subscribe to console output client zombie state? seperate command ques for client and server? worry about partial connection during level change worry about zombie state for if(!state) constructs make sound/ and models/ implicit in data types int sequence int reliable_sequence; bit reliable_payload; consumption renewable resources depletable resources rate of extraction how can you influence other characters how can you communicate login logoff disconnection client to server ---------------- last good received server time milliseconds since last move frame angles movement buttonstates impulse server to client ---------------- last movemessage received origin velocity build movement send movement packet to server set player position to last known good execute all unaknowledged movement packets needs to know all things that can effect movement movement context ---------------- origin velocity size run move command (context, move) #define MAX_MOVEMESSAGES 64 typedef struct { double time; // client time when sent byte milliseconds; } movemessage_t; int ack_movemessage; int current_movemessage; movemessage_t movemessages[MAX_MOVEMESSAGES]; void CL_Frame (void) { get all pending server messages latency = cl.time - movemessage[last].time; movetime = cl.time - cl.oldtime; get movemessage send packet to server } does not adress interpolating other object's movement