Skip to main content

✅ Familiars are demons

CategoryRegression
StatusPassing
Testtests/test_abilities_familiars.py::test_familiars_are_demons

Regression: confusion #2 — Familiars ARE demons.

Preconditions

  • Lane 0: P1's Seir (unit "050") — 9 HP, 5 damage, READIED.

  • Lane 0: P1's Locusts A (058_1) familiar — 1 HP, 0 damage, READIED.

  • Custom trigger registered on Seir: "When a local allied demon dies,

  • remove all damage from Seir."

  • (Unit "050" (Seir) has no existing triggers from the familiar module,

  • so registering here does not conflict with other tests.)

Action

  • Locusts A becomes fatally wounded and dies (resolve_fatally_wounded).

  • The FATALLY_WOUNDED event fires with Locust as target.

  • Seir's passive should fire because Locusts A IS a demon (confusion #2).

state_after_event = fire_event(
state_after_fw,
GameEvent(
event_type=EventType.FATALLY_WOUNDED,
source=None,
target=locust, # Locust IS a demon — this should trigger Seir
value=0,
side=Side.PLAYER_1,
lane=0,
),
)

# Seir should have 0 damage (passive triggered)
seir_after = next(d for d in state_after_event.demons if d.unit_id == "050")

Expected Postconditions

  • Seir's damage = 0 (passive triggered on Locust's death).

  • Locusts A removed from field and added to P1's familiar_deck.

  • P1's CP = 0 (Locusts CP = 0, so no increase).

  • Regression: Familiars ARE demons — "when a demon dies" triggers on familiar death.

Assertions

assert seir_after.damage == 0, (
f"Seir should have 0 damage after Locust dies (familiars ARE demons), "
f"got {seir_after.damage}. Regression: confusion #2."
)

# Locust removed from field
locust_on_field = [d for d in state_after_event.demons if d.unit_id == "058_1"]
assert len(locust_on_field) == 0, "Locust should have been removed from field."

# Locust returned to familiar_deck (not graveyard)
assert "058_1" in state_after_event.players[Side.PLAYER_1].familiar_deck, (
"Locust should be in familiar_deck after death, not graveyard."
)
assert "058_1" not in state_after_event.players[Side.PLAYER_1].graveyard, (
"Locust must NOT be in graveyard — familiars return to familiar_deck."
)