diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 82edeec8..fd0ef5b2 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -1171,8 +1171,8 @@ namespace { Square b8 = relative_square(us, (square_file(s) == FILE_A) ? SQ_B8 : SQ_G8); if ( pos.piece_on(b6) == piece_of_color_and_type(opposite_color(us), PAWN) - && pos.see(s, b6, false) < 0 - && pos.see(s, b8, false) < 0) + && pos.see(s, b6) < 0 + && pos.see(s, b8) < 0) { ei.mgValue -= Sign[us] * TrappedBishopA7H7Penalty; ei.egValue -= Sign[us] * TrappedBishopA7H7Penalty; diff --git a/src/position.cpp b/src/position.cpp index 1fe723ae..4a0075cb 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -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] = { @@ -1337,7 +1337,6 @@ int Position::see(Square from, Square to, bool shortcut) const { }; Bitboard attackers, stmAttackers, b; - int pieceDiff = 0; assert(!shortcut || from != SQ_NONE); assert(square_is_ok(from) || from == SQ_NONE); @@ -1356,22 +1355,6 @@ int Position::see(Square from, Square to, bool shortcut) const { if (type_of_piece(piece) == KING) return seeValues[capture]; - // If captured piece is defended by enemy pawns or knights then SEE is negative - // when captured piece value does not compensate the lost of capturing one. - if (shortcut) - { - pieceDiff = seeValues[piece] - seeValues[capture]; - - if ( pieceDiff > seeValues[PAWN] - &&(attacks_from(to, us) & pieces(PAWN, them))) - return -(pieceDiff - seeValues[PAWN] / 2); - - if ( pieceDiff > seeValues[KNIGHT] - && pieces(KNIGHT, them) - &&(pieces(KNIGHT, them) & attacks_from(to))) - return -(pieceDiff - seeValues[KNIGHT] / 2); - } - // Handle en passant moves if (st->epSquare == to && type_of_piece_on(from) == PAWN) { @@ -1442,15 +1425,6 @@ int Position::see(Square from, Square to, bool shortcut) const { for (pt = PAWN; !(stmAttackers & pieces(pt)); pt++) assert(pt < KING); - // If captured piece is defended by an enemy piece then SEE is negative - // if captured piece value does not compensate the lost of capturing one. - if (pieceDiff > seeValues[pt]) - { - assert(shortcut); - return -(pieceDiff - seeValues[pt] / 2); - } else - pieceDiff = 0; // Only first cycle - // Remove the attacker we just found from the 'attackers' bitboard, // and scan for new X-ray attacks behind the attacker. b = stmAttackers & pieces(pt); diff --git a/src/position.h b/src/position.h index a55d1770..f2f517e2 100644 --- a/src/position.h +++ b/src/position.h @@ -229,7 +229,7 @@ public: void undo_null_move(); // Static exchange evaluation - int see(Square from, Square to, bool shortcut) const; + int see(Square from, Square to) const; int see(Move m) const; int see(Square to) const; int see_sign(Move m) const;