From 9bf1973e27afacc62fe2c94905fd2df7b27b5699 Mon Sep 17 00:00:00 2001 From: Sylpheed RE agent Date: Fri, 28 Aug 2026 03:13:21 +0000 Subject: [PATCH] re: every declared table name censused; NamePlate holds two vocabularies 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 16630 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 etc, 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, so the 27 "missing" are a category error. 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. Every non-_Test declaration resolves. Closed a corpus question 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\. All fifteen artefacts byte-identical. --- docs/re/BACKLOG.md | 49 ++++++++++++++++++++ docs/re/structures/stage-definition-table.md | 45 ++++++++++++++++++ docs/re/structures/stage-mission-tables.md | 8 +++- 3 files changed, 101 insertions(+), 1 deletion(-) diff --git a/docs/re/BACKLOG.md b/docs/re/BACKLOG.md index f6ecac5..c81a5b6 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 1e0de93..e872d39 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 6313ff7..e421cc3 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