&& (ss-1)->statScore < 23767
&& eval >= beta
&& eval >= ss->staticEval
- && ss->staticEval >= beta - 20 * depth - 22 * improving + 168 * ss->ttPv + 159
+ && ss->staticEval >= beta - 20 * depth - 22 * improving + 168 * ss->ttPv + 177
&& !excludedMove
&& pos.non_pawn_material(us)
&& (ss->ply >= thisThread->nmpMinPly || us != thisThread->nmpColor))
ss->ttPv = ttPv;
}
- // Step 10. If the position is not in TT, decrease depth by 2
+ // Step 10. If the position is not in TT, decrease depth by 2 or 1 depending on node type
if ( PvNode
&& depth >= 6
&& !ttMove)
depth -= 2;
+ if ( cutNode
+ && depth >= 9
+ && !ttMove)
+ depth--;
+
moves_loop: // When in check, search starts here
ttCapture = ttMove && pos.capture_or_promotion(ttMove);
// Futility pruning: parent node (~5 Elo)
if ( !ss->inCheck
&& lmrDepth < 7
- && ss->staticEval + 174 + 157 * lmrDepth <= alpha)
+ && ss->staticEval + 172 + 157 * lmrDepth <= alpha)
continue;
// Prune moves with negative SEE (~20 Elo)
}
// Capture extensions for PvNodes and cutNodes
- else if ( (PvNode || cutNode)
- && captureOrPromotion
+ else if ( (PvNode || cutNode)
+ && captureOrPromotion
&& moveCount != 1)
extension = 1;