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.
This commit is contained in:
Sylpheed RE agent
2026-08-28 03:13:21 +00:00
parent e222016dfc
commit 9bf1973e27
3 changed files with 101 additions and 1 deletions

View File

@@ -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
`n1 / 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.