`save_file_erase_current_backup_save` and more (#189)

This commit is contained in:
Emerald Lockdown 2022-09-26 21:14:53 -05:00 committed by GitHub
parent 6c0757c908
commit 8e9b2c270c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 131 additions and 30 deletions

View File

@ -52,6 +52,7 @@ in_files = [
"src/game/object_list_processor.h",
"src/game/behavior_actions.h",
"src/game/mario_misc.h",
"src/pc/utils/misc.h",
"src/game/level_update.h"
]
@ -59,11 +60,12 @@ override_allowed_functions = {
"src/audio/external.h": [ " play_", "fade", "current_background", "stop_" ],
"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_set_star_flags" ],
"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" ],
"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.*" ],
"src/game/level_update.h": [ "level_trigger_warp" ],
"src/pc/utils/misc.h": [ "update_all_mario_stars"],
}
override_disallowed_functions = {

View File

@ -5211,6 +5211,11 @@ function vec3f_set_dist_and_angle(from, to, dist, pitch, yaw)
-- ...
end
--- @return nil
function update_all_mario_stars()
-- ...
end
--- @param courseNum integer
--- @param actNum integer
--- @param levelNum integer
@ -7271,6 +7276,11 @@ function save_file_clear_flags(flags)
-- ...
end
--- @return nil
function save_file_erase_current_backup_save()
-- ...
end
--- @param capPos Vec3s
--- @return integer
function save_file_get_cap_pos(capPos)
@ -7322,8 +7332,9 @@ function save_file_get_total_star_count(fileIndex, minCourse, maxCourse)
-- ...
end
--- @param load_all integer
--- @return nil
function save_file_reload()
function save_file_reload(load_all)
-- ...
end

View File

@ -7095,6 +7095,30 @@
<br />
---
# functions from misc.h
<br />
## [update_all_mario_stars](#update_all_mario_stars)
### Lua Example
`update_all_mario_stars()`
### Parameters
- None
### Returns
- None
### C Prototype
`void update_all_mario_stars(void);`
[:arrow_up_small:](#)
<br />
---
# functions from network_player.h

View File

@ -5364,6 +5364,24 @@
<br />
## [save_file_erase_current_backup_save](#save_file_erase_current_backup_save)
### Lua Example
`save_file_erase_current_backup_save()`
### Parameters
- None
### Returns
- None
### C Prototype
`void save_file_erase_current_backup_save(void);`
[:arrow_up_small:](#)
<br />
## [save_file_get_cap_pos](#save_file_get_cap_pos)
### Lua Example
@ -5528,16 +5546,18 @@
## [save_file_reload](#save_file_reload)
### Lua Example
`save_file_reload()`
`save_file_reload(load_all)`
### Parameters
- None
| Field | Type |
| ----- | ---- |
| load_all | `integer` |
### Returns
- None
### C Prototype
`void save_file_reload(void);`
`void save_file_reload(u8 load_all);`
[:arrow_up_small:](#)

View File

@ -1012,6 +1012,11 @@
<br />
- misc.h
- [update_all_mario_stars](functions-3.md#update_all_mario_stars)
<br />
- network_player.h
- [get_network_player_from_area](functions-3.md#get_network_player_from_area)
- [get_network_player_from_level](functions-3.md#get_network_player_from_level)
@ -1354,6 +1359,7 @@
- save_file.h
- [save_file_clear_flags](functions-4.md#save_file_clear_flags)
- [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)
- [save_file_get_course_star_count](functions-4.md#save_file_get_course_star_count)

View File

@ -14,6 +14,7 @@
#include "pc/ini.h"
#include "pc/network/network.h"
#include "pc/lua/utils/smlua_level_utils.h"
#include "pc/utils/misc.h"
#ifndef bcopy
#define bcopy(b1,b2,len) (memmove((b2), (b1), (len)), (void) 0)
@ -200,7 +201,7 @@ static u16 calc_checksum(u8 *data, s32 size) {
/**
* Verify the signature at the end of the block to check if the data is valid.
*/
static s32 verify_save_block_signature(void *buffer, s32 size, u16 magic) {
UNUSED static s32 verify_save_block_signature(void *buffer, s32 size, u16 magic) {
struct SaveBlockSignature *sig = (struct SaveBlockSignature *) ((size - 4) + (u8 *) buffer);
if (sig->magic != magic) {
@ -225,7 +226,7 @@ static void add_save_block_signature(void *buffer, s32 size, u16 magic) {
/**
* Copy main menu data from one backup slot to the other slot.
*/
static void restore_main_menu_data(s32 srcSlot) {
UNUSED static void restore_main_menu_data(s32 srcSlot) {
s32 destSlot = srcSlot ^ 1;
// Compute checksum on source data
@ -253,7 +254,7 @@ static void save_main_menu_data(void) {
}
}
static void wipe_main_menu_data(void) {
UNUSED static void wipe_main_menu_data(void) {
bzero(&gSaveBuffer.menuData[0], sizeof(gSaveBuffer.menuData[0]));
// Set score ages for all courses to 3, 2, 1, and 0, respectively.
@ -311,7 +312,7 @@ static void touch_high_score_ages(s32 fileIndex) {
/**
* Copy save file data from one backup slot to the other slot.
*/
static void restore_save_file_data(s32 fileIndex, s32 srcSlot) {
UNUSED static void restore_save_file_data(s32 fileIndex, s32 srcSlot) {
s32 destSlot = srcSlot ^ 1;
// Compute checksum on source data
@ -392,6 +393,28 @@ void save_file_erase(s32 fileIndex) {
save_file_do_save(fileIndex, TRUE);
}
void save_file_reload(u8 load_all) {
gSaveFileModified = TRUE;
update_all_mario_stars();
if (load_all == TRUE) {
save_file_load_all(TRUE);
save_file_do_save(gCurrSaveFileNum-1, TRUE);
update_all_mario_stars();
}
}
void save_file_erase_current_backup_save(void) {
if (network_is_server()) {
bzero(&gSaveBuffer.files[gCurrSaveFileNum-1][1], sizeof(gSaveBuffer.files[gCurrSaveFileNum-1][1]));
save_file_reload(FALSE);
save_file_do_save(gCurrSaveFileNum-1, TRUE);
network_send_save_file(gCurrSaveFileNum-1);
}
}
//! Needs to be s32 to match on -O2, despite no return value.
BAD_RETURN(s32) save_file_copy(s32 srcFileIndex, s32 destFileIndex) {
if (srcFileIndex < 0 || srcFileIndex >= NUM_SAVE_FILES || destFileIndex < 0 || destFileIndex >= NUM_SAVE_FILES)
@ -457,23 +480,6 @@ void save_file_load_all(UNUSED u8 reload) {
stub_save_file_1();
}
/**
* Reload the current save file from its backup copy, which is effectively a
* a cached copy of what has been written to EEPROM.
* This is used after getting a game over.
*/
void save_file_reload(void) {
// Copy save file data from backup
/*bcopy(&gSaveBuffer.files[gCurrSaveFileNum - 1][1], &gSaveBuffer.files[gCurrSaveFileNum - 1][0],
sizeof(gSaveBuffer.files[gCurrSaveFileNum - 1][0]));
// Copy main menu data from backup
bcopy(&gSaveBuffer.menuData[1], &gSaveBuffer.menuData[0], sizeof(gSaveBuffer.menuData[0]));*/
gMainMenuDataModified = FALSE;
gSaveFileModified = FALSE;
}
/**
* Update the current save file after collecting a star or a key.
* If coin score is greater than the current high score, update it.

View File

@ -131,9 +131,10 @@ extern s8 gSaveFileModified;
s8 get_level_course_num(s16 levelNum);
void save_file_do_save(s32 fileIndex, s8 forceSave);
void save_file_erase(s32 fileIndex);
void save_file_erase_current_backup_save(void);
BAD_RETURN(s32) save_file_copy(s32 srcFileIndex, s32 destFileIndex);
void save_file_load_all(u8 reload);
void save_file_reload(void);
void save_file_reload(u8 load_all);
void save_file_collect_star_or_key(s16 coinScore, s16 starIndex, u8 fromNetwork);
s32 save_file_exists(s32 fileIndex);
u32 save_file_get_max_coin_score(s32 courseIndex);

View File

@ -31,6 +31,7 @@
#include "src/game/object_list_processor.h"
#include "src/game/behavior_actions.h"
#include "src/game/mario_misc.h"
#include "src/pc/utils/misc.h"
#include "src/game/level_update.h"
@ -11717,6 +11718,19 @@ int smlua_func_vec3s_to_vec3f(lua_State* L) {
}
*/
////////////
// misc.h //
////////////
int smlua_func_update_all_mario_stars(UNUSED lua_State* L) {
if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
update_all_mario_stars();
return 1;
}
//////////////////////
// network_player.h //
//////////////////////
@ -16154,6 +16168,15 @@ int smlua_func_save_file_clear_flags(lua_State* L) {
return 1;
}
int smlua_func_save_file_erase_current_backup_save(UNUSED lua_State* L) {
if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
save_file_erase_current_backup_save();
return 1;
}
int smlua_func_save_file_get_cap_pos(lua_State* L) {
if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
@ -16256,11 +16279,13 @@ int smlua_func_save_file_get_total_star_count(lua_State* L) {
return 1;
}
int smlua_func_save_file_reload(UNUSED lua_State* L) {
if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
int smlua_func_save_file_reload(lua_State* L) {
if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
u8 load_all = smlua_to_integer(L, 1);
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter 1 for function 'save_file_reload'"); return 0; }
save_file_reload();
save_file_reload(load_all);
return 1;
}
@ -19177,6 +19202,9 @@ void smlua_bind_functions_autogen(void) {
//smlua_bind_function(L, "vec3s_sum", smlua_func_vec3s_sum); <--- UNIMPLEMENTED
//smlua_bind_function(L, "vec3s_to_vec3f", smlua_func_vec3s_to_vec3f); <--- UNIMPLEMENTED
// misc.h
smlua_bind_function(L, "update_all_mario_stars", smlua_func_update_all_mario_stars);
// network_player.h
smlua_bind_function(L, "get_network_player_from_area", smlua_func_get_network_player_from_area);
smlua_bind_function(L, "get_network_player_from_level", smlua_func_get_network_player_from_level);
@ -19519,6 +19547,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_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);
smlua_bind_function(L, "save_file_get_course_star_count", smlua_func_save_file_get_course_star_count);

View File

@ -529,6 +529,8 @@ void network_shutdown(bool sendLeaving, bool exiting, bool popup) {
extern void save_file_load_all(UNUSED u8 reload);
save_file_load_all(TRUE);
extern void save_file_set_using_backup_slot(bool usingBackupSlot);
save_file_set_using_backup_slot(false);
extern s16 gMenuMode;
gMenuMode = -1;