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.
This commit is contained in:
100
docs/re/structures/unit-datasheet-static.md
Normal file
100
docs/re/structures/unit-datasheet-static.md
Normal file
@@ -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.
|
||||
Reference in New Issue
Block a user