// Penalty when trapped by the king, even more if the king cannot castle
else if (mob <= 3)
{
- Square ksq = pos.square<KING>(Us);
+ File kf = file_of(pos.square<KING>(Us));
- if ( ((file_of(ksq) < FILE_E) == (file_of(s) < file_of(ksq)))
- && !pe->semiopen_side(Us, file_of(ksq), file_of(s) < file_of(ksq)))
+ if ((kf < FILE_E) == (file_of(s) < kf))
score -= (TrappedRook - make_score(mob * 22, 0)) * (1 + !pos.can_castle(Us));
}
}
} // namespace
-Score Eval::Contempt = SCORE_ZERO;
+std::atomic<Score> Eval::Contempt;
/// evaluate() is the evaluator for the outer world. It returns a static evaluation
/// of the position from the point of view of the side to move.
std::memset(scores, 0, sizeof(scores));
- Value v = Evaluation<TRACE>(pos).value() + Eval::Tempo;
+ Eval::Contempt = SCORE_ZERO;
+
+ Value v = Eval::Tempo + Evaluation<TRACE>(pos).value();
+
v = pos.side_to_move() == WHITE ? v : -v; // White's point of view
std::stringstream ss;