Skip to main content

Gaap

Sovereign of Spacetime

Unit #020

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

Abilities

Time Dilation — 0 AP

h: Time Dilation: 0 AP - 1x: Target Allied Demon performs 1 action (with cost).
Engine Implementation
def _gaap_time_dilation(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#020 Gaap — Time Dilation
Start of Turn, 0 AP, 1x: Target Allied Demon performs 1 action (with cost).

CRITICAL (confusion #6): The ally pays FULL AP and exhaust costs.
Time Dilation only grants timing advantage — the ally acts before the opponent
during their main phase. It is NOT a free action.

Applies a "time_dilation_action" status marker (value=1) to the target ally.
The turn sequence / game loop reads this to grant the ally one action opportunity.
Status expires end of current main phase.
"""
from engine.status_effects import apply_status

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

state = apply_status(state, demon, t_current, "time_dilation_action", 1)
return state

register_ability("020", 0, _gaap_time_dilation)

Unmoving Time — 2 AP

h: Unmoving Time: 2 AP - a: e: All Other Local Demons cannot perform actions.
Engine Implementation
def _gaap_unmoving_time(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#020 Gaap — Unmoving Time
Start of Turn, 2 AP, (exhaust): Status: All Other Local Demons cannot perform actions.

CRITICAL (confusion #10): This status expires at end of current main phase.
One-cycle stall — costs 2 AP + exhaust. Does NOT permanently lock.
"All Other Local Demons" includes allied demons in Gaap's lane (confusion #21).
"""
from engine.status_effects import apply_status

local_others = [
d for d in state.demons
if d.lane == demon.lane and d.instance_id != demon.instance_id
]

for target in local_others:
state = apply_status(state, demon, target, "cannot_act", 1)

return state

register_ability("020", 1, _gaap_unmoving_time)
Gaap