Thread* bestThread = this;
- if (int(Options["MultiPV"]) == 1 &&
- !Limits.depth &&
- !(Skill(Options["Skill Level"]).enabled() || int(Options["UCI_LimitStrength"])) &&
- rootMoves[0].pv[0] != MOVE_NONE)
+ if ( int(Options["MultiPV"]) == 1
+ && !Limits.depth
+ && !(Skill(Options["Skill Level"]).enabled() || int(Options["UCI_LimitStrength"]))
+ && rootMoves[0].pv[0] != MOVE_NONE)
bestThread = Threads.get_best_thread();
bestPreviousScore = bestThread->rootMoves[0].score;
// search to overwrite a previous full search TT value, so we use a different
// position key in case of an excluded move.
excludedMove = ss->excludedMove;
- posKey = pos.key() ^ (Key(excludedMove) << 48); // Isn't a very good hash
+ posKey = excludedMove == MOVE_NONE ? pos.key() : pos.key() ^ make_key(excludedMove);
tte = TT.probe(posKey, ttHit);
ttValue = ttHit ? value_from_tt(tte->value(), ss->ply, pos.rule50_count()) : VALUE_NONE;
ttMove = rootNode ? thisThread->rootMoves[thisThread->pvIdx].pv[0]
ttPv = PvNode || (ttHit && tte->is_pv());
formerPv = ttPv && !PvNode;
- if (ttPv && depth > 12 && ss->ply - 1 < MAX_LPH && !priorCapture && is_ok((ss-1)->currentMove))
+ if ( ttPv
+ && depth > 12
+ && ss->ply - 1 < MAX_LPH
+ && !priorCapture
+ && is_ok((ss-1)->currentMove))
thisThread->lowPlyHistory[ss->ply - 1][from_to((ss-1)->currentMove)] << stat_bonus(depth - 5);
// thisThread->ttHitAverage can be used to approximate the running average of ttHit
// Initialize a MovePicker object for the current position, and prepare
// to search the moves. Because the depth is <= 0 here, only captures,
- // queen promotions and checks (only if depth >= DEPTH_QS_CHECKS) will
- // be generated.
+ // 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->captureHistory,
contHist,
<< " multipv " << i + 1
<< " score " << UCI::value(v);
+ if (Options["UCI_ShowWDL"])
+ ss << UCI::wdl(v, pos.game_ply());
+
if (!tb && i == pvIdx)
ss << (v >= beta ? " lowerbound" : v <= alpha ? " upperbound" : "");