KB: authentic targeting model recovered (Reticle pick-ray, RETICLE.h [T0])

The engine Reticle struct (the mech's "TargetReticle" attribute) is the
acquisition chain: slewable screen-space crosshair -> pick-ray -> the
entity + damage zone under it become mech+0x388/0x38c, the intersection
point mech+0x37c. Convergence-on-lock is authentic (FireWeapon has no
aim test); targetWithinRange = dist < (1-damage) x weaponRange
(FUN_004b9bdc). Port acquisition is a bring-up stand-in (hardwired lock
+ BT_FIRE_ARC cone) -> tracked as the next combat-fidelity step.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-08 20:23:24 -05:00
co-authored by Claude Fable 5
parent 48b17750e5
commit 6988821525
2 changed files with 28 additions and 0 deletions
+19
View File
@@ -32,6 +32,25 @@ player input). [T1]
`mech+0x38c` = targeted sub-zone (1=whole). Weapons cache hasTarget/targetPoint/muzzlePoint,
refreshed each frame. [T1]
**The AUTHENTIC acquisition model (recovered 2026-07-08, `engine/MUNGA/RETICLE.h` [T0]):** the
engine `Reticle` struct (the mech's **"TargetReticle" attribute** — the same one the reticle
renderable ctor binds) carries `reticlePosition` (screen 1..+1, SLEWABLE — the mechmppr
`freeAimSlew`), `pickPointingOn`, `rayIntersection` (Point3D), `targetEntity`, and
`targetDamageZone`: the pilot slews the crosshair; the engine **pick-rays through it** into the
3D world; the entity (and the specific DAMAGE ZONE) under the crosshair become the target. The
mech's three slots are this pick's result: `0x37c` = rayIntersection, `0x388` = targetEntity,
`0x38c` = targetDamageZone (so aimed shots hit the zone under the crosshair — the aimed-damage
path). `Reticle::ReticleElements` has a `TargetDesignatorOn` box + direction-arrow bit (the HUD's
lock box; the reticle's off-screen turn arrows point at it). Once locked, `Emitter::FireWeapon`
converges on the target with NO aim/arc test (part_013.c:7758: `range <= weaponRange → damage
*(mech+0x388)`) — convergence-on-lock IS authentic; the skill is keeping the crosshair on the
enemy. `MechWeapon::UpdateTargetState` (`FUN_004b9bdc` [T1]): `targetWithinRange = dist <
(1 hostZoneDamage) × weaponRange` — damage DEGRADES weapon reach; that flag is the HUD pip's
lit state. The 0x388 WRITER (the per-frame reticle→mech copy) is in an un-exported decomp gap.
**Port status:** acquisition is BRING-UP (target hardwired to `gEnemyMech` + a `BT_FIRE_ARC`
±30°+torso-reach cone gating trigger/damage — both PORT stand-ins, mech4.cpp targeting block);
the authentic slew+pick chain is NOT yet reconstructed. [T2 status / T0+T1 model]
## Firing arc + muzzles
There is NO firing-arc field in the binary (`Emitter::FireWeapon` fires whenever HasActiveTarget) —
the 1995 game got away with it because it was **cockpit-only** (a beam behind you is off-camera). The
+9
View File
@@ -51,6 +51,15 @@ authentic path scoped.
these are MODE flags — in the basic test mission the inert Myomers / dormant valve is likely AUTHENTIC
(advanced damage off); wiring makes them RESPOND when a mission enables the mode, not necessarily change
the basic-mission behavior. The MessageBoard feed is separate (StatusMessagePool, below).
- **Authentic target acquisition (the reticle pick-ray)** — the real chain is `Reticle`
(`engine/MUNGA/RETICLE.h` [T0], the mech's "TargetReticle" attr): slew `reticlePosition`
(mechmppr `freeAimSlew`) → engine pick-ray → `targetEntity`/`targetDamageZone`/`rayIntersection`
→ the mech's `0x37c/0x388/0x38c` slots (see [[combat-damage]] Targeting). Port bring-up
hardwires the lock to `gEnemyMech` + a `BT_FIRE_ARC` cone (both stand-ins). What resolves it:
reconstruct the slew input + the pick test (entity ray-intersection exists in the engine) + the
per-frame reticle→mech copy (its binary form is in an un-exported gap — re-export the
mech2/HUD region). Payoff: aimed zone damage, the designator box, authentic "keep the crosshair
on the enemy" gunnery. Status: OPEN (next combat-fidelity step).
- **Cockpit HUD leftovers (task #35 residue, 2026-07-08)** — the reticle + 7 weapon pips are LIVE
(see [[gauges-hud]] + `phases/phase-02-dpl2d-reticle.md`), but three pieces remain: (a) the
**blx_cop canopy shell** renders BLACK (untextured/unlit in our inside view) so it's hidden by a