]> git.sesse.net Git - stockfish/blobdiff - src/position.cpp
Fix Chess960 regression
[stockfish] / src / position.cpp
index 2d1e476391c19db02f1f26cdcc5c25a7a45ac3c0..d3ca869b8215e20e22e947f95e946f4fdfb53116 100644 (file)
@@ -274,10 +274,6 @@ void Position::from_fen(const string& fen) {
   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();
@@ -353,7 +349,7 @@ bool Position::set_castling_rights(char token) {
 /// 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;
@@ -440,7 +436,8 @@ void Position::print(Move move) const {
           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;
 }
 
@@ -638,9 +635,9 @@ bool Position::pl_move_is_legal(Move m, Bitboard pinned) const {
 
   // 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));
 }
 
 
@@ -698,7 +695,7 @@ bool Position::move_is_check(Move m, const CheckInfo& ci) const {
   {
       // 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;
   }