#118: REMOVE the full-face flash overlays -- the MFD corruption, root-caused
The operator's three captures decode as ONE mistake drawn two ways: the cockpit compositor deliberately draws the side buttons as BIG rects tucked UNDER the display surfaces (step 2), with only the protruding edge visible -- the edge IS the port's lamp light (the pod's backlit keys sat beside the CRT; there is no in-display face to light). My on-top "flash overlay" (86a6bbbL4VB16,5f79dceL4GLASSWIN) violated that design: drawn after DrawDevSurface without resetting the bound texture state it rendered the gauge atlas as green striped garbage at the button rects; with the state reset it drew honest full faces -- solid flashing red covering that whole portion of the MFD. Both overlays removed; the original step-2 rendering (which already tick-animates lamp shades) is the whole story. Pixel-verified through the full stress (4 gens dead, autofire jams, leak warning): weapon pages pristine end to end, and the 0x27 edge lamp square-waves 34.0 <-> 28.9 across consecutive captures -- the invite flashes at its authentic scale. (The eject-wipe gauge -- the OTHER corrupting draw, visible in the earliest sighting -- stays re-stubbed pending a real RE of FUN_004c5fb8's draw op.) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
3ec30ee28a
commit
78722542fd
@@ -810,31 +810,9 @@ static void
|
||||
SelectObject(dc, oldPen);
|
||||
DeleteObject(pen);
|
||||
|
||||
// FLASHING lamps re-draw ON TOP of the surface (#118): the alarm
|
||||
// invites (gotoEngineering / engEject, RIO flash bits state&3) were
|
||||
// invisible under the imagery -- only the few protruding edge pixels
|
||||
// blinked, and the operator "never saw it flash". The pod's keys
|
||||
// were physical backlit buttons BESIDE the screen; when one carries
|
||||
// a FLASH state, give it its full face back so the invite reads.
|
||||
for (int i = 0; i < w->buttonCount; ++i)
|
||||
{
|
||||
const GButton &b = w->buttons[i];
|
||||
int state = PadRIO::GetLampState(b.address);
|
||||
if ((state & 3) == 0)
|
||||
continue; // not flashing
|
||||
int shade = LampBrightnessOf(state, tick);
|
||||
COLORREF bright = (b.color == ClrYellow) ? RGB(245, 210, 60)
|
||||
: (b.color == ClrBlue) ? RGB(205, 228, 255)
|
||||
: RGB(230, 70, 70);
|
||||
COLORREF dim = (b.color == ClrYellow) ? RGB(70, 60, 24)
|
||||
: (b.color == ClrBlue) ? RGB(70, 86, 120)
|
||||
: RGB(64, 40, 40);
|
||||
HBRUSH face = CreateSolidBrush((shade >= 2) ? bright : dim);
|
||||
RECT r = b.rect;
|
||||
FillRect(dc, &r, face);
|
||||
DeleteObject(face);
|
||||
FrameRect(dc, &r, (HBRUSH)GetStockObject(WHITE_BRUSH));
|
||||
}
|
||||
// (NO full-face flash overlay here either -- same wrongness as the
|
||||
// L4VB16 one, removed 2026-08-03: the buttons are big rects tucked
|
||||
// under the surface by design, and the protruding edge is the lamp.)
|
||||
}
|
||||
|
||||
BitBlt(winDC, 0, 0, client.right - client.left, client.bottom - client.top,
|
||||
|
||||
Reference in New Issue
Block a user