X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fevaluate.cpp;h=56c975945d13d4713a7648db702446dfd6a8568a;hb=1093047e7d72ed0c82e143c2cc0af9ef7b0380ed;hp=1e5c588a31eb8a357bdf4e54591e8484cc97f1df;hpb=82697f1193cc8c99c99c282361a3ada25c758243;p=stockfish diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 1e5c588a..56c97594 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -172,10 +172,10 @@ namespace { const Score MinorBehindPawn = S( 16, 0); const Score PawnlessFlank = S( 20, 80); const Score RookOnPawn = S( 8, 24); + const Score SliderOnQueen = S( 42, 21); const Score ThreatByPawnPush = S( 47, 26); const Score ThreatByRank = S( 16, 3); const Score ThreatBySafePawn = S(175,168); - const Score ThreatOnQueen = S( 42, 21); const Score TrappedBishopA1H1 = S( 50, 50); const Score TrappedRook = S( 92, 0); const Score WeakQueen = S( 50, 10); @@ -211,7 +211,7 @@ namespace { // attackedBy[color][piece type] is a bitboard representing all squares // attacked by a given color and piece type. Special "piece types" which - // are also calculated are QUEEN_DIAGONAL and ALL_PIECES. + // is also calculated is ALL_PIECES. Bitboard attackedBy[COLOR_NB][PIECE_TYPE_NB]; // attackedBy2[color] are the squares attacked by 2 pieces of a given color, @@ -297,9 +297,6 @@ namespace { attackedBy[Us][Pt] = 0; - if (Pt == QUEEN) - attackedBy[Us][QUEEN_DIAGONAL] = 0; - while ((s = *pl++) != SQ_NONE) { // Find attacked squares, including x-ray attacks for bishops and rooks @@ -314,9 +311,6 @@ namespace { attackedBy[Us][Pt] |= b; attackedBy[Us][ALL_PIECES] |= b; - if (Pt == QUEEN) - attackedBy[Us][QUEEN_DIAGONAL] |= b & PseudoAttacks[BISHOP][s]; - if (b & kingRing[Them]) { kingAttackersCount[Us]++; @@ -589,22 +583,20 @@ namespace { score += ThreatByPawnPush * popcount(b); - // Bonus for safe slider threats on the next move toward enemy queen - safeThreats = ~pos.pieces(Us) & ~attackedBy2[Them] & attackedBy2[Us]; - b = (attackedBy[Us][BISHOP] & attackedBy[Them][QUEEN_DIAGONAL]) - | (attackedBy[Us][ROOK ] & attackedBy[Them][QUEEN] & ~attackedBy[Them][QUEEN_DIAGONAL]); - - score += ThreatOnQueen * popcount(b & safeThreats); - - // Bonus for knight threats on the next moves against enemy queen + // Bonus for threats on the next moves against enemy queen if (pos.count(Them) == 1) { - b = pos.attacks_from(pos.square(Them)) - & attackedBy[Us][KNIGHT] - & ~pos.pieces(Us, PAWN, KING) - & ~stronglyProtected; + Square s = pos.square(Them); + safeThreats = mobilityArea[Us] & ~stronglyProtected; + + b = attackedBy[Us][KNIGHT] & pos.attacks_from(s); + + score += KnightOnQueen * popcount(b & safeThreats); + + b = (attackedBy[Us][BISHOP] & pos.attacks_from(s)) + | (attackedBy[Us][ROOK ] & pos.attacks_from(s)); - score += KnightOnQueen * popcount(b); + score += SliderOnQueen * popcount(b & safeThreats & attackedBy2[Us]); } if (T)