diff --git a/src/d_clisrv.h b/src/d_clisrv.h index d4090b26..89a7dd0d 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -26,7 +26,11 @@ // SOME numpty changed all the gametype constants and it fell out of sync with vanilla and now we have to pretend to be vanilla when talking to the master server... #define VANILLA_GT_RACE 2 +#if VERSION < 210 +#define VANILLA_GT_MATCH 1 +#else #define VANILLA_GT_MATCH 3 +#endif // Networking and tick handling related. #define BACKUPTICS 32 diff --git a/src/d_netcmd.c b/src/d_netcmd.c index e5d2f0cb..b8f37cee 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -4231,9 +4231,17 @@ static void PointLimit_OnChange(void) static void NumLaps_OnChange(void) { + if (!G_RaceGametype() || (modeattacking || demoplayback)) + return; + + if (server && Playing() + && (netgame || multiplayer) + && (mapheaderinfo[gamemap - 1]->levelflags & LF_SECTIONRACE) + && (cv_numlaps.value > mapheaderinfo[gamemap - 1]->numlaps)) + CV_StealthSetValue(&cv_numlaps, mapheaderinfo[gamemap - 1]->numlaps); + // Just don't be verbose - if (G_RaceGametype() && !(modeattacking || demoplayback)) - CONS_Printf(M_GetText("Number of laps set to %d\n"), cv_numlaps.value); + CONS_Printf(M_GetText("Number of laps set to %d\n"), cv_numlaps.value); } static void NetTimeout_OnChange(void) diff --git a/src/g_game.c b/src/g_game.c index 80fc3950..0f3ec59f 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2997,7 +2997,7 @@ void G_DoReborn(INT32 playernum) // respawn at the start mobj_t *oldmo = NULL; - if (player->starpostnum) // SRB2kart + if (player->starpostnum || ((mapheaderinfo[gamemap - 1]->levelflags & LF_SECTIONRACE) && player->laps)) // SRB2kart starpost = true; // first dissasociate the corpse diff --git a/src/p_spec.c b/src/p_spec.c index 935c7d90..7ac637d4 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -4240,12 +4240,24 @@ DoneSection2: curlap = 0; } - // Reset starposts (checkpoints) info - // SRB2kart 200117 - player->starpostangle = player->starpostnum = 0; - player->starpostx = player->starposty = player->starpostz = 0; - //except the time! player->starposttime = player->realtime; + player->starpostnum = 0; + + if (mapheaderinfo[gamemap - 1]->levelflags & LF_SECTIONRACE) + { + // SRB2Kart 281118 + // Save the player's time and position. + player->starpostx = player->mo->x>>FRACBITS; + player->starposty = player->mo->y>>FRACBITS; + player->starpostz = player->mo->floorz>>FRACBITS; + player->starpostangle = player->mo->angle; //R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy); torn; a momentum-based guess is less likely to be wrong in general, but when it IS wrong, it fucks you over entirely... + } + else + { + // SRB2kart 200117 + // Reset starposts (checkpoints) info + player->starpostangle = player->starpostx = player->starposty = player->starpostz = 0; + } if (P_IsLocalPlayer(player)) {