- // Remove captured piece
- clear_bit(&(byColorBB[them]), capsq);
- clear_bit(&(byTypeBB[capture]), capsq);
- clear_bit(&(byTypeBB[0]), capsq);
-
- // Update hash key
- key ^= zobrist[them][capture][capsq];
-
- // Update incremental scores
- st->mgValue -= pst<MidGame>(them, capture, capsq);
- st->egValue -= pst<EndGame>(them, capture, capsq);
-
- // If the captured piece was a pawn, update pawn hash key,
- // otherwise update non-pawn material.
- if (capture == PAWN)
- st->pawnKey ^= zobrist[them][PAWN][capsq];
- 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 list, move the last piece at index[capsq] position
- //
- // WARNING: This is a not perfectly revresible operation. When we
- // will reinsert the captured piece in undo_move() we will put it
- // at the end of the list and not in its original place, it means
- // index[] and pieceList[] are not guaranteed to be invariant to a
- // do_move() + undo_move() sequence.
- Square lastPieceSquare = pieceList[them][capture][pieceCount[them][capture]];
- index[lastPieceSquare] = index[capsq];
- pieceList[them][capture][index[lastPieceSquare]] = lastPieceSquare;
-
- // Reset rule 50 counter
- st->rule50 = 0;
-}
-
-
-/// Position::do_castle_move() is a private method used to make a castling
-/// move. It is called from the main Position::do_move function. Note that
-/// castling moves are encoded as "king captures friendly rook" moves, for
-/// instance white short castling in a non-Chess960 game is encoded as e1h1.