Amun
The Overwhelming Ram
Unit #086
| HP | PWR | CP | Speed | Range | Tier |
|---|---|---|---|---|---|
| 12 (+6) | 4 (+2) | 3 (+2) | Fast | Local | C |
Abilities
Charge — 1 AP
g: Charge: 1 AP - a, 1x: Move Target Local Demon 1 or 2 Lanes Away From Amun. Then, move Amun to the targeted Demon's Lane. e: Amun's and the targeted Demon's next action has -1 AP Cost and ignores a and b costs.
Engine Implementation
def _amun_charge(
state: GameState, demon: DemonInstance, targets, choices, rng
) -> GameState:
"""#086 Amun — Charge
Quick, 1 AP, (exhaust), 1x: Move Target Local Demon 1 or 2 Lanes Away From Amun.
Then, move Amun to the targeted Demon's Lane. Status: Amun's and the targeted
Demon's next action has -1 AP Cost and ignores (exhaust) and (ready) costs.
choices["push_lanes"] = number of lanes to push target (1 or 2).
Amun then moves to the target's new lane.
Applies "ap_cost" -1 and "ignore_exhaust" + "ignore_ready" statuses to both.
"""
from engine.status_effects import apply_status
if not targets:
return state
target = targets[0]
push = choices.get("push_lanes", 1) if choices else 1
push = max(1, min(push, 2))
# Determine push direction: away from Amun
if target.lane > demon.lane:
new_target_lane = min(2, target.lane + push)
elif target.lane < demon.lane:
new_target_lane = max(0, target.lane - push)
else:
# Same lane — push to adjacent
new_target_lane = min(2, target.lane + push)
# Move target
new_state = copy.deepcopy(state)
t_in_state = next(
(d for d in new_state.demons if d.instance_id == target.instance_id), None
)
if t_in_state is None:
return state
t_in_state.lane = new_target_lane
# Move Amun to target's new lane
amun_in_state = next(
(d for d in new_state.demons if d.instance_id == demon.instance_id), None
)
if amun_in_state is not None:
amun_in_state.lane = new_target_lane
state = new_state
# Apply statuses to Amun and target
amun_current = next(
(d for d in state.demons if d.instance_id == demon.instance_id), None
)
t_current = next(
(d for d in state.demons if d.instance_id == target.instance_id), None
)
if amun_current is not None:
state = apply_status(state, demon, amun_current, "ap_cost", -1)
state = apply_status(state, demon, amun_current, "ignore_exhaust", 1)
state = apply_status(state, demon, amun_current, "ignore_ready", 1)
if t_current is not None:
state = apply_status(state, demon, t_current, "ap_cost", -1)
state = apply_status(state, demon, t_current, "ignore_exhaust", 1)
state = apply_status(state, demon, t_current, "ignore_ready", 1)
return state
register_ability("086", 0, _amun_charge)