diff --git a/src/f_finale.c b/src/f_finale.c
index 2c45aecc984997f7d329e0bff3371b6c9d93d71c..01d06879ab2bdd003331e2564da3155d6e9b1d41 100644
--- a/src/f_finale.c
+++ b/src/f_finale.c
@@ -515,9 +515,9 @@ void F_StartIntro(void)
 }
 
 //
-// F_IntroDrawScene
+// F_IntroDrawer
 //
-static void F_IntroDrawScene(void)
+void F_IntroDrawer(void)
 {
 	boolean highres = true;
 	INT32 cx = 8, cy = 128;
@@ -623,24 +623,22 @@ static void F_IntroDrawScene(void)
 		if (intro_curtime > 1 && intro_curtime < (INT32)introscenetime[intro_scenenum])
 		{
 			V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31);
+
 			if (intro_curtime < TICRATE-5) // Make the text shine!
+			{
 				sprintf(stjrintro, "STJRI%03u", intro_curtime-1);
+			}
 			else if (intro_curtime >= TICRATE-6 && intro_curtime < 2*TICRATE-20) // Pause on black screen for just a second
+			{
 				return;
+			}
 			else if (intro_curtime == 2*TICRATE-19)
 			{
 				// Fade in the text
 				// The text fade out is automatically handled when switching to a new intro scene
 				strncpy(stjrintro, "STJRI029", 9);
-				S_ChangeMusicInternal("_stjr", false);
-
 				background = W_CachePatchName(stjrintro, PU_PATCH_LOWPRIORITY);
-				wipestyleflags = WSF_FADEIN;
-				F_WipeStartScreen();
-				F_TryColormapFade(31);
 				V_DrawSmallScaledPatch(bgxoffs, 84, 0, background);
-				F_WipeEndScreen();
-				F_RunWipe(0,true);
 			}
 
 			if (!WipeInAction) // Draw the patch if not in a wipe
@@ -839,17 +837,27 @@ static void F_IntroDrawScene(void)
 		V_DrawRightAlignedString(BASEVIDWIDTH-4, BASEVIDHEIGHT-12, V_ALLOWLOWERCASE|(trans<<V_ALPHASHIFT), "\x86""Press ""\x82""ENTER""\x86"" to skip...");
 	}
 
-	if (animtimer)
-		animtimer--;
-
 	V_DrawString(cx, cy, V_ALLOWLOWERCASE, cutscene_disptext);
 }
 
 //
-// F_IntroDrawer
+// F_IntroTicker
 //
-void F_IntroDrawer(void)
+void F_IntroTicker(void)
 {
+	// advance animation
+	finalecount++;
+
+	timetonext--;
+
+	F_WriteText();
+
+	// check for skipping
+	if (keypressed)
+		keypressed = false;
+
+	wipestyleflags = WSF_CROSSFADE;
+
 	if (timetonext <= 0)
 	{
 		if (intro_scenenum == 0)
@@ -859,6 +867,9 @@ void F_IntroDrawer(void)
 				wipestyleflags = WSF_FADEOUT;
 				F_WipeStartScreen();
 				F_TryColormapFade(31);
+
+				F_IntroDrawer();
+
 				F_WipeEndScreen();
 				F_RunWipe(99,true);
 			}
@@ -872,6 +883,9 @@ void F_IntroDrawer(void)
 				wipestyleflags = (WSF_FADEOUT|WSF_TOWHITE);
 				F_WipeStartScreen();
 				F_TryColormapFade(0);
+
+				F_IntroDrawer();
+
 				F_WipeEndScreen();
 				F_RunWipe(99,true);
 			}
@@ -883,6 +897,9 @@ void F_IntroDrawer(void)
 				wipestyleflags = WSF_FADEOUT;
 				F_WipeStartScreen();
 				F_TryColormapFade(31);
+
+				F_IntroDrawer();
+
 				F_WipeEndScreen();
 				F_RunWipe(99,true);
 			}
@@ -918,12 +935,12 @@ void F_IntroDrawer(void)
 			wipegamestate = GS_INTRO;
 			return;
 		}
+
 		F_NewCutscene(introtext[++intro_scenenum]);
 		timetonext = introscenetime[intro_scenenum];
 
 		F_WipeStartScreen();
 		wipegamestate = -1;
-		wipestyleflags = WSF_CROSSFADE;
 		animtimer = stoptimer = 0;
 	}
 
@@ -931,78 +948,36 @@ void F_IntroDrawer(void)
 
 	if (rendermode != render_none)
 	{
-		if (intro_scenenum == 5 && intro_curtime == 5*TICRATE)
+		if (intro_scenenum == 0 && intro_curtime == 2*TICRATE-19)
 		{
-			patch_t *radar = W_CachePatchName("RADAR", PU_PATCH_LOWPRIORITY);
+			S_ChangeMusicInternal("_stjr", false);
 
+			wipestyleflags = WSF_FADEIN;
 			F_WipeStartScreen();
-			F_WipeColorFill(31);
-			V_DrawSmallScaledPatch(0, 0, 0, radar);
-			W_UnlockCachedPatch(radar);
-			V_DrawString(8, 128, V_ALLOWLOWERCASE, cutscene_disptext);
+			F_TryColormapFade(31);
 
-			F_WipeEndScreen();
-			F_RunWipe(99,true);
-		}
-		else if (intro_scenenum == 7 && intro_curtime == 6*TICRATE) // Force a wipe here
-		{
-			patch_t *grass = W_CachePatchName("SGRASS2", PU_PATCH_LOWPRIORITY);
-
-			F_WipeStartScreen();
-			F_WipeColorFill(31);
-			V_DrawSmallScaledPatch(0, 0, 0, grass);
-			W_UnlockCachedPatch(grass);
-			V_DrawString(8, 128, V_ALLOWLOWERCASE, cutscene_disptext);
+			F_IntroDrawer();
 
 			F_WipeEndScreen();
 			F_RunWipe(99,true);
 		}
-		/*else if (intro_scenenum == 11 && intro_curtime == 7*TICRATE)
+		else if ((intro_scenenum == 5 && intro_curtime == 5*TICRATE)
+			|| (intro_scenenum == 7 && intro_curtime == 6*TICRATE)
+			//|| (intro_scenenum == 11 && intro_curtime == 7*TICRATE)
+			|| (intro_scenenum == 15 && intro_curtime == 7*TICRATE))
 		{
-			patch_t *confront = W_CachePatchName("CONFRONT", PU_PATCH_LOWPRIORITY);
-
 			F_WipeStartScreen();
 			F_WipeColorFill(31);
-			V_DrawSmallScaledPatch(0, 0, 0, confront);
-			W_UnlockCachedPatch(confront);
-			V_DrawString(8, 128, V_ALLOWLOWERCASE, cutscene_disptext);
 
-			F_WipeEndScreen();
-			F_RunWipe(99,true);
-		}*/
-		if (intro_scenenum == 15 && intro_curtime == 7*TICRATE)
-		{
-			patch_t *sdo = W_CachePatchName("SONICDO2", PU_PATCH_LOWPRIORITY);
-
-			F_WipeStartScreen();
-			F_WipeColorFill(31);
-			V_DrawSmallScaledPatch(0, 0, 0, sdo);
-			W_UnlockCachedPatch(sdo);
-			V_DrawString(224, 8, V_ALLOWLOWERCASE, cutscene_disptext);
+			F_IntroDrawer();
 
 			F_WipeEndScreen();
 			F_RunWipe(99,true);
 		}
 	}
 
-	F_IntroDrawScene();
-}
-
-//
-// F_IntroTicker
-//
-void F_IntroTicker(void)
-{
-	// advance animation
-	finalecount++;
-
-	timetonext--;
-
-	F_WriteText();
-
-	// check for skipping
-	if (keypressed)
-		keypressed = false;
+	if (animtimer)
+		animtimer--;
 }
 
 //