}
}
- // En passant capture with check? We have already handled the case
+ // En passant capture with check ? We have already handled the case
// of direct checks and ordinary discovered check, the only case we
- // need to handle is the unusual case of a discovered check through the
- // captured pawn.
+ // need to handle is the unusual case of a discovered check through
+ // the captured pawn.
if (move_is_ep(m))
{
Square capsq = make_square(square_file(to), square_rank(from));
}
// Prefetch TT access as soon as we know key is updated
- TT.prefetch(key);
+ prefetch((char*)TT.first_entry(key));
// Move the piece
Bitboard move_bb = make_move_bb(from, to);
st->key ^= zobEp[st->epSquare];
st->key ^= zobSideToMove;
- TT.prefetch(st->key);
+ prefetch((char*)TT.first_entry(st->key));
sideToMove = opposite_color(sideToMove);
st->epSquare = SQ_NONE;
Square from = move_from(m);
Square to = move_to(m);
- // Early return if SEE cannot be negative because capturing piece value
- // is not bigger then captured one.
- if ( midgame_value_of_piece_on(from) <= midgame_value_of_piece_on(to)
- && type_of_piece_on(from) != KING)
- return 1;
+ // Early return if SEE cannot be negative because captured piece value
+ // is not less then capturing one. Note that king moves always return
+ // here because king midgame value is set to 0.
+ if (midgame_value_of_piece_on(to) >= midgame_value_of_piece_on(from))
+ return 1;
return see(from, to);
}
/// Position::init_piece_square_tables() initializes the piece square tables.
-/// This is a two-step operation: First, the white halves of the tables are
-/// copied from the MgPST[][] and EgPST[][] arrays, with a small random number
-/// added to each entry if the "Randomness" UCI parameter is non-zero.
+/// This is a two-step operation:
+/// First, the white halves of the tables are
+/// copied from the MgPST[][] and EgPST[][] arrays.
/// Second, the black halves of the tables are initialized by mirroring
/// and changing the sign of the corresponding white scores.
void Position::init_piece_square_tables() {
- int r = get_option_value_int("Randomness"), i;
for (Square s = SQ_A1; s <= SQ_H8; s++)
for (Piece p = WP; p <= WK; p++)
- {
- i = (r == 0)? 0 : (genrand_int32() % (r*2) - r);
- PieceSquareTable[p][s] = make_score(MgPST[p][s] + i, EgPST[p][s] + i);
- }
+ PieceSquareTable[p][s] = make_score(MgPST[p][s], EgPST[p][s]);
for (Square s = SQ_A1; s <= SQ_H8; s++)
for (Piece p = BP; p <= BK; p++)