re: SHAB is the per-stage record table -- record 0 is Stage 01, and c is its best time

EXTRAS -> MISSION SELECT renders per-stage records and they match the table.
Stage 01 shows "High Score 4612 P EASY / Best Time 05:24.77 EASY" while SHAB[0]
is (2, 4101, 324773, FILETIME): 324773 ms IS 5m24.773s, the displayed best time.
Sixteen records, sixteen story stages -> the table is indexed by stage, and
record 0 is Stage 01, the only stage this save has cleared.

  a = 2       difficulty of the record (both entries tagged EASY)
  b = 4101    NOT the displayed high score 4612; equals GHAD +24/+28
  c = 324773  best clear time in ms -- confirmed against the screen
  d,e         FILETIME

This also explains the probe that filled SHAB[1] and changed nothing: the table
holds stage RECORDS, not progress, and Stage 02 has never been cleared so its
record is legitimately empty. Promotes the earlier "per-stage result record"
guess to confirmed for the layout.

Route: title -> EXTRAS -> MISSION SELECT. Only cleared stages are selectable (16
d-pad presses never left Stage 01) and the screen has its own difficulty
selector (Y).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-11 20:50:06 +00:00
parent 98b3cf56ac
commit df45a1986b
2 changed files with 31 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

@@ -248,6 +248,37 @@ the Details panel, which makes **a per-stage result record** the obvious 🟡 re
(one stage finished → one record filled). Falsifiable the moment a second stage
is cleared: `SHAB[1]` should fill.
## The `SHAB` table is the per-stage record table — record 0 is Stage 01 ✅
**2026-08-11.** `EXTRAS → MISSION SELECT` renders per-stage records, and they
match the table. For Stage 01 the screen shows
> `High Score 4612 P EASY` · `Best Time 05:24.77 EASY`
and `SHAB[0]` is `(a=2, b=4101, c=324773, FILETIME 2026-07-23 20:07:23)`, where
**`c = 324773 ms = 5 m 24.773 s`** — exactly the displayed best time. With
sixteen records and sixteen story stages (see the `.rdata` section above), the
table is **indexed by stage**, and record 0 is Stage 01 — the only stage this
save has cleared.
| field | record 0 | reading |
|---|---|---|
| `a` | 2 | 🟡 the **difficulty of the record** — the screen tags both entries `EASY`, and 2 is the only value present |
| `b` | 4101 | ❔ **not** the displayed high score (4612). It equals GHAD `+24`/`+28`, so it is a points figure, not the score with bonus |
| `c` | **324773** | ✅ **best clear time, ms**`05:24.77` on screen |
| `d,e` | FILETIME | when the record was set |
This also explains a probe that looked like a dead end: filling `SHAB[1]` changed
nothing on the save screen because the table holds **stage records, not
progress** — and Stage 02, where this save sits, has never been cleared, so its
record is legitimately empty. It promotes the earlier 🟡 "per-stage result
record" guess to ✅ for the layout, with the time field named exactly.
Evidence: [`captures/mission-select-stage01-record.png`](../captures/mission-select-stage01-record.png).
The route is `EXTRAS → MISSION SELECT` from the title menu; only cleared stages
are selectable (16 d-pad presses never left Stage 01), and the screen carries its
own **difficulty selector** (`Y`).
## What this does and does not unlock
It settles the format. It does **not** yet settle which field is stage-unlock