From ae8aca0f3f007970bc588cf9e5ef4a64914cebc1 Mon Sep 17 00:00:00 2001 From: arcattack Date: Thu, 9 Jul 2026 08:22:59 -0500 Subject: [PATCH] KB: weapon groups decomp-anchored (ConfigureMappables/ChooseButton) Answering "do lasers and PPCs fire together?": in the pod, grouping was a PILOT CHOICE. MechWeapon message handlers id 9 'ConfigureMappables' (FUN_004b9550) and id 10 'ChooseButton' (FUN_004b95b8), handler table @0x511860 (names read from the exe): ConfigureMappables binds the weapon's fireImpulse@0x31C to controls-mapper fire-channel #N (roster slot 0; vtable +0x38 register / +0x3c unregister / +0x44 choose), ChooseButton = the in-cockpit re-binding. Weapons sharing a button fire together. The port's SPACE=energy / CTRL=missiles split is a stand-in default; the authentic per-button channels are a tracked follow-up. Co-Authored-By: Claude Fable 5 --- context/open-questions.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/context/open-questions.md b/context/open-questions.md index 9049553..5cde9c8 100644 --- a/context/open-questions.md +++ b/context/open-questions.md @@ -88,6 +88,16 @@ authentic path scoped. - **MechControlsMapper look/eyepoint commit** — reconstructed but its offsets collide with declared members; arbitrate before enabling (no port consumer yet). The fire-trigger-through-mapper is still the `gBTWeaponTrigger` bring-up. +- **Weapon groups / per-button fire channels (decomp-anchored 2026-07-09)** — MechWeapon message + handlers id 9 **`ConfigureMappables`** (`FUN_004b9550`) and id 10 **`ChooseButton`** + (`FUN_004b95b8`), table @0x511860 region: ConfigureMappables binds the weapon's + `fireImpulse`@0x31C to mapper fire-channel #N (msg value 1-based; <1 unbinds; mapper = roster + slot 0, vtable +0x38 register / +0x3c unregister; weapon+0x110 = the bound-state), ChooseButton + re-binds (vtable +0x44) — the pod's in-cockpit weapon→button GROUPING. Weapons sharing a button + fire together; grouping was a PILOT choice (heat management: alpha vs split). The port's + SPACE=all-energy / CTRL=missiles split is a stand-in default; the authentic system needs the + mapper channel registration + who SENDS the default ConfigureMappables (mission/player setup — + not yet traced). Payoff: authentic weapon groups + a path to chain-fire. - **Myomers authentic coupling** — the structural un-stub is INERT (mover feed + heat-gen no-op). Real coupling needs the advanced-damage gate (`OwnerAdvancedDamage`/`FUN_004ad7d4` → the owning **BTPlayer** `mech+0x190`+0x260, NOT 0xBD3 — see the mech+0x190 item above) + `MoverAttach` routing