- ss->staticEval = eval =
- (ss-1)->currentMove != MOVE_NULL ? evaluate(pos)
- : -(ss-1)->staticEval + 2 * Eval::Tempo;
+ if ((ss-1)->currentMove != MOVE_NULL)
+ {
+ int p = (ss-1)->statScore;
+ int bonus = p > 0 ? (-p - 2500) / 512 :
+ p < 0 ? (-p + 2500) / 512 : 0;
+
+ pureStaticEval = evaluate(pos);
+ ss->staticEval = eval = pureStaticEval + bonus;
+ }
+ else
+ ss->staticEval = eval = pureStaticEval = -(ss-1)->staticEval + 2 * Eval::Tempo;