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())) {