I already threw the punch. Which frame can a late input change?
Rewind in Braid, play a fighting game over a delayed connection, then throw a grenade in Halo: Reach. Each action asks something different of the engine: recover a past state, revise a prediction, or wait for authority.
Questions in this reading · 4
Can the game recover the past?
Imagine a missed jump in Braid. Hold rewind, release it, and you should be able to play from that moment. A screenshot could reproduce the view while saying nothing about how the monster will move next. Blow first asks what state will let play resume, then compresses it: read a base frame and restore the target state using the changed field values in a difference block. This past has already happened. The challenge is to recover it.
Passages and timestamps · 2
record the full state of the world, because you know that's robust. You know you can reproduce that.I have to decode what's in the base frame. And then I have to apply the diffs to the base frame.Replay the same past with a different input
Now put the second player across a network. When your screen shows an idle opponent, their block input might still be in flight. A rollback fighter advances, restores an earlier state if necessary, then runs forward with the input that actually arrived. Compared with single-player rewind, it has another job: revising the history it predicted. Intermediate ticks recover the simulation; the frame presented at the end gets the full render.
Passages and timestamps · 2
The game will proceed without remote input, and when remote input is received, we will roll back and then simulate forward.The simulated frames are the ones that you simulate forward with a stripped down version of the game to get back to the current tick.The hand moves now. Who releases the grenade?
Halo: Reach draws the boundary inside a single gesture. Pull the trigger and your throwing arm moves immediately. The grenade that could hurt another player waits for the host. At the release frame the client hides the grenade in the hand. The projectile in flight appears after confirmation. Dividing the action lets different parts bear the delay. For an action in your own design, identify the part that needs immediate feedback, the part that can be replayed from inputs, and the point at which other participants must accept the outcome.
Passages and timestamps · 2
we predict the throw animation. So as soon as you push the trigger button on a client machine, you immediately begin your throw.But we do not predict the grenade release. We wait for the host. This means that all grenades in flight will be real.Connected to one game—but who decides its state?
Before handling late input, decide who is entitled to submit game state. Brevik recalls that the original Battle.net primarily introduced players to one another; their machines then communicated directly, keeping the central service light. That allocation also left mutable state with the clients. The team anticipated individual cheating but underestimated the impact of shared cheating tools, prompting a client–server approach for the sequel. Alongside rollback and host adjudication, this separates two questions. Rollback asks how late information revises the past; an authority boundary asks whose information is admissible. Eliminating delay would not by itself remove a client’s opportunity to invent state.
Passages and timestamps · 2
we just handled the kind of these connectionsgoing client-server and for Diablo 2 was definitely necessaryTry it on your own example
Sketch three moments: you press a button, your screen responds, and the remote message arrives. If the machines disagree, mark the state to restore, the inputs to replay and the first result both sides can trust.