#pragma once #include #include #include #include "engine/clx_sprite.hpp" #include "utils/pointer_value_union.hpp" #include "utils/status_macros.hpp" #ifdef UNPACKED_MPQS #define DEVILUTIONX_CEL_EXT ".clx" #else #define DEVILUTIONX_CEL_EXT ".cel" #endif namespace devilution { tl::expected LoadCelListOrSheetWithStatus(const char *pszName, PointerOrValue widthOrWidths); OwnedClxSpriteListOrSheet LoadCelListOrSheet(const char *pszName, PointerOrValue widthOrWidths); inline OwnedClxSpriteList LoadCel(const char *pszName, uint16_t width) { return LoadCelListOrSheet(pszName, PointerOrValue { width }).list(); } inline tl::expected LoadCelWithStatus(const char *pszName, uint16_t width) { ASSIGN_OR_RETURN(OwnedClxSpriteListOrSheet result, LoadCelListOrSheetWithStatus(pszName, PointerOrValue { width })); return std::move(result).list(); } inline OwnedClxSpriteList LoadCel(const char *pszName, const uint16_t *widths) { return LoadCelListOrSheet(pszName, PointerOrValue { widths }).list(); } inline tl::expected LoadCelWithStatus(const char *pszName, const uint16_t *widths) { ASSIGN_OR_RETURN(OwnedClxSpriteListOrSheet result, LoadCelListOrSheetWithStatus(pszName, PointerOrValue { widths })); return std::move(result).list(); } inline OwnedClxSpriteSheet LoadCelSheet(const char *pszName, uint16_t width) { return LoadCelListOrSheet(pszName, PointerOrValue { width }).sheet(); } } // namespace devilution