Authentic target acquisition LIVE: reticle slew + pick-ray lock + aimed zone damage (task #36)

The engine Reticle model (MUNGA/RETICLE.h [T0]) reconstructed end to end:
- Mech::targetReticle is a real Reticle member bound to the TargetReticle
  attribute (0x1d), per the RP VTV analog (VTV.h targetReticle).
- Crosshair slew: mouse -> client rect -> reticle coords (the pod stick
  free-aim channel's dev-box stand-in); BT_AIM="x y" pins it headless.
  LMB fires lasers / RMB missiles (alongside SPACE/CTRL).
- Pick ray: the ACTIVE eye publishes pos + LookAtRH basis (BTSetAimCamera,
  L4VIDRND view-write site) + the render loop publishes proj._22;
  BTGetAimRay builds the world ray, Mech::PickRayHit slab-tests it against
  the collision template's ExtentBox via the engine's BoundingBox::HitBy
  (local frame; clips the Line at entry) -> world hull point.
- Designation: the mech under the crosshair designates (sticky; re-hover
  refreshes; cleared when the target leaves the roster at burial); the
  entity target slots 0x37c/0x388/0x38c feed the whole weapon path.
- Aimed fire: while HOT the impact point is the PICKED hull point -> the
  STEP-6 cylinder lookup resolves the zone under the crosshair (verified:
  center-aim -> head-band zone 13 dominant). Off-crosshair the sticky
  designation converges on center mass.
- HUD: the aim group draws at the slewed position ([0x9a] translate,
  contained by push/pop); the designator ring tracks the target's
  projected point (subB9 hot / subB8 designated, BTProjectToReticle);
  edge arrows when off-screen/behind.
- AUTHENTIC gating: no fire arc exists in the binary (FireWeapon fires
  whenever HasActiveTarget, part_013.c:7758) -> BT_FIRE_ARC is now an
  explicit OPT-IN presentation clamp; the hardwired gEnemyMech lock and
  the projectile path's gEnemyMech fallback are removed.
- Fixed en route: every renderable rebuild stomped mCamera back to the
  chase eye (start-inside silently lost the cockpit camera; the aim feed
  exposed it). BTL4VideoRenderer::mViewInside persists the chosen view.

Verified headless: BT_AIM="0 0" -> HOT lock, pick hits the hull face at
exact range, aimed zones resolve; BT_AIM="0.8 0.3" -> no lock, zero
damage, zero missile launches; kill chain completes to wreck + smoke.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-08 20:57:11 -05:00
co-authored by Claude Fable 5
parent 6988821525
commit d78bde066d
10 changed files with 541 additions and 185 deletions
+18 -3
View File
@@ -47,9 +47,24 @@ converges on the target with NO aim/arc test (part_013.c:7758: `range <= weaponR
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]
**Port status: RECONSTRUCTED + runtime-verified (task #36, 2026-07-08) [T2].** The chain:
`Mech::targetReticle` (real `Reticle` member, bound to the TargetReticle attr 0x1d) ← slew from
the MOUSE (dev-box stand-in for the pod stick free-aim; `BT_AIM="x y"` pins it headless) →
`BTGetAimRay` (L4VIDEO; the ACTIVE eye publishes pos+LookAtRH basis via `BTSetAimCamera`, the
render loop publishes proj._22) → `Mech::PickRayHit` (world ray → local frame →
`BoundingBox::HitBy` slab test vs the collision template's ExtentBox → world hit point) → the
entity target slots. Designation is STICKY (persists off-crosshair; re-hover refreshes; cleared
when the target leaves the roster at burial). While HOT (crosshair on the hull) the impact point
= the PICKED point → STEP-6 resolves the zone under the crosshair (verified: center-aim at the
head band → zone 13 dominant); off-crosshair the converge point is center-mass chest. The HUD
draws the aim group at the slewed position ([0x9a] translate list, contained by push/pop), the
designator ring at the target's projected point (subB9 hot / subB8 designated,
`BTProjectToReticle`), and the edge arrows when off-screen/behind. `BT_FIRE_ARC` is now an
EXPLICIT OPT-IN presentation clamp (unset = authentic no-arc). The old hardwired lock, the
±30°-default cone, and the projectile path's gEnemyMech fallback are all REMOVED. LMB fires
lasers / RMB missiles (with SPACE/CTRL). ⚠ A view-selection bug was fixed en route: every
renderable rebuild stomped `mCamera` back to the chase eye (btl4vid `mViewInside` now persists
the chosen view — the aim camera feed and the V toggle both depend on it).
## Firing arc + muzzles
There is NO firing-arc field in the binary (`Emitter::FireWeapon` fires whenever HasActiveTarget) —