Skip to main content

Black Serpent

Familiar of Camio — Card 1 of 1

HPPWRCPSpeedRange
1263C (Companion)Local

Abilities

Passive

d: At the start of your Main Phases, deal 2 Fixed Damage to Black Serpent.
Engine Implementation
def _black_serpent_upkeep_trigger(state: GameState, event: GameEvent, demon: DemonInstance, depth: int) -> GameState | None:
"""098_1 Black Serpent — upkeep: 2 Fixed Damage to self at start of owner's Main Phase."""
if event.event_type != EventType.MAIN_PHASE_START:
return None
# Only fires for the owner's main phase
if event.side != demon.owner:
return None

new_state = deal_fixed_damage(state, demon, 2)
return new_state

register_trigger("098_1", 0, _black_serpent_upkeep_trigger)

Passive

After this Fatally Wounds Any Other Demon, Ready and remove 4 damage from this.
Engine Implementation
def _black_serpent_kill_reward_trigger(state: GameState, event: GameEvent, demon: DemonInstance, depth: int) -> GameState | None:
"""098_1 Black Serpent — after it fatally wounds another demon, ready itself
and remove 4 damage.

Fires on FATALLY_WOUNDED events where Black Serpent is the source.
"""
if event.source is None or event.source.instance_id != demon.instance_id:
return None
# Must be a DIFFERENT demon that was fatally wounded
if event.target is None or event.target.instance_id == demon.instance_id:
return None

new_state = ready_demon(state, demon)
demon_refreshed = _find_demon(new_state, demon.instance_id)
if demon_refreshed is not None:
new_state = remove_damage(new_state, demon_refreshed, 4)
return new_state

register_trigger("098_1", 1, _black_serpent_kill_reward_trigger)

Unbounded Hunger — 3 AP

Unbounded Hunger: 3 AP - a: Deal k Fixed Damage to each Demon in Target Lane.
Engine Implementation
def _black_serpent_unbounded_hunger_handler(state: GameState, demon: DemonInstance, targets, choices, rng) -> GameState:
"""098_1 Black Serpent — Unbounded Hunger: Deal PWR Fixed Damage to each
Demon in Target Lane. Hits ALL demons (both sides — no "enemy" qualifier).
"""
target_lane = None
if choices and "target_lane" in choices:
target_lane = choices["target_lane"]
elif targets:
target_lane = targets[0].lane

if target_lane is None:
return state

pwr = get_effective_pwr(state, demon)
demons_in_lane = [d for d in state.demons if d.lane == target_lane]

new_state = state
for d in demons_in_lane:
d_in_state = _find_demon(new_state, d.instance_id)
if d_in_state is not None:
new_state = deal_fixed_damage(new_state, d_in_state, pwr)

return new_state

register_ability("098_1", 2, _black_serpent_unbounded_hunger_handler)
Black Serpent