X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fevaluate.cpp;h=c6740b5f65ba0f45f67c177f5b0ca1da13540589;hb=7d4d3a2c3a4c6ce96bdbcfecf373934fdccc9b07;hp=08796159bde5e8cc1860a512c5e541e2dd8df7ee;hpb=020dd69a3512d01c7f189b1aea64fa75c7e1b7cd;p=stockfish diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 08796159..c6740b5f 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -310,8 +310,8 @@ namespace { while ((s = *pl++) != SQ_NONE) { // Find attacked squares, including x-ray attacks for bishops and rooks - b = Pt == BISHOP ? attacks_bb(s, pos.pieces() ^ pos.pieces(Us, QUEEN)) - : Pt == ROOK ? attacks_bb< ROOK>(s, pos.pieces() ^ pos.pieces(Us, ROOK, QUEEN)) + b = Pt == BISHOP ? attacks_bb(s, pos.pieces() ^ pos.pieces(QUEEN)) + : Pt == ROOK ? attacks_bb< ROOK>(s, pos.pieces() ^ pos.pieces(QUEEN) ^ pos.pieces(Us, ROOK)) : pos.attacks_from(s); if (pos.pinned_pieces(Us) & s) @@ -423,13 +423,11 @@ namespace { Score Evaluation::evaluate_king() { const Color Them = (Us == WHITE ? BLACK : WHITE); - const Direction Up = (Us == WHITE ? NORTH : SOUTH); const Bitboard Camp = (Us == WHITE ? AllSquares ^ Rank6BB ^ Rank7BB ^ Rank8BB : AllSquares ^ Rank1BB ^ Rank2BB ^ Rank3BB); const Square ksq = pos.square(Us); Bitboard weak, b, b1, b2, safe, unsafeChecks; - int kingDanger; // King shelter and enemy pawns storm Score score = pe->king_safety(pos, ksq); @@ -442,7 +440,7 @@ namespace { & ~attackedBy2[Us] & (attackedBy[Us][KING] | attackedBy[Us][QUEEN] | ~attackedBy[Us][ALL_PIECES]); - kingDanger = unsafeChecks = 0; + int kingDanger = unsafeChecks = 0; // Analyse the safe enemy's checks which are possible on next move safe = ~pos.pieces(Them); @@ -478,9 +476,8 @@ namespace { unsafeChecks |= b; // Unsafe or occupied checking squares will also be considered, as long as - // the square is not defended by our pawns or occupied by a blocked pawn. - unsafeChecks &= ~( attackedBy[Us][PAWN] - | (pos.pieces(Them, PAWN) & shift(pos.pieces(PAWN)))); + // the square is in the attacker's mobility area. + unsafeChecks &= mobilityArea[Them]; kingDanger += kingAttackersCount[Them] * kingAttackersWeight[Them] + 102 * kingAdjacentZoneAttacksCount[Them] @@ -894,7 +891,7 @@ namespace { Trace::add(TOTAL, score); } - return (pos.side_to_move() == WHITE ? v : -v) + Eval::Tempo; // Side to move point of view + return pos.side_to_move() == WHITE ? v : -v; // Side to move point of view } } // namespace @@ -906,7 +903,7 @@ Score Eval::Contempt = SCORE_ZERO; Value Eval::evaluate(const Position& pos) { - return Evaluation<>(pos).value(); + return Evaluation<>(pos).value() + Eval::Tempo; } /// trace() is like evaluate(), but instead of returning a value, it returns @@ -917,7 +914,7 @@ std::string Eval::trace(const Position& pos) { std::memset(scores, 0, sizeof(scores)); - Value v = Evaluation(pos).value(); + Value v = Evaluation(pos).value() + Eval::Tempo; v = pos.side_to_move() == WHITE ? v : -v; // White's point of view std::stringstream ss;