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.
92 lines
4.1 KiB
Markdown
92 lines
4.1 KiB
Markdown
# ✅ 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.
|