From 73aa3890fd01cd4a56784c68774f15f37e40166f Mon Sep 17 00:00:00 2001 From: Agent X <44549182+Agent-11@users.noreply.github.com> Date: Sun, 18 Jun 2023 23:04:02 -0400 Subject: [PATCH] Add tons of new save file / star related functions (#419) These were needed to port interact_star_or_key to Lua but are also just good to have exposed IMO. --- autogen/convert_functions.py | 4 +- autogen/lua_definitions/functions.lua | 76 +++++++++ docs/lua/functions-3.md | 18 ++ docs/lua/functions-4.md | 64 +++++++ docs/lua/functions-5.md | 170 +++++++++++++++++++ docs/lua/functions.md | 13 ++ src/game/save_file.c | 6 +- src/game/save_file.h | 2 + src/pc/lua/smlua_functions_autogen.c | 230 ++++++++++++++++++++++++++ src/pc/lua/utils/smlua_misc_utils.c | 44 ++++- src/pc/lua/utils/smlua_misc_utils.h | 9 + 11 files changed, 631 insertions(+), 5 deletions(-) diff --git a/autogen/convert_functions.py b/autogen/convert_functions.py index 53f1245d..0cb464c6 100644 --- a/autogen/convert_functions.py +++ b/autogen/convert_functions.py @@ -64,10 +64,10 @@ in_files = [ ] override_allowed_functions = { - "src/audio/external.h": [ " play_", "fade", "current_background", "stop_", "sound_banks" ], + "src/audio/external.h": [ " play_", "fade", "current_background", "stop_", "sound_banks", "drop_queued_background_music" ], "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_", "save_file_set_flags", "save_file_clear_flags", "save_file_reload", "save_file_erase_current_backup_save", "save_file_set_star_flags", "save_file_is_cannon_unlocked" ], + "src/game/save_file.h": [ "save_file_get_", "save_file_set_flags", "save_file_clear_flags", "save_file_reload", "save_file_erase_current_backup_save", "save_file_set_star_flags", "save_file_is_cannon_unlocked", "touch_coin_score_age", "save_file_set_course_coin_score", "save_file_do_save" ], "src/pc/lua/utils/smlua_model_utils.h": [ "smlua_model_util_get_id" ], "src/game/object_list_processor.h": [ "set_object_respawn_info_bits" ], "src/game/mario_misc.h": [ "bhv_toad.*", "bhv_unlock_door.*" ], diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index a106a5da..a562558b 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -3762,6 +3762,11 @@ function djui_popup_create(message, lines) -- ... end +--- @return nil +function drop_queued_background_music() + -- ... +end + --- @param player integer --- @param targetScale integer --- @param fadeDuration integer @@ -7841,6 +7846,13 @@ function save_file_clear_flags(flags) -- ... end +--- @param fileIndex integer +--- @param forceSave integer +--- @return nil +function save_file_do_save(fileIndex, forceSave) + -- ... +end + --- @return nil function save_file_erase_current_backup_save() -- ... @@ -7910,6 +7922,14 @@ function save_file_reload(load_all) -- ... end +--- @param fileIndex integer +--- @param courseIndex integer +--- @param coinScore integer +--- @return nil +function save_file_set_course_coin_score(fileIndex, courseIndex, coinScore) + -- ... +end + --- @param flags integer --- @return nil function save_file_set_flags(flags) @@ -7924,6 +7944,13 @@ function save_file_set_star_flags(fileIndex, courseIndex, starFlags) -- ... end +--- @param fileIndex integer +--- @param courseIndex integer +--- @return nil +function touch_coin_score_age(fileIndex, courseIndex) + -- ... +end + --- @param obj Object --- @return string function smlua_anim_util_get_current_animation_name(obj) @@ -8438,6 +8465,11 @@ function get_environment_region(index) -- ... end +--- @return boolean +function get_got_file_coin_hi_score() + -- ... +end + --- @param m MarioState --- @param index integer --- @return number @@ -8459,6 +8491,16 @@ function get_hand_foot_pos_z(m, index) -- ... end +--- @return integer +function get_last_completed_course_num() + -- ... +end + +--- @return integer +function get_last_completed_star_num() + -- ... +end + --- @return integer function get_last_star_or_key() -- ... @@ -8480,6 +8522,11 @@ function get_os_name() -- ... end +--- @return boolean +function get_save_file_modified() + -- ... +end + --- @return integer function get_skybox() -- ... @@ -8582,6 +8629,11 @@ function play_transition(transType, time, red, green, blue) -- ... end +--- @return boolean +function save_file_get_using_backup_slot() + -- ... +end + --- @param usingBackupSlot boolean --- @return nil function save_file_set_using_backup_slot(usingBackupSlot) @@ -8595,6 +8647,24 @@ function set_environment_region(index, value) -- ... end +--- @param value boolean +--- @return nil +function set_got_file_coin_hi_score(value) + -- ... +end + +--- @param courseNum integer +--- @return nil +function set_last_completed_course_num(courseNum) + -- ... +end + +--- @param starNum integer +--- @return nil +function set_last_completed_star_num(starNum) + -- ... +end + --- @param value integer --- @return nil function set_last_star_or_key(value) @@ -8638,6 +8708,12 @@ function set_override_skybox(background) -- ... end +--- @param value boolean +--- @return nil +function set_save_file_modified(value) + -- ... +end + --- @param speed integer --- @return nil function set_ttc_speed_setting(speed) diff --git a/docs/lua/functions-3.md b/docs/lua/functions-3.md index 07547fd7..1746f890 100644 --- a/docs/lua/functions-3.md +++ b/docs/lua/functions-3.md @@ -2495,6 +2495,24 @@
+## [drop_queued_background_music](#drop_queued_background_music) + +### Lua Example +`drop_queued_background_music()` + +### Parameters +- None + +### Returns +- None + +### C Prototype +`void drop_queued_background_music(void);` + +[:arrow_up_small:](#) + +
+ ## [fade_volume_scale](#fade_volume_scale) ### Lua Example diff --git a/docs/lua/functions-4.md b/docs/lua/functions-4.md index 34fdd6d4..989dc026 100644 --- a/docs/lua/functions-4.md +++ b/docs/lua/functions-4.md @@ -6526,6 +6526,27 @@
+## [save_file_do_save](#save_file_do_save) + +### Lua Example +`save_file_do_save(fileIndex, forceSave)` + +### Parameters +| Field | Type | +| ----- | ---- | +| fileIndex | `integer` | +| forceSave | `integer` | + +### Returns +- None + +### C Prototype +`void save_file_do_save(s32 fileIndex, s8 forceSave);` + +[:arrow_up_small:](#) + +
+ ## [save_file_erase_current_backup_save](#save_file_erase_current_backup_save) ### Lua Example @@ -6746,6 +6767,28 @@
+## [save_file_set_course_coin_score](#save_file_set_course_coin_score) + +### Lua Example +`save_file_set_course_coin_score(fileIndex, courseIndex, coinScore)` + +### Parameters +| Field | Type | +| ----- | ---- | +| fileIndex | `integer` | +| courseIndex | `integer` | +| coinScore | `integer` | + +### Returns +- None + +### C Prototype +`void save_file_set_course_coin_score(s32 fileIndex, s32 courseIndex, u8 coinScore);` + +[:arrow_up_small:](#) + +
+ ## [save_file_set_flags](#save_file_set_flags) ### Lua Example @@ -6788,6 +6831,27 @@
+## [touch_coin_score_age](#touch_coin_score_age) + +### Lua Example +`touch_coin_score_age(fileIndex, courseIndex)` + +### Parameters +| Field | Type | +| ----- | ---- | +| fileIndex | `integer` | +| courseIndex | `integer` | + +### Returns +- None + +### C Prototype +`void touch_coin_score_age(s32 fileIndex, s32 courseIndex);` + +[:arrow_up_small:](#) + +
+ --- # functions from smlua_anim_utils.h diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md index d0d28c13..f7a5cc5c 100644 --- a/docs/lua/functions-5.md +++ b/docs/lua/functions-5.md @@ -659,6 +659,24 @@
+## [get_got_file_coin_hi_score](#get_got_file_coin_hi_score) + +### Lua Example +`local booleanValue = get_got_file_coin_hi_score()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool get_got_file_coin_hi_score(void);` + +[:arrow_up_small:](#) + +
+ ## [get_hand_foot_pos_x](#get_hand_foot_pos_x) ### Lua Example @@ -722,6 +740,42 @@
+## [get_last_completed_course_num](#get_last_completed_course_num) + +### Lua Example +`local integerValue = get_last_completed_course_num()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u8 get_last_completed_course_num(void);` + +[:arrow_up_small:](#) + +
+ +## [get_last_completed_star_num](#get_last_completed_star_num) + +### Lua Example +`local integerValue = get_last_completed_star_num()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u8 get_last_completed_star_num(void);` + +[:arrow_up_small:](#) + +
+ ## [get_last_star_or_key](#get_last_star_or_key) ### Lua Example @@ -796,6 +850,24 @@
+## [get_save_file_modified](#get_save_file_modified) + +### Lua Example +`local booleanValue = get_save_file_modified()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool get_save_file_modified(void);` + +[:arrow_up_small:](#) + +
+ ## [get_skybox](#get_skybox) ### Lua Example @@ -1100,6 +1172,24 @@
+## [save_file_get_using_backup_slot](#save_file_get_using_backup_slot) + +### Lua Example +`local booleanValue = save_file_get_using_backup_slot()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool save_file_get_using_backup_slot(void);` + +[:arrow_up_small:](#) + +
+ ## [save_file_set_using_backup_slot](#save_file_set_using_backup_slot) ### Lua Example @@ -1141,6 +1231,66 @@
+## [set_got_file_coin_hi_score](#set_got_file_coin_hi_score) + +### Lua Example +`set_got_file_coin_hi_score(value)` + +### Parameters +| Field | Type | +| ----- | ---- | +| value | `boolean` | + +### Returns +- None + +### C Prototype +`void set_got_file_coin_hi_score(bool value);` + +[:arrow_up_small:](#) + +
+ +## [set_last_completed_course_num](#set_last_completed_course_num) + +### Lua Example +`set_last_completed_course_num(courseNum)` + +### Parameters +| Field | Type | +| ----- | ---- | +| courseNum | `integer` | + +### Returns +- None + +### C Prototype +`void set_last_completed_course_num(u8 courseNum);` + +[:arrow_up_small:](#) + +
+ +## [set_last_completed_star_num](#set_last_completed_star_num) + +### Lua Example +`set_last_completed_star_num(starNum)` + +### Parameters +| Field | Type | +| ----- | ---- | +| starNum | `integer` | + +### Returns +- None + +### C Prototype +`void set_last_completed_star_num(u8 starNum);` + +[:arrow_up_small:](#) + +
+ ## [set_last_star_or_key](#set_last_star_or_key) ### Lua Example @@ -1282,6 +1432,26 @@
+## [set_save_file_modified](#set_save_file_modified) + +### Lua Example +`set_save_file_modified(value)` + +### Parameters +| Field | Type | +| ----- | ---- | +| value | `boolean` | + +### Returns +- None + +### C Prototype +`void set_save_file_modified(bool value);` + +[:arrow_up_small:](#) + +
+ ## [set_ttc_speed_setting](#set_ttc_speed_setting) ### Lua Example diff --git a/docs/lua/functions.md b/docs/lua/functions.md index 83cf2879..cbff5959 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -745,6 +745,7 @@
- external.h + - [drop_queued_background_music](functions-3.md#drop_queued_background_music) - [fade_volume_scale](functions-3.md#fade_volume_scale) - [fadeout_background_music](functions-3.md#fadeout_background_music) - [get_current_background_music](functions-3.md#get_current_background_music) @@ -1452,6 +1453,7 @@ - save_file.h - [save_file_clear_flags](functions-4.md#save_file_clear_flags) + - [save_file_do_save](functions-4.md#save_file_do_save) - [save_file_erase_current_backup_save](functions-4.md#save_file_erase_current_backup_save) - [save_file_get_cap_pos](functions-4.md#save_file_get_cap_pos) - [save_file_get_course_coin_score](functions-4.md#save_file_get_course_coin_score) @@ -1463,8 +1465,10 @@ - [save_file_get_total_star_count](functions-4.md#save_file_get_total_star_count) - [save_file_is_cannon_unlocked](functions-4.md#save_file_is_cannon_unlocked) - [save_file_reload](functions-4.md#save_file_reload) + - [save_file_set_course_coin_score](functions-4.md#save_file_set_course_coin_score) - [save_file_set_flags](functions-4.md#save_file_set_flags) - [save_file_set_star_flags](functions-4.md#save_file_set_star_flags) + - [touch_coin_score_age](functions-4.md#touch_coin_score_age)
@@ -1574,13 +1578,17 @@ - [get_dialog_id](functions-5.md#get_dialog_id) - [get_envfx](functions-5.md#get_envfx) - [get_environment_region](functions-5.md#get_environment_region) + - [get_got_file_coin_hi_score](functions-5.md#get_got_file_coin_hi_score) - [get_hand_foot_pos_x](functions-5.md#get_hand_foot_pos_x) - [get_hand_foot_pos_y](functions-5.md#get_hand_foot_pos_y) - [get_hand_foot_pos_z](functions-5.md#get_hand_foot_pos_z) + - [get_last_completed_course_num](functions-5.md#get_last_completed_course_num) + - [get_last_completed_star_num](functions-5.md#get_last_completed_star_num) - [get_last_star_or_key](functions-5.md#get_last_star_or_key) - [get_lighting_dir](functions-5.md#get_lighting_dir) - [get_network_area_timer](functions-5.md#get_network_area_timer) - [get_os_name](functions-5.md#get_os_name) + - [get_save_file_modified](functions-5.md#get_save_file_modified) - [get_skybox](functions-5.md#get_skybox) - [get_temp_s32_pointer](functions-5.md#get_temp_s32_pointer) - [get_time](functions-5.md#get_time) @@ -1596,8 +1604,12 @@ - [is_transition_playing](functions-5.md#is_transition_playing) - [movtexqc_register](functions-5.md#movtexqc_register) - [play_transition](functions-5.md#play_transition) + - [save_file_get_using_backup_slot](functions-5.md#save_file_get_using_backup_slot) - [save_file_set_using_backup_slot](functions-5.md#save_file_set_using_backup_slot) - [set_environment_region](functions-5.md#set_environment_region) + - [set_got_file_coin_hi_score](functions-5.md#set_got_file_coin_hi_score) + - [set_last_completed_course_num](functions-5.md#set_last_completed_course_num) + - [set_last_completed_star_num](functions-5.md#set_last_completed_star_num) - [set_last_star_or_key](functions-5.md#set_last_star_or_key) - [set_lighting_dir](functions-5.md#set_lighting_dir) - [set_override_envfx](functions-5.md#set_override_envfx) @@ -1605,6 +1617,7 @@ - [set_override_fov](functions-5.md#set_override_fov) - [set_override_near](functions-5.md#set_override_near) - [set_override_skybox](functions-5.md#set_override_skybox) + - [set_save_file_modified](functions-5.md#set_save_file_modified) - [set_ttc_speed_setting](functions-5.md#set_ttc_speed_setting)
diff --git a/src/game/save_file.c b/src/game/save_file.c index f60aefa6..5b013770 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -291,7 +291,7 @@ static void set_coin_score_age(s32 fileIndex, s32 courseIndex, s32 age) { /** * Mark a coin score for a save file as the newest out of all save files. */ -static void touch_coin_score_age(s32 fileIndex, s32 courseIndex) { +void touch_coin_score_age(s32 fileIndex, s32 courseIndex) { if (INVALID_FILE_INDEX(fileIndex)) { return; } s32 i; u32 age; @@ -693,6 +693,10 @@ s32 save_file_get_course_coin_score(s32 fileIndex, s32 courseIndex) { return gSaveBuffer.files[fileIndex][gSaveFileUsingBackupSlot].courseCoinScores[courseIndex]; } +void save_file_set_course_coin_score(s32 fileIndex, s32 courseIndex, u8 coinScore) { + gSaveBuffer.files[fileIndex][gSaveFileUsingBackupSlot].courseCoinScores[courseIndex] = coinScore; +} + /** * Return TRUE if the cannon is unlocked in the current course. */ diff --git a/src/game/save_file.h b/src/game/save_file.h index eedc5b10..93240e39 100644 --- a/src/game/save_file.h +++ b/src/game/save_file.h @@ -129,6 +129,7 @@ extern s8 gMainMenuDataModified; extern s8 gSaveFileModified; s8 get_level_course_num(s16 levelNum); +void touch_coin_score_age(s32 fileIndex, s32 courseIndex); void save_file_do_save(s32 fileIndex, s8 forceSave); void save_file_erase(s32 fileIndex); void save_file_erase_current_backup_save(void); @@ -146,6 +147,7 @@ u32 save_file_get_flags(void); u32 save_file_get_star_flags(s32 fileIndex, s32 courseIndex); void save_file_set_star_flags(s32 fileIndex, s32 courseIndex, u32 starFlags); s32 save_file_get_course_coin_score(s32 fileIndex, s32 courseIndex); +void save_file_set_course_coin_score(s32 fileIndex, s32 courseIndex, u8 coinScore); s32 save_file_is_cannon_unlocked(s32 fileIndex, s32 courseIndex); void save_file_set_cannon_unlocked(void); void save_file_set_cap_pos(s16 x, s16 y, s16 z); diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index 36a877e4..b06acbb3 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -12464,6 +12464,21 @@ int smlua_func_djui_popup_create(lua_State* L) { // external.h // //////////////// +int smlua_func_drop_queued_background_music(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "drop_queued_background_music", 0, top); + return 0; + } + + + drop_queued_background_music(); + + return 1; +} + int smlua_func_fade_volume_scale(lua_State* L) { if (L == NULL) { return 0; } @@ -26301,6 +26316,25 @@ int smlua_func_save_file_clear_flags(lua_State* L) { return 1; } +int smlua_func_save_file_do_save(lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 2) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "save_file_do_save", 2, top); + return 0; + } + + s32 fileIndex = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "save_file_do_save"); return 0; } + s8 forceSave = smlua_to_integer(L, 2); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "save_file_do_save"); return 0; } + + save_file_do_save(fileIndex, forceSave); + + return 1; +} + int smlua_func_save_file_erase_current_backup_save(UNUSED lua_State* L) { if (L == NULL) { return 0; } @@ -26502,6 +26536,27 @@ int smlua_func_save_file_reload(lua_State* L) { return 1; } +int smlua_func_save_file_set_course_coin_score(lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 3) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "save_file_set_course_coin_score", 3, top); + return 0; + } + + s32 fileIndex = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "save_file_set_course_coin_score"); return 0; } + s32 courseIndex = smlua_to_integer(L, 2); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "save_file_set_course_coin_score"); return 0; } + u8 coinScore = smlua_to_integer(L, 3); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 3, "save_file_set_course_coin_score"); return 0; } + + save_file_set_course_coin_score(fileIndex, courseIndex, coinScore); + + return 1; +} + int smlua_func_save_file_set_flags(lua_State* L) { if (L == NULL) { return 0; } @@ -26540,6 +26595,25 @@ int smlua_func_save_file_set_star_flags(lua_State* L) { return 1; } +int smlua_func_touch_coin_score_age(lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 2) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "touch_coin_score_age", 2, top); + return 0; + } + + s32 fileIndex = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "touch_coin_score_age"); return 0; } + s32 courseIndex = smlua_to_integer(L, 2); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "touch_coin_score_age"); return 0; } + + touch_coin_score_age(fileIndex, courseIndex); + + return 1; +} + //////////////////////// // smlua_anim_utils.h // //////////////////////// @@ -28014,6 +28088,21 @@ int smlua_func_get_environment_region(lua_State* L) { return 1; } +int smlua_func_get_got_file_coin_hi_score(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "get_got_file_coin_hi_score", 0, top); + return 0; + } + + + lua_pushboolean(L, get_got_file_coin_hi_score()); + + return 1; +} + int smlua_func_get_hand_foot_pos_x(lua_State* L) { if (L == NULL) { return 0; } @@ -28071,6 +28160,36 @@ int smlua_func_get_hand_foot_pos_z(lua_State* L) { return 1; } +int smlua_func_get_last_completed_course_num(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "get_last_completed_course_num", 0, top); + return 0; + } + + + lua_pushinteger(L, get_last_completed_course_num()); + + return 1; +} + +int smlua_func_get_last_completed_star_num(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "get_last_completed_star_num", 0, top); + return 0; + } + + + lua_pushinteger(L, get_last_completed_star_num()); + + return 1; +} + int smlua_func_get_last_star_or_key(UNUSED lua_State* L) { if (L == NULL) { return 0; } @@ -28133,6 +28252,21 @@ int smlua_func_get_os_name(UNUSED lua_State* L) { return 1; } +int smlua_func_get_save_file_modified(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "get_save_file_modified", 0, top); + return 0; + } + + + lua_pushboolean(L, get_save_file_modified()); + + return 1; +} + int smlua_func_get_skybox(UNUSED lua_State* L) { if (L == NULL) { return 0; } @@ -28412,6 +28546,21 @@ int smlua_func_play_transition(lua_State* L) { return 1; } +int smlua_func_save_file_get_using_backup_slot(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "save_file_get_using_backup_slot", 0, top); + return 0; + } + + + lua_pushboolean(L, save_file_get_using_backup_slot()); + + return 1; +} + int smlua_func_save_file_set_using_backup_slot(lua_State* L) { if (L == NULL) { return 0; } @@ -28448,6 +28597,57 @@ int smlua_func_set_environment_region(lua_State* L) { return 1; } +int smlua_func_set_got_file_coin_hi_score(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", "set_got_file_coin_hi_score", 1, top); + return 0; + } + + bool value = smlua_to_boolean(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "set_got_file_coin_hi_score"); return 0; } + + set_got_file_coin_hi_score(value); + + return 1; +} + +int smlua_func_set_last_completed_course_num(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", "set_last_completed_course_num", 1, top); + return 0; + } + + u8 courseNum = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "set_last_completed_course_num"); return 0; } + + set_last_completed_course_num(courseNum); + + return 1; +} + +int smlua_func_set_last_completed_star_num(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", "set_last_completed_star_num", 1, top); + return 0; + } + + u8 starNum = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "set_last_completed_star_num"); return 0; } + + set_last_completed_star_num(starNum); + + return 1; +} + int smlua_func_set_last_star_or_key(lua_State* L) { if (L == NULL) { return 0; } @@ -28569,6 +28769,23 @@ int smlua_func_set_override_skybox(lua_State* L) { return 1; } +int smlua_func_set_save_file_modified(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", "set_save_file_modified", 1, top); + return 0; + } + + bool value = smlua_to_boolean(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "set_save_file_modified"); return 0; } + + set_save_file_modified(value); + + return 1; +} + int smlua_func_set_ttc_speed_setting(lua_State* L) { if (L == NULL) { return 0; } @@ -30816,6 +31033,7 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "djui_popup_create", smlua_func_djui_popup_create); // external.h + smlua_bind_function(L, "drop_queued_background_music", smlua_func_drop_queued_background_music); smlua_bind_function(L, "fade_volume_scale", smlua_func_fade_volume_scale); smlua_bind_function(L, "fadeout_background_music", smlua_func_fadeout_background_music); smlua_bind_function(L, "get_current_background_music", smlua_func_get_current_background_music); @@ -31486,6 +31704,7 @@ void smlua_bind_functions_autogen(void) { // save_file.h smlua_bind_function(L, "save_file_clear_flags", smlua_func_save_file_clear_flags); + smlua_bind_function(L, "save_file_do_save", smlua_func_save_file_do_save); smlua_bind_function(L, "save_file_erase_current_backup_save", smlua_func_save_file_erase_current_backup_save); 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); @@ -31497,8 +31716,10 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "save_file_get_total_star_count", smlua_func_save_file_get_total_star_count); smlua_bind_function(L, "save_file_is_cannon_unlocked", smlua_func_save_file_is_cannon_unlocked); smlua_bind_function(L, "save_file_reload", smlua_func_save_file_reload); + smlua_bind_function(L, "save_file_set_course_coin_score", smlua_func_save_file_set_course_coin_score); smlua_bind_function(L, "save_file_set_flags", smlua_func_save_file_set_flags); smlua_bind_function(L, "save_file_set_star_flags", smlua_func_save_file_set_star_flags); + smlua_bind_function(L, "touch_coin_score_age", smlua_func_touch_coin_score_age); // smlua_anim_utils.h smlua_bind_function(L, "smlua_anim_util_get_current_animation_name", smlua_func_smlua_anim_util_get_current_animation_name); @@ -31595,13 +31816,17 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "get_dialog_id", smlua_func_get_dialog_id); smlua_bind_function(L, "get_envfx", smlua_func_get_envfx); smlua_bind_function(L, "get_environment_region", smlua_func_get_environment_region); + smlua_bind_function(L, "get_got_file_coin_hi_score", smlua_func_get_got_file_coin_hi_score); smlua_bind_function(L, "get_hand_foot_pos_x", smlua_func_get_hand_foot_pos_x); smlua_bind_function(L, "get_hand_foot_pos_y", smlua_func_get_hand_foot_pos_y); smlua_bind_function(L, "get_hand_foot_pos_z", smlua_func_get_hand_foot_pos_z); + smlua_bind_function(L, "get_last_completed_course_num", smlua_func_get_last_completed_course_num); + smlua_bind_function(L, "get_last_completed_star_num", smlua_func_get_last_completed_star_num); smlua_bind_function(L, "get_last_star_or_key", smlua_func_get_last_star_or_key); smlua_bind_function(L, "get_lighting_dir", smlua_func_get_lighting_dir); smlua_bind_function(L, "get_network_area_timer", smlua_func_get_network_area_timer); smlua_bind_function(L, "get_os_name", smlua_func_get_os_name); + smlua_bind_function(L, "get_save_file_modified", smlua_func_get_save_file_modified); smlua_bind_function(L, "get_skybox", smlua_func_get_skybox); smlua_bind_function(L, "get_temp_s32_pointer", smlua_func_get_temp_s32_pointer); smlua_bind_function(L, "get_time", smlua_func_get_time); @@ -31617,8 +31842,12 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "is_transition_playing", smlua_func_is_transition_playing); smlua_bind_function(L, "movtexqc_register", smlua_func_movtexqc_register); smlua_bind_function(L, "play_transition", smlua_func_play_transition); + smlua_bind_function(L, "save_file_get_using_backup_slot", smlua_func_save_file_get_using_backup_slot); smlua_bind_function(L, "save_file_set_using_backup_slot", smlua_func_save_file_set_using_backup_slot); smlua_bind_function(L, "set_environment_region", smlua_func_set_environment_region); + smlua_bind_function(L, "set_got_file_coin_hi_score", smlua_func_set_got_file_coin_hi_score); + smlua_bind_function(L, "set_last_completed_course_num", smlua_func_set_last_completed_course_num); + smlua_bind_function(L, "set_last_completed_star_num", smlua_func_set_last_completed_star_num); smlua_bind_function(L, "set_last_star_or_key", smlua_func_set_last_star_or_key); smlua_bind_function(L, "set_lighting_dir", smlua_func_set_lighting_dir); smlua_bind_function(L, "set_override_envfx", smlua_func_set_override_envfx); @@ -31626,6 +31855,7 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "set_override_fov", smlua_func_set_override_fov); smlua_bind_function(L, "set_override_near", smlua_func_set_override_near); smlua_bind_function(L, "set_override_skybox", smlua_func_set_override_skybox); + smlua_bind_function(L, "set_save_file_modified", smlua_func_set_save_file_modified); smlua_bind_function(L, "set_ttc_speed_setting", smlua_func_set_ttc_speed_setting); // smlua_model_utils.h diff --git a/src/pc/lua/utils/smlua_misc_utils.c b/src/pc/lua/utils/smlua_misc_utils.c index 05bde2a5..8b951d70 100644 --- a/src/pc/lua/utils/smlua_misc_utils.c +++ b/src/pc/lua/utils/smlua_misc_utils.c @@ -70,6 +70,42 @@ void set_last_star_or_key(u8 value) { gLastCollectedStarOrKey = value; } +extern u8 gLastCompletedCourseNum; +u8 get_last_completed_course_num(void) { + return gLastCompletedCourseNum; +} + +void set_last_completed_course_num(u8 courseNum) { + gLastCompletedCourseNum = courseNum; +} + +extern u8 gLastCompletedStarNum; +u8 get_last_completed_star_num(void) { + return gLastCompletedStarNum; +} + +void set_last_completed_star_num(u8 starNum) { + gLastCompletedStarNum = starNum; +} + +extern u8 gGotFileCoinHiScore; +bool get_got_file_coin_hi_score(void) { + return gGotFileCoinHiScore; +} + +void set_got_file_coin_hi_score(bool value) { + gGotFileCoinHiScore = value ? TRUE : FALSE; +} + +extern s8 gSaveFileModified; +bool get_save_file_modified(void) { + return gSaveFileModified; +} + +void set_save_file_modified(bool value) { + gSaveFileModified = value ? TRUE : FALSE; +} + extern s8 gDialogBoxState; s8 get_dialog_box_state() { return gDialogBoxState; @@ -420,9 +456,13 @@ s16 get_current_save_file_num(void) { return gCurrSaveFileNum; } +extern u8 gSaveFileUsingBackupSlot; +bool save_file_get_using_backup_slot(void) { + return gSaveFileUsingBackupSlot; +} + void save_file_set_using_backup_slot(bool usingBackupSlot) { - extern u8 gSaveFileUsingBackupSlot; - gSaveFileUsingBackupSlot = usingBackupSlot ? 1 : 0; + gSaveFileUsingBackupSlot = usingBackupSlot ? TRUE : FALSE; } /// diff --git a/src/pc/lua/utils/smlua_misc_utils.h b/src/pc/lua/utils/smlua_misc_utils.h index fa69bf0d..4a012476 100644 --- a/src/pc/lua/utils/smlua_misc_utils.h +++ b/src/pc/lua/utils/smlua_misc_utils.h @@ -75,6 +75,14 @@ s8 get_dialog_box_state(); s16 get_dialog_id(void); s32 get_last_star_or_key(void); void set_last_star_or_key(u8 value); +u8 get_last_completed_course_num(void); +void set_last_completed_course_num(u8 courseNum); +u8 get_last_completed_star_num(void); +void set_last_completed_star_num(u8 starNum); +bool get_got_file_coin_hi_score(void); +void set_got_file_coin_hi_score(bool value); +bool get_save_file_modified(void); +void set_save_file_modified(bool value); u32 allocate_mario_action(u32 actFlags); @@ -83,6 +91,7 @@ f32 get_hand_foot_pos_y(struct MarioState* m, u8 index); f32 get_hand_foot_pos_z(struct MarioState* m, u8 index); s16 get_current_save_file_num(void); +bool save_file_get_using_backup_slot(void); void save_file_set_using_backup_slot(bool usingBackupSlot); void movtexqc_register(const char* name, s16 level, s16 area, s16 type);