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:
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user