re: CoverArea is a 6-bit MOUNT mask; the three other turret leftovers closed
Six bits, never more. Over all 835 turrets: 41 distinct values, max 0x3f, bits 6/7 set on none; per-bit 709/117/274/274/260/237. 0x00 (34) = the empty Weapon_NULL hardpoints with YawLimit 0; 0x01 alone (439) = craft hardpoints with YawLimit 2.5/1.0/0; 2-6 bits (362) = warship mounts with YawLimit 45-180. It tracks the MOUNT, not the weapon. UN_e107_ADAN_AAFrigate has eight identical AAFrigate_AAGun turrets: GN_GunXS_01..04 are 0x1d and 05..08 are 0x2d -- same gun, same YawLimit 120, different mask. The Battleship spreads five masks over GN_TGunL_01..05 / GN_TGunM_02..03, all firing the same CAF_Ship_ASGun. Which sector each bit denotes is NOT determined; six bits and the name invite +-X/+-Y/+-Z or six hull faces, but nothing static fixes the convention. Not adopted. Refuted on the way: bits 2 and 3 are not a mutually-exclusive pair -- 188 turrets set both. The 26 weapons no turret mounts are a coherent set: 11 _P player variants, the nose/twin mounts, two _Child sub-munitions, the three S16Boss_*, three Weapon_Test_*, and ADAN_Attacker_S_GunTurret. Versatile_NNN ships nowhere -- 0 populated records across all 41 archives, only the ??? template row. The two units one turret short: both extras are missile mounts with no Frame. Elan_EX4 = NoseGun + Missile, both mask 0x01, both frameless; AAFrigate_EX4 = eight framed guns plus one Ship_AAMissile at 0x0c with no Frame. n=2, stated as the observed pattern, not a rule. New artefact and regenerator; the other nine regenerate byte-identical.
This commit is contained in:
@@ -124,13 +124,69 @@ and wrong: the two sets **overlap in 0 values**, and the 59 slots carry only
|
||||
`Weapon.ID` (`Weapon_TCAF_DeltaSaber_Gun`). Two namespaces, one coincidence of
|
||||
count.
|
||||
|
||||
## ✅ `CoverArea` is a 6-bit mount mask — and the other three leftovers
|
||||
|
||||
Artefact `../data/turret-coverarea.txt`, regenerator
|
||||
`tools/re-capture/turret_coverarea.py`.
|
||||
|
||||
**Six bits, never more.** Across all **835** turrets: 41 distinct values, max
|
||||
`0x3f`, **bits 6 and 7 set on none**. Per-bit counts 709 / 117 / 274 / 274 / 260
|
||||
/ 237; popcounts 0…6.
|
||||
|
||||
| mask | n | what |
|
||||
|---|---:|---|
|
||||
| `0x00` | 34 | the empty `Weapon_NULL` hardpoints — `YawLimit 0` on all 34 |
|
||||
| `0x01` (one bit) | 439 | craft hardpoints — `YawLimit` 2.5 / 1.0 / 0 |
|
||||
| 2–6 bits | 362 | warship mounts — `YawLimit` 45…180, real pitch limits |
|
||||
|
||||
🔑 **It tracks the MOUNT, not the weapon.** `UN_e107_ADAN_AAFrigate` carries
|
||||
eight identical `..._AAFrigate_AAGun` turrets: `GN_GunXS_01…04` are **`0x1d`**
|
||||
and `GN_GunXS_05…08` are **`0x2d`** — same gun, same `YawLimit 120`, different
|
||||
mask. `UN_f104_TCAF_Battleship` spreads five masks (`0x1d`, `0x39`, `0x35`,
|
||||
`0x27`, `0x2b`) across `GN_TGunL_01…05` / `GN_TGunM_02…03`, all firing the same
|
||||
`CAF_Ship_ASGun`.
|
||||
|
||||
🟡 **Which physical sector each bit denotes is NOT determined.** Six bits and a
|
||||
field called *CoverArea* invite ±X/±Y/±Z or six hull faces, and the 01–04 /
|
||||
05–08 split above looks like a side — but nothing static fixes the axis
|
||||
convention. **A reading, not adopted.** ❌ Also refuted on the way: bits 2 and 3
|
||||
are not a mutually-exclusive pair — 188 turrets set both.
|
||||
|
||||
### The 26 weapons no turret mounts
|
||||
|
||||
`Weapon.ID` 131, mounted 105, never **26** — and they are a coherent set, not
|
||||
strays: **11 `_P` player variants** (`…_Beam_P`, `_Gun_P`, `_Bomb_P`, …),
|
||||
the **nose and twin mounts** (`_NoseGun`, `_NoseGun_P`, `_NoseGun_None`,
|
||||
`_NoseGun_Ttrl`, `_TwinGun`, `_TwinGun_P`), **two `_Child` sub-munitions**
|
||||
(`wep_13`, `wep_29`), the **three `S16Boss_*`** weapons, three `Weapon_Test_*`,
|
||||
and `ADAN_Attacker_S_GunTurret`.
|
||||
|
||||
### `Versatile_NNN` ships nowhere
|
||||
|
||||
**0 populated records across all 41 archives** — only the `???` template row.
|
||||
The schema declares a sixth destructible-part kind with zero instances.
|
||||
|
||||
### The two units one turret short — both extras are MISSILE mounts with no frame
|
||||
|
||||
* `UN_e001_ADAN_Elan_EX4`: `TurretCount 1`, two records — `Turret_000`
|
||||
`…Turret_NoseGun` and `Turret_001` `…Turret_Missile`, both mask `0x01`, both
|
||||
with an empty `Frame`.
|
||||
* `UN_e107_ADAN_AAFrigate_EX4`: `TurretCount 8`, nine records — eight
|
||||
`GN_GunXS_0N_ContH` gun turrets, plus one `…Ship_AAMissile` at mask `0x0c`
|
||||
**with no `Frame` at all**.
|
||||
|
||||
🔑 In both, the uncounted extra is a **missile launcher with no mesh node** — so
|
||||
`TurretCount` counts frame-mounted guns, and a frameless launcher rides in the
|
||||
same record family without being counted. Consistent across both, n=2, so
|
||||
**stated as the observed pattern, not a rule**.
|
||||
|
||||
## 🟡 Not settled
|
||||
|
||||
* What links a roster entry to a `Weapon.ID` — the 59-of-131 question is still
|
||||
open, and this pass shows the answer is **not** the hardpoint list.
|
||||
* `Versatile_NNN` has 0 populated records in this pak; only the `???` template
|
||||
row exists, so its schema is known and its instances are not.
|
||||
* `CoverArea` reads as a hex word (`0x00000000` / `0x00000001`) — a bit mask,
|
||||
bits unknown.
|
||||
* ~~`CoverArea` reads as a hex word — a bit mask, bits unknown.~~ **Opened
|
||||
above**: a 6-bit mount mask. Which sector each bit means is still open.
|
||||
* The 6 `no field` comparisons are one unit whose `StructureCount` omits every
|
||||
count.
|
||||
|
||||
Reference in New Issue
Block a user