re: the rest of StageResource - two more value kinds, one convention refuted

Swept all 19 StageResource fields by value kind.

Refuted: <X>ID + <X>Package is not a convention. The record has exactly one *ID
field (BackGroundID) and exactly one pairing stem. StageResourcePackage has no
StageResourceID; WingmanIconID_0..3 have no package. n = 1 is not a rule, so
last pass's generalisation is withdrawn.

Fourth kind - the game:\ external path. BackGroundPackage (18 values) and
StageResourcePackage (23) are neither records nor pak keys because they are ISO
file paths. Mapping game:\ to the extract root and \ to /, case-folded, 41 of 41
exist on the extracted disc (hidden/resource3d/BG_Acheron.xpr, Stage_S01.xpr,
...; 166 .xpr files in that directory).

Fifth form - game:\hidden\<archive>.pak+<entry>. LodEnumTable, MotionEnumTable
and TBL_3D name an archive AND an entry inside it, e.g.
game:\hidden\DefTables.pak+EnumLODSet_S24.tbl. Splitting on + and hashing the
right half against THAT archive's keys resolves 20 of 21; the one failure is
sound.pak+ with an empty entry name.

Some of those entry names carry an explicit <lang>\ prefix
(deu\GP_HANGAR_ARSENAL_3D.tbl, eng\, esp\), each present in 0 other archives, so
the language-prefix form is genuinely used by the engine. This does NOT unblock
the 2D naming problem: archive-naming refuted <lang>\ there structurally, since
the six 2D paks share one identical 711-key TOC and cannot carry per-language
names. Both facts stand.

The 4 never-shipped _Test tables - the residual of the 344-name census - are now
named: EnumCharacter_Test.tbl, EnumLocalString_Test.tbl, EnumSquadron_Test.tbl,
StageMessageSet_test.tbl (lower-case test on the last).

WingmanIconID_1..3 hold PGHUD_WING2/WING3/WING4, HUD element names from the PG*
roster; WingmanIconID_0 is never valued.

All fifteen artefacts byte-identical.
This commit is contained in:
Sylpheed RE agent
2026-08-28 06:28:14 +00:00
parent 3da617d04b
commit af8292c940
2 changed files with 71 additions and 0 deletions

View File

@@ -6407,3 +6407,36 @@ id — the same borrow-and-re-dress pattern already seen for maps and objectives
🟡 Not settled: `Original` carries **no** `BackGroundPackage` — whether that is
"no sky" or an engine default is unknown.
---
## ✅❌ 2026-08-28 — the rest of `StageResource`: two more value kinds, one convention refuted
Item (a).
**`<X>ID` + `<X>Package` is not a convention.** `StageResource` has exactly one
`*ID` field (`BackGroundID`) and one pairing stem; `StageResourcePackage` has no
`StageResourceID`, `WingmanIconID_0…3` have no package. **n = 1 is not a rule**
last pass's generalisation withdrawn.
**Fourth kind — the `game:\` external path.** `BackGroundPackage` (18) and
`StageResourcePackage` (23) resolve as neither record nor pak key because they
are ISO paths: mapping `game:\`→extract root and `\``/`, **41 of 41 exist on the
extracted disc**.
**Fifth form — `game:\hidden\<archive>.pak+<entry>`.** `LodEnumTable`,
`MotionEnumTable`, `TBL_3D` name an archive *and* an entry
(`…\DefTables.pak+EnumLODSet_S24.tbl`); hashing the right half against **that
archive's** keys resolves **20 of 21**, the failure being `sound.pak+` with an
empty entry name.
🔑 Some entry names carry an explicit `<lang>\` prefix (`deu\GP_HANGAR_ARSENAL_3D.tbl`),
each present in 0 other archives — the language-prefix form is real.
⚠️ It does **not** unblock 2D: `archive-naming` refuted `<lang>\` there
structurally (six identical 711-key TOCs). Both stand.
**The 4 never-shipped `_Test` tables are named**: `EnumCharacter_Test.tbl`,
`EnumLocalString_Test.tbl`, `EnumSquadron_Test.tbl`, `StageMessageSet_test.tbl`.
**`WingmanIconID_1…3` = `PGHUD_WING2/3/4`**, HUD names from the `PG*` roster;
`WingmanIconID_0` is never valued.

View File

@@ -315,3 +315,41 @@ pattern [[stage-numbering-and-player-craft]] found for maps and objectives.
🟡 **`Original` has no `BackGroundPackage` at all.** Whether that means "no sky"
or "whatever the engine defaults to" is not settled here.
### ✅❌ The rest of `StageResource`, and two more value kinds
Sweeping all 19 `StageResource` fields the same way settles the proposed
convention and adds two kinds the earlier three-way split had no box for.
❌ **`<X>ID` + `<X>Package` is NOT a convention.** The record has exactly **one**
`*ID` field, `BackGroundID`, and exactly one stem pairs. `StageResourcePackage`
has **no** `StageResourceID`; `WingmanIconID_0…3` have **no** package. **n = 1 is
not a rule** — last pass's generalisation is withdrawn.
✅ **A fourth kind: the `game:\` external path.** `BackGroundPackage` (18 values)
and `StageResourcePackage` (23) are neither records nor pak keys because they are
**ISO file paths**. Mapping `game:\` → the extract root, `\``/`, case-folded:
**41 of 41 exist on the extracted disc** (`hidden/resource3d/BG_Acheron.xpr`,
`…/Stage_S01.xpr`, …; 166 `.xpr` files in that directory).
**A fifth form: `game:\hidden\<archive>.pak+<entry>`.** `LodEnumTable`,
`MotionEnumTable` and `TBL_3D` name an archive *and* an entry inside it, e.g.
`game:\hidden\DefTables.pak+EnumLODSet_S24.tbl`. Splitting on `+` and hashing the
right half against **that archive's** keys: **20 of 21 resolve**, the one failure
being `sound.pak+` with an **empty** entry name.
🔑 **Some of those entry names carry an explicit `<lang>\` prefix**
`deu\GP_HANGAR_ARSENAL_3D.tbl`, `eng\…`, `esp\…` — and each is present in **0**
other archives. So the language-prefix form is genuinely used by the engine.
⚠️ **This does not unblock the 2D naming problem**: [[archive-naming]] refuted
`<lang>\` there *structurally*, because the six 2D paks share one identical
711-key TOC and so cannot be carrying per-language names. Both facts stand.
**The 4 never-shipped `_Test` tables are now named** — the residual of the
344-name census is exactly `EnumCharacter_Test.tbl`, `EnumLocalString_Test.tbl`,
`EnumSquadron_Test.tbl` and `StageMessageSet_test.tbl` (note the lower-case
`test` on the last).
**`WingmanIconID_1…3` hold `PGHUD_WING2`, `_WING3`, `_WING4`** — HUD element
names from the `PG*` roster ([[hud-config]]), i.e. an identity into a set the
corpus already owns. `WingmanIconID_0` is never valued.