Skip to main content

✅ Three fusions deal 18 fixed damage

CategoryInteraction
StatusPassing
Testtests/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}."
)