From 83b6c309520c384dfa7970a15995cf45c0d51d11 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Mon, 27 Feb 2023 21:45:59 -0600 Subject: [PATCH] hwr2: add wipe mode to F_RunWipe, fix all wipes --- src/d_main.c | 6 +++--- src/f_finale.c | 8 ++++---- src/f_finale.h | 11 ++++++----- src/f_wipe.c | 21 ++++++++++++--------- src/hwr2/pass_postprocess.cpp | 9 +++++---- src/k_menudraw.c | 2 +- src/k_menufunc.c | 4 ++-- src/menus/play-local-race-time-attack.c | 2 +- src/menus/transient/cup-select.c | 2 +- src/menus/transient/level-select.c | 2 +- src/p_setup.c | 14 ++++++++------ 11 files changed, 44 insertions(+), 37 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 007071e88..a543ea333 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -343,7 +343,7 @@ static void D_Display(void) F_WipeStartScreen(); F_WipeColorFill(31); F_WipeEndScreen(); - F_RunWipe(wipetypepre, gamestate != GS_MENU, "FADEMAP0", false, false); + F_RunWipe(wipedefindex, wipetypepre, gamestate != GS_MENU, "FADEMAP0", false, false); } if (gamestate != GS_LEVEL && rendermode != render_none) @@ -356,7 +356,7 @@ static void D_Display(void) } else //dedicated servers { - F_RunWipe(wipedefs[wipedefindex], gamestate != GS_MENU, "FADEMAP0", false, false); + F_RunWipe(wipedefindex, wipedefs[wipedefindex], gamestate != GS_MENU, "FADEMAP0", false, false); wipegamestate = gamestate; } @@ -633,7 +633,7 @@ static void D_Display(void) { F_WipeEndScreen(); - F_RunWipe(wipedefs[wipedefindex], gamestate != GS_MENU && gamestate != GS_TITLESCREEN, "FADEMAP0", true, false); + F_RunWipe(wipedefindex, wipedefs[wipedefindex], gamestate != GS_MENU && gamestate != GS_TITLESCREEN, "FADEMAP0", true, false); } // reset counters so timedemo doesn't count the wipe duration diff --git a/src/f_finale.c b/src/f_finale.c index 49b5f31ce..acd923765 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -313,7 +313,7 @@ void F_StartIntro(void) F_WipeStartScreen(); V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); F_WipeEndScreen(); - F_RunWipe(wipedefs[wipe_intro_toblack], false, "FADEMAP0", false, false); + F_RunWipe(wipe_intro_toblack, wipedefs[wipe_intro_toblack], false, "FADEMAP0", false, false); } S_StopMusic(); @@ -409,7 +409,7 @@ void F_IntroTicker(void) F_WipeStartScreen(); F_WipeColorFill(31); F_WipeEndScreen(); - F_RunWipe(99, true, "FADEMAP0", false, false); + F_RunWipe(wipe_intro_toblack, 99, true, "FADEMAP0", false, false); } // Stay on black for a bit. =) @@ -2437,7 +2437,7 @@ void F_CutsceneDrawer(void) V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, cutscenes[cutnum]->scene[scenenum].fadecolor); F_WipeEndScreen(); - F_RunWipe(cutscenes[cutnum]->scene[scenenum].fadeinid, true, NULL, false, false); + F_RunWipe(wipe_intro_toblack, cutscenes[cutnum]->scene[scenenum].fadeinid, true, NULL, false, false); F_WipeStartScreen(); } @@ -2457,7 +2457,7 @@ void F_CutsceneDrawer(void) if (dofadenow && rendermode != render_none) { F_WipeEndScreen(); - F_RunWipe(cutscenes[cutnum]->scene[scenenum].fadeoutid, true, NULL, false, false); + F_RunWipe(wipe_intro_toblack, cutscenes[cutnum]->scene[scenenum].fadeoutid, true, NULL, false, false); } V_DrawString(textxpos, textypos, V_ALLOWLOWERCASE, cutscene_disptext); diff --git a/src/f_finale.h b/src/f_finale.h index 970bf0619..c5972f9d1 100644 --- a/src/f_finale.h +++ b/src/f_finale.h @@ -140,6 +140,7 @@ extern UINT16 curtttics; // extern boolean WipeInAction; +extern UINT8 g_wipemode; extern UINT8 g_wipetype; extern UINT8 g_wipeframe; extern boolean g_wipereverse; @@ -155,19 +156,19 @@ extern INT32 lastwipetic; void F_WipeStartScreen(void); void F_WipeEndScreen(void); -void F_RunWipe(UINT8 wipetype, boolean drawMenu, const char *colormap, boolean reverse, boolean encorewiggle); +void F_RunWipe(UINT8 wipemode, UINT8 wipetype, boolean drawMenu, const char *colormap, boolean reverse, boolean encorewiggle); void F_WipeStageTitle(void); #define F_WipeColorFill(c) V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, c) tic_t F_GetWipeLength(UINT8 wipetype); boolean F_WipeExists(UINT8 wipetype); /// @brief true if the wipetype is to-black -boolean F_WipeIsToBlack(UINT8 wipetype); +boolean F_WipeIsToBlack(UINT8 wipemode); /// @brief true if the wipetype is to-white -boolean F_WipeIsToWhite(UINT8 wipetype); +boolean F_WipeIsToWhite(UINT8 wipemode); /// @brief true if the wipetype is to-invert -boolean F_WipeIsToInvert(UINT8 wipetype); +boolean F_WipeIsToInvert(UINT8 wipemode); /// @brief true if the wipetype is modulated from the previous frame -boolean F_WipeIsCrossfade(UINT8 wipetype); +boolean F_WipeIsCrossfade(UINT8 wipemode); enum { diff --git a/src/f_wipe.c b/src/f_wipe.c index 2f0350cb7..2068ac6d5 100644 --- a/src/f_wipe.c +++ b/src/f_wipe.c @@ -222,6 +222,7 @@ static boolean g_wipedef_crossfade[NUMWIPEDEFS] = { //-------------------------------------------------------------------------- boolean WipeInAction = false; +UINT8 g_wipemode = 0; UINT8 g_wipetype = 0; UINT8 g_wipeframe = 0; boolean g_wipereverse = false; @@ -425,9 +426,10 @@ void F_WipeStageTitle(void) /** After setting up the screens you want to wipe, * calling this will do a 'typical' wipe. */ -void F_RunWipe(UINT8 wipetype, boolean drawMenu, const char *colormap, boolean reverse, boolean encorewiggle) +void F_RunWipe(UINT8 wipemode, UINT8 wipetype, boolean drawMenu, const char *colormap, boolean reverse, boolean encorewiggle) { #ifdef NOWIPE + (void)wipemode; (void)wipetype; (void)drawMenu; (void)colormap; @@ -489,6 +491,7 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu, const char *colormap, boolean r if (rendermode != render_none) //this allows F_RunWipe to be called in dedicated servers { // F_DoWipe(fmask, fcolor, reverse); + g_wipemode = wipemode; g_wipetype = wipetype; g_wipeframe = wipeframe - 1; g_wipereverse = reverse; @@ -593,23 +596,23 @@ boolean F_WipeExists(UINT8 wipetype) #endif } -boolean F_WipeIsToBlack(UINT8 wipetype) +boolean F_WipeIsToBlack(UINT8 wipemode) { - return g_wipedef_toblack[wipetype]; + return g_wipedef_toblack[wipemode]; } -boolean F_WipeIsToWhite(UINT8 wipetype) +boolean F_WipeIsToWhite(UINT8 wipemode) { - return g_wipedef_towhite[wipetype]; + return g_wipedef_towhite[wipemode]; } -boolean F_WipeIsToInvert(UINT8 wipetype) +boolean F_WipeIsToInvert(UINT8 wipemode) { - return g_wipedef_toinvert[wipetype]; + return g_wipedef_toinvert[wipemode]; } -boolean F_WipeIsCrossfade(UINT8 wipetype) +boolean F_WipeIsCrossfade(UINT8 wipemode) { - return g_wipedef_crossfade[wipetype]; + return g_wipedef_crossfade[wipemode]; } diff --git a/src/hwr2/pass_postprocess.cpp b/src/hwr2/pass_postprocess.cpp index 333338159..240ef1c47 100644 --- a/src/hwr2/pass_postprocess.cpp +++ b/src/hwr2/pass_postprocess.cpp @@ -86,24 +86,25 @@ void PostprocessWipePass::prepass(Rhi& rhi) upload_ibo_ = true; } + uint32_t wipe_mode = g_wipemode; uint32_t wipe_type = g_wipetype; uint32_t wipe_frame = g_wipeframe; bool wipe_reverse = g_wipereverse; wipe_color_mode_ = 0; // TODO 0 = modulate, 1 = invert, 2 = MD to black, 3 = MD to white - if (F_WipeIsToBlack(wipe_type)) + if (F_WipeIsToBlack(wipe_mode)) { wipe_color_mode_ = 2; } - else if (F_WipeIsToWhite(wipe_type)) + else if (F_WipeIsToWhite(wipe_mode)) { wipe_color_mode_ = 3; } - else if (F_WipeIsToInvert(wipe_type)) + else if (F_WipeIsToInvert(wipe_mode)) { wipe_color_mode_ = 1; } - else if (F_WipeIsCrossfade(wipe_type)) + else if (F_WipeIsCrossfade(wipe_mode)) { wipe_color_mode_ = 0; } diff --git a/src/k_menudraw.c b/src/k_menudraw.c index a78423721..6207f0e24 100644 --- a/src/k_menudraw.c +++ b/src/k_menudraw.c @@ -553,7 +553,7 @@ void M_Drawer(void) if (menuwipe) { F_WipeEndScreen(); - F_RunWipe(wipedefs[wipe_menu_final], false, "FADEMAP0", true, false); + F_RunWipe(wipe_menu_final, wipedefs[wipe_menu_final], false, "FADEMAP0", true, false); menuwipe = false; } diff --git a/src/k_menufunc.c b/src/k_menufunc.c index 05d282e7f..8898bee71 100644 --- a/src/k_menufunc.c +++ b/src/k_menufunc.c @@ -601,7 +601,7 @@ void M_SetupNextMenu(menu_t *menudef, boolean notransition) F_WipeStartScreen(); V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); F_WipeEndScreen(); - F_RunWipe(wipedefs[wipe_menu_toblack], false, "FADEMAP0", false, false); + F_RunWipe(wipe_menu_toblack, wipedefs[wipe_menu_toblack], false, "FADEMAP0", false, false); } } @@ -1034,7 +1034,7 @@ void M_Ticker(void) F_WipeStartScreen(); V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); F_WipeEndScreen(); - F_RunWipe(wipedefs[wipe_menu_toblack], false, "FADEMAP0", false, false); + F_RunWipe(wipe_menu_toblack, wipedefs[wipe_menu_toblack], false, "FADEMAP0", false, false); } M_SetupNextMenu(menutransition.endmenu, true); diff --git a/src/menus/play-local-race-time-attack.c b/src/menus/play-local-race-time-attack.c index 054681792..d41f29dca 100644 --- a/src/menus/play-local-race-time-attack.c +++ b/src/menus/play-local-race-time-attack.c @@ -446,7 +446,7 @@ void M_StartTimeAttack(INT32 choice) F_WipeStartScreen(); V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); F_WipeEndScreen(); - F_RunWipe(wipedefs[wipe_level_toblack], false, "FADEMAP0", false, false); + F_RunWipe(wipe_level_toblack, wipedefs[wipe_level_toblack], false, "FADEMAP0", false, false); SV_StartSinglePlayerServer(levellist.newgametype, false); diff --git a/src/menus/transient/cup-select.c b/src/menus/transient/cup-select.c index 6484d45f5..23a85e4e0 100644 --- a/src/menus/transient/cup-select.c +++ b/src/menus/transient/cup-select.c @@ -112,7 +112,7 @@ void M_CupSelectHandler(INT32 choice) F_WipeStartScreen(); V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); F_WipeEndScreen(); - F_RunWipe(wipedefs[wipe_level_toblack], false, "FADEMAP0", false, false); + F_RunWipe(wipe_level_toblack, wipedefs[wipe_level_toblack], false, "FADEMAP0", false, false); memset(&grandprixinfo, 0, sizeof(struct grandprixinfo)); diff --git a/src/menus/transient/level-select.c b/src/menus/transient/level-select.c index 55cfa3e80..461473bd9 100644 --- a/src/menus/transient/level-select.c +++ b/src/menus/transient/level-select.c @@ -484,7 +484,7 @@ void M_LevelSelected(INT16 add) F_WipeStartScreen(); V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); F_WipeEndScreen(); - F_RunWipe(wipedefs[wipe_level_toblack], false, "FADEMAP0", false, false); + F_RunWipe(wipe_level_toblack, wipedefs[wipe_level_toblack], false, "FADEMAP0", false, false); SV_StartSinglePlayerServer(levellist.newgametype, levellist.netgame); diff --git a/src/p_setup.c b/src/p_setup.c index 6ae609536..86a57f2bb 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -7555,7 +7555,7 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) F_WipeEndScreen(); S_StartSound(NULL, sfx_ruby1); - F_RunWipe(wipedefs[wipe_encore_toinvert], false, NULL, false, false); + F_RunWipe(wipe_encore_toinvert, wipedefs[wipe_encore_toinvert], false, NULL, false, false); // Hold on invert for extra effect. // (This define might be useful for other areas of code? Not sure) @@ -7584,7 +7584,7 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 0); F_WipeEndScreen(); - F_RunWipe(wipedefs[wipe_encore_towhite], false, "FADEMAP1", false, true); // wiggle the screen during this! + F_RunWipe(wipe_encore_towhite, wipedefs[wipe_encore_towhite], false, "FADEMAP1", false, true); // wiggle the screen during this! // THEN fade to a black screen. F_WipeStartScreen(); @@ -7592,7 +7592,7 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); F_WipeEndScreen(); - F_RunWipe(wipedefs[wipe_level_toblack], false, "FADEMAP0", false, false); + F_RunWipe(wipe_level_toblack, wipedefs[wipe_level_toblack], false, "FADEMAP0", false, false); // Wait a bit longer. WAIT((3*TICRATE)/4); @@ -7600,8 +7600,8 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) else { // dedicated servers can call this now, to wait the appropriate amount of time for clients to wipe - F_RunWipe(wipedefs[wipe_encore_towhite], false, "FADEMAP1", false, true); - F_RunWipe(wipedefs[wipe_level_toblack], false, "FADEMAP0", false, false); + F_RunWipe(wipe_encore_towhite, wipedefs[wipe_encore_towhite], false, "FADEMAP1", false, true); + F_RunWipe(wipe_level_toblack, wipedefs[wipe_level_toblack], false, "FADEMAP0", false, false); } } @@ -7625,6 +7625,7 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) // But only if we didn't do the encore startup wipe if (!demo.rewinding && !reloadinggamestate) { + int wipetype = wipe_level_toblack; // Fade out music here. Deduct 2 tics so the fade volume actually reaches 0. // But don't halt the music! S_Start will take care of that. This dodges a MIDI crash bug. @@ -7654,6 +7655,7 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) if (ranspecialwipe != 2) S_StartSound(NULL, sfx_s3kaf); levelfadecol = 0; + wipetype = wipe_encore_towhite; } else if (encoremode) { @@ -7672,7 +7674,7 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) F_WipeEndScreen(); } - F_RunWipe(wipedefs[wipe_level_toblack], false, ((levelfadecol == 0) ? "FADEMAP1" : "FADEMAP0"), false, false); + F_RunWipe(wipetype, wipedefs[wipetype], false, ((levelfadecol == 0) ? "FADEMAP1" : "FADEMAP0"), false, false); } /*if (!titlemapinaction) wipegamestate = GS_LEVEL;*/