tte->save(posKey, VALUE_NONE, ss->ttPv, BOUND_NONE, DEPTH_NONE, MOVE_NONE, eval);
}
+ // Update static history for previous move
+ if (is_ok((ss-1)->currentMove) && !(ss-1)->inCheck && !priorCapture)
+ {
+ int bonus = ss->staticEval > -(ss-1)->staticEval + 2 * Tempo ? -stat_bonus(depth) :
+ ss->staticEval < -(ss-1)->staticEval + 2 * Tempo ? stat_bonus(depth) :
+ 0;
+ thisThread->staticHistory[~us][from_to((ss-1)->currentMove)] << bonus;
+ }
+
// Step 7. Razoring (~1 Elo)
if ( !rootNode // The required rootNode PV handling is not available in qsearch
&& depth == 1
Move countermove = thisThread->counterMoves[pos.piece_on(prevSq)][prevSq];
MovePicker mp(pos, ttMove, depth, &thisThread->mainHistory,
+ &thisThread->staticHistory,
&thisThread->lowPlyHistory,
&captureHistory,
contHist,
}
else
{
- // Increase reduction for captures/promotions if late move and at low depth
- if (depth < 8 && moveCount > 2)
- r++;
-
// Unless giving check, this capture is likely bad
if ( !givesCheck
&& ss->staticEval + PieceValue[EG][pos.captured_piece()] + 210 * depth <= alpha)
int bonus = value > alpha ? stat_bonus(newDepth)
: -stat_bonus(newDepth);
- if (move == ss->killers[0])
- bonus += bonus / 4;
-
update_continuation_histories(ss, movedPiece, to_sq(move), bonus);
}
}
// queen and checking knight promotions, and other checks(only if depth >= DEPTH_QS_CHECKS)
// will be generated.
MovePicker mp(pos, ttMove, depth, &thisThread->mainHistory,
+ &thisThread->staticHistory,
&thisThread->captureHistory,
contHist,
to_sq((ss-1)->currentMove));
// Do not search moves with negative SEE values
if ( bestValue > VALUE_TB_LOSS_IN_MAX_PLY
- && !(givesCheck && pos.is_discovery_check_on_king(~pos.side_to_move(), move))
&& !pos.see_ge(move))
continue;