Concepts

Rules and the anti-chase laws

The board is ten by ten with two lakes, so 92 squares can hold a piece. Red sets up on the first four ranks, Blue on the last four, and Red moves first. A move shifts one piece one square orthogonally; a Scout may move any number of empty squares in a straight line. Moving onto an opponent's square is an attack: both types are revealed, the higher rank wins, equal ranks both die, the Spy beats the Marshal only when attacking, and only a Miner survives a Bomb. Capturing the Flag wins.

The Major on e5 can attack the revealed Miner on e6; the Scout on f4 can run the open file to f9 but is then revealed.

Two further rules matter for engines because they are the only things that stop a stronger piece from chasing a weaker one forever, and because they need history. The paper's simulator tracks the last four positions of the last-acting piece for the first and keeps a board history for the second.

The two-square rule

A piece may not cross the same square boundary on more than three consecutive turns of its owner. Moving from e4 to e5, back to e4, and to e5 again is allowed; the fourth crossing back to e4 is not, whatever the opponent did in between. The ISF text says the same thing as "not more than 3 times non-stop between the same two squares", and adds that a Scout is considered to occupy every square it passes over, which is why the engine reasons about boundaries rather than squares: a Scout that went e2 to e6, e6 to e3 and e3 to e5 has crossed the boundary between e4 and e5 three times and may not cross it again on its next turn, whether it moves one square or five.

64Fourth crossing: illegalBoundary crossings in a row×Scouts count boundaries: a long move backover the same line counts as well.
The fourth crossing of the same boundary is illegal.

Attacks count as moves. The engine keeps each player's last three moves and a counter of how many were made consecutively by the same piece, which is enough to decide the rule in a few comparisons.

The continuous-chase rule

Human rules call this the more-squares rule and describe it informally. The engine uses the paper's definitions. A threat is a move that ends adjacent to an opponent's movable piece without attacking. An evade moves the threatened piece to a square not adjacent to the threatening piece. A chase is an unbroken alternation of threats and evades. While a chase is running, the chasing player may not make a threat that recreates a position that already occurred after a threat of this chase, unless the threatening piece is simply returning to the square it left on its previous turn. That exception hands the two-move oscillation to the two-square rule, which bounds it at three crossings.

104abcdThreat 13 would repeat position 1: refusedPositions after each threat (chaser · chased)b4·c4c4·d4d4·d3d3·d2d2·d1d1·c1c1·b1b1·a1a1·a2a2·a3a3·a4a4·b4Returning to the square just left is exempt; see the two-square rule.Any other move by either side ends the chase and clears the list.
Chasing a piece around a lake reaches the twelfth new position and the thirteenth threat is refused.

Positions are compared by a Zobrist key of piece placement. The engine remembers the last 32 after-threat positions of the current chase, which covers a full lap around a lake with room to spare; a chase longer than that keeps its most recent 32 positions, a limit that has never been reached in testing and that the record of any run will show if it is.

Draws and losses without a battle

A player with no legal move on their turn loses; if the opponent would also have no legal move, the game is drawn. After consecutive moves without a battle the game is drawn, with on the Strategus platform where the Ataraxos series was played and in the paper's training runs, which the authors found produced stronger play than training under 200. A 4,000-move cap exists for safety and, paired with the 100-move rule, essentially never fires.

Every rule is covered by a test in crates/engine/tests, including the full lap around the lake above and the interaction between the chase exception and the two-square limit. The next page is about how the engine makes all of this fast.