Unstable replays
An unstable replay is a replay which can produce different outcomes depending on how it is played back, as if the replay tape could split into diverging timelines at some specific frame. Unstable replays are a rare occurrence, but not vanishingly so, and typically are RH racing laps with aggressive powergear slides.
Whether a divergence will appear in a replay, and what it will look like if it does, depends on a large number of factors, including but not limited to: the chosen camera, in-game graphics settings, the number of cycles in DOSBox and the system (be it an emulator or real hardware, as the effect has also been observed in native DOS systems) used to run the game. Since, in contrast, reproducing a replay with only the bare game state loop (be it by fast-forwarding the tape or by using the repldump tool) gives consistent outcomes across systems, instability is believed to somehow arise from the graphics layer. Since live gameplay can't help but involve graphics, the exposure of drivers to instability can be limited only so far.
While unstable replays are by and large just one more amusing curio of Stunts, the conflicting outcomes can lead to confusion when validating laps in a race, specially given how the system dependence of the effect can make it hard to reproduce. That being so, this article aims at clarifying what to expect upon facing an unstable replay and how to effectively navigate in it, which should help avoiding, or getting out of, messy situations in competitions.
Definitions
Note: Replays mentioned in what follows can be downloaded from Southern Cross.
To avoid mixing up things, let's begin by defining some key terms that we'll use in the discussion below. To begin with, for the replay controls, we'll mostly use the names in the game manual: skip to the start, stop, play, fast play and, in the bottom row, rewind and fast forward. (Note that fast play is often referred to as "double speed".)
Next, some key notions about instability:
- Fast-forward timeline
- The events in a replay as seen by fast-forwarding it from the beginning, loading it from the Options menu, or reproducing it with repldump. The fast-forward timeline is the same across systems and settings, and so is a sensible choice of a default validation method for potentially unstable replays. (Note the relevant replay control is fast forward, and not fast play/"double speed".)
- Divergent timeline
- A sequence of events in a replay different from the one in the fast-forward timeline. A divergent timeline might be seen by playing the replay (that is, watching with the play button), or through some other use of the replay controls. Whether it will actually be seen can depend on the computer running the game, the DOSBox cycles setting, camera choice, graphics settings, and so forth.
- Divergence point
- A point in the replay at which two or more timelines diverge. Divergence points are typically vertex points in a powergear slide, in which the car stops for a moment before shooting into a different direction (note the converse is presumably not true: there are many powergear slides which, as far as we know, don't lead to divergences). By convention, divergence points will be quoted using the last frame before the timelines split (for instance, FRI15695.RPL has a divergence point at 1:46.00).
- Unstable replay
- A replay known to have a divergence point and multiple timelines when reproduced in some way on at least one system. (Given the way factors external to the game affect the observations, "known to be unstable" is arguably more accurate than "unstable", but let's try to keep the language straightforward.)
Before getting into the minutiae of how divergences play out, it's worth anticipating the conclusions a bit in order to give some practical advice on how to work around divergence points and switch timelines:
- Playing an unstable replay from the beginning, or from any point before the divergence, will lead to a divergent timeline. What this timeline will look might depend on a host of factors, most notably your system and the chosen camera.
- Fast playing an unstable replay from either the beginning or 0:00.05, depending on where the divergence point is, will lead to the fast-forward timeline.
- Loading the replay from the Options menu and fast-forwarding the tape from the beginning to the end lead to the same result: the final state of the fast-forward timeline.
- Loading from Options and rewinding will keep you in the fast-forward timeline. (Fast-forwarding is okay as long as you don't stop at the divergence point, nor play through it.)
- The divergence point will most likely be at the vertex of some powerslide, when the car changes direction suddenly.
- To find the exact frame of the divergence point, load from Options (or fast-forward to the end), rewind to a candidate frame, and play from there. If you stay on the fast-forward timeline by doing so, the divergence is further back. If you switch to the divergent timeline, either you stopped exactly at the divergence point (and redoing it on the next frame will lead to the fast-forward timeline) or the divergence is further ahead.
- Watching both the fast-forward and the divergent timeline in the manner described above will usually be enough give you an upper boundary for where the divergence point can be (it must be before the timelines become visibly different). If somehow that isn't helpful, you can systematically find the 30-seconds window the divergence must be in by playing from the beginning, pausing at ~29.95, ~59.95, etc., and rewinding a single frame at each stop until you see a timeline change.
- If you see an unexpected crash while playing an unstable replay, and rewinding doesn't instantly switches timelines, chances are the divergence point is on the other side of a 30-seconds checkpoint. (A straightforward example C232DUP.RPL: divergence point at 27.95, crashes on the divergent timeline at 33.05. C232OVE.RPL is similar, but more confusing still because the fast-forward timeline isn't the successful one.)
How rewinding works
One of the puzzling aspects of unstable replays is the way in which some divergences are so easily fixed to be barely noticeable, while others are recalcitrant enough to be nightmare fuel. Such variation arises from a replay mechanic that is an integral part of RH racing: rewinding.
The first thing to note is that the game does not rewind a replay by moving backwards in time. Rather, it fast-forwards the tape from the beginning to the point you want to reach. That is why rewinding is so slow on the 1990 Broderbund (Stunts 1.0) version of the game (and gets slower the further ahead the tape is). To improve on that, later versions store checkpoints of the game state every thirty seconds, so that there is no need to fast-forward from the beginning, but only from the latest checkpoint. For a demonstration, rewind frame by frame across a xx:00 or xx:30 timestamp. You'll notice the game takes noticeably longer to update once you go behind the checkpoint:
That's a nifty optimisation if replays always play in consistent ways. If they don't, though, things get interesting. For instance, if you are on a divergent timeline, and the divergence point lies behind a checkpoint, there will be a visible discontinuity when you rewind past the checkpoint. Depending on how far away checkpoint and divergence are, the discontinuity can be very obvious, as in Usrin's ZCTP03 replay around 2:00 (divergence at 1:38.95)...
... or incredibly subtle, as in Overdijf's ZCT232 replay around 0:30 (divergence at 28.05):
Why rewinding fixes replays (sometimes)
WIP