This commit is contained in:
Jaime Passos 2019-11-18 11:39:54 -03:00
parent 8a7b3d7022
commit 6c98dde736
10 changed files with 297 additions and 128 deletions

View File

@ -435,6 +435,15 @@ static void D_Display(void)
if (rendermode != render_none) if (rendermode != render_none)
{ {
F_WipeEndScreen(); F_WipeEndScreen();
// Funny.
if (WipeStageTitle && st_overlay)
{
lt_ticker--;
lt_lasttic = lt_ticker;
ST_preLevelTitleCardLoop(0, false);
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, levelfadecol);
F_WipeStartScreen();
}
F_RunWipe(wipetypepost, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN); F_RunWipe(wipetypepost, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
} }
@ -444,7 +453,7 @@ static void D_Display(void)
framecount = 0; framecount = 0;
demostarttime = I_GetTime(); demostarttime = I_GetTime();
} }
wipetypepost = -1; wipetypepost = -1;
} }
else else

View File

@ -141,8 +141,13 @@ void F_MenuPresTicker(boolean run);
#define FORCEWIPEOFF -2 #define FORCEWIPEOFF -2
extern boolean WipeInAction; extern boolean WipeInAction;
extern boolean WipeStageTitle;
extern INT32 lastwipetic; extern INT32 lastwipetic;
// Don't know where else to place this constant
// But this file seems appropriate
#define PRELEVELTIME 24 // frames in tics
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);

View File

@ -18,6 +18,7 @@
#include "r_draw.h" // transtable #include "r_draw.h" // transtable
#include "p_pspr.h" // tr_transxxx #include "p_pspr.h" // tr_transxxx
#include "st_stuff.h"
#include "w_wad.h" #include "w_wad.h"
#include "z_zone.h" #include "z_zone.h"
@ -31,6 +32,10 @@
#include "hardware/hw_main.h" #include "hardware/hw_main.h"
#endif #endif
#ifdef HAVE_BLUA
#include "lua_hud.h"
#endif
#if NUMSCREENS < 5 #if NUMSCREENS < 5
#define NOWIPE // do not enable wipe image post processing for ARM, SH and MIPS CPUs #define NOWIPE // do not enable wipe image post processing for ARM, SH and MIPS CPUs
#endif #endif
@ -82,6 +87,7 @@ UINT8 wipedefs[NUMWIPEDEFS] = {
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
boolean WipeInAction = false; boolean WipeInAction = false;
boolean WipeStageTitle = false;
INT32 lastwipetic = 0; INT32 lastwipetic = 0;
#ifndef NOWIPE #ifndef NOWIPE
@ -366,6 +372,19 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu)
else else
#endif #endif
F_DoWipe(fmask); F_DoWipe(fmask);
// draw level title
if ((WipeStageTitle && st_overlay)
&& *mapheaderinfo[gamemap-1]->lvlttl != '\0'
#ifdef HAVE_BLUA
&& LUA_HudEnabled(hud_stagetitle)
#endif
)
{
ST_runTitleCard();
ST_drawWipeTitleCard();
}
I_OsPolling(); I_OsPolling();
I_UpdateNoBlit(); I_UpdateNoBlit();
@ -377,7 +396,9 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu)
if (moviemode) if (moviemode)
M_SaveFrame(); M_SaveFrame();
} }
WipeInAction = false; WipeInAction = false;
WipeStageTitle = false;
#endif #endif
} }

View File

@ -1992,7 +1992,7 @@ void G_Ticker(boolean run)
if (titledemo) if (titledemo)
F_TitleDemoTicker(); F_TitleDemoTicker();
P_Ticker(run); // tic the game P_Ticker(run); // tic the game
ST_Ticker(); ST_Ticker(run);
F_TextPromptTicker(); F_TextPromptTicker();
AM_Ticker(); AM_Ticker();
HU_Ticker(); HU_Ticker();

View File

@ -380,9 +380,9 @@ void HWR_DrawStretchyFixedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t
{ {
FSurfaceInfo Surf; FSurfaceInfo Surf;
Surf.FlatColor.s.red = Surf.FlatColor.s.green = Surf.FlatColor.s.blue = 0xff; Surf.FlatColor.s.red = Surf.FlatColor.s.green = Surf.FlatColor.s.blue = 0xff;
if (alphalevel == 13) Surf.FlatColor.s.alpha = softwaretranstogl_lo[cv_translucenthud.value]; if (alphalevel == 13) Surf.FlatColor.s.alpha = softwaretranstogl_lo[st_translucency];
else if (alphalevel == 14) Surf.FlatColor.s.alpha = softwaretranstogl[cv_translucenthud.value]; else if (alphalevel == 14) Surf.FlatColor.s.alpha = softwaretranstogl[st_translucency];
else if (alphalevel == 15) Surf.FlatColor.s.alpha = softwaretranstogl_hi[cv_translucenthud.value]; else if (alphalevel == 15) Surf.FlatColor.s.alpha = softwaretranstogl_hi[st_translucency];
else Surf.FlatColor.s.alpha = softwaretranstogl[10-alphalevel]; else Surf.FlatColor.s.alpha = softwaretranstogl[10-alphalevel];
flags |= PF_Modulated; flags |= PF_Modulated;
HWD.pfnDrawPolygon(&Surf, v, 4, flags); HWD.pfnDrawPolygon(&Surf, v, 4, flags);
@ -538,9 +538,9 @@ void HWR_DrawCroppedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscal
{ {
FSurfaceInfo Surf; FSurfaceInfo Surf;
Surf.FlatColor.s.red = Surf.FlatColor.s.green = Surf.FlatColor.s.blue = 0xff; Surf.FlatColor.s.red = Surf.FlatColor.s.green = Surf.FlatColor.s.blue = 0xff;
if (alphalevel == 13) Surf.FlatColor.s.alpha = softwaretranstogl_lo[cv_translucenthud.value]; if (alphalevel == 13) Surf.FlatColor.s.alpha = softwaretranstogl_lo[st_translucency];
else if (alphalevel == 14) Surf.FlatColor.s.alpha = softwaretranstogl[cv_translucenthud.value]; else if (alphalevel == 14) Surf.FlatColor.s.alpha = softwaretranstogl[st_translucency];
else if (alphalevel == 15) Surf.FlatColor.s.alpha = softwaretranstogl_hi[cv_translucenthud.value]; else if (alphalevel == 15) Surf.FlatColor.s.alpha = softwaretranstogl_hi[st_translucency];
else Surf.FlatColor.s.alpha = softwaretranstogl[10-alphalevel]; else Surf.FlatColor.s.alpha = softwaretranstogl[10-alphalevel];
flags |= PF_Modulated; flags |= PF_Modulated;
HWD.pfnDrawPolygon(&Surf, v, 4, flags); HWD.pfnDrawPolygon(&Surf, v, 4, flags);

View File

@ -910,9 +910,17 @@ static int libd_RandomChance(lua_State *L)
return 1; return 1;
} }
// 30/10/18 Lat': Get cv_translucenthud's value for HUD rendering as a normal V_xxTRANS int // 30/10/18 Lat': Get st_translucency's value for HUD rendering as a normal V_xxTRANS int
// Could as well be thrown in global vars for ease of access but I guess it makes sense for it to be a HUD fn // Could as well be thrown in global vars for ease of access but I guess it makes sense for it to be a HUD fn
static int libd_getlocaltransflag(lua_State *L) static int libd_getlocaltransflag(lua_State *L)
{
HUDONLY
lua_pushinteger(L, (10-st_translucency)*V_10TRANS);
return 1;
}
// Get cv_translucenthud's value for HUD rendering as a normal V_xxTRANS int
static int libd_getusertransflag(lua_State *L)
{ {
HUDONLY HUDONLY
lua_pushinteger(L, (10-cv_translucenthud.value)*V_10TRANS); // A bit weird that it's called "translucenthud" yet 10 is fully opaque :V lua_pushinteger(L, (10-cv_translucenthud.value)*V_10TRANS); // A bit weird that it's called "translucenthud" yet 10 is fully opaque :V
@ -954,6 +962,7 @@ static luaL_Reg lib_draw[] = {
{"dupy", libd_dupy}, {"dupy", libd_dupy},
{"renderer", libd_renderer}, {"renderer", libd_renderer},
{"localTransFlag", libd_getlocaltransflag}, {"localTransFlag", libd_getlocaltransflag},
{"userTransFlag", libd_getusertransflag},
{NULL, NULL} {NULL, NULL}
}; };

View File

@ -3227,8 +3227,10 @@ boolean P_SetupLevel(boolean skipprecip)
} }
// Stage title! // Stage title!
WipeStageTitle = (!titlemapinaction);
ST_startTitleCard();
if (rendermode != render_none if (rendermode != render_none
&& (!titlemapinaction) && WipeStageTitle
&& ranspecialwipe != 2 && ranspecialwipe != 2
&& *mapheaderinfo[gamemap-1]->lvlttl != '\0' && *mapheaderinfo[gamemap-1]->lvlttl != '\0'
#ifdef HAVE_BLUA #ifdef HAVE_BLUA
@ -3236,33 +3238,8 @@ boolean P_SetupLevel(boolean skipprecip)
#endif #endif
) )
{ {
tic_t starttime = I_GetTime(); ST_runTitleCard();
tic_t endtime = starttime + (10*NEWTICRATERATIO); ST_runPreLevelTitleCard(lt_ticker);
tic_t nowtime = starttime;
tic_t lasttime = starttime;
while (nowtime < endtime)
{
// draw loop
while (!((nowtime = I_GetTime()) - lasttime))
I_Sleep();
lasttime = nowtime;
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, levelfadecol);
stplyr = &players[consoleplayer];
ST_drawLevelTitle(nowtime - starttime);
if (splitscreen)
{
stplyr = &players[secondarydisplayplayer];
ST_drawLevelTitle(nowtime - starttime);
}
I_OsPolling();
I_UpdateNoBlit();
I_FinishUpdate(); // page flip or blit buffer
if (moviemode) // make sure we save frames for the white hold too
M_SaveFrame();
}
} }
return true; return true;

View File

@ -186,14 +186,18 @@ boolean ST_SameTeam(player_t *a, player_t *b)
static boolean st_stopped = true; static boolean st_stopped = true;
void ST_Ticker(void) void ST_Ticker(boolean run)
{ {
if (st_stopped) if (st_stopped)
return; return;
if (run)
ST_runTitleCard();
} }
// 0 is default, any others are special palettes. // 0 is default, any others are special palettes.
INT32 st_palette = 0; INT32 st_palette = 0;
INT32 st_translucency = 0;
void ST_doPaletteStuff(void) void ST_doPaletteStuff(void)
{ {
@ -818,7 +822,7 @@ static void ST_drawLivesArea(void)
face = superprefix[stplyr->skin]; face = superprefix[stplyr->skin];
V_DrawSmallMappedPatch(hudinfo[HUD_LIVES].x, hudinfo[HUD_LIVES].y, V_DrawSmallMappedPatch(hudinfo[HUD_LIVES].x, hudinfo[HUD_LIVES].y,
hudinfo[HUD_LIVES].f|V_PERPLAYER|V_HUDTRANS, face, colormap); hudinfo[HUD_LIVES].f|V_PERPLAYER|V_HUDTRANS, face, colormap);
if (cv_translucenthud.value == 10 && stplyr->powers[pw_super] == 1 && stplyr->mo->tracer) if (st_translucency == 10 && stplyr->powers[pw_super] == 1 && stplyr->mo->tracer)
{ {
INT32 v_supertrans = (stplyr->mo->tracer->frame & FF_TRANSMASK) >> FF_TRANSSHIFT; INT32 v_supertrans = (stplyr->mo->tracer->frame & FF_TRANSMASK) >> FF_TRANSSHIFT;
if (v_supertrans < 10) if (v_supertrans < 10)
@ -1160,20 +1164,132 @@ static void ST_drawInput(void)
V_DrawThinString(x, y, hudinfo[HUD_LIVES].f|((leveltime & 4) ? V_YELLOWMAP : V_REDMAP), "BAD DEMO!!"); V_DrawThinString(x, y, hudinfo[HUD_LIVES].f|((leveltime & 4) ? V_YELLOWMAP : V_REDMAP), "BAD DEMO!!");
} }
void ST_drawLevelTitle(tic_t titletime) static patch_t *lt_patches[3];
static INT32 lt_scroll = 0;
static INT32 lt_mom = 0;
static INT32 lt_zigzag = 0;
tic_t lt_ticker = 0, lt_lasttic = 0;
tic_t lt_exitticker = 0, lt_endtime = 0;
//
// Load the graphics for the title card.
//
static void ST_cacheLevelTitle(void)
{
SINT8 bonustype = mapheaderinfo[gamemap-1]->bonustype;
if ((bonustype != 1) && (bonustype != 2))
{
lt_patches[0] = (patch_t *)W_CachePatchName("LTACTBLU", PU_HUDGFX);
lt_patches[1] = (patch_t *)W_CachePatchName("LTZIGZAG", PU_HUDGFX);
lt_patches[2] = (patch_t *)W_CachePatchName("LTZZTEXT", PU_HUDGFX);
}
else // boss map
{
lt_patches[0] = (patch_t *)W_CachePatchName("LTACTRED", PU_HUDGFX);
lt_patches[1] = (patch_t *)W_CachePatchName("LTZIGRED", PU_HUDGFX);
lt_patches[2] = (patch_t *)W_CachePatchName("LTZZWARN", PU_HUDGFX);
}
}
//
// Start the title card.
//
void ST_startTitleCard(void)
{
ST_cacheLevelTitle();
lt_ticker = lt_exitticker = lt_lasttic = 0;
lt_endtime = 2*TICRATE;
lt_scroll = BASEVIDWIDTH * FRACUNIT;
lt_zigzag = -((lt_patches[1])->width * FRACUNIT);
lt_mom = 0;
}
//
// What happens before drawing the title card.
// Which is just setting the HUD translucency.
//
void ST_preDrawTitleCard(void)
{
if (lt_ticker >= (lt_endtime + TICRATE))
return;
if (!lt_exitticker)
st_translucency = 0;
else
st_translucency = max(0, min((INT32)lt_exitticker-4, cv_translucenthud.value));
}
//
// Run the title card.
// Called from ST_Ticker.
//
void ST_runTitleCard(void)
{
if (lt_ticker >= (lt_endtime + TICRATE))
return;
if (!(paused || P_AutoPause()))
{
// tick
lt_ticker++;
if (lt_ticker >= lt_endtime)
lt_exitticker++;
// scroll to screen (level title)
if (!lt_exitticker)
{
if (abs(lt_scroll) > FRACUNIT)
lt_scroll -= (lt_scroll>>2);
else
lt_scroll = 0;
}
// scroll away from screen (level title)
else
{
lt_mom -= FRACUNIT*6;
lt_scroll += lt_mom;
}
// scroll to screen (zigzag)
if (!lt_exitticker)
{
if (abs(lt_zigzag) > FRACUNIT)
lt_zigzag -= (lt_zigzag>>2);
else
lt_zigzag = 0;
}
// scroll away from screen (zigzag)
else
lt_zigzag += lt_mom;
}
}
//
// Draw the title card itself.
//
void ST_drawTitleCard(void)
{ {
char *lvlttl = mapheaderinfo[gamemap-1]->lvlttl; char *lvlttl = mapheaderinfo[gamemap-1]->lvlttl;
char *subttl = mapheaderinfo[gamemap-1]->subttl; char *subttl = mapheaderinfo[gamemap-1]->subttl;
INT32 actnum = mapheaderinfo[gamemap-1]->actnum; INT32 actnum = mapheaderinfo[gamemap-1]->actnum;
INT32 lvlttly, zoney, lvlttlxpos, ttlnumxpos, zonexpos; INT32 lvlttlxpos, ttlnumxpos, zonexpos;
INT32 subttlxpos = BASEVIDWIDTH/2; INT32 subttlxpos = BASEVIDWIDTH/2;
patch_t *tzigzag = W_CachePatchName("TCARDFG1", PU_CACHE); INT32 ttlscroll = FixedInt(lt_scroll);
INT32 i; INT32 zzticker;
INT32 height = (SHORT(tzigzag->height)); patch_t *actpat, *zigzag, *zztext;
if (!(titletime > 2 && titletime-3 < 110)) if (lt_ticker >= (lt_endtime + TICRATE))
return; return;
if ((lt_ticker-lt_lasttic) > 1)
lt_ticker = lt_lasttic+1;
ST_cacheLevelTitle();
actpat = lt_patches[0];
zigzag = lt_patches[1];
zztext = lt_patches[2];
lvlttlxpos = ((BASEVIDWIDTH/2) - (V_LevelNameWidth(lvlttl)/2)); lvlttlxpos = ((BASEVIDWIDTH/2) - (V_LevelNameWidth(lvlttl)/2));
if (actnum > 0) if (actnum > 0)
@ -1186,72 +1302,78 @@ void ST_drawLevelTitle(tic_t titletime)
if (lvlttlxpos < 0) if (lvlttlxpos < 0)
lvlttlxpos = 0; lvlttlxpos = 0;
#if 0 // toaster's experiment. srb2&toast.exe one day, maybe? Requires stuff below to be converted to fixed point. zzticker = lt_ticker;
#define MIDTTLY 79 V_DrawScaledPatch(FixedInt(lt_zigzag), (-zzticker) % zigzag->height, V_SNAPTOTOP|V_SNAPTOLEFT, zigzag);
#define MIDZONEY 105 V_DrawScaledPatch(FixedInt(lt_zigzag), (zigzag->height-zzticker) % zigzag->height, V_SNAPTOTOP|V_SNAPTOLEFT, zigzag);
#define MIDDIFF 4 V_DrawScaledPatch(FixedInt(lt_zigzag), (-zigzag->height+zzticker) % zztext->height, V_SNAPTOTOP|V_SNAPTOLEFT, zztext);
V_DrawScaledPatch(FixedInt(lt_zigzag), (zzticker) % zztext->height, V_SNAPTOTOP|V_SNAPTOLEFT, zztext);
if (titletime < 10)
{
fixed_t z = ((titletime - 3)<<FRACBITS)/7;
INT32 ttlh = V_LevelNameHeight(lvlttl);
zoney = (200<<FRACBITS) - ((200 - (MIDZONEY + MIDDIFF))*z);
lvlttly = ((MIDTTLY + ttlh - MIDDIFF)*z) - (ttlh<<FRACBITS);
}
else if (titletime < 105)
{
fixed_t z = (((titletime - 10)*MIDDIFF)<<(FRACBITS+1))/95;
zoney = ((MIDZONEY + MIDDIFF)<<FRACBITS) - z;
lvlttly = ((MIDTTLY - MIDDIFF)<<FRACBITS) + z;
}
else
{
fixed_t z = ((titletime - 105)<<FRACBITS)/7;
INT32 zoneh = V_LevelNameHeight(M_GetText("ZONE"));
zoney = (MIDZONEY + zoneh - MIDDIFF)*(FRACUNIT - z) - (zoneh<<FRACBITS);
lvlttly = ((MIDTTLY + MIDDIFF)<<FRACBITS) + ((200 - (MIDTTLY + MIDDIFF))*z);
}
#undef MIDTTLY
#undef MIDZONEY
#undef MIDDIFF
#else
// There's no consistent algorithm that can accurately define the old positions
// so I just ended up resorting to a single switch statement to define them
switch (titletime-3)
{
case 0: zoney = 200; lvlttly = 0; break;
case 1: zoney = 188; lvlttly = 12; break;
case 2: zoney = 176; lvlttly = 24; break;
case 3: zoney = 164; lvlttly = 36; break;
case 4: zoney = 152; lvlttly = 48; break;
case 5: zoney = 140; lvlttly = 60; break;
case 6: zoney = 128; lvlttly = 72; break;
case 105: zoney = 80; lvlttly = 104; break;
case 106: zoney = 56; lvlttly = 128; break;
case 107: zoney = 32; lvlttly = 152; break;
case 108: zoney = 8; lvlttly = 176; break;
case 109: zoney = 0; lvlttly = 200; break;
default: zoney = 104; lvlttly = 80; break;
}
#endif
if (actnum) if (actnum)
V_DrawLevelActNum(ttlnumxpos, zoney, V_PERPLAYER, actnum);
V_DrawLevelTitle(lvlttlxpos, lvlttly, V_PERPLAYER, lvlttl);
if (!(mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE))
V_DrawLevelTitle(zonexpos, zoney, V_PERPLAYER, M_GetText("ZONE"));
if (lvlttly+48 < 200)
V_DrawCenteredString(subttlxpos, lvlttly+48, V_PERPLAYER|V_ALLOWLOWERCASE, subttl);
for (i = -8; i < (BASEVIDHEIGHT/height) + 8; i++)
{ {
INT32 y = ((i*height) + (height - ((titletime)%height))); V_DrawScaledPatch(ttlnumxpos + ttlscroll, 104 - ttlscroll, 0, actpat);
//CONS_Printf("%d\n", y); V_DrawLevelActNum(ttlnumxpos + ttlscroll, 104, V_PERPLAYER, actnum);
V_DrawFixedPatch(0, y<<FRACBITS, FRACUNIT, V_SNAPTOLEFT|V_PERPLAYER, tzigzag, NULL); }
V_DrawLevelTitle(lvlttlxpos - ttlscroll, 80, V_PERPLAYER, lvlttl);
if (!(mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE))
V_DrawLevelTitle(zonexpos + ttlscroll, 104, V_PERPLAYER, M_GetText("ZONE"));
V_DrawCenteredString(subttlxpos - ttlnumxpos, 128, V_PERPLAYER|V_ALLOWLOWERCASE, subttl);
lt_lasttic = lt_ticker;
}
//
// Drawer for ST_runPreLevelTitleCard.
//
void ST_preLevelTitleCardLoop(tic_t ticker, boolean update)
{
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, levelfadecol);
if (ticker < PRELEVELTIME-1)
ST_drawWipeTitleCard();
I_OsPolling();
I_UpdateNoBlit();
if (update)
I_FinishUpdate(); // page flip or blit buffer
if (moviemode) // make sure we save frames for the white hold too
M_SaveFrame();
}
//
// Run the title card before fading in to the level.
//
void ST_runPreLevelTitleCard(tic_t ticker)
{
tic_t starttime = I_GetTime();
tic_t endtime = starttime + (PRELEVELTIME*NEWTICRATERATIO);
tic_t nowtime = starttime;
tic_t lasttime = starttime;
while (nowtime < endtime)
{
// draw loop
while (!((nowtime = I_GetTime()) - lasttime))
I_Sleep();
lasttime = nowtime;
ST_runTitleCard();
ST_preLevelTitleCardLoop(ticker, true);
}
}
//
// Draw the title card while on a wipe.
// Also used in ST_runPreLevelTitleCard.
//
void ST_drawWipeTitleCard(void)
{
stplyr = &players[consoleplayer];
ST_preDrawTitleCard();
ST_drawTitleCard();
if (splitscreen)
{
stplyr = &players[secondarydisplayplayer];
ST_preDrawTitleCard();
ST_drawTitleCard();
} }
} }
@ -2404,12 +2526,29 @@ static void ST_doItemFinderIconsAndSound(void)
S_StartSound(NULL, sfx_emfind); S_StartSound(NULL, sfx_emfind);
} }
//
// Draw the status bar overlay, customisable: the user chooses which // Draw the status bar overlay, customisable: the user chooses which
// kind of information to overlay // kind of information to overlay
// //
static void ST_overlayDrawer(void) static void ST_overlayDrawer(void)
{ {
//hu_showscores = auto hide score/time/rings when tab rankings are shown // Decide whether to draw the stage title or not
boolean stagetitle = false;
// Check for a valid level title
// If the HUD is enabled
// And, if Lua is running, if the HUD library has the stage title enabled
if (*mapheaderinfo[gamemap-1]->lvlttl != '\0' && !(hu_showscores && (netgame || multiplayer))
#ifdef HAVE_BLUA
&& LUA_HudEnabled(hud_stagetitle)
#endif
)
{
stagetitle = true;
ST_preDrawTitleCard();
}
// hu_showscores = auto hide score/time/rings when tab rankings are shown
if (!(hu_showscores && (netgame || multiplayer))) if (!(hu_showscores && (netgame || multiplayer)))
{ {
if ((maptol & TOL_NIGHTS || G_IsSpecialStage(gamemap)) && if ((maptol & TOL_NIGHTS || G_IsSpecialStage(gamemap)) &&
@ -2560,12 +2699,8 @@ static void ST_overlayDrawer(void)
#endif #endif
// draw level title Tails // draw level title Tails
if (*mapheaderinfo[gamemap-1]->lvlttl != '\0' && !(hu_showscores && (netgame || multiplayer)) if (stagetitle && (!WipeInAction) && (!WipeStageTitle))
#ifdef HAVE_BLUA ST_drawTitleCard();
&& LUA_HudEnabled(hud_stagetitle)
#endif
)
ST_drawLevelTitle(timeinmap+70);
if (!hu_showscores && (netgame || multiplayer) if (!hu_showscores && (netgame || multiplayer)
#ifdef HAVE_BLUA #ifdef HAVE_BLUA
@ -2641,6 +2776,8 @@ void ST_Drawer(void)
} }
} }
st_translucency = cv_translucenthud.value;
if (st_overlay) if (st_overlay)
{ {
// No deadview! // No deadview!

View File

@ -24,7 +24,7 @@
// //
// Called by main loop. // Called by main loop.
void ST_Ticker(void); void ST_Ticker(boolean run);
// Called by main loop. // Called by main loop.
void ST_Drawer(void); void ST_Drawer(void);
@ -47,8 +47,17 @@ void ST_ReloadSkinFaceGraphics(void);
void ST_doPaletteStuff(void); void ST_doPaletteStuff(void);
// level title draw // title card
void ST_drawLevelTitle(tic_t titletime); void ST_startTitleCard(void);
void ST_preDrawTitleCard(void);
void ST_runTitleCard(void);
void ST_drawTitleCard(void);
void ST_preLevelTitleCardLoop(tic_t ticker, boolean update);
void ST_runPreLevelTitleCard(tic_t ticker);
void ST_drawWipeTitleCard(void);
extern tic_t lt_ticker, lt_lasttic;
extern tic_t lt_exitticker, lt_endtime;
// return if player a is in the same team as player b // return if player a is in the same team as player b
boolean ST_SameTeam(player_t *a, player_t *b); boolean ST_SameTeam(player_t *a, player_t *b);
@ -59,6 +68,7 @@ boolean ST_SameTeam(player_t *a, player_t *b);
extern boolean st_overlay; // sb overlay on or off when fullscreen extern boolean st_overlay; // sb overlay on or off when fullscreen
extern INT32 st_palette; // 0 is default, any others are special palettes. extern INT32 st_palette; // 0 is default, any others are special palettes.
extern INT32 st_translucency;
extern lumpnum_t st_borderpatchnum; extern lumpnum_t st_borderpatchnum;
// patches, also used in intermission // patches, also used in intermission

View File

@ -18,6 +18,7 @@
#include "p_local.h" // stplyr #include "p_local.h" // stplyr
#include "g_game.h" // players #include "g_game.h" // players
#include "v_video.h" #include "v_video.h"
#include "st_stuff.h"
#include "hu_stuff.h" #include "hu_stuff.h"
#include "r_draw.h" #include "r_draw.h"
#include "console.h" #include "console.h"
@ -574,11 +575,11 @@ void V_DrawStretchyFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, fixed_t vsca
if ((alphalevel = ((scrn & V_ALPHAMASK) >> V_ALPHASHIFT))) if ((alphalevel = ((scrn & V_ALPHAMASK) >> V_ALPHASHIFT)))
{ {
if (alphalevel == 13) if (alphalevel == 13)
alphalevel = hudminusalpha[cv_translucenthud.value]; alphalevel = hudminusalpha[st_translucency];
else if (alphalevel == 14) else if (alphalevel == 14)
alphalevel = 10 - cv_translucenthud.value; alphalevel = 10 - st_translucency;
else if (alphalevel == 15) else if (alphalevel == 15)
alphalevel = hudplusalpha[cv_translucenthud.value]; alphalevel = hudplusalpha[st_translucency];
if (alphalevel >= 10) if (alphalevel >= 10)
return; // invis return; // invis
@ -874,11 +875,11 @@ void V_DrawCroppedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_
if ((alphalevel = ((scrn & V_ALPHAMASK) >> V_ALPHASHIFT))) if ((alphalevel = ((scrn & V_ALPHAMASK) >> V_ALPHASHIFT)))
{ {
if (alphalevel == 13) if (alphalevel == 13)
alphalevel = hudminusalpha[cv_translucenthud.value]; alphalevel = hudminusalpha[st_translucency];
else if (alphalevel == 14) else if (alphalevel == 14)
alphalevel = 10 - cv_translucenthud.value; alphalevel = 10 - st_translucency;
else if (alphalevel == 15) else if (alphalevel == 15)
alphalevel = hudplusalpha[cv_translucenthud.value]; alphalevel = hudplusalpha[st_translucency];
if (alphalevel >= 10) if (alphalevel >= 10)
return; // invis return; // invis
@ -1393,11 +1394,11 @@ void V_DrawFillConsoleMap(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c)
if ((alphalevel = ((c & V_ALPHAMASK) >> V_ALPHASHIFT))) if ((alphalevel = ((c & V_ALPHAMASK) >> V_ALPHASHIFT)))
{ {
if (alphalevel == 13) if (alphalevel == 13)
alphalevel = hudminusalpha[cv_translucenthud.value]; alphalevel = hudminusalpha[st_translucency];
else if (alphalevel == 14) else if (alphalevel == 14)
alphalevel = 10 - cv_translucenthud.value; alphalevel = 10 - st_translucency;
else if (alphalevel == 15) else if (alphalevel == 15)
alphalevel = hudplusalpha[cv_translucenthud.value]; alphalevel = hudplusalpha[st_translucency];
if (alphalevel >= 10) if (alphalevel >= 10)
return; // invis return; // invis
@ -2964,7 +2965,7 @@ INT32 V_LevelNameHeight(const char *string)
return w; return w;
} }
// For ST_drawLevelTitle // For ST_drawTitleCard
// Returns the width of the act num patch // Returns the width of the act num patch
INT32 V_LevelActNumWidth(INT32 num) INT32 V_LevelActNumWidth(INT32 num)
{ {