]> git.sesse.net Git - stockfish/blobdiff - src/position.cpp
Remove SEE optimizations
[stockfish] / src / position.cpp
index b6a8d7465d5911a84b06f52e5e48edfec5e86965..4a0075cb841845bff231bd8a8091404b16ea7b5e 100644 (file)
@@ -1300,13 +1300,13 @@ void Position::undo_null_move() {
 int Position::see(Square to) const {
 
   assert(square_is_ok(to));
-  return see(SQ_NONE, to, false);
+  return see(SQ_NONE, to);
 }
 
 int Position::see(Move m) const {
 
   assert(move_is_ok(m));
-  return see(move_from(m), move_to(m), false);
+  return see(move_from(m), move_to(m));
 }
 
 int Position::see_sign(Move m) const {
@@ -1322,10 +1322,10 @@ int Position::see_sign(Move m) const {
       && type_of_piece_on(from) != KING)
          return 1;
 
-  return see(from, to, true);
+  return see(from, to);
 }
 
-int Position::see(Square from, Square to, bool shortcut) const {
+int Position::see(Square from, Square to) const {
 
   // Material values
   static const int seeValues[18] = {
@@ -1351,21 +1351,9 @@ int Position::see(Square from, Square to, bool shortcut) const {
   Piece capture = piece_on(to);
   Bitboard occ = occupied_squares();
 
-  // If captured piece is defended by enemy pawns or knights then SEE is negative
-  // when captured piece value is not enough to compensate the lost of capturing one.
-  if (shortcut)
-  {
-      int diff = seeValues[piece] - seeValues[capture];
-
-      if (   diff > seeValues[PAWN]
-          &&(attacks_from<PAWN>(to, us) & pieces(PAWN, them)))
-          return -(diff - seeValues[PAWN] / 2);
-
-      if (   diff > seeValues[KNIGHT]
-          && pieces(KNIGHT, them)
-          &&(pieces(KNIGHT, them) & attacks_from<KNIGHT>(to)))
-          return -(diff - seeValues[KNIGHT] / 2);
-  }
+  // King cannot be recaptured
+  if (type_of_piece(piece) == KING)
+      return seeValues[capture];
 
   // Handle en passant moves
   if (st->epSquare == to && type_of_piece_on(from) == PAWN)