From: Marco Costalba Date: Fri, 29 May 2015 03:38:40 +0000 (+0200) Subject: Checking for rook color when setting castling X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=2795aedbc3710287448bad058c6077920066ad30;hp=8e95c39bfa97e6248d9686b47dc4361f23fda06f Checking for rook color when setting castling In Chess960 we can have legal positions with opponent rook in A or H file and with castling available, for instance: 4k3/pppppppp/8/8/8/8/PPPPPPPP/rR2K3 w Q - 0 1 In those cases we pick up the wrong rook when setting castling. Fix it by checking the color of the rook. Bug reported by Matthew Lai. No functional change. --- diff --git a/src/position.cpp b/src/position.cpp index 87e65d02..9306965c 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -266,14 +266,15 @@ void Position::set(const string& fenStr, bool isChess960, Thread* th) { { Square rsq; Color c = islower(token) ? BLACK : WHITE; + Piece rook = make_piece(c, ROOK); token = char(toupper(token)); if (token == 'K') - for (rsq = relative_square(c, SQ_H1); type_of(piece_on(rsq)) != ROOK; --rsq) {} + for (rsq = relative_square(c, SQ_H1); piece_on(rsq) != rook; --rsq) {} else if (token == 'Q') - for (rsq = relative_square(c, SQ_A1); type_of(piece_on(rsq)) != ROOK; ++rsq) {} + for (rsq = relative_square(c, SQ_A1); piece_on(rsq) != rook; ++rsq) {} else if (token >= 'A' && token <= 'H') rsq = make_square(File(token - 'A'), relative_rank(c, RANK_1));