Botis
The Bloodsnake
Unit #079
| HP | PWR | CP | Speed | Range | Tier |
|---|---|---|---|---|---|
| 9 (+3) | 4 (+2) | 3 (+2) | Slow | Local | B |
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)