Pisces
Unit #037
| HP | PWR | CP | Speed | Range | Tier |
|---|---|---|---|---|---|
| 9 (+3) | 3 (+1) | 3 (+2) | Slow | Any | C |
Abilities
Abiogenesis — 0 AP
Abiogenesis: 0 AP - b, 1x: You and your opponent gain 2 AP.
Engine Implementation
def _pisces_abiogenesis(state: GameState, demon: DemonInstance, targets, choices, rng) -> GameState:
"""#037 Pisces — Abiogenesis
0 AP, (ready), 1x: You and your opponent gain 2 AP.
No targeting needed — both players gain 2 AP.
(ready) means Pisces must be readied; does NOT exhaust.
1x per turn (confusion #20).
Targets: None
"""
opponent = Side.PLAYER_2 if demon.owner == Side.PLAYER_1 else Side.PLAYER_1
new_state = copy.deepcopy(state)
new_state.players[demon.owner].ap += 2
new_state.players[opponent].ap += 2
return new_state
register_ability("037", 0, _pisces_abiogenesis)
Extinction — 2 AP
Extinction: 2 AP - a: Deal 2X Fixed Damage to Target Demon, where X is your remaining AP. Then, lose all of your AP.
Engine Implementation
def _pisces_extinction(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#037 Pisces — Extinction
Action, 2 AP, (exhaust): Deal 2X Fixed Damage to Target Demon, where X is
your remaining AP (after the 2 AP cost). Then, lose all of your AP.
X = current AP (already decremented by 2 by execute_ability before this handler).
Deals 2 * X Fixed Damage (bypasses DEF). Then owner's AP drops to 0.
CRITICAL: Fixed Damage bypasses DEF entirely.
"""
from engine.operations import deal_fixed_damage
if not targets:
return state
target = targets[0]
# X = remaining AP after the 2 AP cost has been deducted
owner = demon.owner
x = state.players[owner].ap
if x > 0:
state = deal_fixed_damage(state, target, 2 * x)
# Lose all remaining AP
new_state = copy.deepcopy(state)
new_state.players[owner].ap = 0
return new_state
register_ability("037", 1, _pisces_extinction)