moveIsCheck = pos.move_is_check(move, ci);
captureOrPromotion = pos.move_is_capture_or_promotion(move);
- movesSearched[moveCount++] = ss[ply].currentMove = move;
+ movesSearched[moveCount++] = move;
// Decide the new search depth
ext = extension(pos, move, true, captureOrPromotion, moveIsCheck, singleReply, mateThreat, &dangerous);
// Only move extension
if ( moveCount == 1
&& ext < OnePly
- && depth >= 8 * OnePly
+ && depth >= 4 * OnePly
&& tte
&& (tte->type() & VALUE_TYPE_LOWER)
&& tte->move() != MOVE_NONE
Value ttValue = value_from_tt(tte->value(), ply);
if (abs(ttValue) < VALUE_KNOWN_WIN)
{
- Value excValue = search(pos, ss, ttValue - OnlyMoveMargin, depth / 2, ply, false, threadID, tte->move());
+ Value excValue = search(pos, ss, ttValue - OnlyMoveMargin, Max(Min(depth / 2, depth - 4 * OnePly), OnePly), ply, false, threadID, tte->move());
if (excValue < ttValue - OnlyMoveMargin)
- ext = OnePly;
+ ext = (depth >= 8 * OnePly)? OnePly : ext + OnePly / 2;
}
}
newDepth = depth - OnePly + ext;
+ // Update current move
+ ss[ply].currentMove = move;
+
// Make and search the move
pos.do_move(move, st, ci, moveIsCheck);
moveIsCheck = pos.move_is_check(move, ci);
captureOrPromotion = pos.move_is_capture_or_promotion(move);
- movesSearched[moveCount++] = ss[ply].currentMove = move;
+ movesSearched[moveCount++] = move;
// Decide the new search depth
ext = extension(pos, move, false, captureOrPromotion, moveIsCheck, singleReply, mateThreat, &dangerous);
if ( forbiddenMove == MOVE_NONE
&& moveCount == 1
&& ext < OnePly
- && depth >= 8 * OnePly
+ && depth >= 4 * OnePly
&& tte
&& (tte->type() & VALUE_TYPE_LOWER)
&& tte->move() != MOVE_NONE
Value ttValue = value_from_tt(tte->value(), ply);
if (abs(ttValue) < VALUE_KNOWN_WIN)
{
- Value excValue = search(pos, ss, ttValue - OnlyMoveMargin, depth / 2, ply, false, threadID, tte->move());
+ Value excValue = search(pos, ss, ttValue - OnlyMoveMargin, Max(Min(depth / 2, depth - 4 * OnePly), OnePly), ply, false, threadID, tte->move());
if (excValue < ttValue - OnlyMoveMargin)
- ext = OnePly;
+ ext = (depth >= 8 * OnePly)? OnePly : ext + OnePly / 2;
}
}
newDepth = depth - OnePly + ext;
+ // Update current move
+ ss[ply].currentMove = move;
+
// Futility pruning
if ( useFutilityPruning
&& !dangerous