# Standalone playoff player counts — 2026-10-26-r21

Original New Playoffs (best of one), New Playoffs /7 and Continue Playoffs now
offer One, Two - Teammates, Three - Teammates, Four - Teammates and the existing
Two - Head to Head. The preference survives native results, quitting, cold
boot and returning from Full/Light/Mini. Three/Four needs both ports on6-button
4-Way Play (1281); without it the effective count is Two, preserving the saved
Three/Four preference for the next adapter boot. Old contexts without a saved
count default to One; select the desired count once. Brackets/results remain.

## Implementation

Original native playoffs explicitly skip Three/Four and the Continue cursor
skips Players. seasonplayers.s now dispatches F7ABA/F7BAA through +44writer and
+48display wrappers for standalone playoff Players only; season handlers stay
unchanged. The cursor predicate at+24 also exposes standalone Continue Players.
New API+28loads native count,+32steps,+36labels,+40applies native sides. Native
One/co-op/head-to-head CEF0 encodings are0/1/2 without adapter and0/3/4 with it.
The native bracket still chooses P1's club/side; P2 is teammate or opponent.
mtap.s expands Three/Four on that same side. Shootouts bypass custom assignment,
retaining their two-actor P1/P2 rotation. CPU/opposing goalie paths stay native.

NCOUNT is FFF0DA (1One,2TwoCoop,3Three,4Four,5TwoHeadToHead;5 is not five players).
The optional **NC,count,~count** record uses logical SRAM2E14..2E17, physical
205C29, immediately after the standalone NPO1 context. This is the Full bank's
shared-profile gap, skipped by season copies. Writing NC updates that bank's
checksum and preserves the context's238bytes and own checksum. slots.ctxload
loads it with the mapper already enabled. Season **PC** preferences at1EF0 and
RAMFFF0D0 are separate. Module sizes: seasonplayers1222,mtap284,slots1562 bytes.

## Tests and release

verify_native_players.py:10 cases across both original formats and all five
choices, native OT winning goal, native result/password/save,18 cold resumes
including adapter->ordinary->adapter. Full1/Light2/Mini3/native4 preferences
survive roundtrips and a second core boot. Extra Continue test changes Four to
Three and back using real buttons, checks unchanged password, starts four pads.
Tests wait for both the context checksum and Full-bank checksum: a core video
yield may occur in the middle of a native save. Private test copies only.

Regressions: season count24/48coldstarts,slots20,navigation14/266,font14/3124
calls/zero wrong fonts,goalie88adapter+41ordinary. Four-pad season shootout
results pass for all three formats. Source rebuild byte-identical; guarded
r20->r21 diff1691bytes confined to version/checksum,the two dispatch hooks,
slots,mtap and seasonplayers. Original-base IPS231575bytes verified.

SHA25637feaa90d54806517026d26e67e5fb77ff4992408f3ce26c458f2302f0c38759;
CRCADE85330. Replaces r20 locally/site/Bodin's same playlist item, save/remap
hashes preserved. Evidence: private work/native-playoff-players-20261026-141724/.

```sh
python3 tools/experimental/verify_native_players.py /private/current.bin /private/native-tests --seed /private/preferences.srm
```
