From 69241bd3d93f00fbcf6e668c000799e45e55dab3 Mon Sep 17 00:00:00 2001
From: Agent X <44549182+AgentXLP@users.noreply.github.com>
Date: Thu, 5 Dec 2024 18:40:42 -0500
Subject: [PATCH] Add mod_file_exists
---
autogen/lua_definitions/functions.lua | 6 ++++++
docs/lua/functions-5.md | 20 ++++++++++++++++++++
docs/lua/functions.md | 1 +
src/pc/lua/smlua_functions_autogen.c | 18 ++++++++++++++++++
src/pc/lua/utils/smlua_misc_utils.c | 13 +++++++++++++
src/pc/lua/utils/smlua_misc_utils.h | 2 ++
6 files changed, 60 insertions(+)
diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua
index 5295fc836..3e8c54c09 100644
--- a/autogen/lua_definitions/functions.lua
+++ b/autogen/lua_definitions/functions.lua
@@ -8563,6 +8563,12 @@ function is_transition_playing()
-- ...
end
+--- @param filename string
+--- @return boolean
+function mod_file_exists(filename)
+ -- ...
+end
+
--- @param name string
--- @param level integer
--- @param area integer
diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md
index 4b2191ac6..b290b125e 100644
--- a/docs/lua/functions-5.md
+++ b/docs/lua/functions-5.md
@@ -3042,6 +3042,26 @@
+## [mod_file_exists](#mod_file_exists)
+
+### Lua Example
+`local booleanValue = mod_file_exists(filename)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| filename | `string` |
+
+### Returns
+- `boolean`
+
+### C Prototype
+`bool mod_file_exists(const char* filename);`
+
+[:arrow_up_small:](#)
+
+
+
## [movtexqc_register](#movtexqc_register)
### Lua Example
diff --git a/docs/lua/functions.md b/docs/lua/functions.md
index ea6821af1..7b3c7084b 100644
--- a/docs/lua/functions.md
+++ b/docs/lua/functions.md
@@ -1792,6 +1792,7 @@
- [hud_show](functions-5.md#hud_show)
- [is_game_paused](functions-5.md#is_game_paused)
- [is_transition_playing](functions-5.md#is_transition_playing)
+ - [mod_file_exists](functions-5.md#mod_file_exists)
- [movtexqc_register](functions-5.md#movtexqc_register)
- [play_transition](functions-5.md#play_transition)
- [reset_window_title](functions-5.md#reset_window_title)
diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c
index c53a0b66d..1cb01dfd9 100644
--- a/src/pc/lua/smlua_functions_autogen.c
+++ b/src/pc/lua/smlua_functions_autogen.c
@@ -31295,6 +31295,23 @@ int smlua_func_is_transition_playing(UNUSED lua_State* L) {
return 1;
}
+int smlua_func_mod_file_exists(lua_State* L) {
+ if (L == NULL) { return 0; }
+
+ int top = lua_gettop(L);
+ if (top != 1) {
+ LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "mod_file_exists", 1, top);
+ return 0;
+ }
+
+ const char* filename = smlua_to_string(L, 1);
+ if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "mod_file_exists"); return 0; }
+
+ lua_pushboolean(L, mod_file_exists(filename));
+
+ return 1;
+}
+
int smlua_func_movtexqc_register(lua_State* L) {
if (L == NULL) { return 0; }
@@ -35149,6 +35166,7 @@ void smlua_bind_functions_autogen(void) {
smlua_bind_function(L, "hud_show", smlua_func_hud_show);
smlua_bind_function(L, "is_game_paused", smlua_func_is_game_paused);
smlua_bind_function(L, "is_transition_playing", smlua_func_is_transition_playing);
+ smlua_bind_function(L, "mod_file_exists", smlua_func_mod_file_exists);
smlua_bind_function(L, "movtexqc_register", smlua_func_movtexqc_register);
smlua_bind_function(L, "play_transition", smlua_func_play_transition);
smlua_bind_function(L, "reset_window_title", smlua_func_reset_window_title);
diff --git a/src/pc/lua/utils/smlua_misc_utils.c b/src/pc/lua/utils/smlua_misc_utils.c
index 564a5c9c8..3de77c45b 100644
--- a/src/pc/lua/utils/smlua_misc_utils.c
+++ b/src/pc/lua/utils/smlua_misc_utils.c
@@ -508,6 +508,19 @@ void set_environment_region(u8 index, s32 value) {
///
+bool mod_file_exists(const char* filename) {
+ if (gLuaActiveMod == NULL) { return false; }
+
+ for (s32 i = 0; i < gLuaActiveMod->fileCount; i++) {
+ struct ModFile* file = &gLuaActiveMod->files[i];
+ return !strcmp(file->relativePath, filename);
+ }
+
+ return false;
+}
+
+///
+
void set_window_title(const char* title) {
WAPI.set_window_title(title);
}
diff --git a/src/pc/lua/utils/smlua_misc_utils.h b/src/pc/lua/utils/smlua_misc_utils.h
index 22847c9a6..cf279bca0 100644
--- a/src/pc/lua/utils/smlua_misc_utils.h
+++ b/src/pc/lua/utils/smlua_misc_utils.h
@@ -127,6 +127,8 @@ void set_volume_env(f32 volume);
f32 get_environment_region(u8 index);
void set_environment_region(u8 index, s32 value);
+bool mod_file_exists(const char* filename);
+
void set_window_title(const char* title);
void reset_window_title(void);