From 6220edcfd74e5e58d4cf3767f1b72b952e5d90ac Mon Sep 17 00:00:00 2001 From: ctan Date: Wed, 16 Sep 2026 19:22:00 +0200 Subject: [PATCH] fix(rules): fatigued -2 Dex now costs -1 AC and -1 Reflex --- src/pf1e_simulator/conditions.py | 5 ++++- tests/test_conditions.py | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/pf1e_simulator/conditions.py b/src/pf1e_simulator/conditions.py index 233a33a..de5f99e 100644 --- a/src/pf1e_simulator/conditions.py +++ b/src/pf1e_simulator/conditions.py @@ -99,12 +99,15 @@ SICKENED = Condition( ) # Fatigued: -2 STR, -2 DEX; can't run or charge (CRB) -# Approximation: -1 attack (STR/DEX), -1 damage (STR) +# Approximation: -1 attack, -1 damage (STR/DEX), -1 AC and -1 Ref (the -2 DEX +# = -1 to each, same modelling as exhausted/entangled). FATIGUED = Condition( name="fatigued", modifiers=( StatModifier(target="attack", value=-1), StatModifier(target="damage", value=-1), + StatModifier(target="ac", value=-1), + StatModifier(target="ref", value=-1), ), cant_charge=True, ) diff --git a/tests/test_conditions.py b/tests/test_conditions.py index c1175c7..e18501a 100644 --- a/tests/test_conditions.py +++ b/tests/test_conditions.py @@ -138,6 +138,14 @@ class TestConditionData: def test_fatigued_flags(self) -> None: assert FATIGUED.cant_charge is True + def test_fatigued_minus2_dex_gives_minus1_ac_and_ref(self) -> None: + # SRD: fatigued takes -2 to Dexterity => -1 AC and -1 Reflex. + mods = {m.target: m.value for m in FATIGUED.modifiers} + assert mods["attack"] == -1 + assert mods["damage"] == -1 + assert mods["ac"] == -1 + assert mods["ref"] == -1 + def test_flat_footed_flags(self) -> None: assert FLAT_FOOTED.denies_dex_to_ac is True assert FLAT_FOOTED.cant_aoo is True