#ifndef DUSK_MOD_API_H #define DUSK_MOD_API_H #include #include #include #ifdef __cplusplus extern "C" { #endif #define DUSK_MOD_API_VERSION 1 #if defined(_WIN32) # define DUSK_MOD_EXPORT __declspec(dllexport) #else # define DUSK_MOD_EXPORT __attribute__((visibility("default"))) #endif // Place this once at file scope in your mod to declare the minimum API version required. // The loader will refuse to initialize the mod if the engine's API version is older. #define DUSK_REQUIRE_API_VERSION \ DUSK_MOD_EXPORT uint32_t mod_api_version = DUSK_MOD_API_VERSION; typedef struct DuskModAPI { uint32_t api_version; const char* mod_dir; void (*log_info) (const char* fmt, ...); void (*log_warn) (const char* fmt, ...); void (*log_error)(const char* fmt, ...); void* (*load_resource)(const char* relative_path, size_t* out_size); void (*free_resource)(void* data); void (*register_tab_content)(void (*draw_fn)(void* userdata), void* userdata); void (*register_menu_item) (void (*draw_fn)(void* userdata), void* userdata); void (*hook_install)(void* fn_addr, void* tramp_fn, void** orig_store); void (*hook_pre) (void* fn_addr, int32_t (*fn)(void* args)); void (*hook_post) (void* fn_addr, void (*fn)(void* args)); void (*hook_replace)(void* fn_addr, void (*fn)(void* args)); bool (*hook_dispatch_pre) (void* fn_addr, void* args); void (*hook_dispatch_post)(void* fn_addr, void* args); void (*service_publish)(const char* name, void* ptr); void* (*service_get) (const char* name); } DuskModAPI; void mod_init(DuskModAPI* api); void mod_tick(DuskModAPI* api); #ifdef __cplusplus } #endif #endif