Porting Test Drive II from SNES to PC, Part 39: Closing the No-Opponent Handoff Into 02:9016
Source: Dev.to
Overview
This checkpoint closes the last front‑end ambiguity in the SNES Select Opponent flow.
The fourth slot was already structurally solved as the stopwatch/clock path. What remained open was whether that path actually promoted into the same downstream gameplay corridor as the regular rival‑car choices, or whether it diverged somewhere after 01:BE43.
Recovered No‑Opponent Path
A callback‑relative probe keyed to the first live 01:C1D2 hit, plus a later be43+17‑22:start confirm, now recovers the no‑opponent path organically through:
L00C20B → 01:C1D2 → L00BE76 → 01:BE43 → L008B87 → 01:902D → 01:9111 → active_main = 02:9016The important part is that this is not a forced callback lane; it is an organic input‑driven path recovered from boot with timing tied to the live callback surface.
State Differences at the Convergence Point
Both the regular rival baseline and the no‑opponent clock path reach the same later corridor at the same timestamps (active_main = 02:9016), but they do not collapse to the same state:
| Path | $1C70 | $1C76 |
|---|---|---|
| Rival baseline | 0 | 1 |
| Clock / no‑opponent path | 3 | 0 |
That difference remains visible after both runs have already reached the shared downstream path.
Updated Open Problem
The original open questions were:
- How to select the fourth slot?
- How to confirm it?
- Whether it reaches the gameplay handoff corridor at all?
Now the focus has shifted to a more tractable archaeology target:
What does $1C76 = 0 change after both paths have already converged to the shared 02:9016 corridor?
This pushes the search away from menu‑timing drift and into direct post‑handoff behavior.
Promoted Artifacts
The following artifacts were generated for this checkpoint:
tools/out/snes_select_opponent_no_opponent_organic_path.json
tools/out/snes_select_opponent_no_opponent_organic_path.md
snes_play_session_gate.json
snes_selection_state_contract.json
docs/snes_dos_correlation.md
docs/snes_unknowns.mdNext Steps
Capture and compare the first post‑02:9016 gameplay‑facing window for:
- Default rival path
- No‑opponent clock path
At this point, the front‑end path itself is no longer the blocker. The remaining blocker is identifying the first runtime‑visible effect of the preserved no‑opponent state.