@@ -152,7 +152,10 @@ namespace {
152152
153153 const Bitboard pawns = pos.pieces (Us, PAWN);
154154 const Bitboard movable = pos.board_bb (Us, PAWN) & ~pos.pieces ();
155- const Bitboard capturable = pos.board_bb (Us, PAWN) & (allowFriendlyCaptures ? pos.pieces () : pos.pieces (Them));
155+ const Bitboard friendlyCapturable = pos.pieces (Us) & ~pos.pieces (Us, KING);
156+ const Bitboard capturable = pos.board_bb (Us, PAWN)
157+ & (allowFriendlyCaptures ? (pos.pieces (Them) | friendlyCapturable)
158+ : pos.pieces (Them));
156159
157160 target = Type == EVASIONS ? target : AllSquares;
158161
@@ -417,7 +420,7 @@ namespace {
417420
418421 captureTarget = target;
419422 if (pos.self_capture () && (Type == NON_EVASIONS || Type == CAPTURES))
420- captureTarget |= pos.pieces (Us);
423+ captureTarget |= pos.pieces (Us) & ~pos. pieces (Us, KING) ;
421424
422425 moveList = generate_pawn_moves<Us, Type>(pos, moveList, target);
423426 for (PieceSet ps = pos.piece_types () & ~(piece_set (PAWN) | KING); ps;)
@@ -476,7 +479,7 @@ namespace {
476479 Bitboard kingMoves = pos.moves_from (Us, KING, ksq) & ~pos.pieces ();
477480 Bitboard kingCaptureMask = Type == EVASIONS ? ~pos.pieces (Us) : captureTarget;
478481 if (Type == EVASIONS && pos.self_capture ())
479- kingCaptureMask |= pos.pieces (Us);
482+ kingCaptureMask |= pos.pieces (Us) & ~pos. pieces (Us, KING) ;
480483 Bitboard kingQuietMask = Type == EVASIONS ? ~pos.pieces (Us) : target;
481484 Bitboard b = (kingAttacks & kingCaptureMask) | (kingMoves & kingQuietMask);
482485 while (b)
0 commit comments