GAME_CHECK_DROID shouldn't do anything, unless the game is out of synch, now. And should print, if the droid isn't in _exactly_ the same place on all screens.
GAME_BUILD should fix the structure ID of the structure being built. GAME_BUILD and GAME_BUILDFINISHED shouldn't do anything other than that, unless the game is out of synch, now.
Sanity check all use of selectedPlayer. It should be used for deciding how the interface works, not for changing the game state in random places for no good reason...
Fix the extra droid explosion effects after a droid dies, but before the GAME_DROIDDEST message that gives the droid permission to really die. Actually, maybe the GAME_DROIDDEST, GAME_STRUCTDEST and GAME_FEATUREDEST should be turned into just synch messages, and stuff should be removed as soon as destroyed.
Check what validLocation is used for, make sure that putting delivery points under locations where buildings are going to be placed can't cause synch errors.
In destroyStruct, check that psTile->illumination can't affect the game state. Or make it consistent, so all players see the same scorch marks.
Just before transporterAddDroid, it changes the droid state directly. Should either not test for selectedPlayer, or should not change the droid state directly. See also: unloadTransporter.