Key posKey;
Move ttMove, move, bestMove;
Value bestValue, value, ttValue, futilityValue, futilityBase;
- bool givesCheck, enoughMaterial, evasionPrunable;
+ bool givesCheck, enoughMaterial, evasionPrunable, fromNull;
Depth ttDepth;
ss->currentMove = bestMove = MOVE_NONE;
ss->ply = (ss-1)->ply + 1;
+ fromNull = (ss-1)->currentMove == MOVE_NULL;
// Check for an instant draw or maximum ply reached
if (pos.is_draw<false, false>() || ss->ply > MAX_PLY)
}
else
{
- if (tte)
+ if (fromNull)
+ {
+ ss->staticEval = bestValue = -(ss-1)->staticEval;
+ ss->evalMargin = VALUE_ZERO;
+ }
+ else if (tte)
{
assert(tte->static_value() != VALUE_NONE || Threads.size() > 1);
if ( !PvNode
&& !InCheck
&& !givesCheck
+ && !fromNull
&& move != ttMove
&& enoughMaterial
&& type_of(move) != PROMOTION