diff --git a/context/gauges-hud.md b/context/gauges-hud.md index 137549b..dc6419e 100644 --- a/context/gauges-hud.md +++ b/context/gauges-hud.md @@ -98,9 +98,16 @@ range caret binds to the live target range (`BTSetHudTargetRange`, fed by mech4' **The per-frame `Execute` @004cdcf0 is RECOVERED (task #37, capstone disasm via `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 0–1200 m: a BAR from ladder-top to the caret + the yellow caret - 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 +- **Right ladder** = range 0–1200 m: a YELLOW width-2 BAR from ladder-top to the caret + a + **GREEN width-1 caret triangle** (ctor @4550-4551 sets green/1 AFTER the yellow bar call — + transcription color bug caught by a period reference screenshot, 2026-07-09; same for the + bottom bowtie carets @4569-4570); pegs at 1200 with no target; the DISPLAYED range slides at + **500 m/s** toward the true pick range (HudSimulation :5652 [T1]). ⚠ A period pod screenshot + (`C:\git\image.webp`, likely a DIFFERENT pod revision — its crosshair is ~2.5× taller with + arrowhead arms, NOT our binary's ±0.04..0.16 program) structurally CONFIRMS our layout: yellow + bar + green caret + colored pip dots on the right ladder, bottom tape + green bowtie, rotating + compass circle bottom-left, and a mid-ladder range reading with no lock (the world-pick + terrain range). Our glyph constants remain [T1] from OUR 4.10 binary. **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 diff --git a/game/reconstructed/btl4vid.cpp b/game/reconstructed/btl4vid.cpp index 6413431..841cdf8 100644 --- a/game/reconstructed/btl4vid.cpp +++ b/game/reconstructed/btl4vid.cpp @@ -1127,16 +1127,22 @@ BTReticleRenderable::BTReticleRenderable(Entity *entity, Scalar *range_attr) // the RIGHT range ladder (13 ticks up the right side, dir 3 = -y travel) BTReticleTickLadder(m, kRetTicksR, 1, kRetScaleY, kRetOriginX, kRetOriginY, 3, kRetTickMinor, kRetTickMajor); - // the range CARET (yellow triangle; its called list holds the live - // translate the Draw rebuilds each frame from the target range) + // the range group (ctor @4546-4560 [T1], color-corrected vs the reference + // screenshot which CONFIRMS the binary): the YELLOW width-2 state applies + // to the CALLED live list (the range BAR + caret translate the Draw + // rebuilds); the caret TRIANGLE itself is GREEN width 1 (@4550-4551 -- + // SetLineWidth(1) + SetColor(0,0.75,0) BEFORE the polyline). dpl2d_PushState(m); dpl2d_SetLineWidth(m, 2.0f); - dpl2d_SetColor(m, 0.75f, 0.75f, 0.0f); + dpl2d_SetColor(m, 0.75f, 0.75f, 0.0f); // yellow: the live bar dpl2d_CallList(m, rangeCaretR); + dpl2d_SetLineWidth(m, 1.0f); + dpl2d_SetColor(m, 0.0f, 0.75f, 0.0f); // green: the caret triangle dpl2d_OpenPolyline(m); dpl2d_AddPoint(m, kRetOriginX - kRetTickMajor, kRetOriginY); dpl2d_AddPoint(m, kRetOriginX - kRetCaret - kRetTickMajor, kRetOriginY + kRetCaret); dpl2d_AddPoint(m, kRetOriginX - kRetCaret - kRetTickMajor, kRetOriginY - kRetCaret); + dpl2d_AddPoint(m, kRetOriginX - kRetTickMajor, kRetOriginY); // close @4558 dpl2d_ClosePolyline(m); dpl2d_PopState(m); // the BOTTOM heading ladder (21 ticks across, dir 0 = +x travel) @@ -1144,21 +1150,29 @@ BTReticleRenderable::BTReticleRenderable(Entity *entity, Scalar *range_attr) kRetBotX, kRetBotY, 0, kRetTickMinor, kRetTickMajor); // the heading carets (over/under triangles at the ladder centre, shifted // by the called heading translate) + // (ctor @4565-4587 [T1], color-corrected like the range caret: yellow + // width 2 for the CALLED live twist-deflection list, then GREEN width 1 + // @4569-4570 for the bowtie triangles. The binary pops state between the + // over- and under-caret (@4579) -- same green/1 either way.) { float cx = kRetBotX + kRetBotSpan * 0.5f; // _DAT_004cd7f8 = 0.5 [T1] dpl2d_PushState(m); dpl2d_SetLineWidth(m, 2.0f); - dpl2d_SetColor(m, 0.75f, 0.75f, 0.0f); + dpl2d_SetColor(m, 0.75f, 0.75f, 0.0f); // yellow: the live deflection line dpl2d_CallList(m, rangeCaretB); + dpl2d_SetLineWidth(m, 1.0f); + dpl2d_SetColor(m, 0.0f, 0.75f, 0.0f); // green: the bowtie carets dpl2d_OpenPolyline(m); dpl2d_AddPoint(m, cx, kRetBotY - kRetTickMajor); dpl2d_AddPoint(m, cx + kRetCaret, kRetBotY - kRetCaret - kRetTickMajor); dpl2d_AddPoint(m, cx - kRetCaret, kRetBotY - kRetCaret - kRetTickMajor); + dpl2d_AddPoint(m, cx, kRetBotY - kRetTickMajor); dpl2d_ClosePolyline(m); dpl2d_OpenPolyline(m); dpl2d_AddPoint(m, cx, kRetBotY + kRetTickMajor); dpl2d_AddPoint(m, cx + kRetCaret, kRetBotY + kRetCaret + kRetTickMajor); dpl2d_AddPoint(m, cx - kRetCaret, kRetBotY + kRetCaret + kRetTickMajor); + dpl2d_AddPoint(m, cx, kRetBotY + kRetTickMajor); dpl2d_ClosePolyline(m); dpl2d_PopState(m); }