From 099871ef4cb60cb97e30c48a263aecb01f75a2bb Mon Sep 17 00:00:00 2001 From: arcattack Date: Mon, 6 Jul 2026 23:14:28 -0500 Subject: [PATCH] docs: record PlayerStatus done (mission-review scoreboard; cameraInit) Mark PlayerStatus reconstructed + registered in the remaining-widget scope note; record the key finding that it lives in cameraInit (the mission-review camera cockpit) not MechInit, so it is build/link/mech-cockpit-safe but not runtime- verifiable via a normal mech egg. vehicleSubSystems (from-scratch, 26 uses) remains. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/GAUGE_COMPOSITE.md | 44 ++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/docs/GAUGE_COMPOSITE.md b/docs/GAUGE_COMPOSITE.md index b5d3816..1a7e58c 100644 --- a/docs/GAUGE_COMPOSITE.md +++ b/docs/GAUGE_COMPOSITE.md @@ -457,30 +457,20 @@ fill the gaps (bind not-yet-needed ids to a shared read-only pad member). - 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. +- ✅ **PlayerStatus** DONE (increment 7; commit b691863) — reconstructed the whole family (mapped by the + `playerstatus-decomp-map` workflow): methodDescription + rewired Make (fixed the port/x/y bug), ctor/dtor/ + BecameActive/TestInstance/Execute, PlayerStatusMappingGroup (28 ColorMapperArmor zone tints, reusing the + EXISTING 10-arg ColorMapperArmor ctor), + ColorMapper/Armor::SetColor. **KEY FINDING: PlayerStatus lives + in the config's `cameraInit` block (the MISSION-REVIEW / spectator camera cockpit), NOT `MechInit`** — so + it is NOT part of the mech cockpit and does not build during normal mech play (Execute never runs, mech + cockpit un-regressed). It is the post-mission scoreboard rendered by the BTCameraDirector game model. + Registered so `cameraInit` builds it. Build/link-safe + mech-cockpit un-regressed, but NOT runtime- + verified (a normal `vehicle=` egg never triggers the camera model). BRING-UP STUB: CreateMutant + Pixelmap8 returns NULL (the mech-outline recolor needs the DynamicMemoryStream read API + Pixmap pixel-copy + mapped) → the score/name-box/status-box render but not the recoloured mech schematic. Player resolve uses + `application->GetMissionPlayer()` (WinTesla-clean) instead of the binary's raw App+0x24 "Players"-node walk. +- **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). + A focused effort (~250-300 lines across 3-5 functions).