http://img.photobucket.com/albums/v622/bak2007/disc_tease_6_26_09.png I'm pretty sure I just finished the client-side anti-cheat. It basically records all interesting events into a log that it can replay to make sure the reported state matches the calculated state. All that's left now is for the server to make sure that the reported state (position packets) in the log correspond to actual packets the server got/sent, as well as actually replaying the log (either on another machine or on the server, not sure yet). Here's the list of interesting events it records: enum EventType
{
TYPE_SHIP_CHANGE, // player changed his ship
TYPE_NEW_KEY_STATE, // player pressed / released some keys
TYPE_TICK, // advance time
TYPE_SENT_POSITION_PACKET, // position packet sent
TYPE_TIMER_SYNC, // server <-> client timer synchronization
TYPE_SHIP_CHANGE_REQUEST, // player requested ship change
TYPE_OTHER_PLAYER_ENTERING,
TYPE_OTHER_PLAYER_LEAVING,
TYPE_OTHER_PLAYER_CHANGE_SHIP,
TYPE_OTHER_PLAYER_CHANGE_FREQ,
TYPE_OTHER_PLAYER_POSITION,
TYPE_OTHER_PLAYER_WEAPON,
TYPE_FREQ_CHANGE,
TYPE_SELF_DIED,
TYPE_OTHER_PLAYER_DIED,
};