The index at 0 was reserved for no-pieces
information. But we don't need that.
This is a prerequisite for next patch.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
set_bit(&(byTypeBB[promotion]), to);
board[to] = piece_of_color_and_type(us, promotion);
set_bit(&(byTypeBB[promotion]), to);
board[to] = piece_of_color_and_type(us, promotion);
+ // Update piece counts
+ pieceCount[us][promotion]++;
+ pieceCount[us][PAWN]--;
+
// Update material key
st->materialKey ^= zobMaterial[us][PAWN][pieceCount[us][PAWN]];
// Update material key
st->materialKey ^= zobMaterial[us][PAWN][pieceCount[us][PAWN]];
- st->materialKey ^= zobMaterial[us][promotion][pieceCount[us][promotion]+1];
-
- // Update piece counts
- pieceCount[us][PAWN]--;
- pieceCount[us][promotion]++;
+ st->materialKey ^= zobMaterial[us][promotion][pieceCount[us][promotion]-1];
// Update piece lists, move the last pawn at index[to] position
// and shrink the list. Add a new promotion piece to the list.
// Update piece lists, move the last pawn at index[to] position
// and shrink the list. Add a new promotion piece to the list.
else
st->npMaterial[them] -= piece_value_midgame(capture);
else
st->npMaterial[them] -= piece_value_midgame(capture);
- // Update material hash key
- st->materialKey ^= zobMaterial[them][capture][pieceCount[them][capture]];
-
// Update piece count
pieceCount[them][capture]--;
// Update piece count
pieceCount[them][capture]--;
+ // Update material hash key
+ st->materialKey ^= zobMaterial[them][capture][pieceCount[them][capture]];
+
// Update piece list, move the last piece at index[capsq] position
//
// WARNING: This is a not perfectly revresible operation. When we
// Update piece list, move the last piece at index[capsq] position
//
// WARNING: This is a not perfectly revresible operation. When we
for (PieceType pt = PAWN; pt <= QUEEN; pt++)
{
int count = piece_count(c, pt);
for (PieceType pt = PAWN; pt <= QUEEN; pt++)
{
int count = piece_count(c, pt);
- for (int i = 0; i <= count; i++)
+ for (int i = 0; i < count; i++)
result ^= zobMaterial[c][pt][i];
}
return result;
result ^= zobMaterial[c][pt][i];
}
return result;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 8; j++)
for (int i = 0; i < 2; i++)
for (int j = 0; j < 8; j++)
- for (int k = 0; k < 16; k++)
- zobMaterial[i][j][k] = (k > 0)? Key(genrand_int64()) : Key(0LL);
+ for (int k = 0; k < 8; k++)
+ zobMaterial[i][j][k] = Key(genrand_int64());
- for (int i = 0; i < 16; i++)
+ for (int i = 0; i < 8; i++)
zobMaterial[0][KING][i] = zobMaterial[1][KING][i] = Key(0ULL);
zobExclusion = genrand_int64();
zobMaterial[0][KING][i] = zobMaterial[1][KING][i] = Key(0ULL);
zobExclusion = genrand_int64();