From 0ace5db7c77208416c6af279305761efe3fbe531 Mon Sep 17 00:00:00 2001 From: Sylpheed RE agent Date: Fri, 28 Aug 2026 11:58:51 +0000 Subject: [PATCH] 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. --- docs/re/BACKLOG.md | 30 ++++++++++++++ docs/re/structures/result-screens.md | 62 ++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/docs/re/BACKLOG.md b/docs/re/BACKLOG.md index 5f25837..43ced93 100644 --- a/docs/re/BACKLOG.md +++ b/docs/re/BACKLOG.md @@ -6998,3 +6998,33 @@ functions: **10 inside the family, 85 outside** (`95 = 10 + 85`), including `sub_82286BC8` and `sub_822AE628`. **`BASE_INFO` is the universal screen-key-list marker; the vtable shape is only a weak filter.** Enumerate screens by `BASE_INFO`, not by vtable shape. + +--- + +## ✅ 2026-08-28 — the 95 `BASE_INFO` screens partitioned; `BASE_INFO` discriminates screen-config from table-read + +Item (a). Resolving every one's key list gives **298 distinct keys** and +`95 = 9 corpus-known + 48 new with keys + 38 bare (BASE_INFO only)`. + +🔑 **The control made it a law.** Only **9 of the 19** documented loaders are +among the 95, and the split is exact: the **9** that read a *screen's own config* +(debriefing, career, save, medals, evaluation list, gamma, `POINT_RANKING`, +`CLEAR_TIME_RANKING`, hangar) reference `BASE_INFO`; the **10** that read a +*data table* (unit defs, weapon datasheet, `AIParams`, stage settings, chatter, +`PlayerParams`, `ControlTweak`, `PG*` HUD, material slots, **leaderboard**) do +not. **9/9 and 10/10 — both off-diagonals empty.** The leaderboard falls on the +table side correctly: its own doc records all 18 of its names as `tables.pak` +names. + +✅ **48 new screens named**, including the **title screen** (`sub_821C4EB0`), the +**ready room** (`sub_821D6D28`, confirmed by its own error string +`silph::GamePart_ReadyRoom::Impl::PrepareScript`), movie subtitles, the three +menu modes, mission select, and an equip screen carrying the typo +**`EQUIIP_LIMITATION`**. + +⚠️ **A high key count is not a rich screen** — `sub_82297550` and `sub_822A2F00` +(27 "keys" each) resolve to pure coordinate pairs (`1080,163`, `734,502`): a +**layout table**, not configuration. Read the values before trusting the rank. + +🟡 Open: the 38 bare screens cannot be named by key list. 🟡 Whether the `EX_` +in `EX_MENU_DISABLE_SKIP` / `EX_LETTERS` is the `+184` `EXTRA` word. diff --git a/docs/re/structures/result-screens.md b/docs/re/structures/result-screens.md index 42014ca..70217ae 100644 --- a/docs/re/structures/result-screens.md +++ b/docs/re/structures/result-screens.md @@ -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`.