Skip to main content

✅ Sabnock pink haze applies pwr and def debuffs

CategoryAbility
StatusPassing
Testtests/test_abilities_actions.py::test_sabnock_pink_haze_applies_pwr_and_def_debuffs

Sabnock applies Pink Haze debuff to an enemy demon.

Preconditions

  • P1 Main Phase, P1 has 5 AP

  • Lane 0: P1's Sabnock (#003) — HP=15, READIED

  • Lane 0: P2's Duban (#001) — HP=6, READIED, has +5 DEF passive (not registered here)

  • No status effects active

Action

  • Execute Sabnock's Pink Haze (ability[0], Quick, 1 AP, exhaust) targeting Duban
result = execute_ability(state, sabnock_on_field, ability_idx=0, targets=[duban_on_field])

# Check PWR debuff applied
pwr_effects = [
e for e in result.status_effects
if e.target_instance_id == duban_on_field.instance_id and e.stat == "pwr"
]

Expected Postconditions

  • Duban: has active status "pwr" -3 (expires this phase)

  • Duban: has active status "def" -2 (expires this phase)

  • Sabnock: EXHAUSTED (tap_required=True)

  • P1 AP: 4 (was 5, spent 1)

  • No HP changes

Assertions

assert len(pwr_effects) == 1, "Duban must have one pwr status effect"
assert pwr_effects[0].value == -3, f"Expected -3 PWR, got {pwr_effects[0].value}"

# Check DEF debuff applied
def_effects = [
e for e in result.status_effects
if e.target_instance_id == duban_on_field.instance_id and e.stat == "def"
]
assert len(def_effects) == 1, "Duban must have one def status effect"
assert def_effects[0].value == -2, f"Expected -2 DEF, got {def_effects[0].value}"

# Sabnock should be exhausted (tap_required=True handled by execute_ability)
sabnock_after = next(d for d in result.demons if d.unit_id == "003")
assert sabnock_after.state == DemonState.EXHAUSTED, "Sabnock must be EXHAUSTED after Pink Haze"

# AP deducted
assert result.players[Side.PLAYER_1].ap == 4, "P1 AP should be 4 (spent 1)"

# No HP changes
duban_after = next(d for d in result.demons if d.unit_id == "001")
assert duban_after.damage == 0, "Duban should have no damage — Pink Haze is status only"