From faa305a2f25db04f6cb54bf3af1b4f1498e308ac Mon Sep 17 00:00:00 2001
From: Jaime Passos <lazymyuutsu@gmail.com>
Date: Fri, 22 Nov 2019 17:44:42 -0300
Subject: [PATCH] Fix crossfades Fixes NoReload using the wrong wipestyle. Also
 fixes non-titlemap title screen wipes using the wrong wipestyle.

---
 src/f_finale.h | 7 ++++---
 src/f_wipe.c   | 6 ++++--
 src/g_game.c   | 6 ++++--
 src/p_setup.c  | 2 +-
 4 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/f_finale.h b/src/f_finale.h
index 024b183b24..0002cb3cfa 100644
--- a/src/f_finale.h
+++ b/src/f_finale.h
@@ -152,9 +152,10 @@ extern wipestyle_t wipestyle;
 
 typedef enum
 {
-	WSF_FADEOUT = 1,
-	WSF_FADEIN  = 1<<1,
-	WSF_TOWHITE = 1<<2,
+	WSF_FADEOUT   = 1,
+	WSF_FADEIN    = 1<<1,
+	WSF_TOWHITE   = 1<<2,
+	WSF_CROSSFADE = 1<<3,
 } wipestyleflags_t;
 extern wipestyleflags_t wipestyleflags;
 
diff --git a/src/f_wipe.c b/src/f_wipe.c
index 20651cb1df..0c4c591c86 100644
--- a/src/f_wipe.c
+++ b/src/f_wipe.c
@@ -95,7 +95,7 @@ boolean WipeStageTitle = false;
 INT32 lastwipetic = 0;
 
 wipestyle_t wipestyle = WIPESTYLE_NORMAL;
-wipestyleflags_t wipestyleflags = 0;
+wipestyleflags_t wipestyleflags = WSF_CROSSFADE;
 
 #ifndef NOWIPE
 static UINT8 *wipe_scr_start; //screen 3
@@ -404,7 +404,9 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu)
 
 	// don't know where else to put this.
 	// this any good?
-	if (gamestate == GS_LEVEL || gamestate == GS_TITLESCREEN)
+	if ((gamestate == GS_LEVEL || gamestate == GS_TITLESCREEN)
+	&& (wipestyleflags & (WSF_FADEIN|WSF_FADEOUT)) // only if wipestyleflags are actually set
+	&& !(wipestyleflags & WSF_CROSSFADE)) // and if not crossfading
 		wipestyle = WIPESTYLE_LEVEL;
 	else
 		wipestyle = WIPESTYLE_NORMAL;
diff --git a/src/g_game.c b/src/g_game.c
index 2fa70353ed..963fc00f00 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -1803,6 +1803,9 @@ void G_DoLoadLevel(boolean resetplayer)
 //
 void G_StartTitleCard(void)
 {
+	wipestyleflags |= WSF_FADEIN;
+	wipestyleflags &= ~WSF_FADEOUT;
+
 	// The title card has been disabled for this map.
 	// Oh well.
 	if (mapheaderinfo[gamemap-1]->levelflags & LF_NOTITLECARD)
@@ -1819,8 +1822,6 @@ void G_StartTitleCard(void)
 
 	// start the title card
 	WipeStageTitle = (!titlemapinaction);
-	wipestyleflags |= WSF_FADEIN;
-	wipestyleflags &= ~WSF_FADEOUT;
 }
 
 //
@@ -2855,6 +2856,7 @@ void G_DoReborn(INT32 playernum)
 
 			// Do a wipe
 			wipegamestate = -1;
+			wipestyleflags = WSF_CROSSFADE;
 
 			if (camera.chase)
 				P_ResetCamera(&players[displayplayer], &camera);
diff --git a/src/p_setup.c b/src/p_setup.c
index e87a088d8c..b729177aab 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -2725,7 +2725,7 @@ boolean P_SetupLevel(boolean skipprecip)
 			S_FadeOutStopMusic(MUSICRATE/4); //FixedMul(FixedDiv(F_GetWipeLength(wipedefs[wipe_speclevel_towhite])*NEWTICRATERATIO, NEWTICRATE), MUSICRATE)
 
 		F_WipeStartScreen();
-		wipestyleflags |= WSF_FADEOUT|WSF_TOWHITE;
+		wipestyleflags |= (WSF_FADEOUT|WSF_TOWHITE);
 
 #ifdef HWRENDER
 		// uh..........
-- 
GitLab