Color us = side_to_move();
Square from = move_from(m);
- Square ksq = king_square(us);
assert(color_of_piece_on(from) == us);
- assert(piece_on(ksq) == piece_of_color_and_type(us, KING));
+ assert(piece_on(king_square(us)) == piece_of_color_and_type(us, KING));
// En passant captures are a tricky special case. Because they are
// rather uncommon, we do it simply by testing whether the king is attacked
Square to = move_to(m);
Square capsq = make_square(square_file(to), square_rank(from));
Bitboard b = occupied_squares();
+ Square ksq = king_square(us);
assert(to == ep_square());
assert(piece_on(from) == piece_of_color_and_type(us, PAWN));
// If the moving piece is a king, check whether the destination
// square is attacked by the opponent.
- if (from == ksq)
+ if (type_of_piece_on(from) == KING)
return !(square_is_attacked(move_to(m), opposite_color(us)));
// A non-king move is legal if and only if it is not pinned or it
// is moving along the ray towards or away from the king.
return ( !pinned
|| !bit_is_set(pinned, from)
- || (direction_between_squares(from, ksq) == direction_between_squares(move_to(m), ksq)));
+ || (direction_between_squares(from, king_square(us)) == direction_between_squares(move_to(m), king_square(us))));
}
else if ( Piece != KING
&& !Slider
- && bit_is_set(piece_attacks<Piece>(ksq), to))
+ && bit_is_set(Piece == PAWN ? pawn_attacks(opposite_color(sideToMove), ksq) : piece_attacks<Piece>(ksq), to))
set_bit(pCheckersBB, to);
// Discovery checks