diff --git a/src/f_finale.c b/src/f_finale.c index ffbf5ee7e..66957c92c 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -45,7 +45,7 @@ // Stage of animation: // 0 = text, 1 = art screen -static INT32 finalecount; +INT32 finalecount; INT32 titlescrollxspeed = 20; INT32 titlescrollyspeed = 0; UINT8 titlemapinaction = TITLEMAP_OFF; @@ -2573,6 +2573,8 @@ void F_TitleScreenDrawer(void) { boolean hidepics; fixed_t sc = FRACUNIT / max(1, curttscale); + INT32 whitefade = 0; + UINT8 *whitecol[2] = {NULL, NULL}; if (modeattacking) return; // We likely came here from retrying. Don't do a damn thing. @@ -2658,16 +2660,40 @@ void F_TitleScreenDrawer(void) // if (finalecount <= 29) V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); + // Flash at tic 30, timed to O__TITLE percussion. Hold the flash until tic 34. + // After tic 34, fade the flash until tic 44. + else + { + if (finalecount > 29 && finalecount < 35) + V_DrawFadeScreen(0, (whitefade = 9)); + else if (finalecount > 34 && 44-finalecount > 0 && 44-finalecount < 10) + V_DrawFadeScreen(0, 44-finalecount); + if (39-finalecount > 0) + { + whitefade = (9 - (39-finalecount))<= 0) V_DrawSciencePatch(89< 34) + if (finalecount > 29) V_DrawSciencePatch(39< 29 && finalecount < 35) - V_DrawFadeScreen(0, 9); - else if (finalecount > 34 && 44-finalecount > 0 && 44-finalecount < 10) - V_DrawFadeScreen(0, 44-finalecount); - #undef CHARSTART #undef SONICSTART #undef SONICIDLE diff --git a/src/f_finale.h b/src/f_finale.h index f75f93c77..3fa7106a9 100644 --- a/src/f_finale.h +++ b/src/f_finale.h @@ -74,6 +74,7 @@ void F_StartContinue(void); void F_ContinueTicker(void); void F_ContinueDrawer(void); +extern INT32 finalecount; extern INT32 titlescrollxspeed; extern INT32 titlescrollyspeed; diff --git a/src/g_game.c b/src/g_game.c index db80614bf..63caaa15c 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1717,7 +1717,7 @@ boolean G_Responder(event_t *ev) if (gameaction == ga_nothing && !singledemo && ((demoplayback && !modeattacking && !titledemo) || gamestate == GS_TITLESCREEN)) { - if (ev->type == ev_keydown && ev->data1 != 301) + if (ev->type == ev_keydown && ev->data1 != 301 && !(gamestate == GS_TITLESCREEN && finalecount < TICRATE)) { M_StartControlPanel(); return true; diff --git a/src/m_menu.c b/src/m_menu.c index 6a0a31bc1..e772c9421 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2985,6 +2985,9 @@ boolean M_Responder(event_t *ev) || gamestate == GS_CREDITS || gamestate == GS_EVALUATION || gamestate == GS_GAMEEND) return false; + if (gamestate == GS_TITLESCREEN && finalecount < TICRATE) + return false; + if (noFurtherInput) { // Ignore input after enter/escape/other buttons