From dd8a07612843f32d4073135fc9e17b8814aa34a5 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 12 Sep 2010 11:39:38 +0100 Subject: [PATCH] Reintroduce rook contact checks Were removed when merged from Glaurung 2.2, but without any test. Note that weight has been increased from original 2 to 4 and has been also fixed a bug where in the original version were considered also diagonal sqaures for the rook, that are contact squares but not checks. After 4449 games at 30"+0.1 Mod - Orig: 717 - 649 - 3083 ELO +5 (+- 4.1) Signed-off-by: Marco Costalba --- src/evaluate.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 1c215dc0..db08b1c4 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -200,6 +200,7 @@ namespace { // Bonuses for enemy's safe checks const int QueenContactCheckBonus = 6; + const int RookContactCheckBonus = 4; const int QueenCheckBonus = 3; const int RookCheckBonus = 2; const int BishopCheckBonus = 1; @@ -710,6 +711,24 @@ namespace { * (Them == pos.side_to_move() ? 2 : 1); } + // Analyse enemy's safe rook contact checks. First find undefended + // squares around the king attacked by enemy rooks... + b = undefended & ei.attackedBy[Them][ROOK] & ~pos.pieces_of_color(Them); + + // Consider only squares where the enemy rook gives check + b &= RookPseudoAttacks[ksq]; + + if (b) + { + // ...then remove squares not supported by another enemy piece + b &= ( ei.attackedBy[Them][PAWN] | ei.attackedBy[Them][KNIGHT] + | ei.attackedBy[Them][BISHOP] | ei.attackedBy[Them][QUEEN]); + if (b) + attackUnits += RookContactCheckBonus + * count_1s_max_15(b) + * (Them == pos.side_to_move() ? 2 : 1); + } + // Analyse enemy's safe distance checks for sliders and knights safe = ~(pos.pieces_of_color(Them) | ei.attackedBy[Us][0]); -- 2.39.2