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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user