Skip to main content

✅ Furcas can be moved by ally

CategoryAbility
StatusPassing
Testtests/test_abilities_passive.py::test_furcas_can_be_moved_by_ally

An allied demon moves Furcas — movement is allowed.

Preconditions

  • Lane 1: P1's Furcas (#059) (post-move, now in lane 2)

  • Lane 0: P1's Murmur (#002) (allied mover)

  • DEMON_MARCHED fires: source=Murmur (ally), target=Furcas, value=1 (pre-move lane)

Action

  • Fire DEMON_MARCHED event: source=Murmur (ally), target=Furcas
from engine.events import GameEvent, EventType, fire_event

state = make_game_state()
furcas = make_demon("059", lane=2, owner=Side.PLAYER_1)
murmur = make_demon("002", lane=0, owner=Side.PLAYER_1) # allied
state = place_demon(state, furcas)
state = place_demon(state, murmur)

furcas_on_field = next(d for d in state.demons if d.unit_id == "059")
murmur_on_field = next(d for d in state.demons if d.unit_id == "002")

event = GameEvent(
event_type=EventType.DEMON_MARCHED,
source=murmur_on_field, # allied mover
target=furcas_on_field,
value=1, # pre-move lane
side=Side.PLAYER_1,
lane=2,
)
new_state = fire_event(state, event)

furcas_after = next(d for d in new_state.demons if d.unit_id == "059")

Expected Postconditions

  • Furcas stays at lane 2 (ally move is allowed)

Assertions

assert furcas_after.lane == 2, (
f"Expected Furcas to remain at lane 2 (ally move allowed), got lane {furcas_after.lane}"
)