re: the disc's stage numbers, and the player's craft per stage

The corpus knew '28 stages' and 'six tutorials with no AIParams'.  It
did not know the NUMBERS, and they are not 1..28.  Hashing
stage\UnitGroup_S%02d.tbl for N=0..39 against GP_MAIN_GAME_E.pak:
1-16 and 18-29 ship, 17 does not -- 28 files -- and the six with no
AIParams_SNN.tbl are exactly 18-23.  So S01-S16 story, S17 absent,
S18-S23 tutorials, S24-S29 story: 22 + 6.

eng\GP_HANGAR_ARSENAL_3D.tbl's ResourceID record keys a player-craft
mesh by stage: Unit_St1_6 -> rou_f001 (DeltaSaber T), Unit_St7_16 ->
rou_f002 (W), plus six further fields tagged with the raw numbers
24,25,26,27,28,29 -> rou_f002 x4, rou_f004 (DeltaSaber A) at 28,
rou_f002.  The bare tags are the last six story-stage numbers.  Control
in the same record: tag_hash(name) == tag for 11/11 named fields, so
those six genuinely carry no name.

Cross-check from a different file: grouping the Arsenal pak's 168
stage-scoped entries by which _Player craft their loadout mounts gives
f001 = 6, f002 = 15, f004 = 1, tutorials 5+1 = 6, and every number
closes against ResourceID -- 6 = Unit_St1_6; 15 = Unit_St7_16 (10) plus
tags 24,25,26,27,29 (5); 1 = tag 28; 6+15+1+6 = 28.

So the player flies the DeltaSaber A in exactly one mission, S28, and
the DeltaSaber T only for the first six.

Not settled: the Arsenal entry filenames, so which of the 168 is S24 vs
S25 is constrained but not pinned.

New structure doc, artefact and regenerator; the other five artefacts
regenerate byte-identical.
This commit is contained in:
Sylpheed RE agent
2026-08-27 13:18:42 +00:00
parent 2b9709eaa0
commit 28a59d839f
5 changed files with 189 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
# The disc's stage numbering, and the player's craft per stage
# Regenerate: python3 tools/re-capture/stage_numbering.py
# See docs/re/structures/stage-numbering-and-player-craft.md
## which stage numbers actually ship
stage\UnitGroup_SNN.tbl N = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
count 28 ; gap inside the range: [17]
stage\AIParams_SNN.tbl N = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 24, 25, 26, 27, 28, 29] (count 22)
stages with NO AIParams (the tutorials): [18, 19, 20, 21, 22, 23]
## ResourceID -- the player craft, keyed by stage
tag 24 name <none> rou_f002
tag 25 name <none> rou_f002
tag 26 name <none> rou_f002
tag 27 name <none> rou_f002
tag 28 name <none> rou_f004
tag 29 name <none> rou_f002
tag 2354614773 name Unit_St1_6 rou_f001
tag 3281124436 name Unit_St7_16 rou_f002
CONTROL tag_hash(name) == tag for the named fields: 11/11
## CROSS-CHECK the same thing from the Arsenal entries (168 = 28 stages x 6 languages)
90 entries = 15 stages UN_f002_TCAF_DeltaSaber_W_Player
36 entries = 6 stages UN_f001_TCAF_DeltaSaber_T_Player
30 entries = 5 stages UN_f001_TCAF_DeltaSaber_T_Player_Ttrl1
6 entries = 1 stages UN_f001_TCAF_DeltaSaber_T_Player_Ttrl2
6 entries = 1 stages UN_f004_TCAF_DeltaSaber_A_Player
total 28 stages