Panel: the vRIO layout + coloration, plasma flip fix, button-trap guard

Per Cyd: the on-screen panel now mirrors vRIO (C:\VWE\vrio -- CockpitLayout.cs
+ PanelCanvas.cs, itself the RIOJoy profile-editor layout from the original
Win32 RIO mockup): five 4x2 MFD clusters (addresses descending), four 1x8
board columns (Throttle/Secondary/Screen/Joystick), the two 4x4 hex keypads
(0x50/0x60 -- cells emit real keypad KeyEvents: internal=pilot unit, external=
operator unit), physical names (Panic/Main/Hat*/Pinky...), vRIO colors: red
lamp cells + yellow Secondary/Screen + neutral-blue keypads, flash half-
periods 500/250/125ms, right-click latch (gold outline).  104 controls.

PlasmaWindow: the gauge renderer writes the 128x32 buffer TOP-DOWN -- the
bottom-up flip rendered the marquee upside down (user-reported); copy straight.

Button-trap guard (the e2c21c4 pattern): the authentic base
ConfigureMappableMessageHandler FAIL trap is abort() under DEBUGOFF -- any
aux/zoom button without its L4 override reconstructed KILLED the game on
press.  Default now: loud [FAIL] log + ignore; BT_BUTTON_TRAP=1 restores the
hard trap.  Verified live: synthetic click on a Secondary cell -> 2 [FAIL]
lines (press+release through panel->PadRIO->ProcessRIOEvent->streamed
mapping), game survives and keeps ticking.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-17 22:30:35 -05:00
co-authored by Claude Fable 5
parent db9ac947f7
commit 418acf07e4
4 changed files with 394 additions and 137 deletions
+14
View File
@@ -496,6 +496,20 @@ void
{
return;
}
//
// The keypad address space (0x50-0x6F, the vRIO panel's two 4x4 hex
// keypads): press emits a keypad KeyEvent -- internal (0x50) on the
// pilot unit, external (0x60) on the operator unit; keys have no
// release event.
//
if (unit >= 0x50 && unit <= 0x6F)
{
if (pressed)
{
activeInstance->EmitKeypad((unit >= 0x60) ? 1 : 0, unit & 0x0F);
}
return;
}
if (unit < 0 || unit >= LBE4ControlsManager::ButtonCount)
{
return;