From cdb9e5a00104d98e33f98c63d649b98da8b5490c Mon Sep 17 00:00:00 2001 From: Sylpheed RE agent Date: Mon, 24 Aug 2026 11:15:34 +0000 Subject: [PATCH] =?UTF-8?q?re:=20decode=20the=20stage=20table=20set=20?= =?UTF-8?q?=E2=80=94=20phases,=20routes,=20sub-objectives,=20AI=20paramete?= =?UTF-8?q?rs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Following the real stage record (not the _Test template dumped earlier) reaches the whole mission-parameter layer, all of it in the same self-describing IDXD container as the squadron roster. The big one: a stage is divided into Phase_N blocks -- three for Stage 02, each with its own map path, map mesh, asteroid definition and background -- and Route_S.tbl holds the arrival paths, with records named Route__p tying a UnitGroup squadron id to a phase and to a time-stamped keyframed path of (time, quat x4, pos x3). Route_ADN101_p1F is 3 frames at t = 0, 20, 30. The identity len(fields) == FrameCount * 8 + 1 holds for 1449 of 1449 route records across the 28 stages that have one, and 16/16 for FormationSet_S02. Also decoded: SUBObjectiveSettings (per-objective bonus points by difficulty, unlock item id, HUD strings) and AIParams (34 profiles, firing/guard/muster/ counter ranges plus 14 manoeuvre weights for Squad-type AI). The AIParams numbers are exact original values from static RE and are portable as they are. Adds tools/re-capture/stagetbl.py, which resolves a stage record by content and can --follow every table it names, and commits two dumps as evidence. Refuted and kept: the eight-value keyframe is the common case, not universal. Formation_Fleet_01 has FrameCount=1 with 136 positional fields and Formation_Fleet_02 has FrameCount=8 with 32, so a parser must not assume the stride. Corrects stage-definition-table.md, which was written from the _Test template and is missing EnumerateSubobjective, EnumerateAIParams, BackGroundID and the WingmanIconID fields the real record carries. Not settled: what advances a phase -- the stage declares Phase_1..3 and routes are phase-tagged, but nothing static says what ends one. That is a question for the oracle, not for more static reading. Also open: the route-name kind letters F/S/A/M/B, what activates a sub-objective, and StageMessageSet_S.tbl, which does not resolve in GP_MAIN_GAME_E.pak. --- docs/re/BACKLOG.md | 23 +- docs/re/data/aiparams-s02.txt | 568 +++++ docs/re/data/stage-s02-tables.txt | 1946 ++++++++++++++++++ docs/re/structures/stage-definition-table.md | 8 + docs/re/structures/stage-mission-tables.md | 144 ++ tools/re-capture/stagetbl.py | 73 + 6 files changed, 2761 insertions(+), 1 deletion(-) create mode 100644 docs/re/data/aiparams-s02.txt create mode 100644 docs/re/data/stage-s02-tables.txt create mode 100644 docs/re/structures/stage-mission-tables.md create mode 100644 tools/re-capture/stagetbl.py diff --git a/docs/re/BACKLOG.md b/docs/re/BACKLOG.md index ae8165fd..62bd843a 100644 --- a/docs/re/BACKLOG.md +++ b/docs/re/BACKLOG.md @@ -296,7 +296,28 @@ search cannot find a *schedule*. hash, and an earlier "109/111" reading of the squadron-id string base was an artefact of the uniform 7-byte id stride (it shifted every name by three). -**First step (next):** find where the arrival *interval values* live. +* βœ… **The rest of the mission-parameter layer is decoded** (2026-08-24) β€” + [`structures/stage-mission-tables.md`](structures/stage-mission-tables.md), + tool `tools/re-capture/stagetbl.py --follow S02`. The *real* stage record (the + one dumped earlier was the `_Test` template) splits a stage into **`Phase_1..3`** + blocks and names `Route_S.tbl`, `SUBObjectiveSettings_S.tbl`, + `AIParams_S.tbl`, `FormationSet_S.tbl`, `nameplate_S.tbl` and more. + **`Route_S.tbl` is the arrival schedule**: records named + `Route__p` holding time-stamped keyframes + `(time, quat x4, pos x3)`, tying a `UnitGroup` squadron to a phase and a path β€” + self-checked `FrameCount*8+1` on **1449/1449** route records across 28 stages. + `AIParams` carries directly portable combat tuning (firing/guard/muster ranges + and 14 manoeuvre weights per profile). πŸ”΄ Refuted: the 8-value frame is *not* + universal β€” `Formation_Fleet_01/02` use 136 and 4 values per frame. + +**First step (next):** find what *advances a phase* β€” the stage declares +`Phase_1..3` and routes are phase-tagged, but nothing static found so far says +what ends a phase. This is the point where the oracle should be measured rather +than reasoned about: fly Stage 02 and watch for the phase transition. Also open: +the route-name kind letters `F/S/A/M/B`, what activates a sub-objective, and +`StageMessageSet_S.tbl` which does not resolve in `GP_MAIN_GAME_E.pak`. + +**Superseded first step:** find where the arrival *interval values* live. `DisableInterval` is only a per-squadron flag (`Yes` for 31 of 1160); the durations, spawn triggers and arrival positions are not in `UnitGroup`. The stage record names two untouched candidates: `Formation_*.tbl` (formation diff --git a/docs/re/data/aiparams-s02.txt b/docs/re/data/aiparams-s02.txt new file mode 100644 index 00000000..2d57e380 --- /dev/null +++ b/docs/re/data/aiparams-s02.txt @@ -0,0 +1,568 @@ +=== stage\AIParams_S02.tbl (35 records) === +-- 'AI_ADAN_CraftSquadron_Ace' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.20 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.16 + 2e136f2c BootDefManeuverRatio_Fired = 0.40 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 0.88 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.40 + 98aa858f OffManeuverRatio_HoldPosition = 3.50 + 9d93b0b6 OffManeuverRatio_Through = 3.50 + a17ea8fc DefManeuverRatio_BarrelRoll = 1.75 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 2.63 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 3.00 + ce666dd1 DefManeuverRatio_SideRoll = 0.88 + d746db41 OffManeuverRatio_NoAction = 3.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 0.88 + eece0777 AutoGuardLength = 2500.0 +-- 'Enumerate_AIs' (34 fields) + 01cc57f8 AI_ADAN_CraftSquadron_Ace = + 077eabc4 AI_ADAN_Elan_GR_Violeta = + 125f8586 AI_TCAF_Acropolis = + 1b1de94f AI_ADAN_Fleet_Escort = + 250e4f4d AI_TCAF_Fleet_Escort = + 253b577f AI_CraftSquadron_Test = + 336ccfb9 AI_ADAN_Phantom = + 344ee4e3 AI_ADAN_BomberSquadron_Veteran = + 459f847a AI_TCAF_BirdFlight = + 48037b3b AI_ADAN_ElanPlus_NightRavens = + 4b7b7485 AI_Fleet_Test_ADAN = + 4c8979df AI_ADAN_Fleet = + 557a76f0 AI_Fleet_Test_TCAF = + 5652c286 AI_TCAF_Fleet = + 61f55143 AI_ADAN_CraftSquadron_Rookie = + 7c6328b5 AI_ADAN_Attacker_B_HF_Wayne = + 7cffa74f AI_ADAN_ElanPlus_NightRavens_Veteran = + 89dbd2f2 AI_Test = + 8d6c7b26 AI_ADAN_Attacker_S_HF_Wayne = + 91b17697 AI_ADAN_Frigates = + 9545b087 AI_TCAF_YatsukaSquadron = + 9bfcd7d3 AI_ADAN_Vindicator_Margras = + a33de123 AI_TCAF_CraftSquadron = + a41681e7 AI_ADAN_Elan_NightRavens = + acc3a108 AI_ADAN_ElanPlus_Margras = + b307b2f2 AI_TCAF_RhinoLeader = + b9b6ed54 AI_ADAN_ElanPlus_Taskent = + ba7b2b69 AI_Structure = + c4459ddb AI_TCAF_RhinoFlight = + c8588f28 AI_ADAN_BomberSquadron_Rookie = + cd111420 AI_ADAN_CraftSquadron_Veteran = + d80617f1 AI_Fleet_Test = + e7a21320 AI_TraceRoute = + fbb168ce AI_ADAN_ElanTypeQ_Margras = +-- 'AI_ADAN_Elan_GR_Violeta' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.25 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.20 + 2e136f2c BootDefManeuverRatio_Fired = 0.50 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 2.81 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.50 + 98aa858f OffManeuverRatio_HoldPosition = 2.67 + 9d93b0b6 OffManeuverRatio_Through = 3.33 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.94 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 0.94 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 2.50 + ce666dd1 DefManeuverRatio_SideRoll = 0.94 + d746db41 OffManeuverRatio_NoAction = 4.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.88 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_TCAF_Acropolis' (6 fields) + 429c4495 CounterLength = 25000.0 + 55f76dfe GuardLength = 10000.0 + a2797b39 Type = Fleet + c11cad36 FiringLength = 20000.0 + e2fe30cd MusterLength = 30000.0 + eece0777 AutoGuardLength = 10000.0 +-- 'AI_ADAN_Fleet_Escort' (6 fields) + 429c4495 CounterLength = 30000.0 + 55f76dfe GuardLength = 13000.0 + a2797b39 Type = Fleet + c11cad36 FiringLength = 20000.0 + e2fe30cd MusterLength = 20000.0 + eece0777 AutoGuardLength = 4000.0 +-- 'AI_TCAF_Fleet_Escort' (6 fields) + 429c4495 CounterLength = 25000.0 + 55f76dfe GuardLength = 10000.0 + a2797b39 Type = Fleet + c11cad36 FiringLength = 20000.0 + e2fe30cd MusterLength = 30000.0 + eece0777 AutoGuardLength = 10000.0 +-- 'AI_CraftSquadron_Test' (6 fields) + 429c4495 CounterLength = 6000.0 + 55f76dfe GuardLength = 10000.0 + a2797b39 Type = Squad + c11cad36 FiringLength = 3000.0 + e2fe30cd MusterLength = 10000.0 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_ADAN_Phantom' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.15 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.12 + 2e136f2c BootDefManeuverRatio_Fired = 0.30 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 2.44 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.30 + 98aa858f OffManeuverRatio_HoldPosition = 3.00 + 9d93b0b6 OffManeuverRatio_Through = 3.00 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.81 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 0.81 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 3.50 + ce666dd1 DefManeuverRatio_SideRoll = 0.81 + d746db41 OffManeuverRatio_NoAction = 4.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.63 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_ADAN_BomberSquadron_Veteran' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.15 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.12 + 2e136f2c BootDefManeuverRatio_Fired = 0.30 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 2.17 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.30 + 98aa858f OffManeuverRatio_HoldPosition = 2.00 + 9d93b0b6 OffManeuverRatio_Through = 4.00 + a17ea8fc DefManeuverRatio_BarrelRoll = 1.44 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 0.72 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 3.50 + ce666dd1 DefManeuverRatio_SideRoll = 0.72 + d746db41 OffManeuverRatio_NoAction = 4.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.44 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_TCAF_BirdFlight' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.30 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.24 + 2e136f2c BootDefManeuverRatio_Fired = 0.60 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 0.73 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.60 + 98aa858f OffManeuverRatio_HoldPosition = 6.40 + 9d93b0b6 OffManeuverRatio_Through = 1.60 + a17ea8fc DefManeuverRatio_BarrelRoll = 1.45 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 3.64 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 2.00 + ce666dd1 DefManeuverRatio_SideRoll = 0.73 + d746db41 OffManeuverRatio_NoAction = 2.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.45 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_ADAN_ElanPlus_NightRavens' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.20 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.16 + 2e136f2c BootDefManeuverRatio_Fired = 0.40 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 2.33 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.40 + 98aa858f OffManeuverRatio_HoldPosition = 3.43 + 9d93b0b6 OffManeuverRatio_Through = 2.57 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.78 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 1.56 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 3.00 + ce666dd1 DefManeuverRatio_SideRoll = 0.78 + d746db41 OffManeuverRatio_NoAction = 4.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.56 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_Fleet_Test_ADAN' (6 fields) + 429c4495 CounterLength = 30000.0 + 55f76dfe GuardLength = 13000.0 + a2797b39 Type = Fleet + c11cad36 FiringLength = 20000.0 + e2fe30cd MusterLength = 20000.0 + eece0777 AutoGuardLength = 4000.0 +-- 'AI_ADAN_Fleet' (6 fields) + 429c4495 CounterLength = 30000.0 + 55f76dfe GuardLength = 13000.0 + a2797b39 Type = Fleet + c11cad36 FiringLength = 20000.0 + e2fe30cd MusterLength = 20000.0 + eece0777 AutoGuardLength = 4000.0 +-- 'AI_Fleet_Test_TCAF' (6 fields) + 429c4495 CounterLength = 25000.0 + 55f76dfe GuardLength = 10000.0 + a2797b39 Type = Fleet + c11cad36 FiringLength = 12000.0 + e2fe30cd MusterLength = 30000.0 + eece0777 AutoGuardLength = 4000.0 +-- 'AI_TCAF_Fleet' (6 fields) + 429c4495 CounterLength = 25000.0 + 55f76dfe GuardLength = 10000.0 + a2797b39 Type = Fleet + c11cad36 FiringLength = 20000.0 + e2fe30cd MusterLength = 30000.0 + eece0777 AutoGuardLength = 10000.0 +-- 'AI_ADAN_CraftSquadron_Rookie' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.10 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.08 + 2e136f2c BootDefManeuverRatio_Fired = 0.20 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 2.25 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.20 + 98aa858f OffManeuverRatio_HoldPosition = 1.00 + 9d93b0b6 OffManeuverRatio_Through = 4.00 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.75 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 0.75 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 4.00 + ce666dd1 DefManeuverRatio_SideRoll = 0.75 + d746db41 OffManeuverRatio_NoAction = 5.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.50 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_ADAN_Attacker_B_HF_Wayne' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.25 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.20 + 2e136f2c BootDefManeuverRatio_Fired = 0.50 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 0.75 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.50 + 98aa858f OffManeuverRatio_HoldPosition = 4.57 + 9d93b0b6 OffManeuverRatio_Through = 3.43 + a17ea8fc DefManeuverRatio_BarrelRoll = 1.50 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 1.50 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 2.50 + ce666dd1 DefManeuverRatio_SideRoll = 2.25 + d746db41 OffManeuverRatio_NoAction = 2.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.50 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_ADAN_ElanPlus_NightRavens_Veteran' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.25 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.20 + 2e136f2c BootDefManeuverRatio_Fired = 0.50 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 2.05 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.50 + 98aa858f OffManeuverRatio_HoldPosition = 4.67 + 9d93b0b6 OffManeuverRatio_Through = 2.33 + a17ea8fc DefManeuverRatio_BarrelRoll = 1.36 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 2.05 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 2.50 + ce666dd1 DefManeuverRatio_SideRoll = 0.68 + d746db41 OffManeuverRatio_NoAction = 3.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.36 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_Test' (6 fields) + 429c4495 CounterLength = 15000.0 + 55f76dfe GuardLength = 5000.0 + a2797b39 Type = Squad + c11cad36 FiringLength = 10000.0 + e2fe30cd MusterLength = 7500.0 + eece0777 AutoGuardLength = 3000.0 +-- 'AI_ADAN_Attacker_S_HF_Wayne' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.20 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.16 + 2e136f2c BootDefManeuverRatio_Fired = 0.40 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 1.40 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.40 + 98aa858f OffManeuverRatio_HoldPosition = 3.11 + 9d93b0b6 OffManeuverRatio_Through = 3.89 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.70 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 1.40 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 3.00 + ce666dd1 DefManeuverRatio_SideRoll = 2.10 + d746db41 OffManeuverRatio_NoAction = 3.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.40 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_ADAN_Frigates' (6 fields) + 429c4495 CounterLength = 10000.0 + 55f76dfe GuardLength = 13000.0 + a2797b39 Type = Fleet + c11cad36 FiringLength = 6000.0 + e2fe30cd MusterLength = 20000.0 + eece0777 AutoGuardLength = 4000.0 +-- 'AI_TCAF_YatsukaSquadron' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.25 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.20 + 2e136f2c BootDefManeuverRatio_Fired = 0.50 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 1.88 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.50 + 98aa858f OffManeuverRatio_HoldPosition = 4.80 + 9d93b0b6 OffManeuverRatio_Through = 1.20 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.94 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 1.88 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 2.50 + ce666dd1 DefManeuverRatio_SideRoll = 0.94 + d746db41 OffManeuverRatio_NoAction = 4.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.88 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_ADAN_Vindicator_Margras' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.40 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.32 + 2e136f2c BootDefManeuverRatio_Fired = 0.80 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 0.69 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.80 + 98aa858f OffManeuverRatio_HoldPosition = 7.20 + 9d93b0b6 OffManeuverRatio_Through = 1.80 + a17ea8fc DefManeuverRatio_BarrelRoll = 2.08 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 3.46 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 1.00 + ce666dd1 DefManeuverRatio_SideRoll = 1.38 + d746db41 OffManeuverRatio_NoAction = 1.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.38 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_TCAF_CraftSquadron' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.30 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.24 + 2e136f2c BootDefManeuverRatio_Fired = 0.60 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 2.29 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.60 + 98aa858f OffManeuverRatio_HoldPosition = 3.33 + 9d93b0b6 OffManeuverRatio_Through = 1.67 + a17ea8fc DefManeuverRatio_BarrelRoll = 1.14 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 1.14 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 2.00 + ce666dd1 DefManeuverRatio_SideRoll = 1.14 + d746db41 OffManeuverRatio_NoAction = 5.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 2.29 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_ADAN_Elan_NightRavens' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.15 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.12 + 2e136f2c BootDefManeuverRatio_Fired = 0.30 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 2.44 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.30 + 98aa858f OffManeuverRatio_HoldPosition = 2.22 + 9d93b0b6 OffManeuverRatio_Through = 2.78 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.81 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 0.81 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 3.50 + ce666dd1 DefManeuverRatio_SideRoll = 0.81 + d746db41 OffManeuverRatio_NoAction = 5.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.63 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_ADAN_ElanPlus_Margras' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.25 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.20 + 2e136f2c BootDefManeuverRatio_Fired = 0.50 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 2.05 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.50 + 98aa858f OffManeuverRatio_HoldPosition = 3.00 + 9d93b0b6 OffManeuverRatio_Through = 3.00 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.68 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 2.05 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 2.50 + ce666dd1 DefManeuverRatio_SideRoll = 1.36 + d746db41 OffManeuverRatio_NoAction = 4.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.36 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_TCAF_RhinoLeader' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.15 + 224f8336 CounterManeuverRatio = 0.90 + 240dca2c BootDefManeuverRatio_Aimed = 0.10 + 2e136f2c BootDefManeuverRatio_Fired = 0.10 + 429c4495 CounterLength = 500000.0 + 4913db76 DefManeuverRatio_BoostAway = 0.22 + 55f76dfe GuardLength = 10000.1 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.10 + 98aa858f OffManeuverRatio_HoldPosition = 7.20 + 9d93b0b6 OffManeuverRatio_Through = 1.80 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.11 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 0.33 + c11cad36 FiringLength = 500000.1 + cbc80716 DefManeuverRatio_NoAction = 9.00 + ce666dd1 DefManeuverRatio_SideRoll = 0.11 + d746db41 OffManeuverRatio_NoAction = 1.00 + e2fe30cd MusterLength = 500000.0 + eb41fdfb DefManeuverRatio_TurnAway = 0.22 + eece0777 AutoGuardLength = 5000.1 +-- 'AI_ADAN_ElanPlus_Taskent' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.20 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.16 + 2e136f2c BootDefManeuverRatio_Fired = 0.40 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 2.33 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.40 + 98aa858f OffManeuverRatio_HoldPosition = 2.22 + 9d93b0b6 OffManeuverRatio_Through = 2.78 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.78 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 1.56 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 3.00 + ce666dd1 DefManeuverRatio_SideRoll = 0.78 + d746db41 OffManeuverRatio_NoAction = 5.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.56 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_Structure' (6 fields) + 429c4495 CounterLength = 20000.0 + 55f76dfe GuardLength = 5000.0 + a2797b39 Type = Fleet + c11cad36 FiringLength = 15000.0 + e2fe30cd MusterLength = 10.0 + eece0777 AutoGuardLength = 3000.0 +-- 'AI_TCAF_RhinoFlight' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.25 + 224f8336 CounterManeuverRatio = 0.90 + 240dca2c BootDefManeuverRatio_Aimed = 0.10 + 2e136f2c BootDefManeuverRatio_Fired = 0.10 + 429c4495 CounterLength = 500000.0 + 4913db76 DefManeuverRatio_BoostAway = 0.13 + 55f76dfe GuardLength = 10000.1 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.10 + 98aa858f OffManeuverRatio_HoldPosition = 7.20 + 9d93b0b6 OffManeuverRatio_Through = 1.80 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.13 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 0.38 + c11cad36 FiringLength = 500000.1 + cbc80716 DefManeuverRatio_NoAction = 9.00 + ce666dd1 DefManeuverRatio_SideRoll = 0.13 + d746db41 OffManeuverRatio_NoAction = 1.00 + e2fe30cd MusterLength = 500000.0 + eb41fdfb DefManeuverRatio_TurnAway = 0.25 + eece0777 AutoGuardLength = 5000.1 +-- 'AI_ADAN_BomberSquadron_Rookie' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.05 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.04 + 2e136f2c BootDefManeuverRatio_Fired = 0.10 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 2.06 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.10 + 98aa858f OffManeuverRatio_HoldPosition = 1.00 + 9d93b0b6 OffManeuverRatio_Through = 4.00 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.69 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 0.69 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 4.50 + ce666dd1 DefManeuverRatio_SideRoll = 0.69 + d746db41 OffManeuverRatio_NoAction = 5.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.38 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_ADAN_CraftSquadron_Veteran' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.15 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.12 + 2e136f2c BootDefManeuverRatio_Fired = 0.30 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 1.95 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.30 + 98aa858f OffManeuverRatio_HoldPosition = 2.00 + 9d93b0b6 OffManeuverRatio_Through = 4.00 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.65 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 1.30 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 3.50 + ce666dd1 DefManeuverRatio_SideRoll = 1.30 + d746db41 OffManeuverRatio_NoAction = 4.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.30 + eece0777 AutoGuardLength = 2500.0 +-- 'AI_Fleet_Test' (6 fields) + 429c4495 CounterLength = 30000.0 + 55f76dfe GuardLength = 5000.0 + a2797b39 Type = Fleet + c11cad36 FiringLength = 15000.0 + e2fe30cd MusterLength = 20000.0 + eece0777 AutoGuardLength = 3000.0 +-- 'AI_TraceRoute' (6 fields) + 429c4495 CounterLength = 20000.0 + 55f76dfe GuardLength = 5000.0 + a2797b39 Type = Fleet + c11cad36 FiringLength = 15000.0 + e2fe30cd MusterLength = 10.0 + eece0777 AutoGuardLength = 3000.0 +-- 'AI_ADAN_ElanTypeQ_Margras' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.30 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.24 + 2e136f2c BootDefManeuverRatio_Fired = 0.60 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 1.45 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.60 + 98aa858f OffManeuverRatio_HoldPosition = 4.67 + 9d93b0b6 OffManeuverRatio_Through = 2.33 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.73 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 2.91 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 2.00 + ce666dd1 DefManeuverRatio_SideRoll = 1.45 + d746db41 OffManeuverRatio_NoAction = 3.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.45 + eece0777 AutoGuardLength = 2500.0 diff --git a/docs/re/data/stage-s02-tables.txt b/docs/re/data/stage-s02-tables.txt new file mode 100644 index 00000000..f6ca959f --- /dev/null +++ b/docs/re/data/stage-s02-tables.txt @@ -0,0 +1,1946 @@ +=== Stage_S02 definition record (6 records) === +-- 'StageResource' (19 fields) + 087ca0d2 EnumerateLocalString = EnumLocalString_S02.tbl + 106df3ec EnumerateWeapon = EnumWeapon_Test.tbl + 114eccbb CollisionMeshes = CollisionSet_S02.bin + 2cffd1e7 EnumerateNullFrame = Route_S02.tbl + 33d9c14c EnumerateCharacter = EnumCharacter_S02.tbl + 46f5c611 EnumerateUnit = EnumUnit_S02.tbl + 550ade77 EnumerateFormation = FormationSet_S02.tbl + 6d8b50c4 BackGroundID = Lebendorf + 764727ae WingmanIconID_0 = + 774727af WingmanIconID_1 = PGHUD_WING4 + 77dd6f98 NamePlate = nameplate_S02.tbl + 784727b0 WingmanIconID_2 = + 794727b1 WingmanIconID_3 = + 8b001bd6 EnumerateSubobjective = SUBObjectiveSettings_S02.tbl + 8cbff946 BackGroundPackage = game:\hidden\Resource3D\BG_Lebendorf_near.xpr + 945c9dcb EnumerateAIParams = AIParams_S02.tbl + e8ac2b0d StageResourcePackage = game:\hidden\Resource3D\Stage_S02.xpr + f19c4815 MessageSet = StageMessageSet_S02.tbl + f37fdac5 EnumerateSquadron = UnitGroup_S02.tbl +-- 'LodResource' (1 fields) + 9cbba07e LodEnumTable = game:\hidden\DefTables.pak+EnumLODSet_test.tbl +-- 'Phase_1' (4 fields) + 44c33b91 AsteroidDefinition = + abf237d1 MapPath = mapmesh_box_500km.rgn + abf6366e MapMesh = mapmesh_box_500km.col + d5a83345 BackgroundResourceID = +-- 'Phase_2' (4 fields) + 44c33b91 AsteroidDefinition = + abf237d1 MapPath = mapmesh_box_500km.rgn + abf6366e MapMesh = mapmesh_box_500km.col + d5a83345 BackgroundResourceID = +-- 'Phase_3' (4 fields) + 44c33b91 AsteroidDefinition = + abf237d1 MapPath = mapmesh_box_500km.rgn + abf6366e MapMesh = mapmesh_box_500km.col + d5a83345 BackgroundResourceID = +-- 'MotionResource' (1 fields) + f314d3e4 MotionEnumTable = game:\hidden\DefTables.pak+EnumGameModel_test.tbl + +=== stage\EnumLocalString_S02.tbl (via EnumerateLocalString) (1 records) === +-- 'LocalStringFiles' (9 fields) + 1ccc2f97 PresetMessage_S02_local_string.tbl = + 1e86e9b4 ScriptMessage_S02_local_string.tbl = + 2c7b2401 ScriptMessage_S02guide_local_string.tbl = + 2ed29db5 DemoMessage_S02_local_string.tbl = + 5558ef17 SUBObjective_local_string.tbl = + 74ab89fd CharacterName_string.tbl = + d30c1e62 Params_Test.tbl = + f722d61e Mes_hokyu_LS_s02A_local_string.tbl = + fea4adfc Mes_hokyu_LS_s02H_local_string.tbl = + +=== stage\EnumWeapon_Test.tbl (via EnumerateWeapon) (1 records) === +-- 'EnumWeapon' (126 fields) + 005e8d80 Weapon_TCAF_Cruiser_BowChaser = + 01545f25 Weapon_TCAF_DeltaSaber_Missile_P = + 039802e8 Weapon_ADAN_TypeQ_Beam = + 04fb742a Weapon_NULL = + 13ffcf83 Weapon_TCAF_DeltaSaber_Shotgun_P = + 167f959e Weapon_ADAN_Vindicator_Rocket = + 193aec73 Weapon_TCAF_ArrowHead_Laser = + 1b4290d8 Weapon_ADAN_Attacker_B_GunTurret = + 1ca0035d Weapon_Test_SubGun = + 22da21f3 Weapon_TCAF_DeltaSaber_Laser_P = + 252717a7 Weapon_S16Boss_AAGun = + 270b26c1 Weapon_ADAN_Ship_AAGunL = + 2900680c Weapon_ADAN_Battleship_BowChaser = + 3149171f Weapon_TCAF_Ship_AAGunL = + 324897fe Weapon_Test_ASMissile = + 33f04460 Weapon_TCAF_Battleship_BowChaser = + 3645eac7 Weapon_S16Boss_HBeam = + 36f8c1eb Weapon_DSaber_P_wep_25_HBeam = + 36fcfeaa Weapon_DSaber_P_wep_34_HBeam = + 3a3445b7 Weapon_DSaber_P_wep_52_Special = + 3ab35d50 Weapon_DSaber_P_wep_70_Special = + 3b7d40d5 Weapon_TCAF_DeltaSaber_NoseGun = + 3bacb553 Weapon_ADAN_Attacker_S_NoseGun = + 3bf45dd4 Weapon_DSaber_P_wep_71_Special = + 3dbe73d6 Weapon_TCAF_DeltaSaber_Special = + 3e3847e8 Weapon_DSaber_P_wep_56_Special = + 3f38d449 Weapon_DSaber_P_wep_66_Special = + 4079d4cd Weapon_DSaber_P_wep_67_Special = + 41bad551 Weapon_DSaber_P_wep_68_Special = + 41fb4974 Weapon_DSaber_P_wep_59_Special = + 42fbd5d5 Weapon_DSaber_P_wep_69_Special = + 488411a5 Weapon_TCAF_DeltaSaber_TwinGun = + 4a4c4934 Weapon_DSaber_P_wep_02_Missile = + 4c8dd619 Weapon_DSaber_P_wep_13_Missile = + 4cce4a3c Weapon_DSaber_P_wep_04_Missile = + 4d4dee57 Weapon_DSaber_P_wep_32_Missile = + 50516427 Weapon_DSaber_P_wep_26_Missile = + 510fabb8 Weapon_DSaber_P_wep_81_Missile = + 52d93538 Weapon_TCAF_DeltaSaber_Missile = + 55749b3c Weapon_TCAF_DeltaSaber_Gun_P = + 5af7e346 Weapon_DSaber_P_wep_13_Child = + 5fea18c3 Weapon_DSaber_P_wep_41_Shotgun = + 602b1968 Weapon_DSaber_P_wep_42_Shotgun = + 61fc3dcc Weapon_DSaber_P_wep_29_Child = + 64b5d3e8 Weapon_TCAF_DeltaSaber_Shotgun = + 65b09040 Weapon_DSaber_P_wep_38_Shotgun = + 697b950b Weapon_ADAN_Phantom_Laser = + 6a802f01 Weapon_Test_Missile_Player = + 6e0308cf Weapon_DSaber_P_wep_14_Laser = + 705476cb Weapon_S16Boss_Laser = + 72140ccf Weapon_DSaber_P_wep_54_Laser = + 73031e14 Weapon_DSaber_P_wep_19_Laser = + 7320c74d Weapon_DSaber_P_wep_82_Laser = + 737a43ca Weapon_TCAF_DeltaSaber_Laser = + 76141dd3 Weapon_DSaber_P_wep_58_Laser = + 788dcfae Weapon_ADAN_Puppy_NoseGun = + 7eae4775 Weapon_ADAN_Turret_Cannon = + 874e2ed3 Weapon_ADAN_Ship_AAMissile = + 8866fde6 Weapon_TCAF_DeltaSaber_Cannon_P = + 8b16ca1a Weapon_ADAN_AAFrigate_AAGun = + 9341a409 Weapon_TCAF_DeltaSaber_Rocket_P = + 95bbb3c8 Weapon_TCAF_DeltaSaber_ASMissile_P = + 999ac0d3 Weapon_ADAN_Ship_ASMissile = + 9d264cf8 Weapon_DSaber_P_wep_10_Gun = + 9e6d8ce9 Weapon_Test_Missile = + a0024897 Weapon_TCAF_DeltaSaber_Beam_P = + a0894cf8 Weapon_DSaber_P_wep_40_Gun = + a268aff8 Weapon_DSaber_P_wep_33_Gun = + a468f1f8 Weapon_DSaber_P_wep_35_Gun = + a50675f8 Weapon_DSaber_P_wep_09_Gun = + a66e6c66 Weapon_TCAF_DeltaSaber_Gun = + a70db019 Weapon_DSaber_P_wep_83_Gun = + abf89402 Weapon_TCAF_DeltaSaber_Bomb_P = + be52b29b Weapon_Test_Gun_Player = + bf1fd46a Weapon_Test_Laser = + c03eea6a Weapon_ADAN_SDBattleship_BowChaser = + cf317ec4 Weapon_TCAF_Acropolis_BowChaser = + d1dc08ea Weapon_DSaber_P_wep_11_Cannon = + d2a38a66 Weapon_DSaber_P_wep_03_Cannon = + d4258b8f Weapon_DSaber_P_wep_23_Cannon = + d4dbca1b Weapon_DSaber_P_wep_50_Cannon = + d6b48e66 Weapon_DSaber_P_wep_07_Cannon = + d923d662 Weapon_TCAF_DeltaSaber_Cannon = + dadb5190 Weapon_ADAN_Destroyer_BowChaser = + dbafcfc8 Weapon_DSaber_P_wep_84_Cannon = + dbbcd197 Weapon_DSaber_P_wep_48_Cannon = + dbd50b0b Weapon_ADAN_Ship_AAGun = + ddce0cc7 Weapon_DSaber_P_wep_12_Rocket = + df99c25e Weapon_DSaber_P_wep_30_ASMissile = + e0ee659f Weapon_ADAN_Turret_NoseGun = + e11e169e Weapon_TCAF_ArrowHead_NoseGun = + e134717c Weapon_DSaber_P_wep_05_ASMissile = + e1954f74 Weapon_DSaber_P_wep_43_Rocket = + e28c8ea5 Weapon_DSaber_P_wep_80_Rocket = + e2bcf8a3 Weapon_DSaber_P_wep_60_ASMissile = + e411993f Weapon_TCAF_DeltaSaber_Rocket = + e4d9949d Weapon_DSaber_P_wep_08_ASMissile = + e4ded1f8 Weapon_DSaber_P_wep_55_Rocket = + e50f57d6 Weapon_DSaber_P_wep_27_ASMissile = + e5734908 Weapon_TCAF_Ship_AAGun = + e62996bb Weapon_ADAN_Attacker_S_ASMissile = + e6a578a6 Weapon_TCAF_DeltaSaber_ASMissile = + e6e753f8 Weapon_DSaber_P_wep_57_Rocket = + e85deb6d Weapon_DSaber_P_wep_01_Beam = + eae58490 Weapon_TCAF_DeltaSaber_NoseGun_P = + eceeec23 Weapon_TCAF_DeltaSaber_Special_P = + edc0f3ef Weapon_DSaber_P_wep_24_Beam = + edd50d5d Weapon_ADAN_Ship_ASGun = + ef7f04f3 Weapon_DSaber_P_wep_62_Beam = + efa000b2 Weapon_DSaber_P_wep_53_Beam = + f123f851 Weapon_DSaber_P_wep_37_Beam = + f15c66f6 Weapon_TCAF_DeltaSaber_Beam = + f26b0c0c Weapon_Test_Gun = + f365f851 Weapon_DSaber_P_wep_39_Beam = + f4e20d75 Weapon_DSaber_P_wep_85_Beam = + f6680425 Weapon_DSaber_P_wep_31_Bomb = + f6921c28 Weapon_TCAF_Ship_HBeam = + f6e2eb9a Weapon_ADAN_Cruiser_BowChaser = + f74a5a23 Weapon_ADAN_Turret_Missile = + f7734b5a Weapon_TCAF_Ship_ASGun = + f7b66581 Weapon_TCAF_DeltaSaber_TwinGun_P = + f87a0b01 Weapon_TCAF_ArrowHead_Missile = + fb0d0446 Weapon_DSaber_P_wep_36_Bomb = + fc4f0005 Weapon_DSaber_P_wep_28_Bomb = + fc6672eb Weapon_TCAF_DeltaSaber_Bomb = + fd700005 Weapon_DSaber_P_wep_29_Bomb = + +=== stage\Route_S02.tbl (via EnumerateNullFrame) (121 records) === +-- 'Route_ADN101_p1F' (25 fields) + 00000000 (pos) = 0 + 00000001 (pos) = -0.011578 + 00000002 (pos) = 0.625174 + 00000003 (pos) = 0.009275 + 00000004 (pos) = 0.780345 + 00000005 (pos) = -2500.000000 + 00000006 (pos) = -100.000000 + 00000007 (pos) = -2500.000000 + 00000008 (pos) = 20 + 00000009 (pos) = -0.012867 + 0000000a (pos) = 0.630589 + 0000000b (pos) = 0.010457 + 0000000c (pos) = 0.775940 + 0000000d (pos) = 2400.000000 + 0000000e (pos) = 0.000000 + 0000000f (pos) = -1400.000000 + 00000010 (pos) = 30 + 00000011 (pos) = -0.014835 + 00000012 (pos) = 0.634613 + 00000013 (pos) = 0.012185 + 00000014 (pos) = 0.772592 + 00000015 (pos) = 4241.799805 + 00000016 (pos) = 100.000000 + 00000017 (pos) = -1017.652283 + f43a336a FrameCount = 3 +-- 'Route_ADN110_p1F' (25 fields) + 00000000 (pos) = 170 + 00000001 (pos) = -0.099320 + 00000002 (pos) = 0.000000 + 00000003 (pos) = 0.000000 + 00000004 (pos) = 0.995056 + 00000005 (pos) = 3627.085938 + 00000006 (pos) = -4000.000000 + 00000007 (pos) = -25147.900391 + 00000008 (pos) = 200 + 00000009 (pos) = -0.061043 + 0000000a (pos) = -0.013936 + 0000000b (pos) = -0.000852 + 0000000c (pos) = 0.998038 + 0000000d (pos) = 3540.027100 + 0000000e (pos) = -999.997375 + 0000000f (pos) = -9965.877930 + 00000010 (pos) = 210 + 00000011 (pos) = -0.073767 + 00000012 (pos) = -0.095582 + 00000013 (pos) = -0.007103 + 00000014 (pos) = 0.992659 + 00000015 (pos) = 2536.064697 + 00000016 (pos) = 0.000000 + 00000017 (pos) = -3887.903320 + f43a336a FrameCount = 3 +-- 'Route_ADN111_p1F' (25 fields) + 00000000 (pos) = 170 + 00000001 (pos) = 0.092371 + 00000002 (pos) = 0.000000 + 00000003 (pos) = 0.000000 + 00000004 (pos) = 0.995725 + 00000005 (pos) = -2414.197021 + 00000006 (pos) = 4000.000000 + 00000007 (pos) = -25349.066406 + 00000008 (pos) = 200 + 00000009 (pos) = 0.095705 + 0000000a (pos) = 0.053830 + 0000000b (pos) = -0.005183 + 0000000c (pos) = 0.993940 + 0000000d (pos) = -2570.874268 + 0000000e (pos) = 999.997375 + 0000000f (pos) = -10016.166016 + 00000010 (pos) = 210 + 00000011 (pos) = 0.044767 + 00000012 (pos) = 0.161438 + 00000013 (pos) = -0.007331 + 00000014 (pos) = 0.985840 + 00000015 (pos) = -835.704346 + 00000016 (pos) = 0.000000 + 00000017 (pos) = -3643.743164 + f43a336a FrameCount = 3 + ... 118 more records not shown + +=== stage\EnumCharacter_S02.tbl (via EnumerateCharacter) (1 records) === +-- 'EnumCharacter' (63 fields) + 095dcc99 CharacterBILLY = + 0be41fe3 CharacterADANMETATRON = + 116d827d CharacterWAYNE = + 158d5ec2 CharacterADANSTAFF = + 1c74b82f CharacterSHIPLADY1 = + 2c600bac CharacterTCAFJANUS = + 347bdeb1 CharacterTCAFCALIBANOP = + 373eeb22 CharacterADANCOMMANDER = + 3de99367 CharacterKATANA = + 444761c3 CharacterADANCAMAEL = + 46f496c2 CharacterSANDRA = + 4bd9c930 CharacterADANGLANCE = + 4d5d9dba CharacterVIEIRA = + 4f189d7b CharacterTCAFPANDORAOP = + 528865cd CharacterHOWARD = + 657f3850 CharacterIAN = + 65f3b513 CharacterTCAFBASEOP = + 7ef5f46d CharacterADANPLA = + 7ff5f46e CharacterADANPLB = + 80f5f46f CharacterADANPLC = + 81f4f86d CharacterADANOPA = + 81f5f470 CharacterADANPLD = + 82f4f86e CharacterADANOPB = + 82f5f471 CharacterADANPLE = + 83f5f472 CharacterADANPLF = + 88d54438 CharacterTCAFPLA = + 89d54439 CharacterTCAFPLB = + 8b919a11 CharacterNATALIE = + 8bd44838 CharacterTCAFOPA = + 8cd44839 CharacterTCAFOPB = + 9694d980 CharacterHIGGINS = + 9832461c CharacterTCAFSUPPLY = + 9a974ca4 CharacterMARGRAS = + a19223a1 CharacterVIOLETA = + a78a98f0 CharacterTASKENT = + a79556a0 CharacterRAYMOND = + a7bc33fc CharacterTCAFMIRANDA = + a83e5329 CharacterEGAN = + ac3c6062 CharacterGENE = + acdcc468 CharacterADANETERNAL = + af3863e5 CharacterCARL = + b0b4cb01 CharacterTCAFPANDORA = + b71e8fd1 CharacterRUSSELL = + b966c948 CharacterADANMASSIVE = + bce99d0c CharacterADANBASE = + c8465eb8 CharacterYOJI = + cb719de2 CharacterSHIPSQUIRE1 = + cbb8b0bb CharacterTCAFJANUSOP = + cc4cb7a9 CharacterMARGRAS2 = + cd4cb7aa CharacterMARGRAS3 = + d2b54a47 CharacterCONTROLLERA = + d3b54a48 CharacterCONTROLLERB = + e252acdc CharacterADANA = + e352acdd CharacterADANB = + e422363d CharacterTCAFOLYMPUS = + e452acde CharacterADANC = + e70becab CharacterCRICHTON = + ea4c6239 CharacterADANGLANCEOP = + ec5517bb CharacterTCAFA = + ed5517bc CharacterTCAFB = + ee5517bd CharacterTCAFC = + fd5e28f1 CharacterELLEN = + fe64ec93 CharacterANTONIUS = + +=== stage\EnumUnit_S02.tbl (via EnumerateUnit) (1 records) === +-- 'EnumUnit' (14 fields) + 1efc5721 UN_bf001_TCAF_SchlosBase = + 284daa7b UN_e108_ADAN_ASFrigate = + 2bd65ebf UN_f001_TCAF_DeltaSaber_T_Player = + 3ca30d36 UN_f201_TCAF_Tanker = + 543419ae UN_f003_TCAF_ArrowHead = + 5674c1a5 UN_e007_ADAN_Turret = + 5f97dce5 UN_f001_TCAF_DeltaSaber_T = + 8173e221 UN_e201_ADAN_ISCMissile = + 823e1926 UN_f101_TCAF_Acropolis = + 910ec6e4 UN_e106_ADAN_Destroyer = + 9c65abc4 UN_f106_TCAF_Destroyer = + abb3bf51 UN_e010_ADAN_Attacker_S = + ac90e12b UN_e105_ADAN_Cruiser = + b759c189 UN_f105_TCAF_Cruiser = + +=== stage\FormationSet_S02.tbl (via EnumerateFormation) (17 records) === +-- 'Formation_4_Bird' (33 fields) + 00000000 (pos) = 0 + 00000001 (pos) = 0.000000 + 00000002 (pos) = 0.000000 + 00000003 (pos) = 0.000000 + 00000004 (pos) = 1.000000 + 00000005 (pos) = 0.000000 + 00000006 (pos) = 0.000000 + 00000007 (pos) = 0.000000 + 00000008 (pos) = 1 + 00000009 (pos) = 0.000000 + 0000000a (pos) = 0.000000 + 0000000b (pos) = 0.000000 + 0000000c (pos) = 1.000000 + 0000000d (pos) = -50.000000 + 0000000e (pos) = -10.000000 + 0000000f (pos) = -100.000000 + 00000010 (pos) = 2 + 00000011 (pos) = 0.000000 + 00000012 (pos) = 0.000000 + 00000013 (pos) = 0.000000 + 00000014 (pos) = 1.000000 + 00000015 (pos) = 50.000000 + 00000016 (pos) = -10.000000 + 00000017 (pos) = -100.000000 + 00000018 (pos) = 3 + 00000019 (pos) = 0.000000 + 0000001a (pos) = 0.000000 + 0000001b (pos) = 0.000000 + 0000001c (pos) = 1.000000 + 0000001d (pos) = 100.000000 + 0000001e (pos) = -20.000000 + 0000001f (pos) = -200.000000 + f43a336a FrameCount = 4 +-- 'Formation_ADAN_AttackerS03_12' (113 fields) + 00000000 (pos) = 0 + 00000001 (pos) = 0.000000 + 00000002 (pos) = 0.000000 + 00000003 (pos) = 0.000000 + 00000004 (pos) = 1.000000 + 00000005 (pos) = 500.000000 + 00000006 (pos) = -500.000000 + 00000007 (pos) = 0.000000 + 00000008 (pos) = 1 + 00000009 (pos) = 0.000000 + 0000000a (pos) = 0.000000 + 0000000b (pos) = 0.000000 + 0000000c (pos) = 1.000000 + 0000000d (pos) = -500.000000 + 0000000e (pos) = -500.000000 + 0000000f (pos) = 0.000000 + 00000010 (pos) = 2 + 00000011 (pos) = 0.000000 + 00000012 (pos) = 0.000000 + 00000013 (pos) = 0.000000 + 00000014 (pos) = 1.000000 + 00000015 (pos) = 1000.000000 + 00000016 (pos) = 0.000000 + 00000017 (pos) = -500.000000 + 00000018 (pos) = 3 + 00000019 (pos) = 0.000000 + 0000001a (pos) = 0.000000 + 0000001b (pos) = 0.000000 + 0000001c (pos) = 1.000000 + 0000001d (pos) = -1000.000000 + 0000001e (pos) = 0.000000 + 0000001f (pos) = -500.000000 + 00000020 (pos) = 4 + 00000021 (pos) = 0.000000 + 00000022 (pos) = 0.000000 + 00000023 (pos) = 0.000000 + 00000024 (pos) = 1.000000 + 00000025 (pos) = 1500.000000 + 00000026 (pos) = 500.000000 + 00000027 (pos) = -1000.000000 + 00000028 (pos) = 5 + 00000029 (pos) = 0.000000 + 0000002a (pos) = 0.000000 + 0000002b (pos) = 0.000000 + 0000002c (pos) = 1.000000 + 0000002d (pos) = -1500.000000 + 0000002e (pos) = 500.000000 + 0000002f (pos) = -1000.000000 + 00000030 (pos) = 6 + 00000031 (pos) = 0.000000 + 00000032 (pos) = 0.000000 + 00000033 (pos) = 0.000000 + 00000034 (pos) = 1.000000 + 00000035 (pos) = 500.000000 + 00000036 (pos) = 1000.000000 + 00000037 (pos) = -1000.000000 + 00000038 (pos) = 7 + 00000039 (pos) = 0.000000 + 0000003a (pos) = 0.000000 + 0000003b (pos) = 0.000000 + 0000003c (pos) = 1.000000 + 0000003d (pos) = -500.000000 + 0000003e (pos) = 1000.000000 + 0000003f (pos) = -1000.000000 + 00000040 (pos) = 8 + 00000041 (pos) = 0.000000 + 00000042 (pos) = 0.000000 + 00000043 (pos) = 0.000000 + 00000044 (pos) = 1.000000 + 00000045 (pos) = 1000.000000 + 00000046 (pos) = 1500.000000 + 00000047 (pos) = -1500.000000 + 00000048 (pos) = 9 + 00000049 (pos) = 0.000000 + 0000004a (pos) = 0.000000 + 0000004b (pos) = 0.000000 + 0000004c (pos) = 1.000000 + 0000004d (pos) = -1000.000000 + 0000004e (pos) = 1500.000000 + 0000004f (pos) = -1500.000000 + 00000050 (pos) = 10 + 00000051 (pos) = 0.000000 + 00000052 (pos) = 0.000000 + 00000053 (pos) = 0.000000 + 00000054 (pos) = 1.000000 + 00000055 (pos) = 1500.000000 + 00000056 (pos) = 2000.000000 + 00000057 (pos) = -2000.000000 + 00000058 (pos) = 11 + 00000059 (pos) = 0.000000 + 0000005a (pos) = 0.000000 + 0000005b (pos) = 0.000000 + 0000005c (pos) = 1.000000 + 0000005d (pos) = -1500.000000 + 0000005e (pos) = 2000.000000 + 0000005f (pos) = -2000.000000 + 00000060 (pos) = 12 + 00000061 (pos) = 0.000000 + 00000062 (pos) = 0.000000 + 00000063 (pos) = 0.000000 + 00000064 (pos) = 1.000000 + 00000065 (pos) = 0.000000 + 00000066 (pos) = 0.000000 + 00000067 (pos) = -1500.000000 + 00000068 (pos) = 13 + 00000069 (pos) = 0.000000 + 0000006a (pos) = 0.000000 + 0000006b (pos) = 0.000000 + 0000006c (pos) = 1.000000 + 0000006d (pos) = 0.000000 + 0000006e (pos) = 0.000000 + 0000006f (pos) = -1000.000000 + f43a336a FrameCount = 14 +-- 'Formation_ADAN_Turret03_30' (241 fields) + 00000000 (pos) = 0 + 00000001 (pos) = 0.000000 + 00000002 (pos) = 0.000000 + 00000003 (pos) = 0.000000 + 00000004 (pos) = 1.000000 + 00000005 (pos) = 800.000000 + 00000006 (pos) = -300.000000 + 00000007 (pos) = 1500.000000 + 00000008 (pos) = 1 + 00000009 (pos) = 0.000000 + 0000000a (pos) = 0.000000 + 0000000b (pos) = 0.000000 + 0000000c (pos) = 1.000000 + 0000000d (pos) = 900.000000 + 0000000e (pos) = -200.000000 + 0000000f (pos) = 1400.000000 + 00000010 (pos) = 2 + 00000011 (pos) = 0.000000 + 00000012 (pos) = 0.000000 + 00000013 (pos) = 0.000000 + 00000014 (pos) = 1.000000 + 00000015 (pos) = 700.000000 + 00000016 (pos) = -200.000000 + 00000017 (pos) = 1400.000000 + 00000018 (pos) = 3 + 00000019 (pos) = 0.000000 + 0000001a (pos) = 0.000000 + 0000001b (pos) = 0.000000 + 0000001c (pos) = 1.000000 + 0000001d (pos) = -800.000000 + 0000001e (pos) = -300.000000 + 0000001f (pos) = 1500.000000 + 00000020 (pos) = 4 + 00000021 (pos) = 0.000000 + 00000022 (pos) = 0.000000 + 00000023 (pos) = 0.000000 + 00000024 (pos) = 1.000000 + 00000025 (pos) = -900.000000 + 00000026 (pos) = -200.000000 + 00000027 (pos) = 1400.000000 + 00000028 (pos) = 5 + 00000029 (pos) = 0.000000 + 0000002a (pos) = 0.000000 + 0000002b (pos) = 0.000000 + 0000002c (pos) = 1.000000 + 0000002d (pos) = -700.000000 + 0000002e (pos) = -200.000000 + 0000002f (pos) = 1400.000000 + 00000030 (pos) = 6 + 00000031 (pos) = 0.000000 + 00000032 (pos) = 0.000000 + 00000033 (pos) = 0.000000 + 00000034 (pos) = 1.000000 + 00000035 (pos) = 500.000000 + 00000036 (pos) = -250.000000 + 00000037 (pos) = 500.000000 + 00000038 (pos) = 7 + 00000039 (pos) = 0.000000 + 0000003a (pos) = 0.000000 + 0000003b (pos) = 0.000000 + 0000003c (pos) = 1.000000 + 0000003d (pos) = 600.000000 + 0000003e (pos) = -150.000000 + 0000003f (pos) = 400.000000 + 00000040 (pos) = 8 + 00000041 (pos) = 0.000000 + 00000042 (pos) = 0.000000 + 00000043 (pos) = 0.000000 + 00000044 (pos) = 1.000000 + 00000045 (pos) = 400.000000 + 00000046 (pos) = -150.000000 + 00000047 (pos) = 400.000000 + 00000048 (pos) = 9 + 00000049 (pos) = 0.000000 + 0000004a (pos) = 0.000000 + 0000004b (pos) = 0.000000 + 0000004c (pos) = 1.000000 + 0000004d (pos) = -500.000000 + 0000004e (pos) = -250.000000 + 0000004f (pos) = 500.000000 + 00000050 (pos) = 10 + 00000051 (pos) = 0.000000 + 00000052 (pos) = 0.000000 + 00000053 (pos) = 0.000000 + 00000054 (pos) = 1.000000 + 00000055 (pos) = -600.000000 + 00000056 (pos) = -150.000000 + 00000057 (pos) = 400.000000 + 00000058 (pos) = 11 + 00000059 (pos) = 0.000000 + 0000005a (pos) = 0.000000 + 0000005b (pos) = 0.000000 + 0000005c (pos) = 1.000000 + 0000005d (pos) = -400.000000 + 0000005e (pos) = -150.000000 + 0000005f (pos) = 400.000000 + 00000060 (pos) = 12 + 00000061 (pos) = 0.000000 + 00000062 (pos) = 0.000000 + 00000063 (pos) = 0.000000 + 00000064 (pos) = 1.000000 + 00000065 (pos) = 0.000000 + 00000066 (pos) = -400.000000 + 00000067 (pos) = -500.000000 + 00000068 (pos) = 13 + 00000069 (pos) = 0.000000 + 0000006a (pos) = 0.000000 + 0000006b (pos) = 0.000000 + 0000006c (pos) = 1.000000 + 0000006d (pos) = 100.000000 + 0000006e (pos) = -300.000000 + 0000006f (pos) = -600.000000 + 00000070 (pos) = 14 + 00000071 (pos) = 0.000000 + 00000072 (pos) = 0.000000 + 00000073 (pos) = 0.000000 + 00000074 (pos) = 1.000000 + 00000075 (pos) = -100.000000 + 00000076 (pos) = -300.000000 + 00000077 (pos) = -600.000000 + 00000078 (pos) = 15 + 00000079 (pos) = 0.000000 + 0000007a (pos) = 0.000000 + 0000007b (pos) = 0.000000 + 0000007c (pos) = 1.000000 + 0000007d (pos) = 0.000000 + 0000007e (pos) = -700.000000 + 0000007f (pos) = -1000.000000 + 00000080 (pos) = 16 + 00000081 (pos) = 0.000000 + 00000082 (pos) = 0.000000 + 00000083 (pos) = 0.000000 + 00000084 (pos) = 1.000000 + 00000085 (pos) = 100.000000 + 00000086 (pos) = -600.000000 + 00000087 (pos) = -1100.000000 + 00000088 (pos) = 17 + 00000089 (pos) = 0.000000 + 0000008a (pos) = 0.000000 + 0000008b (pos) = 0.000000 + 0000008c (pos) = 1.000000 + 0000008d (pos) = -100.000000 + 0000008e (pos) = -600.000000 + 0000008f (pos) = -1100.000000 + 00000090 (pos) = 18 + 00000091 (pos) = 0.000000 + 00000092 (pos) = 0.000000 + 00000093 (pos) = 0.000000 + 00000094 (pos) = 1.000000 + 00000095 (pos) = 500.000000 + 00000096 (pos) = -500.000000 + 00000097 (pos) = 1000.000000 + 00000098 (pos) = 19 + 00000099 (pos) = 0.000000 + 0000009a (pos) = 0.000000 + 0000009b (pos) = 0.000000 + 0000009c (pos) = 1.000000 + 0000009d (pos) = 600.000000 + 0000009e (pos) = -400.000000 + 0000009f (pos) = 900.000000 + 000000a0 (pos) = 20 + 000000a1 (pos) = 0.000000 + 000000a2 (pos) = 0.000000 + 000000a3 (pos) = 0.000000 + 000000a4 (pos) = 1.000000 + 000000a5 (pos) = 400.000000 + 000000a6 (pos) = -400.000000 + 000000a7 (pos) = 900.000000 + 000000a8 (pos) = 21 + 000000a9 (pos) = 0.000000 + 000000aa (pos) = 0.000000 + 000000ab (pos) = 0.000000 + 000000ac (pos) = 1.000000 + 000000ad (pos) = -500.000000 + 000000ae (pos) = -500.000000 + 000000af (pos) = 1000.000000 + 000000b0 (pos) = 22 + 000000b1 (pos) = 0.000000 + 000000b2 (pos) = 0.000000 + 000000b3 (pos) = 0.000000 + 000000b4 (pos) = 1.000000 + 000000b5 (pos) = -600.000000 + 000000b6 (pos) = -400.000000 + 000000b7 (pos) = 900.000000 + 000000b8 (pos) = 23 + 000000b9 (pos) = 0.000000 + 000000ba (pos) = 0.000000 + 000000bb (pos) = 0.000000 + 000000bc (pos) = 1.000000 + 000000bd (pos) = -400.000000 + 000000be (pos) = -400.000000 + 000000bf (pos) = 900.000000 + 000000c0 (pos) = 24 + 000000c1 (pos) = 0.000000 + 000000c2 (pos) = 0.000000 + 000000c3 (pos) = 0.000000 + 000000c4 (pos) = 1.000000 + 000000c5 (pos) = 300.000000 + 000000c6 (pos) = -600.000000 + 000000c7 (pos) = 0.000000 + 000000c8 (pos) = 25 + 000000c9 (pos) = 0.000000 + 000000ca (pos) = 0.000000 + 000000cb (pos) = 0.000000 + 000000cc (pos) = 1.000000 + 000000cd (pos) = 400.000000 + 000000ce (pos) = -500.000000 + 000000cf (pos) = -100.000000 + 000000d0 (pos) = 26 + 000000d1 (pos) = 0.000000 + 000000d2 (pos) = 0.000000 + 000000d3 (pos) = 0.000000 + 000000d4 (pos) = 1.000000 + 000000d5 (pos) = 300.000000 + 000000d6 (pos) = -500.000000 + 000000d7 (pos) = -100.000000 + 000000d8 (pos) = 27 + 000000d9 (pos) = 0.000000 + 000000da (pos) = 0.000000 + 000000db (pos) = 0.000000 + 000000dc (pos) = 1.000000 + 000000dd (pos) = -300.000000 + 000000de (pos) = -600.000000 + 000000df (pos) = 0.000000 + 000000e0 (pos) = 28 + 000000e1 (pos) = 0.000000 + 000000e2 (pos) = 0.000000 + 000000e3 (pos) = 0.000000 + 000000e4 (pos) = 1.000000 + 000000e5 (pos) = -400.000000 + 000000e6 (pos) = -500.000000 + 000000e7 (pos) = -100.000000 + 000000e8 (pos) = 29 + 000000e9 (pos) = 0.000000 + 000000ea (pos) = 0.000000 + 000000eb (pos) = 0.000000 + 000000ec (pos) = 1.000000 + 000000ed (pos) = -300.000000 + 000000ee (pos) = -500.000000 + 000000ef (pos) = -100.000000 + f43a336a FrameCount = 30 + ... 14 more records not shown + +=== stage\nameplate_S02.tbl (via NamePlate) (30 records) === +-- 'OTHERENEMY' (6 fields) + 188e7d01 SymbolType = + 6dbc9e1c HP_CLASS = 2 + 764a001f CLASS = NP_E_UNKNOWN + 84689b94 HP_ID = 0 + 8d004944 ID = + e1d0cb31 Control = ENEMY +-- 'NP_Amalthea' (6 fields) + 188e7d01 SymbolType = + 6dbc9e1c HP_CLASS = 1 + 764a001f CLASS = NPR_Amalthea + 84689b94 HP_ID = 0 + 8d004944 ID = + e1d0cb31 Control = ALWAYS_CLASS +-- 'RAYMOND' (6 fields) + 188e7d01 SymbolType = + 6dbc9e1c HP_CLASS = 0 + 764a001f CLASS = + 84689b94 HP_ID = 1 + 8d004944 ID = NP_RAYMOND01 + e1d0cb31 Control = ALWAYS_ID + ... 27 more records not shown + +=== stage\SUBObjectiveSettings_S02.tbl (via EnumerateSubobjective) (10 records) === +-- 'Enumerate' (9 fields) + b5988cc4 SUBOBJ_010 = + b6988cc5 SUBOBJ_011 = + b8988cc7 SUBOBJ_013 = + b9988bc9 SUBOBJ_005 = + b9988cc8 SUBOBJ_014 = + ba988bca SUBOBJ_006 = + bb988bcb SUBOBJ_007 = + bc988bcc SUBOBJ_008 = + bd988bcd SUBOBJ_009 = +-- 'SUBOBJ_010' (6 fields) + 39edcd50 BonusPoint_NORMAL = 1000 + 48e5b52a UNLockItemID = 0 + 8f0d841b BonusPoint_HARD = 2000 + a20d84cd BonusPoint_EASY = 500 + b977d881 HUDString01 = SUBOBJ_010_Mes_L1 + ba77d882 HUDString02 = SUBOBJ_010_Mes_L2 +-- 'SUBOBJ_011' (6 fields) + 39edcd50 BonusPoint_NORMAL = 1000 + 48e5b52a UNLockItemID = 0 + 8f0d841b BonusPoint_HARD = 2000 + a20d84cd BonusPoint_EASY = 500 + b977d881 HUDString01 = SUBOBJ_011_Mes_L1 + ba77d882 HUDString02 = SUBOBJ_011_Mes_L2 + ... 7 more records not shown + +=== stage\AIParams_S02.tbl (via EnumerateAIParams) (35 records) === +-- 'AI_ADAN_CraftSquadron_Ace' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.20 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.16 + 2e136f2c BootDefManeuverRatio_Fired = 0.40 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 0.88 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.40 + 98aa858f OffManeuverRatio_HoldPosition = 3.50 + 9d93b0b6 OffManeuverRatio_Through = 3.50 + a17ea8fc DefManeuverRatio_BarrelRoll = 1.75 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 2.63 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 3.00 + ce666dd1 DefManeuverRatio_SideRoll = 0.88 + d746db41 OffManeuverRatio_NoAction = 3.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 0.88 + eece0777 AutoGuardLength = 2500.0 +-- 'Enumerate_AIs' (34 fields) + 01cc57f8 AI_ADAN_CraftSquadron_Ace = + 077eabc4 AI_ADAN_Elan_GR_Violeta = + 125f8586 AI_TCAF_Acropolis = + 1b1de94f AI_ADAN_Fleet_Escort = + 250e4f4d AI_TCAF_Fleet_Escort = + 253b577f AI_CraftSquadron_Test = + 336ccfb9 AI_ADAN_Phantom = + 344ee4e3 AI_ADAN_BomberSquadron_Veteran = + 459f847a AI_TCAF_BirdFlight = + 48037b3b AI_ADAN_ElanPlus_NightRavens = + 4b7b7485 AI_Fleet_Test_ADAN = + 4c8979df AI_ADAN_Fleet = + 557a76f0 AI_Fleet_Test_TCAF = + 5652c286 AI_TCAF_Fleet = + 61f55143 AI_ADAN_CraftSquadron_Rookie = + 7c6328b5 AI_ADAN_Attacker_B_HF_Wayne = + 7cffa74f AI_ADAN_ElanPlus_NightRavens_Veteran = + 89dbd2f2 AI_Test = + 8d6c7b26 AI_ADAN_Attacker_S_HF_Wayne = + 91b17697 AI_ADAN_Frigates = + 9545b087 AI_TCAF_YatsukaSquadron = + 9bfcd7d3 AI_ADAN_Vindicator_Margras = + a33de123 AI_TCAF_CraftSquadron = + a41681e7 AI_ADAN_Elan_NightRavens = + acc3a108 AI_ADAN_ElanPlus_Margras = + b307b2f2 AI_TCAF_RhinoLeader = + b9b6ed54 AI_ADAN_ElanPlus_Taskent = + ba7b2b69 AI_Structure = + c4459ddb AI_TCAF_RhinoFlight = + c8588f28 AI_ADAN_BomberSquadron_Rookie = + cd111420 AI_ADAN_CraftSquadron_Veteran = + d80617f1 AI_Fleet_Test = + e7a21320 AI_TraceRoute = + fbb168ce AI_ADAN_ElanTypeQ_Margras = +-- 'AI_ADAN_Elan_GR_Violeta' (20 fields) + 08dabbb5 ManeuverRatio_Cutoff = 0.25 + 224f8336 CounterManeuverRatio = 0.50 + 240dca2c BootDefManeuverRatio_Aimed = 0.20 + 2e136f2c BootDefManeuverRatio_Fired = 0.50 + 429c4495 CounterLength = 6000.0 + 4913db76 DefManeuverRatio_BoostAway = 2.81 + 55f76dfe GuardLength = 10000.0 + 7e2e5018 BootDefManeuverRatio_Missiled = 0.50 + 98aa858f OffManeuverRatio_HoldPosition = 2.67 + 9d93b0b6 OffManeuverRatio_Through = 3.33 + a17ea8fc DefManeuverRatio_BarrelRoll = 0.94 + a2797b39 Type = Squad + b1eb847b DefManeuverRatio_TurnAttack = 0.94 + c11cad36 FiringLength = 3000.0 + cbc80716 DefManeuverRatio_NoAction = 2.50 + ce666dd1 DefManeuverRatio_SideRoll = 0.94 + d746db41 OffManeuverRatio_NoAction = 4.00 + e2fe30cd MusterLength = 10000.0 + eb41fdfb DefManeuverRatio_TurnAway = 1.88 + eece0777 AutoGuardLength = 2500.0 + ... 32 more records not shown + +=== stage\StageMessageSet_S02.tbl -> unresolved: '0x59056396 not in GP_MAIN_GAME_E.pak' + +=== stage\UnitGroup_S02.tbl (via EnumerateSquadron) (112 records) === +-- 'ADN101' (9 fields) + 00000000 (pos) = UN_e007_ADAN_Turret + 00000001 (pos) = MessageSet_ADAN_plA + 00000002 (pos) = 9 + 00000003 (pos) = + 097e1fc3 Count = 1 + 1225e093 SideID = ADAN + 174951a5 AIID = AI_ADAN_CraftSquadron_Veteran + 3cd2d3df FormationID = Formation_ADAN_Turret07_30 + f926c887 DisableInterval = No +-- 'ADN110' (9 fields) + 00000000 (pos) = UN_e007_ADAN_Turret + 00000001 (pos) = MessageSet_ADAN_plA + 00000002 (pos) = 9 + 00000003 (pos) = + 097e1fc3 Count = 1 + 1225e093 SideID = ADAN + 174951a5 AIID = AI_ADAN_CraftSquadron_Rookie + 3cd2d3df FormationID = Formation_ADAN_Turret09_30 + f926c887 DisableInterval = No +-- 'ADN111' (9 fields) + 00000000 (pos) = UN_e007_ADAN_Turret + 00000001 (pos) = MessageSet_ADAN_plB + 00000002 (pos) = 9 + 00000003 (pos) = + 097e1fc3 Count = 1 + 1225e093 SideID = ADAN + 174951a5 AIID = AI_ADAN_CraftSquadron_Veteran + 3cd2d3df FormationID = Formation_ADAN_Turret09_30 + f926c887 DisableInterval = No + ... 109 more records not shown + +=== EnumLODSet_test.tbl (via LodEnumTable) (1 records) === +-- 'Enumerate' (676 fields) + 01699360 LOD_Parts_rou_e901_tail_L_b1 = + 025edfd8 LOD_Parts_rob_f002_bdy_11b = + 02699361 LOD_Parts_rou_e901_tail_L_b2 = + 0354d523 LOD_Frame_rou_e101_wep_01_break = + 043e0443 LOD_Parts_rou_f104_bdy_04L = + 045de2d8 LOD_Parts_rob_f002_bdy_04b = + 045ee1d8 LOD_Parts_rob_f002_bdy_13b = + 046d5875 LOD_Frame_rou_e102_wep_01_break = + 065de4d8 LOD_Parts_rob_f002_bdy_06b = + 07699426 LOD_Parts_rou_e901_tail_R_b1 = + 07b6e26b LOD_Frame_rou_e105_wep_01_break = + 08699427 LOD_Parts_rou_e901_tail_R_b2 = + 095de7d8 LOD_Parts_rob_f002_bdy_09b = + 0a3e0449 LOD_Parts_rou_f104_bdy_04R = + 0b387f49 LOD_Frame_rou_e104_ext_01_break = + 0c38838a LOD_Frame_rou_e104_ext_02_break = + 0d21593b LOD_Frame_rou_e301_barrel = + 0e259a3b LOD_Frame_rou_e302_barrel = + 0eadba3b LOD_Frame_rou_f301_barrel = + 0f29db3b LOD_Frame_rou_e303_barrel = + 0fb1fb3b LOD_Frame_rou_f302_barrel = + 0fe14732 LOD_Parts_rou_e901_tail_L = + 10b63c3b LOD_Frame_rou_f303_barrel = + 1107a91b LOD_Parts_rou_e201_eng_01_break = + 1245c286 LOD_Parts_rob_e001_bdy_01_petal = + 14f2b496 LOD_Parts_rob_e001_bdy_03_conecter_d = + 152d10d2 LOD_Parts_rou_e106_eng_01_break = + 15e14738 LOD_Parts_rou_e901_tail_R = + 162d1513 LOD_Parts_rou_e106_eng_02_break = + 16459424 LOD_Parts_rou_e107_eng_01_break = + 175e1776 LOD_Parts_rou_e108_eng_01_break = + 1a7c273a LOD_Parts_rob_e001_bdy_02_cylinder_d = + 1afc17e2 LOD_Parts_rou_e901_body_01_b1 = + 1bfc17e3 LOD_Parts_rou_e901_body_01_b2 = + 1bfc1803 LOD_Parts_rou_e901_body_02_b1 = + 1cfc1824 LOD_Parts_rou_e901_body_03_b1 = + 1d041f9b LOD_Frame_rou_e301_base_dead = + 1d9f5d7f LOD_Parts_rob_e001_bdy_05_cylinder_d = + 1dfc1825 LOD_Parts_rou_e901_body_03_b2 = + 1e1ca2ed LOD_Frame_rou_f301_base_dead = + 1e59926d LOD_Parts_rou_f104_sld_02_break = + 1e72117e LOD_Parts_rou_f105_sld_01_break = + 1e90809b LOD_Frame_rou_e302_base_dead = + 1f021ff1 LOD_Parts_mob_n900_wall_break01 = + 1f1ce1bc LOD_Frame_rou_e303_base_dead = + 1f8a94d0 LOD_Parts_rou_f106_sld_01_break = + 1fa903ed LOD_Frame_rou_f302_base_dead = + 20021ff2 LOD_Parts_mob_n900_wall_break02 = + 200f1910 LOD_Frame_rob_e001 = + 2035650e LOD_Frame_rou_f303_base_dead = + 208a9911 LOD_Parts_rou_f106_sld_02_break = + 210f1931 LOD_Frame_rob_f001 = + 220f1932 LOD_Frame_rob_f002 = + 23c4398f LOD_Parts_rou_f101_wep_01_break = + 240f1914 LOD_Frame_rob_e005 = + 243e1f4e LOD_Frame_rou_e401_dead = + 24dcbce1 LOD_Parts_rou_f102_wep_01_break = + 255f1f4e LOD_Frame_rou_e402_dead = + 257f1fd2 LOD_Frame_rou_f401_dead = + 25af49ad LOD_Frame_mob_n207_208 = + 25fad617 LOD_Frame_mob_n110 = + 26a01fd2 LOD_Frame_rou_f402_dead = + 26fad618 LOD_Frame_mob_n111 = + 27f9d917 LOD_Frame_mob_n040 = + 27fad619 LOD_Frame_mob_n112 = + 27fbd519 LOD_Frame_mob_n202 = + 2814438f LOD_Parts_rou_e901_body_01 = + 28d47ea4 LOD_Frame_rou_e106_wep_02_joint = + 28f9d918 LOD_Frame_mob_n041 = + 28f9da17 LOD_Frame_mob_n050 = + 28fad61a LOD_Frame_mob_n113 = + 28fed517 LOD_Frame_mob_n500 = + 29144390 LOD_Parts_rou_e901_body_02 = + 2953644e LOD_Frame_rou_e901_dead = + 29f9d919 LOD_Frame_mob_n042 = + 29f9da18 LOD_Frame_mob_n051 = + 29f9db17 LOD_Frame_mob_n060 = + 29fad61b LOD_Frame_mob_n114 = + 29fbd51b LOD_Frame_mob_n204 = + 29ffd517 LOD_Frame_mob_n600 = + 2a144391 LOD_Parts_rou_e901_body_03 = + 2aac89f8 LOD_Frame_mob_n301_02B = + 2aad2134 LOD_Frame_mob_n006_01A = + 2ab5bab5 LOD_Frame_mob_n900_gear = + 2af9d51e LOD_Frame_mob_n007 = + 2af9d91a LOD_Frame_mob_n043 = + 2af9da19 LOD_Frame_mob_n052 = + 2af9db18 LOD_Frame_mob_n061 = + 2afad61c LOD_Frame_mob_n115 = + 2afcd61a LOD_Frame_mob_n313 = + 2bad2135 LOD_Frame_mob_n006_01B = + 2bf9da1a LOD_Frame_mob_n053 = + 2bf9db19 LOD_Frame_mob_n062 = + 2bfad61d LOD_Frame_mob_n116 = + 2bfcd61b LOD_Frame_mob_n314 = + 2c9203f3 LOD_Parts_rou_e301_barrel = + 2cf9da1b LOD_Frame_mob_n054 = + 2cf9db1a LOD_Frame_mob_n063 = + 2d1e6514 LOD_Parts_rou_f301_barrel = + 2d9644f3 LOD_Parts_rou_e302_barrel = + 2df9da1c LOD_Frame_mob_n055 = + 2df9db1b LOD_Frame_mob_n064 = + 2e22a614 LOD_Parts_rou_f302_barrel = + 2ef9da1d LOD_Frame_mob_n056 = + 2ef9db1c LOD_Frame_mob_n065 = + 2efbd520 LOD_Frame_mob_n209 = + 2f26e714 LOD_Parts_rou_f303_barrel = + 2ff9db1d LOD_Frame_mob_n066 = + 3035f00d LOD_Frame_rou_e301_base = + 3156f00d LOD_Frame_rou_e302_base = + 3176f091 LOD_Frame_rou_f301_base = + 3277f00d LOD_Frame_rou_e303_base = + 3297f091 LOD_Frame_rou_f302_base = + 33821952 LOD_Frame_rou_e001 = + 33821a51 LOD_Frame_rou_e010 = + 33b8f091 LOD_Frame_rou_f303_base = + 34821953 LOD_Frame_rou_e002 = + 34821973 LOD_Frame_rou_f001 = + 34821a52 LOD_Frame_rou_e011 = + 34831952 LOD_Frame_rou_e101 = + 34dfe450 LOD_Parts_rob_f002_bdy_11b2 = + 35821954 LOD_Frame_rou_e003 = + 35821974 LOD_Frame_rou_f002 = + 35831953 LOD_Frame_rou_e102 = + 35831973 LOD_Frame_rou_f101 = + 35841952 LOD_Frame_rou_e201 = + 36821975 LOD_Frame_rou_f003 = + 36831974 LOD_Frame_rou_f102 = + 36841973 LOD_Frame_rou_f201 = + 36e1e450 LOD_Parts_rob_f002_bdy_13b2 = + 36e2e42f LOD_Parts_rob_f002_bdy_04b2 = + 37821956 LOD_Frame_rou_e005 = + 37831955 LOD_Frame_rou_e104 = + 37841974 LOD_Frame_rou_f202 = + 37861952 LOD_Frame_rou_e401 = + 37e2e430 LOD_Parts_rob_f002_bdy_04b3 = + 38821957 LOD_Frame_rou_e006 = + 38831956 LOD_Frame_rou_e105 = + 38831976 LOD_Frame_rou_f104 = + 38861953 LOD_Frame_rou_e402 = + 38861973 LOD_Frame_rou_f401 = + 38871952 LOD_Frame_rou_e501 = + 38e4e42f LOD_Parts_rob_f002_bdy_06b2 = + 39821958 LOD_Frame_rou_e007 = + 39821a57 LOD_Frame_rou_e016 = + 39831957 LOD_Frame_rou_e106 = + 39831977 LOD_Frame_rou_f105 = + 39861974 LOD_Frame_rou_f402 = + 3a821959 LOD_Frame_rou_e008 = + 3a821a58 LOD_Frame_rou_e017 = + 3a831958 LOD_Frame_rou_e107 = + 3a831978 LOD_Frame_rou_f106 = + 3b77ff28 LOD_Frame_rou_e901_guard_start = + 3b82195a LOD_Frame_rou_e009 = + 3b821a59 LOD_Frame_rou_e018 = + 3b831959 LOD_Frame_rou_e108 = + 3be7e42f LOD_Parts_rob_f002_bdy_09b2 = + 4330d401 LOD_Frame_rou_e011_wep04 = + 4430d402 LOD_Frame_rou_e011_wep05 = + 443c796f LOD_Frame_rou_e910_core = + 44b82e61 LOD_Frame_rou_e901_guard_end = + 4631d689 LOD_Frame_rou_f001_mnv02 = + 4731daca LOD_Frame_rou_f002_mnv02 = + 478a0957 LOD_Parts_rou_e106_wep_02_01_d = + 4a30f1c8 LOD_Frame_rou_e018_wep04 = + 4b30f1c9 LOD_Frame_rou_e018_wep05 = + 4f69a877 LOD_Parts_rou_e301_base = + 508aa877 LOD_Parts_rou_e302_base = + 509f74fe LOD_Effect_eff_t901_e01_D = + 50a074fd LOD_Effect_eff_t901_e02_C = + 50aaa8fb LOD_Parts_rou_f301_base = + 5176f2e3 LOD_Parts_rob_e001_bdy_03_conecter = + 51a174fd LOD_Effect_eff_t901_e03_C = + 51cba8fb LOD_Parts_rou_f302_base = + 52942259 LOD_Parts_rou_e001 = + 52942358 LOD_Parts_rou_e010 = + 52eca8fb LOD_Parts_rou_f303_base = + 5394225a LOD_Parts_rou_e002 = + 53942359 LOD_Parts_rou_e011 = + 5494225b LOD_Parts_rou_e003 = + 5594227c LOD_Parts_rou_f003 = + 5694225d LOD_Parts_rou_e005 = + 57251677 LOD_Parts_rob_e001_bdy_02_cylinder = + 5794225e LOD_Parts_rou_e006 = + 57992259 LOD_Parts_rou_e501 = + 585ffa97 LOD_Frame_rou_e901_attackA_keep = + 5894225f LOD_Parts_rou_e007 = + 5894235e LOD_Parts_rou_e016 = + 5980fa97 LOD_Frame_rou_e901_attackB_keep = + 59942260 LOD_Parts_rou_e008 = + 5994235f LOD_Parts_rou_e017 = + 5a26bb9a LOD_Parts_rob_e001_bdy_05_cylinder = + 5a942261 LOD_Parts_rou_e009 = + 5a942360 LOD_Parts_rou_e018 = + 5aa1fa97 LOD_Frame_rou_e901_attackC_keep = + 5ae58029 LOD_Parts_mob_n900_wall = + 5be03a55 LOD_Frame_rou_e901_damage01 = + 5ce03a56 LOD_Frame_rou_e901_damage02 = + 63dfe182 LOD_Parts_rob_f002_bdy_11_d = + 65318fec LOD_Frame_rou_e106_wep_02_01 = + 65e1e182 LOD_Parts_rob_f002_bdy_13_d = + 67e4e161 LOD_Parts_rob_f002_bdy_06_d = + 6fa88de5 LOD_Parts_rou_e101_eng_01_d = + 70a91a46 LOD_Parts_rou_e102_eng_01_d = + 70a98de5 LOD_Parts_rou_e101_eng_02_d = + 719c684a LOD_Parts_rou_e102_brg_01_d = + 729cfd4f LOD_Effect_eff_g001 = + 72aa3308 LOD_Parts_rou_e104_eng_01_d = + 731008e9 LOD_Parts_mob_n900_bg = + 739cfd50 LOD_Effect_eff_g002 = + 739d810c LOD_Parts_rou_e104_brg_01_d = + 73aabf69 LOD_Parts_rou_e105_eng_01_d = + 73bc4b89 LOD_Parts_rou_f104_eng_01_d = + 749cfd51 LOD_Effect_eff_g003 = + 74af998d LOD_Parts_rou_f104_brg_01_d = + 74bcd7ea LOD_Parts_rou_f105_eng_01_d = + 74eda09d LOD_Parts_rou_e101_bdy_01_d = + 759cfd52 LOD_Effect_eff_g004 = + 75abd82b LOD_Parts_rou_e107_eng_01_d = + 75bd644b LOD_Parts_rou_f106_eng_01_d = + 75ee2cfe LOD_Parts_rou_e102_bdy_01_d = + 75eea09d LOD_Parts_rou_e101_bdy_02_d = + 769cfd53 LOD_Effect_eff_g005 = + 76ac648c LOD_Parts_rou_e108_eng_01_d = + 76ef2cfe LOD_Parts_rou_e102_bdy_02_d = + 76efa09d LOD_Parts_rou_e101_bdy_03_d = + 77ef45c0 LOD_Parts_rou_e104_bdy_01_d = + 77f02cfe LOD_Parts_rou_e102_bdy_03_d = + 78efd221 LOD_Parts_rou_e105_bdy_01_d = + 78f045c0 LOD_Parts_rou_e104_bdy_02_d = + 78f12cfe LOD_Parts_rou_e102_bdy_04_d = + 7901eac3 LOD_Parts_rou_f105_bdy_01_d = + 79025e62 LOD_Parts_rou_f104_bdy_02_d = + 79f05e82 LOD_Parts_rou_e106_bdy_01_d = + 79f0d221 LOD_Parts_rou_e105_bdy_02_d = + 79f145c0 LOD_Parts_rou_e104_bdy_03_d = + 7a02eac3 LOD_Parts_rou_f105_bdy_02_d = + 7a035e62 LOD_Parts_rou_f104_bdy_03_d = + 7af0eae3 LOD_Parts_rou_e107_bdy_01_d = + 7af15e82 LOD_Parts_rou_e106_bdy_02_d = + 7af1d221 LOD_Parts_rou_e105_bdy_03_d = + 7af245c0 LOD_Parts_rou_e104_bdy_04_d = + 7af32cfe LOD_Parts_rou_e102_bdy_06_d = + 7b037724 LOD_Parts_rou_f106_bdy_02_d = + 7b03eac3 LOD_Parts_rou_f105_bdy_03_d = + 7bf17744 LOD_Parts_rou_e108_bdy_01_d = + 7bf25e82 LOD_Parts_rou_e106_bdy_03_d = + 7bf2d221 LOD_Parts_rou_e105_bdy_04_d = + 7bf345c0 LOD_Parts_rou_e104_bdy_05_d = + 7c047724 LOD_Parts_rou_f106_bdy_03_d = + 7c94d107 LOD_Parts_rou_f104_sld_01_d = + 7cf35e82 LOD_Parts_rou_e106_bdy_04_d = + 7cf3d221 LOD_Parts_rou_e105_bdy_05_d = + 7d065e62 LOD_Parts_rou_f104_bdy_06_d = + 7df4d221 LOD_Parts_rou_e105_bdy_06_d = + 7e95e9c9 LOD_Parts_rou_f106_sld_01_d = + 7f96e9c9 LOD_Parts_rou_f106_sld_02_d = + 849e03fb LOD_Effect_eff_t150 = + 84b79372 LOD_Parts_rou_e106_wep_02_01 = + 859f03fb LOD_Effect_eff_t250 = + 869d06fb LOD_Effect_eff_t080 = + 869e05fb LOD_Effect_eff_t170 = + 869f04fb LOD_Effect_eff_t260 = + 879e06fb LOD_Effect_eff_t180 = + 879f05fb LOD_Effect_eff_t270 = + 8821d085 LOD_Parts_rou_e108_wep_01_d = + 889d06fd LOD_Effect_eff_t082 = + 889f06fb LOD_Effect_eff_t280 = + 89575dd4 LOD_Parts_rou_e104_ext_01_d = + 8a585dd4 LOD_Parts_rou_e104_ext_02_d = + 8d71b6d3 LOD_Frame_rou_e101_eng_01 = + 8e0f3ad3 LOD_Frame_rou_e101_brg_01 = + 8e71b6d4 LOD_Frame_rou_e101_eng_02 = + 8e75f7d3 LOD_Frame_rou_e102_eng_01 = + 8f0f3ad4 LOD_Frame_rou_e101_brg_02 = + 8f137bd3 LOD_Frame_rou_e102_brg_01 = + 907e79d3 LOD_Frame_rou_e104_eng_01 = + 911bfdd3 LOD_Frame_rou_e104_brg_01 = + 9182bad3 LOD_Frame_rou_e105_eng_01 = + 92203ed3 LOD_Frame_rou_e105_brg_01 = + 93247fd3 LOD_Frame_rou_e106_brg_01 = + 97234da4 LOD_Frame_rou_e010_break = + 982351e5 LOD_Frame_rou_e011_break = + 98601169 LOD_Frame_rou_e101_break = + 996015aa LOD_Frame_rou_e102_break = + 99a111ed LOD_Frame_rou_e201_break = + 9a1bca4d LOD_Effect_eff_j001_e01 = + 9a348cfc LOD_Effect_wep_t100 = + 9a60a20b LOD_Frame_rou_f102_break = + 9ab3e876 LOD_Parts_rob_f001_brg_01 = + 9b1bca4e LOD_Effect_eff_j001_e02 = + 9b1bce8e LOD_Effect_eff_j101_e01 = + 9b1beb4d LOD_Effect_eff_j002_e01 = + 9b348cfd LOD_Effect_wep_t101 = + 9b348dfc LOD_Effect_wep_t110 = + 9b601e2c LOD_Frame_rou_e104_break = + 9ba1a28f LOD_Frame_rou_f202_break = + 9bb3e877 LOD_Parts_rob_f001_brg_02 = + 9c1bb610 LOD_Effect_eff_j300_e01 = + 9c1bce8f LOD_Effect_eff_j101_e02 = + 9c1bd2cf LOD_Effect_eff_j201_e01 = + 9c1beb4e LOD_Effect_eff_j002_e02 = + 9c1bef8e LOD_Effect_eff_j102_e01 = + 9c1cce8e LOD_Effect_eff_j101_f01 = + 9c1ceb4d LOD_Effect_eff_j002_f01 = + 9c60226d LOD_Frame_rou_e105_break = + 9c60aa8d LOD_Frame_rou_f104_break = + 9c64139a LOD_Frame_rou_e501_break = + 9cb3e878 LOD_Parts_rob_f001_brg_03 = + 9d1bd710 LOD_Effect_eff_j301_e01 = + 9d1c108e LOD_Effect_eff_j103_e01 = + 9d1cb610 LOD_Effect_eff_j300_f01 = + 9d1cce8f LOD_Effect_eff_j101_f02 = + 9d1cd2cf LOD_Effect_eff_j201_f01 = + 9d1ceb4e LOD_Effect_eff_j002_f02 = + 9d1d0c4d LOD_Effect_eff_j003_f01 = + 9d388b76 LOD_Parts_rob_e005_brg_01 = + 9d6026ae LOD_Frame_rou_e106_break = + 9d60aece LOD_Frame_rou_f105_break = + 9db3e879 LOD_Parts_rob_f001_brg_04 = + 9e1bf810 LOD_Effect_eff_j302_e01 = + 9e1cd710 LOD_Effect_eff_j301_f01 = + 9e1cf3cf LOD_Effect_eff_j202_f01 = + 9e1d0c4e LOD_Effect_eff_j003_f02 = + 9e236b6b LOD_Frame_rou_e017_break = + 9e388b77 LOD_Parts_rob_e005_brg_02 = + 9e602aef LOD_Frame_rou_e107_break = + 9e60b30f LOD_Frame_rou_f106_break = + 9eb21cc8 LOD_Parts_rob_f001_bdy_01 = + 9eb21dc7 LOD_Parts_rob_f001_bdy_10 = + 9f1cf810 LOD_Effect_eff_j302_f01 = + 9f1d318e LOD_Effect_eff_j104_f01 = + 9f236fac LOD_Frame_rou_e018_break = + 9f388b78 LOD_Parts_rob_e005_brg_03 = + 9f602f30 LOD_Frame_rou_e108_break = + 9fb21cc9 LOD_Parts_rob_f001_bdy_02 = + 9fb21dc8 LOD_Parts_rob_f001_bdy_11 = + 9fb65dc8 LOD_Parts_rob_f002_bdy_01 = + 9fc28f3e LOD_Frame_rou_e101_wep_01 = + a01ceb51 LOD_Effect_eff_j002_f05 = + a01d1910 LOD_Effect_eff_j303_f01 = + a0388b79 LOD_Parts_rob_e005_brg_04 = + a04ef05f LOD_Frame_rou_f101_wep_01 = + a06815cb LOD_Frame_rou_e901_break = + a0b21cca LOD_Parts_rob_f001_bdy_03 = + a0b21dc9 LOD_Parts_rob_f001_bdy_12 = + a0b21fc7 LOD_Parts_rob_f001_bdy_30 = + a0b65ec8 LOD_Parts_rob_f002_bdy_11 = + a0c6d03e LOD_Frame_rou_e102_wep_01 = + a0eb7f94 LOD_Parts_mob_n900_tower_break01 = + a13394fc LOD_Effect_wep_t080 = + a136bfc8 LOD_Parts_rob_e005_bdy_01 = + a136c0c7 LOD_Parts_rob_e005_bdy_10 = + a153315f LOD_Frame_rou_f102_wep_01 = + a1b21ccb LOD_Parts_rob_f001_bdy_04 = + a1b21dca LOD_Parts_rob_f001_bdy_13 = + a1b21fc8 LOD_Parts_rob_f001_bdy_31 = + a1b220c7 LOD_Parts_rob_f001_bdy_40 = + a1eb7f95 LOD_Parts_mob_n900_tower_break02 = + a1fd214d LOD_Effect_eff_e0011 = + a23394fd LOD_Effect_wep_t081 = + a236bfc9 LOD_Parts_rob_e005_bdy_02 = + a2926623 LOD_Parts_rob_f001_ant_01 = + a2b21ccc LOD_Parts_rob_f001_bdy_05 = + a2b65dcb LOD_Parts_rob_f002_bdy_04 = + a2b65eca LOD_Parts_rob_f002_bdy_13 = + a2b65fc9 LOD_Parts_rob_f002_bdy_22 = + a33394fe LOD_Effect_wep_t082 = + a336bfca LOD_Parts_rob_e005_bdy_03 = + a336c0c9 LOD_Parts_rob_e005_bdy_12 = + a336c2c7 LOD_Parts_rob_e005_bdy_30 = + a3926624 LOD_Parts_rob_f001_ant_02 = + a3b21ccd LOD_Parts_rob_f001_bdy_06 = + a3b21ecb LOD_Parts_rob_f001_bdy_24 = + a3b21fca LOD_Parts_rob_f001_bdy_33 = + a3b65dcc LOD_Parts_rob_f002_bdy_05 = + a3b65fca LOD_Parts_rob_f002_bdy_23 = + a3d3933e LOD_Frame_rou_e105_wep_01 = + a3fd444c LOD_Effect_eff_f0030 = + a43394ff LOD_Effect_wep_t083 = + a436bfcb LOD_Parts_rob_e005_bdy_04 = + a436c0ca LOD_Parts_rob_e005_bdy_13 = + a436c2c8 LOD_Parts_rob_e005_bdy_31 = + a436c3c7 LOD_Parts_rob_e005_bdy_40 = + a4926625 LOD_Parts_rob_f001_ant_03 = + a4b21cce LOD_Parts_rob_f001_bdy_07 = + a4b21dcd LOD_Parts_rob_f001_bdy_16 = + a4b65dcd LOD_Parts_rob_f002_bdy_06 = + a4fd254c LOD_Effect_eff_e0050 = + a5170923 LOD_Parts_rob_e005_ant_01 = + a5339500 LOD_Effect_wep_t084 = + a536bfcc LOD_Parts_rob_e005_bdy_05 = + a536c4c7 LOD_Parts_rob_e005_bdy_50 = + a5926626 LOD_Parts_rob_f001_ant_04 = + a5b21ccf LOD_Parts_rob_f001_bdy_08 = + a5fd254d LOD_Effect_eff_e0051 = + a5fd444e LOD_Effect_eff_f0032 = + a6170924 LOD_Parts_rob_e005_ant_02 = + a6339501 LOD_Effect_wep_t085 = + a636bfcd LOD_Parts_rob_e005_bdy_06 = + a636c1cb LOD_Parts_rob_e005_bdy_24 = + a636c2ca LOD_Parts_rob_e005_bdy_33 = + a636c4c8 LOD_Parts_rob_e005_bdy_51 = + a6926627 LOD_Parts_rob_f001_ant_05 = + a6b21cd0 LOD_Parts_rob_f001_bdy_09 = + a6fd2350 LOD_Effect_eff_e0034 = + a6fd254e LOD_Effect_eff_e0052 = + a7170925 LOD_Parts_rob_e005_ant_03 = + a736bfce LOD_Parts_rob_e005_bdy_07 = + a736c0cd LOD_Parts_rob_e005_bdy_16 = + a736c4c9 LOD_Parts_rob_e005_bdy_52 = + a77fc580 LOD_Frame_rou_e104_ext_01 = + a7926628 LOD_Parts_rob_f001_ant_06 = + a7b65dd0 LOD_Parts_rob_f002_bdy_09 = + a7fd254f LOD_Effect_eff_e0053 = + a8170926 LOD_Parts_rob_e005_ant_04 = + a836bfcf LOD_Parts_rob_e005_bdy_08 = + a87fc581 LOD_Frame_rou_e104_ext_02 = + a8926629 LOD_Parts_rob_f001_ant_07 = + a8fd2550 LOD_Effect_eff_e0054 = + a8fd4154 LOD_Effect_eff_f0008 = + a8fd4451 LOD_Effect_eff_f0035 = + a9170927 LOD_Parts_rob_e005_ant_05 = + a936bfd0 LOD_Parts_rob_e005_bdy_09 = + a9fd4452 LOD_Effect_eff_f0036 = + a9fd4551 LOD_Effect_eff_f0045 = + aa170928 LOD_Parts_rob_e005_ant_06 = + aafd4453 LOD_Effect_eff_f0037 = + aafd4750 LOD_Effect_eff_f0064 = + ab170929 LOD_Parts_rob_e005_ant_07 = + abfd2652 LOD_Effect_eff_e0066 = + abfd2751 LOD_Effect_eff_e0075 = + abfd4355 LOD_Effect_eff_f0029 = + abfd4454 LOD_Effect_eff_f0038 = + abfd4751 LOD_Effect_eff_f0065 = + abfd4850 LOD_Effect_eff_f0074 = + acfe4d4c LOD_Effect_eff_n0040 = + ad394055 LOD_Parts_rob_e001_bdy_04_tank = + ad6ec2ac LOD_Parts_rou_f101_eng_01 = + adbd1bf9 LOD_Effect_eff_j101_es = + ade2edec LOD_Parts_rou_e201_eng_01 = + adfe4d4d LOD_Effect_eff_n0041 = + ae7303ac LOD_Parts_rou_f102_eng_01 = + aebd1cf9 LOD_Effect_eff_j101_fs = + aee2618d LOD_Parts_rou_e101_eng_03 = + aefe4d4e LOD_Effect_eff_n0042 = + b07b85ac LOD_Parts_rou_f104_eng_01 = + b11909ac LOD_Parts_rou_f104_brg_01 = + b17e19dd LOD_Parts_rou_e101_bdy_01 = + b17fc6ac LOD_Parts_rou_f105_eng_01 = + b1f7a68b LOD_Parts_rou_e106_eng_01 = + b20a7afe LOD_Parts_rou_f101_bdy_01 = + b27e19de LOD_Parts_rou_e101_bdy_02 = + b27ea63e LOD_Parts_rou_e201_bdy_01 = + b2825add LOD_Parts_rou_e102_bdy_01 = + b28407ac LOD_Parts_rou_f106_eng_01 = + b2f7a68c LOD_Parts_rou_e106_eng_02 = + b2fbe78b LOD_Parts_rou_e107_eng_01 = + b2fe4d52 LOD_Effect_eff_n0046 = + b30028ac LOD_Parts_rou_e108_eng_01 = + b30a7aff LOD_Parts_rou_f101_bdy_02 = + b30ebbfe LOD_Parts_rou_f102_bdy_01 = + b37e19df LOD_Parts_rou_e101_bdy_03 = + b37ea63f LOD_Parts_rou_e201_bdy_02 = + b3825ade LOD_Parts_rou_e102_bdy_02 = + b3fe4d53 LOD_Effect_eff_n0047 = + b40a7b00 LOD_Parts_rou_f101_bdy_03 = + b40ebbff LOD_Parts_rou_f102_bdy_02 = + b40f485f LOD_Parts_rou_f202_bdy_01 = + b47ea640 LOD_Parts_rou_e201_bdy_03 = + b480136f LOD_Frame_stg16_light = + b4825adf LOD_Parts_rou_e102_bdy_03 = + b48adcdd LOD_Parts_rou_e104_bdy_01 = + b4fe4c55 LOD_Effect_eff_n0039 = + b5665406 LOD_Frame_rou_e901_stand = + b5825ae0 LOD_Parts_rou_e102_bdy_04 = + b58adcde LOD_Parts_rou_e104_bdy_02 = + b58f1ddd LOD_Parts_rou_e105_bdy_01 = + b6173dff LOD_Parts_rou_f104_bdy_02 = + b61b7efe LOD_Parts_rou_f105_bdy_01 = + b6825ae1 LOD_Parts_rou_e102_bdy_05 = + b68adcdf LOD_Parts_rou_e104_bdy_03 = + b68f1dde LOD_Parts_rou_e105_bdy_02 = + b6935edd LOD_Parts_rou_e106_bdy_01 = + b7173e00 LOD_Parts_rou_f104_bdy_03 = + b71b7eff LOD_Parts_rou_f105_bdy_02 = + b7825ae2 LOD_Parts_rou_e102_bdy_06 = + b78adce0 LOD_Parts_rou_e104_bdy_04 = + b78f1ddf LOD_Parts_rou_e105_bdy_03 = + b7935ede LOD_Parts_rou_e106_bdy_02 = + b7979fdd LOD_Parts_rou_e107_bdy_01 = + b81b7f00 LOD_Parts_rou_f105_bdy_03 = + b81fbfff LOD_Parts_rou_f106_bdy_02 = + b8825ae3 LOD_Parts_rou_e102_bdy_07 = + b88adce1 LOD_Parts_rou_e104_bdy_05 = + b88f1de0 LOD_Parts_rou_e105_bdy_04 = + b8935edf LOD_Parts_rou_e106_bdy_03 = + b89be0dd LOD_Parts_rou_e108_bdy_01 = + b91fc000 LOD_Parts_rou_f106_bdy_03 = + b949438b LOD_Parts_rou_f104_sld_01 = + b98f1de1 LOD_Parts_rou_e105_bdy_05 = + b9935ee0 LOD_Parts_rou_e106_bdy_04 = + ba173e03 LOD_Parts_rou_f104_bdy_06 = + ba49438c LOD_Parts_rou_f104_sld_02 = + ba4d848b LOD_Parts_rou_f105_sld_01 = + ba8f1de2 LOD_Parts_rou_e105_bdy_06 = + bb51c58b LOD_Parts_rou_f106_sld_01 = + bc51c58c LOD_Parts_rou_f106_sld_02 = + bcab4b23 LOD_Frame_rou_e107_wep_barrel = + bd5e6fc0 LOD_Parts_rob_f001_brg_01_d00 = + be333a17 LOD_Parts_rou_e101_wep_01 = + be5e90c0 LOD_Parts_rob_f001_brg_02_d00 = + bf377b17 LOD_Parts_rou_e102_wep_01 = + bf5eb1c0 LOD_Parts_rob_f001_brg_03_d00 = + bfbf9b17 LOD_Parts_rou_f101_wep_01 = + c05ed2c0 LOD_Parts_rob_f001_brg_04_d00 = + c05f62f9 LOD_Parts_rob_e005_brg_01_d00 = + c0c3dc17 LOD_Parts_rou_f102_wep_01 = + c11cfa25 LOD_Parts_rob_f001_bdy_01_d00 = + c13dd925 LOD_Parts_rob_f001_bdy_10_d00 = + c15f83f9 LOD_Parts_rob_e005_brg_02_d00 = + c21d1b25 LOD_Parts_rob_f001_bdy_02_d00 = + c23cd4d9 LOD_Parts_rou_e303_wep_01 = + c23dfa25 LOD_Parts_rob_f001_bdy_11_d00 = + c2443e17 LOD_Parts_rou_e105_wep_01 = + c25fa4f9 LOD_Parts_rob_e005_brg_03_d00 = + c31d3c25 LOD_Parts_rob_f001_bdy_03_d00 = + c33cd4da LOD_Parts_rou_e303_wep_02 = + c33e1b25 LOD_Parts_rob_f001_bdy_12_d00 = + c35fc5f9 LOD_Parts_rob_e005_brg_04_d00 = + c37fd925 LOD_Parts_rob_f001_bdy_30_d00 = + c41d5d25 LOD_Parts_rob_f001_bdy_04_d00 = + c41ded5e LOD_Parts_rob_e005_bdy_01_d00 = + c43e3c25 LOD_Parts_rob_f001_bdy_13_d00 = + c43ecc5e LOD_Parts_rob_e005_bdy_10_d00 = + c47ffa25 LOD_Parts_rob_f001_bdy_31_d00 = + c4a0d925 LOD_Parts_rob_f001_bdy_40_d00 = + c51d7e25 LOD_Parts_rob_f001_bdy_05_d00 = + c51e0e5e LOD_Parts_rob_e005_bdy_02_d00 = + c5510117 LOD_Parts_rou_e108_wep_01 = + c5912e2e LOD_Parts_rob_f001_ant_01_d00 = + c5e49a23 LOD_Parts_rob_f002_bdy_11b_d = + c61d9f25 LOD_Parts_rob_f001_bdy_06_d00 = + c61e2f5e LOD_Parts_rob_e005_bdy_03_d00 = + c63f0e5e LOD_Parts_rob_e005_bdy_12_d00 = + c6803c25 LOD_Parts_rob_f001_bdy_33_d00 = + c680cc5e LOD_Parts_rob_e005_bdy_30_d00 = + c6914f2e LOD_Parts_rob_f001_ant_02_d00 = + c71dc025 LOD_Parts_rob_f001_bdy_07_d00 = + c71e505e LOD_Parts_rob_e005_bdy_04_d00 = + c73e9f25 LOD_Parts_rob_f001_bdy_16_d00 = + c73f2f5e LOD_Parts_rob_e005_bdy_13_d00 = + c74b5de8 LOD_Parts_rou_f104_bdy_04L_d = + c780ed5e LOD_Parts_rob_e005_bdy_31_d00 = + c791702e LOD_Parts_rob_f001_ant_03_d00 = + c7a1cc5e LOD_Parts_rob_e005_bdy_40_d00 = + c81de125 LOD_Parts_rob_f001_bdy_08_d00 = + c81e715e LOD_Parts_rob_e005_bdy_05_d00 = + c891912e LOD_Parts_rob_f001_ant_04_d00 = + c8922167 LOD_Parts_rob_e005_ant_01_d00 = + c8c2cc5e LOD_Parts_rob_e005_bdy_50_d00 = + c91e0225 LOD_Parts_rob_f001_bdy_09_d00 = + c91e925e LOD_Parts_rob_e005_bdy_06_d00 = + c9665816 LOD_Frame_rou_e901_start = + c9812f5e LOD_Parts_rob_e005_bdy_33_d00 = + c98669c8 LOD_Frame_rou_e106_wep_02_01_break = + c991b22e LOD_Parts_rob_f001_ant_05_d00 = + c9924267 LOD_Parts_rob_e005_ant_02_d00 = + c9c2ed5e LOD_Parts_rob_e005_bdy_51_d00 = + ca1eb35e LOD_Parts_rob_e005_bdy_07_d00 = + ca3f925e LOD_Parts_rob_e005_bdy_16_d00 = + ca91d32e LOD_Parts_rob_f001_ant_06_d00 = + ca926367 LOD_Parts_rob_e005_ant_03_d00 = + cb1ed45e LOD_Parts_rob_e005_bdy_08_d00 = + cb91f42e LOD_Parts_rob_f001_ant_07_d00 = + cb928467 LOD_Parts_rob_e005_ant_04_d00 = + cb9c3ca3 LOD_Effect_eff_t401_caseM = + cb9c40e3 LOD_Effect_eff_t402_caseL = + cc1ef55e LOD_Parts_rob_e005_bdy_09_d00 = + cc5085f1 LOD_Parts_rou_e901_wing_01_L_b1 = + cc92a567 LOD_Parts_rob_e005_ant_05_d00 = + cd515de8 LOD_Parts_rou_f104_bdy_04R_d = + cd7185f1 LOD_Parts_rou_e901_wing_02_L_b1 = + cd92c667 LOD_Parts_rob_e005_ant_06_d00 = + ce7185f2 LOD_Parts_rou_e901_wing_02_L_b2 = + ce9285f1 LOD_Parts_rou_e901_wing_03_L_b1 = + ce92e767 LOD_Parts_rob_e005_ant_07_d00 = + cf9285f2 LOD_Parts_rou_e901_wing_03_L_b2 = + cfb385f1 LOD_Parts_rou_e901_wing_04_L_b1 = + d09c3868 LOD_Effect_eff_t400_caseS = + d0d485f1 LOD_Parts_rou_e901_wing_05_L_b1 = + d1d485f2 LOD_Parts_rou_e901_wing_05_L_b2 = + d25086b7 LOD_Parts_rou_e901_wing_01_R_b1 = + d2abdf4c LOD_Frame_rou_e106_eng = + d37186b7 LOD_Parts_rou_e901_wing_02_R_b1 = + d49286b7 LOD_Parts_rou_e901_wing_03_R_b1 = + d59286b8 LOD_Parts_rou_e901_wing_03_R_b2 = + d5b386b7 LOD_Parts_rou_e901_wing_04_R_b1 = + d6b386b8 LOD_Parts_rou_e901_wing_04_R_b2 = + d6d486b7 LOD_Parts_rou_e901_wing_05_R_b1 = + d7d486b8 LOD_Parts_rou_e901_wing_05_R_b2 = + da7babb0 LOD_Parts_rou_e901_wing_01_L = + db7cabb0 LOD_Parts_rou_e901_wing_02_L = + db8adec5 LOD_Parts_mob_n900_tower = + dbaee269 LOD_Parts_rou_e107_wep_barrel = + dc7dabb0 LOD_Parts_rou_e901_wing_03_L = + dd7eabb0 LOD_Parts_rou_e901_wing_04_L = + de7fabb0 LOD_Parts_rou_e901_wing_05_L = + ded58641 LOD_Frame_mob_e202_01 = + df8ad88c LOD_Frame_rou_e107_wep_base = + dfd58642 LOD_Frame_mob_e202_02 = + e07babb6 LOD_Parts_rou_e901_wing_01_R = + e0d58643 LOD_Frame_mob_e202_03 = + e17cabb6 LOD_Parts_rou_e901_wing_02_R = + e1f7afa2 LOD_Frame_rou_e901_attackA_start = + e27dabb6 LOD_Parts_rou_e901_wing_03_R = + e2bdb114 LOD_Frame_rou_e005_wep = + e2f7b3e3 LOD_Frame_rou_e901_attackB_start = + e37eabb6 LOD_Parts_rou_e901_wing_04_R = + e3f7b824 LOD_Frame_rou_e901_attackC_start = + e47fabb6 LOD_Parts_rou_e901_wing_05_R = + e5d5ac48 LOD_Frame_mob_n200_01 = + e6d5ac49 LOD_Frame_mob_n200_02 = + e6d5ac69 LOD_Frame_mob_n201_01 = + e6f7b255 LOD_Frame_mob_n207_208_02 = + e7d5ac6a LOD_Frame_mob_n201_02 = + e7f6ac69 LOD_Frame_mob_n301_01 = + e8d5ac6b LOD_Frame_mob_n201_03 = + e8d5ac8b LOD_Frame_mob_n202_02 = + e8d5acab LOD_Frame_mob_n203_01 = + e9d5ac8c LOD_Frame_mob_n202_03 = + e9d5acac LOD_Frame_mob_n203_02 = + e9f70f48 LOD_Frame_mob_n330_01 = + ea4168f0 LOD_Frame_rou_e901_attackA_end = + ea93ad0f LOD_Frame_mob_n006_02 = + ead5ac8d LOD_Frame_mob_n202_04 = + ead5aced LOD_Frame_mob_n205_01 = + eaf70f49 LOD_Frame_mob_n330_02 = + eaf73048 LOD_Frame_mob_n340_01 = + eb4189f0 LOD_Frame_rou_e901_attackB_end = + eb93ad10 LOD_Frame_mob_n006_03 = + ebd5acee LOD_Frame_mob_n205_02 = + ebd5ad0e LOD_Frame_mob_n206_01 = + ebf70f4a LOD_Frame_mob_n330_03 = + ebf73049 LOD_Frame_mob_n340_02 = + ebf75148 LOD_Frame_mob_n350_01 = + ec41aaf0 LOD_Frame_rou_e901_attackC_end = + ec93ad11 LOD_Frame_mob_n006_04 = + ecd5acef LOD_Frame_mob_n205_03 = + ecd5ad0f LOD_Frame_mob_n206_02 = + ecf75149 LOD_Frame_mob_n350_02 = + ecf77248 LOD_Frame_mob_n360_01 = + edf77249 LOD_Frame_mob_n360_02 = + eef7724a LOD_Frame_mob_n360_03 = + efd9d440 LOD_Parts_rou_f202_eng = + f08ecbe2 LOD_Frame_rou_f001_mnv01_L = + f0d6d840 LOD_Parts_rou_f202_brg = + f16c09a0 LOD_Frame_rou_e101_eng_01_break = + f1cfcc66 LOD_Frame_rou_f002_mnv01_L = + f26c0de1 LOD_Frame_rou_e101_eng_02_break = + f27a579d LOD_Frame_rou_e101_brg_01_break = + f2848cf2 LOD_Frame_rou_e102_eng_01_break = + f37a5bde LOD_Frame_rou_e101_brg_02_break = + f392daef LOD_Frame_rou_e102_brg_01_break = + f4b59396 LOD_Frame_rou_e104_eng_01_break = + f57546ac LOD_Frame_rou_f001_turn180 = + f5c3e193 LOD_Frame_rou_e104_brg_01_break = + f5ce16e8 LOD_Frame_rou_e105_eng_01_break = + f68ecbe8 LOD_Frame_rou_f001_mnv01_R = + f6b64730 LOD_Frame_rou_f002_turn180 = + f6dc64e5 LOD_Frame_rou_e105_brg_01_break = + f7cfcc6c LOD_Frame_rou_f002_mnv01_R = + f7f4e837 LOD_Frame_rou_e106_brg_01_break = + f96d7dc8 LOD_Parts_rob_f002_bdy_13b2_d = + fb4ce0c8 LOD_Parts_rob_f002_bdy_06b2_d = + fe515e97 LOD_Parts_rou_e107_wep_base = + +=== EnumGameModel_test.tbl (via MotionEnumTable) (1 records) === +-- 'Enumerate' (360 fields) + 10514790 GameModel_rou_e201_eng = + 1451e84f GameModel_rou_e106_eng = + 19cbd263 GameModel_eff_i001_f = + 19cbf362 GameModel_eff_i101_e = + 1acbf363 GameModel_eff_i101_f = + 1accd263 GameModel_eff_i002_f = + 1accf362 GameModel_eff_i102_e = + 1b2dd2a4 GameModel_eff_l010_e = + 1bcdd263 GameModel_eff_i003_f = + 1c2ed2a4 GameModel_eff_l011_e = + 1c2ef383 GameModel_eff_l101_e = + 1cced263 GameModel_eff_i004_f = + 1ccfd262 GameModel_eff_i005_e = + 1d2ef384 GameModel_eff_l101_f = + 1d2f1483 GameModel_eff_l201_e = + 1d2fd284 GameModel_eff_l002_f = + 1d2ff383 GameModel_eff_l102_e = + 1dcfd263 GameModel_eff_i005_f = + 1e2f1484 GameModel_eff_l201_f = + 1e2ff384 GameModel_eff_l102_f = + 1f31f383 GameModel_eff_l104_e = + 1f503583 GameModel_eff_m301_e = + 2031f384 GameModel_eff_l104_f = + 2032f383 GameModel_eff_l105_e = + 204f7783 GameModel_eff_m500_e = + 20503584 GameModel_eff_m301_f = + 20505683 GameModel_eff_m401_e = + 20513583 GameModel_eff_m302_e = + 20782c56 GameModel_mob_e202_01 = + 20aad26b GameModel_eff_h001_n = + 2132f384 GameModel_eff_l105_f = + 2133f383 GameModel_eff_l106_e = + 214f7784 GameModel_eff_m500_f = + 21505684 GameModel_eff_m401_f = + 21507783 GameModel_eff_m501_e = + 21513584 GameModel_eff_m302_f = + 21523583 GameModel_eff_m303_e = + 216f24b4 GameModel_rou_e107_wep_base = + 21782c57 GameModel_mob_e202_02 = + 21abd26b GameModel_eff_h002_n = + 2233f384 GameModel_eff_l106_f = + 2234f383 GameModel_eff_l107_e = + 22507784 GameModel_eff_m501_f = + 22517783 GameModel_eff_m502_e = + 22523584 GameModel_eff_m303_f = + 22782c58 GameModel_mob_e202_03 = + 22acd26b GameModel_eff_h003_n = + 2335f383 GameModel_eff_l108_e = + 2463ba17 GameModel_rou_e005_wep = + 254fd28c GameModel_eff_m001_n = + 2650d28c GameModel_eff_m002_n = + 2751d28c GameModel_eff_m003_n = + 2778525d GameModel_mob_n200_01 = + 2852d28c GameModel_eff_m004_n = + 285eda4d GameModel_mob_n207_208_02 = + 2878525e GameModel_mob_n200_02 = + 2878527e GameModel_mob_n201_01 = + 2978527f GameModel_mob_n201_02 = + 2999527e GameModel_mob_n301_01 = + 2a785280 GameModel_mob_n201_03 = + 2a7852a0 GameModel_mob_n202_02 = + 2a7852c0 GameModel_mob_n203_01 = + 2b7852a1 GameModel_mob_n202_03 = + 2b7852c1 GameModel_mob_n203_02 = + 2b99b55d GameModel_mob_n330_01 = + 2c365324 GameModel_mob_n006_02 = + 2c7852a2 GameModel_mob_n202_04 = + 2c785302 GameModel_mob_n205_01 = + 2c99b55e GameModel_mob_n330_02 = + 2c99d65d GameModel_mob_n340_01 = + 2d365325 GameModel_mob_n006_03 = + 2d785303 GameModel_mob_n205_02 = + 2d785323 GameModel_mob_n206_01 = + 2d99b55f GameModel_mob_n330_03 = + 2d99d65e GameModel_mob_n340_02 = + 2d99f75d GameModel_mob_n350_01 = + 2da1eb28 GameModel_eff_s901_e01_B = + 2e365326 GameModel_mob_n006_04 = + 2e785304 GameModel_mob_n205_03 = + 2e785324 GameModel_mob_n206_02 = + 2e99f75e GameModel_mob_n350_02 = + 2e9a185d GameModel_mob_n360_01 = + 2f9a185e GameModel_mob_n360_02 = + 309a185f GameModel_mob_n360_03 = + 30a2778b GameModel_eff_t901_e01_D = + 30a2eb2a GameModel_eff_s901_e02_D = + 30a3778a GameModel_eff_t901_e02_C = + 31a3eb2a GameModel_eff_s901_e03_D = + 31a4778a GameModel_eff_t901_e03_C = + 4e875cf4 GameModel_eff_c001 = + 4f888112 GameModel_rou_e301_barrel = + 5014e233 GameModel_rou_f301_barrel = + 508cc212 GameModel_rou_e302_barrel = + 51192333 GameModel_rou_f302_barrel = + 51910312 GameModel_rou_e303_barrel = + 521d6433 GameModel_rou_f303_barrel = + 52875d78 GameModel_eff_g001 = + 52875d98 GameModel_eff_h000 = + 53875d79 GameModel_eff_g002 = + 53885d98 GameModel_eff_h100 = + 54875d7a GameModel_eff_g003 = + 54885d99 GameModel_eff_h101 = + 54885e98 GameModel_eff_h110 = + 55875d7b GameModel_eff_g004 = + 55885d9a GameModel_eff_h102 = + 55885e99 GameModel_eff_h111 = + 55885f98 GameModel_eff_h120 = + 558a5d98 GameModel_eff_h300 = + 56875d7c GameModel_eff_g005 = + 56875d9c GameModel_eff_h004 = + 56885d9b GameModel_eff_h103 = + 56885f99 GameModel_eff_h121 = + 56886098 GameModel_eff_h130 = + 568a5d99 GameModel_eff_h301 = + 568a5e98 GameModel_eff_h310 = + 57875d9d GameModel_eff_h005 = + 57885f9a GameModel_eff_h122 = + 57886099 GameModel_eff_h131 = + 578a5d9a GameModel_eff_h302 = + 578a5e99 GameModel_eff_h311 = + 58875d9e GameModel_eff_h006 = + 58875f3d GameModel_eff_m010 = + 58885f9b GameModel_eff_h123 = + 5888609a GameModel_eff_h132 = + 588a5d9b GameModel_eff_h303 = + 59875d9f GameModel_eff_h007 = + 59875f3e GameModel_eff_m011 = + 5987603d GameModel_eff_m020 = + 5988609b GameModel_eff_h133 = + 598a5d9c GameModel_eff_h304 = + 5a875da0 GameModel_eff_h008 = + 5a87613d GameModel_eff_m030 = + 5a8a5d9d GameModel_eff_h305 = + 5b87613e GameModel_eff_m031 = + 5b87623d GameModel_eff_m040 = + 5b8a5d9e GameModel_eff_h306 = + 5c87633d GameModel_eff_m050 = + 5c8a5d9f GameModel_eff_h307 = + 5d875f03 GameModel_eff_s000 = + 5d87643d GameModel_eff_m060 = + 5e885f03 GameModel_eff_s100 = + 5e8a5da1 GameModel_eff_h309 = + 5f876024 GameModel_eff_t010 = + 5f885f24 GameModel_eff_t100 = + 5f886003 GameModel_eff_s110 = + 60876124 GameModel_eff_t020 = + 60886024 GameModel_eff_t110 = + 60886103 GameModel_eff_s120 = + 60895f24 GameModel_eff_t200 = + 61876224 GameModel_eff_t030 = + 61886124 GameModel_eff_t120 = + 61886203 GameModel_eff_s130 = + 61896024 GameModel_eff_t210 = + 618a5f24 GameModel_eff_t300 = + 623ad07f GameModel_rob_e001 = + 62876324 GameModel_eff_t040 = + 62886224 GameModel_eff_t130 = + 62896124 GameModel_eff_t220 = + 628a6024 GameModel_eff_t310 = + 633ad0a0 GameModel_rob_f001 = + 63876424 GameModel_eff_t050 = + 63896224 GameModel_eff_t230 = + 638a6124 GameModel_eff_t320 = + 643ad0a1 GameModel_rob_f002 = + 64876524 GameModel_eff_t060 = + 64886424 GameModel_eff_t150 = + 64896324 GameModel_eff_t240 = + 648a6224 GameModel_eff_t330 = + 65876624 GameModel_eff_t070 = + 65886524 GameModel_eff_t160 = + 65896424 GameModel_eff_t250 = + 663ad083 GameModel_rob_e005 = + 66876724 GameModel_eff_t080 = + 66886624 GameModel_eff_t170 = + 66896524 GameModel_eff_t260 = + 668a6424 GameModel_eff_t350 = + 67268da7 GameModel_mob_n110 = + 675552b0 GameModel_mob_n207_208 = + 67876824 GameModel_eff_t090 = + 67886724 GameModel_eff_t180 = + 67896624 GameModel_eff_t270 = + 68268da8 GameModel_mob_n111 = + 68876726 GameModel_eff_t082 = + 68886824 GameModel_eff_t190 = + 68896724 GameModel_eff_t280 = + 692590a7 GameModel_mob_n040 = + 69268da9 GameModel_mob_n112 = + 69278ca9 GameModel_mob_n202 = + 69896824 GameModel_eff_t290 = + 6a2590a8 GameModel_mob_n041 = + 6a2591a7 GameModel_mob_n050 = + 6a268daa GameModel_mob_n113 = + 6a2a8ca7 GameModel_mob_n500 = + 6aa530d2 GameModel_rou_e106_wep_02_joint = + 6b2590a9 GameModel_mob_n042 = + 6b2591a8 GameModel_mob_n051 = + 6b2592a7 GameModel_mob_n060 = + 6b268dab GameModel_mob_n114 = + 6b278cab GameModel_mob_n204 = + 6b2b8ca7 GameModel_mob_n600 = + 6c258cae GameModel_mob_n007 = + 6c2590aa GameModel_mob_n043 = + 6c2591a9 GameModel_mob_n052 = + 6c2592a8 GameModel_mob_n061 = + 6c268dac GameModel_mob_n115 = + 6c288daa GameModel_mob_n313 = + 6c5292fb GameModel_mob_n301_02B = + 6c532a37 GameModel_mob_n006_01A = + 6d2591aa GameModel_mob_n053 = + 6d2592a9 GameModel_mob_n062 = + 6d268dad GameModel_mob_n116 = + 6d288dab GameModel_mob_n314 = + 6d532a38 GameModel_mob_n006_01B = + 6e2591ab GameModel_mob_n054 = + 6e2592aa GameModel_mob_n063 = + 6e2e8ca7 GameModel_mob_n900 = + 6f2591ac GameModel_mob_n055 = + 6f2592ab GameModel_mob_n064 = + 702591ad GameModel_mob_n056 = + 702592ac GameModel_mob_n065 = + 70278cb0 GameModel_mob_n209 = + 712592ad GameModel_mob_n066 = + 723ee773 GameModel_rou_e301_base = + 735fe773 GameModel_rou_e302_base = + 737fe7f7 GameModel_rou_f301_base = + 7480e773 GameModel_rou_e303_base = + 74a0e7f7 GameModel_rou_f302_base = + 75add0c1 GameModel_rou_e001 = + 75add1c0 GameModel_rou_e010 = + 75c1e7f7 GameModel_rou_f303_base = + 76add0c2 GameModel_rou_e002 = + 76add0e2 GameModel_rou_f001 = + 76add1c1 GameModel_rou_e011 = + 76aed0c1 GameModel_rou_e101 = + 77add0c3 GameModel_rou_e003 = + 77add0e3 GameModel_rou_f002 = + 77aed0c2 GameModel_rou_e102 = + 77aed0e2 GameModel_rou_f101 = + 77afd0c1 GameModel_rou_e201 = + 78add0e4 GameModel_rou_f003 = + 78aed0e3 GameModel_rou_f102 = + 78afd0e2 GameModel_rou_f201 = + 79add0c5 GameModel_rou_e005 = + 79aed0c4 GameModel_rou_e104 = + 79afd0e3 GameModel_rou_f202 = + 79b1d0c1 GameModel_rou_e401 = + 7a1eed25 GameModel_wep_t100 = + 7a80b743 GameModel_eff_j001_e01 = + 7aadd0c6 GameModel_rou_e006 = + 7aaed0c5 GameModel_rou_e105 = + 7aaed0e5 GameModel_rou_f104 = + 7ab1d0c2 GameModel_rou_e402 = + 7ab1d0e2 GameModel_rou_f401 = + 7ab2d0c1 GameModel_rou_e501 = + 7b1eed26 GameModel_wep_t101 = + 7b1eee25 GameModel_wep_t110 = + 7b80b744 GameModel_eff_j001_e02 = + 7b80bb84 GameModel_eff_j101_e01 = + 7b80d843 GameModel_eff_j002_e01 = + 7badd0c7 GameModel_rou_e007 = + 7badd1c6 GameModel_rou_e016 = + 7baed0c6 GameModel_rou_e106 = + 7baed0e6 GameModel_rou_f105 = + 7bb1d0e3 GameModel_rou_f402 = + 7c80bb85 GameModel_eff_j101_e02 = + 7c80bfc5 GameModel_eff_j201_e01 = + 7c80d844 GameModel_eff_j002_e02 = + 7c80dc84 GameModel_eff_j102_e01 = + 7c81bb84 GameModel_eff_j101_f01 = + 7c81d843 GameModel_eff_j002_f01 = + 7cadd0c8 GameModel_rou_e008 = + 7cadd1c7 GameModel_rou_e017 = + 7caed0c7 GameModel_rou_e107 = + 7caed0e7 GameModel_rou_f106 = + 7d80fd84 GameModel_eff_j103_e01 = + 7d81bb85 GameModel_eff_j101_f02 = + 7d81bfc5 GameModel_eff_j201_f01 = + 7d81d844 GameModel_eff_j002_f02 = + 7d81f943 GameModel_eff_j003_f01 = + 7dadd0c9 GameModel_rou_e009 = + 7dadd1c8 GameModel_rou_e018 = + 7daed0c8 GameModel_rou_e108 = + 7e81e0c5 GameModel_eff_j202_f01 = + 7e81f944 GameModel_eff_j003_f02 = + 7eb6d0c1 GameModel_rou_e901 = + 7f821e84 GameModel_eff_j104_f01 = + 8081d847 GameModel_eff_j002_f05 = + 811df525 GameModel_wep_t080 = + 815d4798 GameModel_eff_e0011 = + 821df526 GameModel_wep_t081 = + 831df527 GameModel_wep_t082 = + 835d6a97 GameModel_eff_f0030 = + 841df528 GameModel_wep_t083 = + 845d4b97 GameModel_eff_e0050 = + 851df529 GameModel_wep_t084 = + 85283b2a GameModel_rou_e011_wep04 = + 855d4b98 GameModel_eff_e0051 = + 855d6a99 GameModel_eff_f0032 = + 861df52a GameModel_wep_t085 = + 86283b2b GameModel_rou_e011_wep05 = + 864570d5 GameModel_rou_e910_core = + 865d499b GameModel_eff_e0034 = + 865d4b99 GameModel_eff_e0052 = + 875d4b9a GameModel_eff_e0053 = + 885d4b9b GameModel_eff_e0054 = + 885d679f GameModel_eff_f0008 = + 885d6a9c GameModel_eff_f0035 = + 895d6a9d GameModel_eff_f0036 = + 895d6b9c GameModel_eff_f0045 = + 8a5d6a9e GameModel_eff_f0037 = + 8a5d6d9b GameModel_eff_f0064 = + 8b5d4c9d GameModel_eff_e0066 = + 8b5d4d9c GameModel_eff_e0075 = + 8b5d69a0 GameModel_eff_f0029 = + 8b5d6a9f GameModel_eff_f0038 = + 8b5d6d9c GameModel_eff_f0065 = + 8b5d6e9b GameModel_eff_f0074 = + 8c2858f1 GameModel_rou_e018_wep04 = + 8c5e7397 GameModel_eff_n0040 = + 8d2858f2 GameModel_rou_e018_wep05 = + 8d5e7398 GameModel_eff_n0041 = + 8df380df GameModel_eff_j101_es = + 8e5e7399 GameModel_eff_n0042 = + 8ef381df GameModel_eff_j101_fs = + 905e7698 GameModel_eff_n0071 = + 925e739d GameModel_eff_n0046 = + 935e739e GameModel_eff_n0047 = + 945e72a0 GameModel_eff_n0039 = + a77db450 GameModel_rou_e106_wep_02_01 = + ab9f3f30 GameModel_eff_t401_caseM = + ab9f4370 GameModel_eff_t402_caseL = + b09f3af5 GameModel_eff_t400_caseS = + cfd8deaa GameModel_rou_e101_eng_01 = + d07662aa GameModel_rou_e101_brg_01 = + d0d8deab GameModel_rou_e101_eng_02 = + d0dd1faa GameModel_rou_e102_eng_01 = + d17662ab GameModel_rou_e101_brg_02 = + d17aa3aa GameModel_rou_e102_brg_01 = + d2e5a1aa GameModel_rou_e104_eng_01 = + d38325aa GameModel_rou_e104_brg_01 = + d3a52311 GameModel_eff_s900_e_Charge = + d3e9e2aa GameModel_rou_e105_eng_01 = + d415d53a GameModel_eff_d910_Canceler = + d48766aa GameModel_rou_e105_brg_01 = + d58ba7aa GameModel_rou_e106_brg_01 = + d5f264aa GameModel_rou_e107_eng_01 = + d6f6a5aa GameModel_rou_e108_eng_01 = + dd3fc0ab GameModel_rou_f104_sld_02 = + dd4401aa GameModel_rou_f105_sld_01 = + de4842aa GameModel_rou_f106_sld_01 = + df4842ab GameModel_rou_f106_sld_02 = + e129b736 GameModel_rou_e101_wep_01 = + e22df836 GameModel_rou_e102_wep_01 = + e2b61836 GameModel_rou_f101_wep_01 = + e3ba5936 GameModel_rou_f102_wep_01 = + e53abb36 GameModel_rou_e105_wep_01 = + e9e6ed57 GameModel_rou_e104_ext_01 = + eae6ed58 GameModel_rou_e104_ext_02 = + f622b984 GameModel_stg16_light = + fecfb8ef GameModel_rou_e107_wep_barrel = diff --git a/docs/re/structures/stage-definition-table.md b/docs/re/structures/stage-definition-table.md index b1e191d5..c9a6c7c1 100644 --- a/docs/re/structures/stage-definition-table.md +++ b/docs/re/structures/stage-definition-table.md @@ -6,6 +6,14 @@ Status: βœ… for the record vocabulary and the stageβ†’table wiring; This is the answer to "where does the game say *which* enemies appear in a mission, and when". It is data, not code, and it lives in the language paks. +> **Correction (2026-08-24):** the record dumped below is the `_Test` *template*, +> not a real stage record. The real `Stage_S02` record has six sub-records β€” +> including `Phase_1..3` β€” and 19 `StageResource` fields, several of which the +> template does not have at all (`EnumerateSubobjective`, `EnumerateAIParams`, +> `BackGroundID`, `WingmanIconID_0..3`). See +> [stage-mission-tables.md](stage-mission-tables.md) for the real one. The +> stageβ†’`UnitGroup` wiring and the hash table below are unaffected. + ## βœ… The per-stage definition record `GP_MAIN_GAME_.pak` contains one IDXD object per stage. Dumped with diff --git a/docs/re/structures/stage-mission-tables.md b/docs/re/structures/stage-mission-tables.md new file mode 100644 index 00000000..1db98103 --- /dev/null +++ b/docs/re/structures/stage-mission-tables.md @@ -0,0 +1,144 @@ +# The stage table set β€” phases, routes, sub-objectives and AI parameters + +Status: βœ… the table set and how the stage record reaches it, validated across +all 28 stages; βœ… the route/formation keyframe layout; ❔ what the route-name +phase suffixes mean and where a phase *advances*. + +This is the layer that answers "which enemies and objectives come into play, +and when". It is all data, in `GP_MAIN_GAME_.pak`, in the same +self-describing IDXD container as the squadron roster +([unit-group-table.md](unit-group-table.md)). + +Tool: `tools/re-capture/stagetbl.py` (pure static, runs no emulator). + +``` +python3 tools/re-capture/stagetbl.py --follow S02 # stage record + every table it names +python3 tools/re-capture/stagetbl.py --name 'stage\AIParams_S02.tbl' +``` + +Committed dumps: [`../data/stage-s02-tables.txt`](../data/stage-s02-tables.txt) +and [`../data/aiparams-s02.txt`](../data/aiparams-s02.txt). + +## βœ… The real stage record is much richer than the `_Test` template + +[stage-definition-table.md](stage-definition-table.md) was written from the +`_Test` template record, which is a stripped stand-in. The **real** `Stage_S02` +record has six sub-records, not one, and 19 fields in its `StageResource` rather +than the template's 13: + +``` +StageResource EnumerateLocalString = EnumLocalString_S02.tbl + EnumerateWeapon = EnumWeapon_Test.tbl + CollisionMeshes = CollisionSet_S02.bin + EnumerateNullFrame = Route_S02.tbl + EnumerateCharacter = EnumCharacter_S02.tbl + EnumerateUnit = EnumUnit_S02.tbl + EnumerateFormation = FormationSet_S02.tbl + BackGroundID = Lebendorf + WingmanIconID_0..3 = "", PGHUD_WING4, "", "" + NamePlate = nameplate_S02.tbl + EnumerateSubobjective = SUBObjectiveSettings_S02.tbl + BackGroundPackage = game:\hidden\Resource3D\BG_Lebendorf_near.xpr + EnumerateAIParams = AIParams_S02.tbl + StageResourcePackage = game:\hidden\Resource3D\Stage_S02.xpr + MessageSet = StageMessageSet_S02.tbl + EnumerateSquadron = UnitGroup_S02.tbl +LodResource LodEnumTable = DefTables.pak+EnumLODSet_test.tbl +Phase_1 MapPath = mapmesh_box_500km.rgn, MapMesh = mapmesh_box_500km.col, +Phase_2 AsteroidDefinition = "", BackgroundResourceID = "" +Phase_3 +MotionResource MotionEnumTable = DefTables.pak+EnumGameModel_test.tbl +``` + +**A stage is divided into `Phase_N` blocks** β€” three for Stage 02 β€” each naming +its own map path, map mesh, asteroid definition and background. `--follow` +resolves every table above except `StageMessageSet_S02.tbl`, which is not in +`GP_MAIN_GAME_E.pak` under that name (❔, probably localised elsewhere). + +## βœ… `Route_S.tbl` β€” the arrival paths, bound to squadron *and* phase + +121 records for Stage 02, 1449 across the corpus. Records are named +**`Route__p`**, e.g. `Route_ADN101_p1F`, +`Route_ADT102_p1A`, `Route_ADN310_p3F` β€” tying a route to a squadron id from +[`UnitGroup`](unit-group-table.md) and to a phase from the stage record. + +A record is a **time-stamped keyframed path**: `FrameCount` frames of eight +values each, + +``` +(time, quat.x, quat.y, quat.z, quat.w, pos.x, pos.y, pos.z) +``` + +`Route_ADN101_p1F` is 3 frames at t = 0, 20, 30, running from +(-2500, -100, -2500) to (4241.8, 100, -1017.7). + +**Self-check: `len(fields) == FrameCount * 8 + 1` holds for 1449 of 1449 route +records** across the 28 stages that have a `Route_S.tbl` (S17 has none, as +it has no stage record or `UnitGroup` either). It also holds 16/16 for +`FormationSet_S02.tbl` and 9/9 for `Null_Test.tbl`. + +Values are stored as *text* in the string pool (`"0"`, `"-0.011578"`), not as +binary floats. + +Phase/kind suffix counts across the corpus: + +| | F | S | A | M | B | +|---|---|---|---|---|---| +| p1 | 397 | 404 | 54 | 72 | 9 | +| p2 | 125 | 107 | 17 | 59 | – | +| p3 | 48 | 48 | – | 19 | – | + +❔ What `F`, `S`, `A`, `M`, `B` stand for is **not settled**. Every phase has F +and S; A and B appear only in phases 1–2. + +### πŸ”΄ The eight-value frame is the common case, not universal + +`Formation_Test.tbl` breaks it: `Formation_Fleet_01` has `FrameCount = 1` with +136 positional fields, and `Formation_Fleet_02` has `FrameCount = 8` with 32 +(four per frame). So `FrameCount` does not always index an 8-tuple, and any +parser must not assume it. `Formation_100` (100 frames, 800 fields) and all of +`FormationSet_S02` do follow the 8-value layout. + +## βœ… `SUBObjectiveSettings_S.tbl` β€” the sub-objectives + +Stage 02 declares nine (`SUBOBJ_005`…`SUBOBJ_014`), each with: + +| field | example | +|---|---| +| `BonusPoint_EASY` / `_NORMAL` / `_HARD` | 500 / 1000 / 2000 | +| `UNLockItemID` | 0, or 13 for `SUBOBJ_013` | +| `HUDString01` / `HUDString02` | `SUBOBJ_010_Mes_L1` / `_L2` | + +This is the objective *reward and presentation* table. It does **not** say what +completes an objective or when one becomes active β€” that trigger is still ❔. + +## βœ… `AIParams_S.tbl` β€” combat tuning, directly portable + +34 AI profiles for Stage 02, referenced by `AIID` in `UnitGroup`. Two shapes: + +* `Type = Fleet` β€” 6 fields: `FiringLength`, `GuardLength`, `AutoGuardLength`, + `MusterLength`, `CounterLength`, `Type`. +* `Type = Squad` β€” those six plus 14 manoeuvre weights: + `ManeuverRatio_Cutoff`, `CounterManeuverRatio`, + `BootDefManeuverRatio_{Aimed,Fired,Missiled}`, + `DefManeuverRatio_{BoostAway,BarrelRoll,TurnAttack,TurnAway,SideRoll,NoAction}`, + `OffManeuverRatio_{HoldPosition,Through,NoAction}`. + +e.g. `AI_ADAN_CraftSquadron_Ace` fires at 3000.0, guards at 10000.0, musters at +10000.0, and weights `DefManeuverRatio_BoostAway = 0.88` against +`AI_ADAN_Elan_GR_Violeta`'s 2.81. Full table in +[`../data/aiparams-s02.txt`](../data/aiparams-s02.txt). + +These are exact original values obtained by static RE, so they are usable in the +port directly. + +## What is still open + +* **The phase advance condition.** The stage record declares `Phase_1..3` and + routes are tagged by phase, but nothing found so far says what *ends* a phase. +* The route-name kind letters `F`, `S`, `A`, `M`, `B`. +* What activates or completes a sub-objective. +* `StageMessageSet_S.tbl` does not resolve in `GP_MAIN_GAME_E.pak`. +* The `UnitGroup` record key and its member field `n` remain ❔ from + [unit-group-table.md](unit-group-table.md). `n` is now a little more + suspicious: routes are per-squadron, so `n` is unlikely to be a spawn count. diff --git a/tools/re-capture/stagetbl.py b/tools/re-capture/stagetbl.py new file mode 100644 index 00000000..2ad59f69 --- /dev/null +++ b/tools/re-capture/stagetbl.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +"""Dump any `stage\\*.tbl` mission table from GP_MAIN_GAME_.pak. + +Pure static work -- reads the extracted disc, runs no emulator. The container is +the same self-describing IDXD format decoded for the squadron roster; see +docs/re/structures/unit-group-table.md and tools/re-capture/unitgroup.py. + + python3 tools/re-capture/stagetbl.py Stage_S02 # by stage record + python3 tools/re-capture/stagetbl.py --name 'stage\\AIParams_S02.tbl' + python3 tools/re-capture/stagetbl.py --follow S02 # stage record + all + # tables it names +""" +import argparse, re, sys +sys.path.insert(0, __file__.rsplit('/', 1)[0]) +from unitgroup import read_entry, name_hash, parse, named + +PAK = '/work/sylph_extract/dat/GP_MAIN_GAME_E.pak' + +def stage_record_hash(stage): + """The per-stage definition record is not name-addressed; find it by content.""" + import struct, glob, os, zlib + idx = open(PAK, 'rb').read() + base = PAK[:-4] + data = b''.join(open(p, 'rb').read() for p in sorted(glob.glob(base + '.p[0-9][0-9]'))) + want = ('UnitGroup_%s.tbl' % stage).encode() # the _Test template names + # Stage_S02.xpr too, so key + # off the squadron table + for i in range(struct.unpack_from('>I', idx, 4)[0]): + h, off, cs = struct.unpack_from('>III', idx, 16 + i * 12) + s = data[off:off + cs] + try: b = zlib.decompress(s[10:]) if s[:2] == b'Z1' else s + except Exception: continue + if b[:4] == b'IDXD' and want in b and b'EnumerateSquadron' in b: + return h + raise KeyError('no stage record for ' + stage) + +def dump(label, recs, limit=None): + print('=== %s (%d records) ===' % (label, len(recs))) + for r in recs[:limit]: + print('-- %r (%d fields)' % (r['squadron'], len(r['fields']))) + for tag, fn, v in r['fields']: + print(' %08x %-30s = %s' % (tag, fn if fn else '(pos)', v)) + if limit and len(recs) > limit: + print(' ... %d more records not shown' % (len(recs) - limit)) + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument('target', nargs='?', default='Stage_S02') + ap.add_argument('--name', help=r'archive name, e.g. stage\AIParams_S02.tbl') + ap.add_argument('--follow', metavar='SNN', help='stage record plus every .tbl it names') + ap.add_argument('--limit', type=int, default=None) + a = ap.parse_args() + if a.name: + dump(a.name, parse(read_entry(PAK, name_hash(a.name))), a.limit); return 0 + stage = a.follow or (a.target[6:] if a.target.startswith('Stage_') else a.target) + recs = parse(read_entry(PAK, stage_record_hash(stage))) + dump('Stage_%s definition record' % stage, recs) + if not a.follow: return 0 + seen = set() + for r in recs: + for _, fn, v in r['fields']: + if not v.endswith('.tbl') or v in seen: continue + seen.add(v) + src, n = PAK, 'stage\\' + v.split('+')[-1] + if '+' in v and 'DefTables' in v: + src, n = '/work/sylph_extract/hidden/DefTables.pak', v.split('+')[-1] + print() + try: dump('%s (via %s)' % (n, fn), parse(read_entry(src, name_hash(n))), a.limit) + except Exception as e: print('=== %s -> unresolved: %s' % (n, e)) + return 0 + +if __name__ == '__main__': + sys.exit(main())