From 417008a6d4817f056abbdb4ab52ad2f46b114307 Mon Sep 17 00:00:00 2001 From: Joe DiPrima Date: Mon, 3 Aug 2026 19:15:45 -0500 Subject: [PATCH] #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 --- engine/MUNGA_L4/L4PADRIO.cpp | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/engine/MUNGA_L4/L4PADRIO.cpp b/engine/MUNGA_L4/L4PADRIO.cpp index 59379f3..5fe5ac0 100644 --- a/engine/MUNGA_L4/L4PADRIO.cpp +++ b/engine/MUNGA_L4/L4PADRIO.cpp @@ -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;