}
- // evaluate_unstoppable_pawns() scores the most advanced among the passed and
- // candidate pawns. In case both players have no pieces but pawns, this is
- // somewhat related to the possibility that pawns are unstoppable.
+ // evaluate_unstoppable_pawns() scores the most advanced passed pawn. In case
+ // both players have no pieces but pawns, this is somewhat related to the
+ // possibility that pawns are unstoppable.
Score evaluate_unstoppable_pawns(Color us, const EvalInfo& ei) {
- Bitboard b = ei.pi->passed_pawns(us) | ei.pi->candidate_pawns(us);
+ Bitboard b = ei.pi->passed_pawns(us);
return b ? Unstoppable * int(relative_rank(us, frontmost_sq(us, b))) : SCORE_ZERO;
}
// If we have a specialized evaluation function for the current material
// configuration, call it and return.
if (ei.mi->specialized_eval_exists())
- return ei.mi->evaluate(pos);
+ return ei.mi->evaluate(pos) + Eval::Tempo;
// Probe the pawn hash table
ei.pi = Pawns::probe(pos, thisThread->pawnsTable);
Tracing::sf = sf;
}
- return pos.side_to_move() == WHITE ? v : -v;
+ return (pos.side_to_move() == WHITE ? v : -v) + Eval::Tempo;
}
/// of the position always from the point of view of the side to move.
Value evaluate(const Position& pos) {
- return do_evaluate<false>(pos) + Tempo;
+ return do_evaluate<false>(pos);
}