mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-05 01:38:13 +00:00
Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into break-through-them-all
This commit is contained in:
commit
0478d9a2e3
24 changed files with 133 additions and 122 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,7 +81,6 @@ typedef enum
|
|||
{
|
||||
TTMODE_NONE = 0,
|
||||
TTMODE_RINGRACERS,
|
||||
TTMODE_OLD,
|
||||
TTMODE_USER
|
||||
} ttmode_enum;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
|||
13
src/k_hud.c
13
src/k_hud.c
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue