#118 faithful settlement: MFD soft keys NEVER eject -- panic/keypad only

The streamed .CTL dump (BT_CTRLMAP_LOG, 109 records on the madcat) settles
the eject-input question from CONTENT: no 0x200000 record exists -- the MFD
soft keys carry their authored per-page routes unconditionally (elem 0xB on
a weapon eng page = msg 0xB EjectAmmo, the round eject), so they must never
route to pilot-eject. The invite-cell routing (b9430cc) hijacked exactly
that key -- the operator's "bottom left button self destructed" -- and is
REMOVED.

The faithful model, now fully grounded: the flashing engEject soft-key LAMP
is the INVITE indicator; the eject PRESS is the guarded PANIC key (no
button-space consumer in the image -> it reported through the pilot keypad
matrix; the 0x3D->keypad wire stays) or any pilot-keypad key while armed.

Verified: armed + soft-key 0x0B press -> NO punch-out (authored function
preserved); panic path unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Joe DiPrima
2026-08-03 19:15:45 -05:00
co-authored by Claude Fable 5
parent b4b98a64c0
commit 417008a6d4
+14 -15
View File
@@ -466,21 +466,20 @@ void
<< (pressed ? "HELD" : "released") << "\n" << std::flush;
}
// PANIC-ARMED EJECT keys: the binary's ONLY armed press binding is
// keyboardGroup[KeyboardPilot].Add(mode 0x200000, mech, msg 0x19 =
// EjectPilot) in the RIO mapper ctor (FUN_004d266c) -- an E8+data scan
// finds NO other 0x200000 consumer in the image. Desktop mirror: the
// guarded PANIC button (0x3D) and the THREE eng-page EJECT INVITE cells
// (0x0B/0x23/0x03 = kBTEngBankTop-4 per MFD bank -- the cells the
// engEject 0x85 alarm lamp flashes on) also land as pilot-keypad keys.
// ONLY those: a first cut routed the whole MFD key space (0x00-0x2F)
// and the DISPLAY navigation key self-destructed the operator's mech
// mid-page-switch (field-caught 2026-08-03). Outside panic mode the
// binding is mode-masked dead, so the invite cells keep their normal
// side-column function when not armed.
if (pressed && (address == 0x3D
|| address == 0x0B || address == 0x23 || address == 0x03))
EmitKeypad(LBE4ControlsManager::KeyboardPilot, address & 0xF);
// PANIC (0x3D) -> pilot-keypad key. The binary's ONLY pilot-eject input
// is keyboardGroup[KeyboardPilot].Add(mode 0x200000, mech, msg 0x19)
// (FUN_004d266c; exhaustive scan: no other 0x200000 consumer, and the
// streamed .CTL tables carry NO 0x200000 records either -- the MFD soft
// keys keep their authored per-page functions even while armed, so they
// must NEVER route here; two field-caught regressions (DISPLAY, then the
// weapon ammo-eject soft key 0x0B) came from over-routing them). The
// guarded PANIC key has no button-space consumer anywhere in the image,
// so on the pod it reported through the pilot keypad matrix -- this is
// that wire. The flashing engEject soft-key LAMP (0x85 alarm code) is
// the INVITE indicator; the press that ejects is panic / any pilot-
// keypad key while armed.
if (address == 0x3D && pressed)
EmitKeypad(LBE4ControlsManager::KeyboardPilot, 0);
RIOEvent event;
event.Type = pressed ? ButtonPressedEvent : ButtonReleasedEvent;