From b02c4aac788596a119188089798c6241202a4d77 Mon Sep 17 00:00:00 2001 From: Misa Date: Fri, 17 Apr 2020 12:06:37 -0700 Subject: [PATCH] Fix going to wrong menu upon quit The problem was, if you were in a time trial and quit, it wouldn't go back to selecting your current time trial. But also if you were in a custom level and quit, you would still be on the playerworlds menu. The problem was twofold: first, I simply wasn't doing the custommode check. But secondly, I couldn't use map.custommode directly, because whenever you quit the game aggressively hardreset()s everything immediately when you press ACTION. There's probably a good reason for that aggressive hardreset(), so I won't touch that hardreset() in any way. Instead, I had to introduce two kludge variables wasintimetrial and wasincustommode to Game, and use those to do the check proper. --- desktop_version/src/Game.cpp | 8 +++++++- desktop_version/src/Game.h | 4 ++++ desktop_version/src/Input.cpp | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/desktop_version/src/Game.cpp b/desktop_version/src/Game.cpp index 00569209..a987875e 100644 --- a/desktop_version/src/Game.cpp +++ b/desktop_version/src/Game.cpp @@ -232,6 +232,9 @@ void Game::init(void) customleveltitle=""; createmenu(Menu::mainmenu); + wasintimetrial = false; + wasincustommode = false; + deathcounts = 0; gameoverdelay = 0; frames = 0; @@ -1341,10 +1344,13 @@ void Game::updatestate() //Don't be stuck on the summary screen, //or "who do you want to play the level with?" //or "do you want cutscenes?" - if (!intimetrial) + //or the confirm-load-quicksave menu + if ((!wasintimetrial && !wasincustommode) || currentmenuname == Menu::quickloadlevel) { returnmenu(); } + wasintimetrial = false; + wasincustommode = false; state = 0; break; diff --git a/desktop_version/src/Game.h b/desktop_version/src/Game.h index 0e23dd8e..e55df22e 100644 --- a/desktop_version/src/Game.h +++ b/desktop_version/src/Game.h @@ -245,6 +245,10 @@ public: int creditposx, creditposy, creditposdelay; + //Menu kludge... + bool wasintimetrial; + bool wasincustommode; + //Sine Wave Ninja Minigame bool swnmode; diff --git a/desktop_version/src/Input.cpp b/desktop_version/src/Input.cpp index 66271d3f..38c35b76 100644 --- a/desktop_version/src/Input.cpp +++ b/desktop_version/src/Input.cpp @@ -1958,6 +1958,8 @@ void mapinput() //This fixes an apparent frame flicker. FillRect(graphics.tempBuffer, 0x000000); if (game.intimetrial || game.insecretlab || game.nodeathmode) game.menukludge = true; + game.wasintimetrial = game.intimetrial; + game.wasincustommode = map.custommode; script.hardreset(); if(graphics.setflipmode) graphics.flipmode = true; graphics.fademode = 2;