re: the 95 BASE_INFO screens partitioned - BASE_INFO discriminates screen-config from table-read

Item (a): mine the screen population found last iteration. Resolving every one's
key list via the string-xref join over its own body gives 298 distinct keys and a
three-way split: 95 = 9 corpus-known + 48 new with a readable key list + 38 bare,
where "bare" means BASE_INFO and nothing else. The bare 38 are the honest limit
of the instrument - a screen whose only catalogued string is BASE_INFO cannot be
named this way.

The control turned the finding into a law. Only 9 of the 19 loaders the corpus
documents appear among the 95, and which nine is not arbitrary. The nine that
reference BASE_INFO all read a SCREEN's own configuration: debriefing, career,
save, medals, evaluation list, gamma, POINT_RANKING, CLEAR_TIME_RANKING, hangar.
The ten that do not all read a DATA TABLE: unit definitions, weapon datasheet,
AIParams, stage settings, chatter, PlayerParams, ControlTweak, the PG* HUD
roster, material slots, and the leaderboard. 9/9 and 10/10, both off-diagonals
empty. The leaderboard falling on the table side is a check rather than an
exception - its own doc records that all 18 of its names are tables.pak names, so
it is a table reader that happens to paint a screen. That exclusion is what last
commit's "universal screen marker" claim was missing.

48 new screens are named by their most distinctive keys, including the title
screen (sub_821C4EB0: TITLE_SCREEN/TITLE_MENU/LOADING), the ready room
(sub_821D6D28: SCRIPT_ID/SCRIPT_PATH, confirmed independently by its own error
string silph::GamePart_ReadyRoom::Impl::PrepareScript), movie subtitles, the
three menu modes STANDARD/EXTRA/TUTORIAL, the speaker window, loadout and gallery
views, mission select, and an equip screen carrying the game's own typo
EQUIIP_LIMITATION.

One caution worth recording: a high key count is not a rich screen. The two
27-key entries sub_82297550 and sub_822A2F00 resolve to pure coordinate pairs
(1080,163 / 734,502 / 1164,403) - a layout table, not configuration. Read the
values before trusting the rank.

Still open: the 38 bare screens, and whether the EX_ in EX_MENU_DISABLE_SKIP and
EX_LETTERS is the same EXTRA mode word as +184.

All seventeen artefacts byte-identical.
This commit is contained in:
Sylpheed RE agent
2026-08-28 11:58:51 +00:00
parent 80406ce3e4
commit 0ace5db7c7
2 changed files with 92 additions and 0 deletions

View File

@@ -290,3 +290,65 @@ So the direction inverts: **`BASE_INFO` is the universal first key of every
screen key list — a 95-function population** — while the 5-slot/88-byte shape is
only a **weak** filter that happens to catch 10 of them (and 6 non-screens). Use
`BASE_INFO` to enumerate screens; do not use the vtable shape.
### ✅ The 95 `BASE_INFO` functions, partitioned — and what `BASE_INFO` actually discriminates
Mining the population found last iteration. Resolving every one's key list (the
string-xref join over the function's own body) gives **298 distinct keys** and a
three-way split:
| | |
|---|---:|
| already documented in the corpus | **9** |
| **new**, with a readable key list | **48** |
| **bare**`BASE_INFO` and nothing else | **38** |
`9 + 48 + 38 = 95`. The bare 38 are the honest limit of this instrument: a screen
whose only catalogued string is `BASE_INFO` cannot be named from its key list.
#### 🔑 The control turned it into a law
Only **9 of the 19** loaders the corpus documents appear among the 95. Reading
which nine, against which ten, the split is not arbitrary:
| references `BASE_INFO` (9 of 9) | does **not** (10 of 10) |
|---|---|
| debriefing, career, save, medals, evaluation list, gamma, `POINT_RANKING`, `CLEAR_TIME_RANKING`, hangar | unit definitions, weapon datasheet, `AIParams`, stage settings, chatter, `PlayerParams`, `ControlTweak`, `PG*` HUD roster, material slots, **leaderboard** |
**`BASE_INFO` separates a screen's own config from a data-table read — 9/9 and
10/10, both off-diagonals empty.** Every function in the left column reads the
configuration of a *screen*; every one in the right reads a *table*
(`tables.pak`, a datasheet). The leaderboard sits on the right, correctly — its
own doc records that all 18 of its names are `tables.pak` names, so it is a table
reader that happens to paint a screen.
That is what last iteration's "universal screen marker" claim needed: a
population it *excludes*.
#### What the 48 new screens are
Named by their most distinctive keys:
| function | keys | reading |
|---|---|---|
| `sub_821C4EB0` | `TITLE_SCREEN`, `TITLE_MENU`, `LOADING`, `LOADING2` | the title screen |
| `sub_821D6D28` | `SCRIPT_ID`, `SCRIPT_PATH` + its own error string `silph::GamePart_ReadyRoom::Impl::PrepareScript` | **the ready room** |
| `sub_8219F6D0` | `LIVE_BOARD`, `LOCAL_BOARD`, `LIVE_FOCUS`, `LOCAL_FOCUS`, `DEBRIEFING`, `DETAIL` | the board/focus selector |
| `sub_821B26F8`, `sub_821B1448` | `NO_RECORD`, `RECORD_DIFFICULTY`, `%02d:%02d.%02d` | record display, with a time format |
| `sub_821BDF88`, `sub_821BDBB0` | `STANDARD_MENU`, `EXTRA_MENU`, `TUTORIAL_MENU` | the three menu modes |
| `sub_821AE188`, `sub_821AED00` | `SPEAKER_FONT`, `SPEAKER_HEIGHT`, `IN_DEMO`, `WINDOW` | the speaker/dialogue window |
| `sub_821B55D8` | `SUBTITLE_FONT`, `SUBTITLE_Y` + `silph::SoundManager::Impl::SetMovieM…` | movie subtitles |
| `sub_8229F018` | `PlayerLOD`, `PlayerMotion`, `PlayerPackage`, `MODEL_PATH` | the player-model viewer |
| `sub_8229E878`, `sub_822A8EF0` | `PlayerUnit`, `WEAPON`, `WEAPONS`, `UnitID` | loadout views |
| `sub_82299448`, `sub_822A46B8` | `WEAPON_CATEGORIES`, `OBJ_GALLERY`, `OBJ_MENU_DELTA_SABER`, `MAP_PYLON` | the gallery / arsenal menu |
| `sub_821849E8` | `CHALLENGE`, `NEW_ITEM`, **`EQUIIP_LIMITATION`** | an equip screen — note the game's own typo, a join key |
| `sub_8218AE58` | `MISSIONS`, `MISSION_ID`, `STRINGS` | mission select |
| `sub_82198120`, `sub_82198808` | `MENU_ENABLE_SKIP`, `MENU_DISABLE_SKIP`, `EX_MENU_DISABLE_SKIP` | skip gating, with its own `EX_` variant |
⚠️ **Two of the 27-key entries are not key lists at all.** `sub_82297550` and
`sub_822A2F00` resolve to pure coordinate pairs — `1080,163`, `734,502`,
`1164,403` — i.e. a **layout table**, not configuration. A high key count does
not mean a rich screen; read the values before believing the rank.
🟡 Not settled: the 38 bare screens, and whether the `EX_` variant seen in
`EX_MENU_DISABLE_SKIP` / `EX_LETTERS` is the same `EXTRA` mode word as `+184`.