diff --git a/docs/re/BACKLOG.md b/docs/re/BACKLOG.md index f6ecac5e..c81a5b62 100644 --- a/docs/re/BACKLOG.md +++ b/docs/re/BACKLOG.md @@ -5970,3 +5970,52 @@ n = 1, not chased. 🟔 Still open: what `Placement_*`/`RouteTest_*` are *for*; the two variants' file names; why `S28_p1` has an asteroid volume with no definition. + +--- + +## āœ…āœ… 2026-08-28 — every declared table name censused; `NamePlate` holds two vocabularies + +Item (a), from last iteration's n=1 control (`EnumSquadron_Test.tbl` matched no +pak key). Censused properly: **every** declared value disc-wide — the eleven +`Enumerate*` fields plus `MessageSet`, `NamePlate`, `CollisionMeshes`, +`MotionEnumTable`, `LodEnumTable`, `AsteroidDefinition`, `MapMesh`, `MapPath` — +against the 16 630 pak keys under the sixteen path prefixes. + +``` +distinct declared values 344 + resolve to a pak object 313 + do not 31 + NamePlate values that are not file names 27 + _Test tables that were never shipped 4 +``` + +`313 + 27 + 4 = 344`. Every family is complete (`EnumerateUnit` 29/29, +`EnumerateFormation` 29/29, `EnumerateNullFrame` 29/29, `EnumerateAIParams` +23/23, `CollisionMeshes` 18/18, `AsteroidDefinition` 9/9, `MapMesh` 11/11, +`MapPath` 11/11, `LodEnumTable` 7/7, `MotionEnumTable` 7/7, +`EnumerateSubobjective` 17/17, `EnumerateWeapon` 3/3) except the four below. + +šŸ”‘ **`NamePlate` carries two disjoint vocabularies, split by owning record.** +`StageResource.NamePlate` (174 uses) holds **file names** — `nameplate_S01.tbl` …, +**24 distinct, 24/24 resolve**. `Generic.NamePlate` (522 uses) holds **bare plate +ids** — `NP_Cyclops`, `NP_Gargantua`, `ACROPOLIS`, `OTHERENEMY`, **27 distinct, +0/27 resolve**, none with a dot. Zero crossover. The 27 "missing" are a category +error, not missing data — the `Detail*` trap in a new field. [[unit-group-table]] +and [[stage-definition-table]] already record the `NP_*` plate vocabulary; what +neither says is that **the field name is shared between the plate and its table**. + +šŸ”‘ **The four genuinely dangling names are all the template's own** — +`EnumCharacter_Test.tbl`, `EnumLocalString_Test.tbl`, `EnumSquadron_Test.tbl`, +`StageMessageSet_test.tbl` — and in each of those four families the count is +`nāˆ’1 / n` with the `_Test` entry the sole miss. The `_Test` stage record declares +four tables that were never shipped. **Every non-`_Test` declaration resolves.** + +āœ… **A corpus ā” closed on the way past.** [[stage-mission-tables]] recorded +`StageMessageSet_S02.tbl` as "not in `GP_MAIN_GAME_E.pak` under that name (ā”, +probably localised elsewhere)". It **is** there: +`name_hash("message\" + "StageMessageSet_S02.tbl")` = key **705319170**, in all +six packs. The stage family uses `stage\`; the message tables use **`message\`**. +Right instinct, wrong mechanism — same pak, different prefix. + +🟔 Not settled: why `S28_p1` has an asteroid volume with no definition; what +`Placement_*`/`RouteTest_*` are for; the two unnamed `_Test` variant objects. diff --git a/docs/re/structures/stage-definition-table.md b/docs/re/structures/stage-definition-table.md index 1e0de939..e872d394 100644 --- a/docs/re/structures/stage-definition-table.md +++ b/docs/re/structures/stage-definition-table.md @@ -182,3 +182,48 @@ than a hash, but that is untested. candidates are `Formation_*.tbl` and `EnumSquadron_Test.tbl`. * S17–S23 stage records. S17 also has no `UnitGroup_S17.tbl`, so its whole stage is absent from `GP_MAIN_GAME_E.pak` rather than merely unnamed. + +## āœ… Every declared table name, censused against the pak TOC (2026-08-28) + +The stage record's fields *declare* other tables by file name. Taking **every** +such value disc-wide — the eleven `Enumerate*` fields plus `MessageSet`, +`NamePlate`, `CollisionMeshes`, `MotionEnumTable`, `LodEnumTable`, +`AsteroidDefinition`, `MapMesh`, `MapPath` — and asking which resolve to a pak +key under the sixteen path prefixes: + +``` +distinct declared values 344 + resolve to a pak object 313 + do not 31 + NamePlate values that are not file names 27 + _Test tables that were never shipped 4 +``` + +`313 + 27 + 4 = 344`. Per field, every family is complete +(`EnumerateUnit` 29/29, `EnumerateFormation` 29/29, `EnumerateNullFrame` 29/29, +`EnumerateAIParams` 23/23, `CollisionMeshes` 18/18, `AsteroidDefinition` 9/9, +`MapMesh` 11/11, `MapPath` 11/11, `LodEnumTable` 7/7, `MotionEnumTable` 7/7, +`EnumerateSubobjective` 17/17, `EnumerateWeapon` 3/3) — **except** the four below. + +### šŸ”‘ `NamePlate` carries two disjoint vocabularies, split by owning record + +| owner | uses | values | shape | resolve | +|---|---:|---:|---|---| +| `StageResource` | 174 | **24** | `nameplate_S01.tbl` … — file names | **24 / 24** | +| `Generic` | 522 | **27** | `NP_Cyclops`, `NP_Gargantua`, `ACROPOLIS`, `OTHERENEMY` — bare ids | **0 / 27** | + +Every dotted value resolves; **no** undotted value does, and the split is exactly +by owning record family with zero crossover. So the 27 "missing" are a category +error, not missing data — the same `Detail*` trap in a new field. +[[unit-group-table]] and this document already record the `NP_*` plate vocabulary +for capital ships; what neither says is that **the `NamePlate` field name is +shared between the plate id and the plate *table*.** + +### šŸ”‘ The four genuinely dangling names are all the template's own + +`EnumCharacter_Test.tbl`, `EnumLocalString_Test.tbl`, `EnumSquadron_Test.tbl`, +`StageMessageSet_test.tbl` — and in each of those four families the count is +`nāˆ’1 / n` with the **`_Test` entry as the sole miss**. The `_Test` stage record +declares four tables that were never shipped, which is what a template that was +only partly filled in looks like. Every non-`_Test` declaration on the disc +resolves. diff --git a/docs/re/structures/stage-mission-tables.md b/docs/re/structures/stage-mission-tables.md index 6313ff7a..e421cc33 100644 --- a/docs/re/structures/stage-mission-tables.md +++ b/docs/re/structures/stage-mission-tables.md @@ -53,7 +53,13 @@ MotionResource MotionEnumTable = DefTables.pak+EnumGameModel_test.tbl **A stage is divided into `Phase_N` blocks** — three for Stage 02 — each naming its own map path, map mesh, asteroid definition and background. `--follow` resolves every table above except `StageMessageSet_S02.tbl`, which is not in -`GP_MAIN_GAME_E.pak` under that name (ā”, probably localised elsewhere). +`GP_MAIN_GAME_E.pak` under that name. + +āœ… **Closed 2026-08-28 — it is there, under a different path prefix.** +`name_hash("message\" + "StageMessageSet_S02.tbl")` = key **705319170**, present +in all six `GP_MAIN_GAME_*` packs. The stage family resolves under `stage\`; the +message tables use **`message\`**. "Probably localised elsewhere" was the right +instinct and the wrong mechanism: same pak, different prefix. ## āœ… `Route_S.tbl` — the arrival paths, bound to squadron *and* phase