Marchosias
The Wolf Knight
Unit #087
| HP | PWR | CP | Speed | Range | Tier |
|---|---|---|---|---|---|
| 15 (+9) | 2 | 4 (+3) | Fast | Local | B |
Abilities
Passive
c: When an Enemy action targets a Local Allied Demon, if Marchosias is a Valid target, you may change 1 target to Marchosias.
Engine Implementation
def _marchosias_target_guard_slot(state, demon) -> dict:
"""Slot marker for Marchosias ability index 0.
The redirect logic lives in apply_marchosias_target_redirect() and is
hooked into execute_ability and the attack path in game_loop.
"""
return {}
register_passive("087", 0, _marchosias_target_guard_slot)
Shield Slam — 2 AP
g: Shield Slam: 2 AP - a: Deal k Fixed Damage to Target Local Demon. e: The targeted Demon has -2k. Marchosias has +3n.
Engine Implementation
def _marchosias_shield_slam(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#087 Marchosias — Shield Slam
Quick, 2 AP, (exhaust): Deal this demon's PWR Fixed Damage to Target Local Demon.
Status: The targeted Demon has -2 PWR. Marchosias has +3 DEF.
Status expires end of current main phase.
CRITICAL: Fixed Damage bypasses DEF entirely (deal_fixed_damage).
PWR-scaling uses get_effective_pwr() which includes fusion bonus.
Two statuses: target gets -2 PWR; Marchosias (self) gets +3 DEF.
Target must be Local — enforced by targeting logic, not handler.
Targets: [target_local_demon]
"""
target = targets[0]
pwr = get_effective_pwr(state, demon)
state = deal_fixed_damage(state, target, pwr)
# Relocate target in new state (deal_fixed_damage deepcopied state)
target_in_new = next(
(d for d in state.demons if d.instance_id == target.instance_id), None
)
if target_in_new is not None:
state = apply_status(state, demon, target_in_new, "pwr", -2)
# Relocate Marchosias in new state for self-buff
marchosias_in_new = next(
(d for d in state.demons if d.instance_id == demon.instance_id), None
)
if marchosias_in_new is not None:
state = apply_status(state, marchosias_in_new, marchosias_in_new, "def", 3)
return state
register_ability("087", 1, _marchosias_shield_slam)