feat(abilities): add Power Attack active feat (-X atk / +2X dmg, melee only)
Power Attack is the first active feat: a free-action toggle declared at turn start. When state.power_attack is True and the combatant has the POWER_ATTACK feature, melee attacks apply -X to the attack roll and +2X to damage, where X = BAB//4 + 1 (min 1). Ranged attacks are unaffected. The flag is cleared at the start of each turn via _take_turn, like other per-turn state. - abilities.py: POWER_ATTACK constant (AbilitySpec, no passive effects) - combat.py: _has_feat helper, _power_attack_amt, resolve_attack applies penalty to attack total + crit confirm, bonus to damage - tests/test_power_attack.py: 14 tests (amount at BAB 1/4/8/12, flag false, feat missing, attack penalty, damage bonus, ranged unaffected, flag cleared on turn) - pyproject.toml: add SLF001 + RUF059 to test per-file-ignores (white-box testing accesses private helpers, partial tuple unpacking) - README.md: document Power Attack in abilities.py section, 307 tests
This commit is contained in:
@@ -139,5 +139,11 @@ DODGE = AbilitySpec(
|
||||
),
|
||||
)
|
||||
|
||||
# Skill Focus: +3 to a skill (not yet modeled — skills deferred)
|
||||
# Defined as a placeholder for future expansion.
|
||||
# Power Attack: active feat — declare at turn start, -X atk / +2X dmg on all
|
||||
# melee attacks this turn, where X = BAB//4 + 1 (min 1). No passive modifiers;
|
||||
# the engine checks for this feat and the ``power_attack`` flag on state.
|
||||
POWER_ATTACK = AbilitySpec(
|
||||
name="Power Attack",
|
||||
category="feat",
|
||||
source_detail="feat lv1",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user