Skip to main content

Satan

Demon of Wrath

Unit #109

HPPWRCPSpeedRangeTier
9 (+3)23 (+2)SlowLocalB

Abilities

Passive

c: After Satan takes X damage (after n), deal X-2 damage to All Other Local Demons.
Engine Implementation
def _satan_field_trigger(state: GameState, event: GameEvent, demon: DemonInstance, depth: int):
"""#109 Satan — Field Passive trigger
After Satan takes X damage (after DEF), deal X-2 damage to All Other Local Demons.

Fires on DAMAGE_RECEIVED event. Only activates if Satan is the target.
X = damage Satan just took (after DEF, stored in event.value).
Deals max(0, X-2) Fixed Damage to all other demons in Satan's lane.

CRITICAL (confusion #21): "All Other Local Demons" includes allied demons.
"""
from engine.operations import deal_fixed_damage

# Only fire if this Satan is the target of the damage event
if not event.target or event.target.instance_id != demon.instance_id:
return None

x = event.value if event.value is not None else 0
splash_damage = max(0, x - 2)

if splash_damage <= 0:
return None

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

if not local_others:
return None

for t in local_others:
state = deal_fixed_damage(state, t, splash_damage)

return state

register_trigger("109", 0, _satan_field_trigger)

Satan's Wrath — 1 AP

g: Satan's Wrath: 1 AP - a, 1x: e: When the next action is resolved, if Satan is a Valid target of that action (while ignoring range), change 1 of its targets to Satan. That action's resolution ignores range.
Engine Implementation
def _satan_satans_wrath(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#109 Satan — Satan's Wrath
Quick, 1 AP, (exhaust), 1x: Status: When the next action is resolved, if Satan
is a Valid target (ignoring range), change 1 of its targets to Satan. That
action's resolution ignores range.

Applies "satans_wrath" status marker to Satan (value=1).
Action resolution system reads this marker to apply target redirection.
Status expires end of current main phase.
"""
from engine.status_effects import apply_status

state = apply_status(state, demon, demon, "satans_wrath", 1)
return state

register_ability("109", 1, _satan_satans_wrath)
Satan