X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=moves.c;h=58cbfc008c47f8f794aa83acc0ebb1fe348d2bbf;hb=ea750683ac62717dd7346de17b5ae072622ff92a;hp=edccef83673c0ce69852c8501a12fccb2ac03f0f;hpb=86517e539f33650be656c482020a878fec0723c9;p=xboard.git diff --git a/moves.c b/moves.c index edccef8..58cbfc0 100644 --- a/moves.c +++ b/moves.c @@ -117,89 +117,26 @@ ChessSquare PromoPiece(moveType) return WhiteKing; case BlackPromotionKing: return BlackKing; -#ifdef FAIRY case WhitePromotionChancellor: return WhiteMarshall; case BlackPromotionChancellor: return BlackMarshall; case WhitePromotionArchbishop: - return WhiteCardinal; + return WhiteAngel; case BlackPromotionArchbishop: - return BlackCardinal; -#endif - } -} - -ChessMove PromoCharToMoveType(whiteOnMove, promoChar) - int whiteOnMove; - int promoChar; -{ - if (whiteOnMove) { - switch (promoChar) { - case 'n': - case 'N': - return WhitePromotionKnight; - case 'b': - case 'B': - return WhitePromotionBishop; - case 'r': - case 'R': - return WhitePromotionRook; -#ifdef FAIRY - case 'a': - case 'A': - return WhitePromotionArchbishop; - case 'c': - case 'C': - return WhitePromotionChancellor; -#endif - case 'q': - case 'Q': - return WhitePromotionQueen; - case 'k': - case 'K': - return WhitePromotionKing; - case NULLCHAR: - default: - return NormalMove; - } - } else { - switch (promoChar) { - case 'n': - case 'N': - return BlackPromotionKnight; - case 'b': - case 'B': - return BlackPromotionBishop; - case 'r': - case 'R': - return BlackPromotionRook; -#ifdef FAIRY - case 'a': - case 'A': - return BlackPromotionArchbishop; - case 'c': - case 'C': - return BlackPromotionChancellor; -#endif - case 'q': - case 'Q': - return BlackPromotionQueen; - case 'k': - case 'K': - return BlackPromotionKing; - case NULLCHAR: - default: - return NormalMove; - } + return BlackAngel; + case WhitePromotionCentaur: + return WhiteSilver; + case BlackPromotionCentaur: + return BlackSilver; } } char pieceToChar[] = { 'P', 'N', 'B', 'R', 'Q', 'F', 'E', 'A', 'C', 'W', 'M', - 'O', 'H', 'I', 'J', 'G', 'D', 'V', 'S', 'L', 'U', 'K', + 'O', 'H', 'I', 'J', 'G', 'D', 'V', 'L', 's', 'U', 'K', 'p', 'n', 'b', 'r', 'q', 'f', 'e', 'a', 'c', 'w', 'm', - 'o', 'h', 'i', 'j', 'g', 'd', 'v', 's', 'l', 'u', 'k', + 'o', 'h', 'i', 'j', 'g', 'd', 'v', 'l', 's', 'u', 'k', 'x' }; char PieceToChar(p) @@ -228,6 +165,52 @@ ChessSquare CharToPiece(c) return EmptySquare; } +ChessMove PromoCharToMoveType(whiteOnMove, promoChar) + int whiteOnMove; + int promoChar; +{ /* [HGM] made dependent on CharToPiece to alow alternate piece letters */ + ChessSquare piece = CharToPiece(whiteOnMove ? ToUpper(promoChar) : ToLower(promoChar) ); + if(promoChar == NULLCHAR) return NormalMove; + + switch(piece) { + case WhiteQueen: + return WhitePromotionQueen; + case WhiteRook: + return WhitePromotionRook; + case WhiteBishop: + return WhitePromotionBishop; + case WhiteKnight: + return WhitePromotionKnight; + case WhiteKing: + return WhitePromotionKing; + case WhiteAngel: + return WhitePromotionArchbishop; + case WhiteMarshall: + return WhitePromotionChancellor; + case WhiteSilver: + return WhitePromotionCentaur; + case BlackQueen: + return BlackPromotionQueen; + case BlackRook: + return BlackPromotionRook; + case BlackBishop: + return BlackPromotionBishop; + case BlackKnight: + return BlackPromotionKnight; + case BlackKing: + return BlackPromotionKing; + case BlackAngel: + return BlackPromotionArchbishop; + case BlackMarshall: + return BlackPromotionChancellor; + case BlackSilver: + return BlackPromotionCentaur; + default: + // not all promotion implemented yet! Take Queen for those we don't know. + return (whiteOnMove ? WhitePromotionQueen : BlackPromotionQueen); + } +} + void CopyBoard(to, from) Board to, from; { @@ -595,7 +578,7 @@ void GenPseudoLegal(board, flags, epfile, callback, closure) if (board[rt][ft] != EmptySquare) break; } if(m==1) goto mounted; - if(m==2) goto walking; + if(m==2) goto finishGold; break; case WhiteQueen: @@ -650,6 +633,9 @@ void GenPseudoLegal(board, flags, epfile, callback, closure) } break; + case WhiteSilver: + case BlackSilver: + m++; // [HGM] superchess: use for Centaur case WhiteMan: case BlackMan: case SHOGI WhiteKing: @@ -667,6 +653,7 @@ void GenPseudoLegal(board, flags, epfile, callback, closure) callback(board, flags, NormalMove, rf, ff, rt, ft, closure); } + if(m==1) goto mounted; break; case WhiteNightrider: @@ -1279,7 +1266,7 @@ void Disambiguate(board, flags, epfile, closure) #endif /* [HGM] returns 'q' for optional promotion, 'n' for mandatory */ if(closure->promoCharIn != '=') - closure->promoChar = ToLower(PieceToChar(PromoPiece(closure->kind))); + closure->promoChar = ToLower(closure->promoCharIn); else closure->promoChar = '='; if (closure->promoChar == 'x') closure->promoChar = NULLCHAR; if (closure->count > 1) { @@ -1294,7 +1281,7 @@ void Disambiguate(board, flags, epfile, closure) } if(closure->kind == IllegalMove) /* [HGM] might be a variant we don't understand, pass on promotion info */ - closure->promoChar = closure->promoCharIn; + closure->promoChar = ToLower(closure->promoCharIn); if (appData.debugMode) { fprintf(debugFP, "Disambiguate out: %d(%d,%d)-(%d,%d) = %d (%c)\n", closure->piece,closure->ff,closure->rf,closure->ft,closure->rt,closure->promoChar, @@ -1557,8 +1544,6 @@ ChessMove CoordsToAlgebraic(board, flags, epfile, /* [HGM] Always long notation for fairies we don't know */ case WhiteFalcon: case BlackFalcon: - case WhiteSilver: - case BlackSilver: case WhiteLance: case BlackLance: case WhiteGrasshopper: