uint64_t book_key(const Position& pos) {
uint64_t key = 0;
- Bitboard b = pos.occupied_squares();
+ Bitboard b = pos.pieces();
while (b)
{
key ^= ZobPiece[PieceOffset[pos.piece_on(s)] + s];
}
- b = (pos.can_castle(WHITE_OO) << 0) | (pos.can_castle(WHITE_OOO) << 1)
- | (pos.can_castle(BLACK_OO) << 2) | (pos.can_castle(BLACK_OOO) << 3);
+ b = pos.can_castle(ALL_CASTLES);
while (b)
key ^= ZobCastle[pop_1st_bit(&b)];
// Choose book move according to its score. If a move has a very
// high score it has higher probability to be choosen than a move
// with lower score. Note that first entry is always chosen.
- if ( (RKiss.rand<unsigned>() % sum < e.count)
+ if ( (sum && RKiss.rand<unsigned>() % sum < e.count)
|| (pickBest && e.count == best))
move = Move(e.move);
}