fix(rules): combat maneuvers auto-succeed (natural 20) vs incapacitated targets

This commit is contained in:
2026-09-16 20:21:41 +02:00
parent 06da519fc6
commit 0cccea2fa1
2 changed files with 47 additions and 0 deletions
+9
View File
@@ -4641,6 +4641,15 @@ class CombatEngine:
attacker_cmb = self._maneuver_cmb(state) - pa_amt - grapple_penalty
target_cmd = self._maneuver_cmd(target)
roll = self._rng.d20()
# PF1e (SRD Combat Maneuvers): "If your target is immobilized,
# unconscious, or otherwise incapacitated, your maneuver
# automatically succeeds (treat as if you rolled a natural 20 on
# the attack roll)." The engine's incapacitated notion is the
# helpless set (helpless/paralyzed/asleep/unconscious, CRB
# "Conditions"); the natural 20 also feeds the margin-based
# outcomes (bull rush / overrun / reposition / drag / dirty trick).
if self._is_helpless(target):
roll = _NATURAL_TWENTY
# PF1e (CRB Combat Maneuvers): the provoked-AoO damage rides the
# check total (floored at 0); natural 20/1 keep their rules below.
total = max(0, roll + attacker_cmb - aoo_damage)