HUD: per-weapon pip data dump + the real authored ranges recorded

[hud] pip diagnostic logs each registered pip's classID/PipPosition/
WeaponRange/PipExtendedRange/PipColor. The live dump corrects the
"everything is 500m" assumption: BLH lasers red @500 (x3, ext=1),
missiles amber @800 (x2), PPCs blue @900 (x2) -- the pips sit at their
weapons' max-range marks on the range ladder (caret below a pip = that
weapon reaches), so 7 weapons read as 3 weapon-system groups. KB +
comments corrected.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-09 08:14:18 -05:00
co-authored by Claude Fable 5
parent 5038d64382
commit 4e7561714e
3 changed files with 16 additions and 3 deletions
+7 -1
View File
@@ -99,7 +99,13 @@ range caret binds to the live target range (`BTSetHudTargetRange`, fed by mech4'
`tools/disas2.py` — the full annotated read: the task-37 commit + btl4vid.cpp comments) [T1],
and every instrument is now live [T2]:**
- **Right ladder** = range 01200 m: a BAR from ladder-top to the caret + the yellow caret
translate (`-scaleY·frac`); pegs at 1200 with no target.
translate (`-scaleY·frac`); pegs at 1200 with no target; the DISPLAYED range slides at
**500 m/s** toward the true pick range (HudSimulation :5652 [T1]). **The weapon pips sit on
this same ladder at each weapon's authored max-range mark** — caret below a pip = that weapon
reaches the target. BLH authored data (live dump): 3× ER-M laser red @**500 m** (two stacked
at one column; PipExtendedRange=1), 2× missile amber (0.6,0.4,0) @**800 m**, 2× PPC blue
@**900 m** — so the 7 pips read as 3 weapon-SYSTEM groups. (The engineering-panel "RANGE 500M"
labels are panel text; the authoritative reach is the streamed WeaponRange.)
- **Bottom 21-tick tape = the TORSO-TWIST indicator** (NOT a heading tape): deflection line +
carets at `∓(span/2)·(RotationOfTorsoHorizontal / HorizontalTorsoLimit)` (HUD attrs 4/5/6).
Fixed-torso BLH: centred (authentic static).
+5
View File
@@ -1545,6 +1545,11 @@ BTReticleRenderable *BTBuildReticle(Entity *mech)
RGBColor pc = wp->PipColor();
float r = (float)pc.Red, g = (float)pc.Green, b = (float)pc.Blue;
if (r < 0.0f || g < 0.0f || b < 0.0f) { r = 0.78f; g = 0.08f; b = 0.02f; }
DEBUG_STREAM << "[hud] pip: classID=" << (int)ws->GetClassID()
<< " pos=" << wp->PipPosition()
<< " range=" << wp->WeaponRange()
<< " ext=" << wp->PipExtendedRange()
<< " rgb=(" << r << "," << g << "," << b << ")\n" << std::flush;
gBTReticle->AddWeapon(
wp->WeaponRange(),
wp->PipPosition(),
+4 -2
View File
@@ -538,7 +538,8 @@ extern BTDriveInput gBTDrive;
static const Scalar kDriveMaxSpeed = 30.0f; // full-throttle forward speed
static const Scalar kDriveTurnRate = 1.2f; // full-deflection yaw rate
// (kWeaponRange removed: the damage gate now reads the AUTHENTIC per-weapon
// targetWithinRange -- effectiveRange @0x328 = (1-damage) x authored 500 m.)
// targetWithinRange -- effectiveRange @0x328 = (1-damage) x the authored
// WeaponRange: BLH lasers 500 / missiles 800 / PPCs 900 m.)
// Single local-player drive state (bring-up).
static Scalar gDriveHeading = 0.0f; // yaw about world up (Y)
@@ -2528,7 +2529,8 @@ void
// THE AUTHENTIC RANGE GATE (FireWeapon @004bace8 :7758 [T1]): damage
// applies when dist <= the weapon's EFFECTIVE range = (1 - host-zone
// damage) x its AUTHORED WeaponRange (BLH lasers/PPCs: 500 m) -- the
// damage) x its AUTHORED WeaponRange (BLH: lasers 500, missiles 800,
// PPCs 900 m -- the [hud] pip dump) -- the
// per-weapon targetWithinRange flag UpdateTargeting computes each
// frame. Any live weapon within reach lands the aggregate shot.
// (Replaces the old kWeaponRange=100 bring-up constant, which