Thanks ! Here is the proposed patch.fruity wrote: There might still be room to earn some ELO points by only fixing bugs. For example in evaluate.c, evaluate_passed_pawns(..), line 831
Code: Select all
Subject: Fix bug in evaluate_passed_pawns()
If blockSq is already on rank 8, blockSq + pawn_push(Us) is on rank 9,
outside of board. It does not make sense to measure king distance to
a field outside the board.
Bug spotted by Fruity:
http://open-chess.org/viewtopic.php?f=5&t=1156&start=10
---
diff --git a/src/evaluate.cpp b/src/evaluate.cpp
index c86af78..82f9c77 100644
--- a/src/evaluate.cpp
+++ b/src/evaluate.cpp
@@ -833,9 +833,12 @@ namespace {
Square blockSq = s + pawn_push(Us);
// Adjust bonus based on kings proximity
- ebonus -= Value(square_distance(pos.king_square(Us), blockSq) * 3 * rr);
- ebonus -= Value(square_distance(pos.king_square(Us), blockSq + pawn_push(Us)) * rr);
ebonus += Value(square_distance(pos.king_square(Them), blockSq) * 6 * rr);
+ ebonus -= Value(square_distance(pos.king_square(Us), blockSq) * 3 * rr);
+
+ // If blockSq is not the queening square then consider also a second push
+ if (square_rank(blockSq) != (Us == WHITE ? RANK_8 : RANK_1))
+ ebonus -= Value(square_distance(pos.king_square(Us), blockSq + pawn_push(Us)) * rr);
// If the pawn is free to advance, increase bonus
if (pos.square_is_empty(blockSq))