diff --git a/autogen/lua_definitions/constants.lua b/autogen/lua_definitions/constants.lua index c1690280..9bf092b1 100644 --- a/autogen/lua_definitions/constants.lua +++ b/autogen/lua_definitions/constants.lua @@ -9082,6 +9082,9 @@ WATER_STEP_HIT_WALL = 4 --- @type integer WATER_STEP_NONE = 0 +--- @type integer +MAX_HOOKED_MOD_MENU_ELEMENTS = 256 + --- @class LuaActionHookType --- @type LuaActionHookType diff --git a/data/dynos_gfx_init.cpp b/data/dynos_gfx_init.cpp index 3a9ba586..c1f3b10b 100644 --- a/data/dynos_gfx_init.cpp +++ b/data/dynos_gfx_init.cpp @@ -2,7 +2,7 @@ #include "pc/loading.h" void DynOS_Gfx_GeneratePacks(const char* directory) { - REFRESH_MUTEX(snprintf(gCurrLoadingSegment.str, 256, "Generating DynOS Packs In Path:\n\\#808080\\%s", directory)); + LOADING_SCREEN_MUTEX(snprintf(gCurrLoadingSegment.str, 256, "Generating DynOS Packs In Path:\n\\#808080\\%s", directory)); DIR *modsDir = opendir(directory); if (!modsDir) { return; } @@ -40,7 +40,7 @@ void DynOS_Gfx_GeneratePacks(const char* directory) { DynOS_Tex_GeneratePack(_TexturePackFolder, _TexturePackOutputFolder, true); } - REFRESH_MUTEX(gCurrLoadingSegment.percentage = (f32) i / (f32) pathCount); + LOADING_SCREEN_MUTEX(gCurrLoadingSegment.percentage = (f32) i / (f32) pathCount); } closedir(modsDir); @@ -59,7 +59,7 @@ static void ScanPacksFolder(SysPath _DynosPacksFolder) { // If pack folder exists, add it to the pack list SysPath _PackFolder = fstring("%s/%s", _DynosPacksFolder.c_str(), _DynosPacksEnt->d_name); if (fs_sys_dir_exists(_PackFolder.c_str())) { - REFRESH_MUTEX(snprintf(gCurrLoadingSegment.str, 256, "Generating DynOS Pack:\n\\#808080\\%s", _PackFolder.c_str())); + LOADING_SCREEN_MUTEX(snprintf(gCurrLoadingSegment.str, 256, "Generating DynOS Pack:\n\\#808080\\%s", _PackFolder.c_str())); DynOS_Pack_Add(_PackFolder); DynOS_Actor_GeneratePack(_PackFolder); DynOS_Tex_GeneratePack(_PackFolder, _PackFolder, false); diff --git a/docs/lua/constants.md b/docs/lua/constants.md index 684aa6fc..f814bbf5 100644 --- a/docs/lua/constants.md +++ b/docs/lua/constants.md @@ -3239,6 +3239,7 @@
## [smlua_hooks.h](#smlua_hooks.h) +- MAX_HOOKED_MOD_MENU_ELEMENTS ### [enum LuaActionHookType](#LuaActionHookType) | Identifier | Value | diff --git a/src/pc/loading.h b/src/pc/loading.h index 25c231ab..1a5e08db 100644 --- a/src/pc/loading.h +++ b/src/pc/loading.h @@ -3,6 +3,8 @@ #include +#include "cliopts.h" + struct LoadingSegment { char str[256]; f32 percentage; @@ -12,12 +14,19 @@ extern struct LoadingSegment gCurrLoadingSegment; extern bool gIsThreaded; -#define REFRESH_MUTEX(...) \ -if (gIsThreaded) { \ +#if !defined(WAPI_DXGI) && !defined(WAPI_DUMMY) +#define LOADING_SCREEN_SUPPORTED +#endif + +#ifdef LOADING_SCREEN_SUPPORTED +#define LOADING_SCREEN_MUTEX(...) if (!gCLIOpts.hideLoadingScreen && gIsThreaded) { \ pthread_mutex_lock(&gLoadingThreadMutex); \ __VA_ARGS__; \ pthread_mutex_unlock(&gLoadingThreadMutex); \ -} \ +} +#else +#define LOADING_SCREEN_MUTEX(...) +#endif extern pthread_t gLoadingThreadId; extern pthread_mutex_t gLoadingThreadMutex; diff --git a/src/pc/lua/smlua_constants_autogen.c b/src/pc/lua/smlua_constants_autogen.c index 80011197..d110cf3c 100644 --- a/src/pc/lua/smlua_constants_autogen.c +++ b/src/pc/lua/smlua_constants_autogen.c @@ -3296,6 +3296,7 @@ char gSmluaConstants[] = "" "ACTION_HOOK_EVERY_FRAME = 0\n" "ACTION_HOOK_GRAVITY = 1\n" "ACTION_HOOK_MAX = 2\n" +"MAX_HOOKED_MOD_MENU_ELEMENTS = 256\n" "MOD_MENU_ELEMENT_BUTTON = 0\n" "MOD_MENU_ELEMENT_CHECKBOX = 1\n" "MOD_MENU_ELEMENT_SLIDER = 2\n" diff --git a/src/pc/mods/mods.c b/src/pc/mods/mods.c index 46753c77..8ee0e993 100644 --- a/src/pc/mods/mods.c +++ b/src/pc/mods/mods.c @@ -201,8 +201,8 @@ static u32 mods_count_directory(char* modsBasePath) { return pathCount; } -static void mods_load(struct Mods* mods, char* modsBasePath, bool isUserModPath) { - REFRESH_MUTEX(snprintf(gCurrLoadingSegment.str, 256, "Generating DynOS Packs In %s Mod Path:\n\\#808080\\%s", isUserModPath ? "User" : "Local", modsBasePath)); +static void mods_load(struct Mods* mods, char* modsBasePath, UNUSED bool isUserModPath) { + LOADING_SCREEN_MUTEX(snprintf(gCurrLoadingSegment.str, 256, "Generating DynOS Packs In %s Mod Path:\n\\#808080\\%s", isUserModPath ? "User" : "Local", modsBasePath)); // generate bins dynos_generate_packs(modsBasePath); @@ -230,9 +230,9 @@ static void mods_load(struct Mods* mods, char* modsBasePath, bool isUserModPath) LOG_ERROR("Could not open directory '%s'", modsBasePath); return; } - f32 count = (f32) mods_count_directory(modsBasePath); + UNUSED f32 count = (f32) mods_count_directory(modsBasePath); - REFRESH_MUTEX(snprintf(gCurrLoadingSegment.str, 256, "Loading Mods In %s Mod Path:\n\\#808080\\%s", isUserModPath ? "User" : "Local", modsBasePath)); + LOADING_SCREEN_MUTEX(snprintf(gCurrLoadingSegment.str, 256, "Loading Mods In %s Mod Path:\n\\#808080\\%s", isUserModPath ? "User" : "Local", modsBasePath)); // iterate char path[SYS_MAX_PATH] = { 0 }; @@ -241,18 +241,18 @@ static void mods_load(struct Mods* mods, char* modsBasePath, bool isUserModPath) // sanity check / fill path[] if (!directory_sanity_check(dir, modsBasePath, path)) { continue; } - REFRESH_MUTEX(snprintf(gCurrLoadingSegment.str, 256, "Loading Mod:\n\\#808080\\%s/%s", modsBasePath, dir->d_name)); + LOADING_SCREEN_MUTEX(snprintf(gCurrLoadingSegment.str, 256, "Loading Mod:\n\\#808080\\%s/%s", modsBasePath, dir->d_name)); // load the mod if (!mod_load(mods, modsBasePath, dir->d_name)) { break; } - REFRESH_MUTEX(gCurrLoadingSegment.percentage = (f32) i / count); + LOADING_SCREEN_MUTEX(gCurrLoadingSegment.percentage = (f32) i / count); } closedir(d); - REFRESH_MUTEX(gCurrLoadingSegment.percentage = 1); + LOADING_SCREEN_MUTEX(gCurrLoadingSegment.percentage = 1); } void mods_refresh_local(void) { @@ -306,7 +306,7 @@ void mods_enable(char* relativePath) { } void mods_init(void) { - REFRESH_MUTEX(loading_screen_set_segment_text("Caching Mods")); + LOADING_SCREEN_MUTEX(loading_screen_set_segment_text("Caching Mods")); // load mod cache mod_cache_load(); diff --git a/src/pc/pc_main.c b/src/pc/pc_main.c index b35cce54..b03895e5 100644 --- a/src/pc/pc_main.c +++ b/src/pc/pc_main.c @@ -96,10 +96,6 @@ u8 gLuaVolumeEnv = 127; static struct AudioAPI *audio_api; struct GfxWindowManagerAPI *wm_api = &WAPI; -#if !defined(WAPI_DXGI) && !defined(WAPI_DUMMY) -#define LOADING_SCREEN_SUPPORTED -#endif - extern void gfx_run(Gfx *commands); extern void thread5_game_loop(void *arg); extern void create_next_audio_buffer(s16 *samples, u32 num_samples); @@ -317,7 +313,7 @@ void* main_game_init(void* isThreaded) { // load language if (!djui_language_init(configLanguage)) { snprintf(configLanguage, MAX_CONFIG_STRING, "%s", ""); } - REFRESH_MUTEX(loading_screen_set_segment_text("Loading")); + LOADING_SCREEN_MUTEX(loading_screen_set_segment_text("Loading")); dynos_gfx_init(); enable_queued_dynos_packs(); sync_objects_init_system(); @@ -326,13 +322,13 @@ void* main_game_init(void* isThreaded) { // check_for_updates(); // } - REFRESH_MUTEX(loading_screen_set_segment_text("Loading ROM Assets")); + LOADING_SCREEN_MUTEX(loading_screen_set_segment_text("Loading ROM Assets")); rom_assets_load(); smlua_text_utils_init(); mods_init(); enable_queued_mods(); - REFRESH_MUTEX( + LOADING_SCREEN_MUTEX( gCurrLoadingSegment.percentage = 0; loading_screen_set_segment_text("Starting Game"); ); diff --git a/src/pc/update_checker.c b/src/pc/update_checker.c index 7e25c29f..b10f41a1 100644 --- a/src/pc/update_checker.c +++ b/src/pc/update_checker.c @@ -115,7 +115,7 @@ void get_version_remote(void) { } void check_for_updates(void) { - REFRESH_MUTEX(loading_screen_set_segment_text("Checking For Updates")); + LOADING_SCREEN_MUTEX(loading_screen_set_segment_text("Checking For Updates")); get_version_remote(); if (sRemoteVersion[0] != '\0' && strcmp(sRemoteVersion, get_version())) {