Skip to main content

Vassago

Demon Without a Home

Unit #081

HPPWRCPSpeedRangeTier
15 (+9)24 (+3)FastAnyB

Abilities

For You — 0 AP

g: For You: 0 AP - b: Deal 3 Fixed Damage to Vassago. e: Target Other Demon has +3n.
Engine Implementation
def _vassago_for_you(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#081 Vassago — For You
Quick, 0 AP, (ready): Deal 3 Fixed Damage to Vassago. Status: Target Other Demon has +3 DEF.
Status expires end of current main phase.

Quick timing, (ready) — does NOT exhaust.
Fixed Damage bypasses DEF entirely (self-harm).
After self-damage, target other demon gets +3 DEF status.
Note: No 1x on this ability — can be used every Quick window.

Targets: [target_other_demon]
"""
state = deal_fixed_damage(state, demon, 3)
target = targets[0]
# Re-locate Vassago (source) in state after self-damage deepcopy
vassago_in_new = next(
(d for d in state.demons if d.instance_id == demon.instance_id), None
)
source = vassago_in_new if vassago_in_new is not None else demon
state = apply_status(state, source, target, "def", 3)
return state

register_ability("081", 0, _vassago_for_you)

For Everyone — 0 AP

g: For Everyone: 0 AP - 1x: Fatally Wound Vassago and apply e: All Allied Demons cannot take damage (even from Fixed Damage).
Engine Implementation
def _vassago_for_everyone(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#081 Vassago — For Everyone
Quick, 0 AP, 1x: Fatally Wound Vassago and apply Status: All Allied Demons
cannot take damage (even from Fixed Damage).

CRITICAL: fatally_wounded is one-way — once set, cannot be cleared.
Vassago sacrifices itself. All allied demons gain "cannot_take_damage" status.
Status expires end of current main phase.
"""
from engine.status_effects import apply_status

# Fatally wound Vassago
new_state = copy.deepcopy(state)
vassago_in_state = next(
(d for d in new_state.demons if d.instance_id == demon.instance_id), None
)
if vassago_in_state is not None:
vassago_in_state.fatally_wounded = True

state = new_state

# Apply "cannot_take_damage" to all allied demons
owner = demon.owner
allied = [d for d in state.demons if d.owner == owner]
for ally in allied:
a_current = next(
(d for d in state.demons if d.instance_id == ally.instance_id), None
)
if a_current is not None:
state = apply_status(state, demon, a_current, "cannot_take_damage", 1)

return state

register_ability("081", 1, _vassago_for_everyone)
Vassago