From 3bee47a9eadd92a009bbf1799b4f172a21f5b78f Mon Sep 17 00:00:00 2001 From: arcattack Date: Mon, 6 Jul 2026 22:32:56 -0500 Subject: [PATCH] docs: record the remaining-widget scope (PlayerStatus / vehicleSubSystems) Both need a full multi-function reconstruction (not the registration-glue the other widgets were): PlayerStatus's ctor/Execute/helpers (CreateMutantPixelmap8, PlayerStatusMappingGroup, App Players-node lookup) are comment-only stubs and its existing Make/header ctor are buggy (drop the graphics_port_number param, pass entity/renderer as x/y); vehicleSubSystems is undeclared/from-scratch. Records the decomp addresses + the ctor arg order for a focused follow-up. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/GAUGE_COMPOSITE.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/GAUGE_COMPOSITE.md b/docs/GAUGE_COMPOSITE.md index 9840222..b5d3816 100644 --- a/docs/GAUGE_COMPOSITE.md +++ b/docs/GAUGE_COMPOSITE.md @@ -455,3 +455,32 @@ fill the gaps (bind not-yet-needed ids to a shared read-only pad member). classification (0 contacts today) + the stubbed pip/name/video-object infrastructure (contacts + labels) + `SetTargetRange` (radar zoom, currently a 500m default). - Remaining widgets (task #13): `PlayerStatus` (comm/score, 8 uses), `vehicleSubSystems` (26 uses). + +### Remaining widgets — scope (assessed 2026-07; NOT quick registration wins) +The last two config widgets each need a FULL multi-function reconstruction (unlike +vertBar/segmentArc/oneOfSeveralPixInt/map, which were registration-glue on classes +whose bodies were already reconstructed): +- **PlayerStatus** (comm/score, 8 uses; btl4gau3) — only `PlayerStatus::Make` is + defined; the ctor (@004cb1a8), Execute (@004cb358, 105 lines), dtor (@004cb28c), + BecameActive (@004cb310) are comment-only. The Execute is the meat: look up + player N in the App "Players" node (DAT_004efc94 = App singleton, +0x24 -> +0x18, + `FUN_00403ad0("Players")`, indexed vtbl+0x34); on a player/mech change build a + recoloured name pixmap via **CreateMutantPixelmap8** (@004cafac, ~85 lines, its + own reconstruction) + a **PlayerStatusMappingGroup** (@004c9bd0, adpal.pcc/ + adpal2.pcc palette tint of the mech outline); each frame draw the score + NumericDisplay + name bitmap + recoloured mech outline + alive/dead status box. + Because Execute CALLS the two helpers, it's all-or-nothing (a partial Execute = + a /FORCE runtime AV). ⚠ The DEFINED `Make` (btl4gau3.cpp:216) + header ctor are + BUGGY: the ctor's real arg order (decomp @004cb1a8) is (rate,mode,renderer,owner, + **graphics_port_number**,x,y,player_number,font,color,okColor,aliveColor,deadColor, + id) -- the reconstruction dropped the port and passes `(int)entity`/`(int) + gauge_renderer` as x/y. The ctor itself is tractable (GraphicGauge base + store + 4 colours@0x29-0x2c + port@0x24 + SetOrigin(x,y) + playerIndex=player_number-1 + + a score NumericDisplay@0x2e at (0x72,0xd8), 5 digits, format 2). +- **vehicleSubSystems** (26 uses -- the most-used unregistered widget) — no class + declared; fully from-scratch. Config: `vehicleSubSystems(qjak0.pcc..qjak7.pcc)` + (8 subsystem-group bitmaps, no attribute bindings -- reads the mech's subsystem + roster internally). Find its Make/ctor/Execute via the .data methodDescription + table (the "vehicleSubSystems" string is a .data const, not inlined in the decomp). +These are best done as a focused effort (each ~250-300 lines across 3-5 functions), +not as a tail-of-session add.