movesSearched[moveCount++] = ss[ply].currentMove = move;
if (moveIsCapture)
- ss[ply].currentMoveCaptureValue = pos.midgame_value_of_piece_on(move_to(move));
- else if (move_is_ep(move))
- ss[ply].currentMoveCaptureValue = PawnValueMidgame;
+ ss[ply].currentMoveCaptureValue =
+ move_is_ep(move)? PawnValueMidgame : pos.midgame_value_of_piece_on(move_to(move));
else
ss[ply].currentMoveCaptureValue = Value(0);
Value futilityValue = staticValue
+ Max(pos.midgame_value_of_piece_on(move_to(move)),
pos.endgame_value_of_piece_on(move_to(move)))
+ + (move_is_ep(move) ? PawnValueEndgame : Value(0))
+ FutilityMargin0
+ ei.futilityMargin;
assert(move_is_ok(move));
- ss[sp->ply].currentMoveCaptureValue = move_is_ep(move)?
- PawnValueMidgame : pos.midgame_value_of_piece_on(move_to(move));
+ if (moveIsCapture)
+ ss[sp->ply].currentMoveCaptureValue =
+ move_is_ep(move)? PawnValueMidgame : pos.midgame_value_of_piece_on(move_to(move));
+ else
+ ss[sp->ply].currentMoveCaptureValue = Value(0);
lock_grab(&(sp->lock));
int moveCount = ++sp->moves;
Depth extension(const Position &pos, Move m, bool pvNode, bool check,
bool singleReply, bool mateThreat, bool* dangerous) {
+ assert(m != MOVE_NONE);
+
Depth result = Depth(0);
*dangerous = check || singleReply || mateThreat;
*dangerous = true;
}
- if ( pos.midgame_value_of_piece_on(move_to(m)) >= RookValueMidgame
+ if ( pos.move_is_capture(m)
+ && pos.type_of_piece_on(move_to(m)) != PAWN
&& ( pos.non_pawn_material(WHITE) + pos.non_pawn_material(BLACK)
- pos.midgame_value_of_piece_on(move_to(m)) == Value(0))
- && !move_promotion(m))
+ && !move_promotion(m)
+ && !move_is_ep(m))
{
result += PawnEndgameExtension[pvNode];
*dangerous = true;
// value of the threatening piece, don't prune move which defend it.
if ( !PruneDefendingMoves
&& threat != MOVE_NONE
- && pos.type_of_piece_on(tto) != NO_PIECE_TYPE
+ && pos.move_is_capture(threat)
&& ( pos.midgame_value_of_piece_on(tfrom) >= pos.midgame_value_of_piece_on(tto)
|| pos.type_of_piece_on(tfrom) == KING)
&& pos.move_attacks_square(m, tto))