mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 00:33:09 +00:00
Move draw checks right after doing the move
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
07e0dd27fb
commit
969ad8001c
1 changed files with 24 additions and 14 deletions
|
@ -726,7 +726,7 @@ namespace {
|
|||
if (PvNode && thread.maxPly < ss->ply)
|
||||
thread.maxPly = ss->ply;
|
||||
|
||||
// Step 1. Initialize node and poll. Polling can abort search
|
||||
// Step 1. Initialize node.
|
||||
if (!SpNode)
|
||||
{
|
||||
ss->currentMove = ss->bestMove = threatMove = (ss+1)->excludedMove = MOVE_NONE;
|
||||
|
@ -742,18 +742,6 @@ namespace {
|
|||
goto split_point_start;
|
||||
}
|
||||
|
||||
if (pos.thread() == 0 && ++NodesSincePoll > NodesBetweenPolls)
|
||||
{
|
||||
NodesSincePoll = 0;
|
||||
poll(pos);
|
||||
}
|
||||
|
||||
// Step 2. Check for aborted search and immediate draw
|
||||
if (( StopRequest
|
||||
|| pos.is_draw<false>()
|
||||
|| ss->ply > PLY_MAX) && !RootNode)
|
||||
return VALUE_DRAW;
|
||||
|
||||
// Step 3. Mate distance pruning
|
||||
if (!RootNode)
|
||||
{
|
||||
|
@ -914,7 +902,12 @@ namespace {
|
|||
if (pos.pl_move_is_legal(move, ci.pinned))
|
||||
{
|
||||
pos.do_move(move, st, ci, pos.move_gives_check(move, ci));
|
||||
value = -search<NonPV>(pos, ss+1, -rbeta, -rbeta+1, rdepth);
|
||||
|
||||
if (pos.is_draw<false>() || ss->ply + 1 > PLY_MAX)
|
||||
value = VALUE_DRAW;
|
||||
else
|
||||
value = -search<NonPV>(pos, ss+1, -rbeta, -rbeta+1, rdepth);
|
||||
|
||||
pos.undo_move(move);
|
||||
if (value >= rbeta)
|
||||
return value;
|
||||
|
@ -1104,6 +1097,22 @@ split_point_start: // At split points actual search starts from here
|
|||
// Step 14. Make the move
|
||||
pos.do_move(move, st, ci, givesCheck);
|
||||
|
||||
// Step XX. Poll. Check if search should be aborted.
|
||||
if (pos.thread() == 0 && ++NodesSincePoll > NodesBetweenPolls)
|
||||
{
|
||||
NodesSincePoll = 0;
|
||||
poll(pos);
|
||||
}
|
||||
|
||||
// Step XX. Check for aborted search and immediate draw
|
||||
if ( StopRequest
|
||||
|| pos.is_draw<false>()
|
||||
|| ss->ply + 1 > PLY_MAX)
|
||||
{
|
||||
value = VALUE_DRAW;
|
||||
goto undo;
|
||||
}
|
||||
|
||||
// Step extra. pv search (only in PV nodes)
|
||||
// The first move in list is the expected PV
|
||||
if (isPvMove)
|
||||
|
@ -1150,6 +1159,7 @@ split_point_start: // At split points actual search starts from here
|
|||
}
|
||||
|
||||
// Step 17. Undo move
|
||||
undo:
|
||||
pos.undo_move(move);
|
||||
|
||||
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
|
||||
|
|
Loading…
Add table
Reference in a new issue