From 5fc07c742a3120d4dbac79fc7a1c26f06b2160c6 Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Sat, 16 Nov 2024 19:55:18 -0600 Subject: [PATCH 1/2] Splitted level selector with expert mode --- src/overlays/ovl_menu/fox_option.c | 21 +++++++++------------ src/port/ui/ImguiUI.cpp | 4 ++++ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/overlays/ovl_menu/fox_option.c b/src/overlays/ovl_menu/fox_option.c index e5d837a1..aa7b5827 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); 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" }); From 9bf2f7817a9b53a1e52b3dfefbc6222bbadf38a1 Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Sat, 16 Nov 2024 20:06:31 -0600 Subject: [PATCH 2/2] This should fix saves --- include/sf64save.h | 4 ++-- src/engine/fox_save.c | 8 +++++--- src/overlays/ovl_menu/fox_option.c | 6 +++++- src/sys/sys_joybus.c | 16 ++++------------ 4 files changed, 16 insertions(+), 18 deletions(-) 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 aa7b5827..558302b9 100644 --- a/src/overlays/ovl_menu/fox_option.c +++ b/src/overlays/ovl_menu/fox_option.c @@ -1875,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/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) {