✅ Iskandar counter attacks enemy attacker
| Category | Ability |
| Status | Passing |
| Test | tests/test_abilities_complex.py::TestIskandarCounterAttack::test_iskandar_counter_attacks_enemy_attacker |
Enemy deals damage to Iskandar — Iskandar counter-attacks without cost.
Preconditions
-
P1 has 3 AP
-
Lane 0: P1's Iskandar (#104), READIED
-
Lane 0: P2's Duban (#001, PWR=2), READIED (in-range attacker)
Action
- Fire DAMAGE_RECEIVED event: source=Duban, target=Iskandar, value=3
Expected Postconditions
-
Duban takes Iskandar's PWR damage (counter-attack)
-
Iskandar stays READIED (no exhaust from counter)
-
P1 AP unchanged (counter is Without Cost)
Assertions
assert duban_after.damage == expected_damage, (
f"Duban must take counter-attack damage. Got {duban_after.damage}."
)
assert iskandar_after.state == DemonState.READIED, (
"Iskandar must stay READIED — counter-attack is Without Cost (no exhaust)."
)
assert result.players[Side.PLAYER_1].ap == 3, (
"Counter-attack costs no AP for Iskandar's owner."
)