re: the Enumerate declaration tables close DefTables (130 -> 1413 of 1425 IDXD)
The string harvest could never name DefTables because those names are not
spelled out as "something.tbl" anywhere on the disc -- they are declared.
An IDXD object whose single record is named Enumerate is a DECLARATION TABLE:
its field NAMES are the names of other objects, each resolving as
name_hash("<field name>.tbl"). EnumLODSet_test.tbl declares 676,
EnumGameModel_test.tbl 360; the disc holds 144 such objects (138 in DefTables,
one in each GP_MAIN_GAME_*) declaring 1298 distinct names.
Route 2 names +1283 entries route 1 could not. 130 + 1283 + 12 = 1425, no
overlap, 99.2 % coverage. Zero partials: of 5 suffixes x 6 prefixes, ('', .tbl)
scored 1036/1036 and every other combination scored 0. Residual in full: 8
declaration tables nothing declares, 2 LOD sets (Model rou_e004 / rou_e013), 2
motion sets; 15 declared names have no pak entry at all.
REFUTED alongside it: the 40 XPR2 manifests are not the naming source -- their
82 Name= values and 82 DataFile/Source paths resolve 0 entries under any of the
5 suffixes. They share the MODEL namespace only: 40 of the 82 appear as the
Model field value inside the tables.
Artefact +17/-18, every line paired, byte-identical across two runs.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
@@ -67,6 +67,66 @@ redo the work.
|
||||
is now iterated **sorted** — a plain `set` gave a different winner for collided
|
||||
hashes on each run and the artefact failed its own byte-identical check.
|
||||
|
||||
## ✅✅ ROUTE 2 — the `Enumerate` declaration tables close `DefTables` (2026-08-27)
|
||||
|
||||
The string harvest could never name `DefTables`, because **those names are not
|
||||
spelled out as `something.tbl` anywhere on the disc**. They are declared instead.
|
||||
|
||||
🔑 **An IDXD object whose single record is named `Enumerate` is a DECLARATION
|
||||
TABLE: its FIELD NAMES are the names of other objects, and each one resolves as
|
||||
`name_hash("<field name>.tbl")`.** `EnumLODSet_test.tbl` declares 676 names,
|
||||
`EnumGameModel_test.tbl` 360 — and the disc holds **144** such objects (138 in
|
||||
`DefTables`, one in each of the six `GP_MAIN_GAME_*`), declaring **1 298**
|
||||
distinct names between them.
|
||||
|
||||
| | |
|
||||
|---|---:|
|
||||
| entries `DefTables` named by the string harvest (route 1) | 130 |
|
||||
| **entries named by the declaration tables (route 2)** | **+1 283** |
|
||||
| still unnamed | **12** |
|
||||
| **`DefTables` IDXD coverage** | **1 413 / 1 425 = 99.2 %** |
|
||||
|
||||
`130 + 1283 + 12 = 1425` — the arithmetic closes, with **no overlap** between
|
||||
the two routes.
|
||||
|
||||
✅ **Zero partials, and the suffix is exact.** Every one of the 1 036
|
||||
`_test`-declared names resolves, and it resolves **only** as `<name>.tbl` with
|
||||
**no** path prefix — of the 5 suffixes × 6 prefixes tried, `('', '.tbl')` scored
|
||||
1 036 and every other combination scored 0.
|
||||
|
||||
**What the residual is**, in full: 8 declaration tables that nothing declares (the
|
||||
other 130 are named by route 1, from the stage tables that reference them), plus
|
||||
**4** ordinary tables — two `Generic+Level_0` LOD sets whose `Model` fields read
|
||||
`rou_e004` and `rou_e013`, and two motion sets. **15 declared names have no pak
|
||||
entry** (`GameModel_eff_e0033`, `…e0058`–`e0060`, `rou_e106_wep_02`, and their
|
||||
`LOD_Effect_*` twins) — declarations for content that did not ship.
|
||||
|
||||
### 🔴 The XPR2 manifests are NOT the naming source — refuted
|
||||
|
||||
The obvious guess was the 40 XPR2 manifests, which name meshes
|
||||
(`<XBGMesh Name = "rou_e104_brg_01_d" DataFile = "machines\rou_e104\objects\…xbg"/>`).
|
||||
Their **82** `Name=` values and 82 `DataFile`/`Source` paths, hashed bare and
|
||||
under `.tbl` / `.xbg` / `.xpr` / `.prt` / `game:\`, resolve **0** `DefTables`
|
||||
entries.
|
||||
|
||||
They are not unrelated, though: **40 of the 82 manifest names appear as the
|
||||
`Model` field VALUE inside the LOD/motion tables** (1 272 distinct `Model`
|
||||
values in `DefTables`). Manifest and table share the *model* namespace; the pak
|
||||
key is a different namespace, and only the declaration tables bridge it.
|
||||
|
||||
⚠️ First attempt used `Name="` and found **0 values** — the manifests write
|
||||
`Name = "…"` with spaces. A regex miss looks exactly like a null result.
|
||||
|
||||
### ⚠️ Bonus, not this item: the `GP_MAIN_GAME_*` residual is already-owned data
|
||||
|
||||
With `DefTables` closed, the largest remaining unnamed block is the identical
|
||||
**337 IDXD in each of the six `GP_MAIN_GAME_*`**, in 53 record-name shapes whose
|
||||
top entries are `Shell+Weapon` (90), `Faces+Generic` (64),
|
||||
`Effect+Explosion+Generic+Maneuver+Mass+SE+Shield+StructureCount` (44) and a
|
||||
chatter table (`ATTACK_IS_AVOIDED …`, 8) — i.e. **weapon, unit and chatter
|
||||
tables**, all families the corpus already documents. Characterising them
|
||||
properly is still open.
|
||||
|
||||
## ✅ WHY each archive is low-coverage — two different reasons (2026-08-27)
|
||||
|
||||
Splitting every **unnamed** entry by its magic turns the percentage table into an
|
||||
|
||||
Reference in New Issue
Block a user