ValueType vt;
Value bestValue, value, oldAlpha;
Value refinedValue, nullValue, futilityBase, futilityValueScaled; // Non-PV specific
- bool isPvMove, inCheck, singularExtensionNode, givesCheck, captureOrPromotion, dangerous, isBadCap;
+ bool isPvMove, inCheck, singularExtensionNode, givesCheck, captureOrPromotion, dangerous;
int moveCount = 0, playedMoveCount = 0;
int threadID = pos.thread();
SplitPoint* sp = NULL;
}
}
- // Bad capture detection. Will be used by prob-cut search
- isBadCap = depth >= 3 * ONE_PLY
- && depth < 8 * ONE_PLY
- && captureOrPromotion
- && move != ttMove
- && !dangerous
- && !move_is_promotion(move)
- && abs(alpha) < VALUE_MATE_IN_PLY_MAX
- && pos.see_sign(move) < 0;
-
// Step 13. Make the move
pos.do_move(move, st, ci, givesCheck);
// Probcut search for bad captures. If a reduced search returns a value
// very below beta then we can (almost) safely prune the bad capture.
- if (isBadCap)
+ if ( depth >= 3 * ONE_PLY
+ && depth < 8 * ONE_PLY
+ && mp.isBadCapture()
+ && move != ttMove
+ && !dangerous
+ && !move_is_promotion(move)
+ && abs(alpha) < VALUE_MATE_IN_PLY_MAX)
{
ss->reduction = 3 * ONE_PLY;
Value rAlpha = alpha - 300;
TTEntry* tte;
int ply = 1;
- assert(pv[0] != MOVE_NONE && pos.move_is_legal(pv[0]));
+ assert(pv[0] != MOVE_NONE && pos.move_is_pl(pv[0]));
pos.do_move(pv[0], *st++);
+ Bitboard pinned = pos.pinned_pieces(pos.side_to_move());
+
while ( (tte = TT.probe(pos.get_key())) != NULL
&& tte->move() != MOVE_NONE
- && pos.move_is_legal(tte->move())
+ && pos.move_is_pl(tte->move())
+ && pos.pl_move_is_legal(tte->move(), pinned)
&& ply < PLY_MAX
&& (!pos.is_draw() || ply < 2))
{
Value v, m = VALUE_NONE;
int ply = 0;
- assert(pv[0] != MOVE_NONE && pos.move_is_legal(pv[0]));
+ assert(pv[0] != MOVE_NONE && pos.move_is_pl(pv[0]));
do {
k = pos.get_key();