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.

View File

@@ -182,3 +182,48 @@ than a hash, but that is untested.
candidates are `Formation_*.tbl` and `EnumSquadron_Test.tbl`.
* S17S23 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
`n1 / 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.

View File

@@ -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<NN>.tbl` — the arrival paths, bound to squadron *and* phase