diff --git a/docs/re/BACKLOG.md b/docs/re/BACKLOG.md index a59e8909..22bbb93b 100644 --- a/docs/re/BACKLOG.md +++ b/docs/re/BACKLOG.md @@ -827,6 +827,43 @@ unknown, what evidence exists, and what the first step would be. Move an item in field; the stat keys in records not opened here (`MegaTons`, `BulletLimit`, `CrewCount`, `HP_CLASS`); why the roster lists 59 of 131. +* ✅✅ **(2026-08-27) THE STATIC UNIT DATASHEET **AND** THE AI FLIGHT MODEL — + `Generic` (394), `Maneuver` (114), `Effect` (114). + [structures/unit-datasheet-static](structures/unit-datasheet-static.md), + artefact `data/unit-datasheet-static.txt`.** + Same technique as the weapon tables: field names are literal, so a field-shape + search over 190 782 records finds the carriers. **`Generic` is the unit + datasheet** — 110 field names, 178 distinct IDs: `HP 6400.0`, `ShieldRatio`, + `DefencePoint`, `AttackCraftPoint`/`AttackVesselPoint`, `ResistanceToShell`/ + `ToExplosion`/`ToOptics`/`ToPlayer`/`Paralyze`, `Size_X/Y/Z`+`Size_Radius`, + **`RadarRange 10000.0`**, **`FCSRange 8500.0`**, `MountedFCS`, + `MountedShieldGenerator`, `ScorePoint`/`DamageScore`/`MassScore`, `HQRatio`, + `ThrusterRatio`, `NozzleCount` with per-nozzle jet/afterburner/reverse/contrail + FX, and **`Model rou_e006`** — which ties the datasheet straight to the mesh + names the corpus already decodes. In the corpus's **1 metre** world unit that is + a 10 km radar and a 12 × 5 × 30 m craft. + 🔑 **`Maneuver` is the AI FLIGHT MODEL** — the richest find for the port: + `MaximumVelocity 1200`, `MinimumVelocity 100`, `CruisingVelocity 700`, + `Acceleration 600`, `Deceleration 400`, `SideThrustAcceleration 1000`, + `Turn_AngularVelocity 180`, `MaximumBank_Normal 60`, yaw/roll/pitch + `DragFactor 3.0` + `DragFactorThreshold 0.5`, `ArterBurner_Vc 2.5`/`_Acc 2.0` + (the game's own spelling), `ReverseThrust_Vc −0.5`, `UsingChaffRatio 0.5`, + `HomingResistAdjustment 0.8` — plus **nine named manoeuvres** each with a Yes/No + switch and its own timing/ratio/length bounds (`TurnAttack`, `TurnAway`, + `BarrelRoll`, `SideRoll`, `Slalom`, `Through`, `HoldPosition`, `SolidCutoff`, + `BoostAway`) and `AA_*`/`AV_*` pitch/yaw/roll min-max pairs. This is the static + source for what `flight-speed-law.md` and `flight-controls-runtime.md` measured + at runtime. + 🟡 `AA_`/`AV_` pairing with `AttackCraftPoint`/`AttackVesselPoint` suggests + anti-air vs anti-vessel rate limits — **a reading, not adopted**. + 🔴 **`HP_CLASS`/`HP_ID` are NOT ship stats.** They sit on records named for + wingmen and ship classes (`CARL`, `ELLEN`, `SANDRA`, `ACROPOLIS`, + `Carrier_TCAF1`, `NP_Facility`, …), 120–144 instances each, alongside + `HPGauge`/`HPGaugeSub`/`RadarCursorType` on the `ObjectiveMarker_*` and + `TutorialMarker_*` records — a **HUD gauge binding table**. + 🟡 Not settled: no field-by-field reconciliation against the runtime captures; + and 178 distinct `Generic` IDs against 394 records per pak is unexplained. + ## ✅✅ 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/INDEX.md b/docs/re/INDEX.md index 1f056052..03050244 100644 --- a/docs/re/INDEX.md +++ b/docs/re/INDEX.md @@ -99,6 +99,7 @@ files, which is how the same ground got covered twice. | [`structures/sound-cue-table.md`](structures/sound-cue-table.md) | The cue index in `tables.pak` — message id -> cue -> sound id -> `.slb` bank | ✅ CONFIRMED, 1 326/1 338 script message ids bind to a bank; SOUNDS and FILES agree on the same 12 absentees, 0 orphan files | | [`structures/cutscene-message-table.md`](structures/cutscene-message-table.md) | Cutscene dialogue — speaker, portrait, on-screen seconds, audio cue per page | ✅ CONFIRMED, field count = 9·PageCount+2 for all 7 PageCounts, 1 252/1 252 caption keys match, 138 ids close both ways | | [`structures/isl-mission-timer.md`](structures/isl-mission-timer.md) | The mission timer — two sequential countdowns, not a limit and a warning | ✅ CONFIRMED — read from `sub_822639B8`; the threshold reading is | +| [`structures/unit-datasheet-static.md`](structures/unit-datasheet-static.md) | The static unit datasheet and AI flight model — `Generic`, `Maneuver`, `Effect` | ✅ CONFIRMED — 394 Generic + 114 Maneuver + 114 Effect records read | | [`structures/weapon-datasheet-static.md`](structures/weapon-datasheet-static.md) | The static weapon datasheet — `Weapon`, `Shell`, `AssortMissileParam` | ✅ CONFIRMED — 131 Weapon + 131 Shell + 9 AssortMissileParam records read | | [`structures/isl-timers.md`](structures/isl-timers.md) | A ScriptPhase owns 32 stopwatches, and they count seconds | ✅ CONFIRMED — the advance is read from `sub_822710D0`, the unit from | | [`structures/isl-message-dialogue-link.md`](structures/isl-message-dialogue-link.md) | Mission scripts as dialogue — built-in 64 -> message id -> caption text | ✅ CONFIRMED total, 2 683/2 683 call sites across all 28 stages resolve, no residue | diff --git a/docs/re/data/unit-datasheet-static.txt b/docs/re/data/unit-datasheet-static.txt new file mode 100644 index 00000000..6c85ec5e --- /dev/null +++ b/docs/re/data/unit-datasheet-static.txt @@ -0,0 +1,395 @@ +# The STATIC unit datasheet and AI flight model: `Generic`, `Maneuver`, `Effect` + +Found the same way as the weapon tables: IDXD FIELD names are literal strings in +the pool, so a field-shape search over all 190 782 records finds the carriers. +These are the static source for what the corpus previously measured at runtime +(flight-speed-law.md, flight-controls-runtime.md, unit-struct-runtime.md). + +## Record counts + GP_MAIN_GAME_D.pak Effect 114 + GP_MAIN_GAME_D.pak Generic 394 + GP_MAIN_GAME_D.pak Maneuver 114 + GP_MAIN_GAME_E.pak Effect 114 + GP_MAIN_GAME_E.pak Generic 394 + GP_MAIN_GAME_E.pak Maneuver 114 + (the same records repeat in every per-language GP_MAIN_GAME_* pak) + +## Generic -- 110 distinct field names, 178 distinct IDs + AfterBurnerFxFrame_000 in 408 records + AfterBurnerFxFrame_001 in 378 records + AfterBurnerFxFrame_002 in 258 records + AfterBurnerFxFrame_003 in 222 records + AfterBurnerFxFrame_004 in 96 records + AfterBurnerFxFrame_005 in 96 records + AfterBurnerFxFrame_006 in 36 records + AfterBurnerFxFrame_007 in 36 records + AfterBurnerFxModel_000 in 408 records + AfterBurnerFxModel_001 in 378 records + AfterBurnerFxModel_002 in 258 records + AfterBurnerFxModel_003 in 222 records + AfterBurnerFxModel_004 in 96 records + AfterBurnerFxModel_005 in 96 records + AfterBurnerFxModel_006 in 36 records + AfterBurnerFxModel_007 in 36 records + AttackCraftPoint in 678 records + AttackVesselPoint in 678 records + CollisionModel in 672 records + Color_B in 684 records + Color_G in 684 records + Color_R in 684 records + ContrailFxFrame_000 in 408 records + ContrailFxFrame_001 in 378 records + ContrailFxFrame_002 in 258 records + ContrailFxFrame_003 in 222 records + ContrailFxFrame_004 in 96 records + ContrailFxFrame_005 in 96 records + ContrailFxFrame_006 in 36 records + ContrailFxFrame_007 in 36 records + Count in 1224 records + DamageScore in 672 records + DefencePoint in 678 records + EnumAsteroidGroup in 60 records + FCSRange in 678 records + GameResourceID in 480 records + HP in 684 records + HQRatio in 684 records + ID in 1068 records + IsDestructible in 684 records + JetFxFrame_000 in 408 records + JetFxFrame_001 in 378 records + JetFxFrame_002 in 258 records + JetFxFrame_003 in 222 records + JetFxFrame_004 in 96 records + JetFxFrame_005 in 96 records + JetFxFrame_006 in 36 records + JetFxFrame_007 in 36 records + JetFxModel_000 in 408 records + JetFxModel_001 in 378 records + JetFxModel_002 in 258 records + JetFxModel_003 in 222 records + JetFxModel_004 in 96 records + JetFxModel_005 in 96 records + JetFxModel_006 in 36 records + JetFxModel_007 in 36 records + LODSetID in 807 records + Levels in 807 records + MassScore in 672 records + Model in 684 records + MountedFCS in 678 records + MountedShieldGenerator in 660 records + Name in 1068 records + NamePlate in 672 records + NozzleCount in 684 records + NozzleFrame_000 in 264 records + NozzleFrame_??? in 6 records + NozzleSpec_000 in 672 records + NozzleSpec_001 in 378 records + NozzleSpec_002 in 258 records + NozzleSpec_003 in 222 records + NozzleSpec_004 in 96 records + NozzleSpec_005 in 96 records + NozzleSpec_006 in 36 records + NozzleSpec_007 in 36 records + NozzleSpec_??? in 6 records + RadarRange in 678 records + ResistanceParalyze in 660 records + ResistanceToExplosion in 684 records + ResistanceToOptics in 684 records + ResistanceToPlayer in 678 records + ResistanceToShell in 684 records + ReverseThrusterFxFrame_000 in 408 records + ReverseThrusterFxFrame_001 in 378 records + ReverseThrusterFxFrame_002 in 258 records + ReverseThrusterFxFrame_003 in 222 records + ReverseThrusterFxFrame_004 in 96 records + ReverseThrusterFxFrame_005 in 96 records + ReverseThrusterFxFrame_006 in 36 records + ReverseThrusterFxFrame_007 in 36 records + ReverseThrusterFxModel_000 in 408 records + ReverseThrusterFxModel_001 in 378 records + ReverseThrusterFxModel_002 in 258 records + ReverseThrusterFxModel_003 in 222 records + ReverseThrusterFxModel_004 in 96 records + ReverseThrusterFxModel_005 in 96 records + ReverseThrusterFxModel_006 in 36 records + ReverseThrusterFxModel_007 in 36 records + ScorePoint in 672 records + ShieldRatio in 684 records + SideID in 384 records + Size_Radius in 684 records + Size_X in 684 records + Size_Y in 684 records + Size_Z in 684 records + ThrusterRatio in 684 records + Type in 684 records + UncertainName in 684 records + Unique in 384 records + eff_n0071 in 6 records + sample (GP_MAIN_GAME_D.pak entry 0043c41d): + AfterBurnerFxFrame_000 GN_Jet_01 + AfterBurnerFxFrame_001 GN_Jet_02 + AfterBurnerFxFrame_002 GN_Jet_03 + AfterBurnerFxModel_000 eff_j002_e02 + AfterBurnerFxModel_001 eff_j002_e02 + AfterBurnerFxModel_002 eff_j002_e02 + AttackCraftPoint 1.0 + AttackVesselPoint 0.001 + CollisionModel + Color_B 0.1 + Color_G 0.5 + Color_R 1.0 + ContrailFxFrame_000 GN_Trc_01 + ContrailFxFrame_001 GN_Trc_02 + ContrailFxFrame_002 GN_Trc_03 + DamageScore 640 + DefencePoint 0.0004 + FCSRange 8500.0 + HP 6400.0 + HQRatio 1.0 + ID UN_e006_ADAN_Vindicator_MargrasF + IsDestructible Yes + JetFxFrame_000 GN_Jet_01 + JetFxFrame_001 GN_Jet_02 + JetFxFrame_002 GN_Jet_03 + JetFxModel_000 eff_j002_e01 + JetFxModel_001 eff_j002_e01 + JetFxModel_002 eff_j002_e01 + MassScore 30 + Model rou_e006 + MountedFCS No + MountedShieldGenerator Yes + Name UnitName_UN_e006_ADAN_Vindicator_MargrasF + NamePlate + NozzleCount 3 + NozzleSpec_000 NS_Body + NozzleSpec_001 NS_Body + NozzleSpec_002 NS_Body + RadarRange 10000.0 + ResistanceParalyze 0.99 + ResistanceToExplosion 0.5 + ResistanceToOptics 0.8 + ResistanceToPlayer 1.0 + ResistanceToShell 0.1 + ReverseThrusterFxFrame_000 + ReverseThrusterFxFrame_001 + ReverseThrusterFxFrame_002 + ReverseThrusterFxModel_000 + ReverseThrusterFxModel_001 + ReverseThrusterFxModel_002 + ScorePoint 4000 + ShieldRatio 1.0 + Size_Radius 15.0 + Size_X 12.0 + Size_Y 5.0 + Size_Z 30.0 + ThrusterRatio 1.0 + Type Craft + UncertainName Craft + +## Maneuver -- 101 distinct field names, 0 distinct IDs + AA_AxisMode_Max in 30 records + AA_AxisMode_Min in 30 records + AA_PitchMinus_Max in 684 records + AA_PitchMinus_Min in 684 records + AA_PitchPlus_Max in 684 records + AA_PitchPlus_Min in 684 records + AA_Roll_Max in 684 records + AA_Roll_Min in 684 records + AA_Yaw_Max in 684 records + AA_Yaw_Min in 684 records + AB_AA_PitchMinus in 30 records + AB_AA_PitchPlus in 30 records + AB_AA_Roll in 30 records + AB_AA_Yaw in 30 records + AB_AV_PitchMinus in 30 records + AB_AV_PitchPlus in 30 records + AB_AV_Roll in 30 records + AB_AV_Yaw in 30 records + AB_ConsumeShield in 30 records + AB_ConsumeShield_Begin in 30 records + AV_AxisMode_Max in 30 records + AV_AxisMode_Min in 30 records + AV_PitchMinus_Max in 684 records + AV_PitchMinus_Min in 684 records + AV_PitchPlus_Max in 684 records + AV_PitchPlus_Min in 684 records + AV_Roll_Max in 684 records + AV_Roll_Min in 684 records + AV_Yaw_Max in 684 records + AV_Yaw_Min in 684 records + AccPitchFactor in 684 records + Acceleration in 684 records + ArterBurner_Acc in 684 records + ArterBurner_Vc in 684 records + BarrelRoll in 204 records + BarrelRoll_CountMaximum in 204 records + BarrelRoll_CountMinimum in 204 records + BarrelRoll_Radius in 204 records + BarrelRoll_Time in 204 records + BoostAway in 204 records + BoostAway_Time_Maximum in 204 records + BoostAway_Time_Minimum in 204 records + CruisingVelocity in 684 records + CutoffTimeMax in 204 records + CutoffTimeMin in 204 records + DecPitchFactor in 684 records + Deceleration in 684 records + DragFactorThreshold in 684 records + HoldPosition in 204 records + HoldPosition_BackRatio in 204 records + HoldPosition_CancelTime in 204 records + HoldPosition_CutoffRatio in 204 records + HoldPosition_LengthMax in 204 records + HoldPosition_LengthMin in 204 records + HoldPosition_MaximumTime in 204 records + HoldPosition_MinimumTime in 204 records + HoldPosition_SideRatio in 204 records + HomingResistAdjustment in 204 records + MaximumBank_Normal in 684 records + MaximumVelocity in 684 records + MinimumVelocity in 684 records + PitchDragFactor in 684 records + PowerCutConsumeShield in 30 records + PowerCutDeceleration in 30 records + ReverseThrust_Acc in 684 records + ReverseThrust_Vc in 684 records + RollDragFactor in 684 records + SideRoll in 204 records + SideRoll_Length in 204 records + SideRoll_Time in 204 records + SideThrustAcceleration in 684 records + SideThrustVelocity_Max in 684 records + Slalom in 204 records + Slalom_CutoffRatio in 204 records + Slalom_TurnCount_Max in 204 records + Slalom_TurnCount_Min in 204 records + SolidCutoff in 204 records + SolidCutoff_LengthMax in 204 records + SolidCutoff_LengthMin in 204 records + SolidCutoff_Ratio in 204 records + Through in 204 records + Through_AngleMaximum in 204 records + Through_AngleMinimum in 204 records + Through_CutoffRatio in 204 records + Through_LengthMaximum in 204 records + Through_LengthMinimum in 204 records + Through_Time1Max in 204 records + Through_Time1Min in 204 records + Through_Time2Max in 204 records + Through_Time2Min in 204 records + TurnAttack in 204 records + TurnAttack_CutoffRatio in 204 records + TurnAttack_DoubleRatio in 204 records + TurnAttack_DoubleTimeMax in 204 records + TurnAttack_DoubleTimeMin in 204 records + TurnAway in 204 records + TurnAway_Time_Maximum in 204 records + TurnAway_Time_Minimum in 204 records + Turn_AngularVelocity in 204 records + UsingChaffRatio in 204 records + YawDragFactor in 684 records + sample (GP_MAIN_GAME_D.pak entry 0043c41d): + AA_PitchMinus_Max 10.0 + AA_PitchMinus_Min 40.0 + AA_PitchPlus_Max 30.0 + AA_PitchPlus_Min 100.0 + AA_Roll_Max 60.0 + AA_Roll_Min 150.0 + AA_Yaw_Max 50.0 + AA_Yaw_Min 240.0 + AV_PitchMinus_Max 40.0 + AV_PitchMinus_Min 120.0 + AV_PitchPlus_Max 80.0 + AV_PitchPlus_Min 200.0 + AV_Roll_Max 120.0 + AV_Roll_Min 160.0 + AV_Yaw_Max 25.0 + AV_Yaw_Min 60.0 + AccPitchFactor 30.0 + Acceleration 600 + ArterBurner_Acc 2.0 + ArterBurner_Vc 2.5 + BarrelRoll Yes + BarrelRoll_CountMaximum 5.0 + BarrelRoll_CountMinimum 0.5 + BarrelRoll_Radius 250.0 + BarrelRoll_Time 1.2 + BoostAway Yes + BoostAway_Time_Maximum 5.0 + BoostAway_Time_Minimum 1.0 + CruisingVelocity 700 + CutoffTimeMax 5.0 + CutoffTimeMin 0.6 + DecPitchFactor 30.0 + Deceleration 400 + DragFactorThreshold 0.5 + HoldPosition Yes + HoldPosition_BackRatio 0.6 + HoldPosition_CancelTime 20.0 + HoldPosition_CutoffRatio 0.5 + HoldPosition_LengthMax 400.0 + HoldPosition_LengthMin 150.0 + HoldPosition_MaximumTime 10.0 + HoldPosition_MinimumTime 5.0 + HoldPosition_SideRatio 0.3 + HomingResistAdjustment 0.8 + MaximumBank_Normal 60.0 + MaximumVelocity 1200 + MinimumVelocity 100.0 + PitchDragFactor 3.0 + ReverseThrust_Acc 2.0 + ReverseThrust_Vc -0.5 + RollDragFactor 3.0 + SideRoll Yes + SideRoll_Length 1000.0 + SideRoll_Time 0.5 + SideThrustAcceleration 1000.0 + SideThrustVelocity_Max 1000.0 + Slalom No + Slalom_CutoffRatio 0.0 + Slalom_TurnCount_Max 0 + Slalom_TurnCount_Min 0 + SolidCutoff Yes + SolidCutoff_LengthMax 2500 + SolidCutoff_LengthMin 500 + SolidCutoff_Ratio 0.5 + Through Yes + Through_AngleMaximum 60.0 + Through_AngleMinimum 30.0 + Through_CutoffRatio 0.5 + Through_LengthMaximum 500.0 + Through_LengthMinimum 250.0 + Through_Time1Max 2.0 + Through_Time1Min 5.0 + Through_Time2Max 1.5 + Through_Time2Min 5.0 + TurnAttack Yes + TurnAttack_CutoffRatio 0.4 + TurnAttack_DoubleRatio 0.3 + TurnAttack_DoubleTimeMax 2.5f + TurnAttack_DoubleTimeMin 0.5f + TurnAway Yes + TurnAway_Time_Maximum 2.0 + TurnAway_Time_Minimum 0.5 + Turn_AngularVelocity 180.0 + UsingChaffRatio 0.5 + YawDragFactor 3.0 + +## Effect -- 9 distinct field names, 0 distinct IDs + Effect_Paralyze in 444 records + FadeIn in 678 records + FadeOut in 678 records + JumpIn in 678 records + JumpOut in 678 records + Shield in 474 records + ShieldHitEffectName in 210 records + ShieldRecoverEffectName in 210 records + Thruster in 6 records + sample (GP_MAIN_GAME_D.pak entry 0043c41d): + Effect_Paralyze eff_h304 + FadeIn + FadeOut + JumpIn + JumpOut + ShieldHitEffectName eff_i005_e + ShieldRecoverEffectName diff --git a/docs/re/structures/unit-datasheet-static.md b/docs/re/structures/unit-datasheet-static.md new file mode 100644 index 00000000..c7c84f6a --- /dev/null +++ b/docs/re/structures/unit-datasheet-static.md @@ -0,0 +1,100 @@ +# ✅ The STATIC unit datasheet and AI flight model — `Generic`, `Maneuver`, `Effect` + +Found the same way as the weapon tables: **IDXD field names are literal strings in +the pool**, so a field-shape search over all 190 782 records finds the carriers +without guessing a filename. This is the static source for what the corpus had +only measured at runtime — [flight-speed-law](../flight-speed-law.md), +[flight-controls-runtime](../flight-controls-runtime.md), +[unit-struct-runtime](unit-struct-runtime.md). + +| record | per pak | field names | distinct `ID`s | +|---|---|---|---| +| `Generic` | **394** | **110** | 178 | +| `Maneuver` | **114** | 101 | — | +| `Effect` | **114** | 9 | — | + +Repeated identically in every per-language `GP_MAIN_GAME_*.pak`. A unit's +`Generic`, `Maneuver` and `Effect` share a pak entry. + +⚠️ `Generic` is the game's own record name, not a placeholder — it is also one of +the 65 section names in `data/config-keys.txt`. + +## `Generic` — the unit datasheet + +Sample `UN_e006_ADAN_Vindicator_MargrasF`: + +``` +ID / Name / Type Craft / UncertainName Craft +HP 6400.0 ShieldRatio 1.0 DefencePoint 0.0004 +AttackCraftPoint 1.0 AttackVesselPoint 0.001 +ResistanceToShell 0.1 ResistanceToExplosion 0.5 ResistanceToOptics 0.8 +ResistanceToPlayer 1.0 ResistanceParalyze 0.99 +Size_X/Y/Z 12.0 / 5.0 / 30.0 Size_Radius 15.0 +RadarRange 10000.0 FCSRange 8500.0 +MountedFCS No MountedShieldGenerator Yes +ScorePoint 4000 DamageScore 640 MassScore 30 +HQRatio 1.0 ThrusterRatio 1.0 IsDestructible Yes +Model rou_e006 CollisionModel Color_R/G/B 1.0 / 0.5 / 0.1 +NozzleCount 3 + per-nozzle Jet / AfterBurner / ReverseThruster / Contrail + Fx model & frame names, NozzleSpec_00N +``` + +🔑 **`Model rou_e006` ties the datasheet straight to the mesh names the corpus +already decodes**, and `Size_*` / `RadarRange` / `FCSRange` are in the corpus's +**1 metre** world unit — a 10 km radar, an 8.5 km fire-control range, a 12 × 5 × +30 m craft. + +## `Maneuver` — the AI flight model + +The single richest find for the port. Sample, same unit: + +``` +MaximumVelocity 1200 MinimumVelocity 100.0 CruisingVelocity 700 +Acceleration 600 Deceleration 400 +SideThrustAcceleration 1000.0 SideThrustVelocity_Max 1000.0 +Turn_AngularVelocity 180.0 MaximumBank_Normal 60.0 +YawDragFactor / RollDragFactor / PitchDragFactor 3.0 +DragFactorThreshold 0.5 +ArterBurner_Vc 2.5 ArterBurner_Acc 2.0 (the game's own spelling) +ReverseThrust_Vc -0.5 ReverseThrust_Acc 2.0 +UsingChaffRatio 0.5 HomingResistAdjustment 0.8 +``` + +and a set of **named manoeuvres**, each a Yes/No switch plus its own timing, +ratio and length bounds: + +``` +TurnAttack + _CutoffRatio _DoubleRatio _DoubleTimeMin/Max +TurnAway + _Time_Minimum/Maximum +BarrelRoll + _CountMinimum/Maximum _Radius _Time +SideRoll + _Time _Length +Slalom + _CutoffRatio _TurnCount_Min/Max +Through + _Angle/Length Minimum/Maximum _Time1/2 Min/Max _CutoffRatio +HoldPosition + _MinimumTime _MaximumTime _CancelTime _CutoffRatio + _BackRatio _SideRatio _LengthMin/Max +SolidCutoff + _LengthMin/Max _Ratio +BoostAway + _Time_Minimum/Maximum +CutoffTimeMin/Max +AA_* and AV_* Pitch/Yaw/Roll Min/Max pairs +``` + +🟡 The `AA_` / `AV_` prefixes pair with `AttackCraftPoint` / `AttackVesselPoint`, +so *anti-air* vs *anti-vessel* rate limits is the obvious reading — **not +adopted**, nothing here shows the selection. + +## `Effect` + +`ShieldHitEffectName`, `ShieldRecoverEffectName`, `Effect_Paralyze`, plus +`JumpIn` / `JumpOut` / `FadeIn` / `FadeOut` slots. + +## 🟡 Not settled + +* No cross-check against the runtime captures — this locates and reads the + tables; it does not reconcile them field by field. +* `HP_CLASS` / `HP_ID` turned out **not** to be ship stats: they sit on records + named for wingmen and ship classes (`CARL`, `ELLEN`, `SANDRA`, `ACROPOLIS`, + `Carrier_TCAF1`, `NP_Facility`, …), 120–144 instances each, alongside + `HPGauge` / `HPGaugeSub` / `RadarCursorType` on the `ObjectiveMarker_*` and + `TutorialMarker_*` records — a **HUD gauge binding table**, not a datasheet. +* 178 distinct `Generic` IDs against 394 records per pak — the surplus is + unexplained here.