re: Stage30-33 do not exist; AIParams is missing for exactly the tutorials

Probing pak entry names with name_hash across all 41 paks:
UnitGroup_SNN.tbl exists for exactly S01-S16 and S18-S29 = 28 stages.
S17 and S30-S33 are absent, so the 33-entry STAGENN_UNIT_MAX table is
headroom over a 28-stage game.  Control is built in: 28 hits from 33
probes shows the loop resolves entry names.

Corroboration that fell out of it: AIParams_SNN.tbl exists for S01-S16
and S24-S29 but is missing for exactly S18-S23 -- the six stages the
corpus identified as tutorials by a completely different route (their
lone guard is request_next() != 1).  Two unrelated methods, same six.

Stage_SNN.tbl probes find 0, which is expected: stagetbl.py documents
that the per-stage record is not name-addressed.

Drops the [phase+356]/[phase+360] consumer question: 243 non-stack lwz
reads from those offsets image-wide, and the only ISL-region hits are
the two writers plus two vtable calls.  Not a cheap static question.

Docs only; artefacts byte-identical.
This commit is contained in:
Sylpheed RE agent
2026-08-27 11:40:29 +00:00
parent 731c3cd849
commit 49b5892df5
2 changed files with 54 additions and 0 deletions

View File

@@ -692,6 +692,31 @@ unknown, what evidence exists, and what the first step would be. Move an item in
🟡 Still open: who CONSUMES `[phase+356]`/`[phase+360]`; whether `Stage30`–`Stage33`
exist; and the fallbacks behind the other 64 sections.
* ✅🟡 **(2026-08-27) `Stage30`–`Stage33` DO NOT EXIST — the 33-slot table is
headroom; and the `[phase+356]/[phase+360]` consumer is NOT findable by offset.
[structures/isl-condition-builtins](structures/isl-condition-builtins.md).**
✅ Probing pak entry names (`name_hash` — the right hash for *entry* names)
across all 41 paks: **`UnitGroup_SNN.tbl` exists for exactly S01–S16 and
S18–S29 = 28 stages**; S17 and S30–S33 absent. The control is built in — 28
hits from 33 probes proves the loop resolves entry names. So the 33-entry
`STAGENN_UNIT_MAX` table is oversized headroom over a 28-stage game, and the
gate's `!= 16` skip of STAGE17 lines up with a stage that genuinely has no data
of any kind.
🔑 **An independent corroboration fell out of it.** `AIParams_SNN.tbl` exists
for S01–S16 and S24–S29 (22) — **missing for exactly S18–S23**, precisely the
six stages the corpus identified as the TUTORIALS by a completely different
route (their only dominating condition is `request_next() != 1`). Tutorials
ship no AI parameters. Two unrelated methods, same six stages.
🟡 `Stage_SNN.tbl` probes find 0 — expected, not a failure: `stagetbl.py`
documents that the per-stage record is *not* name-addressed and must be found
by content.
🔴 **Dropping the `[phase+356]`/`[phase+360]` consumer.** Image-wide there are
**243 non-stack `lwz` reads from +356/+360**, across UI, sound, render and
script code — the offsets are far too common to attribute. Inside the ISL region
the only hits are the two writers plus two **vtable calls** (`0x82273400` slot
90, `0x82290ED8`). This needs type information the offset index does not carry;
it is not a cheap static question and should not be reopened as one.
## ✅✅ SOLVED — the mission freeze was a modal sign-in dialog (2026-08-26)
`XamShowSigninUI` opens a modal dialog and `xeXamDispatchDialog` blocks the