From 97bdb5cc0c7bd2fb5a67a6b7b967849b2116bab4 Mon Sep 17 00:00:00 2001 From: Joe DiPrima Date: Fri, 14 Aug 2026 14:29:25 -0500 Subject: [PATCH] #155 rig: BT_FORCE_EJECT_ARM hook (=1 steady / =2 chatter at the evaluator's rate) -- pins the panic-arm state with zero damage side-effects. Repro results so far, all NEGATIVE through the PadRIO screen-button injection path (BT_BTNTEST): bank presses deliver and pages flip with ModeEject steady ON (mask 0x650430 observed), and with the arm CHATTERING (2063 edges/run, two presses on two MFDs both delivered). Combined with the authenticity verdict (no eject gating anywhere in content/binary/engine), the dead-bank defect lives ABOVE the mapping layer: prime suspects are the glass window's mouse hit-test / panel rebuild under per-frame mode churn, and the HOTAS CONTROLS.MAP route. Next step needs a human at the desktop: BT_FORCE_EJECT_ARM=2 + mouse clicks on the eng/weapon MFD buttons (and the HOTAS bindings), watching [mode] preset receipts -- ten minutes, fully scripted otherwise. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_016bw71WVsccjwW7uKRg4aWD --- game/reconstructed/mech.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/game/reconstructed/mech.cpp b/game/reconstructed/mech.cpp index 0ba05ed..72408ea 100644 --- a/game/reconstructed/mech.cpp +++ b/game/reconstructed/mech.cpp @@ -603,6 +603,26 @@ int || (liveGenerators == 0) || (coolantFrac < 0.05f) // _DAT_0049fb50 || (gimped && noviceSim); + // (#155 rig) BT_FORCE_EJECT_ARM: pin the panic-arm state without damage + // side-effects, so the dead-MFD-bank repro isolates the ModeEject + // interaction. =1 steady ON; =2 CHATTER at the evaluator's own rate + // (the authentic no-hysteresis flap, e.g. a coolant fraction hovering at + // the 0.05 threshold). Env-gated bench scaffolding, off by default. + { + static int s_forceArm = -1; + if (s_forceArm < 0) + { + const char *fa = getenv("BT_FORCE_EJECT_ARM"); + s_forceArm = (fa != 0) ? atoi(fa) : 0; + } + if (s_forceArm == 1) + ejectPermitted = 1; + else if (s_forceArm == 2) + { + static unsigned s_flap = 0; + ejectPermitted = (int)(++s_flap & 1); + } + } return ejectPermitted; }