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 -6
View File
@@ -24,6 +24,7 @@ def _make_combatant(
spell_resistance: int = 0,
resistances: dict[str, int] | None = None,
immunities: tuple[str, ...] = (),
spell_slots: dict[int, int] | None = None,
) -> Combatant:
return Combatant(
id=id_,
@@ -43,6 +44,7 @@ def _make_combatant(
spell_resistance=spell_resistance,
resistances=resistances or {},
immunities=immunities,
spell_slots=spell_slots or {},
)
@@ -102,7 +104,7 @@ _FIREBALL = SpellSpec(
def test_sr_blocks_all_effects() -> None:
caster = _make_combatant("caster", spell_resistance=0)
caster = _make_combatant("caster", spell_resistance=0, spell_slots={1: 9, 3: 9})
target = _make_combatant("target", spell_resistance=15)
eng = _engine(
[caster, target], [(0, 0), (0, 2)], ["players", "monsters"],
@@ -116,7 +118,7 @@ def test_sr_blocks_all_effects() -> None:
def test_sr_passes_when_cl_suffices() -> None:
caster = _make_combatant("caster", spell_resistance=0)
caster = _make_combatant("caster", spell_resistance=0, spell_slots={1: 9, 3: 9})
target = _make_combatant("target", spell_resistance=10)
eng = _engine(
[caster, target], [(0, 0), (0, 2)], ["players", "monsters"],
@@ -130,7 +132,7 @@ def test_sr_passes_when_cl_suffices() -> None:
def test_per_target_sr_in_area_spell() -> None:
caster = _make_combatant("caster", spell_resistance=0)
caster = _make_combatant("caster", spell_resistance=0, spell_slots={1: 9, 3: 9})
t1 = _make_combatant("t1", spell_resistance=15)
t2 = _make_combatant("t2", spell_resistance=0)
eng = _engine(
@@ -149,7 +151,7 @@ def test_per_target_sr_in_area_spell() -> None:
def test_no_sr_check_when_sr_zero() -> None:
caster = _make_combatant("caster", spell_resistance=0)
caster = _make_combatant("caster", spell_resistance=0, spell_slots={1: 9, 3: 9})
target = _make_combatant("target", spell_resistance=0)
eng = _engine(
[caster, target], [(0, 0), (0, 2)], ["players", "monsters"],
@@ -164,7 +166,7 @@ def test_no_sr_check_when_sr_zero() -> None:
def test_fire_resistance_reduces_spell_damage() -> None:
caster = _make_combatant("caster", spell_resistance=0)
caster = _make_combatant("caster", spell_resistance=0, spell_slots={1: 9, 3: 9})
target = _make_combatant(
"target",
spell_resistance=0,
@@ -182,7 +184,7 @@ def test_fire_resistance_reduces_spell_damage() -> None:
def test_fire_immunity_negates_damage() -> None:
caster = _make_combatant("caster", spell_resistance=0)
caster = _make_combatant("caster", spell_resistance=0, spell_slots={1: 9, 3: 9})
target = _make_combatant(
"target",
spell_resistance=0,