alias cl_hook_gamestart_dom
alias cl_hook_gamestart_ctf
alias cl_hook_gamestart_lms
-alias cl_hook_gamestart_arena
alias cl_hook_gamestart_ca
alias cl_hook_gamestart_kh
alias cl_hook_gamestart_ons
alias sv_hook_gamestart_dom
alias sv_hook_gamestart_ctf
alias sv_hook_gamestart_lms
-alias sv_hook_gamestart_arena
alias sv_hook_gamestart_ca
alias sv_hook_gamestart_kh
alias sv_hook_gamestart_ons
seta leadlimit_override -1 "Lead limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
seta capturelimit_override -1 "Capture limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
seta captureleadlimit_override -1 "Capture llead imit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
-seta g_arena_point_limit -1 "Arena point limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
-seta g_arena_point_leadlimit -1 "Arena point lead limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
seta g_domination_point_limit -1 "Domination point limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
seta g_domination_point_leadlimit -1 "Domination point lead limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
seta g_keyhunt_point_limit -1 "Keyhunt point limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
set g_kh_respawn_delay 0
set g_kh_respawn_waves 0
set g_kh_weapon_stay 0
-set g_arena_respawn_delay 0
-set g_arena_respawn_waves 0
-set g_arena_weapon_stay 0
set g_ca_respawn_delay 0
set g_ca_respawn_waves 0
set g_ca_weapon_stay 0
set g_ft_weapon_stay 0
-// =======
-// arena
-// =======
-set g_arena 0 "Arena: many one-on-one rounds are played to find the winner"
-set g_arena_maxspawned 2 "maximum number of players to spawn at once (the rest is spectating, waiting for their turn)"
-set g_arena_roundbased 1 "if disabled, the next player will spawn as soon as someone dies"
-set g_arena_round_timelimit 180
-set g_arena_warmup 5 "time, newly spawned players have to prepare themselves in round based matches"
-
-
// =========
// assault
// =========
set g_ca_teams 0
-
// ==================
// capture the flag
// ==================
s = sprintf(_("^1Press ^3%s^1 for gamemode info"), getcommandkey("server info", "+show_info"));
drawInfoMessage(s)
- if(gametype == MAPINFO_TYPE_ARENA)
- s = _("^1Wait for your turn to join");
- else if(gametype == MAPINFO_TYPE_LMS)
+ if(gametype == MAPINFO_TYPE_LMS)
{
entity sk;
sk = playerslots[player_localnum];
MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_FREEZETAG;
MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_CA;
}
- if( diameter < 4096)
- MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_ARENA;
if(spawnpoints >= 12 && diameter > 5120)
MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_KEYHUNT;
}
case MAPINFO_TYPE_DOMINATION: return "200 20 0";
case MAPINFO_TYPE_CTF: return "300 20 10 0";
case MAPINFO_TYPE_LMS: return "9 20 0";
- case MAPINFO_TYPE_ARENA: return "10 20 0";
case MAPINFO_TYPE_CA: return "10 20 0";
case MAPINFO_TYPE_KEYHUNT: return "1000 20 3 0";
case MAPINFO_TYPE_ASSAULT: return "20 0";
REGISTER_GAMETYPE(_("Last Man Standing"),lms,g_lms,LMS,"timelimit=20 lives=9 leadlimit=0");
#define g_lms IS_GAMETYPE(LMS)
-REGISTER_GAMETYPE(_("Arena"),arena,g_arena,ARENA,"timelimit=20 pointlimit=10 leadlimit=0");
-#define g_arena IS_GAMETYPE(ARENA)
-
REGISTER_GAMETYPE(_("Race"),rc,g_race,RACE,"timelimit=20 qualifying_timelimit=5 laplimit=7 teamlaplimit=15 leadlimit=0");
#define g_race IS_GAMETYPE(RACE)
// note: include only those that should be in the menu!
#define GAMETYPES \
- GAMETYPE(MAPINFO_TYPE_ARENA) \
GAMETYPE(MAPINFO_TYPE_ASSAULT) \
GAMETYPE(MAPINFO_TYPE_CTF) \
GAMETYPE(MAPINFO_TYPE_CA) \
float autocvar_g_antilag;
float autocvar_g_antilag_bullets;
float autocvar_g_antilag_nudge;
-float autocvar_g_arena_maxspawned;
-float autocvar_g_arena_point_leadlimit;
-float autocvar_g_arena_point_limit;
-float autocvar_g_arena_roundbased;
-float autocvar_g_arena_round_timelimit;
-float autocvar_g_arena_warmup;
float autocvar_g_balance_armor_blockpercent;
float autocvar_g_balance_armor_limit;
float autocvar_g_balance_armor_regen;
FOR_EACH_REALCLIENT(head)
{
- if(IS_PLAYER(head) || g_lms || g_arena || head.caplayer == 1)
+ if(IS_PLAYER(head) || g_lms || head.caplayer == 1)
++activerealplayers;
++realplayers;
}
{
if(IS_CLIENT(self))
{
- if(!IS_PLAYER(self) && !lockteams && !g_arena)
+ if(!IS_PLAYER(self) && !lockteams)
{
if(nJoinAllowed(self))
{
{
if(IS_CLIENT(self))
{
- if(g_arena) { return; }
if(g_lms)
{
if(self.lms_spectate_warning)
void ReadyRestart()
{
// no arena, assault support yet...
- if(g_arena | g_assault | gameover | intermission_running | race_completing)
+ if(g_assault | gameover | intermission_running | race_completing)
localcmd("restart\n");
else
localcmd("\nsv_hook_gamerestart\n");
// mapinfo
BADCVAR("fraglimit");
- BADCVAR("g_arena");
BADCVAR("g_assault");
BADCVAR("g_ca");
BADCVAR("g_ca_teams");
// does nothing visible
BADCVAR("captureleadlimit_override");
- BADCVAR("g_arena_point_leadlimit");
BADCVAR("g_balance_kill_delay");
BADCVAR("g_ca_point_leadlimit");
BADCVAR("g_ctf_captimerecord_always");
{
s = strcat(":player:see-labels:", GetPlayerScoreString(other, 0), ":");
s = strcat(s, ftos(rint(time - other.jointime)), ":");
- if(IS_PLAYER(other) || g_arena || other.caplayer == 1 || g_lms)
+ if(IS_PLAYER(other) || other.caplayer == 1 || g_lms)
s = strcat(s, ftos(other.team), ":");
else
s = strcat(s, "spectator:");
if(WinningConditionHelper_zeroisworst)
leadlimit = 0; // not supported in this mode
- if(g_dm || g_tdm || g_arena || g_ca || (g_race && !g_race_qualifying) || g_nexball)
+ if(g_dm || g_tdm || g_ca || (g_race && !g_race_qualifying) || g_nexball)
// these modes always score in increments of 1, thus this makes sense
{
if(leaderfrags != WinningConditionHelper_topscore)
g_warmup_allguns = cvar("g_warmup_allguns");
g_warmup_allow_timeout = cvar("g_warmup_allow_timeout");
- if ((g_race && g_race_qualifying == 2) || g_arena || g_assault || cvar("g_campaign"))
+ if ((g_race && g_race_qualifying == 2) || g_assault || cvar("g_campaign"))
warmup_stage = 0; // these modes cannot work together, sorry
g_pickup_respawntime_weapon = cvar("g_pickup_respawntime_weapon");
+++ /dev/null
-.float spawned;
-float maxspawned;
-float numspawned;
-.entity spawnqueue_next;
-.entity spawnqueue_prev;
-.float spawnqueue_in;
-entity spawnqueue_first;
-entity spawnqueue_last;
-
-void Spawnqueue_Insert(entity e)
-{
- if(e.spawnqueue_in)
- return;
- dprint(strcat("Into queue: ", e.netname, "\n"));
- e.spawnqueue_in = TRUE;
- e.spawnqueue_prev = spawnqueue_last;
- e.spawnqueue_next = world;
- if(spawnqueue_last)
- spawnqueue_last.spawnqueue_next = e;
- spawnqueue_last = e;
- if(!spawnqueue_first)
- spawnqueue_first = e;
-}
-
-void Spawnqueue_Remove(entity e)
-{
- if(!e.spawnqueue_in)
- return;
- dprint(strcat("Out of queue: ", e.netname, "\n"));
- e.spawnqueue_in = FALSE;
- if(e == spawnqueue_first)
- spawnqueue_first = e.spawnqueue_next;
- if(e == spawnqueue_last)
- spawnqueue_last = e.spawnqueue_prev;
- if(e.spawnqueue_prev)
- e.spawnqueue_prev.spawnqueue_next = e.spawnqueue_next;
- if(e.spawnqueue_next)
- e.spawnqueue_next.spawnqueue_prev = e.spawnqueue_prev;
- e.spawnqueue_next = world;
- e.spawnqueue_prev = world;
-}
-
-void Spawnqueue_Unmark(entity e)
-{
- if(!e.spawned)
- return;
- e.spawned = FALSE;
- numspawned = numspawned - 1;
-}
-
-void Spawnqueue_Mark(entity e)
-{
- if(e.spawned)
- return;
- e.spawned = TRUE;
- numspawned = numspawned + 1;
-}
-
-float Arena_CheckWinner()
-{
- entity e;
-
- if(round_handler_GetEndTime() > 0 && round_handler_GetEndTime() - time <= 0)
- {
- Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_ROUND_OVER);
- Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_ROUND_OVER);
- round_handler_Init(5, autocvar_g_arena_warmup, autocvar_g_arena_round_timelimit);
- return 1;
- }
-
- if(numspawned > 1)
- return 0;
-
- entity champion;
- champion = world;
- FOR_EACH_CLIENT(e)
- {
- if(e.spawned && IS_PLAYER(e))
- champion = e;
- }
-
- if(champion)
- {
- Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_ROUND_PLAYER_WIN, champion.netname);
- Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_ROUND_PLAYER_WIN, champion.netname);
- UpdateFrags(champion, +1);
- }
- else
- {
- Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_ROUND_TIED);
- Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_ROUND_TIED);
- }
- round_handler_Init(5, autocvar_g_arena_warmup, autocvar_g_arena_round_timelimit);
- return 1;
-}
-
-void Arena_AddChallengers()
-{
- entity e;
- if(time < 2) // don't force players to spawn so early
- return;
- e = self;
- while(numspawned < maxspawned && spawnqueue_first)
- {
- self = spawnqueue_first;
-
- bprint ("^4", self.netname, "^4 is the next challenger\n");
-
- Spawnqueue_Remove(self);
- Spawnqueue_Mark(self);
-
- self.classname = "player";
- PutClientInServer();
- }
- self = e;
-}
-
-float prev_numspawned;
-float Arena_CheckPlayers()
-{
- Arena_AddChallengers();
-
- if(numspawned >= 2)
- {
- if(prev_numspawned > 0)
- Kill_Notification(NOTIF_ALL, world, MSG_CENTER_CPID, CPID_MISSING_PLAYERS);
- prev_numspawned = -1;
- return 1;
- }
-
- if(prev_numspawned != numspawned && numspawned == 1)
- {
- if(maxspawned - numspawned > 0)
- Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_MISSING_PLAYERS, maxspawned - numspawned);
- prev_numspawned = numspawned;
- }
-
- return 0;
-}
-
-void Arena_RoundStart()
-{
- entity e;
- FOR_EACH_PLAYER(e)
- e.player_blocked = 0;
-}
-
-MUTATOR_HOOKFUNCTION(arena_ClientDisconnect)
-{
- Spawnqueue_Unmark(self);
- Spawnqueue_Remove(self);
- return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_reset_map_players)
-{
- FOR_EACH_CLIENT(self)
- {
- if(self.spawned)
- {
- PutClientInServer();
- self.player_blocked = 1;
- }
- else
- PutObserverInServer();
- }
- return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_MakePlayerObserver)
-{
- if(self.version_mismatch)
- {
- self.frags = FRAGS_SPECTATOR;
- Spawnqueue_Unmark(self);
- Spawnqueue_Remove(self);
- }
- else
- {
- self.frags = FRAGS_LMS_LOSER;
- Spawnqueue_Insert(self);
- }
- return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_PutClientInServer)
-{
- if(!self.spawned)
- self.classname = "observer";
- return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_ClientConnect)
-{
- self.classname = "observer";
- Spawnqueue_Insert(self);
- return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_PlayerSpawn)
-{
- Spawnqueue_Remove(self);
- Spawnqueue_Mark(self);
- if(arena_roundbased)
- self.player_blocked = 1;
- return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_ForbidPlayerScore_Clear)
-{
- return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_GiveFragsForKill)
-{
- if(arena_roundbased)
- frag_score = 0; // score will be given to the champion when the round ends
- return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_PlayerDies)
-{
- // put dead players in the spawn queue
- if(arena_roundbased)
- self.respawn_flags = (RESPAWN_FORCE | RESPAWN_SILENT);
- else
- self.respawn_flags = RESPAWN_SILENT;
- Spawnqueue_Unmark(self);
- return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_SV_StartFrame)
-{
- if(gameover) return 1;
- if(time <= game_starttime || !arena_roundbased)
- Arena_AddChallengers();
- return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_FilterItem)
-{
- if(autocvar_g_powerups <= 0)
- if(self.flags & FL_POWERUP)
- return TRUE;
-
- return FALSE;
-}
-
-void arena_Initialize()
-{
- maxspawned = max(2, autocvar_g_arena_maxspawned);
- arena_roundbased = autocvar_g_arena_roundbased;
- if(arena_roundbased)
- {
- round_handler_Spawn(Arena_CheckPlayers, Arena_CheckWinner, Arena_RoundStart);
- round_handler_Init(5, autocvar_g_arena_warmup, autocvar_g_arena_round_timelimit);
- }
-}
-
-MUTATOR_DEFINITION(gamemode_arena)
-{
- MUTATOR_HOOK(ClientDisconnect, arena_ClientDisconnect, CBC_ORDER_ANY);
- MUTATOR_HOOK(reset_map_players, arena_reset_map_players, CBC_ORDER_ANY);
- MUTATOR_HOOK(MakePlayerObserver, arena_MakePlayerObserver, CBC_ORDER_ANY);
- MUTATOR_HOOK(PutClientInServer, arena_PutClientInServer, CBC_ORDER_ANY);
- MUTATOR_HOOK(ClientConnect, arena_ClientConnect, CBC_ORDER_ANY);
- MUTATOR_HOOK(PlayerSpawn, arena_PlayerSpawn, CBC_ORDER_ANY);
- MUTATOR_HOOK(ForbidPlayerScore_Clear, arena_ForbidPlayerScore_Clear, CBC_ORDER_ANY);
- MUTATOR_HOOK(GiveFragsForKill, arena_GiveFragsForKill, CBC_ORDER_ANY);
- MUTATOR_HOOK(PlayerDies, arena_PlayerDies, CBC_ORDER_ANY);
- MUTATOR_HOOK(SV_StartFrame, arena_SV_StartFrame, CBC_ORDER_ANY);
- MUTATOR_HOOK(FilterItem, arena_FilterItem, CBC_ORDER_ANY);
-
- MUTATOR_ONADD
- {
- if(time > 1) // game loads at time 1
- error("This is a game type and it cannot be added at runtime.");
- arena_Initialize();
- }
-
- MUTATOR_ONREMOVE
- {
- print("This is a game type and it cannot be removed at runtime.");
- return -1;
- }
-
- return 0;
-}
+++ /dev/null
-// should be removed in the future, as other code should not have to care
-float arena_roundbased;
MUTATOR_DECLARATION(gamemode_assault);
-MUTATOR_DECLARATION(gamemode_arena);
MUTATOR_DECLARATION(gamemode_ca);
MUTATOR_DECLARATION(gamemode_keyhunt);
MUTATOR_DECLARATION(gamemode_freezetag);
mutators/base.qh
mutators/mutators.qh
mutators/gamemode_assault.qh
-mutators/gamemode_arena.qh
mutators/gamemode_ca.qh
mutators/gamemode_ctf.qh
mutators/gamemode_domination.qh
mutators/base.qc
mutators/gamemode_assault.qc
-mutators/gamemode_arena.qc
mutators/gamemode_ca.qc
mutators/gamemode_ctf.qc
mutators/gamemode_domination.qc
s = strcat(s, ":human");
else
s = strcat(s, ":bot");
- if(!IS_PLAYER(p) && !g_arena && p.caplayer != 1 && !g_lms)
+ if(!IS_PLAYER(p) && p.caplayer != 1 && !g_lms)
s = strcat(s, ":spectator");
}
else
{
- if(IS_PLAYER(p) || g_arena || p.caplayer == 1 || g_lms)
+ if(IS_PLAYER(p) || p.caplayer == 1 || g_lms)
s = GetPlayerScoreString(p, 2);
else
s = "-666";
}
else
{
- float mindist;
- if(g_arena && arena_roundbased)
- mindist = 800;
- else
- mindist = 100;
- firstspot = Spawn_FilterOutBadSpots(firstspot, mindist, teamcheck);
+ firstspot = Spawn_FilterOutBadSpots(firstspot, 100, teamcheck);
// there is 50/50 chance of choosing a random spot or the furthest spot
// (this means that roughly every other spawn will be furthest, so you
gametypename = "ffa";
if(teamplay)
gametypename = "team";
- if(g_arena)
- gametypename = "tournament";
if(g_ctf)
gametypename = "ctf";
if(maxclients == 1)
MUTATOR_ADD(gamemode_lms);
}
- if(g_arena)
- {
- fraglimit_override = autocvar_g_arena_point_limit;
- leadlimit_override = autocvar_g_arena_point_leadlimit;
- MUTATOR_ADD(gamemode_arena);
- }
-
if(g_ca)
{
ActivateTeamplay();