Files
Sylpheed/docs/re/structures/unit-datasheet-static.md
Sylpheed RE agent 69e6f6bcd8 re: the static unit datasheet and the AI flight model
Same technique as the weapon tables -- field names are literal, so a
field-shape search over 190782 records finds the carriers.

Generic (394 per pak, 110 field names, 178 distinct IDs) is the unit
datasheet: HP, ShieldRatio, DefencePoint, AttackCraft/VesselPoint, the
five Resistance* terms, Size_X/Y/Z + radius, RadarRange 10000,
FCSRange 8500, MountedFCS, MountedShieldGenerator, Score/Damage/Mass,
NozzleCount with per-nozzle FX, and Model rou_e006 -- which ties the
sheet to the mesh names the corpus already decodes.

Maneuver (114) is the AI flight model: MaximumVelocity 1200,
CruisingVelocity 700, Acceleration 600, Deceleration 400,
SideThrustAcceleration 1000, Turn_AngularVelocity 180,
MaximumBank_Normal 60, per-axis DragFactor 3.0, afterburner and
reverse-thrust factors, plus nine named manoeuvres each with its own
timing/ratio/length bounds and AA_/AV_ rate pairs.  This is the static
source for what flight-speed-law.md measured at runtime.

Corrects a guess in the same pass: HP_CLASS/HP_ID are not ship stats --
they sit on records named for wingmen and ship classes alongside
HPGauge/RadarCursorType, i.e. a HUD gauge binding table.

New structure doc + artefact; ISL artefacts byte-identical.
2026-08-27 12:20:03 +00:00

4.2 KiB
Raw Blame History

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-controls-runtime, unit-struct-runtime.

record per pak field names distinct IDs
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, …), 120144 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.