Skip to main content

Sitri

The Beautiful Siren

Unit #092

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

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)
Sitri