X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fevaluate.cpp;h=37cdce997c8ec014484c5ab865d50c89751a4d62;hp=2f9cec5cb2891ef48f043c79ff0ed4886f6a387c;hb=4a6d59c6c7caa8a9055197280ea7bdcd072feeaa;hpb=e8cc5c996818c7e128bd8db7947d1c4c43be865f diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 2f9cec5c..37cdce99 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -124,7 +124,8 @@ namespace { S( 94, 99), S( 96,100), S(99,111), S(99,112) } }; - // Outpost[knight/bishop][supported by pawn] + // Outpost[knight/bishop][supported by pawn] contains bonuses for knights and bishops + // outposts, bigger if outpost piece is supported by a pawn. const Score Outpost[][2] = { { S(28, 7), S(42,11) }, // Knights { S(12, 3), S(18, 5) } // Bishops @@ -700,9 +701,18 @@ namespace { ei.attackedBy[WHITE][ALL_PIECES] |= ei.attackedBy[WHITE][KING]; ei.attackedBy[BLACK][ALL_PIECES] |= ei.attackedBy[BLACK][KING]; - // Do not include in mobility squares protected by enemy pawns or occupied by our pawns or king - Bitboard mobilityArea[] = { ~(ei.attackedBy[BLACK][PAWN] | pos.pieces(WHITE, PAWN, KING)), - ~(ei.attackedBy[WHITE][PAWN] | pos.pieces(BLACK, PAWN, KING)) }; + // Pawns blocked or on ranks 2 and 3. Will be excluded from the mobility area + Bitboard blockedPawns[] = { + pos.pieces(WHITE, PAWN) & (shift_bb(pos.pieces()) | Rank2BB | Rank3BB), + pos.pieces(BLACK, PAWN) & (shift_bb(pos.pieces()) | Rank7BB | Rank6BB) + }; + + // Do not include in mobility squares protected by enemy pawns, or occupied + // by our blocked pawns or king. + Bitboard mobilityArea[] = { + ~(ei.attackedBy[BLACK][PAWN] | blockedPawns[WHITE] | pos.king_square(WHITE)), + ~(ei.attackedBy[WHITE][PAWN] | blockedPawns[BLACK] | pos.king_square(BLACK)) + }; // Evaluate pieces and mobility score += evaluate_pieces(pos, ei, mobility, mobilityArea);