Gaap
Sovereign of Spacetime
Unit #020
| HP | PWR | CP | Speed | Range | Tier |
|---|---|---|---|---|---|
| 12 (+6) | 3 (+1) | 3 (+2) | Fast | Any | A |
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)