/** * Copyright (c) 2025 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #pragma once #include "error/error.h" #include "assettype.h" #if PSP #define ASSET_PBP_READ_PBP_FROM_HOST 0 #define ASSET_PBP_SIGNATURE_SIZE 4 #define ASSET_PBP_SIGNATURE "\0PBP" typedef struct { char_t signature[ASSET_PBP_SIGNATURE_SIZE]; uint32_t version; uint32_t sfoOffset; uint32_t icon0Offset; uint32_t icon1Offset; uint32_t pic0Offset; uint32_t pic1Offset; uint32_t snd0Offset; uint32_t pspOffset; uint32_t psarOffset; } assetpbp_t; #elif DOLPHIN #include #include #include #include #include #include #include #include static const char_t *ASSET_DOLPHIN_PATHS[] = { "/", "/Dusk", "/dusk", "/DUSK", "/apps", "/apps/Dusk", "/apps/dusk", "/apps/DUSK", ".", "./", "./Dusk", "./dusk", "./DUSK", "./apps", "./apps/Dusk", "./apps/dusk", "./apps/DUSK", NULL }; #endif #define ASSET_FILE "dusk.dsk" #define ASSET_HEADER_SIZE 3 static const char_t *ASSET_SEARCH_PATHS[] = { "%s/%s", "%s", "../%s", "../../%s", "data/%s", "../data/%s", NULL }; typedef struct { zip_t *zip; char_t systemPath[FILENAME_MAX]; uint8_t assetCount; // PSP specific information. #if PSP FILE *pbpFile; assetpbp_t pbpHeader; #endif } asset_t; static asset_t ASSET; /** * Initializes the asset system. */ errorret_t assetInit(void); /** * Checks if an asset file exists. * * @param filename The filename of the asset to check. * @return true if the asset file exists, false otherwise. */ bool_t assetFileExists(const char_t *filename); /** * Loads an asset by its filename, the output type depends on the asset type. * * @param filename The filename of the asset to retrieve. * @param output The output pointer to store the loaded asset data. * @return An error code if the asset could not be loaded. */ errorret_t assetLoad(const char_t *filename, void *output); /** * Disposes/cleans up the asset system. */ void assetDispose(void);