HUD reticle + weapon pips LIVE: dpl2d 2D display-list port (task #35)

- dpl2d API fully recovered from the binary recorders (@487f34-488630):
  opcode model (points/lines/polyline/circle/color/width/matrix/push-pop),
  CallList = INLINE include (state persists to caller), centered coordinate
  frame (unit = half viewport height). game/reconstructed/dpl2d.cpp rework.
- BTReticleRenderable ctor @004cc40c transcribed with the authentic
  calibration (originX .35, originY .25, scaleY .5, 0..1200m right range
  ladder, bottom heading tape, FUN_004cd938 tick ladders, lock rings,
  turn arrows); range caret slides from the live target range fed by the
  mech4 targeting step (BTSetHudTargetRange).
- Weapon pips: the binary gate is IsDerivedFrom(0x511830 =
  MechWeapon::ClassDerivations) [T1: part_014.c:5386 hard-aborts on missing
  weapon attrs; part_012 counts + roster ORs capabilityFlags@+0x334] so ALL
  7 BLH weapons register (3 lasers + 2 PPCs + 2 MissileLaunchers). Pip A
  (lit, authored PipColor) on TargetWithinRange, else dark ring B.
- AddWeapon @004cdac0 store map corrected to the verified order
  (part_014.c:4827-4837); both state attrs are literally named
  "SimulationState" (strings @51d526/51d577) -> weapon simulationState.
- Mech roster this[0x1ef] renamed poweredSubsystems -> weaponRoster
  (0x511830 is MechWeapon, not PoweredSubsystem=0x50f4bc); derivation-tag
  table added to context/decomp-reference.md.
- Draw hook BTDrawReticle after the 3D scene, cockpit view only. Binary
  Execute @004cdcf0 is an un-exported gap -> Draw dynamics [T3], tracked
  in context/open-questions.md with the blx_cop canopy + PNAME pip meshes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-08 20:05:44 -05:00
co-authored by Claude Fable 5
parent 1cd8ca1a80
commit 48b17750e5
15 changed files with 593 additions and 109 deletions
+10 -1
View File
@@ -1,7 +1,16 @@
# Phase 02 — dpl2d API recovery + BTReticleRenderable reconstruction (task #35)
**Goal:** the main-view HUD (targeting reticle + up to 10 per-weapon pips).
**Status:** API fully recovered [T1]; ctor/Execute transcription + wiring IN PROGRESS.
**Status:** COMPLETE (steps 1-5 live, verified 2026-07-08). dpl2d opcode model + CallList
inline-include semantics in `game/reconstructed/dpl2d.cpp`; ctor glyph program + FUN_004cd938
tick-ladder helper transcribed in `btl4vid.cpp`; per-weapon registration via the binary's real
gate `IsDerivedFrom(0x511830 = MechWeapon::ClassDerivations)` (part_014.c:5386) — **7 pips** on
the BLH (3 lasers + 2 PPCs + 2 MissileLaunchers), AddWeapon @004cdac0 store map verified
(part_014.c:4827-4837; both state attrs are named "SimulationState", strings @51d526/51d577).
Draw hook = `BTDrawReticle(device)` after the 3D scene, cockpit view only. The binary Execute
@004cdcf0 is an UN-EXPORTED gap → Draw dynamics are best-effort [T3] (caret slide from live
target range; pip A lit on TargetWithinRange else ring B). Step 6 (blx_cop canopy shell) and the
PNAME1-8.bgf 3D pip meshes remain DEFERRED — tracked in context/open-questions.md.
## The recovered dpl2d recorder API (libDPL 2D display lists) [T1]