castleRightsMask[make_square(initialQRFile, RANK_1)] ^= WHITE_OOO;
castleRightsMask[make_square(initialQRFile, RANK_8)] ^= BLACK_OOO;
- isChess960 = initialKFile != FILE_E
- || initialQRFile != FILE_A
- || initialKRFile != FILE_H;
-
find_checkers();
st->key = compute_key();
/// Position::to_fen() returns a FEN representation of the position. In case
/// of Chess960 the Shredder-FEN notation is used. Mainly a debugging function.
-const string Position::to_fen() const {
+const string Position::to_fen(bool isChess960) const {
string fen;
Square sq;
cout << c << pieceLetters.from_piece(piece) << c << '|';
}
}
- cout << dottedLine << "Fen is: " << to_fen() << "\nKey is: " << st->key << endl;
+ bool chess960 = (cout.iword(0) != 0); // See set960()
+ cout << dottedLine << "Fen is: " << to_fen(chess960) << "\nKey is: " << st->key << endl;
requestPending = false;
}
// 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, king_square(us)) == direction_between_squares(move_to(m), king_square(us))));
+ return !pinned
+ || !bit_is_set(pinned, from)
+ || squares_aligned(from, move_to(m), king_square(us));
}
{
// For pawn and king moves we need to verify also direction
if ( (pt != PAWN && pt != KING)
- ||(direction_between_squares(from, ci.ksq) != direction_between_squares(to, ci.ksq)))
+ || !squares_aligned(from, to, ci.ksq))
return true;
}