diff --git a/engine/MUNGA_L4/L4GLASSWIN.cpp b/engine/MUNGA_L4/L4GLASSWIN.cpp index d3adff6..d818445 100644 --- a/engine/MUNGA_L4/L4GLASSWIN.cpp +++ b/engine/MUNGA_L4/L4GLASSWIN.cpp @@ -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, diff --git a/engine/MUNGA_L4/L4VB16.cpp b/engine/MUNGA_L4/L4VB16.cpp index 89c2032..a14ef9f 100644 --- a/engine/MUNGA_L4/L4VB16.cpp +++ b/engine/MUNGA_L4/L4VB16.cpp @@ -1180,35 +1180,14 @@ void BTDrawCockpitPanels(LPDIRECT3DDEVICE9 device) } } - // 3b) FLASHING lamps re-draw ON TOP of the surfaces (#118): the alarm - // invites (gotoEngineering / engEject, RIO flash bits state & 3) - // were invisible under the imagery -- only the protruding edge - // pixels blinked, and the operator "never saw it flash". The pod's - // keys were physical backlit buttons beside the CRT; when one - // carries a FLASH state, give it its full face back. - for (int i = 0; i < L.buttonCount; i++) - { - const BTCockpitBtn &b = L.buttons[i]; - int state = CkLampState(b.address); - if ((state & 3) == 0) continue; // not flashing - int shade = BTLampBrightnessOf(state, tick); - { - static int s_flog = -1; - if (s_flog < 0) s_flog = (getenv("BT_LAMP_LOG") != 0) ? 1 : 0; - static unsigned long s_lastLog = 0; - if (s_flog && tick - s_lastLog > 1000) - { - s_lastLog = tick; - DEBUG_STREAM << "[ckflash] addr 0x" << std::hex << b.address - << " state 0x" << state << std::dec << " shade " << shade - << " at (" << b.x << "," << b.y << ")\n" << std::flush; - } - } - D3DCOLOR fill, border; - CkLampColors(b.colorClass, shade, b.inert, &fill, &border); - CkFill(device, b.x, b.y, b.w, b.h, border); - CkFill(device, b.x + 1, b.y + 1, b.w - 2, b.h - 2, fill); - } + // (NO full-face "flash overlay" here -- twice field-broken 2026-08-03. + // The side buttons are BIG rects deliberately tucked UNDER the surfaces; + // step 2 already animates their lamp shades, and the protruding edge IS + // the port's lamp light (the pod's backlit keys sat beside the CRT -- + // there is no in-display face to light). An on-top redraw either covers + // the MFD imagery with flashing faces, or -- drawn without resetting the + // texture state DrawDevSurface leaves bound -- smears the gauge atlas as + // striped garbage (operator captures: green stripes, then red faces).) // 4) Flight-block labels (on top; the blue faces aren't covered by surfaces). for (int i = 0; i < L.buttonCount; i++)