Porting Test Drive II from SNES to PC, Part 43: Closing the first post-02:9016 rival marker split
The previous checkpoint fixed the screenshot pack for the first shared gameplay
window after both the default-rival and no-opponent paths reach 02:9016.
That gave me a clean visual target:
- same callback surface
- same lower cockpit
- one small stable difference in the top strip
This checkpoint closes that first live split instead of leaving it as a vague
"HUD difference".
The user review narrowed the visual meaning immediately
The corrected screenshots were already useful, but the human review made the
next step much sharper.
Default-rival frame 2048:
No-opponent frame 2048:
The practical read from the review was:
- the split is OAM-owned, not BG-owned
- the lower cockpit stays the same in
2048..2088 - the road/world objects are not the source yet
- the rival lane carries the extra marker
- the user also noticed rival blinking lights in the rearview, which is likely another OAM-facing difference but not yet tied to a specific state field
The automated diff was already tiny:
But now the next question changed from "what is different?" to "which staged
OAM word owns that marker?"
Extending the gameplay probe closed the marker itself
I extended the boot probe so it also snapshots the gameplay-facing fields
around this HUD/OAM path:
state_11a7state_11cdstate_11dfstate_11f1state_11f3state_11f5state_137coam_072c..073a
Then I reran the two already-recovered flows:
- default rival
- no opponent clock slot
and compared only the corrected visible window 2048..2088.
That compare demoted the earlier suspects 09A2 and 09A8.
They still diverge intermittently, but they are not the first stable visible
split.
The stable whole-window split is now explicit:
$1C76 = 1 -> 0state_11f3 = 44 -> 0oam_0730 = 4618 -> 57600$1C70 = 0 -> 3
while the adjacent staged OAM words stay the same:
oam_072coam_0734
That is exactly the shape expected from "one extra rival-only marker", not a
full HUD rewrite.
Bank-2 code matches the recovered visual split exactly
The key static match is bank2.asm L0108EF.
That code stages:
oam_072c <- state_11f1-
oam_0730 <- state_11f3only when$1C76 != 0 oam_0734 <- state_11f5
So the first stable live split after 02:9016 is now closed as:
$1C76 -> state_11f3 -> oam_0730
In practice, that is the recovered rival-only marker on the top HUD strip.
This matters because it moves the lane out of generic post-handoff comparison
and into specific ownership:
- the first live split is no longer unknown
- the rival/no-opponent handoff is now tied to a concrete staged OAM slot
-
09A2/09A8are no longer the first target; they are later or secondary OAM-side behavior
What remains open after this checkpoint
This does not finish the whole gameplay divergence.
Two things still look worth chasing next:
- the rearview blinking lights the user reported
- the intermittent
09A2/09A8-side differences that survive after the marker split is explained
But those are now later layers of the same problem.
The first stable rival-only gameplay-visible split is no longer a guess.
It is a closed OAM marker path.



Top comments (0)