fix(combat): _find_ally_needing_heal counts only living allies (SRD Channel Energy: heal mode heals living creatures, positive energy never heals undead) - an undead ally below half triggered heal mode, spending the channel to heal nobody; + trigger regression test

This commit is contained in:
2026-09-19 19:01:03 +02:00
parent c23fc366e4
commit 6f01a8ebdd
2 changed files with 26 additions and 2 deletions
+18
View File
@@ -156,6 +156,24 @@ def test_oni_silent_when_channel_energy_exhausted() -> None:
assert not any(a.kind == "channel_energy" for a in actions)
def test_oni_no_channel_heal_trigger_for_undead_ally() -> None:
"""SRD Channel Energy: heal mode heals living creatures. An undead ally
below half cannot benefit (positive energy harms undead), so it must not
trigger the heal mode - the channel would be spent healing nobody."""
oni = _combatant("oni", resources={"channel_energy": 6}, hp_max=30)
goblin = _combatant("goblin", hp_max=6)
engine, me, _ = _engine(oni, [goblin])
undead_ally = _state(
_combatant("ghoul", hp_max=20, creature_type="undead"),
"players", (5, 5), hp=5,
)
engine.states.append(undead_ally)
actions = default_policy(engine, me)
assert not any(a.kind == "channel_energy" for a in actions)
def test_oni_channel_energy_spends_resource() -> None:
oni = _combatant("oni", resources={"channel_energy": 6}, hp_max=30)
goblin = _combatant("goblin", hp_max=6)