From b1929960f9b73cb8fcc86fdbdf7a8d2d1de4fc53 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 30 Apr 2011 13:02:56 +0100 Subject: [PATCH] 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 Signed-off-by: Marco Costalba --- src/evaluate.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 71335c1b..77821a3a 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -812,9 +812,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)) -- 2.39.2