Aleph One infamously contains no code whatsoever to detect or recover from desynchronization. This is inexcusable, as nearly every other lockstep-replication game in history has some kind of desync detection, and many can automatically recover from desync.
We propose adding a game state checksum to the netgame protocol. Any measurable difference in game state would result in, at minimum, a visible indication of desync. Optionally, desync recovery could be enabled, in which case, when a desync is detected, the gatherer automatically creates a saved game, distributes it to all other players, and play is resumed from that point. This would break network compatibility with Aleph One but is certainly worth it.
The game state checksum would include only a limited subset of gamestate: for example, the positions and facing directions of all significant map objects (i.e. not effects or ephemera). It can be assumed that any meaningful desynchronization will eventually result in a divergence of one of these variables. Limiting the scope of the check also permits for certain kinds of "harmless" Lua trickery.
Aleph One infamously contains no code whatsoever to detect or recover from desynchronization. This is inexcusable, as nearly every other lockstep-replication game in history has some kind of desync detection, and many can automatically recover from desync.
We propose adding a game state checksum to the netgame protocol. Any measurable difference in game state would result in, at minimum, a visible indication of desync. Optionally, desync recovery could be enabled, in which case, when a desync is detected, the gatherer automatically creates a saved game, distributes it to all other players, and play is resumed from that point. This would break network compatibility with Aleph One but is certainly worth it.
The game state checksum would include only a limited subset of gamestate: for example, the positions and facing directions of all significant map objects (i.e. not effects or ephemera). It can be assumed that any meaningful desynchronization will eventually result in a divergence of one of these variables. Limiting the scope of the check also permits for certain kinds of "harmless" Lua trickery.