diff --git a/docs/re/BACKLOG.md b/docs/re/BACKLOG.md index d8fe6c5..fed7241 100644 --- a/docs/re/BACKLOG.md +++ b/docs/re/BACKLOG.md @@ -748,6 +748,44 @@ unknown, what evidence exists, and what the first step would be. Move an item in `GP_HANGAR_ARSENAL.pak` is a pointer, not a decode; the field-level read is a separate job per table. +* βœ…πŸ”΄ **(2026-08-27) THE CONFIG RECORDS ARE DECODED β€” real render/input constants + for the port, and my "canonical weapon/unit definitions" guess was half wrong. + Artefact `data/config-records.txt`, + [structures/isl-condition-builtins](structures/isl-condition-builtins.md).** + βœ… **The find β€” directly portable constants:** + `Rendering` = `Brightness 1.4`, `Contrast 1.0`, `Saturation 1.00`, `Hue 0.00`, + `ExposureKeyValue 0.18`, `BrightPassThreshold 0.6`, `BrightPassOffset 1.5`, + `LuminanceMin 0.15`, `LuminanceMax 3.6`, `BloomScale 0.5`, + `AfterimageScale 0.05`, `StarScale 1.20`, `GlareType 8`, `ColorLayer R/G/B/A`. + `ControlTweak` = `CameraSpeed 0.50`, `TargetSpeed 0.50`, + `TargetMovingRange βˆ’10.0…10.0`, `mov_trigger_play 20`, `eye_stick_play 6000`, + `mov_stick_play 6000`. `Camera` = `NoseCameraFOV 0.92`, `ChangeTime 0.20`. + These are the game's own tone-mapping, bloom and input-deadzone numbers. + πŸ”΄ **Correction to my own last entry.** I said `GP_HANGAR_ARSENAL.pak` holds + "the canonical weapon/unit definitions". **`WEAPONS` is a 59-entry NAME ROSTER** + (`No_Equipment`, `Machiene_Cannon_MG1`, `Broad_Sword_SG1`, `Frail_GP37`, + `Stiletto_BG1`, `Pilum_BP`, …) β€” an enumeration of ids, **not a stat sheet**. + And **`UNITS` is not units at all**: seven craft-slot↔pilot pairs β€” + `Bird1-Sandra`, `Bird2-Billy`, `Bird3-Antonius`, `Bird4-Carl`, + `Rhino1-Raymond`, `Rhino2-Katana`, `Rhino3-Ellen` β€” **the wingman roster**. + βœ… **`IGNORE` is a 13-name blocklist** over that enumeration + (`Long_Spear_HBP`, `Twin_Saber_LG2H`, `Eagle_120AM`, `Maelstrom_Bomb`, + `Cluster_Mine_B10`, plus placeholders `Wep_82`, `Wep_85`) β€” weapons that exist + but are withheld. + πŸ”‘ **`AUTO_SETTINGS` lists exactly 28 files** (`stage01_settings.tbl` … + `stage29_settings.tbl`) β€” a **third independent confirmation of the 28-stage + count**, after the `.ssb` census and the `UnitGroup_SNN.tbl` probe. + 🟑 **The "objective" records are UI, not gameplay.** `SUB_OBJECTIVE` is a HUD + layout (`MAX_OBJECTIVE_OFFSET 353,242`, `TEXT_OFFSET 85,271`, + `NUM_QUALIFY_OFFSET 309,242`, `DOT_OFFSET 0,20`) with a **second variant** in + one pak (`275,222` / `85,251` / `231,222` / `0,0`), so two layouts ship. + `SQUADRON_ORDER_OBJECT` is 29 `.prt` sprite names. `MISSIONS` holds + `TimeAttack`, `ScoreAttack`, `Extra01`…`Extra04` β€” the **challenge** + categories, not the campaign. `STAGES` has **zero** fields. + 🟑 Not settled: where weapon/unit STATS live β€” the roster names an enumeration, + and the corpus's existing weapon datasheet came from a runtime capture, so the + static table behind it is still unlocated. + ## βœ…βœ… SOLVED β€” the mission freeze was a modal sign-in dialog (2026-08-26) `XamShowSigninUI` opens a modal dialog and `xeXamDispatchDialog` blocks the diff --git a/docs/re/data/config-records.txt b/docs/re/data/config-records.txt new file mode 100644 index 0000000..f6c877d --- /dev/null +++ b/docs/re/data/config-records.txt @@ -0,0 +1,262 @@ +# Decoded contents of the named config records + +Read with tools/re-capture/unitgroup.py: parse() + named(). A record is +located by tag_hash(NAME) over every IDXD entry in every pak. Identical +contents appearing in several paks are the per-language / per-variant copies; +only DISTINCT variants are printed, with the paks that carry each. + +## Rendering (1 distinct variant) + variant 1 -- 6 copies in GP_HANGAR_ARSENAL.pak + AfterimageScale 0.05 + BloomScale 0.5 + BrightPassOffset 1.5 + BrightPassThreshold 0.6 + Brightness 1.4 + ColorLayerA 0.00 + ColorLayerB 0.00 + ColorLayerG 0.00 + ColorLayerR 0.00 + Contrast 1.0 + ExposureKeyValue 0.18 + GlareType 8 + Hue 0.00 + LuminanceMax 3.6 + LuminanceMin 0.15 + Saturation 1.00 + StarScale 1.20 + +## ControlTweak (1 distinct variant) + variant 1 -- 6 copies in GP_HANGAR_ARSENAL.pak + CameraSpeed 0.50 + TargetMovingRange_Max 10.0 + TargetMovingRange_Min -10.0 + TargetSpeed 0.50 + eye_stick_play 6000 + mov_stick_play 6000 + mov_trigger_play 20 + +## Camera (3 distinct variants) + variant 1 -- 6 copies in GP_HANGAR_ARSENAL.pak + ChangeTime 0.20 + NoseCameraFOV 0.92 + variant 2 -- 138 copies in GP_MAIN_GAME_D.pak, GP_MAIN_GAME_E.pak, GP_MAIN_GAME_F.pak, GP_MAIN_GAME_I.pak + CameraFar 3000000.0 + CameraNear 1.0 + FarCameraFOV 0.92 + FarCameraPosX 0.0 + FarCameraPosY 15.0 + FarCameraPosZ 80.0 + NearCameraFOV 0.92 + NearCameraPosX 0.0 + NearCameraPosY 10.0 + NearCameraPosZ 40.0 + NoseCameraFOV 0.92 + NoseCameraPosX 0.0 + NoseCameraPosY 4.5 + NoseCameraPosZ 7.0 + variant 3 -- 6 copies in GP_MAIN_GAME_D.pak, GP_MAIN_GAME_E.pak, GP_MAIN_GAME_F.pak, GP_MAIN_GAME_I.pak + CameraFar 500000.0 + CameraNear 1.0 + FarCameraFOV 0.92 + FarCameraPosX 0.0 + FarCameraPosY 15.0 + FarCameraPosZ 80.0 + NearCameraFOV 0.92 + NearCameraPosX 0.0 + NearCameraPosY 10.0 + NearCameraPosZ 40.0 + NoseCameraFOV 0.92 + NoseCameraPosX 0.0 + NoseCameraPosY 4.5 + NoseCameraPosZ 7.0 + +## WEAPONS (1 distinct variant) + variant 1 -- 6 copies in GP_HANGAR_ARSENAL.pak + positional (59): + No_Equipment, Machiene_Cannon_MG1, Machiene_Cannon_MG2H, Machiene_Cannon_MG3 + Machiene_Cannon_MG5H, Broad_Sword_SG1, Swing_Sword_SG2H, Twin_Sword_SG3II + Frail_GP37, Stiletto_BG1, Dagger_BG2, Rapier_BG4H + Pilum_BP, Multi_Pike_BP, Spear_HBP, Long_Spear_HBP + Gray_Head_T76H, Saber_LG1, Twin_Saber_LG2H, Needle_L1GP + Fire_Arrow_L2GP, Falcon_9AM, Buzzard_10AM, Hawk_75AM + Condor_105AM, Eagle_120AM, Terrier_SMH, Hound_SMH + Pointer_SM, Piranha_T53, White_Shark_T53R, Dirt_23_Rocket + Arrow_27_Rocket, EMP_Mine_B8E, Laser_Mine_B9L, Cauldron_50_Rocket + Cluster_Mine_B10, Maelstrom_Bomb, Tomahawk_a_Rail_Gun, Sling_75KG + Glaive_120mm_Cannon, Arbalest_155KG, Monoceros_Long_Cannon, Grab_Cannon_XGS + Chaff_Flare_Dispencer, Shield_Doubler, Booster, FireControlSystem + HP_Regenerator, Magazine, Wep_80, Wep_81 + Wep_82, Wep_83, Wep_84, Wep_85 + NullWeapon_Arm1, NullWeapon_Arm2, NullWeapon_Arm3 + +## UNITS (5 distinct variants) + variant 1 -- 12 copies in GP_HANGAR_ARSENAL.pak + Bird1-Sandra + Bird2-Billy + Bird3-Antonius + Bird4-Carl + Rhino1-Raymond + Rhino2-Katana + Rhino3-Ellen + variant 2 -- 90 copies in GP_HANGAR_ARSENAL.pak + Bird1-Sandra + Bird2-Billy + Bird3-Antonius + Bird4-Carl + Rhino1-Katana + Rhino2-Ellen + Rhino3-Gene + Rhino4-Yoji + variant 3 -- 30 copies in GP_HANGAR_ARSENAL.pak + Bird1-Sandra + Bird2-Billy + Bird3-Antonius + Bird4-Carl + Rhino1-Raymond + Rhino2-Gene + Rhino3-Katana + Rhino4-Ellen + variant 4 -- 30 copies in GP_HANGAR_ARSENAL.pak + Rhino2-Katana + variant 5 -- 6 copies in GP_HANGAR_ARSENAL.pak + Rhino1-Katana + Rhino2-Ellen + Rhino3-Gene + Rhino4-Brandon + +## IGNORE (4 distinct variants) + variant 1 -- 12 copies in GP_HANGAR_ARSENAL.pak + Arbalest_155KG + Cauldron_50_Rocket + Cluster_Mine_B10 + Eagle_120AM + Grab_Cannon_XGS + Gray_Head_T76H + Long_Spear_HBP + Maelstrom_Bomb + Pointer_SM + Twin_Saber_LG2H + Twin_Sword_SG3II + Wep_82 + Wep_85 + variant 2 -- 12 copies in GP_HANGAR_ARSENAL.pak + variant 3 -- 6 copies in GP_HANGAR_ARSENAL.pak + Arbalest_155KG + Buzzard_10AM + Cauldron_50_Rocket + Chaff_Flare_Dispencer + Cluster_Mine_B10 + Condor_105AM + Dagger_BG2 + EMP_Mine_B8E + Eagle_120AM + Falcon_9AM + Grab_Cannon_XGS + Gray_Head_T76H + Hawk_75AM + Hound_SMH + Laser_Mine_B9L + Long_Spear_HBP + Maelstrom_Bomb + Multi_Pike_BP + Pilum_BP + Piranha_T53 + Pointer_SM + Rapier_BG4H + Shield_Doubler + Spear_HBP + Terrier_SMH + Wep_81 + Wep_82 + Wep_85 + White_Shark_T53R + variant 4 -- 6 copies in GP_HANGAR_ARSENAL.pak + Arbalest_155KG + Booster + Cauldron_50_Rocket + Chaff_Flare_Dispencer + Cluster_Mine_B10 + EMP_Mine_B8E + Eagle_120AM + FireControlSystem + Grab_Cannon_XGS + Gray_Head_T76H + HP_Regenerator + Laser_Mine_B9L + Long_Spear_HBP + Maelstrom_Bomb + Magazine + Pointer_SM + Shield_Doubler + Twin_Saber_LG2H + Twin_Sword_SG3II + Wep_81 + Wep_82 + Wep_83 + Wep_84 + Wep_85 + +## AUTO_SETTINGS (1 distinct variant) + variant 1 -- 6 copies in GP_HANGAR_ARSENAL.pak + positional (28): + stage01_settings.tbl, stage02_settings.tbl, stage03_settings.tbl, stage04_settings.tbl + stage05_settings.tbl, stage06_settings.tbl, stage07_settings.tbl, stage08_settings.tbl + stage09_settings.tbl, stage10_settings.tbl, stage11_settings.tbl, stage12_settings.tbl + stage13_settings.tbl, stage14_settings.tbl, stage15_settings.tbl, stage16_settings.tbl + tutorial01_settings.tbl, tutorial02_settings.tbl, tutorial03_settings.tbl, tutorial04_settings.tbl + tutorial05_settings.tbl, tutorial06_settings.tbl, challenge01_settings.tbl, challenge02_settings.tbl + challenge03_settings.tbl, challenge04_settings.tbl, challenge05_settings.tbl, challenge06_settings.tbl + +## SUB_OBJECTIVE (2 distinct variants) + variant 1 -- 5 copies in tables.pak + DOT_OFFSET 0,20 + MAX_OBJECTIVE_OFFSET 353,242 + NUM_QUALIFY_OFFSET 309,242 + TEXT_OFFSET 85,271 + variant 2 -- 1 copy in tables.pak + DOT_OFFSET 0,0 + MAX_OBJECTIVE_OFFSET 275,222 + NUM_QUALIFY_OFFSET 231,222 + TEXT_OFFSET 85,251 + +## SQUADRON_ORDER_OBJECT (1 distinct variant) + variant 1 -- 6 copies in tables.pak + BTN00 pgmenu_btn00.prt + BTN00F pgmenu_btn00f.prt + BTN01 pgmenu_btn01.prt + BTN01F pgmenu_btn01f.prt + BTN10 pgmenu_btn10.prt + BTN10F pgmenu_btn10f.prt + BTN11 pgmenu_btn11.prt + BTN11F pgmenu_btn11f.prt + BTN12 pgmenu_btn12.prt + BTN12F pgmenu_btn12f.prt + BTN20 pgmenu_btn20.prt + BTN20F pgmenu_btn20f.prt + BTN21 pgmenu_btn21.prt + BTN21F pgmenu_btn21f.prt + BTN22 pgmenu_btn22.prt + BTN22F pgmenu_btn22f.prt + BTN30 pgmenu_btn30.prt + BTN30F pgmenu_btn30f.prt + CMU_FACE_BASE pgfacewin_base.prt + CMU_FACE_DEAD pgfacewin_dead.prt + CMU_FACE_EM pgfacewin_em.prt + CMU_FACE_TR pgfacewin_tr.prt + CMU_FACE_WIN pgfacewin.prt + CMU_TEXT_WIN pgtextwin.prt + ITEM0 pgmenu_item0.prt + ITEM1 pgmenu_item1.prt + ITEM2 pgmenu_item2.prt + ITEM3 pgmenu_item3.prt + PAD pgmenu_pad.prt + +## MISSIONS (1 distinct variant) + variant 1 -- 8 copies in tables.pak + positional (6): + TimeAttack, ScoreAttack, Extra01, Extra02 + Extra03, Extra04 + +## STAGES (1 distinct variant) + variant 1 -- 2 copies in tables.pak + diff --git a/docs/re/structures/isl-condition-builtins.md b/docs/re/structures/isl-condition-builtins.md index f41fd24..0d43980 100644 --- a/docs/re/structures/isl-condition-builtins.md +++ b/docs/re/structures/isl-condition-builtins.md @@ -486,6 +486,51 @@ global tables (`MISSIONS`, `STAGES`, `SOUNDS`, `SUB_OBJECTIVE`, `Camera`, `ControlTweak`, `Rendering`, `AUTO_SETTINGS`, `IGNORE`**, and the per-language `GP_MAIN_GAME_*` paks for the enum tables. +### βœ… (2026-08-27) The records DECODED β€” and my "canonical definitions" guess was half wrong + +`parse()` + `named()` on each record (artefact `data/config-records.txt`): + +**Real, directly portable constants** β€” these are the find: + +``` +Rendering Brightness 1.4 Contrast 1.0 Saturation 1.00 Hue 0.00 + ExposureKeyValue 0.18 BrightPassThreshold 0.6 + BrightPassOffset 1.5 LuminanceMin 0.15 LuminanceMax 3.6 + BloomScale 0.5 AfterimageScale 0.05 StarScale 1.20 + GlareType 8 ColorLayer R/G/B/A 0.00 +ControlTweak CameraSpeed 0.50 TargetSpeed 0.50 + TargetMovingRange -10.0 … 10.0 + mov_trigger_play 20 eye_stick_play 6000 mov_stick_play 6000 +Camera NoseCameraFOV 0.92 ChangeTime 0.20 +``` + +πŸ”΄ **But `WEAPONS` and `UNITS` are not what I called them.** Last iteration I +said `GP_HANGAR_ARSENAL.pak` holds "the canonical weapon/unit definitions". Half +right at best: + +* **`WEAPONS`** is a **59-entry name roster** β€” `No_Equipment`, + `Machiene_Cannon_MG1`, `Broad_Sword_SG1`, `Frail_GP37`, `Stiletto_BG1`, + `Pilum_BP`… β€” an enumeration of ids, **not a stat sheet**. +* **`UNITS`** is not units at all: seven fields pairing a craft slot with a pilot + β€” `Bird1-Sandra`, `Bird2-Billy`, `Bird3-Antonius`, `Bird4-Carl`, + `Rhino1-Raymond`, `Rhino2-Katana`, `Rhino3-Ellen`. **The wingman roster.** +* **`IGNORE`** is a **13-name blocklist** over that roster β€” + `Long_Spear_HBP`, `Twin_Saber_LG2H`, `Eagle_120AM`, `Maelstrom_Bomb`, + `Cluster_Mine_B10`, and the placeholders `Wep_82`, `Wep_85`. Weapons that + exist in the enumeration but are withheld. + +πŸ”‘ **`AUTO_SETTINGS` lists exactly 28 files** β€” `stage01_settings.tbl` … +`stage29_settings.tbl` β€” a **third independent confirmation of the 28-stage +count**, after the `.ssb` census and the `UnitGroup_SNN.tbl` probe. + +🟑 **And the UI records are UI, not gameplay.** `SUB_OBJECTIVE` is a HUD layout β€” +`MAX_OBJECTIVE_OFFSET 353,242`, `TEXT_OFFSET 85,271`, `NUM_QUALIFY_OFFSET +309,242`, `DOT_OFFSET 0,20` β€” with a **second variant** (`275,222` / `85,251` / +`231,222` / `0,0`) in one pak, so there are two layouts. `SQUADRON_ORDER_OBJECT` +is 29 `.prt` sprite names for the squadron-order menu. `MISSIONS` holds six +positional members β€” `TimeAttack`, `ScoreAttack`, `Extra01`…`Extra04`, the +**challenge** categories, not the campaign. `STAGES` has **zero** fields. + 🟑 Its neighbours belong to the same cluster: `builtin103` reads `[phase+10156]` and `[phase+10152]` (9 and 7 writers), and a sibling vtable stub clears `[phase+10152]`. The shape is an engineβ†’script status trio, but that is a