X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=moves.c;h=876564cf24553a4ed05f573803916b69fb6b2c83;hb=24659044481fa42b3846cb9e801fd06abe0a102e;hp=25263c8a75016c92804425954ec4f9c168729067;hpb=2f104b7904a48f7f686d3b41d5061e8ef549c5b0;p=xboard.git diff --git a/moves.c b/moves.c index 25263c8..876564c 100644 --- a/moves.c +++ b/moves.c @@ -809,9 +809,10 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure, rf, ff, rf + 1, ff + s, closure); } if (rf >= BOARD_HEIGHT+1>>1) {// [HGM] grand: 4th & 5th rank on 10-board + int victimFile = (board[LAST_FILE] == 100 ? ff + s : board[LAST_FILE]); if (ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT && - (epfile == ff + s || epfile == EP_UNKNOWN) && rf < BOARD_HEIGHT-3 && - board[rf][ff + s] == BlackPawn && + (board[EP_FILE] == ff + s || epfile == EP_UNKNOWN) && rf < BOARD_HEIGHT-3 && + (board[rf][victimFile] == BlackPawn || board[rf][victimFile] == BlackLance) && board[rf+1][ff + s] == EmptySquare) { callback(board, flags, WhiteCapturesEnPassant, rf, ff, rf+1, ff + s, closure); @@ -859,9 +860,10 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure, rf, ff, rf - 1, ff + s, closure); } if (rf < BOARD_HEIGHT>>1) { + int victimFile = (board[LAST_FILE] == 100 ? ff + s : board[LAST_FILE]); if (ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT && - (epfile == ff + s || epfile == EP_UNKNOWN) && rf > 2 && - board[rf][ff + s] == WhitePawn && + (board[EP_FILE] == ff + s || epfile == EP_UNKNOWN) && rf > 2 && + (board[rf][victimFile] == WhitePawn || board[rf][victimFile] == WhiteLance) && board[rf-1][ff + s] == EmptySquare) { callback(board, flags, BlackCapturesEnPassant, rf, ff, rf-1, ff + s, closure); @@ -1735,6 +1737,8 @@ CheckTest (Board board, int flags, int rf, int ff, int rt, int ft, int enPassant } } + if(PieceToChar(king) == '.') return 0; // never in check if the royal piece does not participate + if (rt >= 0) { if (enPassant) { captured = board[rf][ft];