From 7fc4acb89fe3bb487b7363428e8cea134eac705d Mon Sep 17 00:00:00 2001 From: arcattack Date: Tue, 7 Jul 2026 21:39:47 -0500 Subject: [PATCH] gauge-complete P4g: MessageBoard reconstructed + registered -> LAST parse-skip cleared (0 unregistered gauges) The "messageBoard" cockpit primitive (the secondary-MFD comm/status message ticker, L4GAUGE.CFG:4913) was PROSE-ONLY (no bodies/methodDescription) -> parse-skipped. This was the last unregistered gauge primitive. Reconstructed byte-verified (Make @4cb678, ctor @4cb704, dtor @4cb788, BecameActive @4cb7fc, Execute @4cb82c; vtable 0051bddc; sizeof 0xA4). THREE header mislabels fixed (decode + adversarial verify): int enabled -> Entity* trackedMech (a pointer deref'd at +0x190, set by SetSource not SetEnable); previousMessageId/previousNameId were SWAPPED (BecameActive writes 0x9c=-1/0xa0=-2; Execute compares messageId vs 0xa0, name vs 0x9c). Execute blits the strip cell (id -> (id&3)<<7,(id>>2)<<5) + sender name; methodDescription = 4 params (rate, mode, btsmsgs.pcx, color). Registered in BTL4MethodDescription[]. DEFERRED / EMPTY by design (authentic for bring-up): the source is never bound (SetSource has no recovered caller) AND the per-player status queue (StatusMessagePool, btstubs.cpp:62) is a NULL stub -> no status messages exist -> Execute early-returns on the NULL source (safe no-op == empty board). Data read via a BTResolveMessageBoard bridge in btplayer.cpp (a real /FORCE-safe stub returning False; the raw mech+0x190/+0x1dc reads stay in the complete-BTPlayer TU, dodging the databinding trap). The name-cell path is a marked structural simplification to restore when the feed lands. VERIFIED: the gauge parse-skip list is now EMPTY ([gskip]=0 -- every config gauge primitive registered + built); BTResolveMessageBoard resolves (no /FORCE __ImageBase AV); combat TARGET DESTROYED, no crash; gauge composite renders identically (300/77, clusters, radar un-regressed). Co-Authored-By: Claude Opus 4.8 (1M context) --- game/reconstructed/btl4gau3.cpp | 179 +++++++++++++++++++++++++++++--- game/reconstructed/btl4gau3.hpp | 31 ++++-- game/reconstructed/btl4grnd.cpp | 1 + game/reconstructed/btplayer.cpp | 15 +++ scratchpad/msg_gauge.png | Bin 0 -> 45873 bytes 5 files changed, 202 insertions(+), 24 deletions(-) create mode 100644 scratchpad/msg_gauge.png diff --git a/game/reconstructed/btl4gau3.cpp b/game/reconstructed/btl4gau3.cpp index d14ce3f..6708921 100644 --- a/game/reconstructed/btl4gau3.cpp +++ b/game/reconstructed/btl4gau3.cpp @@ -882,19 +882,172 @@ void // MessageBoard @004cb678 Make / @004cb704 ctor //########################################################################### // -// @004cb678 -- Make: allocate (0xa4) and construct "MessageBoard" from -// DAT_0051b43c..0051b508; verify the strip image exists (BitMapCache). -// @004cb704 -- ctor (vtable PTR_FUN_0051bddc). GraphicGauge base; interns + -// AddRefs the message strip bitmap (this[0x25]); sets the port origin; color = -// param_10 (this[0x26]). -// @004cb788 -- dtor: release the strip, free the name, base dtor. -// @004cb7fc -- BecameActive: previousNameId = -1; previousMessageId = -2. -// @004cb82c -- Execute. Track the local player's mech (this[0x24]). Read its -// controller message ids (mech+0x190 controller, +0xc message id, +0x10 name -// id). When the message id changes, blit the corresponding 0x80x0x20 cell of -// the strip ((id&3)<<7, (id>>2)<<5) tinted by FUN_004c2f88 (=7); -1 clears. -// When the name id changes, blit the player's name bitmap (App+0xc8 palette -// cache lookup) similarly. +// Resolve the tracked mech's current HUD status message (msg strip cell + sender +// name bitmap). DEFERRED: StatusMessagePool (btstubs.cpp:62) is a NULL stub + +// BTPlayer+0x1dc is never populated, so this returns False today -> the board stays +// empty. Lives in btplayer.cpp (a complete-BTPlayer TU) to dodge the databinding +// trap; MUST have a real (stub) definition or the /FORCE link AVs the call. +extern Logical BTResolveMessageBoard(Entity *tracked_mech, int *messageId, BitMap **nameBitmap); + +// Overflow lock only (like SectorDisplay/Sensor: the 2007 GraphicGauge base is not +// byte-identical to 1995, so exact-offset asserts would fail; every read here is via +// named members). Binary offsets: trackedMech@0x90 stripImage@0x94 color@0x98 +// previousNameId@0x9C previousMessageId@0xA0, sizeof 0xA4 == Make alloc. +struct MessageBoardLayoutCheck { + static_assert(sizeof(MessageBoard) <= 0xA4, "MessageBoard must fit its 0xA4 Make alloc"); +}; + +// CFG shape (L4GAUGE.CFG:4913, port=sec, offset=(113,607)): +// messageBoard( E, ModeAlwaysActive, btsmsgs.pcx, 0 ) +MethodDescription + MessageBoard::methodDescription = + { + "messageBoard", + MessageBoard::Make, + { + { ParameterDescription::typeRate, NULL }, // p[0] rate (E) + { ParameterDescription::typeModeMask, NULL }, // p[1] mode (ModeAlwaysActive) + { ParameterDescription::typeString, NULL }, // p[2] strip bitmap (btsmsgs.pcx) + { ParameterDescription::typeColor, NULL }, // p[3] draw/erase color (0) + PARAMETER_DESCRIPTION_END + } + }; + // +// @004cb678 -- Make. Alloc 0xa4 + construct; presence-check the strip bitmap +// (binary returns whether it exists). The `entity` param is ignored by the binary. +// +Logical + MessageBoard::Make( + int display_port_index, + Vector2DOf position, + Entity * /*entity -- ignored by FUN_004cb678*/, + GaugeRenderer *gauge_renderer + ) +{ + ParameterDescription *p = methodDescription.parameterList; + + MessageBoard *gauge = (MessageBoard *)operator new(0xa4); // FUN_00402298(0xa4) + if (gauge != NULL) + new (gauge) MessageBoard( + p[0].data.rate, p[1].data.modeMask, + (L4GaugeRenderer *)gauge_renderer, + display_port_index, // graphics_port_number + position.x, position.y, // offset=(113,607) -> SetOrigin + p[2].data.string, // strip image (btsmsgs.pcx) + p[3].data.color, // color (0) + "MessageBoard"); + + L4Warehouse *wh = (L4Warehouse *)gauge_renderer->warehousePointer; // renderer+0x4c + BitMap *strip = wh->bitMapBin.Get(p[2].data.string); // FUN_00442aec + if (strip == NULL) + return False; + wh->bitMapBin.Release(p[2].data.string); // FUN_00442c12 + return True; +} + +// +// @004cb704 -- ctor (vtable PTR_FUN_0051bddc). GraphicGauge base (owner 0); copy + +// hold the strip bitmap; SetOrigin; color = param. trackedMech starts NULL. +// +MessageBoard::MessageBoard( + GaugeRate rate, ModeMask mode_mask, L4GaugeRenderer *renderer_in, + int graphics_port_number, int x, int y, + const char *strip_image, int color_in, const char *identification_string) + : GraphicGauge(rate, mode_mask, renderer_in, 0, // FUN_00444818 (owner 0) + graphics_port_number, identification_string) +{ + stripImage = new char[strlen(strip_image) + 1]; // nameCopy (FUN_004700ac) + strcpy(stripImage, strip_image); + L4Warehouse *wh = (L4Warehouse *)renderer_in->warehousePointer; + wh->bitMapBin.Get(stripImage); // FUN_00442aec (hold for life) + + localView.SetOrigin(x, y); // this+0x48 vtbl+0x10 + color = color_in; // this[0x26] + trackedMech = NULL; // this[0x24] (:3864) + // previousNameId / previousMessageId set by BecameActive (byte-faithful). +} + +// +// @004cb788 -- dtor. Release + free the strip; base dtor runs implicitly. +// +MessageBoard::~MessageBoard() +{ + L4Warehouse *wh = (L4Warehouse *)renderer->warehousePointer; + wh->bitMapBin.Release(stripImage); // FUN_00442c12 + delete[] stripImage; stripImage = NULL; // FUN_004022e8 +} + +// @004cb7e4 -- TestInstance: out-of-line forward (so it isn't /FORCE-stubbed). +Logical MessageBoard::TestInstance() const { return GraphicGauge::TestInstance(); } + +// @004cb818 -- SetSource: bind the source mech. (No recovered caller -> deferred.) +void MessageBoard::SetSource(Entity *mech) { trackedMech = mech; } + +// @004cb7fc -- BecameActive: reset the change-sentinels. NON-inactivating. +void + MessageBoard::BecameActive() +{ + previousNameId = -1; // this[0x27] @0x9c (:3916) + previousMessageId = -2; // this[0x28] @0xa0 (:3917) +} + +// +// @004cb82c -- Execute. Draw the message strip cell + sender name when they change. +// FAITHFUL: the board only draws while a source mech is bound; the binder (SetSource) +// has no recovered caller AND the per-player status feed (StatusMessagePool) is a NULL +// stub, so trackedMech stays NULL and Execute is a safe no-op == the DEFERRED empty board. +// +void + MessageBoard::Execute() +{ + if (trackedMech == NULL) // binary gate :3949 + return; + + // Message record via the safe bridge (NOT raw *(mech+0x190)/+0x1dc offsets). + int messageId = -1; + BitMap *nameBitmap = NULL; + BTResolveMessageBoard(trackedMech, &messageId, &nameBitmap); + + // --- message strip cell (:3960-3981) --- + if (messageId != previousMessageId) + { + previousMessageId = messageId; + localView.MoveToAbsolute(0, 0); // vtbl+0x24 + if (messageId == -1) { + localView.SetColor(color); // vtbl+0x18 + localView.DrawFilledRectangleToRelative(0x80, 0x20); // vtbl+0x4c + } else { + int cellX = (messageId & 3) << 7; // :3969 + int cellY = (messageId >> 2) << 5; // :3970 + localView.SetColor(7); // FUN_004c2f88()==7 + L4Warehouse *wh = (L4Warehouse *)renderer->warehousePointer; + BitMap *strip = wh->bitMapBin.Get(stripImage); // FUN_00442aec + if (strip != NULL) + localView.DrawBitMapOpaque(color, 0, strip, // vtbl+0x58 + cellX, cellY, cellX + 0x7f, cellY + 0x1f); + wh->bitMapBin.Release(stripImage); // FUN_00442c12 + } + } + + // --- sender name cell (:3983-4009). STRUCTURAL SIMPLIFICATION (marked): the binary + // tracks the previous name ENTITY pointer at 0x9c and erases it via +0x1e0->App+0xc8; + // here previousNameId is a bool (0/1). Functionally identical while DEFERRED (name + // always NULL); RESTORE the entity-pointer tracking + erase branch when the feed goes live. + int nameState = (nameBitmap != NULL) ? 1 : 0; + if (nameState != previousNameId) + { + localView.MoveToAbsolute(0x80, 0); // vtbl+0x24 (name cell x=128) + if (nameBitmap == NULL) { + localView.SetColor(color); // vtbl+0x18 + localView.DrawFilledRectangleToRelative(0x80, 0x20); // vtbl+0x4c + } else { + localView.SetColor(7); + localView.DrawBitMapOpaque(color, 0, nameBitmap, 0, 0, // vtbl+0x58 + nameBitmap->Data.Size.x - 1, nameBitmap->Data.Size.y - 1); + } + previousNameId = nameState; // :4009 + } +} // === btl4grnd.cpp begins at @004cbea0 (BTL4GaugeRenderer ctor) -- not this TU. diff --git a/game/reconstructed/btl4gau3.hpp b/game/reconstructed/btl4gau3.hpp index c75758c..d3159d9 100644 --- a/game/reconstructed/btl4gau3.hpp +++ b/game/reconstructed/btl4gau3.hpp @@ -260,31 +260,40 @@ //####################################################################### - // MessageBoard -- the rank / message bitmap board. @004cb678 Make / - // @004cb704 ctor / @004cb788 dtor / @004cb7fc BecameActive / @004cb82c - // Execute. vtable PTR_FUN_0051bddc. Tracks the local player's mech - // (App+0x6c -> +0x190 controller +0xc/+0x10 message ids) and blits the - // message strip cell ((id&3)<<7, (id>>2)<<5) plus a player name bitmap. + // MessageBoard (config keyword "messageBoard") -- the secondary-MFD comm/status + // message ticker. @004cb678 Make / @004cb704 ctor / @004cb788 dtor / + // @004cb7fc BecameActive / @004cb82c Execute. vtable PTR_FUN_0051bddc. + // Blits one cell of the strip bitmap btsmsgs.pcx (message id -> cell (id&3)<<7, + // (id>>2)<<5) + the sender's name bitmap. Was PROSE-ONLY (no bodies/ + // methodDescription) -> "messageBoard" was parse-skipped. + // + // DEFERRED / EMPTY (authentic for bring-up): the source mech is never bound + // (SetSource @004cb818 has no caller) AND the per-player status queue + // (StatusMessagePool, btstubs.cpp:62) is a NULL stub, so there are no messages + // -> Execute early-returns on the NULL source (a safe no-op == the empty board). //####################################################################### class MessageBoard : public GraphicGauge { public: + static MethodDescription methodDescription; // "messageBoard" static Logical Make(int, Vector2DOf, Entity *, GaugeRenderer *); // @004cb678 MessageBoard( // @004cb704 - GaugeRate, ModeMask, L4GaugeRenderer *, int, + GaugeRate, ModeMask, L4GaugeRenderer *, int graphics_port_number, int x, int y, const char *strip_image, int color, const char *identification_string); ~MessageBoard(); // @004cb788 Logical TestInstance() const; void BecameActive(); // @004cb7fc + void SetSource(Entity *); // @004cb818 (binds trackedMech; no caller -> deferred) void Execute(); // @004cb82c protected: - int enabled; // @0x90 this[0x24] - char *stripImage; // @0x94 this[0x25] - int color; // @0x98 this[0x26] - int previousMessageId; // @0x9C this[0x27] - int previousNameId; // @0xA0 this[0x28] + Entity *trackedMech; // @0x90 this[0x24] source mech (SetSource; ctor=0) (FIX: was int enabled) + char *stripImage; // @0x94 this[0x25] interned btsmsgs.pcx (held ref) + int color; // @0x98 this[0x26] param (CFG 4th arg = 0) + int previousNameId; // @0x9C this[0x27] BecameActive=-1 (FIX: was previousMessageId) + int previousMessageId; // @0xA0 this[0x28] BecameActive=-2 (FIX: was previousNameId) + friend struct MessageBoardLayoutCheck; }; diff --git a/game/reconstructed/btl4grnd.cpp b/game/reconstructed/btl4grnd.cpp index 3dfb806..f80cc0e 100644 --- a/game/reconstructed/btl4grnd.cpp +++ b/game/reconstructed/btl4grnd.cpp @@ -149,6 +149,7 @@ MethodDescription &GeneratorCluster::methodDescription, // "GeneratorCluster" -- the 4 generator engineering panels (buttons 9-12) &SectorDisplay::methodDescription, // "sectorDisplay" -- radar SECTOR X/Z read-out (Secondary overlay) &PrepEngrScreen::methodDescription, // "prepEngr" -- per-Eng-screen static label overlay (12x) + &MessageBoard::methodDescription, // "messageBoard" -- sec-MFD comm/status ticker (DEFERRED source -> empty) &BTL4ChainToPrevious }; diff --git a/game/reconstructed/btplayer.cpp b/game/reconstructed/btplayer.cpp index 42ac51a..20adfcb 100644 --- a/game/reconstructed/btplayer.cpp +++ b/game/reconstructed/btplayer.cpp @@ -1118,6 +1118,21 @@ int BTPilotIsSelected(void *pilot, void *local_player) return ((void *)((BTPlayer *)pilot) == (void *)target->GetPlayerLink()) ? 1 : 0; } +// MessageBoard data bridge (consumed by btl4gau3.cpp MessageBoard::Execute). DEFERRED: +// the per-player status queue (StatusMessagePool, btstubs.cpp:62) is a NULL stub and +// BTPlayer+0x1dc is never populated, so there are no messages -> return False (empty +// board). Real impl (when StatusMessagePool is wired): owningPlayer (mech+0x190) -> +// status record (+0x1dc) -> {messageId@+0xc, nameEntity@+0x10 -> name bitmap} via the +// compiled BTPlayer/Player__StatusMessage members (decode AddStatusMessage @0042e580). +// A real (stub) definition is REQUIRED or the /FORCE link AVs MessageBoard::Execute's call. +class BitMap; +Logical BTResolveMessageBoard(Entity * /*tracked_mech*/, int *messageId, BitMap **nameBitmap) +{ + *messageId = -1; + *nameBitmap = 0; + return False; +} + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // gauge scoring wave: PRODUCERS -- posted by the combat path (mech4.cpp) to feed // the scoreboard. The inflictor is always the viewpoint mech in bring-up, so the diff --git a/scratchpad/msg_gauge.png b/scratchpad/msg_gauge.png new file mode 100644 index 0000000000000000000000000000000000000000..f2ab0315b0275ed16e0adb0fd5b75d2487473052 GIT binary patch literal 45873 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

alNfQ08lX?VNT!Maz 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 wB7N|Q*_Y3%liw=9_@1SLcP0;m`W)W&?6$1>Y0-