goto moves_loop;
}
- moveCount = quietCount = 0;
+ moveCount = quietCount = ss->moveCount = 0;
bestValue = -VALUE_INFINITE;
ss->ply = (ss-1)->ply + 1;
if ( !PvNode
&& depth < 4 * ONE_PLY
&& eval + razor_margin(depth) <= alpha
- && ttMove == MOVE_NONE
- && !pos.pawn_on_7th(pos.side_to_move()))
+ && ttMove == MOVE_NONE)
{
if ( depth <= ONE_PLY
&& eval + razor_margin(3 * ONE_PLY) <= alpha)
assert((ss-1)->currentMove != MOVE_NONE);
assert((ss-1)->currentMove != MOVE_NULL);
- MovePicker mp(pos, ttMove, History, CounterMovesHistory, pos.captured_piece_type());
+ MovePicker mp(pos, ttMove, History, CounterMovesHistory, PieceValue[MG][pos.captured_piece_type()]);
CheckInfo ci(pos);
while ((move = mp.next_move<false>()) != MOVE_NONE)
}
else
++moveCount;
+
+ ss->moveCount = moveCount;
if (RootNode)
{
// Futility pruning: parent node
if (predictedDepth < 7 * ONE_PLY)
{
- futilityValue = ss->staticEval + futility_margin(predictedDepth) + 256;
+ futilityValue = ss->staticEval + futility_margin(predictedDepth) + 256;
if (futilityValue <= alpha)
{
if (!RootNode && !SpNode && !pos.legal(move, ci.pinned))
{
moveCount--;
+ ss->moveCount = moveCount;
continue;
}
[pos.piece_on(to_sq(move))][to_sq(move)] <= VALUE_ZERO))
ss->reduction += ONE_PLY;
- if (move == countermove)
+ if ( History[pos.piece_on(to_sq(move))][to_sq(move)] > VALUE_ZERO
+ && CounterMovesHistory[pos.piece_on(prevMoveSq)][prevMoveSq]
+ [pos.piece_on(to_sq(move))][to_sq(move)] > VALUE_ZERO)
ss->reduction = std::max(DEPTH_ZERO, ss->reduction - ONE_PLY);
// Decrease reduction for moves that escape a capture
cmh.update(pos.moved_piece(quiets[i]), to_sq(quiets[i]), -bonus);
}
- // Extra penalty for TT move in previous ply when it gets refuted
- if (is_ok((ss-2)->currentMove) && (ss-1)->currentMove == (ss-1)->ttMove)
+ // Extra penalty for PV move in previous ply when it gets refuted
+ if (is_ok((ss-2)->currentMove) && (ss-1)->moveCount==1 && !pos.captured_piece_type())
{
Square prevPrevSq = to_sq((ss-2)->currentMove);
HistoryStats& ttMoveCmh = CounterMovesHistory[pos.piece_on(prevPrevSq)][prevPrevSq];