X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=moves.c;h=75b94343075b397a2d18d4fae3edb8cc65650867;hb=4a8f93572feb1fc3571887ceecc14d8caac3ced0;hp=319a33246c422749cb5ef5a4640ab7c263dcf5ab;hpb=d29830c7ae5d6dd1f92e5ccd9c8eb8b75acfbf5c;p=xboard.git diff --git a/moves.c b/moves.c index 319a332..75b9434 100644 --- a/moves.c +++ b/moves.c @@ -260,6 +260,7 @@ void GenPseudoLegal(board, flags, epfile, callback, closure) { int rf, ff; int i, j, d, s, fs, rs, rt, ft, m; + int promoRank = gameInfo.variant == VariantMakruk ? 3 : 1; for (rf = 0; rf < BOARD_HEIGHT; rf++) for (ff = BOARD_LEFT; ff < BOARD_RGHT; ff++) { @@ -303,7 +304,7 @@ void GenPseudoLegal(board, flags, epfile, callback, closure) } if (rf < BOARD_HEIGHT-1 && board[rf + 1][ff] == EmptySquare) { callback(board, flags, - rf == BOARD_HEIGHT-2 ? WhitePromotionQueen : NormalMove, + rf >= BOARD_HEIGHT-1-promoRank ? WhitePromotionQueen : NormalMove, rf, ff, rf + 1, ff, closure); } if (rf == 1 && board[2][ff] == EmptySquare && @@ -318,7 +319,7 @@ void GenPseudoLegal(board, flags, epfile, callback, closure) ((flags & F_KRIEGSPIEL_CAPTURE) || BlackPiece(board[rf + 1][ff + s]))) { callback(board, flags, - rf == BOARD_HEIGHT-2 ? WhitePromotionQueen : NormalMove, + rf >= BOARD_HEIGHT-1-promoRank ? WhitePromotionQueen : NormalMove, rf, ff, rf + 1, ff + s, closure); } if (rf == BOARD_HEIGHT-4) { @@ -353,7 +354,7 @@ void GenPseudoLegal(board, flags, epfile, callback, closure) } if (rf > 0 && board[rf - 1][ff] == EmptySquare) { callback(board, flags, - rf == 1 ? BlackPromotionQueen : NormalMove, + rf <= promoRank ? BlackPromotionQueen : NormalMove, rf, ff, rf - 1, ff, closure); } if (rf == BOARD_HEIGHT-2 && board[BOARD_HEIGHT-3][ff] == EmptySquare && @@ -368,7 +369,7 @@ void GenPseudoLegal(board, flags, epfile, callback, closure) ((flags & F_KRIEGSPIEL_CAPTURE) || WhitePiece(board[rf - 1][ff + s]))) { callback(board, flags, - rf == 1 ? BlackPromotionQueen : NormalMove, + rf <= promoRank ? BlackPromotionQueen : NormalMove, rf, ff, rf - 1, ff + s, closure); } if (rf == 3) { @@ -608,6 +609,8 @@ void GenPseudoLegal(board, flags, epfile, callback, closure) /* Shogi Pawn and Silver General: first the Pawn move, */ /* then the General continues like a Ferz */ + case WhiteMan: + if(gameInfo.variant != VariantMakruk) goto commoner; case SHOGI WhitePawn: case SHOGI WhiteFerz: if (rf < BOARD_HEIGHT-1 && @@ -617,6 +620,8 @@ void GenPseudoLegal(board, flags, epfile, callback, closure) if(piece != SHOGI WhitePawn) goto finishSilver; break; + case BlackMan: + if(gameInfo.variant != VariantMakruk) goto commoner; case SHOGI BlackPawn: case SHOGI BlackFerz: if (rf > 0 && @@ -644,8 +649,7 @@ void GenPseudoLegal(board, flags, epfile, callback, closure) case WhiteSilver: case BlackSilver: m++; // [HGM] superchess: use for Centaur - case WhiteMan: - case BlackMan: + commoner: case SHOGI WhiteKing: case SHOGI BlackKing: case WhiteKing: