fix(rules): Esha sylph traits and invented names to documented traced no-ops (Whispering Wind/Like the Wind/Breeze-Kissed are real sylph racial traits whose SRD effects the engine cannot resolve - the coded bonuses were fabricated; Fey-touched and Pingre are not PF1e features and move to _NOOP_FEATS; descriptor gating stays covered via local probe specs)
This commit is contained in:
@@ -13,9 +13,10 @@ Supported condition families (plan B1):
|
||||
real Axe to Grind trait is a documented no-op, see test_feats.py).
|
||||
- save descriptors (fear, cold, electricity, fey, divination, poison,
|
||||
disease, mind_affecting) — the saving throw's context, threaded from the
|
||||
fear aura and from spell effects/schools (Breeze-Kissed, Fey-touched,
|
||||
Spell Vulnerability, Pingre, Half-Forgotten Secrets, Lonely's -2 vs
|
||||
mind_affecting standing in for charm).
|
||||
fear aura and from spell effects/schools (real feats: Spell Vulnerability,
|
||||
Half-Forgotten Secrets, Lonely's -2 vs mind_affecting standing in for
|
||||
charm; the remaining descriptors are exercised through the local probe
|
||||
specs below).
|
||||
- Unsupported (mounted, adjacent_ally_stealth_synergy, weapon_finesse,
|
||||
alcohol) and unknown names always evaluate to False.
|
||||
"""
|
||||
@@ -28,13 +29,10 @@ from typing import Literal
|
||||
import pytest
|
||||
|
||||
from pf1e_simulator.abilities import (
|
||||
BREEZE_KISSED,
|
||||
FEY_TOUCHED,
|
||||
FORTIFIED_DRINKER,
|
||||
HALF_FORGOTTEN_SECRETS,
|
||||
LONELY,
|
||||
MOUNTED_COMBAT,
|
||||
PINGRE,
|
||||
POINT_BLANK_SHOT,
|
||||
SPELL_VULNERABILITY_DIVINATION,
|
||||
AbilitySpec,
|
||||
@@ -221,16 +219,39 @@ def test_axe_condition_inactive_without_axe() -> None:
|
||||
|
||||
# ── Save descriptor conditions ────────────────────────────────────────────────
|
||||
|
||||
# Probe specs exercising the descriptor gating (the loader's real feats for
|
||||
# these descriptors are documented no-ops, see test_feats.py).
|
||||
_COLD_FORT_PROBE = AbilitySpec(
|
||||
name="Cold Fort Probe",
|
||||
category="feat",
|
||||
effects=(StatModifier(target="fort", value=2, condition="cold"),),
|
||||
)
|
||||
_ELEC_REF_PROBE = AbilitySpec(
|
||||
name="Electricity Ref Probe",
|
||||
category="feat",
|
||||
effects=(StatModifier(target="ref", value=2, condition="electricity"),),
|
||||
)
|
||||
_FEY_WILL_PROBE = AbilitySpec(
|
||||
name="Fey Will Probe",
|
||||
category="feat",
|
||||
effects=(StatModifier(target="will", value=1, condition="fey"),),
|
||||
)
|
||||
_POISON_FORT_PROBE = AbilitySpec(
|
||||
name="Poison Fort Probe",
|
||||
category="feat",
|
||||
effects=(StatModifier(target="fort", value=1, condition="poison"),),
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("feat", "save_type", "dc", "descriptors"),
|
||||
[
|
||||
(BREEZE_KISSED, "fort", 20, frozenset({"cold"})),
|
||||
(BREEZE_KISSED, "ref", 20, frozenset({"electricity"})),
|
||||
(FEY_TOUCHED, "will", 19, frozenset({"fey"})),
|
||||
(_COLD_FORT_PROBE, "fort", 20, frozenset({"cold"})),
|
||||
(_ELEC_REF_PROBE, "ref", 20, frozenset({"electricity"})),
|
||||
(_FEY_WILL_PROBE, "will", 19, frozenset({"fey"})),
|
||||
(HALF_FORGOTTEN_SECRETS, "fort", 20, frozenset({"disease"})),
|
||||
(HALF_FORGOTTEN_SECRETS, "will", 20, frozenset({"mind_affecting"})),
|
||||
(PINGRE, "fort", 19, frozenset({"poison"})),
|
||||
(_POISON_FORT_PROBE, "fort", 19, frozenset({"poison"})),
|
||||
],
|
||||
)
|
||||
def test_conditioned_save_bonus_applies_when_descriptor_present(
|
||||
@@ -262,9 +283,9 @@ def test_lonely_is_a_negative_mind_affecting_penalty() -> None:
|
||||
@pytest.mark.parametrize(
|
||||
("feat", "save_type", "dc", "descriptors"),
|
||||
[
|
||||
(BREEZE_KISSED, "fort", 19, frozenset({"fear"})),
|
||||
(_COLD_FORT_PROBE, "fort", 19, frozenset({"fear"})),
|
||||
(HALF_FORGOTTEN_SECRETS, "will", 19, frozenset({"fear"})),
|
||||
(PINGRE, "fort", 19, frozenset({"cold"})),
|
||||
(_POISON_FORT_PROBE, "fort", 19, frozenset({"cold"})),
|
||||
],
|
||||
)
|
||||
def test_conditioned_save_bonus_excluded_without_matching_descriptor(
|
||||
|
||||
Reference in New Issue
Block a user