X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.cpp;h=45be5df3203b26a0c4fe5ffccb25468033692ba0;hp=be5316d0534592657fd737e53e22edd532e8bfdf;hb=f637ddc1e87c9e825ce63f66974348347439f493;hpb=964bd862729b56dd7116964ec3dde242df1dd0f1 diff --git a/src/position.cpp b/src/position.cpp index be5316d0..45be5df3 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -552,7 +552,8 @@ bool Position::move_is_check(Move m, Bitboard dcCandidates) const { if (bit_is_set(pawn_attacks(them, ksq), to)) // Normal check? return true; - if ( bit_is_set(dcCandidates, from) // Discovered check? + if ( dcCandidates // Discovered check? + && bit_is_set(dcCandidates, from) && (direction_between_squares(from, ksq) != direction_between_squares(to, ksq))) return true; @@ -591,22 +592,26 @@ bool Position::move_is_check(Move m, Bitboard dcCandidates) const { } return false; + // Test discovered check and normal check according to piece type case KNIGHT: - return bit_is_set(dcCandidates, from) // Discovered check? - || bit_is_set(piece_attacks(ksq), to); // Normal check? + return (dcCandidates && bit_is_set(dcCandidates, from)) + || bit_is_set(piece_attacks(ksq), to); case BISHOP: - return bit_is_set(dcCandidates, from) // Discovered check? - || bit_is_set(piece_attacks(ksq), to); // Normal check? + return (dcCandidates && bit_is_set(dcCandidates, from)) + || ( direction_between_squares(ksq, to) != DIR_NONE + && bit_is_set(piece_attacks(ksq), to)); case ROOK: - return bit_is_set(dcCandidates, from) // Discovered check? - || bit_is_set(piece_attacks(ksq), to); // Normal check? + return (dcCandidates && bit_is_set(dcCandidates, from)) + || ( direction_between_squares(ksq, to) != DIR_NONE + && bit_is_set(piece_attacks(ksq), to)); case QUEEN: // Discovered checks are impossible! assert(!bit_is_set(dcCandidates, from)); - return bit_is_set(piece_attacks(ksq), to); // Normal check? + return ( direction_between_squares(ksq, to) != DIR_NONE + && bit_is_set(piece_attacks(ksq), to)); case KING: // Discovered check?