diff --git a/mm/2s2h/BenGui/BenMenuBar.cpp b/mm/2s2h/BenGui/BenMenuBar.cpp index 91ad63ab6..cbb0bce49 100644 --- a/mm/2s2h/BenGui/BenMenuBar.cpp +++ b/mm/2s2h/BenGui/BenMenuBar.cpp @@ -409,9 +409,13 @@ void DrawEnhancementsMenu() { { .tooltip = "Playing the Song Of Time will not reset the Sword back to Kokiri Sword." }); UIWidgets::CVarCheckbox("Do not reset Rupees", "gEnhancements.Cycle.DoNotResetRupees", { .tooltip = "Playing the Song Of Time will not reset the your rupees." }); - UIWidgets::CVarSliderInt("Save Delay", "gEnhancements.Save.SaveDelay", 0, 5, 0, - { .tooltip = "Sets the delay between pressing save and the save being marked as " - "complete. Original game was 2." }); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(255, 255, 0, 255)); + ImGui::SeparatorText("Unstable"); + ImGui::PopStyleColor(); + UIWidgets::CVarCheckbox( + "Disable Save Delay", "gEnhancements.Save.DisableSaveDelay", + { .tooltip = "Removes the arbitrary 2 second timer for saving from the original game. This is known to " + "cause issues when attempting the 0th Day Glitch" }); ImGui::EndMenu(); } diff --git a/mm/src/code/z_sram_NES.c b/mm/src/code/z_sram_NES.c index 86bf9e945..81a9b43e1 100644 --- a/mm/src/code/z_sram_NES.c +++ b/mm/src/code/z_sram_NES.c @@ -1996,9 +1996,8 @@ void Sram_UpdateWriteToFlashDefault(SramContext* sramCtx) { } } } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->startWriteOsTime) >= - SECONDS_TO_TIMER(CVarGetInteger( - "gEnhancements.Save.SaveDelay", - 0))) { // 2S2H [Port] Some tricks require a save delay so we can't just force it to zero + SECONDS_TO_TIMER(CVarGetInteger("gEnhancements.Save.DisableSaveDelay", 0) ? 0 : 2)) { + // 2S2H [Port] Some tricks require a save delay so we can't just force it to zero // Finished status is hardcoded to 2 seconds instead of when the task finishes sramCtx->status = 0; } @@ -2037,9 +2036,8 @@ void Sram_UpdateWriteToFlashOwlSave(SramContext* sramCtx) { } } } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->startWriteOsTime) >= - SECONDS_TO_TIMER(CVarGetInteger( - "gEnhancements.Save.SaveDelay", - 0))) { // 2S2H [Port] Some tricks require a save delay so we can't just force it to zero + SECONDS_TO_TIMER(CVarGetInteger("gEnhancements.Save.DisableSaveDelay", 0) ? 0 : 2)) { + // 2S2H [Port] Some tricks require a save delay so we can't just force it to zero // Finished status is hardcoded to 2 seconds instead of when the task finishes sramCtx->status = 0; memset(sramCtx->saveBuf, 0, SAVE_BUFFER_SIZE); diff --git a/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index 169d880f8..1e7278201 100644 --- a/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/mm/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -3515,7 +3515,10 @@ void KaleidoScope_Update(PlayState* play) { Audio_PlaySfx(NA_SE_SY_PIECE_OF_HEART); if (CVarGetInteger("gEnhancements.Kaleido.PauseSave", 0)) { gSaveContext.save.isOwlSave = true; - gSaveContext.save.shipSaveInfo.pauseSaveEntrance = gSaveContext.save.entrance; + // 2S2H [Enhancement] Eventually we might allow them to load from their last entrance, + // but we need to first identify and fix edge cases where that doesn't work properly + // like grottos and cutscenes + gSaveContext.save.shipSaveInfo.pauseSaveEntrance = ENTRANCE(SOUTH_CLOCK_TOWN, 0); } Play_SaveCycleSceneFlags(&play->state); gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId;