mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-26 05:51:20 +00:00
- Added Karate Chris's new DMFlags submission.
SVN r1333 (trunk)
This commit is contained in:
parent
37d056c041
commit
8f686a5e02
11 changed files with 123 additions and 10 deletions
|
@ -1,3 +1,6 @@
|
||||||
|
December 28, 2008 (Changes by Graf Zahl)
|
||||||
|
- Added Karate Chris's new DMFlags submission.
|
||||||
|
|
||||||
December 27, 2008 (Changes by Graf Zahl)
|
December 27, 2008 (Changes by Graf Zahl)
|
||||||
- Fixed: The correct player class was not remembered when the menu had both
|
- Fixed: The correct player class was not remembered when the menu had both
|
||||||
a player class selection menu and an episode menu.
|
a player class selection menu and an episode menu.
|
||||||
|
|
|
@ -863,6 +863,10 @@ void AM_ToggleMap ()
|
||||||
if (gamestate != GS_LEVEL)
|
if (gamestate != GS_LEVEL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Don't activate the automap if we're not allowed to use it.
|
||||||
|
if (dmflags2 & DF2_NO_AUTOMAP)
|
||||||
|
return;
|
||||||
|
|
||||||
SB_state = screen->GetPageCount ();
|
SB_state = screen->GetPageCount ();
|
||||||
if (!automapactive)
|
if (!automapactive)
|
||||||
{
|
{
|
||||||
|
@ -1572,6 +1576,10 @@ void AM_drawPlayers ()
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We don't always want to show allies on the automap.
|
||||||
|
if (dmflags2 & DF2_NO_AUTOMAP_ALLIES && i != consoleplayer)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (deathmatch && !demoplayback &&
|
if (deathmatch && !demoplayback &&
|
||||||
!p->mo->IsTeammate (players[consoleplayer].mo) &&
|
!p->mo->IsTeammate (players[consoleplayer].mo) &&
|
||||||
|
|
|
@ -232,7 +232,8 @@ CCMD (chase)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gamestate == GS_LEVEL && deathmatch && CheckCheatmode ())
|
// Check if we're allowed to use chasecam.
|
||||||
|
if (gamestate != GS_LEVEL || (!(dmflags2 & DF2_CHASECAM) && CheckCheatmode ()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Net_WriteByte (DEM_GENERICCHEAT);
|
Net_WriteByte (DEM_GENERICCHEAT);
|
||||||
|
|
|
@ -99,6 +99,7 @@
|
||||||
#include "d_event.h"
|
#include "d_event.h"
|
||||||
#include "d_netinf.h"
|
#include "d_netinf.h"
|
||||||
#include "v_palette.h"
|
#include "v_palette.h"
|
||||||
|
#include "m_cheat.h"
|
||||||
|
|
||||||
EXTERN_CVAR(Bool, hud_althud)
|
EXTERN_CVAR(Bool, hud_althud)
|
||||||
void DrawHUD();
|
void DrawHUD();
|
||||||
|
@ -114,6 +115,7 @@ extern void M_SetDefaultMode ();
|
||||||
extern void R_ExecuteSetViewSize ();
|
extern void R_ExecuteSetViewSize ();
|
||||||
extern void G_NewInit ();
|
extern void G_NewInit ();
|
||||||
extern void SetupPlayerClasses ();
|
extern void SetupPlayerClasses ();
|
||||||
|
extern bool CheckCheatmode ();
|
||||||
|
|
||||||
// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
|
// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
|
||||||
|
|
||||||
|
@ -139,6 +141,7 @@ EXTERN_CVAR (Float, m_yaw)
|
||||||
EXTERN_CVAR (Bool, invertmouse)
|
EXTERN_CVAR (Bool, invertmouse)
|
||||||
EXTERN_CVAR (Bool, lookstrafe)
|
EXTERN_CVAR (Bool, lookstrafe)
|
||||||
EXTERN_CVAR (Int, screenblocks)
|
EXTERN_CVAR (Int, screenblocks)
|
||||||
|
EXTERN_CVAR (Bool, sv_cheats)
|
||||||
|
|
||||||
extern gameinfo_t SharewareGameInfo;
|
extern gameinfo_t SharewareGameInfo;
|
||||||
extern gameinfo_t RegisteredGameInfo;
|
extern gameinfo_t RegisteredGameInfo;
|
||||||
|
@ -440,7 +443,58 @@ CVAR (Flag, sv_allowcrouch, dmflags, DF_YES_CROUCH);
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
CVAR (Int, dmflags2, 0, CVAR_SERVERINFO);
|
CUSTOM_CVAR (Int, dmflags2, 0, CVAR_SERVERINFO)
|
||||||
|
{
|
||||||
|
// Stop the automap if we aren't allowed to use it.
|
||||||
|
if ((self & DF2_NO_AUTOMAP) && automapactive)
|
||||||
|
AM_Stop ();
|
||||||
|
|
||||||
|
for (int i = 0; i < MAXPLAYERS; i++)
|
||||||
|
{
|
||||||
|
player_t *p = &players[i];
|
||||||
|
|
||||||
|
if (!playeringame[i])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Revert our view to our own eyes if spying someone else.
|
||||||
|
if (self & DF2_DISALLOW_SPYING)
|
||||||
|
{
|
||||||
|
// The player isn't looking through its own eyes, so make it.
|
||||||
|
if (p->camera != p->mo)
|
||||||
|
{
|
||||||
|
p->camera = p->mo;
|
||||||
|
|
||||||
|
S_UpdateSounds (p->camera);
|
||||||
|
StatusBar->AttachToPlayer (p);
|
||||||
|
|
||||||
|
if (demoplayback || multiplayer)
|
||||||
|
StatusBar->ShowPlayerName ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Come out of chasecam mode if we're not allowed to use chasecam.
|
||||||
|
if (!(dmflags2 & DF2_CHASECAM) && !G_SkillProperty (SKILLP_DisableCheats) && !sv_cheats)
|
||||||
|
{
|
||||||
|
// Take us out of chasecam mode only.
|
||||||
|
if (p->cheats & CF_CHASECAM)
|
||||||
|
cht_DoCheat (p, CHT_CHASECAM);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Change our autoaim settings if need be.
|
||||||
|
if (dmflags2 & DF2_NOAUTOAIM)
|
||||||
|
{
|
||||||
|
// Save our aimdist and set aimdist to 0.
|
||||||
|
p->userinfo.savedaimdist = p->userinfo.aimdist;
|
||||||
|
p->userinfo.aimdist = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Restore our aimdist.
|
||||||
|
p->userinfo.aimdist = p->userinfo.savedaimdist;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CVAR (Flag, sv_weapondrop, dmflags2, DF2_YES_WEAPONDROP);
|
CVAR (Flag, sv_weapondrop, dmflags2, DF2_YES_WEAPONDROP);
|
||||||
CVAR (Flag, sv_noteamswitch, dmflags2, DF2_NO_TEAM_SWITCH);
|
CVAR (Flag, sv_noteamswitch, dmflags2, DF2_NO_TEAM_SWITCH);
|
||||||
CVAR (Flag, sv_doubleammo, dmflags2, DF2_YES_DOUBLEAMMO);
|
CVAR (Flag, sv_doubleammo, dmflags2, DF2_YES_DOUBLEAMMO);
|
||||||
|
@ -452,7 +506,14 @@ CVAR (Flag, sv_norespawn, dmflags2, DF2_NO_RESPAWN);
|
||||||
CVAR (Flag, sv_losefrag, dmflags2, DF2_YES_LOSEFRAG);
|
CVAR (Flag, sv_losefrag, dmflags2, DF2_YES_LOSEFRAG);
|
||||||
CVAR (Flag, sv_respawnprotect, dmflags2, DF2_YES_RESPAWN_INVUL);
|
CVAR (Flag, sv_respawnprotect, dmflags2, DF2_YES_RESPAWN_INVUL);
|
||||||
CVAR (Flag, sv_samespawnspot, dmflags2, DF2_SAME_SPAWN_SPOT);
|
CVAR (Flag, sv_samespawnspot, dmflags2, DF2_SAME_SPAWN_SPOT);
|
||||||
CVAR (Flag, sv_infiniteinventory, dmflags2, DF2_INFINITE_INVENTORY)
|
CVAR (Flag, sv_infiniteinventory, dmflags2, DF2_INFINITE_INVENTORY);
|
||||||
|
CVAR (Flag, sv_killallmonsters, dmflags2, DF2_KILL_MONSTERS);
|
||||||
|
CVAR (Flag, sv_noautomap, dmflags2, DF2_NO_AUTOMAP);
|
||||||
|
CVAR (Flag, sv_noautomapallies, dmflags2, DF2_NO_AUTOMAP_ALLIES);
|
||||||
|
CVAR (Flag, sv_disallowspying, dmflags2, DF2_DISALLOW_SPYING);
|
||||||
|
CVAR (Flag, sv_chasecam, dmflags2, DF2_CHASECAM);
|
||||||
|
CVAR (Flag, sv_disallowsuicide, dmflags2, DF2_NOSUICIDE);
|
||||||
|
CVAR (Flag, sv_noautoaim, dmflags2, DF2_NOAUTOAIM);
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
|
|
|
@ -370,11 +370,17 @@ void D_SetupUserInfo ()
|
||||||
}
|
}
|
||||||
if (autoaim > 35.f || autoaim < 0.f)
|
if (autoaim > 35.f || autoaim < 0.f)
|
||||||
{
|
{
|
||||||
coninfo->aimdist = ANGLE_1*35;
|
if (dmflags & DF2_NOAUTOAIM)
|
||||||
|
coninfo->savedaimdist = ANGLE_1*35;
|
||||||
|
else
|
||||||
|
coninfo->aimdist = ANGLE_1*35;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
coninfo->aimdist = abs ((int)(autoaim * (float)ANGLE_1));
|
if (dmflags & DF2_NOAUTOAIM)
|
||||||
|
coninfo->savedaimdist = abs ((int)(autoaim * (float)ANGLE_1));
|
||||||
|
else
|
||||||
|
coninfo->aimdist = abs ((int)(autoaim * (float)ANGLE_1));
|
||||||
}
|
}
|
||||||
coninfo->color = color;
|
coninfo->color = color;
|
||||||
coninfo->skin = R_FindSkin (skin, 0);
|
coninfo->skin = R_FindSkin (skin, 0);
|
||||||
|
@ -684,11 +690,17 @@ void D_ReadUserInfoStrings (int i, BYTE **stream, bool update)
|
||||||
angles = atof (value);
|
angles = atof (value);
|
||||||
if (angles > 35.f || angles < 0.f)
|
if (angles > 35.f || angles < 0.f)
|
||||||
{
|
{
|
||||||
info->aimdist = ANGLE_1*35;
|
if (dmflags & DF2_NOAUTOAIM)
|
||||||
|
info->savedaimdist = ANGLE_1*35;
|
||||||
|
else
|
||||||
|
info->aimdist = ANGLE_1*35;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
info->aimdist = abs ((int)(angles * (float)ANGLE_1));
|
if (dmflags & DF2_NOAUTOAIM)
|
||||||
|
info->savedaimdist = abs ((int)(angles * (float)ANGLE_1));
|
||||||
|
else
|
||||||
|
info->aimdist = abs ((int)(angles * (float)ANGLE_1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -804,6 +816,8 @@ FArchive &operator<< (FArchive &arc, userinfo_t &info)
|
||||||
arc.Read (&info.netname, sizeof(info.netname));
|
arc.Read (&info.netname, sizeof(info.netname));
|
||||||
}
|
}
|
||||||
arc << info.team << info.aimdist << info.color << info.skin << info.gender << info.neverswitch;
|
arc << info.team << info.aimdist << info.color << info.skin << info.gender << info.neverswitch;
|
||||||
|
if (SaveVersion >= 1333) arc << info.savedaimdist;
|
||||||
|
else info.savedaimdist = info.aimdist;
|
||||||
return arc;
|
return arc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -195,6 +195,7 @@ struct userinfo_t
|
||||||
{
|
{
|
||||||
char netname[MAXPLAYERNAME+1];
|
char netname[MAXPLAYERNAME+1];
|
||||||
BYTE team;
|
BYTE team;
|
||||||
|
int savedaimdist;
|
||||||
int aimdist;
|
int aimdist;
|
||||||
int color;
|
int color;
|
||||||
int skin;
|
int skin;
|
||||||
|
|
|
@ -243,12 +243,17 @@ enum
|
||||||
DF2_YES_RESPAWN_INVUL = 1 << 10, // Player is temporarily invulnerable when respawned
|
DF2_YES_RESPAWN_INVUL = 1 << 10, // Player is temporarily invulnerable when respawned
|
||||||
// DF2_COOP_SHOTGUNSTART = 1 << 11, // All playres start with a shotgun when they respawn
|
// DF2_COOP_SHOTGUNSTART = 1 << 11, // All playres start with a shotgun when they respawn
|
||||||
DF2_SAME_SPAWN_SPOT = 1 << 12, // Players respawn in the same place they died (co-op)
|
DF2_SAME_SPAWN_SPOT = 1 << 12, // Players respawn in the same place they died (co-op)
|
||||||
|
|
||||||
DF2_YES_KEEPFRAGS = 1 << 13, // Don't clear frags after each level
|
DF2_YES_KEEPFRAGS = 1 << 13, // Don't clear frags after each level
|
||||||
DF2_NO_RESPAWN = 1 << 14, // Player cannot respawn
|
DF2_NO_RESPAWN = 1 << 14, // Player cannot respawn
|
||||||
DF2_YES_LOSEFRAG = 1 << 15, // Lose a frag when killed. More incentive to try to
|
DF2_YES_LOSEFRAG = 1 << 15, // Lose a frag when killed. More incentive to try to not get yerself killed
|
||||||
// // not get yerself killed
|
|
||||||
DF2_INFINITE_INVENTORY = 1 << 16, // Infinite inventory.
|
DF2_INFINITE_INVENTORY = 1 << 16, // Infinite inventory.
|
||||||
|
DF2_KILL_MONSTERS = 1 << 17, // All monsters must be killed before the level exits.
|
||||||
|
DF2_NO_AUTOMAP = 1 << 18, // Players are allowed to see the automap.
|
||||||
|
DF2_NO_AUTOMAP_ALLIES = 1 << 19, // Allies can been seen on the automap.
|
||||||
|
DF2_DISALLOW_SPYING = 1 << 20, // You can spy on your allies.
|
||||||
|
DF2_CHASECAM = 1 << 21, // Players can use the chasecam cheat.
|
||||||
|
DF2_NOSUICIDE = 1 << 22, // Players are allowed to suicide.
|
||||||
|
DF2_NOAUTOAIM = 1 << 23, // Players cannot use autoaim.
|
||||||
};
|
};
|
||||||
|
|
||||||
// [RH] Compatibility flags.
|
// [RH] Compatibility flags.
|
||||||
|
|
|
@ -724,6 +724,10 @@ static void ChangeSpy (bool forward)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We may not be allowed to spy on anyone.
|
||||||
|
if (dmflags2 & DF2_DISALLOW_SPYING)
|
||||||
|
return;
|
||||||
|
|
||||||
// Otherwise, cycle to the next player.
|
// Otherwise, cycle to the next player.
|
||||||
bool checkTeam = !demoplayback && deathmatch;
|
bool checkTeam = !demoplayback && deathmatch;
|
||||||
int pnum = players[consoleplayer].camera->player - players;
|
int pnum = players[consoleplayer].camera->player - players;
|
||||||
|
|
|
@ -1028,17 +1028,25 @@ static menuitem_t DMFlagsItems[] = {
|
||||||
{ bitflag, "Infinite ammo", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_INFINITE_AMMO} },
|
{ bitflag, "Infinite ammo", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_INFINITE_AMMO} },
|
||||||
{ bitflag, "Infinite inventory", {&dmflags2}, {0}, {0}, {0}, {(value_t *)DF2_INFINITE_INVENTORY} },
|
{ bitflag, "Infinite inventory", {&dmflags2}, {0}, {0}, {0}, {(value_t *)DF2_INFINITE_INVENTORY} },
|
||||||
{ bitflag, "No monsters", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_NO_MONSTERS} },
|
{ bitflag, "No monsters", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_NO_MONSTERS} },
|
||||||
|
{ bitflag, "No monsters to exit", {&dmflags2}, {0}, {0}, {0}, {(value_t *)DF2_KILL_MONSTERS} },
|
||||||
{ bitflag, "Monsters respawn", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_MONSTERS_RESPAWN} },
|
{ bitflag, "Monsters respawn", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_MONSTERS_RESPAWN} },
|
||||||
{ bitflag, "No respawn", {&dmflags2}, {0}, {0}, {0}, {(value_t *)DF2_NO_RESPAWN} },
|
{ bitflag, "No respawn", {&dmflags2}, {0}, {0}, {0}, {(value_t *)DF2_NO_RESPAWN} },
|
||||||
{ bitflag, "Items respawn", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_ITEMS_RESPAWN} },
|
{ bitflag, "Items respawn", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_ITEMS_RESPAWN} },
|
||||||
{ bitflag, "Big powerups respawn", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_RESPAWN_SUPER} },
|
{ bitflag, "Big powerups respawn", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_RESPAWN_SUPER} },
|
||||||
{ bitflag, "Fast monsters", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_FAST_MONSTERS} },
|
{ bitflag, "Fast monsters", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_FAST_MONSTERS} },
|
||||||
{ bitflag, "Degeneration", {&dmflags2}, {0}, {0}, {0}, {(value_t *)DF2_YES_DEGENERATION} },
|
{ bitflag, "Degeneration", {&dmflags2}, {0}, {0}, {0}, {(value_t *)DF2_YES_DEGENERATION} },
|
||||||
|
{ bitflag, "Allow Autoaim", {&dmflags2}, {1}, {0}, {0}, {(value_t *)DF2_NOAUTOAIM} },
|
||||||
|
{ bitflag, "Disallow Suicide", {&dmflags2}, {1}, {0}, {0}, {(value_t *)DF2_NOSUICIDE} },
|
||||||
{ bitmask, "Allow jump", {&dmflags}, {3.0}, {DF_NO_JUMP|DF_YES_JUMP}, {0}, {DF_Jump} },
|
{ bitmask, "Allow jump", {&dmflags}, {3.0}, {DF_NO_JUMP|DF_YES_JUMP}, {0}, {DF_Jump} },
|
||||||
{ bitmask, "Allow crouch", {&dmflags}, {3.0}, {DF_NO_CROUCH|DF_YES_CROUCH}, {0}, {DF_Crouch} },
|
{ bitmask, "Allow crouch", {&dmflags}, {3.0}, {DF_NO_CROUCH|DF_YES_CROUCH}, {0}, {DF_Crouch} },
|
||||||
{ bitflag, "Allow freelook", {&dmflags}, {1}, {0}, {0}, {(value_t *)DF_NO_FREELOOK} },
|
{ bitflag, "Allow freelook", {&dmflags}, {1}, {0}, {0}, {(value_t *)DF_NO_FREELOOK} },
|
||||||
{ bitflag, "Allow FOV", {&dmflags}, {1}, {0}, {0}, {(value_t *)DF_NO_FOV} },
|
{ bitflag, "Allow FOV", {&dmflags}, {1}, {0}, {0}, {(value_t *)DF_NO_FOV} },
|
||||||
{ bitflag, "Allow BFG aiming", {&dmflags2}, {1}, {0}, {0}, {(value_t *)DF2_NO_FREEAIMBFG} },
|
{ bitflag, "Allow BFG aiming", {&dmflags2}, {1}, {0}, {0}, {(value_t *)DF2_NO_FREEAIMBFG} },
|
||||||
|
{ bitflag, "Allow automap", {&dmflags2}, {1}, {0}, {0}, {(value_t *)DF2_NO_AUTOMAP} },
|
||||||
|
{ bitflag, "Automap allies", {&dmflags2}, {1}, {0}, {0}, {(value_t *)DF2_NO_AUTOMAP_ALLIES} },
|
||||||
|
{ bitflag, "Allow spying", {&dmflags2}, {1}, {0}, {0}, {(value_t *)DF2_DISALLOW_SPYING} },
|
||||||
|
{ bitflag, "Chasecam cheat", {&dmflags2}, {0}, {0}, {0}, {(value_t *)DF2_CHASECAM} },
|
||||||
|
|
||||||
{ redtext, " ", {NULL}, {0}, {0}, {0}, {NULL} },
|
{ redtext, " ", {NULL}, {0}, {0}, {0}, {NULL} },
|
||||||
{ whitetext,"Deathmatch Settings", {NULL}, {0}, {0}, {0}, {NULL} },
|
{ whitetext,"Deathmatch Settings", {NULL}, {0}, {0}, {0}, {NULL} },
|
||||||
{ bitflag, "Weapons stay", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_WEAPONS_STAY} },
|
{ bitflag, "Weapons stay", {&dmflags}, {0}, {0}, {0}, {(value_t *)DF_WEAPONS_STAY} },
|
||||||
|
|
|
@ -1451,6 +1451,10 @@ CCMD (kill)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// If suiciding is disabled, then don't do it.
|
||||||
|
if (dmflags2 & DF2_NOSUICIDE)
|
||||||
|
return;
|
||||||
|
|
||||||
// Kill the player
|
// Kill the player
|
||||||
Net_WriteByte (DEM_SUICIDE);
|
Net_WriteByte (DEM_SUICIDE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,6 +135,10 @@ bool CheckIfExitIsGood (AActor *self, level_info_t *info)
|
||||||
if (self == NULL)
|
if (self == NULL)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
// We must kill all monsters to exit the level.
|
||||||
|
if ((dmflags2 & DF2_KILL_MONSTERS) && level.killed_monsters != level.total_monsters)
|
||||||
|
return false;
|
||||||
|
|
||||||
// Is this a deathmatch game and we're not allowed to exit?
|
// Is this a deathmatch game and we're not allowed to exit?
|
||||||
if ((deathmatch || alwaysapplydmflags) && (dmflags & DF_NO_EXIT))
|
if ((deathmatch || alwaysapplydmflags) && (dmflags & DF_NO_EXIT))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue