Problem
checksum() hashes every map layer and a canonical serialization of all entities. That is fine for saves and occasional checks, but replays record a checksum after every tick, and multiplayer will compare checksums continuously. On a 96 by 96 map a 420-tick replay test takes several seconds; original maps reach 640 by 640, where per-tick full checksums are too slow for live play or long replays.
Acceptance criteria
- Maintain checksums incrementally (or per region and entity class) so per-tick cost scales with what changed, not with map size.
- Prove equivalence: the incremental checksum equals a full recomputation at every tick across long mixed scenarios, saves and restores.
- Keep the first-divergent-tick report and identical results across hosts.
- Record measured per-tick cost on the largest supported map.
Context
Relevant to S3-092 (replay diagnostics), S3-094 (authoritative multiplayer) and S3-104 (performance budgets). The current implementation is in resources/game/engine/save.ts.