From 19b338d9d8ae4873dac6636000aabe3ffeb8c656 Mon Sep 17 00:00:00 2001 From: "Claude (auto-RE)" Date: Thu, 13 Aug 2026 00:12:45 +0000 Subject: [PATCH] re(route-b): map generalises to units -- 406/0 across 11 objects, 121 defaulted fields Applying the map to turrets, fighters, an attacker and a station (UNIT records rather than VESSEL) gives 406 field values agreeing with the disc and 0 disagreeing across 11 objects, so one layout serves both schemas. Two consequences the four-value signature could not give: the map IDENTIFIES an object -- 0xbd3b6a00 is UN_bf001_TCAF_SchlosBase (14 agree, 0 disagree), not UN_be005_ADAN_SpaceFortress (12 agree, 2 disagree on Color_R/Color_G) -- and variants are provably identical, with ArrowHead/_EX4/_EX5 at 48/48, Turret/_EX4 at 51/51 and three DeltaSaber player variants at 49/49. 121 defaulted fields now have runtime values. FiringRange (0 in all 11) and ShieldRatio (1 in all 6) look like true constants; HQRatio, ThrusterRatio and AttackCraftPoint vary per unit and are recorded as such. Co-Authored-By: Claude Opus 5 (1M context) --- ...stage02-defaulted-field-runtime-values.txt | 220 ++++++++++-------- docs/re/live-unit-definitions.md | 30 +++ 2 files changed, 150 insertions(+), 100 deletions(-) diff --git a/docs/re/captures/stage02-defaulted-field-runtime-values.txt b/docs/re/captures/stage02-defaulted-field-runtime-values.txt index f34b261..d852adc 100644 --- a/docs/re/captures/stage02-defaulted-field-runtime-values.txt +++ b/docs/re/captures/stage02-defaulted-field-runtime-values.txt @@ -1,105 +1,125 @@ -map check: 154 fields agree with the disc, 0 disagree +map check: 406 fields agree with the disc, 0 disagree runtime value where the disc record DEFAULTS the field: - AA_AxisMode_Max 0 (5 units) - AA_AxisMode_Min 0 (5 units) - AA_PitchMinus_Max 0.0628319 (5 units) - AA_PitchMinus_Min 0.0628319 (5 units) - AA_PitchPlus_Max 0.0628319 (5 units) - AA_PitchPlus_Min 0.0628319 (5 units) - AA_Roll_Max 0.0628319 (5 units) - AA_Roll_Min 0.0628319 (5 units) - AA_Yaw_Max 0.0628319 (5 units) - AA_Yaw_Min 0.0628319 (5 units) - AB_AA_PitchMinus 0 (5 units) - AB_AA_PitchPlus 0 (5 units) - AB_AA_Roll 0 (5 units) - AB_AA_Yaw 0 (5 units) - AB_AV_PitchMinus 0 (5 units) - AB_AV_PitchPlus 0 (5 units) - AB_AV_Roll 0 (5 units) - AB_AV_Yaw 0 (5 units) - AB_ConsumeShield 0 (5 units) - AB_ConsumeShield_Begin 0 (5 units) - AV_AxisMode_Max 0 (5 units) - AV_AxisMode_Min 0 (5 units) - AV_PitchMinus_Max 0.0628319 (5 units) - AV_PitchMinus_Min 0.0628319 (5 units) - AV_PitchPlus_Min 0.0628319 (5 units) - AV_Roll_Max 0.0628319 (5 units) - AV_Roll_Min 0.0628319 (5 units) - AV_Yaw_Max 0.0628319 (5 units) - AV_Yaw_Min 0.0628319 (5 units) - ArterBurner_Acc 2 (5 units) - ArterBurner_Vc 2 (5 units) - AttackCraftPoint 0.1, 0.5 (5 units) - AttackVesselPoint 0.1 (2 units) - BarrelRoll_CountMaximum 0 (5 units) - BarrelRoll_CountMinimum 0 (5 units) - BarrelRoll_Radius 0 (5 units) - BarrelRoll_Time 0 (5 units) - BoostAway_Time_Maximum 0 (5 units) - BoostAway_Time_Minimum 0 (5 units) - ChargeDelay 1 (5 units) - Color_B 1 (1 units) + AA_AxisMode_Max 0 (10 units) + AA_AxisMode_Min 0, 1.74533 (11 units) + AA_PitchMinus_Max 0, 0.0628319, 0.174533 (8 units) + AA_PitchMinus_Min 0, 0.0628319, 0.261799, 0.349066, 0.698132 (10 units) + AA_PitchPlus_Max 0, 0.0628319 (6 units) + AA_PitchPlus_Min 0, 0.0628319, 1.74533 (8 units) + AA_Roll_Max 0, 0.0628319, 0.174533, 0.523599, 1.0472 (10 units) + AA_Roll_Min 0, 0.0628319, 1.0472 (7 units) + AA_Yaw_Max 0, 0.0628319, 0.0872665 (7 units) + AA_Yaw_Min 0, 0.0628319, 0.261799 (7 units) + AB_AA_PitchMinus 0, 0.174533 (11 units) + AB_AA_PitchPlus 0 (10 units) + AB_AA_Roll 0, 0.523599 (11 units) + AB_AA_Yaw 0, 0.174533 (11 units) + AB_AV_PitchMinus 0 (10 units) + AB_AV_PitchPlus 0, 0.523599 (11 units) + AB_AV_Roll 0, 0.698132 (11 units) + AB_AV_Yaw 0, 0.279253 (11 units) + AB_ConsumeShield 0, 10 (11 units) + AB_ConsumeShield_Begin 0 (10 units) + AV_AxisMode_Max 0, 0.174533 (11 units) + AV_AxisMode_Min 0 (10 units) + AV_PitchMinus_Max 0, 0.0628319, 0.349066 (7 units) + AV_PitchMinus_Min 0, 0.0628319 (6 units) + AV_PitchPlus_Max 0 (1 units) + AV_PitchPlus_Min 0, 0.0628319, 1.74533 (7 units) + AV_Roll_Max 0, 0.0628319, 0.349066, 1.0472, 2.0944 (10 units) + AV_Roll_Min 0, 0.0628319, 1.0472 (7 units) + AV_Yaw_Max 0, 0.0628319, 0.174533 (7 units) + AV_Yaw_Min 0, 0.0628319, 0.349066 (7 units) + AccPitchFactor 0, 30 (5 units) + Acceleration 0 (1 units) + ArterBurner_Acc 0, 2 (10 units) + ArterBurner_Vc 0, 2 (6 units) + AttackCraftPoint 0, 0.1, 0.5, 1 (9 units) + AttackVesselPoint 0, 0.1 (3 units) + BarrelRoll_CountMaximum 0, 5 (11 units) + BarrelRoll_CountMinimum 0, 0.5 (11 units) + BarrelRoll_Radius 0 (7 units) + BarrelRoll_Time 0 (7 units) + BoostAway_Time_Maximum 0, 2 (11 units) + BoostAway_Time_Minimum 0, 1 (11 units) + ChargeDelay 1, 3, 5 (10 units) + ChargeDelay_Break 1, 10 (6 units) + ChargeSpeed 25 (3 units) + Color_B 0, 1 (3 units) Color_G 1 (1 units) - CutoffTimeMax 0 (5 units) - CutoffTimeMin 0 (5 units) - DecPitchFactor 30 (5 units) - DefencePoint 0.1, 0.25 (4 units) - Delay 0 (3 units) - DelayAdjustment 0, 2 (5 units) - DragFactorThreshold 0.5 (5 units) - DryMass 10000 (2 units) - FiringRange 0 (5 units) - GrossMass 10000 (5 units) - HQRatio 0.2, 1 (4 units) - HoldPosition_BackRatio 0 (5 units) - HoldPosition_CancelTime 0 (5 units) - HoldPosition_CutoffRatio 0 (5 units) - HoldPosition_LengthMax 0 (5 units) - HoldPosition_LengthMin 0 (5 units) - HoldPosition_MaximumTime 0 (5 units) - HoldPosition_MinimumTime 0 (5 units) - HoldPosition_SideRatio 0 (5 units) - HomingResistAdjustment 0 (5 units) - LowerHPThresholdRatio 0.3 (1 units) - MinimumVelocity 0 (4 units) - PitchDragFactor 2 (5 units) - PowerCutConsumeShield 0 (5 units) - PowerCutDeceleration 0 (5 units) - ResistanceToExplosion 0.5 (3 units) - ResistanceToPlayer 1 (5 units) - ResistanceToShell 0.1 (3 units) - ReverseThrust_Acc 0.25 (3 units) - RollDragFactor 2 (5 units) - SELength 2000 (5 units) - ShieldRatio 1 (1 units) - SideRoll_Length 0 (5 units) - SideRoll_Time 0 (5 units) + CruisingVelocity 0 (1 units) + CutoffTimeMax 0, 5 (10 units) + CutoffTimeMin 0 (7 units) + DecPitchFactor 0, 30 (11 units) + Deceleration 0, 50 (2 units) + DefencePoint 0, 0.1, 0.25 (5 units) + Delay 0, 1.5, 3 (8 units) + DelayAdjustment 0, 1, 2 (10 units) + DestroyMotionTime 0 (1 units) + DragFactorThreshold 0, 0.5 (10 units) + DryMass 100, 10000 (8 units) + FCSRange 0, 500000 (3 units) + FiringRange 0 (11 units) + GrossMass 10000, 200 (10 units) + HQRatio 0.2, 1 (9 units) + HoldPosition_BackRatio 0, 0.1, 0.3 (11 units) + HoldPosition_CancelTime 0, 20 (10 units) + HoldPosition_CutoffRatio 0, 0.5 (11 units) + HoldPosition_LengthMax 0, 400 (8 units) + HoldPosition_LengthMin 0, 150 (10 units) + HoldPosition_MaximumTime 0, 10 (10 units) + HoldPosition_MinimumTime 0, 5 (11 units) + HoldPosition_SideRatio 0, 0.3 (11 units) + HomingResistAdjustment 0, 0.5 (11 units) + LowerHPThresholdRatio 0, 0.3 (7 units) + MaxValue 100 (3 units) + MaximumBank_Normal 0, 0.523599, 1.0472 (5 units) + MaximumVelocity 0 (1 units) + MinimumVelocity 0, 100 (7 units) + PitchDragFactor 0, 2, 3 (11 units) + PowerCutConsumeShield 0, 20 (11 units) + PowerCutDeceleration 0, 10 (11 units) + RadarRange 0 (1 units) + ResistanceParalyze 1 (1 units) + ResistanceToExplosion 0.1, 0.5, 1 (9 units) + ResistanceToOptics 0.1, 1 (4 units) + ResistanceToPlayer 0, 1 (10 units) + ResistanceToShell 0.1, 1 (8 units) + ReverseThrust_Acc 0, 0.25, 2 (9 units) + ReverseThrust_Vc 0 (1 units) + RollDragFactor 0, 2, 3 (11 units) + SELength 2000 (11 units) + ShieldRatio 1 (6 units) + SideRoll_Length 0 (7 units) + SideRoll_Time 0, 0.5, 1.5 (11 units) + SideThrustAcceleration 0, 100, 1000 (5 units) + SideThrustVelocity_Max 0, 100, 1000 (3 units) + Size_Radius 10, 50 (4 units) Size_Y 200, 300, 400, 600, 700 (5 units) - Slalom_CutoffRatio 0 (5 units) - Slalom_TurnCount_Max 0 (5 units) - Slalom_TurnCount_Min 0 (5 units) - SolidCutoff_LengthMax 0 (5 units) - SolidCutoff_LengthMin 0 (5 units) - SolidCutoff_Ratio 0 (5 units) - Through_AngleMaximum 0 (5 units) - Through_AngleMinimum 0 (5 units) - Through_CutoffRatio 0 (5 units) - Through_LengthMaximum 0 (5 units) - Through_LengthMinimum 0 (5 units) - Through_Time1Max 0 (5 units) - Through_Time1Min 0 (5 units) - Through_Time2Max 0 (5 units) - Through_Time2Min 0 (5 units) - ThrusterRatio 0.2, 1 (4 units) - TurnAttack_CutoffRatio 0 (5 units) - TurnAttack_DoubleRatio 0 (5 units) - TurnAttack_DoubleTimeMax 0 (5 units) - TurnAttack_DoubleTimeMin 0 (5 units) - TurnAway_Time_Maximum 0 (5 units) - TurnAway_Time_Minimum 0 (5 units) - Turn_AngularVelocity 0 (5 units) - UsingChaffRatio 0 (5 units) + Slalom_CutoffRatio 0 (7 units) + Slalom_TurnCount_Max 0 (11 units) + Slalom_TurnCount_Min 0 (9 units) + SolidCutoff_LengthMax 0 (7 units) + SolidCutoff_LengthMin 0, 500 (9 units) + SolidCutoff_Ratio 0, 0.5 (11 units) + Through_AngleMaximum 0, 1.0472 (11 units) + Through_AngleMinimum 0, 0.523599 (11 units) + Through_CutoffRatio 0, 0.5 (11 units) + Through_LengthMaximum 0, 500 (10 units) + Through_LengthMinimum 0, 250 (11 units) + Through_Time1Max 0, 2 (11 units) + Through_Time1Min 0, 5 (11 units) + Through_Time2Max 0, 1.5 (8 units) + Through_Time2Min 0, 5 (11 units) + ThrusterRatio 0.2, 1 (10 units) + TurnAttack_CutoffRatio 0 (7 units) + TurnAttack_DoubleRatio 0 (7 units) + TurnAttack_DoubleTimeMax 0 (7 units) + TurnAttack_DoubleTimeMin 0 (7 units) + TurnAway_Time_Maximum 0, 2, 5 (11 units) + TurnAway_Time_Minimum 0, 0.5 (11 units) + Turn_AngularVelocity 0, 0.523599 (8 units) + UsingChaffRatio 0 (11 units) + YawDragFactor 0 (1 units) diff --git a/docs/re/live-unit-definitions.md b/docs/re/live-unit-definitions.md index eca5d81..e5db30e 100644 --- a/docs/re/live-unit-definitions.md +++ b/docs/re/live-unit-definitions.md @@ -426,3 +426,33 @@ The shape of the answer: That is the `…Ratio` / `…Count` family the mission brief named, answered from the running game, with the field identities read out of the title's own code rather than guessed. + +## It generalises, it disambiguates, and variants are provably identical + +Applying the same map to the other live objects — turrets, fighters, an attacker, +a station, i.e. `UNIT` records rather than `VESSEL` ones — gives **406 field +values agreeing with the disc and 0 disagreeing across 11 objects**. One object +layout serves both schemas. + +Two things fell out that the four-value signature could never have given: + +**It identifies the object.** `0xbd3b6a00` had two candidates on +`(HP, Size_X/Y/Z)`. Checking every mapped field separates them cleanly: + +| candidate | agreement | +|---|---| +| `UN_be005_ADAN_SpaceFortress` | 12 agree, **2 disagree** (`Color_R` 1↔0, `Color_G` 0↔1) | +| **`UN_bf001_TCAF_SchlosBase`** | **14 agree, 0 disagree** | + +**Variants really are identical.** Where several ids shared a signature, all of +them now agree on *every* mapped field — `UN_f003_TCAF_ArrowHead` / `_EX4` / +`_EX5` at 48/48 each, `UN_e007_ADAN_Turret` / `_EX4` at 51/51, and three Delta +Saber player variants at 49/49 (the tutorial variant `_Ttrl1` differs by one field +and is excluded). So a shared live definition between variants is a property of +the data, not a limitation of the match. + +Across all 11 objects, **121 fields** are defaulted on disc and readable at +runtime. `FiringRange` (0 in all 11) and `ShieldRatio` (1 in all 6 that default +it) look like genuine constants; `HQRatio` (0.2 or 1 over 9 units), +`ThrusterRatio` (0.2 or 1 over 10) and `AttackCraftPoint` (0, 0.1, 0.5 or 1 over +9) are clearly per-unit and must not be recorded as one value.