# Selected statistics header and page boundaries — 2026-10-25-r27

## Statistics alignment and footer spacing (2026-10-25-r29)

Club skater and goalie headings move one character left to match the values:
column ends23/27/31/35. Leader column ends26/30/34/38 remain correct. Both
screens move headers to row6 and all18 skater rows to7..24, leaving row25
completely free of text above Xbox help26 and footer27. Page2's goalie block
also moves up one row. All players, numeric positions, inputs and saves stay
unchanged. Orange selection now uses row6 C600 and club PTS29/G23/A27;
leaders use +3 columns. seasonend3926 bytes,2E3000..2E3F55,170 bytes below trail.
347 native browser checks pass, including selected glyphs, both planes' empty
spacer row, boundary redraw counters and unchanged SRAM. Fresh production-safe
champion preview, exact rebuild, guarded591-byte UI/title/checksum diff and
original-base IPS reconstruction pass. Source/site/screenshot/docs updated;
r29 replacesr28 locally, Downloads, site and Bodin's same item with saves/remaps
carried. Private evidence:work/stats-spacing-20261025-234630/.
SHA256bd4eb6465d81e72b7a07dcffcee1093719a370eb049307ecf5d100007946bcc7,
CRC8170380A. release.json is authoritative for the current version.


## Xbox sorting-button help (2026-10-25-r28)

Both end-of-season statistics pages now explicitly show
"Sort: Xbox B / Mega Drive C" above the original footer. This is the same
sorting action on the existing six-button remap; the input code is unchanged.
Retains r27's orange G/A/PTS heading and no page-boundary redraw. Module3928
bytes,2E3000..2E3F57,168 bytes below trail.347 native browser checks, fresh
production-safe champion preview, exact rebuild and original-base IPS pass.
Guarded UI/title/checksum diff:1896 bytes vsr27,3215 vsr26. Details and memory
map:STATS_DISPLAY.md. Newr28 replacesr27 locally, Downloads, site and Bodin's
same item; saves/remaps carried.
SHA256990a751d77fe5b7a4b2fdb46c606ce36e9a604ba34ffe6a75e1c3346be505e81,
CRCF96D9E75. release.json is authoritative for the current version.


The end-of-season club browser and Scoring Leaders colour the selected G, A or
PTS heading orange. C still cycles Points / Goals / Assists, on either pad.
Changing clubs, tabs or pages retains the selected heading. GF/GA in the team
standings are not selectable sort columns; their behaviour is unchanged.

Up on the first club page and Down on the second now return straight to the
input loop. Previously both keys called screen setup, rebuilt the same page
and faded it in again, even though the page had not changed.

## Implementation

`experimental/seasonend.s`: `highlight` runs immediately after the native column
header is drawn, in both `ppage` and `lpage`. Reads only the selected glyph(s),
copies them into VRAM B040..B09F (tiles582..584), changes foreground nibble1 to14
and points only the selected header cells at those copies. Shadow and glyph
shape remain intact. Palette0 colour14 in the fade target at FFBD44 is006E
(orange). table.s setup resets it on every new screen. No static RAM, SRAM,
native font data, gameplay or save-format change.

The native plane is128 cells wide: row7 starts at C700, not C380. Club PTS is
columns30..32, G24, A28; leaders are two columns farther right. The copies use
the disabled window area after table.s's qualification tiles B000/B020 and
below the sprite table BC00. Do not put them at F000: that is the front plane's
row16 and would corrupt unrelated text. Screen comparisons caught and removed
that private trial before release.

SR/interrupt mask and D0..D7/A0..A4 are preserved across the direct VDP accesses.
VDP reads/writes use the native auto-increment2. Module is3880 bytes at
2E3000..2E3F27;216 bytes remain before the flame trail at2E4000.

## Verification and delivery

`experimental/verify_season_browser.py` has347 native input checks:32 clubs,
three tabs, goalie pages, both pads, sorting, leaders/back/exit. Private probes
count setup calls and assert zero additional redraws on Up/top and Down/bottom.
Serialized native VRAM checks verify selected and unselected glyphs for every
sort on club and leader screens, including page2. Every SRAM byte remains
identical to the explicit fixture. A paired r26/r27 image differs only inside
the selected PTS glyphs (x240..262,y56..62); all other pixels are identical.

Exact source rebuild, guarded3170-byte diff (seasonend, title/version and ROM
checksum only), absence of private entry/count probes, and IPS reconstruction
against the original v5.1W base pass. A fresh Dallas champion preview state was
prepared for the new code, using a production return address and verified with
the unmodified release ROM through both Start presses back to the main menu.
The local Full championship and Mini bank remain intact. Old states are carried
with unchanged contents, but old CPU positions inside a changed routine are not
used as the new preview.

Version r27 replaces r26 in canonical/Downloads/site ROM+IPS and Bodin's same
playlist item. Six-button remaps and battery saves migrate. Private evidence:
`work/stats-highlight-20261025-233330/`.

SHA256:68f8f60bd60e9058eb2a9d277ada8672ca5bca8fa66b05dfc23b9a2b368ce7e6.
CRC32:B7B97FA0.
