Virgo
Unit #075
| HP | PWR | CP | Speed | Range | Tier |
|---|---|---|---|---|---|
| 24 (+18) | 7 (+5) | 3 (+2) | Slow | Local | C |
Abilities
Passive
Virgo cannot perform actions while Virgo has 12 or less sustained damage.
Engine Implementation
def _virgo_threshold_passive(state: GameState, demon: DemonInstance) -> dict:
"""#075 Virgo — Threshold passive: block actions while damage <= 12.
Returns {"can_act_blocked": 1} if Virgo has 12 or fewer damage points,
signaling that Virgo cannot perform any actions in this state.
Returns {} (no block) if Virgo has 13 or more damage.
NOTE: This passive only applies to Virgo itself (registered on "075").
"""
if demon.damage <= 12:
return {"can_act_blocked": 1}
return {}
register_passive("075", 0, _virgo_threshold_passive)
Blooming In Rot — 0 AP
Blooming In Rot: 0 AP - 1x: Your opponent gains 1 CP. Only Virgo can perform this action. (Fused Demons have both names.)
Engine Implementation
def _virgo_blooming_in_rot(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#075 Virgo — Blooming In Rot
Action, 0 AP, 1x: Your opponent gains 1 CP. Only Virgo can perform this action.
The OPPONENT of Virgo's controller gains 1 CP (this is BAD for the opponent).
CP is a loss condition — forcing 1 CP onto the opponent accelerates their
path to losing at 15 CP.
Note: Virgo's threshold passive (ability[0]) is a prerequisite — Virgo
can only act when damage >= 13. That check happens in can_use_ability;
this handler just applies the effect.
"""
from engine.scoring import gain_cp
opponent = Side.PLAYER_2 if demon.owner == Side.PLAYER_1 else Side.PLAYER_1
state = gain_cp(state, opponent, 1)
return state
register_ability("075", 1, _virgo_blooming_in_rot)
Purge Filth — 2 AP
i: Purge Filth: 2 AP - a: Deal 3 Fixed Damage to All Demons with at least 1 damage on them.
Engine Implementation
def _virgo_purge_filth(state: GameState, demon: DemonInstance, targets, choices, rng) -> GameState:
"""#075 Virgo — Purge Filth
Allied, 2 AP, (exhaust): Deal 3 Fixed Damage to All Demons with at least 1 damage on them.
Allied: ANY allied demon can perform this (not just Virgo).
CRITICAL: "All Demons" includes your own allies with damage (confusion #21).
Fixed Damage bypasses DEF.
"""
from engine.operations import deal_fixed_damage
from engine.targeting import get_all_demons
# Find all demons with at least 1 damage on them
damaged_demons = [d for d in get_all_demons(state) if d.damage >= 1]
for t in damaged_demons:
state = deal_fixed_damage(state, t, 3)
return state
register_ability("075", 2, _virgo_purge_filth)