✅ Kimaris fused bottom blocks vual oasis heal on local demons
| Category | Interaction |
| Status | Passing |
| Test | tests/test_abilities_actions.py::test_kimaris_fused_bottom_blocks_vual_oasis_heal_on_local_demons |
Tests interaction between Murmur, Vual, Sabnock.
Preconditions
-
P1 Main Phase, P1 has 4 AP
-
Lane 0: P1's fused demon — Murmur (#002) top, Kimaris (#057) bottom
-
Lane 0: P1's Vual (#083, PWR=3) — Local ally (same lane as Kimaris fused-bottom)
-
Lane 0: P1's Sabnock (#003) — 6 damage (local to Kimaris — must NOT be healed)
-
Lane 1: P1's Flauros (#013) — 6 damage (different lane — CAN be healed)
Action
- Vual uses Oasis of Life (Quick, 1 AP, exhaust) — heals PWR=3 from All Demons
from engine.abilities import execute_ability
fused_with_kimaris = make_fused_demon("002", "057", lane=0, owner=Side.PLAYER_1)
vual = make_demon("083", lane=0, owner=Side.PLAYER_1)
sabnock_local = make_demon("003", lane=0, owner=Side.PLAYER_1, damage=6)
flauros_distant = make_demon("013", lane=1, owner=Side.PLAYER_1, damage=6)
state, placed = _state_with_demons(
fused_with_kimaris, vual, sabnock_local, flauros_distant, ap_p1=4
)
vual_p = next(d for d in state.demons if d.unit_id == "083")
result = execute_ability(state, vual_p, ability_idx=0)
sabnock_after = next(d for d in result.demons if d.unit_id == "003")
flauros_after = next(d for d in result.demons if d.unit_id == "013")
Expected Postconditions
-
Sabnock: 6 damage (heal blocked — same lane as Kimaris fused-bottom)
-
Flauros: 3 damage (6 - 3 heal; different lane from Kimaris = aura does not apply)
-
Vual: EXHAUSTED
Assertions
assert sabnock_after.damage == 6, (
f"Sabnock (Local to Kimaris-fused-bottom) must have heal blocked. "
f"Expected 6 damage, got {sabnock_after.damage}."
)
assert flauros_after.damage == 3, (
f"Flauros (different lane from Kimaris) must be healed normally. "
f"Expected 3 damage (6 - 3 PWR heal), got {flauros_after.damage}."
)