re: decode the config records -- render/input constants, and a correction

parse() + named() on each named record (data/config-records.txt).

The find, directly portable: Rendering carries the tone-mapping and
bloom numbers (Brightness 1.4, Contrast 1.0, ExposureKeyValue 0.18,
BrightPassThreshold 0.6, LuminanceMin/Max 0.15/3.6, BloomScale 0.5,
AfterimageScale 0.05, StarScale 1.20, GlareType 8), ControlTweak the
input constants (CameraSpeed 0.50, TargetSpeed 0.50, TargetMovingRange
-10..10, mov_trigger_play 20, eye/mov_stick_play 6000), and Camera
NoseCameraFOV 0.92 / ChangeTime 0.20.

Corrects my own last entry: WEAPONS is a 59-entry NAME ROSTER, not a
stat sheet, and UNITS is not units at all -- seven craft-slot/pilot
pairs, the wingman roster.  IGNORE is a 13-name blocklist over the
weapon enumeration.

AUTO_SETTINGS lists exactly 28 stageNN_settings.tbl files -- a third
independent confirmation of the 28-stage count.

The objective-shaped records are UI: SUB_OBJECTIVE is a HUD layout (two
variants ship), SQUADRON_ORDER_OBJECT is 29 .prt sprite names, MISSIONS
holds the challenge categories, STAGES has zero fields.

Docs + one new artefact; ISL artefacts byte-identical.
This commit is contained in:
Sylpheed RE agent
2026-08-27 12:02:13 +00:00
parent 37cb1b49d6
commit d082ef15ee
3 changed files with 345 additions and 0 deletions

View File

@@ -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 `GP_HANGAR_ARSENAL.pak` is a pointer, not a decode; the field-level read is a
separate job per table. 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) ## ✅✅ SOLVED — the mission freeze was a modal sign-in dialog (2026-08-26)
`XamShowSigninUI` opens a modal dialog and `xeXamDispatchDialog` blocks the `XamShowSigninUI` opens a modal dialog and `xeXamDispatchDialog` blocks the

View File

@@ -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

View File

@@ -486,6 +486,51 @@ global tables (`MISSIONS`, `STAGES`, `SOUNDS`, `SUB_OBJECTIVE`,
`Camera`, `ControlTweak`, `Rendering`, `AUTO_SETTINGS`, `IGNORE`**, and the `Camera`, `ControlTweak`, `Rendering`, `AUTO_SETTINGS`, `IGNORE`**, and the
per-language `GP_MAIN_GAME_*` paks for the enum tables. 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 🟡 Its neighbours belong to the same cluster: `builtin103` reads
`[phase+10156]` and `[phase+10152]` (9 and 7 writers), and a sibling vtable stub `[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 clears `[phase+10152]`. The shape is an engine→script status trio, but that is a