KB: document the HorizTwoPartBar tiled-pattern fix

context/gauges-hud.md: new section on the TEMP/STATUS bar's three-zone tiled
render (@004c4340) and the port bug where Execute solid-filled from warnPix and
ignored the tile image. Commit 4d4436e.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-21 08:04:07 -05:00
co-authored by Claude Opus 4.8
parent 4d4436ed03
commit 2e9c1c7c0d
+18
View File
@@ -192,6 +192,24 @@ the base non-virtual `DrawWarningLamp` existed, so the count stayed green-on-bla
dark box in the green dot. Fix: made `DrawWarningLamp` virtual + added the ballistic override.
Energy weapons (`EnergyWeaponCluster`, no ammo count) use the base only — unaffected.
## TEMP/STATUS bar (HorizTwoPartBar) tiles a striped pattern from x=0 (2026-07-21) [T1 decomp + render-verified]
The per-weapon TEMP/STATUS bar is a `HorizTwoPartBar` (@004c4170, Execute @004c4340). It renders
**three zones along X** from the interned `tileImage` + two colours (`fillColor`, `backgroundColor`):
- `[0, warnPix)``DrawTiledBitmap(tileImage)` (@004c2ff8): the striped/dotted TILE pattern. The
`color` arg is ignored — the tile is blitted with its own pixels (vtbl+0x58) tiled across the zone.
- `[warnPix, valPix)``backgroundColor` solid (only when `value > low`; binary keeps the current
colour, still `backgroundColor` from zone 1 — no SetColor).
- `[valPix, width)``fillColor` solid.
`warnPix = round(width*low/high)`, `valPix = round(width*value/high)` (value=CurrentTemperature,
low=DegradationTemperature, high=FailureTemperature). **Port bug (fixed):** the Execute had been
rewritten with `DrawFilledRectangle` starting at `warnPix` and NEVER used `tileImage` — so the bar
read as a solid block "starting in the middle", not striped. The sibling `VertTwoPartBar`
(@004c4724, eng-page vertical temp bars) was already correct (uses `DrawTiledBitmap`). Fix mirrored
the tiled three-zone render into `HorizTwoPartBar::Execute`; matches the DOSBox reference (hatched
fill block on the left + dotted tick scale). NOTE the horizontal/vertical bars use DIFFERENT zone
colours (Horiz: zone2=bg, zone3=fill, 2 colours; Vert: zone2=fill, zone3=extra, 3 colours) — do not
assume they are pure mirrors.
## The secondary screen's THREE views (Damage / Critical / Heat) — mode-gated [T0/T1/T2]
The `sec` port stacks three mode-gated mech-schematic layers at offset (50,0) over the
always-on radar/heading/speed/messageBoard (`Secondary1`): **Damage** (`ModeSecondaryDamage`,