re: the Hangar loadout system -- loadout, allow-list, arsenal item

15 loadout records, one per flight position x pilot (Bird1-Sandra ..
Rhino4-Yoji), each with Arm1/Arm2/Arm3/Nose + UnitID.

The same trap as PlayerWeapon, one level up: Arm1/Arm2/Arm3/Nose do NOT
name items.  They name a per-slot ALLOW-LIST record -- one of 24 whose
only named field is Type (the slot kind) -- and the candidate items are
that record's positional, unnamed fields, in order.  Four hops:

  Rhino4-Yoji.Arm1 -> STANDARD_ARM1 -> [Falcon_9AM, Condor_105AM, ...]
  -> item.PlayerWeapon = Turret_NNN -> slot.WeaponID -> Weapon.ID

Controls: Arm1/2/3/Nose -> allow-list record 60/60; allow-list
positional entries -> arsenal item 70/88, and every one of the 18
misses is the single sentinel No_Equipment -- one of the four
WEAPONS-roster values with no item record, i.e. the empty-slot marker.

UnitID is two ID spaces at once: 5 rows name a unit Generic.ID (the
three -Katana rows are the player -- a _Player craft plus an extra,
empty PlayerUnit field), 8 name a character, resolving as Character +
the value into the 64-record character table.

Two values resolve to nothing, both single rows against 13 that do:
Rhino2-Ellen.UnitID = UN_f001_TCAF_DeltaSaber_W exists nowhere (checked
as a Generic.ID across every pak and as a record name, 0 hits) while
UN_f002_TCAF_DeltaSaber_W does -- consistent with a shipped typo,
reported not diagnosed -- and Rhino4-Brandon.UnitID = BRANDON has no
CharacterBRANDON among the 64.

New structure doc, artefact and regenerator; the other four artefacts
regenerate byte-identical.
This commit is contained in:
Sylpheed RE agent
2026-08-27 12:58:53 +00:00
parent 21e710a531
commit 2b2d984f0c
5 changed files with 287 additions and 0 deletions

View File

@@ -827,6 +827,42 @@ unknown, what evidence exists, and what the first step would be. Move an item in
field; the stat keys in records not opened here (`MegaTons`, `BulletLimit`,
`CrewCount`, `HP_CLASS`); why the roster lists 59 of 131.
***(2026-08-27) THE HANGAR LOADOUT SYSTEM — the layer above the item chain.**
[structures/hangar-loadout-system](structures/hangar-loadout-system.md),
artefact `data/hangar-loadouts.txt`, regenerator
`tools/re-capture/hangar_loadouts.py`.
**15 loadout records**, one per flight position x pilot (`Bird1-Sandra`
`Rhino4-Yoji`), each with `Arm1`/`Arm2`/`Arm3`/`Nose` + `UnitID`.
🔑 **The same trap as `PlayerWeapon`, one level up**: `Arm1`/`Arm2`/`Arm3`/
`Nose` do NOT name items — they name a **per-slot ALLOW-LIST record**, one of
24 whose only *named* field is `Type` (the slot kind). The candidate items are
the allow-list's **positional, unnamed fields, in order**. Four hops:
`Rhino4-Yoji.Arm1``STANDARD_ARM1``[Falcon_9AM, Condor_105AM, …]`
`item.PlayerWeapon = Turret_NNN``slot.WeaponID``Weapon.ID`.
🧪 Controls: `Arm1/2/3/Nose` → allow-list record **60/60**; allow-list
positional entries → arsenal item **70/88**, and **every one of the 18 misses
is the single sentinel `No_Equipment`** — one of the four `WEAPONS`-roster
values with no item record, i.e. the empty-slot marker, not a decode failure.
Six sets: `STANDARD_*` (11/9/9/8), `ExSET_*` (10/8/4/7), `S01SET_*` (2/1/1/1),
`S02SET_*` (3/2/2/1), `PlayerSET_*` (2/1/1/1), `NULL_*` (1 each) — so the
`SNNSET_` sets are stage-scoped narrowings of `STANDARD_`.
🔑 **`UnitID` is TWO ID spaces at once**: 5 rows name a unit `Generic.ID`
(the three `-Katana` rows are the PLAYER — they point at a `_Player` craft and
carry an extra, empty `PlayerUnit` field), 8 name a character, resolving as
**`Character` + the value** into the 64-record character table.
🟡 Two values resolve to nothing, both single rows against 13 that do:
`Rhino2-Ellen.UnitID = UN_f001_TCAF_DeltaSaber_W`**no such unit anywhere**
(checked as a `Generic.ID` across every pak AND as a record name, 0 hits)
while `UN_f002_TCAF_DeltaSaber_W` exists → consistent with a shipped
`f001`/`f002` typo, **reported, not diagnosed**; and `Rhino4-Brandon.UnitID =
BRANDON` — no `CharacterBRANDON` among the 64.
🟡 Not settled: who SELECTS a loadout record (the names encode flight position
and pilot, and `stage-definition-table.md` has `AI_TCAF_RhinoFlight` /
`AI_TCAF_BirdFlight`, but the join is not shown); `ExSET_*`/`S02SET_*`/`NULL_*`
are referenced by no loadout in this pak; `PlayerUnit` is empty on all three
rows that have it; `IGNORE` (13 item names) is a blocklist for something
unread.
* ✅✅ **(2026-08-27) THE 59-OF-131 ARSENAL QUESTION IS CLOSED — an Arsenal item
names a HARDPOINT SLOT, not a weapon.**
[structures/arsenal-item-weapon-chain](structures/arsenal-item-weapon-chain.md),