fix(rules): minimum damage - a landed hit reduced below 1 by DR/energy resistance deals 1 (CRB Damage - Minimum Damage, nonlethal approximated as normal)

This commit is contained in:
2026-09-16 21:46:04 +02:00
parent 1c2663d21c
commit ae037c984f
3 changed files with 39 additions and 7 deletions
+5 -3
View File
@@ -251,12 +251,14 @@ def test_dr_spares_the_energy_component_of_a_mixed_attack() -> None:
def test_physical_only_damage_vs_dr_unchanged() -> None:
"""(h) a physical-only weapon keeps the exact old DR arithmetic (regression
lock for the split): 1d8 = 3 vs DR 5 floors to 0."""
lock for the split): 1d8 = 3 vs DR 5 reduces below 1 — the CRB "Damage"
Minimum Damage floor then leaves a landed hit dealing 1 (nonlethal is not
modeled: 1 point of normal damage)."""
weapon = _attack("warhammer", (("1d8", ("bludgeoning",)),))
hero = _combatant("hero", attacks=(weapon,))
foe = _combatant("foe").model_copy(update={"dr": DamageReduction(amount=5)})
eng = _engine([hero, foe], [(0, 0), (0, 1)], ["players", "monsters"],
[15, 3])
result = eng.resolve_attack(eng._states[0], eng._states[1], weapon)
assert result.damage == 0
assert eng._states[1].hp == 100
assert result.damage == 1
assert eng._states[1].hp == 99 # the Minimum Damage floor lands 1 point