Allow use of ~ in pieceToChar for shadow pieces in any variant
authorH.G. Muller <h.g.muller@hccnet.nl>
Sun, 30 Dec 2012 14:19:57 +0000 (15:19 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sat, 19 Jan 2013 22:28:20 +0000 (23:28 +0100)
The use of shadow-pieces for promoted Pawns was limited to Crazyhouse and
Bughouse. But this is not necessary, and in fact undesirable, as it made
it impossible to implement Crazyhouse960, which combines shadow promotions
with Fischer castling (only available in variant fischerandom)s, and thus
has to be played as 8x8+5_fischerandom, using the Crazyhouse -pieceToChaTable.

backend.c

index 21ea333..57155b3 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -9453,8 +9453,7 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
                ) {
        /* white pawn promotion */
         board[toY][toX] = CharToPiece(ToUpper(promoChar));
-        if((gameInfo.variant==VariantBughouse || gameInfo.variant==VariantCrazyhouse)
-           && PieceToChar(PROMOTED board[toY][toX]) == '~') /* [HGM] use shadow piece (if available) */
+        if(board[toY][toX] < WhiteCannon && PieceToChar(PROMOTED board[toY][toX]) == '~') /* [HGM] use shadow piece (if available) */
             board[toY][toX] = (ChessSquare) (PROMOTED board[toY][toX]);
        board[fromY][fromX] = EmptySquare;
     } else if ((fromY >= BOARD_HEIGHT>>1)
@@ -9514,8 +9513,7 @@ ApplyMove (int fromX, int fromY, int toX, int toY, int promoChar, Board board)
                ) {
        /* black pawn promotion */
        board[toY][toX] = CharToPiece(ToLower(promoChar));
-        if((gameInfo.variant==VariantBughouse || gameInfo.variant==VariantCrazyhouse)
-           && PieceToChar(PROMOTED board[toY][toX]) == '~') /* [HGM] use shadow piece (if available) */
+        if(board[toY][toX] < BlackCannon && PieceToChar(PROMOTED board[toY][toX]) == '~') /* [HGM] use shadow piece (if available) */
             board[toY][toX] = (ChessSquare) (PROMOTED board[toY][toX]);
        board[fromY][fromX] = EmptySquare;
     } else if ((fromY < BOARD_HEIGHT>>1)