Issue #31: wire the EJECT button (EjectAmmo msg 0xb @004bb9b8) -- the in-mission unjam
Disasm-faithful transcription of the export-gap handler onto ProjectileWeapon (MESSAGE_ENTRY id 0xb, the #19 pattern). PRESS arms the ~3s UpdateEject countdown (bin alarm -> Ejecting(3); gate 2 parks the weapon offline mid-eject -- authentic). HOLD to completion = DumpAmmo jettisons the bay -> NoAmmo. TAP (release early) cycles ONE round out via FeedAmmo and returns the weapon to Loading -- clears a jam at the cost of a round (and recovers a FailureHeat 7 while rounds remain). Binary structure kept exactly incl. the press-no-bin fall-through into the release block. AmmoBin: Ejecting(3)/Ejected(4) alarm levels decoded + named SetAmmoState accessor (databinding rule). Always-on forensics: '[weap] EJECT tap' + '[ammo] bay DUMPED overboard (N rounds)'. Rig-verified live (BT_EJECTTEST=1 / =hold on LRM15): taps eject one round each and return the weapon to service (15->8 across cycles); hold dumps all 16 -> NoAmmo. Awaiting a human press of the actual ENG-page button on a jammed weapon. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
225fe43f0c
commit
2edd1b5363
@@ -244,6 +244,9 @@ void AmmoBin::DumpAmmo()
|
||||
{
|
||||
if (ammoAlarm.Level() != Empty) // this+0x1A8 != 2
|
||||
{
|
||||
// ALWAYS log the bay dump (rare + forensic -- eject-hold / strip)
|
||||
DEBUG_STREAM << "[ammo] " << GetName() << " bay DUMPED overboard ("
|
||||
<< ammoCount << " rounds jettisoned)\n" << std::flush;
|
||||
ammoCount = 0; // this+0x180
|
||||
ammoAlarm.SetLevel(Dumped); // 5 (transient pulse)
|
||||
ammoAlarm.SetLevel(Empty); // 2
|
||||
|
||||
Reference in New Issue
Block a user