diff --git a/src/pf1e_simulator/conditions.py b/src/pf1e_simulator/conditions.py index 938201d..233a33a 100644 --- a/src/pf1e_simulator/conditions.py +++ b/src/pf1e_simulator/conditions.py @@ -110,12 +110,15 @@ FATIGUED = Condition( ) # Exhausted: -6 STR, -6 DEX; half speed; can't run or charge (CRB) -# Approximation: -3 attack, -3 damage +# Approximation: -3 attack, -3 damage (STR/DEX), -3 AC and -3 Ref (the -6 DEX +# = -3 to each, mirroring how ENTANGLED models its -4 DEX as -2 AC/-2 Ref). EXHAUSTED = Condition( name="exhausted", modifiers=( StatModifier(target="attack", value=-3), StatModifier(target="damage", value=-3), + StatModifier(target="ac", value=-3), + StatModifier(target="ref", value=-3), ), cant_charge=True, speed_mult=0.5, diff --git a/tests/test_conditions.py b/tests/test_conditions.py index fe86564..c1175c7 100644 --- a/tests/test_conditions.py +++ b/tests/test_conditions.py @@ -7,6 +7,7 @@ from pf1e_simulator.conditions import ( BLINDED, DAZZLED, ENTANGLED, + EXHAUSTED, FATIGUED, FLAT_FOOTED, FRIGHTENED, @@ -123,6 +124,17 @@ class TestConditionData: assert ENTANGLED.cant_charge is True assert ENTANGLED.speed_mult == 0.5 + def test_exhausted_minus6_dex_gives_minus3_ac_and_ref(self) -> None: + # SRD: exhausted takes -6 to Dexterity => -3 AC and -3 Reflex + # (each -2 Dex = -1 AC/Ref, same modelling as entangled's -4 Dex). + mods = {m.target: m.value for m in EXHAUSTED.modifiers} + assert mods["attack"] == -3 + assert mods["damage"] == -3 + assert mods["ac"] == -3 + assert mods["ref"] == -3 + assert "fort" not in mods + assert "will" not in mods + def test_fatigued_flags(self) -> None: assert FATIGUED.cant_charge is True