X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fevaluate.cpp;h=12329fcdceef82a7872aa2f43af3c8dfd1344e2f;hb=0da1d6a84612c8443b3e3c9b3f74890635ce23e2;hp=263a99091811d2ce7ebdde7f29b117bb8512a1aa;hpb=61c6a3d5a0757668821600c808dc8990175af677;p=stockfish diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 263a9909..12329fcd 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -64,8 +64,8 @@ namespace { const int WeightPawnStructureEndgameInternal = 0x100; const int WeightPassedPawnsMidgameInternal = 0x100; const int WeightPassedPawnsEndgameInternal = 0x100; - const int WeightKingSafetyInternal = 0x100; - const int WeightKingOppSafetyInternal = 0x100; + const int WeightKingSafetyInternal = 0x110; + const int WeightKingOppSafetyInternal = 0x110; const int WeightSpaceInternal = 0x30; // Visually better to define tables constants @@ -230,8 +230,7 @@ namespace { const int KnightAttackWeight = 2; // Bonuses for safe checks for each piece type. - int QueenContactCheckBonus = 4; - int RookContactCheckBonus = 2; + int QueenContactCheckBonus = 3; int QueenCheckBonus = 2; int RookCheckBonus = 1; int BishopCheckBonus = 1; @@ -820,25 +819,8 @@ namespace { } } } - // Analyse safe rook contact checks: - if (RookContactCheckBonus) - { - b = undefended & ei.attacked_by(them, ROOK) & ~p.pieces_of_color(them); - if (b) - { - Bitboard attackedByOthers = - ei.attacked_by(them, PAWN) | ei.attacked_by(them, KNIGHT) - | ei.attacked_by(them, BISHOP) | ei.attacked_by(them, QUEEN); - - b &= attackedByOthers; - if (b) - { - int count = count_1s_max_15(b); - attackUnits += (RookContactCheckBonus * count * (sente? 2 : 1)); - } - } - } - // Analyse safe distance checks: + + // Analyse safe distance checks if (QueenCheckBonus > 0 || RookCheckBonus > 0) { b = p.piece_attacks(s) & ~p.pieces_of_color(them) & ~ei.attacked_by(us); @@ -954,6 +936,13 @@ namespace { b2 = squares_in_front_of(us, s); b3 = b2 & ei.attacked_by(them); b4 = b2 & ei.attacked_by(us); + + // If there is an enemy rook or queen attacking the pawn from behind, + // add all X-ray attacks by the rook or queen. + if(bit_is_set(ei.attacked_by(them,ROOK)|ei.attacked_by(them,QUEEN),s) + && squares_behind(us, s) & pos.rooks_and_queens(them)) + b3 = b2; + if((b2 & pos.pieces_of_color(them)) == EmptyBoardBB) { // There are no enemy pieces in the pawn's path! Are any of the // squares in the pawn's path attacked by the enemy? @@ -1219,7 +1208,6 @@ namespace { void init_safety() { QueenContactCheckBonus = get_option_value_int("Queen Contact Check Bonus"); - RookContactCheckBonus = get_option_value_int("Rook Contact Check Bonus"); QueenCheckBonus = get_option_value_int("Queen Check Bonus"); RookCheckBonus = get_option_value_int("Rook Check Bonus"); BishopCheckBonus = get_option_value_int("Bishop Check Bonus");