The core architectural decision you’re making early on is whether to record deterministic input streams (lockstep) or snapshot full state. For competitive titles I’d push hard on the input-based approach because it’s exponentially more space-efficient—recording frame ticks and player inputs at maybe 30-60 bytes per frame versus megabytes of serialized state per checkpoint. But the catch that bites most people is floating-point determinism: if any simulation step uses a non-deterministic operation (transcendental functions, unordered parallel reductions, or even fma vs separate mul+add), your replay will desync the moment you load it on different hardware. I’d pin the whole simulation to integer fixed-point math for movement and collision, and if you must use floats, lock them with a compiler flag and never let NaN propagate—once a state contains NaN every downstream frame is garbage. Checkpoint-based hybrid replay works too, but you’re then storing full serialized snapshots periodically, which means your serialization format has to be byte-stable across builds, or you can’t reliably load an old replay.
On the math side, if you’re doing delta compression on snapshots, model your state as a sparse structure and exploit temporal locality—between checkpoints, 90%+ of entities don’t change, so run
"Rank doesn’t define skill, but tilt certainly destroys it."