DEV Community

Nivando Soares
Nivando Soares

Posted on

Porting Test Drive II from SNES to PC, Part 39: Closing the No-Opponent Handoff Into 02:9016

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.

SNES Select Opponent clock slot

What is now recovered

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:9016

The 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.

The state difference survives the shared handoff

The regular rival baseline and the no-opponent clock path now reach the same later corridor at the same timestamps, but they do not collapse to the same state.

  • Rival baseline keeps $1C70 = 0, $1C76 = 1
  • Clock / no-opponent path keeps $1C70 = 3, $1C76 = 0

That difference is still visible when both runs have already reached the shared downstream path and later active_main = 02:9016.

SNES Select Opponent selection box

Why this matters

This narrows the remaining question sharply.

The open problem is no longer:

  • how to select the fourth slot
  • how to confirm it
  • whether it reaches the gameplay handoff corridor at all

The open problem is now much better:

  • what $1C76 = 0 changes after both paths have already converged to the shared 02:9016 corridor

That is a much more tractable archaeology target, because it pushes the search away from menu timing drift and into direct post-handoff behavior.

Artifacts

Main promoted artifacts 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.md

Next gate

The next step is to 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 blocker is identifying the first runtime-visible effect of the preserved no-opponent state.

Top comments (0)