Skip to main content

Amun

The Overwhelming Ram

Unit #086

HPPWRCPSpeedRangeTier
12 (+6)4 (+2)3 (+2)FastLocalC

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