Eject firsthand prep: G = coolant Flush binding + BT_FLUSH_HOLD scalpel

The Flush ACTION existed in the input engine but no key was bound in the
shipped CONTROLS.MAP -- desktop players could never hold the flush. G (free)
now maps to it. BT_FLUSH_HOLD=<frames> extends the BT_FLUSH_TEST scalpel
past its 60-frame edge test for tank-dry benches.

Dry-run finding (fl.log): a full flush drains the tank to 0/14 in ~30 s,
but does NOT arm eject by itself -- InjectCoolant moves tank coolant INTO
the loops (the bank RISES), and idle heat draw is too slow to burn the
loops down to the 5% arm threshold in minutes. Firsthand arming needs
sustained fire after tank-dry (or coolant-loop leak damage / generator
loss). Matches the binary's intent: eject arms when LEAKED nearly dry.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Joe DiPrima
2026-08-03 14:10:43 -05:00
co-authored by Claude Fable 5
parent 8165cee9da
commit 0089b3284f
2 changed files with 15 additions and 1 deletions
+9 -1
View File
@@ -6724,7 +6724,15 @@ void
++s_ftFrame;
int t0 = atoi(getenv("BT_FLUSH_TEST"));
if (t0 < 1) t0 = 600;
gBTFlushKey = (s_ftFrame >= t0 && s_ftFrame < t0 + 60) ? 1 : 0;
// BT_FLUSH_HOLD=<frames> (default 60): the eject firsthand recipe
// needs a tank-dry hold, not just the 1 s edge test.
static int s_ftHold = 0;
if (s_ftHold == 0)
{
const char *h = getenv("BT_FLUSH_HOLD");
s_ftHold = (h && atoi(h) > 0) ? atoi(h) : 60;
}
gBTFlushKey = (s_ftFrame >= t0 && s_ftFrame < t0 + s_ftHold) ? 1 : 0;
}
// Gitea #46 scripted verify (BT_BAYTEST=<frame>): at the given sim frame