fix(rules): correct P2/P3 PF1e conformance bugs (flanking, touch, blinded, disabled, death, maneuvers, DR, sneak)

This commit is contained in:
2026-09-10 21:45:50 +02:00
parent 5afe495c4a
commit 9aee4f6f6b
15 changed files with 934 additions and 134 deletions
+9 -6
View File
@@ -63,6 +63,9 @@ def make_grid() -> Grid:
def make_engine(queue: list[int], states: list[CombatantState]) -> CombatEngine:
# A maneuver provokes an AoO from the (threatening) target BEFORE the CMB
# check (B13 conformance): the scripted queues carry a leading natural 1
# so the provoking attack always misses.
return CombatEngine(ScriptedRng(queue), make_grid(), states)
@@ -77,7 +80,7 @@ def test_dirty_trick_blinded() -> None:
b_spec = make_combatant("b")
a = make_state(a_spec, "players", (1, 1))
b = make_state(b_spec, "monsters", (1, 2))
engine = make_engine([12], [a, b])
engine = make_engine([1, 12], [a, b])
engine._execute_maneuver(a, b, "dirty_trick", trick_condition="blinded")
assert _condition_names(b) == ["blinded"]
@@ -89,7 +92,7 @@ def test_dirty_trick_default_dazzled() -> None:
b_spec = make_combatant("b")
a = make_state(a_spec, "players", (1, 1))
b = make_state(b_spec, "monsters", (1, 2))
engine = make_engine([12], [a, b])
engine = make_engine([1, 12], [a, b])
engine._execute_maneuver(a, b, "dirty_trick")
assert _condition_names(b) == ["dazzled"]
@@ -101,7 +104,7 @@ def test_dirty_trick_deafened() -> None:
b_spec = make_combatant("b")
a = make_state(a_spec, "players", (1, 1))
b = make_state(b_spec, "monsters", (1, 2))
engine = make_engine([12], [a, b])
engine = make_engine([1, 12], [a, b])
engine._execute_maneuver(a, b, "dirty_trick", trick_condition="deafened")
assert _condition_names(b) == ["deafened"]
@@ -111,7 +114,7 @@ def test_dirty_trick_entangled() -> None:
b_spec = make_combatant("b")
a = make_state(a_spec, "players", (1, 1))
b = make_state(b_spec, "monsters", (1, 2))
engine = make_engine([12], [a, b])
engine = make_engine([1, 12], [a, b])
engine._execute_maneuver(a, b, "dirty_trick", trick_condition="entangled")
assert _condition_names(b) == ["entangled"]
@@ -121,7 +124,7 @@ def test_dirty_trick_nauseated() -> None:
b_spec = make_combatant("b")
a = make_state(a_spec, "players", (1, 1))
b = make_state(b_spec, "monsters", (1, 2))
engine = make_engine([12], [a, b])
engine = make_engine([1, 12], [a, b])
engine._execute_maneuver(a, b, "dirty_trick", trick_condition="nauseated")
assert _condition_names(b) == ["nauseated"]
@@ -133,7 +136,7 @@ def test_dirty_trick_failure_no_condition() -> None:
b_spec = make_combatant("b")
a = make_state(a_spec, "players", (1, 1))
b = make_state(b_spec, "monsters", (1, 2))
engine = make_engine([1], [a, b]) # roll 1 -> automatic failure
engine = make_engine([1, 1], [a, b]) # AoO miss, then roll 1 -> automatic failure
engine._execute_maneuver(a, b, "dirty_trick", trick_condition="blinded")
assert _condition_names(b) == []