#pragma once #include #include #include #include #include #include "engine/clx_sprite.hpp" #include "utils/pointer_value_union.hpp" namespace devilution { /** * @brief Converts CL2 to CLX in-place. * * @return uint16_t The number of lists in a sheet if it is a sheet, 0 otherwise. */ uint16_t Cl2ToClx(const uint8_t *data, size_t size, PointerOrValue widthOrWidths, std::vector &clxData); inline OwnedClxSpriteListOrSheet Cl2ToClx(std::unique_ptr &&data, size_t size, PointerOrValue widthOrWidths) { std::vector clxData; const uint16_t numLists = Cl2ToClx(data.get(), size, widthOrWidths, clxData); data = nullptr; data = std::unique_ptr(new uint8_t[clxData.size()]); memcpy(&data[0], clxData.data(), clxData.size()); return OwnedClxSpriteListOrSheet { std::move(data), numLists }; } } // namespace devilution