re: the static weapon datasheet -- Weapon, Shell, AssortMissileParam
The corpus's weapon numbers came from a runtime capture; the static tables are now read with no emulator. The move: IDXD field names are literal strings in the pool, so the stat-shaped keys already harvested from the disassembly (MegaTons, GuidanceType, SpiralType, ...) can be searched directly. 8648 records carry at least one, clustering on three record names in every per-language GP_MAIN_GAME_*.pak: Weapon 131 records, 21 fields -- the launcher Shell 131 records, 37 fields -- the projectile AssortMissileParam 9 records, 20 fields -- missile guidance 131, not the 59 of the WEAPONS roster: that roster is the arsenal menu's list, not the full set. Controlled negative in the same pass: stageNN_settings.tbl does not exist. AUTO_SETTINGS names 28; four path prefixes give 0/116 while both controls in the same loop are found. Also decoded: EnumUnit (54 unit ids tying eNNN/fNNN mesh prefixes to faction/class names), ArmsItemFile (59 weapon -> HUD icon mappings), SETTINGS (sound config), Parameters (HUD markers). New structure doc + artefact; ISL artefacts byte-identical.
This commit is contained in:
91
docs/re/structures/weapon-datasheet-static.md
Normal file
91
docs/re/structures/weapon-datasheet-static.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# ✅ The STATIC weapon datasheet — `Weapon`, `Shell`, `AssortMissileParam`
|
||||
|
||||
The corpus's weapon numbers came from a **runtime capture**
|
||||
([weapon-datasheet-runtime](../weapon-datasheet-runtime.md),
|
||||
[weapon-struct-runtime](weapon-struct-runtime.md)). The static tables behind them
|
||||
are now located and read, with no emulator involved.
|
||||
|
||||
## How they were found
|
||||
|
||||
Not by guessing a filename. **IDXD field names are literal strings in the string
|
||||
pool**, so the stat-shaped keys already harvested from the disassembly
|
||||
(`data/config-keys.txt` — `MegaTons`, `GuidanceType`, `SpiralType`,
|
||||
`Straight1Type`, `BulletLimit`, `CrewCount`, `HP_CLASS`, …) can be searched
|
||||
directly across every record on the disc. 8 648 records carry at least one, and
|
||||
they cluster on three record names.
|
||||
|
||||
## What is there
|
||||
|
||||
| record | per pak | fields | what it is |
|
||||
|---|---|---|---|
|
||||
| `Weapon` | **131** | 21 | the launcher — rate of fire, heat, ammo, SE/FX |
|
||||
| `Shell` | **131** | 37 | the projectile — damage, ballistics, collision, FX |
|
||||
| `AssortMissileParam` | **9** | 20 | missile guidance tuning |
|
||||
|
||||
131 `Weapon` and 131 `Shell` records, one-to-one, in **each** of the per-language
|
||||
`GP_MAIN_GAME_*.pak` files; a weapon and its shell share a pak entry. Note this is
|
||||
**131**, not the 59 of the `WEAPONS` name roster — the roster is the *arsenal
|
||||
menu's* list, not the full set.
|
||||
|
||||
### `Weapon` (sample: `Weapon_TCAF_DeltaSaber_Rocket_P`)
|
||||
|
||||
```
|
||||
ID / Name Weapon_TCAF_DeltaSaber_Rocket_P
|
||||
TargetType Vessel,Craft,Structure
|
||||
ShotType Single ReticleType 5
|
||||
HitRatio 1.0 SprayAngle 4.0
|
||||
Interval 1.0 ReadyInterval 0.0
|
||||
TriggerShotCount 1 TriggerShotInterval 0.1
|
||||
LoadingCount 1000 Heating 0.00 Cooling 0.10
|
||||
Mass 100 SpecialWeaponType 0
|
||||
ShootSE / ReadySE / FinishSE, MuzzleFlashFxModel_Loop / _OneShot
|
||||
```
|
||||
|
||||
### `Shell` (sample: `Shell_TCAF_DeltaSaber_Rocket_P`)
|
||||
|
||||
```
|
||||
Power 100.0 DamageType Shell FailedDamageRatio 1.0
|
||||
Velocity 3000.0 Acceleration 0.0 AngularVelocity 0.0
|
||||
MinimumVelocity / MaximumVelocity 0.0
|
||||
MinimumRange 10.0 MaximumRange 6000.0 LifeTime 3.0
|
||||
CollisionType Capsule Radius 30.0 Length 10.0 Volume 10.0
|
||||
ShellMass 0.005 HP 0.0 MovementType Shell
|
||||
IsGravitated Yes IsDestructible No IsLockable No IsFullCollision No
|
||||
IsFixedModel Yes ShellModel wep_t085
|
||||
Color_R/G/B 1.0 / 0.85 / 0.7
|
||||
HitFxModel eff_h000 HitFxInEnd Yes ContrailFxFrame GN_Trc_01
|
||||
JetFxModel / JetFxFrame, HitSE_Damage / HitSE_NoDamage, ThrusterSE
|
||||
```
|
||||
|
||||
`MaximumRange 6000.0` with the corpus's **world unit = 1 metre** makes this a
|
||||
6 km rocket; `Velocity 3000.0` is 3 km/s.
|
||||
|
||||
### `AssortMissileParam` — the guidance model
|
||||
|
||||
```
|
||||
GuidanceType 0 SpiralType 1 Straight1Type 1 Straight2Type 0
|
||||
st1_df_aperture 0.5 st1_up_aperture 1.0 st1_up_bias_pow 0.5 st1_df_pitch 10
|
||||
sp_sp_round_time 0.35 … 0.5 sp_sp_spiral_pow 0.05 … 0.1
|
||||
sp_qu_cycle_time 0.6 … 1.2 sp_qu_bias_pow 0.35 … 0.65
|
||||
sp_zg_cycle 0.2 … 0.4 sp_zg_bias 0.1 … 0.3
|
||||
```
|
||||
|
||||
Three named motion modes with min/max ranges — `sp` spiral, `qu` quick-turn,
|
||||
`zg` zig-zag — plus a straight-flight aperture and pitch. Nine variants ship.
|
||||
|
||||
## 🔴 And a controlled negative: `stageNN_settings.tbl` does not exist
|
||||
|
||||
`AUTO_SETTINGS` names 28 files `stage01_settings.tbl` … `stage29_settings.tbl`.
|
||||
Probing pak entry names (`name_hash`) with **four** path prefixes — bare,
|
||||
`stage\`, `arsenal\`, `dat\` — finds **0 of 116**, while the two controls in the
|
||||
same loop (`stage\UnitGroup_S02.tbl`, `stage\AIParams_S02.tbl`) are **both
|
||||
found**. So the reader and prefix convention are right and those files are simply
|
||||
not on the disc — the same shape as `STAGENN_UNIT_MAX`.
|
||||
|
||||
## 🟡 Not settled
|
||||
|
||||
* Whether the 131 `Weapon` records reconcile with the runtime capture field by
|
||||
field — this locates and reads the table; it does not cross-check it.
|
||||
* The other stat keys (`MegaTons`, `BulletLimit`, `CrewCount`, `HP_CLASS`,
|
||||
`HPGauge`, `WEAPON_CATEGORIES`) belong to records not opened here.
|
||||
* Why the arsenal roster lists 59 of the 131 weapons.
|
||||
Reference in New Issue
Block a user