Various changes between 2018-11-16 and 2018-11-20
This commit is contained in:
parent
205d1401f6
commit
ca7caf3dd5
5 changed files with 110 additions and 27 deletions
|
|
@ -456,19 +456,20 @@ static bool D_Display(void)
|
||||||
if (gamestate == GS_TITLESCREEN && wipegamestate != GS_INTRO)
|
if (gamestate == GS_TITLESCREEN && wipegamestate != GS_INTRO)
|
||||||
wipedefindex = wipe_timeattack_toblack;
|
wipedefindex = wipe_timeattack_toblack;
|
||||||
|
|
||||||
if (wipetypepre < 0)
|
if (wipetypepre < 0 || !F_WipeExists(wipetypepre))
|
||||||
wipetypepre = wipedefs[wipedefindex];
|
wipetypepre = wipedefs[wipedefindex];
|
||||||
|
|
||||||
if (rendermode != render_none)
|
if (rendermode != render_none)
|
||||||
{
|
{
|
||||||
// Fade to black first
|
// Fade to black first
|
||||||
if (!(gamestate == GS_LEVEL || (gamestate == GS_TITLESCREEN && titlemapinaction)) // fades to black on its own timing, always
|
if ((wipegamestate == FORCEWIPE ||
|
||||||
|
!(gamestate == GS_LEVEL || (gamestate == GS_TITLESCREEN && titlemapinaction))) // fades to black on its own timing, always
|
||||||
&& wipetypepre != UINT8_MAX)
|
&& wipetypepre != UINT8_MAX)
|
||||||
{
|
{
|
||||||
F_WipeStartScreen();
|
F_WipeStartScreen();
|
||||||
F_WipeColorFill(31);
|
F_WipeColorFill(31);
|
||||||
F_WipeEndScreen();
|
F_WipeEndScreen();
|
||||||
F_RunWipe(wipetypepre, gamestate != GS_TIMEATTACK);
|
F_RunWipe(wipetypepre, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
|
||||||
ranwipe = true;
|
ranwipe = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -482,7 +483,7 @@ static bool D_Display(void)
|
||||||
}
|
}
|
||||||
else //dedicated servers
|
else //dedicated servers
|
||||||
{
|
{
|
||||||
F_RunWipe(wipedefs[wipedefindex], gamestate != GS_TIMEATTACK);
|
F_RunWipe(wipedefs[wipedefindex], gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
|
||||||
ranwipe = true;
|
ranwipe = true;
|
||||||
wipegamestate = gamestate;
|
wipegamestate = gamestate;
|
||||||
}
|
}
|
||||||
|
|
@ -670,14 +671,14 @@ static bool D_Display(void)
|
||||||
// and input during wipe tends to mess things up
|
// and input during wipe tends to mess things up
|
||||||
wipedefindex += WIPEFINALSHIFT;
|
wipedefindex += WIPEFINALSHIFT;
|
||||||
|
|
||||||
if (wipetypepost < 0)
|
if (wipetypepost < 0 || !F_WipeExists(wipetypepost))
|
||||||
wipetypepost = wipedefs[wipedefindex];
|
wipetypepost = wipedefs[wipedefindex];
|
||||||
|
|
||||||
if (rendermode != render_none)
|
if (rendermode != render_none)
|
||||||
{
|
{
|
||||||
F_WipeEndScreen();
|
F_WipeEndScreen();
|
||||||
|
|
||||||
F_RunWipe(wipedefs[wipedefindex], gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
|
F_RunWipe(wipetypepost, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
|
||||||
ranwipe = true;
|
ranwipe = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,9 @@ extern "C" {
|
||||||
//
|
//
|
||||||
// FINALE
|
// FINALE
|
||||||
//
|
//
|
||||||
|
// HACK for menu fading while titlemapinaction; skips the level check
|
||||||
|
#define FORCEWIPE -2
|
||||||
|
|
||||||
|
|
||||||
// Called by main loop.
|
// Called by main loop.
|
||||||
boolean F_IntroResponder(event_t *ev);
|
boolean F_IntroResponder(event_t *ev);
|
||||||
|
|
@ -153,6 +156,8 @@ extern INT32 lastwipetic;
|
||||||
void F_WipeStartScreen(void);
|
void F_WipeStartScreen(void);
|
||||||
void F_WipeEndScreen(void);
|
void F_WipeEndScreen(void);
|
||||||
void F_RunWipe(UINT8 wipetype, boolean drawMenu);
|
void F_RunWipe(UINT8 wipetype, boolean drawMenu);
|
||||||
|
tic_t F_GetWipeLength(UINT8 wipetype);
|
||||||
|
boolean F_WipeExists(UINT8 wipetype);
|
||||||
void F_WipeStageTitle(void);
|
void F_WipeStageTitle(void);
|
||||||
#define F_WipeColorFill(c) V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, c)
|
#define F_WipeColorFill(c) V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, c)
|
||||||
|
|
||||||
|
|
|
||||||
49
src/f_wipe.c
49
src/f_wipe.c
|
|
@ -423,3 +423,52 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu)
|
||||||
WipeInAction = false;
|
WipeInAction = false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns tic length of wipe
|
||||||
|
* One lump equals one tic
|
||||||
|
*/
|
||||||
|
tic_t F_GetWipeLength(UINT8 wipetype)
|
||||||
|
{
|
||||||
|
#ifdef NOWIPE
|
||||||
|
(void)wipetype;
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
|
static char lumpname[10] = "FADEmmss";
|
||||||
|
lumpnum_t lumpnum;
|
||||||
|
UINT8 wipeframe;
|
||||||
|
|
||||||
|
if (wipetype > 99)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (wipeframe = 0; wipeframe < 100; wipeframe++)
|
||||||
|
{
|
||||||
|
sprintf(&lumpname[4], "%.2hu%.2hu", (UINT16)wipetype, (UINT16)wipeframe);
|
||||||
|
|
||||||
|
lumpnum = W_CheckNumForName(lumpname);
|
||||||
|
if (lumpnum == LUMPERROR)
|
||||||
|
return --wipeframe;
|
||||||
|
}
|
||||||
|
return --wipeframe;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Does the specified wipe exist?
|
||||||
|
*/
|
||||||
|
boolean F_WipeExists(UINT8 wipetype)
|
||||||
|
{
|
||||||
|
#ifdef NOWIPE
|
||||||
|
(void)wipetype;
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
|
static char lumpname[10] = "FADEmm00";
|
||||||
|
lumpnum_t lumpnum;
|
||||||
|
|
||||||
|
if (wipetype > 99)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
sprintf(&lumpname[4], "%.2hu00", (UINT16)wipetype);
|
||||||
|
|
||||||
|
lumpnum = W_CheckNumForName(lumpname);
|
||||||
|
return !(lumpnum == LUMPERROR);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
|
||||||
36
src/m_menu.c
36
src/m_menu.c
|
|
@ -1248,7 +1248,7 @@ static void M_HandleMenuPresState(menutype_t newMenuType)
|
||||||
// because 0 is a valid index and -1 means default
|
// because 0 is a valid index and -1 means default
|
||||||
wipetypepre = ((exitwipe && enterlevel <= exitlevel) || anceslevel < 0) ? exitwipe : INT16_MAX;
|
wipetypepre = ((exitwipe && enterlevel <= exitlevel) || anceslevel < 0) ? exitwipe : INT16_MAX;
|
||||||
wipetypepost = ((enterwipe && enterlevel >= exitlevel) || anceslevel < 0) ? enterwipe : INT16_MAX;
|
wipetypepost = ((enterwipe && enterlevel >= exitlevel) || anceslevel < 0) ? enterwipe : INT16_MAX;
|
||||||
wipegamestate = -1; // G: FORCEWIPE
|
wipegamestate = FORCEWIPE;
|
||||||
|
|
||||||
// If just one of the above is a force not-wipe,
|
// If just one of the above is a force not-wipe,
|
||||||
// mirror the other wipe.
|
// mirror the other wipe.
|
||||||
|
|
@ -1878,9 +1878,22 @@ void M_Drawer(void)
|
||||||
{
|
{
|
||||||
// now that's more readable with a faded background (yeah like Quake...)
|
// now that's more readable with a faded background (yeah like Quake...)
|
||||||
if (gamestate == GS_TIMEATTACK)
|
if (gamestate == GS_TIMEATTACK)
|
||||||
V_DrawPatchFill(W_CachePatchName("SRB2BACK", PU_CACHE));
|
{
|
||||||
else if (!WipeInAction && menustack[0] != MN_PLAYBACK) // Replay playback has its own background
|
// TODO: M_DrawScrollingBackground("SRB2BACK")
|
||||||
V_DrawFadeScreen(0xFF00, 16);
|
// TODO: M_DrawFadeScreen(0)
|
||||||
|
//V_DrawPatchFill(W_CachePatchName("SRB2BACK", PU_CACHE));
|
||||||
|
//M_SetMenuCurBackground("SRB2BACK");
|
||||||
|
if (curbgcolor >= 0)
|
||||||
|
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, curbgcolor);
|
||||||
|
else if (!curbghide || !titlemapinaction)
|
||||||
|
F_SkyScroll(curbgxspeed, curbgyspeed, curbgname);
|
||||||
|
if (curfadevalue)
|
||||||
|
V_DrawFadeScreen(0xFF00, curfadevalue);
|
||||||
|
}
|
||||||
|
else if (!WipeInAction && menustack[0] != MN_PLAYBACK && (curfadevalue || (gamestate != GS_TITLESCREEN && gamestate != GS_TIMEATTACK))) // Replay playback has its own background
|
||||||
|
// TODO: M_DrawFadeScreen(16)
|
||||||
|
// nope!
|
||||||
|
V_DrawFadeScreen(0xFF00, (gamestate != GS_TITLESCREEN && gamestate != GS_TIMEATTACK) ? 16 : curfadevalue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (messagebox.active)
|
if (messagebox.active)
|
||||||
|
|
@ -2033,7 +2046,10 @@ void M_ClearMenus(boolean callexitmenufunc)
|
||||||
|
|
||||||
// D_StartTitle does its own wipe, since GS_TIMEATTACK is now a complete gamestate.
|
// D_StartTitle does its own wipe, since GS_TIMEATTACK is now a complete gamestate.
|
||||||
if (gamestate == GS_TIMEATTACK)
|
if (gamestate == GS_TIMEATTACK)
|
||||||
|
{
|
||||||
|
wipetypepre = menudefs[M_GetYoungestChildMenu()].exitwipe;
|
||||||
D_StartTitle();
|
D_StartTitle();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
@ -3896,13 +3912,13 @@ INT32 MR_ReplayHut(INT32 choice)
|
||||||
PrepReplayList();
|
PrepReplayList();
|
||||||
|
|
||||||
M_ClearMenus(true);
|
M_ClearMenus(true);
|
||||||
G_SetGamestate(GS_TIMEATTACK);
|
G_SetGamestate(GS_TIMEATTACK); // do this before M_SetupNextMenu so that menu meta state knows that we're switching
|
||||||
titlemapinaction = TITLEMAP_OFF; // Nope don't give us HOMs please
|
titlemapinaction = TITLEMAP_OFF; // Nope don't give us HOMs please
|
||||||
|
|
||||||
demo.rewinding = false;
|
demo.rewinding = false;
|
||||||
CL_ClearRewinds();
|
CL_ClearRewinds();
|
||||||
|
|
||||||
S_ChangeMusicInternal("replst", true);
|
M_ChangeMenuMusic("replst", true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4654,7 +4670,7 @@ INT32 MR_PlaybackQuit(INT32 choice)
|
||||||
else if (modeattacking)
|
else if (modeattacking)
|
||||||
{
|
{
|
||||||
MR_ModeAttackEndGame(0);
|
MR_ModeAttackEndGame(0);
|
||||||
S_ChangeMusicInternal("racent", true);
|
M_ChangeMenuMusic("racent", true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -5250,7 +5266,7 @@ INT32 MR_HandleMusicTest(INT32 choice)
|
||||||
S_StopMusic();
|
S_StopMusic();
|
||||||
st_time = 0;
|
st_time = 0;
|
||||||
curplaying = soundtestdefs[st_sel];
|
curplaying = soundtestdefs[st_sel];
|
||||||
S_ChangeMusicInternal(&curplaying->name[0][0], true);
|
S_ChangeMusicInternal(&curplaying->name[0][0], true); // TODO: M_ChangeMenuMusic?
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
@ -5808,7 +5824,7 @@ INT32 MR_TimeAttack(INT32 arg)
|
||||||
M_PatchSkinNameTable();
|
M_PatchSkinNameTable();
|
||||||
M_ClearMenus(true);
|
M_ClearMenus(true);
|
||||||
|
|
||||||
G_SetGamestate(GS_TIMEATTACK);
|
G_SetGamestate(GS_TIMEATTACK); // do this before M_SetupNextMenu so that menu meta state knows that we're switching
|
||||||
titlemapinaction = TITLEMAP_OFF; // Nope don't give us HOMs please
|
titlemapinaction = TITLEMAP_OFF; // Nope don't give us HOMs please
|
||||||
|
|
||||||
if (cv_nextmap.value)
|
if (cv_nextmap.value)
|
||||||
|
|
@ -5818,7 +5834,7 @@ INT32 MR_TimeAttack(INT32 arg)
|
||||||
|
|
||||||
M_SetItemOn(MN_SP_TIMEATTACK, "START"); // "Start" is selected.
|
M_SetItemOn(MN_SP_TIMEATTACK, "START"); // "Start" is selected.
|
||||||
|
|
||||||
S_ChangeMusicInternal("racent", true);
|
M_ChangeMenuMusic("racent", true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8632,18 +8632,30 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate)
|
||||||
// But only if we didn't do the encore startup wipe
|
// But only if we didn't do the encore startup wipe
|
||||||
if (!ranspecialwipe && !demo.rewinding && !reloadinggamestate)
|
if (!ranspecialwipe && !demo.rewinding && !reloadinggamestate)
|
||||||
{
|
{
|
||||||
if(rendermode != render_none)
|
UINT16 wipe = encoremode ? wipe_level_final : wipe_level_toblack;
|
||||||
{
|
|
||||||
F_WipeStartScreen();
|
|
||||||
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, levelfadecol);
|
|
||||||
|
|
||||||
F_WipeEndScreen();
|
// for titlemap: run a specific wipe if specified
|
||||||
F_RunWipe(wipedefs[(encoremode ? wipe_level_final : wipe_level_toblack)], false);
|
// needed for exiting time attack
|
||||||
}
|
if (wipetypepre != INT16_MAX && wipetypepre >= 0 && F_WipeExists(wipetypepre))
|
||||||
else //dedicated servers
|
{
|
||||||
{
|
wipe = wipetypepre;
|
||||||
F_RunWipe(wipedefs[(encoremode ? wipe_level_final : wipe_level_toblack)], false);
|
wipetypepre = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(rendermode != render_none)
|
||||||
|
{
|
||||||
|
F_WipeStartScreen();
|
||||||
|
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, levelfadecol);
|
||||||
|
|
||||||
|
F_WipeEndScreen();
|
||||||
|
if (wipetypepre != INT16_MAX)
|
||||||
|
F_RunWipe(wipedefs[wipe], false);
|
||||||
|
}
|
||||||
|
else //dedicated servers
|
||||||
|
{
|
||||||
|
if (wipetypepre != INT16_MAX)
|
||||||
|
F_RunWipe(wipedefs[wipe], false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*if (!titlemapinaction)
|
/*if (!titlemapinaction)
|
||||||
wipegamestate = GS_LEVEL;*/
|
wipegamestate = GS_LEVEL;*/
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue