fix(spells): correct the fear condition

PF1e (SRD spells/fear.md): creatures become panicked unless they succeed on a Will save - the JSON applied frightened instead. Condition fixed to panicked. The shaken-for-1-round on a successful save needs partial-save support for conditions and the 30-ft cone needs a cone template, neither of which the engine has; both documented in README as out of scope rather than built.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-09-12 13:05:49 +02:00
parent b5b1bfd395
commit 5b64fbee48
3 changed files with 15 additions and 6 deletions
+8
View File
@@ -1307,6 +1307,14 @@ projectiles multiples, ni sauvegarde partielle) :
subsystem de dégâts continus par sort (ni neutralisation d'acide) ; seuls les 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 2d4 de dégâts initiaux sont modélisés, les rounds de dégâts persistants sont
hors périmètre. 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 ## Architecture
+2 -2
View File
@@ -9,10 +9,10 @@
"effects": [ "effects": [
{ {
"type": "condition", "type": "condition",
"condition_name": "frightened", "condition_name": "panicked",
"duration_rounds": 4, "duration_rounds": 4,
"save_negates": true "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."
} }
+5 -4
View File
@@ -522,16 +522,17 @@ class TestHoldPerson:
class TestFear: 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 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() caster = _make_caster()
target = _make_target() target = _make_target()
engine, c, t = _make_engine(caster, target, [2]) engine, c, t = _make_engine(caster, target, [2])
engine._cast_spell(c, t, "Fear") 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: class TestCureLightWounds: