Baal
Sovereign of Hell
Unit #064
| HP | PWR | CP | Speed | Range | Tier |
|---|---|---|---|---|---|
| 9 (+3) | 2 | 6 (+5) | Slow | Distant | A |
Abilities
Praise — 0 AP
g: Praise: 0 AP - b, 1x: Gain 2 CP. e: All Allied Demons in Target Lane have +3k, +3n, and -1 AP Cost.*
Engine Implementation
def _baal_praise(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#064 Baal — Praise
Quick, 0 AP, (ready), 1x: Gain 2 CP. Status: All Allied Demons in Target Lane
have +3 PWR, +3 DEF, and -1 AP Cost.
Status expires end of current main phase.
CRITICAL (confusion #11): "Gain 2 CP" means Baal's OWNER gains 2 CP.
This is BAD for Baal's controller — CP is a loss condition.
Card text says +3 DEF (not +1 DEF as noted in task prompt).
Target lane from choices["lane"].
Applies status to all allied demons in that lane (including Baal if in that lane).
Targets: None
Choices: {"lane": int}
"""
from engine.scoring import gain_cp
# CRITICAL: Baal's OWNER gains 2 CP — this is BAD (confusion #11)
state = gain_cp(state, demon.owner, 2)
target_lane = choices.get("lane", demon.lane) if choices else demon.lane
allied_in_lane = [
d for d in state.demons
if d.owner == demon.owner and d.lane == target_lane
]
# Re-locate demon reference after potential state copies
baal_in_new = next(
(d for d in state.demons if d.instance_id == demon.instance_id), demon
)
for ally in allied_in_lane:
state = apply_status(state, baal_in_new, ally, "pwr", 3)
state = apply_status(state, baal_in_new, ally, "def", 3)
state = apply_status(state, baal_in_new, ally, "ap_cost", -1)
return state
register_ability("064", 0, _baal_praise)
Glory — 0 AP
Glory: 0 AP - b, 1x: Gain 2 CP. Ready All Allied Demons in Target Lane.
Engine Implementation
def _baal_glory(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#064 Baal — Glory
0 AP, (ready), 1x: Gain 2 CP. Ready All Allied Demons in Target Lane.
CRITICAL (confusion #11): "Gain 2 CP" means Baal's OWNER gains 2 CP.
This is BAD for Baal's controller — CP is a loss condition.
Target lane from choices["lane"].
Readies all allied demons in that lane (including Baal if in that lane).
Targets: None
Choices: {"lane": int}
"""
from engine.scoring import gain_cp
# CRITICAL: Baal's OWNER gains 2 CP — BAD (confusion #11)
state = gain_cp(state, demon.owner, 2)
target_lane = choices.get("lane", demon.lane) if choices else demon.lane
new_state = copy.deepcopy(state)
for d in new_state.demons:
if d.owner == demon.owner and d.lane == target_lane:
d.state = DemonState.READIED
return new_state
register_ability("064", 1, _baal_glory)