fix(combat): _find_ally_needing_heal uses hp*2 < hp_max (strictly below half) - the floored hp < hp_max//2 was off by one for odd hp_max (5 -> threshold 2, so 2/5 hp counted healthy); + threshold regression test

This commit is contained in:
2026-09-19 18:58:03 +02:00
parent f93c55b3fb
commit c23fc366e4
2 changed files with 24 additions and 2 deletions
+17
View File
@@ -127,6 +127,23 @@ def test_oni_emits_channel_energy_when_ally_hurt() -> None:
assert any(a.kind == "channel_energy" for a in actions)
def test_oni_channel_heal_triggers_below_half_of_odd_hp_max() -> None:
"""Strictly-below-half threshold: hp_max 5 at hp 2 satisfies 2*2 < 5 but
failed the floored old check hp < hp_max // 2 (2 < 2), leaving a 40%-HP
ally untreated."""
oni = _combatant("oni", resources={"channel_energy": 6}, hp_max=30)
goblin = _combatant("goblin", hp_max=6)
engine, me, _ = _engine(oni, [goblin])
hurt_ally = _state(_combatant("halfling", hp_max=5), "players", (5, 5), hp=2)
engine.states.append(hurt_ally)
actions = default_policy(engine, me)
assert any(
a.kind == "channel_energy" and a.channel_mode == "heal" for a in actions
)
def test_oni_silent_when_channel_energy_exhausted() -> None:
oni = _combatant("oni", resources={"channel_energy": 0}, hp_max=30)
goblin = _combatant("goblin", hp_max=6)