Problem
Force staffs and other charge-based weapons have a secondary fire mode (hold-to-charge AoE explosion) that bots never use. #31 fixes primary fire for these weapons, but the secondary fire requires the charge shot system in bt_bot_shoot_action.
Context
bt_bot_shoot_action already has a charge shot system (lines 62-73):
can_charge_shot — enables charge behavior
charge_action_input — input to queue (default "brace")
charge_shot_delay — timing
always_charge_before_firing, charge_against_armored_enemy, etc.
Force staff p1 secondary fire flow:
charge input (action_two_hold) → action_charge (hold)
charge_release input (action_two_hold release) → triggers explosion
- OR
trigger_explosion input (action_one_pressed + action_two_hold hold) → fires while charging
This is fundamentally different from ADS — it's a hold-and-release combat mode, not scope-in-for-accuracy.
Desired behavior
Inject charge metadata for weapons with charge-based secondary fire:
attack_meta_data = {
can_charge_shot = true,
charge_action_input = "charge",
-- ... timing/condition fields
}
Weapons affected
- Force staff p1 (charge → explosion)
- Potentially other staff variants
- Any weapon where
action_two_hold maps to a charged secondary rather than ADS
Why this is separate from #41
#41 is about weapon-aware ADS gestalt selection (when to scope in). This issue is about teaching bots a new fire mode (charged secondary) via existing bt_bot_shoot_action charge infrastructure.
Why this is separate from #31
#31 fixes fire/aim input name resolution for the vanilla fallback chain. This requires populating additional charge metadata fields that #31 deliberately scoped out, since the charge system is a separate code path in bt_bot_shoot_action.
References
Problem
Force staffs and other charge-based weapons have a secondary fire mode (hold-to-charge AoE explosion) that bots never use. #31 fixes primary fire for these weapons, but the secondary fire requires the charge shot system in
bt_bot_shoot_action.Context
bt_bot_shoot_actionalready has a charge shot system (lines 62-73):can_charge_shot— enables charge behaviorcharge_action_input— input to queue (default"brace")charge_shot_delay— timingalways_charge_before_firing,charge_against_armored_enemy, etc.Force staff p1 secondary fire flow:
chargeinput (action_two_hold) →action_charge(hold)charge_releaseinput (action_two_holdrelease) → triggers explosiontrigger_explosioninput (action_one_pressed+action_two_holdhold) → fires while chargingThis is fundamentally different from ADS — it's a hold-and-release combat mode, not scope-in-for-accuracy.
Desired behavior
Inject charge metadata for weapons with charge-based secondary fire:
Weapons affected
action_two_holdmaps to a charged secondary rather than ADSWhy this is separate from #41
#41 is about weapon-aware ADS gestalt selection (when to scope in). This issue is about teaching bots a new fire mode (charged secondary) via existing
bt_bot_shoot_actioncharge infrastructure.Why this is separate from #31
#31 fixes fire/aim input name resolution for the vanilla fallback chain. This requires populating additional charge metadata fields that #31 deliberately scoped out, since the charge system is a separate code path in
bt_bot_shoot_action.References
bt_bot_shoot_action.lua:62-73— charge shot scratchpad fieldsforcestaff_p1_m1.lua— charge/charge_release/trigger_explosion inputsattack_meta_datainjection (fire input fix)