Sitri
The Beautiful Siren
Unit #092
| HP | PWR | CP | Speed | Range | Tier |
|---|---|---|---|---|---|
| 15 (+9) | 2 | 4 (+3) | Slow | Local | A |
Abilities
Resonance — 3 AP
Resonance: 3 AP - a: All Other Local Demons take 2X damage, where X is the number of Other Local Demons.
Engine Implementation
def _sitri_resonance(state: GameState, demon: DemonInstance, targets, choices, rng) -> GameState:
"""#092 Sitri — Resonance
Action, 3 AP, (exhaust): All Other Local Demons take 2X damage,
where X is the number of Other Local Demons.
CRITICAL: "All Other Local Demons" includes allied demons (confusion #21).
X = count of all demons in Sitri's lane except Sitri.
Each demon takes 2X Fixed Damage.
"""
from engine.operations import deal_fixed_damage
local_others = [
d for d in state.demons
if d.lane == demon.lane and d.instance_id != demon.instance_id
]
x = len(local_others)
if x == 0:
return state
damage_per_demon = 2 * x
for t in local_others:
state = deal_fixed_damage(state, t, damage_per_demon)
return state
register_ability("092", 0, _sitri_resonance)
Siren's Call — 1 AP
h: Siren's Call: 1 AP - a: e: At the end of this Main Phase, move All Exhausted Demons to this Lane. Then, Sitri may perform an action, ignoring a costs.
Engine Implementation
def _sitri_sirens_call(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#092 Sitri — Siren's Call
Start of Turn, 1 AP, (exhaust): Status: At the end of this Main Phase,
move All Exhausted Demons to this Lane. Then, Sitri may perform an action,
ignoring (exhaust) costs.
Applies a status marker "siren_lane" (value = Sitri's lane) to the game
state via a status on Sitri itself (used as a deferred trigger marker).
The actual movement of all exhausted demons is handled by
apply_sirens_call_movement(), called by the turn sequence at phase end.
The end-of-phase free action for Sitri is out of scope for this batch.
"""
from engine.status_effects import apply_status
# Apply a marker status on Sitri so the turn sequence knows to apply
# the movement at end of phase. Value = Sitri's lane.
state = apply_status(state, demon, demon, "siren_lane", demon.lane)
return state
register_ability("092", 1, _sitri_sirens_call)