diff --git a/include/sf64save.h b/include/sf64save.h index 2f80a517..b57f17d5 100644 --- a/include/sf64save.h +++ b/include/sf64save.h @@ -63,8 +63,8 @@ typedef struct { s32 Save_Write(void); s32 Save_Read(void); -void Save_ReadData(void); -void Save_WriteData(void); +bool Save_ReadData(void); +bool Save_WriteData(void); s32 Save_WriteEeprom(SaveFile*); s32 Save_ReadEeprom(SaveFile*); diff --git a/src/engine/fox_save.c b/src/engine/fox_save.c index f459a93a..8b23e8d5 100644 --- a/src/engine/fox_save.c +++ b/src/engine/fox_save.c @@ -44,15 +44,17 @@ s32 Save_Write(void) { gSaveFile.save.checksum = Save_Checksum(&gSaveFile.save); gSaveFile.backup = gSaveFile.save; gSaveIOBuffer = gSaveFile; - Save_WriteData(); - return 0; + return Save_WriteData(); } s32 Save_Read(void) { OSMesg* sp24; s32 i; - Save_ReadData(); + if(!Save_ReadData()){ + return 0; + } + gSaveFile = gSaveIOBuffer; if (gSaveFile.save.checksum == Save_Checksum(&gSaveFile.save)) { diff --git a/src/overlays/ovl_menu/fox_option.c b/src/overlays/ovl_menu/fox_option.c index e5d837a1..558302b9 100644 --- a/src/overlays/ovl_menu/fox_option.c +++ b/src/overlays/ovl_menu/fox_option.c @@ -366,16 +366,16 @@ void Option_Setup(void) { bool playedExpertMode; s32 i; -#if MODS_LEVEL_SELECT == 1 - for (i = 0; i < ARRAY_COUNT(gSaveFile.save.data.planet); i++) { - gSaveFile.save.data.planet[i].expertClear = 1; - gSaveFile.save.data.planet[i].normalClear = 1; - gSaveFile.save.data.planet[i].normalMedal = 1; - gSaveFile.save.data.planet[i].expertMedal = 1; - gSaveFile.save.data.planet[i].played = 1; + // @port: Force expert mode: Warning this + if (CVarGetInteger("gForceExpertMode", 0) == 1) { + for (i = 0; i < ARRAY_COUNT(gSaveFile.save.data.planet); i++) { + gSaveFile.save.data.planet[i].expertClear = 1; + gSaveFile.save.data.planet[i].normalClear = 1; + gSaveFile.save.data.planet[i].normalMedal = 1; + gSaveFile.save.data.planet[i].expertMedal = 1; + gSaveFile.save.data.planet[i].played = 1; + } } - Save_Write(); -#endif gVIsPerFrame = 2; sOptionCardList[OPTION_MAP].tex.texture = aMainGameCardTex; @@ -1437,17 +1437,14 @@ void Option_Sound_SetVolumeLevels(void) { switch (D_menu_801B9288 - 1) { case 0: gSaveFile.save.data.musicVolume = var_v1; - CVarSetFloat("gMainMusicVolume", var_v1 / 100.0f); break; case 1: gSaveFile.save.data.voiceVolume = var_v1; - CVarSetFloat("gVoiceVolume", var_v1 / 100.0f); break; case 2: gSaveFile.save.data.sfxVolume = var_v1; - CVarSetFloat("gSFXMusicVolume", var_v1 / 100.0f); break; } Audio_SetVolume(D_menu_801B924C, var_v1); @@ -1878,8 +1875,12 @@ void Option_Data_Update(void) { if (temp_fv0 == 0.0f) { D_menu_801B91CC = 3; - + #ifdef AVOID_UB + gSaveFile.save = gDefaultSave; + gSaveFile.backup = gDefaultSave; + #else gSaveFile = *(SaveFile*) &gDefaultSave; + #endif Save_Write(); diff --git a/src/port/ui/ImguiUI.cpp b/src/port/ui/ImguiUI.cpp index 8715227f..5fdac56c 100644 --- a/src/port/ui/ImguiUI.cpp +++ b/src/port/ui/ImguiUI.cpp @@ -485,6 +485,10 @@ void DrawDebugMenu() { .tooltip = "Allows you to select any level from the main menu" }); + UIWidgets::CVarCheckbox("Enable Expert Mode", "gForceExpertMode", { + .tooltip = "Allows you to force expert mode" + }); + UIWidgets::CVarCheckbox("SFX Jukebox", "gSfxJukebox", { .tooltip = "Allows you to play sound effects from the game" }); diff --git a/src/sys/sys_joybus.c b/src/sys/sys_joybus.c index cd613a39..415d630b 100644 --- a/src/sys/sys_joybus.c +++ b/src/sys/sys_joybus.c @@ -98,20 +98,12 @@ void Controller_ReadData(void) { osSendMesg(&gControllerMesgQueue, OS_MESG_32(SI_CONT_READ_DONE), OS_MESG_PRI_NORMAL); } -void Save_ReadData(void) { - if ((gStartNMI == 0) && (Save_ReadEeprom(&gSaveIOBuffer) == 0)) { - osSendMesg(&gSaveMesgQueue, OS_MESG_32(SI_SAVE_SUCCESS), OS_MESG_PRI_NORMAL); - return; - } - osSendMesg(&gSaveMesgQueue, OS_MESG_32(SI_SAVE_FAILED), OS_MESG_PRI_NORMAL); +bool Save_ReadData(void) { + return Save_ReadEeprom(&gSaveIOBuffer) == 0; } -void Save_WriteData(void) { - if ((gStartNMI == 0) && (Save_WriteEeprom(&gSaveIOBuffer) == 0)) { - osSendMesg(&gSaveMesgQueue, OS_MESG_32(SI_SAVE_SUCCESS), OS_MESG_PRI_NORMAL); - return; - } - osSendMesg(&gSaveMesgQueue, OS_MESG_32(SI_SAVE_FAILED), OS_MESG_PRI_NORMAL); +bool Save_WriteData(void) { + return Save_WriteEeprom(&gSaveIOBuffer) == 0; } void Controller_Rumble(void) {