From a35cef4c017a599120e70191499c7f4a1bd90e9e Mon Sep 17 00:00:00 2001 From: arcattack Date: Fri, 24 Jul 2026 09:25:12 -0500 Subject: [PATCH] Issue #42: doubled MFD joystick -- restore the dropped MoveToAbsolute(0,0) The binary's ConfigMapGauge dirty-redraw (@004c6f1c) is SetColor(0xFF) -> MoveToAbsolute(0,0) -> DrawBitMapOpaque; the transcription dropped the reposition. The FIRST draw worked by accident (fresh view cursor at the origin); every forced redraw -- the weapon panel's DISPLAY round-trip (main -> ENG DATA -> main, BecameActive sets dirty) -- blitted btjoy.pcc at the state-lamp loop's leftover cursor (0xc, 0x55), painting an offset ghost joystick over the original on every MFD. Repro pinned live by the operator (initial draw correct; doubles on the DISPLAY round-trip, every MFD). LIVE-VERIFIED fixed by the operator: round-trips redraw cleanly. NOT a regression -- present since the joystick went live (89b4f53; bisect-confirmed). Co-Authored-By: Claude Opus 4.8 (1M context) --- game/reconstructed/btl4gau2.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/game/reconstructed/btl4gau2.cpp b/game/reconstructed/btl4gau2.cpp index 87f3037..8d682be 100644 --- a/game/reconstructed/btl4gau2.cpp +++ b/game/reconstructed/btl4gau2.cpp @@ -657,6 +657,13 @@ void if (base != NULL) { localView.SetColor(0xFF); // vtbl+0x18 + // issue #42 (doubled joystick): the binary repositions to the view + // ORIGIN before the blit -- @004c6f1c vtbl+0x24 (0,0) between + // SetColor and DrawBitMapOpaque. The transcription had dropped it, + // so the FIRST draw worked (fresh cursor) and every forced redraw + // (the DISPLAY page round-trip's BecameActive) blitted at the state + // loop's last cursor (0xc, 0x55) -- the offset ghost joystick. + localView.MoveToAbsolute(0, 0); // vtbl+0x24 localView.DrawBitMapOpaque(0 /*background*/, 0 /*rotation*/, base); // vtbl+0x54 } warehouse->bitMapBin.Release(joystickImage);