Skip to main content

Botis

The Bloodsnake

Unit #079

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

Abilities

Bloody Power — 0 AP

Bloody Power: 0 AP - b, 1x: Deal 3 Fixed Damage to Botis. e: Botis's next action has +3k.
Engine Implementation
def _botis_bloody_power(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#079 Botis — Bloody Power
0 AP, (ready), 1x: Deal 3 Fixed Damage to Botis. Status: Botis's next action has +3 PWR.
Status expires end of current main phase.

(ready) — does NOT exhaust Botis.
1x per turn (confusion #20).
Fixed Damage bypasses DEF entirely.
After self-damage, Botis gets +3 PWR status for its next action.

Targets: None
"""
state = deal_fixed_damage(state, demon, 3)
botis_in_new = next(
(d for d in state.demons if d.instance_id == demon.instance_id), None
)
if botis_in_new is not None:
state = apply_status(state, botis_in_new, botis_in_new, "pwr", 3)
return state

register_ability("079", 0, _botis_bloody_power)

Mortal Strike — 3 AP

Mortal Strike: 3 AP - a, 1x: Deal 2X Fixed Damage to Target In Range Demon, where X is the amount of damage on Botis. Then, Fatally Wound Botis.
Engine Implementation
def _botis_mortal_strike(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#079 Botis — Mortal Strike
3 AP, (exhaust), 1x: Deal 2X Fixed Damage to Target In Range Demon, where X
is the amount of damage on Botis. Then, Fatally Wound Botis.

CRITICAL: Fixed Damage bypasses DEF entirely (deal_fixed_damage).
X = demon.damage (damage already on Botis when the ability fires).
Botis is Fatally Wounded AFTER dealing damage — simultaneous resolution
is not an issue since FW is set by flag, not immediate removal.
Target must be In Range — enforced by targeting logic, not handler.

Targets: [target_in_range_demon]
"""
target = targets[0]
# X = current damage on Botis
x = demon.damage
fixed_damage = 2 * x
state = deal_fixed_damage(state, target, fixed_damage)

# Fatally Wound Botis (self)
new_state = copy.deepcopy(state)
botis_in_new = next(
(d for d in new_state.demons if d.instance_id == demon.instance_id), None
)
if botis_in_new is not None:
botis_in_new.fatally_wounded = True
return new_state

register_ability("079", 1, _botis_mortal_strike)
Botis