Make move to own piece a swap rather than capture
authorH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 28 Jan 2016 16:55:15 +0000 (17:55 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 28 Jan 2016 16:55:15 +0000 (17:55 +0100)
This is useful for Tamerlane Chess, where you can one time during the
game have your King swap places with a friendly piece.

backend.c

index 8831176..f10b4a0 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -10147,6 +10147,11 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
        board[toY][toX + (killX < fromX ? 1 : -1)] = killed;
         board[EP_STATUS] = EP_NONE; // capture was fake!
     } else
+    if(nrCastlingRights == 0 && board[toY][toX] < EmptySquare && (piece < BlackPawn) == (board[toY][toX] < BlackPawn)) {
+        board[fromY][fromX] = board[toY][toX]; // capture own will lead to swapping
+        board[toY][toX] = piece;
+        board[EP_STATUS] = EP_NONE; // capture was fake!
+    } else
     /* Code added by Tord: */
     /* FRC castling assumed when king captures friendly rook. [HGM] or RxK for S-Chess */
     if (board[fromY][fromX] == WhiteKing && board[toY][toX] == WhiteRook ||