if ( captureOrPromotion
|| givesCheck)
{
- // Capture history based pruning when the move doesn't give check
- if ( !givesCheck
- && lmrDepth < 1
- && captureHistory[movedPiece][to_sq(move)][type_of(pos.piece_on(to_sq(move)))] < 0)
+ // Futility pruning for captures
+ if ( !pos.empty(to_sq(move))
+ && !givesCheck
+ && !PvNode
+ && lmrDepth < 6
+ && !ss->inCheck
+ && ss->staticEval + 342 + 238 * lmrDepth + PieceValue[EG][pos.piece_on(to_sq(move))]
+ + captureHistory[movedPiece][to_sq(move)][type_of(pos.piece_on(to_sq(move)))] / 8 < alpha)
continue;
// SEE based pruning
extension = -2;
}
- // Capture extensions for PvNodes and cutNodes
- else if ( (PvNode || cutNode)
- && captureOrPromotion
- && moveCount != 1)
- extension = 1;
-
// Check extensions
else if ( givesCheck
&& depth > 6