From be10487c5c8365dd7636f240c6a3fb8a103c02dc Mon Sep 17 00:00:00 2001 From: Misa Date: Fri, 19 Mar 2021 23:23:18 -0700 Subject: [PATCH] Set fademode to temp 0 when going to in-game options While I've decoupled fademode from gamemode starting, being faded out on the title screen results in a black screen and you being unable to make any input. So we'll need to store the current fademode in a temporary variable when going to in-game options, then put it back when we return to the pause menu. Yes, you can turn on glitchrunner mode during the in-game options, and then immediately return to the pause menu to instantly go back to the title screen; this is intended. Due to frame ordering, putting the fademode back needs to be deferred to the end of the frame to prevent a 1-frame flicker. It's actually sufficient enough to do this temporary fademode storage to fix the whole thing, but I also decided to decouple fademode and gamemode starting just to be sure. --- desktop_version/src/Game.cpp | 6 ++++++ desktop_version/src/Graphics.cpp | 1 + desktop_version/src/Graphics.h | 1 + desktop_version/src/Input.cpp | 2 ++ 4 files changed, 10 insertions(+) diff --git a/desktop_version/src/Game.cpp b/desktop_version/src/Game.cpp index 74a780aa..61b1118d 100644 --- a/desktop_version/src/Game.cpp +++ b/desktop_version/src/Game.cpp @@ -6666,6 +6666,11 @@ static void nextbgcolor(void) map.nexttowercolour(); } +static void setfademode(void) +{ + graphics.fademode = graphics.ingame_fademode; +} + void Game::returntoingame(void) { ingame_titlemode = false; @@ -6684,6 +6689,7 @@ void Game::returntoingame(void) DEFER_CALLBACK(returntoingametemp); gamestate = MAPMODE; graphics.flipmode = graphics.setflipmode; + DEFER_CALLBACK(setfademode); if (!map.custommode && !graphics.flipmode) { obj.flags[73] = true; diff --git a/desktop_version/src/Graphics.cpp b/desktop_version/src/Graphics.cpp index 7254bba8..a4e7c8eb 100644 --- a/desktop_version/src/Graphics.cpp +++ b/desktop_version/src/Graphics.cpp @@ -98,6 +98,7 @@ void Graphics::init(void) setfade(0); fademode = 0; + ingame_fademode = 0; // initialize everything else to zero backBuffer = NULL; diff --git a/desktop_version/src/Graphics.h b/desktop_version/src/Graphics.h index 366857b8..af41b09b 100644 --- a/desktop_version/src/Graphics.h +++ b/desktop_version/src/Graphics.h @@ -295,6 +295,7 @@ public: int fadeamount; int oldfadeamount; int fadebars[15]; + int ingame_fademode; bool trinketcolset; int trinketr, trinketg, trinketb; diff --git a/desktop_version/src/Input.cpp b/desktop_version/src/Input.cpp index 549e3e96..b06fa62a 100644 --- a/desktop_version/src/Input.cpp +++ b/desktop_version/src/Input.cpp @@ -2320,6 +2320,8 @@ static void mapmenuactionpress(void) game.gamestate = TITLEMODE; graphics.flipmode = false; game.ingame_titlemode = true; + graphics.ingame_fademode = graphics.fademode; + graphics.fademode = 0; // Set this before we create the menu game.kludge_ingametemp = game.currentmenuname;