From e4d939424a7111015975bba504f0948fb1b38f13 Mon Sep 17 00:00:00 2001 From: arcattack Date: Tue, 7 Jul 2026 17:44:24 -0500 Subject: [PATCH] docs(gauge): mark P2 widgets done (3/4) + GeneratorCluster gated Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/GAUGE_COMPOSITE.md | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/docs/GAUGE_COMPOSITE.md b/docs/GAUGE_COMPOSITE.md index efeb757..cb70899 100644 --- a/docs/GAUGE_COMPOSITE.md +++ b/docs/GAUGE_COMPOSITE.md @@ -517,23 +517,30 @@ strcmps every slot — a gap AVs). Done: no leak / massScale 3.0 = authentic pristine. **After P1 every config-string binding resolves OK except HeatSink/AmbientTemperature** (needs the aggregate bank, P3). -### Phase 2 — WIDGET RECONSTRUCTION (TODO — the biggest remaining visible gaps) -These config keywords are UNREGISTERED in `BTL4MethodDescription[]` (btl4grnd.cpp) so their lines are -parse-skipped and the gauge is never built (even after publishing). Each needs a REAL Make/ctor/Execute/dtor -(no prose — the /FORCE trap: a prose-only vtable slot AVs on first call) + registration. Grep the link log -for `unresolved external ` before registering. -- **VertNormalSlider** (condenser valve slider @2; vtable PTR_FUN_00518c34) + **LeakGauge** (== BitMapInverseWipe - @4c5b7c, @6) — completes the heat panel's valve + leak columns. -- **GeneratorCluster** (ctor @004c746c + 5 children: VertTwoPartBar @004c4724, ScalarBarGauge @004c72ac, - LeakGauge @004c5b7c, 2× TwoState @004739d8 + real dtor @004c7778) — the 4 generator panels (buttons 9-12, - currently blank). Publish the Generator OutputVoltage→outputVoltage@0x1DC entry (temps inherit HeatSink). -- **PilotList** (Comm KILLS/DEATHS/SELECT-TARGET/NEAREST roster; Make @004ca90c, ctor @004ca958 reads - DAT_0051af88 8×3 layout, BecameActive @004caba4, Execute @004cabd0, dtor @004cab10, DrawMechIcon @004cad70). - Roster FEED is already live (MechControlsMapper::FillPilotArray). Needs DAT_0051af88 PE-parsed (24 ints). -- **PrepEngrScreen** (Make @004c7b30/ctor @004c7bf0/Execute @004c7e48) — engineering full-screen readout. -- **SectorDisplay** (ctor @004c9e10/Execute @004ca07c) + **MessageBoard** (Make @004cb678) — sector coords + - message board (lower priority). **SeekVoltageGraph::Execute** (@004c6934) + real FindAttributeIndex (the - weapon-cluster seek-voltage plot; currently an inert stub). +### Phase 2 — WIDGET RECONSTRUCTION (3 of 4 DONE; commits d68284e/0060a3e/b44e908) +These config keywords were UNREGISTERED in `BTL4MethodDescription[]` (btl4grnd.cpp) so their lines +parse-skipped and the gauge never built (even after publishing). The `gauge-widget-decode` workflow +reconstructed each from the binary; registered widgets need a REAL Make/ctor/Execute/dtor (the /FORCE trap: +a prose-only vtable slot AVs on first call). +- ✅ **LeakGauge** (== BitMapInverseWipe @4c5b7c, config @6) — the class body already existed; added the Make + factory + methodDescription("LeakGauge") + registration. The heat panel's LEAK column now builds (empty + undamaged = authentic). +- ✅ **VertNormalSlider** (condenser valve slider @2; vtable PTR_FUN_00518c34) — reconstructed all 7 fns + (part_013.c:14051-14175; Make @004c4b08 by disassembly), fixed the jumbled header layout, published + ValveSetting→coolantFlowScale@0x15C. The SET valve indicator renders (row=Round(span*value)). +- ✅ **PilotList** (Comm KILLS/DEATHS roster; part_014.c:3156-3434, DAT_0051af88 8×3 layout PE-parsed) — + the Comm surface now renders the live local-pilot row (KILLS 0 DEATHS 0 + name box). Feed = new + `BTResolveRosterPilot` bridge (mechmppr.cpp) → mapper roster. DEATHS redirected from the dead pad_0x280 to + the real deathCount@0x200. The scoring feed that moves KILLS/DEATHS is P3. +- ◐ **GeneratorCluster** (4 generator panels, buttons 9-12) — RECONSTRUCTED + infra committed (Generator + OutputVoltage table + the @004c72ac ScalarBarGauge Scalar* variant + Make/ctor/dtor + 15-param + methodDescription) but **registration GATED**: registering aborts at runtime — the 4 panels build (4 + "BecameActive not defined" warnings) then `abort()`, isolated to the PARENT lifecycle (persists with all 5 + children nulled; no pure virtuals; unguarded ctor path). The sibling SubsystemCluster overrides + BecameActive/Execute/TestInstance whereas the decode had GeneratorCluster override ONLY the dtor — that + claim is the prime suspect. Re-enable the btl4grnd.cpp line once the parent lifecycle is fixed. +- **TODO (lower priority):** **PrepEngrScreen** (@004c7b30/7bf0/7e48 — engineering full-screen), **SectorDisplay** + (@004c9e10/ca07c) + **MessageBoard** (@004cb678), **SeekVoltageGraph::Execute** (@004c6934) + real FindAttributeIndex. ### Phase 3 — SIM/MODEL (TODO) - **Aggregate HeatSink-bank** (0xBBE; ctor @4ae8d0, sim @4ae73c, parser @4ae9dc — currently #if 0'd in