From: Fabian Fichter Date: Fri, 17 Mar 2023 11:17:33 +0000 (+0100) Subject: Fix atomic captures with wall squares X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=bc33c7a06c779d55c693a00f9991af93ba481f9e;p=fairystockfish.git Fix atomic captures with wall squares Closes #599. --- diff --git a/src/position.cpp b/src/position.cpp index 1770155..f9813e6 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -1073,7 +1073,7 @@ bool Position::legal(Move m) const { if (type_of(m) == EN_PASSANT) occupied &= ~square_bb(kto - pawn_push(us)); if (capture(m) && blast_on_capture()) - occupied &= ~((attacks_bb(kto) & (pieces() ^ pieces(PAWN))) | kto); + occupied &= ~((attacks_bb(kto) & ((pieces(WHITE) | pieces(BLACK)) ^ pieces(PAWN))) | kto); Bitboard pseudoRoyals = st->pseudoRoyals & pieces(sideToMove); Bitboard pseudoRoyalsTheirs = st->pseudoRoyals & pieces(~sideToMove); if (is_ok(from) && (pseudoRoyals & from)) @@ -1818,7 +1818,7 @@ void Position::do_move(Move m, StateInfo& newSt, bool givesCheck) { { std::memset(st->unpromotedBycatch, 0, sizeof(st->unpromotedBycatch)); st->demotedBycatch = st->promotedBycatch = 0; - Bitboard blast = blast_on_capture() ? (attacks_bb(to) & (pieces() ^ pieces(PAWN))) | to + Bitboard blast = blast_on_capture() ? (attacks_bb(to) & ((pieces(WHITE) | pieces(BLACK)) ^ pieces(PAWN))) | to : type_of(pc) != PAWN ? square_bb(to) : Bitboard(0); while (blast) { @@ -2218,7 +2218,7 @@ Value Position::blast_see(Move m) const { Square to = to_sq(m); Color us = color_of(moved_piece(m)); Bitboard fromto = type_of(m) == DROP ? square_bb(to) : from | to; - Bitboard blast = ((attacks_bb(to) & ~pieces(PAWN)) | fromto) & pieces(); + Bitboard blast = ((attacks_bb(to) & ~pieces(PAWN)) | fromto) & (pieces(WHITE) | pieces(BLACK)); Value result = VALUE_ZERO;