✅ Question challenge with truth deals 3 damage to challenger allies
| Category | Ability |
| Status | Passing |
| Test | tests/test_abilities_familiars.py::test_question_challenge_with_truth_deals_3_damage_to_challenger_allies |
A demon Challenges a Question familiar that has Truth underneath.
Preconditions
-
Lane 1: P1's Question (120_3) with hidden_card="120_1" (Truth).
-
Lane 1: P2's Duban (001) — 6 HP, 0 damage, READIED (challenger).
-
Lane 1: P2's Murmur (002) — 12 HP, 0 damage, READIED (ally of challenger).
-
P1 CP = 0, P2 CP = 0.
Action
-
Duban performs Challenge targeting Question.
-
Truth is revealed → deal 3 Fixed Damage to all Local Allied Demons
from engine.abilities_familiars import _question_challenge_handler
state = make_game_state()
state.players[Side.PLAYER_1].cp = 0
state.players[Side.PLAYER_2].cp = 0
state.players[Side.PLAYER_1].familiar_deck = []
state.players[Side.PLAYER_2].familiar_deck = []
# Place Question with Truth hidden underneath
question = make_familiar_demon("120_3", lane=1, owner=Side.PLAYER_1, current_hp=1)
question.abilities_used_this_turn = {"hidden_card": "120_1"} # Truth underneath
state = place_demon(state, question)
question = state.demons[-1]
# Place P2 demons in lane 1 (will take 3 fixed damage on Truth reveal)
duban = make_demon("001", lane=1, owner=Side.PLAYER_2)
state = place_demon(state, duban)
duban = state.demons[-1]
murmur = make_demon("002", lane=1, owner=Side.PLAYER_2)
state = place_demon(state, murmur)
murmur = state.demons[-1]
new_state = _question_challenge_handler(state, duban, [question], {}, None)
# Question removed
question_on_field = [d for d in new_state.demons if d.unit_id == "120_3"]
Expected Postconditions
-
Question removed from field.
-
Duban damage = 3 (3 Fixed Damage from Truth reveal, local ally of challenger).
-
Murmur damage = 3 (also a local ally of Duban).
-
P1 CP = 0, P2 CP = 0 (Question removal is not a death).
Assertions
assert len(question_on_field) == 0, "Question should be removed after Truth reveal."
# Duban: 3 damage (local ally of itself — challenger)
duban_after = next(d for d in new_state.demons if d.unit_id == "001")
assert duban_after.damage == 3, (
f"Duban should take 3 Fixed Damage when Truth is revealed. Got {duban_after.damage}."
)
# Murmur: 3 damage (local ally of Duban)
murmur_after = next(d for d in new_state.demons if d.unit_id == "002")
assert murmur_after.damage == 3, (
f"Murmur should take 3 Fixed Damage when Truth is revealed (local ally). "
f"Got {murmur_after.damage}."
)
# No CP change — Question removal is not a death
assert new_state.players[Side.PLAYER_1].cp == 0, "P1 should gain 0 CP (Question not dead)."
assert new_state.players[Side.PLAYER_2].cp == 0, "P2 should gain 0 CP."