Depth extension, newDepth;
Value bestValue, value, ttValue, eval, maxValue, probCutBeta;
bool givesCheck, improving, didLMR, priorCapture;
- bool captureOrPromotion, doFullDepthSearch, moveCountPruning, ttCapture;
+ bool capture, doFullDepthSearch, moveCountPruning, ttCapture;
Piece movedPiece;
int moveCount, captureCount, quietCount, bestMoveCount, improvement, complexity;
ttValue = ss->ttHit ? value_from_tt(tte->value(), ss->ply, pos.rule50_count()) : VALUE_NONE;
ttMove = rootNode ? thisThread->rootMoves[thisThread->pvIdx].pv[0]
: ss->ttHit ? tte->move() : MOVE_NONE;
- ttCapture = ttMove && pos.capture_or_promotion(ttMove);
+ ttCapture = ttMove && pos.capture(ttMove);
if (!excludedMove)
ss->ttPv = PvNode || (ss->ttHit && tte->is_pv());
MovePicker mp(pos, ttMove, probCutBeta - ss->staticEval, depth - 3, &captureHistory);
bool ttPv = ss->ttPv;
+ bool captureOrPromotion;
ss->ttPv = false;
while ((move = mp.next_move()) != MOVE_NONE)
if (move != excludedMove && pos.legal(move))
{
- assert(pos.capture_or_promotion(move));
+ assert(pos.capture(move) || promotion_type(move) == QUEEN);
captureOrPromotion = true;
(ss+1)->pv = nullptr;
extension = 0;
- captureOrPromotion = pos.capture_or_promotion(move);
+ capture = pos.capture(move);
movedPiece = pos.moved_piece(move);
givesCheck = pos.gives_check(move);
// Reduced depth of the next LMR search
int lmrDepth = std::max(newDepth - reduction(improving, depth, moveCount, delta, thisThread->rootDelta), 0);
- if ( captureOrPromotion
+ if ( capture
|| givesCheck)
{
// Futility pruning for captures (~0 Elo)
// Update the current move (this must be done after singular extension search)
ss->currentMove = move;
ss->continuationHistory = &thisThread->continuationHistory[ss->inCheck]
- [captureOrPromotion]
+ [capture]
[movedPiece]
[to_sq(move)];
if ( depth >= 2
&& moveCount > 1 + (PvNode && ss->ply <= 1)
&& ( !ss->ttPv
- || !captureOrPromotion
+ || !capture
|| (cutNode && (ss-1)->moveCount > 1)))
{
Depth r = reduction(improving, depth, moveCount, delta, thisThread->rootDelta);
int bonus = value > alpha ? stat_bonus(newDepth)
: -stat_bonus(newDepth);
- if (captureOrPromotion)
+ if (capture)
bonus /= 6;
update_continuation_histories(ss, movedPiece, to_sq(move), bonus);
// If the move is worse than some previously searched move, remember it to update its stats later
if (move != bestMove)
{
- if (captureOrPromotion && captureCount < 32)
+ if (capture && captureCount < 32)
capturesSearched[captureCount++] = move;
- else if (!captureOrPromotion && quietCount < 64)
+ else if (!capture && quietCount < 64)
quietsSearched[quietCount++] = move;
}
}
Move ttMove, move, bestMove;
Depth ttDepth;
Value bestValue, value, ttValue, futilityValue, futilityBase;
- bool pvHit, givesCheck, captureOrPromotion;
+ bool pvHit, givesCheck, capture;
int moveCount;
if (PvNode)
continue;
givesCheck = pos.gives_check(move);
- captureOrPromotion = pos.capture_or_promotion(move);
+ capture = pos.capture(move);
moveCount++;
ss->currentMove = move;
ss->continuationHistory = &thisThread->continuationHistory[ss->inCheck]
- [captureOrPromotion]
+ [capture]
[pos.moved_piece(move)]
[to_sq(move)];
// Continuation history based pruning (~2 Elo)
- if ( !captureOrPromotion
+ if ( !capture
&& bestValue > VALUE_TB_LOSS_IN_MAX_PLY
&& (*contHist[0])[pos.moved_piece(move)][to_sq(move)] < CounterMovePruneThreshold
&& (*contHist[1])[pos.moved_piece(move)][to_sq(move)] < CounterMovePruneThreshold)
// movecount pruning for quiet check evasions
if ( bestValue > VALUE_TB_LOSS_IN_MAX_PLY
&& quietCheckEvasions > 1
- && !captureOrPromotion
+ && !capture
&& ss->inCheck)
continue;
- quietCheckEvasions += !captureOrPromotion && ss->inCheck;
+ quietCheckEvasions += !capture && ss->inCheck;
// Make and search the move
pos.do_move(move, st, givesCheck);
bonus2 = bestValue > beta + PawnValueMg ? bonus1 // larger bonus
: stat_bonus(depth); // smaller bonus
- if (!pos.capture_or_promotion(bestMove))
+ if (!pos.capture(bestMove))
{
// Increase stats for the best move in case it was a quiet move
update_quiet_stats(pos, ss, bestMove, bonus2);