Horde Xiangqi is Chinese chess where one side has nothing but soldiers: a horde of them, no general, against the full army. The horde wins by checkmate; the army wins by taking the last soldier. We designed it and played every version of it with an engine before building anything. None of them is a game.

The soldier’s move is the whole design space; count, start rank, shape and clock are dials. With xiangqi’s own soldier the army wins every game from every start on its own side of the river, by one trick. Give the soldier its crossed-river move from the first step and the trick is gone, but the game becomes a siege that three times in four nobody wins. Below the river the block can’t defend itself; above it the army can’t attack it.

HORDE CHESS: 36 PAWNS, NO KINGHORDE XIANGQI: 36 VETERANS, NO GENERAL楚 河 漢 界
Left, the parent as Lichess plays it: 36 pawns against the full army. Right, the closest thing to a game we found: 36 veteran soldiers on ranks 2 to 5 (the crossed soldier’s move from the first step, shown with the promoted-soldier piece), against the full xiangqi army. The horde wins by checkmate, the army by taking the last soldier.

The rules

Horde chess is the parent: 36 pawns and no king against a normal army, on Lichess since 2015. Nobody has put it on the xiangqi board before (the search is in the notes at the end). The port keeps as much of xiangqi as it can.

  • Red is the horde: soldiers only, no general. Red moves first. Black is the standard army.
  • Red wins by checkmate. Black wins by capturing every red piece. There is no check against the horde and no facing rule, since only one general exists.
  • The side to move with no legal move loses, as in xiangqi. (Lichess Horde calls it a draw; the numbers below say how much that matters.)
  • Threefold repetition draws; so does a run of 60 or 120 plies without a capture.
  • Standard soldiers move as in xiangqi: one point forward, sideways only after crossing the river, never backward. Veteran soldiers have the crossed soldier’s move from their first step. The army’s five soldiers stay standard either way.

The design space

Five dials. A design is a soldier rule and a start array; twenty-four were played, and eight of them again under a second clock.

dial settings tried
the soldier’s move standard; veteran (sideways from move one)
how many soldiers 18, 27, 31, 32, 36, 40, 45
where the block starts at the back (rank 1 up), forward (rank 2 or 3 up), across the river (front rank on rank 6)
the block’s shape full rows; the parent’s shape (rows plus paired outposts); xiangqi’s five soldier points
terminal rules no-capture clock of 60 or 120 plies; stalemate as a loss (xiangqi) or a draw (the parent)

Every design ran on stock Fairy-Stockfish with a twelve-line configuration and no engine code, refereed by a rules kernel that agreed with the engine’s move generator before any game was read (the gate and the instruments are under “How to trust the numbers”). The tally under each board is four games from that array, the engine against itself at four search budgets, no randomness; a click opens the game at a million nodes. The engine can’t use its xiangqi neural net without a red general on the board, so it plays classical evaluation, which prices the standard start at 22 pawns against the horde. It plays the game anyway.

Standard soldiers: the chariot eats the horde from behind

18, RANKS 1-2楚 河 漢 界▶ WATCH THE GAMEARMY 4-01M GAME: ARMY WINS BY EXTINCTION, 4618, RANKS 3-4楚 河 漢 界▶ WATCH THE GAMEARMY 4-01M GAME: ARMY WINS BY EXTINCTION, 7027, RANKS 1-3楚 河 漢 界▶ WATCH THE GAMEARMY 4-01M GAME: ARMY WINS BY EXTINCTION, 8427, RANKS 2-4楚 河 漢 界▶ WATCH THE GAMEARMY 4-01M GAME: ARMY WINS BY EXTINCTION, 10827, RANKS 4-6楚 河 漢 界▶ WATCH THE GAME3 ARMY WINS, 1 DRAW1M GAME: ARMY WINS BY EXTINCTION, 15436, RANKS 1-4楚 河 漢 界▶ WATCH THE GAMEARMY 4-01M GAME: ARMY WINS BY EXTINCTION, 134▶ ANNOTATED36, RANKS 2-5楚 河 漢 界▶ WATCH THE GAMEARMY 4-01M GAME: ARMY WINS BY EXTINCTION, 18436, RANKS 3-6楚 河 漢 界▶ WATCH THE GAME2 HORDE WINS, 2 ARMY WINS1M GAME: HORDE WINS BY MATE, 195▶ ANNOTATED45, RANKS 1-5楚 河 漢 界▶ WATCH THE GAME2 ARMY WINS, 1 HORDE WIN, 1 DRAW1M GAME: ARMY WINS BY EXTINCTION, 19832, XIANGQI’S FIVE POINTS楚 河 漢 界▶ WATCH THE GAMEARMY 4-01M GAME: ARMY WINS BY EXTINCTION, 12231, PARENT SHAPE楚 河 漢 界▶ WATCH THE GAMEARMY 4-01M GAME: ARMY WINS BY EXTINCTION, 11240, PARENT SHAPE楚 河 漢 界▶ WATCH THE GAMEARMY 4-01M GAME: ARMY WINS BY EXTINCTION, 158
Every array with standard soldiers, played four times at four search budgets (150,000 to 500,000 nodes a move), with the engine’s million-node game under the tally. Nine arrays are army wins by extinction four times out of four. The two that start across the river begin in contact with the army’s soldiers, and the five-deep block of 45 sometimes crosses before the chariot is finished; those three cells split.

Each array was played four times at four search budgets; the line under the board is the tally. Click any board to watch its game at a million nodes. The ones marked ▶ open with notes.

Nine of the twelve arrays go to the army four games out of four, by one mechanism.

MOVE 25: THE f-FILE IS OPEN楚 河 漢 界15 MOVES LATER: 11 SOLDIERS GONE楚 河 漢 界
From the million-node game on the parent’s array. Black’s chariot drops through the f-file, which the horde had emptied by advancing, to the first rank. No red soldier attacks backward, so nothing can touch it, and it takes a soldier a move from behind. Fifteen moves later 11 soldiers are gone and the army has lost nothing for them. Every standard-soldier game ends this way.

A standard soldier covers only the point in front of it, so the horde is nine columns rather than a wall. The moment a column empties, a chariot drops through it to the first rank and eats the block from behind at a soldier a move, and nothing in the horde attacks backward. Shape changes nothing: an outpost is a target, not cover.

The other three cells are one exception: enough soldiers get across before the chariot is done. 45 on ranks 1 to 5 is a five-deep block and split two army wins, one horde mate, one draw. The two rows that start across the river begin in contact; 27 still loses, and 36 is a coin flip (three horde, two army, two draws over seven budgets) that skips the march and previews the veteran game.

soldiers start four games, 150,000 to 500,000 nodes 1 million 5 million
18 ranks 1-2 army 4-0, 50 to 62 plies army by extinction, 46  
18 ranks 3-4 army 4-0 army by extinction, 70  
27 ranks 1-3 army 4-0 army by extinction, 84  
27 ranks 2-4 army 4-0 army by extinction, 108  
27 ranks 4-6 army 3, draw 1 (repetition, 393) army by extinction, 154  
36 ranks 1-4 army 4-0 army by extinction, 134 army by extinction, 156
36 ranks 2-5 army 4-0 army by extinction, 184 army by extinction, 146
36 ranks 3-6 horde 2 (smother 207, mate 233), army 2 horde by mate, 195 draw by repetition, 104
45 ranks 1-5 army 2, horde 1 (mate, 287), draw 1 (clock, 354) army by extinction, 198  
32 xiangqi’s five points army 4-0 army by extinction, 122 army by extinction, 106
31 parent shape army 4-0 army by extinction, 112  
40 parent shape army 4-0 army by extinction, 158  

Four games per cell at 150,000, 200,000, 300,000 and 500,000 nodes a move with a 120-ply no-capture clock, every move the engine’s first choice; then the single game at a million and at five million (60-ply clock). Empty cells were not run.

Veteran soldiers: the horde holds, and the siege is a draw

The chariot’s road exists because a standard soldier attacks nothing beside it, and xiangqi already has a soldier that does: the crossed soldier, which moves and captures one point forward or sideways. Veteran soldiers are a horde that starts promoted. Every horde soldier has that move from its first step, nothing else changes, and a player learns nothing new. It removes the march from the game and starts the siege at the back rank.

18, RANKS 1-2楚 河 漢 界▶ WATCH THE GAME2 ARMY WINS, 2 DRAWS1M GAME: ARMY WINS BY EXTINCTION, 25818, RANKS 3-4楚 河 漢 界▶ WATCH THE GAME3 ARMY WINS, 1 DRAW1M GAME: ARMY WINS BY EXTINCTION, 30827, RANKS 1-3楚 河 漢 界▶ WATCH THE GAME4 DRAWS1M GAME: DRAW BY CLOCK, 45927, RANKS 2-4楚 河 漢 界▶ WATCH THE GAME4 DRAWS1M GAME: DRAW BY CLOCK, 49027, RANKS 4-6楚 河 漢 界▶ WATCH THE GAME4 DRAWS1M GAME: DRAW BY CLOCK, 16636, RANKS 1-4楚 河 漢 界▶ WATCH THE GAME4 DRAWS1M GAME: DRAW BY CLOCK, 1,058*▶ ANNOTATED36, RANKS 2-5楚 河 漢 界▶ WATCH THE GAME3 HORDE WINS, 1 DRAW1M GAME: HORDE WINS BY SMOTHER, 435▶ ANNOTATED36, RANKS 3-6楚 河 漢 界▶ WATCH THE GAME3 DRAWS, 1 HORDE WIN1M GAME: DRAW BY REPETITION, 70345, RANKS 1-5楚 河 漢 界▶ WATCH THE GAME3 DRAWS, 1 HORDE WIN1M GAME: DRAW BY CLOCK, 1,102*32, XIANGQI’S FIVE POINTS楚 河 漢 界▶ WATCH THE GAME4 DRAWS1M GAME: DRAW BY CLOCK, 44931, PARENT SHAPE楚 河 漢 界▶ WATCH THE GAME4 DRAWS1M GAME: DRAW BY CLOCK, 24740, PARENT SHAPE楚 河 漢 界▶ WATCH THE GAME3 DRAWS, 1 HORDE WIN1M GAME: DRAW BY CLOCK, 1,016*▶ ANNOTATED
The same twelve arrays with veteran soldiers (the crossed soldier’s move from the first step), four games at four budgets and the million-node game, 120-ply no-capture clock. 48 games: 37 draws, six horde wins, five army wins. The army wins only against 18 soldiers; from 27 up the game reaches the two-chariot ending and stops, and every horde win needed both chariots to fall. *Three million-node games ran into the harness’s 1,000-ply cap and were played on from that position with the clock in force; the ply shown is where the clock ended them.

Four games per array at four search budgets; the tally is under each board. Click any board to watch its game at a million nodes.

This closes the road. A veteran column attacks the points beside it, so the chariot can’t sit next to it for free, and the army’s capture rate drops from one soldier a move to one every 60 to 100 plies. The horde becomes a side, and between equals the game becomes a siege: 48 games, 37 draws. The army wins only against 18 soldiers, and from 27 up it never wins.

The ending. The horde marches, takes the army’s cannons and elephants on the way in, and arrives at the palace to find a general with two chariots waiting. From there the soldiers can’t force their way past the chariots, and the chariots can’t eat a block of soldiers that guard each other. Start rank and shape decide how much of the army the horde takes on the way, and nothing else. The parent’s 31 shows the other face of the same rule: four games drew at 155 to 245 plies with no soldier across the river, because a block that has not moved cannot be attacked and a block that moves loses the soldier that moved.

PLY 754: TWELVE SOLDIERS, K + A + 2R楚 河 漢 界PLY 1,000: TWO MORE SOLDIERS GONE楚 河 漢 界
The ending every veteran game above 27 soldiers reaches, here from the 40-soldier array at a million nodes a move. Twelve soldiers against a general, an advisor and two chariots. The soldiers cannot force a way past the chariots, and the chariots take a soldier only when one steps out of the block: two in the next 246 plies, at 822 and 896. Played on from the left position at five million nodes a side for 200 more plies: one capture. At that rate the army needs another thousand plies to finish.

I took the 40-soldier ending at ply 754 and let the engine play it for 200 more plies at 5 million nodes a side: one capture, and its own evaluation of the horde’s advantage sliding from 2.3 pawns to 0.7. At a million nodes the army had managed two captures in the same stretch, then none in the next 120 and the clock ended it. It is winning that ending at a soldier every eighty plies, which is to say it is not winning it.

The win. The 36 that starts a rank forward took both chariots and smothered the bare general at ply 435: no move, no check, which xiangqi scores as a loss. It won four of its five games, the one array where the horde is the favourite: a rank closer to the river, it arrives with more of the army already gone and enough soldiers left to trade for the chariots. The horde’s other wins are the same finish from bigger blocks, all past ply 390, and four of its six are the smother.

PLY 435: NO MOVE, NO CHECK, RED WINS楚 河 漢 界
The horde’s finish, from the million-node game on the array it wins four times in five (36 veterans on ranks 2 to 5). Both chariots fell late, the general is bare, and every point it could step to is covered by a soldier that does not check it. Xiangqi scores the side with no legal move as the loser; under the parent’s rule this is a draw, and about half of the horde’s wins against weak play go the same way.
soldiers start four games, 150,000 to 500,000 nodes 1 million army pieces lost
18 ranks 1-2 army 2, draw 2 (clock 653, repetition 616) army by extinction, 258 plies 9
18 ranks 3-4 army 3, draw 1 (repetition, 588) army by extinction, 308 10
27 ranks 1-3 4 draws, clock, 372 to 456 draw on the clock, 459 7
27 ranks 2-4 4 draws, clock, 354 to 488 draw on the clock, 490 8
27 ranks 4-6 4 draws, clock, 137 to 233 draw on the clock, 166 9
36 ranks 1-4 4 draws, clock, 590 to 900 draw on the clock, 1,058*: 9 soldiers vs general + 2 chariots 13
36 ranks 2-5 horde 3 (mate 473, smother 475, mate 569), draw 1 (repetition, 1,033) horde by smother, 435 15
36 ranks 3-6 horde 1 (smother, 395), 3 draws, clock, 714 to 966 draw by repetition, 703: 9 soldiers vs general + 2 chariots 13
45 ranks 1-5 horde 1 (smother, 961), 3 draws, 1,027 to 1,098 draw on the clock, 1,102*: 11 soldiers vs general + elephant + 2 chariots 12
32 xiangqi’s five points 4 draws, 293 to 394 draw on the clock, 449 7
31 parent shape 4 draws, clock, 155 to 245, no soldier across draw on the clock, 247 5
40 parent shape horde 1 (smother, 713), 3 draws, 694 to 1,062 draw on the clock, 1,016*: 10 soldiers vs general + advisor + 2 chariots 12

Four games per cell at 150,000, 200,000, 300,000 and 500,000 nodes a move, every move the engine’s first choice, 120-ply no-capture clock, 2,000-ply cap that no game reached; then the single game at a million nodes. *Three million-node games ran into the harness’s 1,000-ply cap and were played on from that position with the clock in force, at 200,000 nodes; no capture followed, and the ply shown is where the clock ended them. Army pieces lost is from the million-node game.

The terminal rules

Three ways a game here stops without a winner, and they are not the same thing. Repetition: the same position with the same side to move three times; a draw. The clock: a run of plies with no capture, 60 or 120 of them; a draw, and a soldier stepping forward does not reset it. The cap: the harness stopped the game at 400, 1,000 or 2,000 plies; not a rule of the game, so a capped game is unfinished, not drawn. Three million-node veteran games hit the 1,000 cap and were played on until the clock ended them, and no four-budget game reached 2,000, so every result in the grids is one of the first two.

Two dials that don’t change how anything moves, both settled by re-scoring games rather than replaying them.

The clock. Xiangqi’s no-capture rule is 60 plies. With standard soldiers it fired once in 48 games. With veterans it is the usual ending: 30 of the 37 draws, the other seven by repetition. At 60 plies it cuts live games: the horde’s million-node win is unfinished at a 400 cap, and the closest game draws at 360 with the march still going. Everything here runs at 120 for that reason. The clock is also a rule the engine plays by (it goes into the engine’s variant definition), so a game under a 60-ply clock and one under 120 are different games from ply 2, not one game cut at different points.

Stalemate. Under the parent’s rule a general with no move and no check is a draw. Re-scoring every game in the lab under that rule: five of the horde’s seven equal-strength wins with veterans become draws, and one of its four with standard soldiers; 20 of its 35 wins against a random army with standard soldiers, and 16 of 38 with veterans, become draws; five of its ten ladder wins go the same way. The smother is the horde’s mate about half the time, and the parent’s rule would take it away.

Why the soldier fails, and what a different soldier would need

The game has two phases, and xiangqi’s soldier fails in each of them differently.

Below the river, the block can’t defend itself. A standard soldier attacks only the point ahead of it. So the horde is nine columns, not a wall: a chariot beside a column, or behind it, is untouchable, and any file that empties is a road to the back rank. Every start of 40 or fewer on the horde’s own side is decided here, by that one chariot, four games in four. At 45 the block is deep enough to outlast it some of the time, and that cell splits.

Above the river, the block can’t move. A crossed soldier (or a veteran) attacks sideways too, so the block guards itself where it stands. But it protects only the points its soldiers could step to, never the point ahead of a neighbour. The soldier that steps forward lands on a point nobody covers and is a free capture until a neighbour steps up beside it. So the block can advance only as a whole rank, nine moves per rank, while the army waits, and any soldier that moves early is picked off. The army, for its part, can’t attack a block that hasn’t moved. Ten of the twelve veteran designs end there, in every game or all but one: a general and two chariots in the palace, a block of soldiers outside it, and nothing either side can do.

CHESS: AFTER e4-e5, d4 COVERS e5SOLDIERS: AFTER e4-e5, NOTHING COVERS e5楚 河 漢 界VETERANS: STILL NOTHING COVERS e5楚 河 漢 界
The same step on three boards: the middle piece has just moved one point forward, and the green rings are the points its side now protects. A chess pawn captures diagonally, so the pawn on d4 covers e5 and the pawn that arrived there is safe from the rook: pawns advance as chains. A xiangqi soldier captures the way it moves, straight ahead, so d4 and f4 cover d5 and f5 and nothing covers e5; the chariot takes the soldier for free. Veteran soldiers (right) attack sideways too, which makes the block guard itself where it stands, and still nothing covers the point a soldier steps to. The horde can hold its ground and cannot leave it.

A chess pawn is built differently. It captures diagonally, so the pawn on d4 already covers e5 before the e-pawn steps there: pawns advance as chains, one at a time, each landing protected, and a chain can be undermined from the base. That is why Horde works in chess and why chess players never have to think about it. On the xiangqi board the river is a cliff: no cover on the way, total cover once there, and no setting of count, start rank, shape or clock changes that. Those are the dials we turned. The one we left alone, past the veteran, is the soldier itself.

That is where the next attempt starts. The property the horde is missing is cover on the way: a soldier that protects the point its neighbour is about to step to, so the block can advance one piece at a time instead of one rank at a time. Anything that supplies it is a candidate, and they range from small to large: a soldier that captures diagonally forward but still moves straight (the point nobody covers is covered, and it is still not a pawn), a double step on the first move, two soldiers moving per turn as in the old Five Tigers handicap, a second promotion at the far rank, or the chess pawn outright, which turns this into Horde chess on a bigger board. We stopped at the veteran because it is the only one of these that xiangqi already has; each of the others is a new piece, and a new piece is a different game with its own post. The rules are data in the lab, so any of them is one line and an afternoon of engine time, and the tallies here are the baseline to beat.

Run it yourself

The whole variant is a stanza in Fairy-Stockfish’s variants.ini. This is the parent’s array with veteran soldiers and the 120-ply clock; for standard soldiers drop the customPiece1 line and write P for V in the start position.

[hordexiangqi:xiangqi]
startFen = rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/VVVVVVVVV/VVVVVVVVV/VVVVVVVVV/VVVVVVVVV w - - 0 1
customPiece1 = v:fsW
extinctionValue = loss
extinctionPieceTypes = *
flyingGeneral = false
chasingRule = none
stalemateValue = loss
perpetualCheckIllegal = false
nFoldValue = draw
nMoveRule = 60
stockfish check horde.ini            # parses the stanza
setoption name VariantPath value horde.ini
setoption name UCI_Variant value hordexiangqi
position startpos
go nodes 1000000

Two lines matter and are easy to leave out. chasingRule = none is mandatory: the engine’s chase detector reads the missing general’s square on a kingless side. flyingGeneral = false changes nothing and documents a fact: the engine keys the facing rule on its king piece and silently switches it off when one side has none.

How to trust the numbers

Three checks stand behind every cell above, in the order they were run.

The engine plays these rules. A rules kernel of mine (the same one that ran Atomic Xiangqi, with hooks for a side with no general, a win by extinction, and the veteran soldier) referees every game: the engine proposes a move, the kernel validates and applies it, and an engine quietly playing different rules aborts the run instead of producing a record of a different game. Before any game was read, the two had to agree on every legal move: perft to depth 3 from each array, nine hand-built positions compared as exact move sets, and 300 positions from random play. Zero disagreements, both soldier rules, all twelve arrays.

The engine understands the game. At 100,000 nodes it beat a random mover 60-0 with standard soldiers and 78 of 80 with veterans. Ten times the search budget beat a tenth of it 17-1-2 on the standard forward array and 11-0-9 on veterans. One footnote: on the parent’s array with standard soldiers, ten times the budget scored only 55%, because every decided game went to the army whichever budget held it; the seat was the result, not the search.

How deep the search is. Node budgets, not time, so nothing depends on the machine: 200,000, 1 million and 5 million nodes a move, reaching about depth 12, 15 to 20, and 24 to 33 on these positions. Play is not saturated at these budgets (the across-the-river cell with standard soldiers went draw, army, horde, horde, army, horde, draw across seven). The standard-soldier verdict holds at every budget tried, by the same mechanism, and that claim is safe. The siege is the position class search is worst at: a hundred-ply plan is invisible at depth 20, and classical evaluation has no idea what the ending is worth (it scored the fortress at +2.3 for the horde while the army was eroding it). So the draw claim is weaker than the loss claim, and a human with a plan might do better on either side than the engine did. The lab records the depth reached on every ply.

One game is one sample. Every cell was played four times, at 150,000, 200,000, 300,000 and 500,000 nodes a move, every move the engine’s first choice and no random openings, so the line under each board is a rate and the clickable million-node game is one of five, not the verdict. A deterministic engine replays the same game from the same start, so the budgets are what make the four games different, and the script refuses a cell where two of them came out identical (none did). Where a cell splits, the split is the result. One more caveat on the veteran numbers: the engine sees the veteran as a custom piece with a value estimated from its mobility, not tuned, so its judgement of a soldier-for-piece trade is rougher than for the standard soldier. The fortress it cannot break at 5 million nodes is real; the material it gave up on the way in may not be best play.

Where it stands

A variant is a game, for this series, if it clears three bars under measured play: it is decided between good players rather than drawn by default; neither side wins from the start; and both seats have something to do. Horde Xiangqi clears none of them in any design tried.

  • Standard soldiers: the army wins from every start of 40 or fewer on its own side of the river, 36 games out of 36, by one trick. Decided, but from move one. At 45, or starting across the river, the cell is a coin flip settled by the opening exchanges.
  • Veteran soldiers: a siege that two good players draw 37 times in 48, over four hundred to a thousand plies. The horde wins six, four of them by smother, and the army wins five, all against 18 soldiers. Not decided, and neither seat has a plan: the army’s best play is to sit in the palace and wait, the horde’s is to shuffle a block one point at a time. The one array the horde is favoured in (36 on ranks 2 to 5, four wins in five) is the same siege with a better score, not a different game.
  • Against weak play the horde is dangerous (at 100,000 nodes it beat a random army 30 of 30, 19 by smother), and people are weaker than a million-node search. That makes it a trap, not a game.

What would reopen it: a human result, a soldier rule that gives the block cover on the way (the candidates are listed above), or a chariot-fall rate well above the six in 48 measured here. Nothing so far points that way for xiangqi’s own soldier. The soldier is the design space, the river is a cliff in it, and the next design has to change the soldier.

Prior art: Fairy-Stockfish’s variant file, PyChess, Lichess, Chess.com’s official list, PlayStrategy, Ludii, both Wikipedias’ xiangqi-variant pages, chessvariants.com’s 9x10 index, a Zhihu list of 231 folk xiangqi variants and the nine soldier-named ones with rules on Baidu Baike: none is a horde. Tieba’s folk boards and Chess.com’s user variants I couldn’t read, so this is a thorough negative, not an exhaustive one. Xiangqi’s own lopsided games (Manchu chess, Five Tigers, the nine-piece handicap) run the other way, taking pieces from one side, soldiers first. Horde chess descends from BrainKing’s Horde Chess (2002) and Lord Dunsany’s “Pieces against Pawns” (1942); Horde is 部落 in Chinese.

Resources:

  • The horde’s win, annotated - 36 veterans on ranks 2 to 5 take both chariots and smother the general at ply 435
  • horde-xiangqi - the evidence: the 24 stanzas, all 387 engine games, the referee kernel, and npm run verify, which replays every game against the rules and recomputes the tallies
  • Variant lab - the harness that produced them: the Fairy-Stockfish gate and the commands
  • scalachess horde commits - the 2015 rules as Lichess settled them
  • Fairy-Stockfish - the engine; the whole variant is a variants.ini stanza with extinctionValue, customPiece1 = v:fsW and chasingRule = none
Soldiers left
Across the river
Army pieces
Plies since a capture