diff --git a/autogen/convert_constants.py b/autogen/convert_constants.py
index 8e681493..079cb4d2 100644
--- a/autogen/convert_constants.py
+++ b/autogen/convert_constants.py
@@ -29,6 +29,7 @@ in_files = [
"src/engine/graph_node.h",
"levels/level_defines.h",
"src/game/obj_behaviors.c",
+ "src/game/save_file.h",
]
exclude_constants = {
diff --git a/autogen/convert_functions.py b/autogen/convert_functions.py
index 4ebfdc16..56075a53 100644
--- a/autogen/convert_functions.py
+++ b/autogen/convert_functions.py
@@ -52,7 +52,7 @@ override_allowed_functions = {
"src/game/camera.h": [ "set_.*camera_.*shake", "set_camera_mode" ],
"src/game/rumble_init.c": [ "queue_rumble_", "reset_rumble_timers" ],
"src/pc/djui/djui_popup.h" : [ "create" ],
- "src/game/save_file.h": [ "save_file_get_" ],
+ "src/game/save_file.h": [ "save_file_get_", "save_file_set_flags", "save_file_clear_flags" ],
"src/pc/lua/utils/smlua_model_utils.h": [ "smlua_model_util_get_id" ],
}
diff --git a/autogen/lua_definitions/constants.lua b/autogen/lua_definitions/constants.lua
index 787f5476..7e13c4f0 100644
--- a/autogen/lua_definitions/constants.lua
+++ b/autogen/lua_definitions/constants.lua
@@ -4208,6 +4208,104 @@ Y_BUTTON = CONT_Y
--- @type integer
Z_TRIG = CONT_G
+--- @type integer
+EEPROM_SIZE = 0x200
+
+--- @type integer
+NUM_SAVE_FILES = 4
+
+--- @type integer
+SAVE_FLAG_CAP_ON_GROUND = (1 << 16)
+
+--- @type integer
+SAVE_FLAG_CAP_ON_KLEPTO = (1 << 17)
+
+--- @type integer
+SAVE_FLAG_CAP_ON_MR_BLIZZARD = (1 << 19)
+
+--- @type integer
+SAVE_FLAG_CAP_ON_UKIKI = (1 << 18)
+
+--- @type integer
+SAVE_FLAG_COLLECTED_MIPS_STAR_1 = (1 << 27)
+
+--- @type integer
+SAVE_FLAG_COLLECTED_MIPS_STAR_2 = (1 << 28)
+
+--- @type integer
+SAVE_FLAG_COLLECTED_TOAD_STAR_1 = (1 << 24)
+
+--- @type integer
+SAVE_FLAG_COLLECTED_TOAD_STAR_2 = (1 << 25)
+
+--- @type integer
+SAVE_FLAG_COLLECTED_TOAD_STAR_3 = (1 << 26)
+
+--- @type integer
+SAVE_FLAG_DDD_MOVED_BACK = (1 << 8)
+
+--- @type integer
+SAVE_FLAG_FILE_EXISTS = (1 << 0)
+
+--- @type integer
+SAVE_FLAG_HAVE_KEY_1 = (1 << 4)
+
+--- @type integer
+SAVE_FLAG_HAVE_KEY_2 = (1 << 5)
+
+--- @type integer
+SAVE_FLAG_HAVE_METAL_CAP = (1 << 2)
+
+--- @type integer
+SAVE_FLAG_HAVE_VANISH_CAP = (1 << 3)
+
+--- @type integer
+SAVE_FLAG_HAVE_WING_CAP = (1 << 1)
+
+--- @type integer
+SAVE_FLAG_MOAT_DRAINED = (1 << 9)
+
+--- @type integer
+SAVE_FLAG_UNLOCKED_50_STAR_DOOR = (1 << 20)
+
+--- @type integer
+SAVE_FLAG_UNLOCKED_BASEMENT_DOOR = (1 << 6)
+
+--- @type integer
+SAVE_FLAG_UNLOCKED_BITDW_DOOR = (1 << 14)
+
+--- @type integer
+SAVE_FLAG_UNLOCKED_BITFS_DOOR = (1 << 15)
+
+--- @type integer
+SAVE_FLAG_UNLOCKED_CCM_DOOR = (1 << 12)
+
+--- @type integer
+SAVE_FLAG_UNLOCKED_JRB_DOOR = (1 << 13)
+
+--- @type integer
+SAVE_FLAG_UNLOCKED_PSS_DOOR = (1 << 10)
+
+--- @type integer
+SAVE_FLAG_UNLOCKED_UPSTAIRS_DOOR = (1 << 7)
+
+--- @type integer
+SAVE_FLAG_UNLOCKED_WF_DOOR = (1 << 11)
+
+--- @class SaveFileIndex
+
+--- @type SaveFileIndex
+SAVE_FILE_A = 0
+
+--- @type SaveFileIndex
+SAVE_FILE_B = 1
+
+--- @type SaveFileIndex
+SAVE_FILE_C = 2
+
+--- @type SaveFileIndex
+SAVE_FILE_D = 3
+
--- @type integer
ACT_AIR_HIT_WALL = 0x000008A7
diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua
index bba404f4..faf67a95 100644
--- a/autogen/lua_definitions/functions.lua
+++ b/autogen/lua_definitions/functions.lua
@@ -3427,6 +3427,12 @@ function reset_rumble_timers_2(m, a0)
-- ...
end
+--- @param flags integer
+--- @return nil
+function save_file_clear_flags(flags)
+ -- ...
+end
+
--- @param capPos Vec3s
--- @return integer
function save_file_get_cap_pos(capPos)
@@ -3478,6 +3484,12 @@ function save_file_get_total_star_count(fileIndex, minCourse, maxCourse)
-- ...
end
+--- @param flags integer
+--- @return nil
+function save_file_set_flags(flags)
+ -- ...
+end
+
--- @param startX number
--- @param startY number
--- @param startZ number
diff --git a/docs/lua/constants.md b/docs/lua/constants.md
index 41650607..3287371b 100644
--- a/docs/lua/constants.md
+++ b/docs/lua/constants.md
@@ -31,6 +31,8 @@
- [object_list_processor.h](#object_list_processorh)
- [enum ObjectList](#enum-ObjectList)
- [os_cont.h](#os_conth)
+- [save_file.h](#save_fileh)
+ - [enum SaveFileIndex](#enum-SaveFileIndex)
- [sm64.h](#sm64h)
- [smlua_hooks.h](#smlua_hooksh)
- [enum LuaHookedEventType](#enum-LuaHookedEventType)
@@ -1495,6 +1497,48 @@
+## [save_file.h](#save_file.h)
+- EEPROM_SIZE
+- NUM_SAVE_FILES
+- SAVE_FLAG_CAP_ON_GROUND
+- SAVE_FLAG_CAP_ON_KLEPTO
+- SAVE_FLAG_CAP_ON_MR_BLIZZARD
+- SAVE_FLAG_CAP_ON_UKIKI
+- SAVE_FLAG_COLLECTED_MIPS_STAR_1
+- SAVE_FLAG_COLLECTED_MIPS_STAR_2
+- SAVE_FLAG_COLLECTED_TOAD_STAR_1
+- SAVE_FLAG_COLLECTED_TOAD_STAR_2
+- SAVE_FLAG_COLLECTED_TOAD_STAR_3
+- SAVE_FLAG_DDD_MOVED_BACK
+- SAVE_FLAG_FILE_EXISTS
+- SAVE_FLAG_HAVE_KEY_1
+- SAVE_FLAG_HAVE_KEY_2
+- SAVE_FLAG_HAVE_METAL_CAP
+- SAVE_FLAG_HAVE_VANISH_CAP
+- SAVE_FLAG_HAVE_WING_CAP
+- SAVE_FLAG_MOAT_DRAINED
+- SAVE_FLAG_UNLOCKED_50_STAR_DOOR
+- SAVE_FLAG_UNLOCKED_BASEMENT_DOOR
+- SAVE_FLAG_UNLOCKED_BITDW_DOOR
+- SAVE_FLAG_UNLOCKED_BITFS_DOOR
+- SAVE_FLAG_UNLOCKED_CCM_DOOR
+- SAVE_FLAG_UNLOCKED_JRB_DOOR
+- SAVE_FLAG_UNLOCKED_PSS_DOOR
+- SAVE_FLAG_UNLOCKED_UPSTAIRS_DOOR
+- SAVE_FLAG_UNLOCKED_WF_DOOR
+
+### [enum SaveFileIndex](#SaveFileIndex)
+| Identifier | Value |
+| :--------- | :---- |
+| SAVE_FILE_A | 0 |
+| SAVE_FILE_B | 1 |
+| SAVE_FILE_C | 2 |
+| SAVE_FILE_D | 3 |
+
+[:arrow_up_small:](#)
+
+
+
## [sm64.h](#sm64.h)
- ACT_AIR_HIT_WALL
- ACT_AIR_THROW
diff --git a/docs/lua/functions.md b/docs/lua/functions.md
index 903b71c5..e5ead5d2 100644
--- a/docs/lua/functions.md
+++ b/docs/lua/functions.md
@@ -619,6 +619,7 @@
- save_file.h
+ - [save_file_clear_flags](#save_file_clear_flags)
- [save_file_get_cap_pos](#save_file_get_cap_pos)
- [save_file_get_course_coin_score](#save_file_get_course_coin_score)
- [save_file_get_course_star_count](#save_file_get_course_star_count)
@@ -627,6 +628,7 @@
- [save_file_get_sound_mode](#save_file_get_sound_mode)
- [save_file_get_star_flags](#save_file_get_star_flags)
- [save_file_get_total_star_count](#save_file_get_total_star_count)
+ - [save_file_set_flags](#save_file_set_flags)
@@ -11464,6 +11466,26 @@ The `reliable` field will ensure that the packet arrives, but should be used spa
+## [save_file_clear_flags](#save_file_clear_flags)
+
+### Lua Example
+`save_file_clear_flags(flags)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| flags | `integer` |
+
+### Returns
+- None
+
+### C Prototype
+`void save_file_clear_flags(u32 flags);`
+
+[:arrow_up_small:](#)
+
+
+
## [save_file_get_cap_pos](#save_file_get_cap_pos)
### Lua Example
@@ -11625,6 +11647,26 @@ The `reliable` field will ensure that the packet arrives, but should be used spa
+## [save_file_set_flags](#save_file_set_flags)
+
+### Lua Example
+`save_file_set_flags(flags)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| flags | `integer` |
+
+### Returns
+- None
+
+### C Prototype
+`void save_file_set_flags(u32 flags);`
+
+[:arrow_up_small:](#)
+
+
+
---
# functions from smlua_collision_utils.h
diff --git a/src/pc/lua/smlua_constants_autogen.c b/src/pc/lua/smlua_constants_autogen.c
index 1fed4e74..570dbd4c 100644
--- a/src/pc/lua/smlua_constants_autogen.c
+++ b/src/pc/lua/smlua_constants_autogen.c
@@ -1546,6 +1546,38 @@ char gSmluaConstants[] = ""
"L_CBUTTONS = CONT_C\n"
"R_CBUTTONS = CONT_F\n"
"D_CBUTTONS = CONT_D\n"
+"EEPROM_SIZE = 0x200\n"
+"NUM_SAVE_FILES = 4\n"
+"SAVE_FILE_A = 0\n"
+"SAVE_FILE_B = 1\n"
+"SAVE_FILE_C = 2\n"
+"SAVE_FILE_D = 3\n"
+"SAVE_FLAG_FILE_EXISTS = (1 << 0)\n"
+"SAVE_FLAG_HAVE_WING_CAP = (1 << 1)\n"
+"SAVE_FLAG_HAVE_METAL_CAP = (1 << 2)\n"
+"SAVE_FLAG_HAVE_VANISH_CAP = (1 << 3)\n"
+"SAVE_FLAG_HAVE_KEY_1 = (1 << 4)\n"
+"SAVE_FLAG_HAVE_KEY_2 = (1 << 5)\n"
+"SAVE_FLAG_UNLOCKED_BASEMENT_DOOR = (1 << 6)\n"
+"SAVE_FLAG_UNLOCKED_UPSTAIRS_DOOR = (1 << 7)\n"
+"SAVE_FLAG_DDD_MOVED_BACK = (1 << 8)\n"
+"SAVE_FLAG_MOAT_DRAINED = (1 << 9)\n"
+"SAVE_FLAG_UNLOCKED_PSS_DOOR = (1 << 10)\n"
+"SAVE_FLAG_UNLOCKED_WF_DOOR = (1 << 11)\n"
+"SAVE_FLAG_UNLOCKED_CCM_DOOR = (1 << 12)\n"
+"SAVE_FLAG_UNLOCKED_JRB_DOOR = (1 << 13)\n"
+"SAVE_FLAG_UNLOCKED_BITDW_DOOR = (1 << 14)\n"
+"SAVE_FLAG_UNLOCKED_BITFS_DOOR = (1 << 15)\n"
+"SAVE_FLAG_CAP_ON_GROUND = (1 << 16)\n"
+"SAVE_FLAG_CAP_ON_KLEPTO = (1 << 17)\n"
+"SAVE_FLAG_CAP_ON_UKIKI = (1 << 18)\n"
+"SAVE_FLAG_CAP_ON_MR_BLIZZARD = (1 << 19)\n"
+"SAVE_FLAG_UNLOCKED_50_STAR_DOOR = (1 << 20)\n"
+"SAVE_FLAG_COLLECTED_TOAD_STAR_1 = (1 << 24)\n"
+"SAVE_FLAG_COLLECTED_TOAD_STAR_2 = (1 << 25)\n"
+"SAVE_FLAG_COLLECTED_TOAD_STAR_3 = (1 << 26)\n"
+"SAVE_FLAG_COLLECTED_MIPS_STAR_1 = (1 << 27)\n"
+"SAVE_FLAG_COLLECTED_MIPS_STAR_2 = (1 << 28)\n"
"LAYER_FORCE = 0\n"
"LAYER_OPAQUE = 1\n"
"LAYER_OPAQUE_DECAL = 2\n"
diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c
index 5eb027f0..800d2283 100644
--- a/src/pc/lua/smlua_functions_autogen.c
+++ b/src/pc/lua/smlua_functions_autogen.c
@@ -7293,6 +7293,17 @@ int smlua_func_reset_rumble_timers_2(lua_State* L) {
// save_file.h //
/////////////////
+int smlua_func_save_file_clear_flags(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ u32 flags = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ save_file_clear_flags(flags);
+
+ return 1;
+}
+
int smlua_func_save_file_get_cap_pos(lua_State* L) {
if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
@@ -7397,6 +7408,17 @@ int smlua_func_save_file_get_total_star_count(lua_State* L) {
return 1;
}
+int smlua_func_save_file_set_flags(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ u32 flags = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ save_file_set_flags(flags);
+
+ return 1;
+}
+
/////////////////////////////
// smlua_collision_utils.h //
/////////////////////////////
@@ -8843,6 +8865,7 @@ void smlua_bind_functions_autogen(void) {
smlua_bind_function(L, "reset_rumble_timers_2", smlua_func_reset_rumble_timers_2);
// save_file.h
+ smlua_bind_function(L, "save_file_clear_flags", smlua_func_save_file_clear_flags);
smlua_bind_function(L, "save_file_get_cap_pos", smlua_func_save_file_get_cap_pos);
smlua_bind_function(L, "save_file_get_course_coin_score", smlua_func_save_file_get_course_coin_score);
smlua_bind_function(L, "save_file_get_course_star_count", smlua_func_save_file_get_course_star_count);
@@ -8851,6 +8874,7 @@ void smlua_bind_functions_autogen(void) {
smlua_bind_function(L, "save_file_get_sound_mode", smlua_func_save_file_get_sound_mode);
smlua_bind_function(L, "save_file_get_star_flags", smlua_func_save_file_get_star_flags);
smlua_bind_function(L, "save_file_get_total_star_count", smlua_func_save_file_get_total_star_count);
+ smlua_bind_function(L, "save_file_set_flags", smlua_func_save_file_set_flags);
// smlua_collision_utils.h
smlua_bind_function(L, "collision_find_surface_on_ray", smlua_func_collision_find_surface_on_ray);