Prevent gating candidates from moving in holdingless seirawan
authorH.G.Muller <hgm@hgm-xboard.(none)>
Wed, 1 Jan 2020 19:00:32 +0000 (20:00 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Wed, 1 Jan 2020 19:15:58 +0000 (20:15 +0100)
The move generator now ignores pieces on the extreme ranks when
these are used as holdings.

moves.c

diff --git a/moves.c b/moves.c
index 5c708cd..726dfd2 100644 (file)
--- a/moves.c
+++ b/moves.c
@@ -757,10 +757,11 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure,
     int rf, ff;
     int i, j, d, s, fs, rs, rt, ft, m;
     int epfile = (signed char)board[EP_STATUS]; // [HGM] gamestate: extract ep status from board
+    int dead = (gameInfo.variant == VariantSChess && !gameInfo.holdingsSize ? 1 : 0);
     int promoRank = gameInfo.variant == VariantMakruk || gameInfo.variant == VariantGrand || gameInfo.variant == VariantChuChess ? 3 : 1;
 
     if(gameInfo.variant == VariantSChess && !gameInfo.holdingsSize) promoRank = 2;
-    for (rf = 0; rf < BOARD_HEIGHT; rf++)
+    for (rf = dead; rf < BOARD_HEIGHT - dead; rf++)
       for (ff = BOARD_LEFT; ff < BOARD_RGHT; ff++) {
           ChessSquare piece;