✅ Three fusions deal 18 fixed damage
| Category | Interaction |
| Status | Passing |
| Test | tests/test_abilities_complex.py::TestDantalionMultiFusionDamageStacks::test_three_fusions_deal_18_fixed_damage |
Three demons fuse onto Dantalion sequentially. Each fusion
Preconditions
-
Lane 0: P1's Dantalion (#106, HP=15) — 0 damage
-
Lane 0: P1's Murmur (#002) — fusible ally
-
Lane 0: P1's Sabnock (#003) — fusible ally
-
Lane 0: P1's Flauros (#013) — fusible ally
Action
-
fuse_demons(state, dantalion, murmur) → +6 damage (6 total)
-
fuse_demons(state, dantalion, sabnock) → +6 damage (12 total)
-
fuse_demons(state, dantalion, flauros) → +6 damage (18 total)
from engine.fusion import fuse_demons
dantalion = make_demon("106", lane=0, owner=Side.PLAYER_1)
murmur = make_demon("002", lane=0, owner=Side.PLAYER_1)
sabnock = make_demon("003", lane=0, owner=Side.PLAYER_1)
flauros = make_demon("013", lane=0, owner=Side.PLAYER_1)
state, placed = _make_state_with_demons(dantalion, murmur, sabnock, flauros)
dantalion_p, murmur_p, sabnock_p, flauros_p = placed
# Fusion 1
state = fuse_demons(state, dantalion_p, murmur_p)
dantalion_p = next(d for d in state.demons if d.unit_id == "106")
Expected Postconditions
-
Dantalion.damage == 18
-
Dantalion.fused_bottom contains "002", "003", "013"
-
Dantalion is fatally_wounded (damage 18 >= HP 15 after fhp buffs:
-
HP = 15 + 3 (Murmur) + 9 (Sabnock) + 9 (Flauros) = 36; 18 < 36 so NOT fatally wounded)
Assertions
assert dantalion_p.damage == 6, f"After 1 fusion: 6 damage. Got {dantalion_p.damage}."
# Fusion 2 — find sabnock in current state
sabnock_p = next(d for d in state.demons if d.unit_id == "003")
state = fuse_demons(state, dantalion_p, sabnock_p)
dantalion_p = next(d for d in state.demons if d.unit_id == "106")
assert dantalion_p.damage == 12, f"After 2 fusions: 12 damage. Got {dantalion_p.damage}."
# Fusion 3
flauros_p = next(d for d in state.demons if d.unit_id == "013")
state = fuse_demons(state, dantalion_p, flauros_p)
dantalion_p = next(d for d in state.demons if d.unit_id == "106")
assert dantalion_p.damage == 18, f"After 3 fusions: 18 damage. Got {dantalion_p.damage}."
bottoms = set(b.strip() for b in (dantalion_p.fused_bottom or "").split(","))
assert bottoms == {"002", "003", "013"}, (
f"Dantalion fused_bottom must contain all three. Got {bottoms}."
)