From aeec0dab8fffab01afef59f1bacf6944dcff6ef1 Mon Sep 17 00:00:00 2001 From: "Claude (auto)" Date: Thu, 27 Aug 2026 23:58:13 +0000 Subject: [PATCH] re: the leaderboard screen, and a Detail_* prefix trap sub_8219E560 r11, censused against tables.pak exactly like the result screens. 444 instructions, one call site (sub_821A2A80), 100 % of its names are tables.pak names. The 18 names partition exactly: 13 record names + 5 field-only names. The 13 are the 12 Detail_* panel elements plus MISSIONS -- a 0-field record already owned by isl-condition-builtins.md and challenge-mission-gate.md, so not new. The five field-only names are the screen's parameters: DETAIL_TITLE, one field in each of six mode records (ScoreAttack, TimeAttack, Extra01..Extra04), and Detail_Board_{Permanent,Monthly,Friend,Self}, four fields of CHIPS -- the board scopes. All 12 Detail_* record names are in the code block, zero residual -- the opposite of the boss motions, where the block was a 25-of-55 subset. The panel is Rank, GamerTag, Main_{Time,Points}_{Self,Live}, Warships, Warplanes, Weapon_{Nose,Main1,Main2,Main3}: your figure against the selected entry's, plus that pilot's kills and four weapon slots. _Live, GamerTag and the Friend/Monthly boards make it the Xbox Live detail view. The trap worth keeping: tables.pak has 12 Detail* RECORD names and 12 Detail* FIELD names, and they are DISJOINT (0 overlap). The fields are a different axis -- 4 board scopes + 6 modes + Detail_Window_{Known,Unknown}. A Detail_* name means nothing until you say whether it is a record or a field. Not settled: what Detail_Window_Known/_Unknown switch between, and whether Extra01..04 map onto the four challenge missions. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE --- docs/re/BACKLOG.md | 37 ++++++++++++++ docs/re/INDEX.md | 1 + docs/re/structures/leaderboard-screen.md | 62 ++++++++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 docs/re/structures/leaderboard-screen.md diff --git a/docs/re/BACKLOG.md b/docs/re/BACKLOG.md index a0fbef14..98d7bb12 100644 --- a/docs/re/BACKLOG.md +++ b/docs/re/BACKLOG.md @@ -5460,3 +5460,40 @@ rather than five parameters. 🟑 Not settled: whether `attackC` is reachable by index rather than by name; what `eff_s900_e_Charge` attaches to; and the other three shortlisted rows (`sub_8219E560` leaderboard, `sub_825F2CF0`/`sub_825F2F88` post-processing). + +--- + +## βœ… 2026-08-27 β€” the leaderboard screen, and a `Detail_*` prefix trap + +Item (a): `sub_8219E560 r11`, censused against `tables.pak` exactly like the +result screens. New doc `docs/re/structures/leaderboard-screen.md`. Static only; +no artefact changed. + +βœ… **The 18 names partition exactly: 13 `tables.pak` record names + 5 field-only +names.** The 13 are the **12 `Detail_*` panel elements** plus **`MISSIONS`** β€” a +0-field record already owned by `isl-condition-builtins.md` and +`challenge-mission-gate.md`, so not new. 444 instructions, **one** call site +(`sub_821A2A80`), 100 % of the names are `tables.pak` names. + +The five field-only names are the screen's parameters: **`DETAIL_TITLE`**, one +field in each of six **mode** records (`ScoreAttack`, `TimeAttack`, +`Extra01…Extra04`), and **`Detail_Board_{Permanent,Monthly,Friend,Self}`**, four +fields of `CHIPS` β€” the board **scopes**. + +βœ… **All 12 `Detail_*` record names are in the code block β€” zero residual**, the +opposite of the boss motions (a 25-of-55 subset). The panel is +`Rank`, `GamerTag`, `Main_{Time,Points}_{Self,Live}`, `Warships`, `Warplanes`, +`Weapon_{Nose,Main1,Main2,Main3}` β€” your figure against the selected entry's, +plus that pilot's kills and four weapon slots. `_Live`, `GamerTag` and the +Friend/Monthly boards make it the **Xbox Live** detail view. + +πŸ”‘ **The trap worth keeping: `tables.pak` has 12 `Detail*` RECORD names and 12 +`Detail*` FIELD names, and they are DISJOINT (0 overlap).** The fields are a +different axis β€” 4 board scopes + 6 modes + `Detail_Window_{Known,Unknown}`. +**A `Detail_*` name means nothing until you say whether it is a record or a +field**; counting "24 `Detail_*` things" would merge two unrelated tables. + +🟑 Not settled: what `Detail_Window_Known`/`_Unknown` switch between; whether +`Extra01…04` map onto the four challenge missions the corpus knows. And the last +shortlisted row (`sub_825F2CF0`/`sub_825F2F88` post-processing, two functions on +one base) is still unopened. diff --git a/docs/re/INDEX.md b/docs/re/INDEX.md index a838470a..2b018a8b 100644 --- a/docs/re/INDEX.md +++ b/docs/re/INDEX.md @@ -104,6 +104,7 @@ files, which is how the same ground got covered twice. | [`structures/isl-mission-timer.md`](structures/isl-mission-timer.md) | The mission timer β€” two sequential countdowns, not a limit and a warning | βœ… CONFIRMED β€” read from `sub_822639B8`; the threshold reading is | | [`structures/archive-naming.md`](structures/archive-naming.md) | Which archives the disc can name β€” 100% for menu paks, **0.0%** for the six 2D paks and `GP_READY_ROOM` | βœ… CONFIRMED β€” 6027 names Γ— 16 prefixes, bimodal; unnamed entries split by content β€” three UI paks have ZERO unnamed IDXD (artwork only), DefTables is the only real data gap (1295 LOD/motion tables); **route 2 = the `Enumerate` declaration tables** closes DefTables to 1413/1425 IDXD (99.2 %), 12 left; XPR2 manifests refuted as a naming source | | [`structures/stage16-boss.md`](structures/stage16-boss.md) | The Stage 16 boss end to end β€” object, loader `sub_82315AE8`, collision | βœ… CONFIRMED β€” 19/19 of the loader's names are `Guardian`/`Core` fields; 5 disc fields have no string in the image (two same-length controls do) | +| [`structures/leaderboard-screen.md`](structures/leaderboard-screen.md) | The leaderboard screen β€” `sub_8219E560`, 12 panel elements, 4 board scopes, 6 modes | βœ… CONFIRMED β€” 18 names = 13 records + 5 fields; all 12 `Detail_*` records named, zero residual; ⚠️ 12 `Detail*` records and 12 `Detail*` fields are DISJOINT | | [`structures/result-screens.md`](structures/result-screens.md) | The debriefing and pilot-record screens β€” `STAGE_RESULT` 21 fields, `OVERVIEW` 9, `EX_OVERVIEW` 7 | βœ… CONFIRMED β€” the compiled key lists `sub_822814D8` (24/24) and `sub_8227A3A0` (21/21) match the `tables.pak` records exactly; `2+21+1=24`, `5+7+9=21` | | [`structures/player-tuning-tables.md`](structures/player-tuning-tables.md) | **`PlayerParams`** β€” the player parameter table: `Booster` flight model, special attacks, 8 analog curves, the S16 boss | βœ…βœ… `sub_822F9498` is `PlayerParams`'s loader, not the unit loader; **the analog block's reader SOLVED β€” `sub_821A6CF0`, base `0x820A1630`**, via the new base-solver (277 name-block loaders image-wide, control 217/226 on `sub_82341A20`); 🟑 nothing selects `Booster` | | [`structures/hud-config.md`](structures/hud-config.md) | The in-game HUD configuration β€” 16 records, 419 asset paths, and a per-stage `ResourceTable` | βœ… CONFIRMED β€” 0 of 419 config paths resolve as pak entries | diff --git a/docs/re/structures/leaderboard-screen.md b/docs/re/structures/leaderboard-screen.md new file mode 100644 index 00000000..1f75cbb1 --- /dev/null +++ b/docs/re/structures/leaderboard-screen.md @@ -0,0 +1,62 @@ +# βœ… The leaderboard screen β€” `sub_8219E560`, and a `Detail_*` prefix trap + +- **Key list:** `sub_8219E560` `r11`, base `0x820A0000`, **18 names, 100 % of them + `tables.pak` names**; 444 instructions, **one** call site (`sub_821A2A80`). +- **Related:** [[result-screens]] (the same compiled-key-list shape), + [[savegame-format]] (where that shape was first documented). + +## βœ… The 18 partition exactly + +| | | +|---|---:| +| `tables.pak` **record** names | **13** | +| **field**-only names | **5** | + +`13 + 5 = 18`. The 13 are the **12 `Detail_*` panel elements** plus **`MISSIONS`** +β€” a 0-field record already owned by [[isl-condition-builtins]] and +[[challenge-mission-gate]] as an IDXD record key, not a new thing. + +The five field-only names say how the screen is parameterised: + +* **`DETAIL_TITLE`** β€” one field in **each of six mode records**: `ScoreAttack`, + `TimeAttack`, `Extra01`, `Extra02`, `Extra03`, `Extra04`. +* **`Detail_Board_{Permanent, Monthly, Friend, Self}`** β€” four fields of `CHIPS`, + the four board scopes. + +βœ… **And all 12 `Detail_*` record names are in the code block β€” zero residual.** +That is worth stating because the boss motions went the other way: there the +block was a 25-of-55 subset. Here the code names the whole population. + +## The detail panel β€” 12 elements + +``` +Detail_Rank Detail_GamerTag +Detail_Main_Time_Self Detail_Main_Time_Live +Detail_Main_Points_Self Detail_Main_Points_Live +Detail_Warships Detail_Warplanes +Detail_Weapon_Nose Detail_Weapon_Main1/Main2/Main3 +``` + +`_Self` beside `_Live` for both time and points, `GamerTag`, and Friend/Monthly +boards β€” this is the **Xbox Live** leaderboard detail view: your own figure +against the selected entry's, plus that pilot's kill counts and the four weapon +slots they flew. + +## πŸ”‘ The trap: two disjoint 12-element `Detail*` populations + +`tables.pak` has **12 `Detail*` record names and 12 `Detail*` field names, and +they do not overlap at all** (0 of 12). The fields are a different axis entirely: + +``` +Detail_Board_{Permanent,Monthly,Friend,Self} the four scopes +Detail_{ScoreAttack,TimeAttack,Extra01..Extra04} the six modes +Detail_Window_{Known,Unknown} two window states +``` + +**A `Detail_*` name means nothing until you say whether it is a record or a +field** β€” the same prefix indexes the panel's elements on one side and the +screen's mode/scope selectors on the other. Counting "24 `Detail_*` things" would +be counting two unrelated tables together. + +🟑 Not settled: what `Detail_Window_Known` / `_Unknown` switch between, and +whether `Extra01…04` map onto the four challenge missions the corpus knows.