Ringslinger tweaks

This commit is contained in:
Jaime Passos 2019-12-18 19:26:45 -03:00
parent eadb3dec9e
commit 396106829a
7 changed files with 21 additions and 15 deletions

View File

@ -3696,7 +3696,7 @@ void ItemFinder_OnChange(void)
static void PointLimit_OnChange(void)
{
// Don't allow pointlimit in Single Player/Co-Op/Race!
if (server && Playing() && G_PlatformGametype())
if (server && Playing() && !(gametyperules & GTR_POINTLIMIT))
{
if (cv_pointlimit.value)
CV_StealthSetValue(&cv_pointlimit, 0);
@ -3859,7 +3859,7 @@ UINT32 timelimitintics = 0;
static void TimeLimit_OnChange(void)
{
// Don't allow timelimit in Single Player/Co-Op/Race!
if (server && Playing() && cv_timelimit.value != 0 && G_PlatformGametype())
if (server && Playing() && cv_timelimit.value != 0 && !(gametyperules & GTR_TIMELIMIT))
{
CV_SetValue(&cv_timelimit, 0);
return;
@ -3964,7 +3964,7 @@ void D_GameTypeChanged(INT32 lastgametype)
// reset timelimit and pointlimit in race/coop, prevent stupid cheats
if (server)
{
if (G_PlatformGametype())
if (!(gametyperules & GTR_POINTLIMIT))
{
if (cv_timelimit.value)
CV_SetValue(&cv_timelimit, 0);

View File

@ -8894,7 +8894,7 @@ static const char *const GAMETYPERULE_LIST[] = {
"LIVES",
"RACE",
"CHASECAM",
"TIMELIMIT",
"\x01", // 1<<8, empty
"HIDETIME",
"HIDETIMEFROZEN",
"BLINDFOLDED",
@ -8908,6 +8908,9 @@ static const char *const GAMETYPERULE_LIST[] = {
"ALLOWEXIT",
"ROUNDENDMESSAGE",
"NOTITLECARD",
"POINTLIMIT",
"TIMELIMIT",
"OVERTIME",
NULL
};

View File

@ -402,7 +402,7 @@ enum GameTypeRules
// flexibility! Those will replace some straight-up gametype checks scattered around the source code!
GTR_CHASECAM = 1<<7, // Prefer chasecam at map load (All platform gametypes)
GTR_TIMELIMIT = 1<<8, // Ringslinger time limit (Tag and Hide and Seek)
// 1<<8, empty
GTR_HIDETIME = 1<<9, // Tag and Hide and Seek
GTR_HIDETIMEFROZEN = 1<<10, // Hide and Seek, but not Tag
GTR_BLINDFOLDED = 1<<11, // Blindfolded view (Tag and Hide and Seek)
@ -416,6 +416,9 @@ enum GameTypeRules
GTR_ALLOWEXIT = 1<<19, // Allow exit sectors
GTR_ROUNDENDMESSAGE = 1<<20, // Prints "The round has ended." into the console
GTR_NOTITLECARD = 1<<21, // Don't show the title card
GTR_POINTLIMIT = 1<<22, // Ringslinger point limit
GTR_TIMELIMIT = 1<<23, // Ringslinger time limit
GTR_OVERTIME = 1<<24, // Allow overtime
};
// String names for gametypes

View File

@ -3085,17 +3085,17 @@ UINT32 gametypedefaultrules[NUMGAMETYPES] =
GTR_PLATFORM|GTR_RACE|GTR_CHASECAM|GTR_SPAWNENEMIES|GTR_ALLOWEXIT|GTR_ROUNDENDMESSAGE,
// Match
GTR_RINGSLINGER|GTR_SPECTATORS|GTR_TIMELIMIT|GTR_EMERALDS|GTR_PITYSHIELD|GTR_DEATHPENALTY|GTR_ROUNDENDMESSAGE,
GTR_RINGSLINGER|GTR_SPECTATORS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_EMERALDS|GTR_PITYSHIELD|GTR_DEATHPENALTY|GTR_ROUNDENDMESSAGE,
// Team Match
GTR_RINGSLINGER|GTR_TEAMS|GTR_SPECTATORS|GTR_TIMELIMIT|GTR_PITYSHIELD|GTR_ROUNDENDMESSAGE,
GTR_RINGSLINGER|GTR_TEAMS|GTR_POINTLIMIT|GTR_SPECTATORS|GTR_TIMELIMIT|GTR_PITYSHIELD|GTR_ROUNDENDMESSAGE,
// Tag
GTR_RINGSLINGER|GTR_TAG|GTR_SPECTATORS|GTR_TIMELIMIT|GTR_HIDETIME|GTR_BLINDFOLDED|GTR_ROUNDENDMESSAGE,
GTR_RINGSLINGER|GTR_TAG|GTR_SPECTATORS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_HIDETIME|GTR_BLINDFOLDED|GTR_ROUNDENDMESSAGE,
// Hide and Seek
GTR_RINGSLINGER|GTR_TAG|GTR_SPECTATORS|GTR_TIMELIMIT|GTR_HIDETIME|GTR_BLINDFOLDED|GTR_ROUNDENDMESSAGE,
GTR_RINGSLINGER|GTR_TAG|GTR_SPECTATORS|GTR_POINTLIMIT||GTR_TIMELIMIT|GTR_HIDETIME|GTR_BLINDFOLDED|GTR_ROUNDENDMESSAGE,
// CTF
GTR_RINGSLINGER|GTR_TEAMS|GTR_SPECTATORS|GTR_TIMELIMIT|GTR_EMERALDS|GTR_TEAMFLAGS|GTR_PITYSHIELD|GTR_ROUNDENDMESSAGE,
GTR_RINGSLINGER|GTR_TEAMS|GTR_SPECTATORS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_EMERALDS|GTR_TEAMFLAGS|GTR_PITYSHIELD|GTR_ROUNDENDMESSAGE,
};
//

View File

@ -3026,7 +3026,7 @@ static void HU_DrawRankings(void)
// draw the current gametype in the lower right
HU_drawGametype();
if (!G_PlatformGametype())
if (gametyperules & GTR_POINTLIMIT)
{
if (cv_timelimit.value && timelimitintics > 0)
{

View File

@ -2093,7 +2093,7 @@ void P_CheckTimeLimit(void)
if (!(multiplayer || netgame))
return;
if (G_PlatformGametype())
if (!(gametyperules & GTR_TIMELIMIT))
return;
if (leveltime < timelimitintics)
@ -2124,7 +2124,7 @@ void P_CheckTimeLimit(void)
}
//Optional tie-breaker for Match/CTF
else if (cv_overtime.value)
else if ((cv_overtime.value) && (gametyperules & GTR_OVERTIME))
{
INT32 playerarray[MAXPLAYERS];
INT32 tempplayer = 0;
@ -2206,7 +2206,7 @@ void P_CheckPointLimit(void)
if (!(multiplayer || netgame))
return;
if (G_PlatformGametype())
if (!(gametyperules & GTR_POINTLIMIT))
return;
// pointlimit is nonzero, check if it's been reached by this player

View File

@ -2638,7 +2638,7 @@ static void ST_overlayDrawer(void)
}
// If you are in overtime, put a big honkin' flashin' message on the screen.
if (G_RingSlingerGametype() && cv_overtime.value
if (((gametyperules & GTR_TIMELIMIT) && (gametyperules & GTR_OVERTIME)) && cv_overtime.value
&& (leveltime > (timelimitintics + TICRATE/2)) && cv_timelimit.value && (leveltime/TICRATE % 2 == 0))
V_DrawCenteredString(BASEVIDWIDTH/2, 184, V_PERPLAYER, M_GetText("OVERTIME!"));