diff --git a/README.md b/README.md index 82c1324..3caab5f 100644 --- a/README.md +++ b/README.md @@ -1307,6 +1307,14 @@ projectiles multiples, ni sauvegarde partielle) : subsystem de dégâts continus par sort (ni neutralisation d'acide) ; seuls les 2d4 de dégâts initiaux sont modélisés, les rounds de dégâts persistants sont hors périmètre. +- **Fear — sauvegarde totale et pas de cône** (SRD spells/fear.md : « each + living creature in the area [...] becomes panicked unless it succeeds on a + Will save [...]. If the Will save succeeds, the creature is shaken for 1 + round » ; cône de 30 ft) : la condition appliquée est bien `panicked` + (conformance D8), mais le moteur n'a pas de sauvegarde partielle pour les + conditions — un succès annule totalement l'effet au lieu de poser `shaken` + 1 round — et le gabarit en cône n'existe pas (sort résolu sur la cible) ; + la durée « 1 round/niveau » est fixée à 4 rounds. ## Architecture diff --git a/data/spells/fear.json b/data/spells/fear.json index 6406544..d17c183 100644 --- a/data/spells/fear.json +++ b/data/spells/fear.json @@ -9,10 +9,10 @@ "effects": [ { "type": "condition", - "condition_name": "frightened", + "condition_name": "panicked", "duration_rounds": 4, "save_negates": true } ], - "description": "The affected creature becomes frightened and flees from the caster. Will negates." + "description": "SRD spells/fear.md: each living creature in the 30-ft. cone becomes panicked unless it succeeds on a Will save (a successful save makes it shaken for 1 round instead). Modeled as panicked for 4 rounds on a failed save; the shaken-on-success partial needs partial-save support and the cone template is absent - both documented limitations." } diff --git a/tests/test_spells.py b/tests/test_spells.py index c6f3391..cd92551 100644 --- a/tests/test_spells.py +++ b/tests/test_spells.py @@ -522,16 +522,17 @@ class TestHoldPerson: class TestFear: - """Given: a caster casting Fear (will negates, frightened) + """Given: a caster casting Fear (SRD spells/fear.md: panicked unless the + Will save succeeds) When: target fails save - Then: frightened condition is applied.""" + Then: panicked condition is applied.""" - def test_failed_save_applies_frightened(self) -> None: + def test_failed_save_applies_panicked(self) -> None: caster = _make_caster() target = _make_target() engine, c, t = _make_engine(caster, target, [2]) engine._cast_spell(c, t, "Fear") - assert any(ac.condition.name == "frightened" for ac in t.active_conditions) + assert any(ac.condition.name == "panicked" for ac in t.active_conditions) class TestCureLightWounds: