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.
structPlaceDroid now sets ppsDroid to NULL. Check that that's ok with cbNewDroid. Since cbNewDroid is only called when the factory runs out of things to build, not every time a new droid is built, it smells like a giant hack, and maybe the droid can just be set to NULL.
Clean up structPlaceDroid. After which, the GAME_SECONDARY_ALL message type will be unused, and should be removed...
Check the researchResult function. Should a message be sent there, and if so, then should wait for it?
***************
* src/order.c *
***************
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.