X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=3099924c0f2be48c2da9fde43c2303c562fcdb2b;hp=4f99eb870e5fc712ea7121fb6d042407a711c793;hb=2eec710318255df054a77abb7cd48d680453fd26;hpb=4758fd31b17129530dfeb81119b423c5bdde704a diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 4f99eb87..3099924c 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -152,6 +152,8 @@ namespace { // Hanging contains a bonus for each enemy hanging piece const Score Hanging = S(23, 20); + const Score KingPawnThreatOne = S(0, 64); + const Score KingPawnThreatMany = S(0, 128); #undef S @@ -498,6 +500,7 @@ namespace { Bitboard b, weakEnemies, protectedEnemies; Score score = SCORE_ZERO; + enum { Minor, Major }; // Protected enemies protectedEnemies = (pos.pieces(Them) ^ pos.pieces(Them,PAWN)) @@ -505,7 +508,7 @@ namespace { & (ei.attackedBy[Us][KNIGHT] | ei.attackedBy[Us][BISHOP]); if(protectedEnemies) - score += Threat[0][type_of(pos.piece_on(lsb(protectedEnemies)))]; + score += Threat[Minor][type_of(pos.piece_on(lsb(protectedEnemies)))]; // Enemies not defended by a pawn and under our attack weakEnemies = pos.pieces(Them) @@ -517,16 +520,20 @@ namespace { { b = weakEnemies & (ei.attackedBy[Us][KNIGHT] | ei.attackedBy[Us][BISHOP]); if (b) - score += Threat[0][type_of(pos.piece_on(lsb(b)))]; + score += Threat[Minor][type_of(pos.piece_on(lsb(b)))]; b = weakEnemies & (ei.attackedBy[Us][ROOK] | ei.attackedBy[Us][QUEEN]); if (b) - score += Threat[1][type_of(pos.piece_on(lsb(b)))]; + score += Threat[Major][type_of(pos.piece_on(lsb(b)))]; b = weakEnemies & ~ei.attackedBy[Them][ALL_PIECES]; if (b) score += more_than_one(b) ? Hanging * popcount(b) : Hanging; - } + + b = weakEnemies & pos.pieces(Them, PAWN) & ei.attackedBy[Us][KING]; + if (b) + score += more_than_one(b) ? KingPawnThreatMany : KingPawnThreatOne; + } if (Trace) Tracing::terms[Us][Tracing::THREAT] = score;