Combat: AUTHENTIC weapon groups -- streamed per-mech button bindings + the real fire chain (task #5)

The recovered system: fire channels = LBE4ControlsManager buttonGroups
(0x40/0x45/0x46/0x47); default groups = the per-mech type-6 controls-map
resource in BTL4.RES, installed by the T0 CreateStreamedMappings the port
already called -- it needed only the TriggerState attribute (id 0x13 PINNED
to the binary value; fireImpulse@0x31C is the binary's TriggerState) and an
input feed.  Keyboard/harness now push press/release edges into the button
groups; the gBT*Trigger bypasses, per-type keyboard split and 1,0 pulse
hack are retired -- weapons sharing a button fire TOGETHER (madcat Trigger
= 4 weapons).  Myomers @4b9550/@4b95b8 misattribution corrected (they are
MechWeapon ConfigureMappables/ChooseButton).  Verified 2-node: kill through
the authentic chain (12 hits vs ~36 pre-groups).  Config-mode session
(regrouping UI) = the remaining stage, KB-scoped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-11 13:06:29 -05:00
co-authored by Claude Fable 5
parent 4554ea543a
commit 8ed6184d65
582 changed files with 6546 additions and 42 deletions
+4 -10
View File
@@ -534,21 +534,15 @@ void
DrawFiringCharge(time_slice); // @004bbc78 -- bleed recoil (+0x3E8)
UpdateEject(time_slice); // @004bbb50 -- idle unless ejectState==0
// 2. Rising-edge trigger from the owning Mech's discharge signal.
// Bring-up: the controls mapper is bypassed, so drive fireImpulse from the
// per-frame trigger pulse -- else CheckFireEdge never sees an edge and a
// projectile weapon never fires. SPLIT CONTROLS (interim, toward the real
// controls-mapper weapon groups): projectile weapons (the missile
// launchers, cannon) fire on the MISSILE channel (CTRL), not the
// energy-weapon channel (SPACE) -- one key no longer fires everything.
extern int gBTMissileTrigger;
fireImpulse = (Scalar)gBTMissileTrigger; // this+0x31C
// 2. AUTHENTIC TRIGGER (task #5): fireImpulse = the TriggerState attribute
// the streamed controls map binds to the pod fire buttons (see emitter.cpp
// note). The gBTMissileTrigger bypass is retired.
Logical trigger = CheckFireEdge(); // MechWeapon @004b9608
static int s_pwtick = 0;
if (getenv("BT_PROJ_LOG") && (((++s_pwtick) % 240) == 0 || trigger))
DEBUG_STREAM << "[projweap] tick " << GetName() << " trig=" << (int)trigger
<< " gTrig=" << gBTMissileTrigger << " ready=" << (int)ReadyToFire()
<< " trigState=" << (float)fireImpulse << " ready=" << (int)ReadyToFire()
<< " state=" << weaponAlarm.GetState() << " recoil=" << recoil << " x\n" << std::flush;
// 3. Firing state machine (weaponAlarm @0x350). Modelled on the RP analog