Skip to main content

Gusion

Destroyer of Secrets

Unit #105

HPPWRCPSpeedRangeTier
12 (+6)3 (+1)3 (+2)FastDistantB

Abilities

Syphon Time — 0 AP

Syphon Time: 0 AP - b, 1x: If Gusion has performed no other actions during this Main Phase, take the Time Token. e: Gusion cannot perform actions.
Engine Implementation
def _gusion_syphon_time(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#105 Gusion — Syphon Time
Action, 0 AP, (ready), 1x: If Gusion has performed no other actions during this
Main Phase, take the Time Token. Status: Gusion cannot perform actions.

CRITICAL (confusion re initiative): Uses initiative/time token tracking.
Transfers the Time Token to Gusion's controller (if Gusion has acted only this once).
Applies "cannot_act" status to Gusion.
Token transfer is modeled via state.time_token_holder (if field exists).
"""
from engine.status_effects import apply_status

owner = demon.owner

# Transfer time token if state tracks it
new_state = copy.deepcopy(state)
if hasattr(new_state, "time_token_holder"):
new_state.time_token_holder = owner
state = new_state

# Status: Gusion cannot perform actions
gusion_current = next(
(d for d in state.demons if d.instance_id == demon.instance_id), None
)
if gusion_current is not None and not gusion_current.fatally_wounded:
state = apply_status(state, demon, gusion_current, "cannot_act", 1)

return state

register_ability("105", 0, _gusion_syphon_time)

Quick Thinking — 0 AP

Quick Thinking: 0 AP - b, 1x: If you chose the Main Phase order during the most recent Contract Phase, deal k damage to Target In Range Demon.
Engine Implementation
def _gusion_quick_thinking(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#105 Gusion — Quick Thinking
Quick, 0 AP, (ready), 1x: If you chose the Main Phase order during the most
recent Contract Phase, deal this demon's PWR damage to Target In Range Demon.

CRITICAL (confusion re initiative): This fires only if Gusion's controller
had initiative (won the Contract Phase speed comparison).
Checks state.initiative_holder == demon.owner.
If condition not met, ability fizzles with no effect.
"""
from engine.operations import get_effective_pwr, deal_damage

# Check if controller had initiative
owner = demon.owner
had_initiative = False
if hasattr(state, "initiative_holder"):
had_initiative = (state.initiative_holder == owner)
elif hasattr(state, "time_token_holder"):
had_initiative = (state.time_token_holder == owner)

if not had_initiative:
return state # Condition not met — ability fizzles

if not targets:
return state

target = targets[0]
t_current = next(
(d for d in state.demons if d.instance_id == target.instance_id), None
)
if t_current is None or t_current.fatally_wounded:
return state

pwr = get_effective_pwr(state, demon)
return deal_damage(state, demon, t_current, pwr)

register_ability("105", 1, _gusion_quick_thinking)
Gusion