✅ Lix tetrax free march
| Category | Ability |
| Status | Passing |
| Test | tests/test_abilities_passive.py::test_lix_tetrax_free_march |
Lix Tetrax's March costs 0 AP (Without Cost passive).
Preconditions
-
Lane 0: P1's Lix Tetrax (#050) — READIED
-
P1 has 1 AP
-
Lix Tetrax passive idx=1: march_ap_cost -1 (makes March free)
Action
- Call march_demon(state, lix_tetrax, target_lane=1)
from engine.operations import march_demon
state = make_game_state()
state.players[Side.PLAYER_1].ap = 1
lix = make_demon("050", lane=0, owner=Side.PLAYER_1)
state = place_demon(state, lix)
lix_on_field = state.demons[0]
new_state = march_demon(state, lix_on_field, 1)
lix_after = next(d for d in new_state.demons if d.unit_id == "050")
Expected Postconditions
-
Lix Tetrax is now in lane 1
-
P1 AP unchanged at 1 (March cost 0 after passive)
Assertions
assert lix_after.lane == 1, (
f"Expected Lix Tetrax in lane 1 after march, got lane {lix_after.lane}"
)
assert new_state.players[Side.PLAYER_1].ap == 1, (
f"Expected P1 AP=1 (free march, no AP spent), got {new_state.players[Side.PLAYER_1].ap}"
)