Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into break-through-them-all

This commit is contained in:
toaster 2023-10-19 17:32:35 +01:00
commit 0478d9a2e3
24 changed files with 133 additions and 122 deletions

View file

@ -6482,7 +6482,7 @@ static void CheckPresentPlayers(void)
}
// Handle "client-to-client" auth challenge flow.
static void UpdateChallenges(void)
void UpdateChallenges(void)
{
if (!(Playing() && netgame))
return;
@ -6501,7 +6501,7 @@ static void UpdateChallenges(void)
}
else // client
{
if (leveltime <= CHALLENGEALL_START)
if (leveltime < CHALLENGEALL_START)
expectChallenge = true;
if (leveltime == CHALLENGEALL_START)
@ -6663,8 +6663,6 @@ void NetUpdate(void)
UpdatePingTable();
UpdateChallenges();
if (client)
maketic = neededtic;

View file

@ -620,6 +620,9 @@ void CL_TimeoutServerList(void);
// Is there a game running
boolean Playing(void);
// Advance client-to-client pubkey verification flow
void UpdateChallenges(void);
// Broadcasts special packets to other players
// to notify of game exit
void D_QuitNetGame(void);

View file

@ -330,8 +330,9 @@ gamestate_t wipegamestate = GS_LEVEL;
INT16 wipetypepre = -1;
INT16 wipetypepost = -1;
static void D_Display(void)
static bool D_Display(void)
{
bool ranwipe = false;
boolean forcerefresh = false;
static boolean wipe = false;
INT32 wipedefindex = 0;
@ -342,7 +343,7 @@ static void D_Display(void)
if (!dedicated)
{
if (nodrawers)
return; // for comparative timing/profiling
return false; // for comparative timing/profiling
// Lactozilla: Switching renderers works by checking
// if the game has to do it right when the frame
@ -411,6 +412,7 @@ static void D_Display(void)
F_WipeColorFill(31);
F_WipeEndScreen();
F_RunWipe(wipedefindex, wipetypepre, gamestate != GS_MENU, "FADEMAP0", false, false);
ranwipe = true;
}
if (G_GamestateUsesLevel() == false && rendermode != render_none)
@ -424,6 +426,7 @@ static void D_Display(void)
else //dedicated servers
{
F_RunWipe(wipedefindex, wipedefs[wipedefindex], gamestate != GS_MENU, "FADEMAP0", false, false);
ranwipe = true;
wipegamestate = gamestate;
}
@ -433,7 +436,7 @@ static void D_Display(void)
wipetypepre = -1;
if (dedicated) //bail out after wipe logic
return;
return false;
// Catch runaway clipping rectangles.
V_ClearClipRect();
@ -710,6 +713,7 @@ static void D_Display(void)
F_WipeEndScreen();
F_RunWipe(wipedefindex, wipedefs[wipedefindex], gamestate != GS_MENU && gamestate != GS_TITLESCREEN, "FADEMAP0", true, false);
ranwipe = true;
}
// reset counters so timedemo doesn't count the wipe duration
@ -765,6 +769,8 @@ static void D_Display(void)
I_FinishUpdate(); // page flip or blit buffer
ps_swaptime = I_GetPreciseTime() - ps_swaptime;
}
return ranwipe;
}
// =========================================================================
@ -781,6 +787,7 @@ void D_SRB2Loop(void)
boolean interp = false;
boolean doDisplay = false;
int frameskip = 0;
if (dedicated)
server = true;
@ -831,6 +838,8 @@ void D_SRB2Loop(void)
capbudget = (precise_t) budget;
}
bool ranwipe = false;
I_UpdateTime(cv_timescale.value);
if (lastwipetic)
@ -927,9 +936,9 @@ void D_SRB2Loop(void)
rendertimefrac_unpaused = FRACUNIT;
}
if (interp || doDisplay)
if ((interp || doDisplay) && !frameskip)
{
D_Display();
ranwipe = D_Display();
}
#ifdef HWRENDER
@ -980,6 +989,23 @@ void D_SRB2Loop(void)
finishprecise = I_GetPreciseTime();
deltasecs = (double)((INT64)(finishprecise - enterprecise)) / I_GetPrecisePrecision();
deltatics = deltasecs * NEWTICRATE;
// If time spent this game loop exceeds a single tic,
// it's probably because of rendering.
//
// Skip rendering the next frame, up to a limit of 3
// frames before a frame is rendered no matter what.
//
// Wipes run an inner loop and artificially increase
// the measured time.
if (!ranwipe && frameskip < 3 && deltatics > 1.0)
{
frameskip++;
}
else
{
frameskip = 0;
}
}
}

View file

@ -71,7 +71,7 @@ typedef enum
{
PF_GODMODE = 1<<0, // Immortal. No lightsnake from pits either
// free: 1<<1
PF_UPDATEMYRESPAWN = 1<<1, // Scripted sequences / fastfall can set this to force a respawn waypoint update
PF_AUTOROULETTE = 1<<2, // Accessibility: Non-deterministic item box, no manual stop.
@ -886,6 +886,8 @@ struct player_t
UINT8 sliptideZipDelay; // How long since the last sliptide? Only boost once you've been straightened out for a bit.
UINT16 sliptideZipBoost; // The actual boost granted from sliptideZip.
UINT8 lastsafelap;
mobj_t *stumbleIndicator;
mobj_t *sliptideZipIndicator;
mobj_t *whip;

View file

@ -3411,8 +3411,6 @@ void readmaincfg(MYFILE *f, boolean mainfile)
}
else if (fastcmp(word2, "RINGRACERS"))
ttmode = TTMODE_RINGRACERS;
else if (fastcmp(word2, "OLD") || fastcmp(word2, "SSNTAILS"))
ttmode = TTMODE_OLD;
titlechanged = true;
}
else if (fastcmp(word, "TITLEPICSNAME"))

View file

@ -6016,7 +6016,7 @@ const char *const MAPTHINGFLAG_LIST[4] = {
const char *const PLAYERFLAG_LIST[] = {
"GODMODE",
"\x01", // free: 1<<1 (name un-matchable)
"UPDATEMYRESPAWN", // Scripted sequences / fastfall can set this to force a respawn waypoint update
"AUTOROULETTE", // Item box accessibility

View file

@ -1316,7 +1316,7 @@ static void F_InitMenuPresValues(void)
curbgcolor = -1;
curbgxspeed = titlescrollxspeed;
curbgyspeed = titlescrollyspeed;
curbghide = false;
curbghide = true;
curhidepics = hidetitlepics;
curttmode = ttmode;
@ -1426,15 +1426,13 @@ static void F_CacheTitleScreen(void)
{
UINT16 i;
switch(curttmode)
switch (curttmode)
{
case TTMODE_NONE:
break;
case TTMODE_OLD:
break; // idk do we still want this?
case TTMODE_RINGRACERS:
{
if (!M_SecretUnlocked(SECRET_ALTTITLE, true))
{
CV_StealthSetValue(&cv_alttitle, 0);
@ -1452,6 +1450,7 @@ static void F_CacheTitleScreen(void)
}
kts_copyright = W_CachePatchName("KTSCR", PU_PATCH_LOWPRIORITY);
break;
}
case TTMODE_USER:
{
@ -1593,36 +1592,34 @@ void F_TitleScreenDrawer(void)
{
boolean hidepics = false;
#if 0
if (modeattacking)
return; // We likely came here from retrying. Don't do a damn thing.
#endif
// Draw that sky!
if (curbgcolor >= 0)
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, curbgcolor);
else if (!curbghide || !titlemapinaction || gamestate == GS_WAITINGPLAYERS)
F_SkyScroll(curbgxspeed, curbgyspeed, curbgname);
else
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31);
// Don't draw outside of the title screen, or if the patch isn't there.
if (gamestate != GS_TITLESCREEN && gamestate != GS_WAITINGPLAYERS)
return;
// Don't draw if title mode is set to Old/None and the patch isn't there
/*
if (!ttwing && (curttmode == TTMODE_OLD || curttmode == TTMODE_NONE))
return;
*/
// rei|miru: use title pics?
hidepics = curhidepics;
if (hidepics)
{
goto luahook;
}
switch(curttmode)
switch (curttmode)
{
case TTMODE_NONE:
{
break;
}
case TTMODE_RINGRACERS:
{
@ -1657,64 +1654,11 @@ void F_TitleScreenDrawer(void)
V_DrawFixedPatch(0, 0, FRACUNIT, 0, kts_bumper, NULL);
V_DrawFixedPatch(0, 0, FRACUNIT, 0, kts_copyright, NULL);
F_VersionDrawer();
break;
}
case TTMODE_OLD:
/*
if (finalecount < 50)
{
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31);
V_DrawSmallScaledPatch(84, 36, 0, ttbanner);
if (finalecount >= 20)
V_DrawSmallScaledPatch(84, 87, 0, ttkart);
else if (finalecount >= 10)
V_DrawSciencePatch((84<<FRACBITS) - FixedDiv(180<<FRACBITS, 10<<FRACBITS)*(20-finalecount), (87<<FRACBITS), 0, ttkart, FRACUNIT/2);
}
else if (finalecount < 52)
{
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 0);
V_DrawSmallScaledPatch(84, 36, 0, ttkflash);
}
else
{
INT32 transval = 0;
if (finalecount <= (50+(9<<1)))
transval = (finalecount - 50)>>1;
V_DrawSciencePatch(0, 0 - FixedMul(40<<FRACBITS, FixedDiv(finalecount%70, 70)), V_SNAPTOTOP|V_SNAPTOLEFT, ttcheckers, FRACUNIT);
V_DrawSciencePatch(280<<FRACBITS, -(40<<FRACBITS) + FixedMul(40<<FRACBITS, FixedDiv(finalecount%70, 70)), V_SNAPTOTOP|V_SNAPTORIGHT, ttcheckers, FRACUNIT);
if (transval)
V_DrawFadeScreen(0, 10 - transval);
V_DrawSmallScaledPatch(84, 36, 0, ttbanner);
V_DrawSmallScaledPatch(84, 87, 0, ttkart);
if (!transval)
return;
V_DrawSmallScaledPatch(84, 36, transval<<V_ALPHASHIFT, ttkflash);
}
*/
V_DrawCenteredString(BASEVIDWIDTH/2, 64, 0, "Dr. Robotnik's Ring Racers v2.0");
#ifdef DEVELOP
#if defined(TESTERS)
V_DrawCenteredString(BASEVIDWIDTH/2, 96, V_SKYMAP, "Tester EXE");
#else
V_DrawCenteredString(BASEVIDWIDTH/2, 96, 0, "Development EXE");
#endif
#endif
break;
case TTMODE_USER:
{
if (!ttuser[max(0, ttuser_count)])
{
if(curttloop > -1 && ttuser[curttloop])
@ -1728,8 +1672,11 @@ void F_TitleScreenDrawer(void)
V_DrawSciencePatch(curttx<<FRACBITS, curtty<<FRACBITS, 0, ttuser[ttuser_count], FRACUNIT);
if (!(finalecount % max(1, curtttics)))
{
ttuser_count++;
}
break;
}
}
luahook:
@ -1749,6 +1696,8 @@ luahook:
}
LUA_HUD_DrawList(luahuddrawlist_title);
F_VersionDrawer();
if (finalecount > 0)
M_DrawMenuMessage();
}

View file

@ -81,7 +81,6 @@ typedef enum
{
TTMODE_NONE = 0,
TTMODE_RINGRACERS,
TTMODE_OLD,
TTMODE_USER
} ttmode_enum;

View file

@ -1201,8 +1201,11 @@ void G_StartTitleCard(void)
return;
}
// start the title card
WipeStageTitle = (gamestate == GS_LEVEL);
// play the sound
if (gamestate != GS_CEREMONY)
if (WipeStageTitle)
{
sfxenum_t kstart = sfx_kstart;
if (K_CheckBossIntro() == true)
@ -1211,9 +1214,6 @@ void G_StartTitleCard(void)
kstart = sfx_ruby2;
S_StartSound(NULL, kstart);
}
// start the title card
WipeStageTitle = (gamestate == GS_LEVEL);
}
//

View file

@ -5106,7 +5106,7 @@ void K_drawKartFreePlay(void)
if (((leveltime-lt_endtime) % TICRATE) < TICRATE/2)
return;
INT32 h_snap = (r_splitscreen < 2 || R_GetViewNumber() & 1) ? V_SNAPTORIGHT : V_SNAPTOLEFT;
INT32 h_snap = r_splitscreen < 2 ? V_SNAPTORIGHT | V_SLIDEIN : V_HUDTRANS;
fixed_t x = ((r_splitscreen > 1 ? BASEVIDWIDTH/4 : BASEVIDWIDTH - (LAPS_X+6)) * FRACUNIT);
fixed_t y = ((r_splitscreen ? BASEVIDHEIGHT/2 : BASEVIDHEIGHT) - 20) * FRACUNIT;
@ -5114,7 +5114,7 @@ void K_drawKartFreePlay(void)
FRACUNIT,
FRACUNIT,
FRACUNIT,
V_HUDTRANS|V_SLIDEIN|V_SNAPTOBOTTOM|h_snap|V_SPLITSCREEN,
V_SNAPTOBOTTOM|h_snap|V_SPLITSCREEN,
KART_FONT,
"FREE PLAY"
) / (r_splitscreen > 1 ? 2 : 1);
@ -5125,7 +5125,7 @@ void K_drawKartFreePlay(void)
FRACUNIT,
FRACUNIT,
FRACUNIT,
V_HUDTRANS|V_SLIDEIN|V_SNAPTOBOTTOM|h_snap|V_SPLITSCREEN,
V_SNAPTOBOTTOM|h_snap|V_SPLITSCREEN,
NULL,
KART_FONT,
"FREE PLAY"
@ -5244,11 +5244,12 @@ static void K_DrawWaypointDebugger(void)
if (netgame)
{
V_DrawString(8, 146, 0, va("Online griefing: [%u, %u]", stplyr->griefValue/TICRATE, stplyr->griefStrikes));
V_DrawString(8, 136, 0, va("Online griefing: [%u, %u]", stplyr->griefValue/TICRATE, stplyr->griefStrikes));
}
V_DrawString(8, 156, 0, va("Current Waypoint ID: %d", K_GetWaypointID(stplyr->currentwaypoint)));
V_DrawString(8, 166, 0, va("Next Waypoint ID: %d%s", K_GetWaypointID(stplyr->nextwaypoint), ((stplyr->pflags & PF_WRONGWAY) ? " (WRONG WAY)" : "")));
V_DrawString(8, 146, 0, va("Current Waypoint ID: %d", K_GetWaypointID(stplyr->currentwaypoint)));
V_DrawString(8, 156, 0, va("Next Waypoint ID: %d%s", K_GetWaypointID(stplyr->nextwaypoint), ((stplyr->pflags & PF_WRONGWAY) ? " (WRONG WAY)" : "")));
V_DrawString(8, 166, 0, va("Respawn Waypoint ID: %d", K_GetWaypointID(stplyr->respawn.wp)));
V_DrawString(8, 176, 0, va("Finishline Distance: %d", stplyr->distancetofinish));
if (numcheatchecks > 0)

View file

@ -8990,6 +8990,12 @@ static waypoint_t *K_GetPlayerNextWaypoint(player_t *player)
updaterespawn = false;
}
if (player->pflags & PF_UPDATEMYRESPAWN)
{
updaterespawn = true;
player->pflags &= ~PF_UPDATEMYRESPAWN;
}
// Respawn point should only be updated when we're going to a nextwaypoint
if ((updaterespawn) &&
(player->respawn.state == RESPAWNST_NONE) &&
@ -8999,6 +9005,7 @@ static waypoint_t *K_GetPlayerNextWaypoint(player_t *player)
(K_GetWaypointIsEnabled(bestwaypoint) == true))
{
player->respawn.wp = bestwaypoint;
player->lastsafelap = player->laps;
}
}
@ -10725,6 +10732,8 @@ boolean K_FastFallBounce(player_t *player)
if (player->mo->eflags & MFE_UNDERWATER)
bounce = (117 * bounce) / 200;
player->pflags |= PF_UPDATEMYRESPAWN;
player->mo->momz = bounce * P_MobjFlip(player->mo);
player->fastfall = 0;

View file

@ -795,17 +795,7 @@ void M_Drawer(void)
// ... but only in the MAIN MENU. I'm a picky bastard.
if (currentMenu == &MainDef)
{
if (customversionstring[0] != '\0')
{
V_DrawThinString(vid.dupx, vid.height - 20*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT, "Mod version:");
V_DrawThinString(vid.dupx, vid.height - 10*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT, customversionstring);
}
else
{
F_VersionDrawer();
}
F_VersionDrawer();
}
// Draw message overlay when needed
@ -2680,12 +2670,20 @@ void M_DrawCupSelect(void)
if (monitor == '2')
{
icony = 5;
icony = 5; // by default already 7px down, so this is really 2px further up
}
else if (monitor == '3')
{
icony = 6;
}
}
else
{
monitor = 'A' + (templevelsearch.cup->monitor - 10);
if (monitor == 'X')
{
icony = 11;
}
}
}

View file

@ -291,6 +291,7 @@ void K_DoIngameRespawn(player_t *player)
player->respawn.init = true;
player->respawn.fast = true;
player->respawn.returnspeed = 0;
player->laps = player->lastsafelap;
player->respawn.airtimer = player->airtime;
player->respawn.truedeath = !!(player->pflags & PF_FAULT);
@ -405,7 +406,8 @@ static void K_MovePlayerToRespawnPoint(player_t *player)
P_SetThingPosition(player->mo);
// We are no longer traveling from death location to 1st waypoint, so use standard timings
player->respawn.fast = false;
if (player->respawn.fast)
player->respawn.fast = false;
// At the first valid waypoint, permit extra player control options.
player->respawn.init = false;
@ -415,7 +417,7 @@ static void K_MovePlayerToRespawnPoint(player_t *player)
{
size_t nwp = K_NextRespawnWaypointIndex(player->respawn.wp);
if (nwp == SIZE_MAX)
if (nwp == SIZE_MAX || player->respawn.wp->nextwaypoints[nwp]->mobj->movefactor) // movefactor: Block Lightsnake
{
player->respawn.state = RESPAWNST_DROP;
return;

View file

@ -909,10 +909,13 @@ void level_tally_t::Draw(void)
{
fade = (5 * transition_f);
}
V_DrawFadeFill(
0, 0,
v_width, v_height,
V_SPLITSCREEN,
(vid.width / 2) * (r_splitscreen > 1 && R_GetViewNumber() & 1),
(vid.height / 2) * (R_GetViewNumber() > (r_splitscreen > 1)),
vid.width / (r_splitscreen > 1 ? 2 : 1),
vid.height / (r_splitscreen ? 2 : 1),
V_NOSCALESTART,
31, fade
);

View file

@ -329,6 +329,8 @@ static int player_get(lua_State *L)
lua_pushinteger(L, plr->sliptideZipDelay);
else if (fastcmp(field,"sliptideZipBoost"))
lua_pushinteger(L, plr->sliptideZipBoost);
else if (fastcmp(field,"lastsafelap"))
lua_pushinteger(L, plr->lastsafelap);
else if (fastcmp(field,"instaWhipCharge"))
lua_pushinteger(L, plr->instaWhipCharge);
else if (fastcmp(field,"instaWhipCooldown"))
@ -809,6 +811,8 @@ static int player_set(lua_State *L)
plr->sliptideZipDelay = luaL_checkinteger(L, 3);
else if (fastcmp(field,"sliptideZipBoost"))
plr->sliptideZipBoost = luaL_checkinteger(L, 3);
else if (fastcmp(field,"lastsafelap"))
plr->lastsafelap = luaL_checkinteger(L, 3);
else if (fastcmp(field,"instaWhipCharge"))
plr->instaWhipCharge = luaL_checkinteger(L, 3);
else if (fastcmp(field,"instaWhipCooldown"))

View file

@ -125,10 +125,7 @@ void Obj_RandomItemVisuals(mobj_t *mobj)
{
mobj->extravalue1++;
if (specialstageinfo.valid) // Setting the timer in this case probably looks kinda goofy, but P_ItemPop checks xval1, not states.
mobj->extravalue1 = max(mobj->extravalue1, RINGBOX_TIME); // I will change this if this logic ever becomes even slightly more complicated.
if (mobj->extravalue1 == RINGBOX_TIME)
if (mobj->extravalue1 == RINGBOX_TIME || specialstageinfo.valid)
{
// Sync the position in RINGBOX and RANDOMITEM animations.
statenum_t animDelta = mobj->state - states - S_RINGBOX1;

View file

@ -421,7 +421,10 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
P_SetTarget(&special->target, toucher);
P_UpdateLastPickup(player, cheesetype);
// P_KillMobj(special, toucher, toucher, DMG_NORMAL);
if (special->extravalue1 >= RINGBOX_TIME)
statenum_t specialstate = special->state - states;
if (specialstate >= S_RANDOMITEM1 && specialstate <= S_RANDOMITEM12)
K_StartItemRoulette(player, false);
else
K_StartItemRoulette(player, true);

View file

@ -13717,6 +13717,14 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj)
{
mobj->extravalue2 = 0;
}
if (mthing->thing_args[2] & TMWPF_BLOCKLIGHTSNAKE)
{
mobj->movefactor = 1; // If a lightsnaking player reaches here, drop instantly.
}
else
{
mobj->movefactor = 0;
}
// Sryder 2018-12-7: Grabbed this from the old MT_BOSS3WAYPOINT section so they'll be in the waypointcap instead
P_SetTarget(&mobj->tracer, waypointcap);

View file

@ -539,6 +539,8 @@ static void P_NetArchivePlayers(savebuffer_t *save)
WRITEUINT8(save->p, players[i].sliptideZipDelay);
WRITEUINT16(save->p, players[i].sliptideZipBoost);
WRITEUINT8(save->p, players[i].lastsafelap);
WRITEMEM(save->p, players[i].public_key, PUBKEYLENGTH);
WRITEUINT8(save->p, players[i].instaWhipCharge);
@ -1052,6 +1054,8 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
players[i].sliptideZipDelay = READUINT8(save->p);
players[i].sliptideZipBoost = READUINT16(save->p);
players[i].lastsafelap = READUINT8(save->p);
READMEM(save->p, players[i].public_key, PUBKEYLENGTH);
players[i].instaWhipCharge = READUINT8(save->p);

View file

@ -3338,7 +3338,7 @@ static void P_ProcessLinedefsAfterSidedefs(void)
if (ld->tripwire)
{
ld->blendmode = (subtractTripwire ? AST_SUBTRACT : AST_ADD);
ld->blendmode = (subtractTripwire ? AST_COPY : AST_ADD);
ld->alpha = FRACUNIT;
}

View file

@ -2142,6 +2142,8 @@ static void K_HandleLapDecrement(player_t *player)
{
if (player)
{
if (player->respawn.state == RESPAWNST_MOVE)
return;
if ((player->cheatchecknum == 0) && (player->laps > 0))
{
player->cheatchecknum = numcheatchecks;

View file

@ -129,10 +129,11 @@ typedef enum
typedef enum
{
TMWPF_DISABLED = 1,
TMWPF_SHORTCUT = 1<<1,
TMWPF_NORESPAWN = 1<<2,
TMWPF_FINISHLINE = 1<<3,
TMWPF_DISABLED = 1,
TMWPF_SHORTCUT = 1<<1,
TMWPF_NORESPAWN = 1<<2,
TMWPF_FINISHLINE = 1<<3,
TMWPF_BLOCKLIGHTSNAKE = 1<<4
} textmapwaypointflags_t;
typedef enum

View file

@ -28,6 +28,7 @@
#include "i_video.h" // rendermode
#include "r_main.h"
#include "r_fps.h"
#include "d_clisrv.h" // UpdateChallenges
// Object place
#include "m_cheat.h"
@ -966,6 +967,9 @@ void P_Ticker(boolean run)
ps_lua_thinkframe_time = I_GetPreciseTime() - ps_lua_thinkframe_time;
}
if (run)
UpdateChallenges();
// Run shield positioning
P_RunOverlays();

View file

@ -1351,7 +1351,7 @@ void ST_DrawServerSplash(boolean timelimited)
V_DrawFixedPatch(
gridX, gridY,
FRACUNIT,
(V_SNAPTOLEFT|V_SNAPTOBOTTOM) | V_SUBTRACT | V_VFLIP | gridOpacity,
(V_SNAPTOLEFT|V_SNAPTOTOP) | V_SUBTRACT | V_VFLIP | gridOpacity,
gridPatch,
NULL
);
@ -1369,7 +1369,7 @@ void ST_DrawServerSplash(boolean timelimited)
V_DrawFixedPatch(
iconX, iconY,
FRACUNIT,
(V_SNAPTORIGHT|V_SNAPTOBOTTOM) | opacityFlag,
(V_SNAPTORIGHT|V_SNAPTOTOP) | opacityFlag,
iconPatch,
NULL
);
@ -1379,7 +1379,7 @@ void ST_DrawServerSplash(boolean timelimited)
V_DrawRightAlignedStringAtFixed(
textX, textY,
(V_SNAPTORIGHT|V_SNAPTOBOTTOM) | opacityFlag,
(V_SNAPTORIGHT|V_SNAPTOTOP) | opacityFlag,
connectedservername
);