Skip to main content

Pisces

Unit #037

HPPWRCPSpeedRangeTier
9 (+3)3 (+1)3 (+2)SlowAnyC

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)
Pisces