fix(rules): correct P1 PF1e conformance bugs (area saves, concentration, prone, slots, helpless, nauseated)

This commit is contained in:
2026-09-10 20:52:28 +02:00
parent 1ca5aed758
commit 5afe495c4a
15 changed files with 790 additions and 86 deletions
+8 -5
View File
@@ -189,13 +189,14 @@ class TestStaggeredActionEconomy:
assert result is False
# ── Test 4: nauseated → single standard action only ───────────────────────────
# ── Test 4: nauseated → single move action only ───────────────────────────────
class TestNauseatedActionEconomy:
"""Given: a nauseated combatant
When: _take_turn is called
Then: they can only take standard actions (no full attack, no charge, no move)."""
Then: they can only take a single move action (no standard, no attack,
no spellcasting — CRB nauseated)."""
def test_nauseated_no_attack_and_no_full_round(self) -> None:
hero = _make_hero(bab=6)
@@ -241,7 +242,7 @@ class TestParalyzedNoActions:
assert found_wait, "paralyzed combatant should log 'wait (cannot act)'"
def test_paralyzed_defender_helpless_ac(self) -> None:
"""Paralyzed target: denies_dex_to_ac=True (flat-footed) + -4 AC (helpless)."""
"""Paralyzed is helpless: denies_dex_to_ac (flat-footed) + Dex 0 (-5)."""
hero = _make_hero()
foe = _make_foe()
engine, h, f = _make_engine(hero, foe, [10, 4])
@@ -249,8 +250,10 @@ class TestParalyzedNoActions:
ActiveCondition(condition=PARALYZED, rounds_left=5, source="test")
)
result = engine.resolve_attack(h, f, hero.attacks[0])
# Paralyzed: denies_dex_to_ac → flat_footed AC 13; plus -4 helpless → 9
assert result.ac == 9
# Paralyzed: denies_dex_to_ac → flat_footed AC 13; helpless Dex 0 → -5;
# melee attacker also gains the +4 helpless bonus (roll 10 + 5 + 4 = 19).
assert result.ac == 8
assert result.total == 19
# ── Test 6: StatModifier condition filtering ──────────────────────────────────