Settled by elimination with two controls. The 15 loadout names appear as a field VALUE nowhere on the disc -- 0 occurrences across every pak -- while the control Arbalest_155KG, which is referenced, appears 150 times as a value in the same pak. They occur only as the field names of the UNITS record. They are not in the executable either; control: WEAPONS (a section key) is, Arbalest_155KG is not. So nothing references a loadout by name. The selection is which pak entry the Hangar loads. GP_HANGAR_ARSENAL.pak has 180 IDXD entries in 10 shapes; 168 carry a UNITS roster = 28 stages x 6 languages, and the other 12 = 2 x 6. Each entry is one stage's whole Hangar config, and its UNITS roster is the flight for that stage -- 5 distinct rosters over 15 / 5 / 5 / 2 / 1 stages, including one where Rhino2-Katana flies alone. Every count is a multiple of 6 and they sum to 28, the disc's stage count by a fourth independent route. Corrects the previous commit: it read the pak with setdefault, so '15 loadouts / 24 allow-lists / STANDARD_ARM1 has 11 entries' is the union of first-seen records, not one table. Contents vary per entry -- PlayerSET_ARM1 has 5 distinct contents, STANDARD_ARM1 3, ExSET_NOSE 4. The chain and both controls (60/60, 70/88) are per-record and unaffected; only the per-list sizes were over-generalised. Not settled: the entry filenames. name_hash probing over 8 templates x 40 indices x 6 languages resolved 0, while the same probe's controls <lang>\weapon.tbl and <lang>\strings.tbl resolved 12/12. Artefact +40 lines / 1 changed heading; the other four regenerate byte-identical.
101 lines
6.4 KiB
Plaintext
101 lines
6.4 KiB
Plaintext
# The Hangar loadout system
|
|
# Regenerate: python3 tools/re-capture/hangar_loadouts.py
|
|
# See docs/re/structures/hangar-loadout-system.md
|
|
|
|
## the pak is STAGE-SCOPED -- one config entry per stage per language
|
|
total pak entries 1538 IDXD entries 180
|
|
entries carrying a UNITS roster 168 = 28 stages x 6 languages
|
|
entries without one 12 = 2 x 6 (the item table + siblings)
|
|
every roster count is a multiple of 6: True ; they sum to 28 stages
|
|
|
|
## the 5 distinct UNITS rosters -- who is in the flight, per stage
|
|
15 stage(s) 8 pilots: Bird1-Sandra, Bird2-Billy, Bird3-Antonius, Bird4-Carl, Rhino1-Katana, Rhino2-Ellen, Rhino3-Gene, Rhino4-Yoji
|
|
5 stage(s) 8 pilots: Bird1-Sandra, Bird2-Billy, Bird3-Antonius, Bird4-Carl, Rhino1-Raymond, Rhino2-Gene, Rhino3-Katana, Rhino4-Ellen
|
|
5 stage(s) 1 pilots: Rhino2-Katana
|
|
2 stage(s) 7 pilots: Bird1-Sandra, Bird2-Billy, Bird3-Antonius, Bird4-Carl, Rhino1-Raymond, Rhino2-Katana, Rhino3-Ellen
|
|
1 stage(s) 4 pilots: Rhino1-Katana, Rhino2-Ellen, Rhino3-Gene, Rhino4-Brandon
|
|
|
|
## counts, UNION over all entries (each name first-seen)
|
|
arsenal items 59 loadout records 15 per-slot allow-lists 24
|
|
|
|
## allow-list CONTENT VARIES BY ENTRY -- distinct contents per name
|
|
ExSET_ARM1 3
|
|
ExSET_ARM2 3
|
|
ExSET_ARM3 3
|
|
ExSET_NOSE 4
|
|
NULL_ARM1 1
|
|
NULL_ARM2 1
|
|
NULL_ARM3 1
|
|
NULL_NOSE 1
|
|
PlayerSET_ARM1 5
|
|
PlayerSET_ARM2 5
|
|
PlayerSET_ARM3 4
|
|
PlayerSET_NOSE 4
|
|
S01SET_ARM1 1
|
|
S01SET_ARM2 1
|
|
S01SET_ARM3 1
|
|
S01SET_NOSE 1
|
|
S02SET_ARM1 1
|
|
S02SET_ARM2 1
|
|
S02SET_ARM3 1
|
|
S02SET_NOSE 1
|
|
STANDARD_ARM1 3
|
|
STANDARD_ARM2 3
|
|
STANDARD_ARM3 3
|
|
STANDARD_NOSE 2
|
|
|
|
## loadout records
|
|
Bird1-Sandra S01SET_ARM1 S01SET_ARM2 S01SET_ARM3 S01SET_NOSE UnitID=SANDRA (character)
|
|
Bird2-Billy S01SET_ARM1 S01SET_ARM2 S01SET_ARM3 S01SET_NOSE UnitID=BILLY (character)
|
|
Bird3-Antonius S01SET_ARM1 S01SET_ARM2 S01SET_ARM3 S01SET_NOSE UnitID=ANTONIUS (character)
|
|
Bird4-Carl S01SET_ARM1 S01SET_ARM2 S01SET_ARM3 S01SET_NOSE UnitID=CARL (character)
|
|
Rhino1-Katana PlayerSET_ARM1 PlayerSET_ARM2 PlayerSET_ARM3 PlayerSET_NOSE UnitID=UN_f002_TCAF_DeltaSaber_W_Player (unit) PlayerUnit
|
|
Rhino1-Raymond S01SET_ARM1 S01SET_ARM2 S01SET_ARM3 S01SET_NOSE UnitID=RAYMOND (character)
|
|
Rhino2-Ellen STANDARD_ARM1 STANDARD_ARM2 STANDARD_ARM3 STANDARD_NOSE UnitID=UN_f001_TCAF_DeltaSaber_W (???)
|
|
Rhino2-Gene STANDARD_ARM1 STANDARD_ARM2 STANDARD_ARM3 STANDARD_NOSE UnitID=GENE (character)
|
|
Rhino2-Katana PlayerSET_ARM1 PlayerSET_ARM2 PlayerSET_ARM3 PlayerSET_NOSE UnitID=UN_f001_TCAF_DeltaSaber_T_Player (unit) PlayerUnit
|
|
Rhino3-Ellen S01SET_ARM1 S01SET_ARM2 S01SET_ARM3 S01SET_NOSE UnitID=UN_f001_TCAF_DeltaSaber_T (unit)
|
|
Rhino3-Gene STANDARD_ARM1 STANDARD_ARM2 STANDARD_ARM3 STANDARD_NOSE UnitID=GENE (character)
|
|
Rhino3-Katana PlayerSET_ARM1 PlayerSET_ARM2 PlayerSET_ARM3 PlayerSET_NOSE UnitID=UN_f001_TCAF_DeltaSaber_T_Player (unit) PlayerUnit
|
|
Rhino4-Brandon STANDARD_ARM1 STANDARD_ARM2 STANDARD_ARM3 STANDARD_NOSE UnitID=BRANDON (???)
|
|
Rhino4-Ellen STANDARD_ARM1 STANDARD_ARM2 STANDARD_ARM3 STANDARD_NOSE UnitID=UN_f001_TCAF_DeltaSaber_T (unit)
|
|
Rhino4-Yoji STANDARD_ARM1 STANDARD_ARM2 STANDARD_ARM3 STANDARD_NOSE UnitID=YOJI (character)
|
|
|
|
## CONTROL loadout.Arm1/2/3/Nose names an ALLOW-LIST record
|
|
60/60
|
|
|
|
## CONTROL allow-list positional entries name an ARSENAL ITEM
|
|
70/88
|
|
misses: [('No_Equipment', 18)]
|
|
every miss is a WEAPONS-roster sentinel with no item record: True
|
|
|
|
## CONTROL loadout.UnitID
|
|
15 loadouts: 5 name a unit Generic.ID, 8 name a character (as 'Character'+value), 2 neither
|
|
neither: ['BRANDON', 'UN_f001_TCAF_DeltaSaber_W']
|
|
|
|
## the allow-lists, in order
|
|
ExSET_ARM1 Type=Arm1 10: Condor_105AM, Frail_GP37, Pilum_BP, Multi_Pike_BP, Spear_HBP, Needle_L1GP, Buzzard_10AM, Dirt_23_Rocket, Falcon_9AM, No_Equipment
|
|
ExSET_ARM2 Type=Arm2 8: White_Shark_T53R, Piranha_T53, Hound_SMH, Terrier_SMH, Fire_Arrow_L2GP, Sling_75KG, Hawk_75AM, No_Equipment
|
|
ExSET_ARM3 Type=Arm3 4: Glaive_120mm_Cannon, Monoceros_Long_Cannon, Tomahawk_a_Rail_Gun, No_Equipment
|
|
ExSET_NOSE Type=Nose 7: Machiene_Cannon_MG3, Machiene_Cannon_MG1, Broad_Sword_SG1, Saber_LG1, Dagger_BG2, Rapier_BG4H, Stiletto_BG1
|
|
NULL_ARM1 Type=Arm1 1: No_Equipment
|
|
NULL_ARM2 Type=Arm2 1: No_Equipment
|
|
NULL_ARM3 Type=Arm3 1: No_Equipment
|
|
NULL_NOSE Type=Nose 1: Stiletto_BG1
|
|
PlayerSET_ARM1 Type=Arm1 2: Falcon_9AM, No_Equipment
|
|
PlayerSET_ARM2 Type=Arm2 1: No_Equipment
|
|
PlayerSET_ARM3 Type=Arm3 1: No_Equipment
|
|
PlayerSET_NOSE Type=Nose 1: Stiletto_BG1
|
|
S01SET_ARM1 Type=Arm1 2: Falcon_9AM, No_Equipment
|
|
S01SET_ARM2 Type=Arm2 1: No_Equipment
|
|
S01SET_ARM3 Type=Arm3 1: No_Equipment
|
|
S01SET_NOSE Type=Nose 1: Stiletto_BG1
|
|
S02SET_ARM1 Type=Arm1 3: Buzzard_10AM, Falcon_9AM, No_Equipment
|
|
S02SET_ARM2 Type=Arm2 2: Terrier_SMH, No_Equipment
|
|
S02SET_ARM3 Type=Arm3 2: Tomahawk_a_Rail_Gun, No_Equipment
|
|
S02SET_NOSE Type=Nose 1: Stiletto_BG1
|
|
STANDARD_ARM1 Type=Arm1 11: Falcon_9AM, Dirt_23_Rocket, Eagle_120AM, Condor_105AM, Buzzard_10AM, Needle_L1GP, Spear_HBP, Multi_Pike_BP, Pilum_BP, Frail_GP37, No_Equipment
|
|
STANDARD_ARM2 Type=Arm2 9: White_Shark_T53R, Cauldron_50_Rocket, Piranha_T53, Hound_SMH, Terrier_SMH, Fire_Arrow_L2GP, Sling_75KG, Hawk_75AM, No_Equipment
|
|
STANDARD_ARM3 Type=Arm3 9: Glaive_120mm_Cannon, Monoceros_Long_Cannon, Arbalest_155KG, Tomahawk_a_Rail_Gun, Maelstrom_Bomb, Cluster_Mine_B10, Pointer_SM, Long_Spear_HBP, No_Equipment
|
|
STANDARD_NOSE Type=Nose 8: Stiletto_BG1, Rapier_BG4H, Dagger_BG2, Saber_LG1, Twin_Sword_SG3II, Broad_Sword_SG1, Machiene_Cannon_MG3, Machiene_Cannon_MG1
|