// ones which are recalculated from scratch anyway, then switch our state
// pointer to point to the new, ready to be updated, state.
struct ReducedStateInfo {
- Key key, pawnKey, materialKey;
+ Key pawnKey, materialKey;
int castleRights, rule50, pliesFromNull;
Square epSquare;
Value value;
Piece piece = piece_on(from);
PieceType pt = type_of_piece(piece);
+ PieceType capture = ep ? PAWN : type_of_piece_on(to);
assert(color_of_piece_on(from) == us);
assert(color_of_piece_on(to) == them || square_is_empty(to));
assert(!(ep || pm) || piece == piece_of_color_and_type(us, PAWN));
assert(!pm || relative_rank(us, to) == RANK_8);
- st->capture = ep ? PAWN : type_of_piece_on(to);
-
- if (st->capture)
- do_capture_move(key, st->capture, them, to, ep);
+ if (capture)
+ do_capture_move(key, capture, them, to, ep);
// Update hash key
key ^= zobrist[us][pt][from] ^ zobrist[us][pt][to];
st->pawnKey ^= zobrist[us][PAWN][from] ^ zobrist[us][PAWN][to];
// Set en passant square, only if moved pawn can be captured
- if (abs(int(to) - int(from)) == 16)
+ if ((to ^ from) == 16)
{
if (attacks_from<PAWN>(from + (us == WHITE ? DELTA_N : DELTA_S), us) & pieces(PAWN, them))
{
// Update incremental scores
st->value += pst_delta(piece, from, to);
+ // Set capture piece
+ st->capture = capture;
+
if (pm) // promotion ?
{
PieceType promotion = move_promotion_piece(m);
// Finish
sideToMove = opposite_color(sideToMove);
- st->value += (sideToMove == WHITE) ? TempoValue : -TempoValue;
+ st->value += (sideToMove == WHITE ? TempoValue : -TempoValue);
assert(is_ok());
}
// Finish
sideToMove = opposite_color(sideToMove);
- st->value += (sideToMove == WHITE) ? TempoValue : -TempoValue;
+ st->value += (sideToMove == WHITE ? TempoValue : -TempoValue);
assert(is_ok());
}
/// updated by do_move and undo_move when the program is running in debug mode.
Score Position::compute_value() const {
- Score result(0, 0);
+ Score result = make_score(0, 0);
Bitboard b;
Square s;
}
}
- result += (side_to_move() == WHITE)? TempoValue / 2 : -TempoValue / 2;
+ result += (side_to_move() == WHITE ? TempoValue / 2 : -TempoValue / 2);
return result;
}
for (Piece p = WP; p <= WK; p++)
{
i = (r == 0)? 0 : (genrand_int32() % (r*2) - r);
- PieceSquareTable[p][s] = Score(MgPST[p][s] + i, EgPST[p][s] + i);
+ PieceSquareTable[p][s] = make_score(MgPST[p][s] + i, EgPST[p][s] + i);
}
for (Square s = SQ_A1; s <= SQ_H8; s++)