Without knowing the game: Some kind of replay/recap feature maybe or physics in cut scenes.
When you replay a series of inputs, you want the accompanying physics to come out the same. Solvers that use randomness in your engine will either need to have their RNG seeded with the same value or have the rng removed.
Another thing causing problems might be how your engine handles time or when it iterates over objects in a specific order relative to how they were added (might not have preserved that order in your snapshot).
Sometimes network code is easier with deterministic engines. Some engines simply replay the remote/network inputs as if they were local (with various strategies for handling the time sync/time delays), and rely on the property of determinism of their underlying simulations to avoid divergence in player world states.
Knowing only how much Army of Two stressed its cooperative network play nature (including in its title), that's my best lay guess of the strong reason the game wanted deterministic simulations.
The impression I got from dev team discussions/features on The Halo Channel/Master Chief Collection was that Halo was built that way: its network engine wanted rock solid deterministic physics, so all the replay/recap features added to later games were a "free" bonus they were able to build on top from that earlier netcode requirement.
This has it advantages and disadvantages. One its great and requires less bandwidth, but also means that any floating calculation rounding issue can throw different machines out of sync from each other.
It was definitely a real pain to ensure the whole stack was deterministic. Since we only targeted ps3 and xbox360 it was easier to ensure determinism. All in all, I wouldn’t recommend it.
Yeah, unless you have a entity count that exceeds your available bandwidth you're usually better off with a dead-reckoning system.
That also has the advantage of being able to "fake" events with effects until the server can resolve them meaning a latent connection can 'feel' faster.
Kudos to you for shipping a lockstep solution, we could never flush out the determinism bugs on our titles so we always just used dead-reckoning unless it was some dumb turn based game.
Depends on the mode the FPU is put into, fast or precise. If you want to have some fun, start a multiplayer game of AOE and switch the FPU mode from fast to precise. Doesn't take long to get out of sync, even for a basic game.
More recently we've taken the approach of "close enough is good enough". See Red Dead Redemptions "hilarious" cut scenes where the NPCs get involved, or the horse grts attached to the trains.
Another thing to consider about a replay system is that you don't have to be perfect. What you as a player see isn't what the server(if you have one) sees, and it's not what the other player sees. Your view is only a best guess at that, and for most replay systems in games, they will also be best guesses.
When you replay a series of inputs, you want the accompanying physics to come out the same. Solvers that use randomness in your engine will either need to have their RNG seeded with the same value or have the rng removed.
Another thing causing problems might be how your engine handles time or when it iterates over objects in a specific order relative to how they were added (might not have preserved that order in your snapshot).
There's many things that can go wrong.