HUD colors corrected vs the binary ctor (validated by a period screenshot)

A period pod screenshot from players who know the game flagged the
overlay. Stroke-by-stroke re-read of the ctor (@4546-4587) against it:
- The range caret triangle is GREEN width 1 (ctor @4550-4551 sets
  SetLineWidth(1)+SetColor(0,0.75,0) AFTER the yellow bar's CallList) --
  my transcription left it yellow/2. Same for the bottom bowtie carets
  (@4569-4570). Both fixed; the caret polylines also get the binary's
  explicit 4th closing point (@4558).
- The screenshot otherwise CONFIRMS our layout (yellow range bar, green
  caret, colored pip dots, tick tape + green bowtie, rotating compass,
  mid-ladder range with no lock = the world-pick terrain range).
- Its crosshair is ~2.5x taller with arrowhead arms -- NOT our binary's
  +-0.04..0.16 program: a different pod revision. Ours stays [T1] to
  BTL4OPT.EXE 4.10.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-09 08:49:54 -05:00
co-authored by Claude Fable 5
parent 2250b01c6b
commit 3430f87305
2 changed files with 28 additions and 7 deletions
+10 -3
View File
@@ -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 01200 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 01200 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
+18 -4
View File
@@ -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);
}