fix(rules): grappled/pinned -2 applies to non-grapple/escape combat maneuver checks

This commit is contained in:
2026-09-16 19:33:38 +02:00
parent 68a03a34f6
commit cf8a07311d
2 changed files with 77 additions and 1 deletions
+17 -1
View File
@@ -177,6 +177,7 @@ _CHARGE_ATTACK_BONUS = 2 # PF1e: +2 attack roll on a charge
_CHARGE_AC_PENALTY = 2 # PF1e: -2 AC until start of next turn after charging
_CHARGE_MIN_CELLS = 2 # PF1e: charge must move at least 10 ft (2 squares)
_UP_CLOSE_RANGE_FT = 30 # PF1e: Up Close and Deadly works within 30 ft
_GRAPPLED_CMB_PENALTY = 2 # PF1e: grappled/pinned -2 on non-grapple/escape CMB
# PF1e: Point-Blank Shot grants +1/+1 within 30 ft with ranged weapons
_POINT_BLANK_RANGE_FT = 30
_FIRING_MELEE_PENALTY = -4 # PF1e: ranged attack into melee
@@ -4580,7 +4581,22 @@ class CombatEngine:
# check is not penalized (a skill check is not a CMB check) — see
# _maneuver_escape.
pa_amt = self._power_attack_amt(state)
attacker_cmb = self._maneuver_cmb(state) - pa_amt
# PF1e (SRD Conditions - Grappled / Pinned): a grappled or pinned
# creature takes a -2 penalty on "all attack rolls AND combat
# maneuver checks, except for those made to escape or break a
# grapple". Escape returned to its own handler above; initiating a
# grapple is the exempt check. _maneuver_cmb stays a pure stat
# (the concentration DC reads the grappler's CMB, not a check).
grapple_penalty = (
_GRAPPLED_CMB_PENALTY
if maneuver != "grapple"
and (
self._has_condition_named(state, "grappled")
or self._has_condition_named(state, "pinned")
)
else 0
)
attacker_cmb = self._maneuver_cmb(state) - pa_amt - grapple_penalty
target_cmd = self._maneuver_cmd(target)
roll = self._rng.d20()
# PF1e (CRB Combat Maneuvers): the provoked-AoO damage rides the