From: terencehill Date: Sun, 5 Jan 2014 18:00:43 +0000 (+0100) Subject: Merge branch 'master' into terencehill/ca_ft_fixes X-Git-Tag: xonotic-v0.8.0~243^2~1^2 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=ace43a0b9fc339c80df65741952b07dd2bc5f52f;hp=-c Merge branch 'master' into terencehill/ca_ft_fixes Conflicts: gamemodes.cfg qcsrc/server/g_world.qc qcsrc/server/mutators/gamemode_arena.qc qcsrc/server/mutators/gamemode_ca.qc --- ace43a0b9fc339c80df65741952b07dd2bc5f52f diff --combined gamemodes.cfg index 7d1194f0a4,feed7488b5..b5b460fe3a --- a/gamemodes.cfg +++ b/gamemodes.cfg @@@ -27,7 -27,6 +27,6 @@@ alias cl_hook_gamestart_td 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 @@@ -48,7 -47,6 +47,6 @@@ alias sv_hook_gamestart_td 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 @@@ -73,8 -71,6 +71,6 @@@ seta fraglimit_override -1 "Frag limit 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)" @@@ -110,9 -106,6 +106,6 @@@ set g_ka_weapon_stay 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 @@@ -136,16 -129,6 +129,6 @@@ set g_ft_respawn_delay 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 "round time limit in seconds" - set g_arena_warmup 5 "time, newly spawned players have to prepare themselves in round based matches" - - // ========= // assault // ========= @@@ -161,13 -144,11 +144,12 @@@ set g_ca_point_leadlimit set g_ca_spectate_enemies 0 "Allow spectating enemy player by dead player during clan arena games." set g_ca_warmup 10 "how long the players will have time to run around the map before the round starts" set g_ca_damage2score_multiplier 0.01 -set g_ca_round_timelimit 180 +set g_ca_round_timelimit 180 "round time limit in seconds" seta g_ca_teams_override 0 +set g_ca_team_spawns 0 "when 1, players spawn from the team spawnpoints of the map, if any" set g_ca_teams 0 - // ================== // capture the flag // ================== @@@ -250,7 -231,7 +232,7 @@@ set g_cts_finish_kill_delay 10 "preven // ========================== set g_dm 1 "Deathmatch: killing any other player is one frag, player with most frags wins" set g_tdm_teams 2 "how many teams are in team deathmatch (set by mapinfo)" -set g_tdm_team_spawns 0 "when 1, a map can define team spawnpoints for TDM" +set g_tdm_team_spawns 0 "when 1, players spawn from the team spawnpoints of the map, if any" seta g_tdm_teams_override 0 "how many teams are in team deathmatch" @@@ -281,11 -262,10 +263,11 @@@ set g_freezetag_revive_clearspeed 1.6 " set g_freezetag_revive_extra_size 100 "Distance in qu that you can stand from a frozen teammate to keep reviving him" set g_freezetag_revive_falldamage 0 "Enable reviving from this amount of fall damage" set g_freezetag_revive_falldamage_health 40 "Amount of health player has if they revived from falling" -set g_freezetag_round_timelimit 180 +set g_freezetag_round_timelimit 180 "round time limit in seconds" set g_freezetag_frozen_force 0.6 "How much to multiply the force on a frozen player with" set g_freezetag_frozen_maxtime 60 "frozen players will be automatically unfrozen after this time in seconds" seta g_freezetag_teams_override 0 +set g_freezetag_team_spawns 0 "when 1, players spawn from the team spawnpoints of the map, if any" set g_freezetag_teams 0 diff --combined qcsrc/server/autocvars.qh index f5a29b277e,ada0d4bda9..bd1143d4a8 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@@ -70,14 -70,7 +70,7 @@@ float autocvar_ekg #define autocvar_fraglimit_override cvar("fraglimit_override") float autocvar_g_allow_oldnexbeam; 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; @@@ -90,30 -83,26 +83,26 @@@ float autocvar_g_balance_armor_start float autocvar_g_balance_rifle_bursttime; float autocvar_g_balance_rifle_primary_ammo; float autocvar_g_balance_rifle_primary_animtime; - float autocvar_g_balance_rifle_primary_bulletconstant; float autocvar_g_balance_rifle_primary_bullethail; float autocvar_g_balance_rifle_primary_burstcost; float autocvar_g_balance_rifle_primary_damage; float autocvar_g_balance_rifle_primary_force; - float autocvar_g_balance_rifle_primary_lifetime; float autocvar_g_balance_rifle_primary_refire; float autocvar_g_balance_rifle_primary_shots; - float autocvar_g_balance_rifle_primary_speed; + float autocvar_g_balance_rifle_primary_solidpenetration; float autocvar_g_balance_rifle_primary_spread; float autocvar_g_balance_rifle_primary_tracer; float autocvar_g_balance_rifle_secondary; float autocvar_g_balance_rifle_secondary_ammo; float autocvar_g_balance_rifle_secondary_animtime; - float autocvar_g_balance_rifle_secondary_bulletconstant; float autocvar_g_balance_rifle_secondary_bullethail; float autocvar_g_balance_rifle_secondary_burstcost; float autocvar_g_balance_rifle_secondary_damage; float autocvar_g_balance_rifle_secondary_force; - float autocvar_g_balance_rifle_secondary_lifetime; float autocvar_g_balance_rifle_secondary_reload; float autocvar_g_balance_rifle_secondary_refire; float autocvar_g_balance_rifle_secondary_shots; - float autocvar_g_balance_rifle_secondary_speed; + float autocvar_g_balance_rifle_secondary_solidpenetration; float autocvar_g_balance_rifle_secondary_spread; float autocvar_g_balance_rifle_secondary_tracer; float autocvar_g_balance_rifle_reload_ammo; @@@ -347,6 -336,7 +336,6 @@@ float autocvar_g_balance_health_regenst float autocvar_g_balance_health_rot; float autocvar_g_balance_health_rotlinear; float autocvar_g_balance_health_rotstable; -float autocvar_g_balance_health_start; float autocvar_g_balance_hlac_primary_ammo; float autocvar_g_balance_hlac_primary_animtime; float autocvar_g_balance_hlac_primary_damage; @@@ -627,12 -617,11 +616,11 @@@ float autocvar_g_balance_seeker_reload_ float autocvar_g_balance_selfdamagepercent; float autocvar_g_balance_shotgun_primary_ammo; float autocvar_g_balance_shotgun_primary_animtime; - float autocvar_g_balance_shotgun_primary_bulletconstant; float autocvar_g_balance_shotgun_primary_bullets; float autocvar_g_balance_shotgun_primary_damage; float autocvar_g_balance_shotgun_primary_force; float autocvar_g_balance_shotgun_primary_refire; - float autocvar_g_balance_shotgun_primary_speed; + float autocvar_g_balance_shotgun_primary_solidpenetration; float autocvar_g_balance_shotgun_primary_spread; float autocvar_g_balance_shotgun_secondary; float autocvar_g_balance_shotgun_secondary_animtime; @@@ -660,7 -649,6 +648,6 @@@ float autocvar_g_balance_tuba_edgedamag float autocvar_g_balance_tuba_force; float autocvar_g_balance_tuba_radius; float autocvar_g_balance_tuba_refire; - float autocvar_g_balance_uzi_bulletconstant; float autocvar_g_balance_uzi_burst; float autocvar_g_balance_uzi_burst_ammo; float autocvar_g_balance_uzi_burst_animtime; @@@ -674,7 -662,7 +661,7 @@@ float autocvar_g_balance_uzi_first_forc float autocvar_g_balance_uzi_first_refire; float autocvar_g_balance_uzi_first_spread; float autocvar_g_balance_uzi_mode; - float autocvar_g_balance_uzi_speed; + float autocvar_g_balance_uzi_solidpenetration; float autocvar_g_balance_uzi_spread_add; float autocvar_g_balance_uzi_spread_max; float autocvar_g_balance_uzi_spread_min; @@@ -687,7 -675,6 +674,6 @@@ float autocvar_g_balance_uzi_reload_amm float autocvar_g_balance_uzi_reload_time; float autocvar_g_ballistics_density_corpse; float autocvar_g_ballistics_density_player; - float autocvar_g_ballistics_materialconstant; float autocvar_g_ballistics_mindistance; float autocvar_g_ban_default_bantime; float autocvar_g_ban_default_masksize; @@@ -708,7 -695,6 +694,7 @@@ float autocvar_g_ca_round_timelimit float autocvar_g_ca_spectate_enemies; float autocvar_g_ca_teams; float autocvar_g_ca_teams_override; +float autocvar_g_ca_team_spawns; float autocvar_g_ca_warmup; float autocvar_g_campaign; #define autocvar_g_campaign_forceteam cvar("g_campaign_forceteam") @@@ -808,6 -794,7 +794,7 @@@ float autocvar_g_domination_point_leadl float autocvar_g_domination_point_rate; float autocvar_g_domination_teams_override; float autocvar_g_forced_respawn; + float autocvar_g_respawn_delay_max; string autocvar_g_forced_team_blue; string autocvar_g_forced_team_otherwise; string autocvar_g_forced_team_pink; @@@ -825,7 -812,6 +812,7 @@@ float autocvar_g_freezetag_revive_clear float autocvar_g_freezetag_round_timelimit; float autocvar_g_freezetag_teams; float autocvar_g_freezetag_teams_override; +float autocvar_g_freezetag_team_spawns; float autocvar_g_freezetag_warmup; #define autocvar_g_friendlyfire cvar("g_friendlyfire") #define autocvar_g_friendlyfire_virtual cvar("g_friendlyfire_virtual") @@@ -1205,7 -1191,6 +1192,6 @@@ float autocvar_timelimit_overtimes float autocvar_timelimit_suddendeath; #define autocvar_utf8_enable cvar("utf8_enable") float autocvar_waypoint_benchmark; - float autocvar_welcome_message_time; float autocvar_sv_gameplayfix_gravityunaffectedbyticrate; float autocvar_g_trueaim_minrange; float autocvar_g_debug_defaultsounds; diff --combined qcsrc/server/cl_impulse.qc index a80f462f37,a4376bd418..dc8a1e072b --- a/qcsrc/server/cl_impulse.qc +++ b/qcsrc/server/cl_impulse.qc @@@ -46,20 -46,19 +46,20 @@@ void ImpulseCommands (void return; self.impulse = 0; - // forbid impulses when not in round time + // allow only weapon change impulses when not in round time if(round_handler_IsActive() && !round_handler_IsRoundStarted()) + if(imp == 17 || (imp >= 20 && imp < 200) || imp > 253) return; if (timeout_status == TIMEOUT_ACTIVE) //don't allow any impulses while the game is paused return; - + if(self.vehicle) if(self.vehicle.deadflag == DEAD_NO) if(self.vehicle.vehicles_impusle) if(self.vehicle.vehicles_impusle(imp)) return; - + if(CheatImpulse(imp)) { } @@@ -169,7 -168,7 +169,7 @@@ case 33: if(self.deadflag == DEAD_NO && teamplay) { - if not(MUTATOR_CALLHOOK(HelpMePing)) + if (!MUTATOR_CALLHOOK(HelpMePing)) { wp = WaypointSprite_Attach("helpme", TRUE, RADARICON_HELPME, '1 0.5 0'); if(!wp) @@@ -257,7 -256,7 +257,7 @@@ case 104: e = navigation_findnearestwaypoint(self, FALSE); if (e) - if not(e.wpflags & WAYPOINTFLAG_GENERATED) + if (!(e.wpflags & WAYPOINTFLAG_GENERATED)) { bprint(strcat("Waypoint removed at ",vtos(e.origin),"\n")); waypoint_remove(e); @@@ -300,7 -299,7 +300,7 @@@ { print("cannot reach me: ", etos(e), " ", vtos(e.origin), "\n"); e.colormod_x = 8; - if not(e.effects & EF_NODEPTHTEST) // not already reported before + if(!(e.effects & EF_NODEPTHTEST)) // not already reported before ++m; e.effects |= EF_NODEPTHTEST | EF_RED; ++i; diff --combined qcsrc/server/g_world.qc index e7a3ad96cc,42c2d7a8e4..c51df593f0 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@@ -253,7 -253,6 +253,6 @@@ void cvar_changes_init( // mapinfo BADCVAR("fraglimit"); - BADCVAR("g_arena"); BADCVAR("g_assault"); BADCVAR("g_ca"); BADCVAR("g_ca_teams"); @@@ -304,7 -303,6 +303,6 @@@ // 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"); @@@ -323,7 -321,6 +321,6 @@@ BADCVAR("sv_fraginfo"); BADCVAR("sv_timeout"); BADPREFIX("sv_timeout_"); - BADCVAR("welcome_message_time"); BADPREFIX("crypto_"); BADPREFIX("g_chat_"); BADPREFIX("g_ctf_captimerecord_"); @@@ -429,7 -426,7 +426,7 @@@ BADCVAR("g_nix"); BADCVAR("g_grappling_hook"); BADCVAR("g_jetpack"); - + #undef BADPREFIX #undef BADCVAR @@@ -1049,6 -1046,8 +1046,8 @@@ float() MaplistMethod_Iterate = // usua { float pass, i; + dprint("Trying MaplistMethod_Iterate\n"); + for(pass = 1; pass <= 2; ++pass) { for(i = 1; i < Map_Count; ++i) @@@ -1064,6 -1063,8 +1063,8 @@@ float() MaplistMethod_Repeat = // fallback method { + dprint("Trying MaplistMethod_Repeat\n"); + if(Map_Check(Map_Current, 2)) return Map_Current; return -2; @@@ -1073,6 -1074,8 +1074,8 @@@ float() MaplistMethod_Random = // rando { float i, imax; + dprint("Trying MaplistMethod_Random\n"); + imax = 42; for(i = 0; i <= imax; ++i) @@@ -1091,6 -1094,8 +1094,8 @@@ float(float exponent) MaplistMethod_Shu { float i, j, imax, insertpos; + dprint("Trying MaplistMethod_Shuffle\n"); + imax = 42; for(i = 0; i <= imax; ++i) @@@ -1125,10 -1130,14 +1130,14 @@@ void Maplist_Init() { Map_Count = tokenizebyseparator(autocvar_g_maplist, " "); - if(Map_Count == 0) + float i; + for (i = 0; i < Map_Count; ++i) + if (Map_Check(i, 2)) + break; + if (i == Map_Count) { - bprint( "Maplist is empty! Resetting it to default map list.\n" ); - cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); + bprint( "Maplist contains no usable maps! Resetting it to default map list.\n" ); + cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags() | MAPINFO_FLAG_NOAUTOMAPLIST)); if(autocvar_g_maplist_shuffle) ShuffleMaplist(); localcmd("\nmenu_cmd sync\n"); @@@ -1231,31 -1240,12 +1240,12 @@@ void GotoNextMap(float reinit return; alreadychangedlevel = TRUE; - { - string nextMap; - float allowReset; - - for(allowReset = 1; allowReset >= 0; --allowReset) - { - nextMap = GetNextMap(); - if(nextMap != "") - break; + string nextMap; - if(allowReset) - { - bprint( "Maplist contains no single playable map! Resetting it to default map list.\n" ); - cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); - if(autocvar_g_maplist_shuffle) - ShuffleMaplist(); - localcmd("\nmenu_cmd sync\n"); - } - else - { - error("Everything is broken - not even the default map list works. Please report this to the developers."); - } - } - Map_Goto(reinit); - } + nextMap = GetNextMap(); + if(nextMap == "") + error("Everything is broken - cannot find a next map. Please report this to the developers."); + Map_Goto(reinit); } @@@ -1409,7 -1399,7 +1399,7 @@@ void DumpStats(float final { 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:"); @@@ -1522,7 -1512,7 +1512,7 @@@ void NextLevel( PlayerStats_AddGlobalInfo(e); PlayerStats_Shutdown(); WeaponStats_Shutdown(); - + Kill_Notification(NOTIF_ALL, world, MSG_CENTER, 0); // kill all centerprints now if(autocvar_sv_eventlog) @@@ -1863,7 -1853,7 +1853,7 @@@ float WinningCondition_Scores(float lim if(WinningConditionHelper_zeroisworst) leadlimit = 0; // not supported in this mode - if(g_dm || g_tdm || g_arena || g_ca || g_freezetag || (g_race && !g_race_qualifying) || g_nexball) - if(g_dm || g_tdm || g_ca || (g_race && !g_race_qualifying) || g_nexball) ++ if(g_dm || g_tdm || g_ca || g_freezetag || (g_race && !g_race_qualifying) || g_nexball) // these modes always score in increments of 1, thus this makes sense { if(leaderfrags != WinningConditionHelper_topscore) @@@ -2246,7 -2236,7 +2236,7 @@@ string MapVote_Suggest(string m if(mapvote_initialized) return "Can't suggest - voting is already in progress!"; m = MapInfo_FixName(m); - if not(m) + if (!m) return "The map you suggested is not available on this server."; if(!autocvar_g_maplist_votable_suggestions_override_mostrecent) if(Map_IsRecent(m)) diff --combined qcsrc/server/mutators/gamemode_ca.qc index 0a89494a21,9fbd483cab..9df6b42a21 --- a/qcsrc/server/mutators/gamemode_ca.qc +++ b/qcsrc/server/mutators/gamemode_ca.qc @@@ -144,7 -144,6 +144,7 @@@ MUTATOR_HOOKFUNCTION(ca_PutClientInServ if(!allowed_to_spawn) { self.classname = "observer"; + if(self.jointime != time) //not when connecting if(!self.caplayer) { self.caplayer = 0.5; @@@ -159,7 -158,6 +159,7 @@@ MUTATOR_HOOKFUNCTION(ca_reset_map_playe { FOR_EACH_CLIENT(self) { + self.killcount = 0; if(self.caplayer) { self.classname = "player"; @@@ -184,8 -182,12 +184,8 @@@ MUTATOR_HOOKFUNCTION(ca_reset_map_globa MUTATOR_HOOKFUNCTION(ca_GetTeamCount) { - ca_teams = autocvar_g_ca_teams_override; - if(ca_teams < 2) - ca_teams = autocvar_g_ca_teams; - ca_teams = bound(2, ca_teams, 4); ret_float = ca_teams; - return 1; + return 0; } MUTATOR_HOOKFUNCTION(ca_PlayerDies) @@@ -222,14 -224,16 +222,14 @@@ MUTATOR_HOOKFUNCTION(ca_GiveFragsForKil MUTATOR_HOOKFUNCTION(ca_SetStartItems) { - start_health = cvar("g_lms_start_health"); - start_armorvalue = cvar("g_lms_start_armor"); - - start_ammo_shells = cvar("g_lms_start_ammo_shells"); - start_ammo_nails = cvar("g_lms_start_ammo_nails"); - start_ammo_rockets = cvar("g_lms_start_ammo_rockets"); - start_ammo_cells = cvar("g_lms_start_ammo_cells"); - start_ammo_fuel = cvar("g_lms_start_ammo_fuel"); - start_items &= ~IT_UNLIMITED_AMMO; + start_health = warmup_start_health = cvar("g_lms_start_health"); + start_armorvalue = warmup_start_armorvalue = cvar("g_lms_start_armor"); + start_ammo_shells = warmup_start_ammo_shells = cvar("g_lms_start_ammo_shells"); + start_ammo_nails = warmup_start_ammo_nails = cvar("g_lms_start_ammo_nails"); + start_ammo_rockets = warmup_start_ammo_rockets = cvar("g_lms_start_ammo_rockets"); + start_ammo_cells = warmup_start_ammo_cells = cvar("g_lms_start_ammo_cells"); + start_ammo_fuel = warmup_start_ammo_fuel = cvar("g_lms_start_ammo_fuel"); return 0; } @@@ -240,9 -244,9 +240,9 @@@ MUTATOR_HOOKFUNCTION(ca_PlayerDamage if(frag_target.deadflag == DEAD_NO) if(frag_target == frag_attacker || SAME_TEAM(frag_target, frag_attacker) || frag_deathtype == DEATH_FALL) frag_damage = 0; - + frag_mirrordamage = 0; - + return FALSE; } @@@ -251,34 -255,40 +251,34 @@@ MUTATOR_HOOKFUNCTION(ca_FilterItem if(autocvar_g_powerups <= 0) if(self.flags & FL_POWERUP) return TRUE; - + if(autocvar_g_pickup_items <= 0) return TRUE; - + return FALSE; } MUTATOR_HOOKFUNCTION(ca_PlayerDamage_SplitHealthArmor) { float excess = max(0, frag_damage - damage_take - damage_save); - + if(frag_target != frag_attacker && IS_PLAYER(frag_attacker)) PlayerTeamScore_Add(frag_attacker, SP_SCORE, ST_SCORE, (frag_damage - excess) * autocvar_g_ca_damage2score_multiplier); - + return FALSE; } -// scoreboard setup -void ca_ScoreRules() -{ - ScoreRules_basics(2, SFL_SORT_PRIO_PRIMARY, 0, TRUE); - ScoreInfo_SetLabel_TeamScore (ST_CA_ROUNDS, "rounds", SFL_SORT_PRIO_PRIMARY); - ScoreRules_basics_end(); -} - -void ca_DelayedInit() // Do this check with a delay so we can wait for teams to be set up. -{ - ca_ScoreRules(); -} - void ca_Initialize() { allowed_to_spawn = TRUE; + ca_teams = autocvar_g_ca_teams_override; + if(ca_teams < 2) + ca_teams = autocvar_g_ca_teams; + ca_teams = bound(2, ca_teams, 4); + ret_float = ca_teams; + ScoreRules_ca(ca_teams); + round_handler_Spawn(CA_CheckTeams, CA_CheckWinner, CA_RoundStart); round_handler_Init(5, autocvar_g_ca_warmup, autocvar_g_ca_round_timelimit); @@@ -286,6 -296,8 +286,6 @@@ addstat(STAT_BLUEALIVE, AS_INT, bluealive_stat); addstat(STAT_YELLOWALIVE, AS_INT, yellowalive_stat); addstat(STAT_PINKALIVE, AS_INT, pinkalive_stat); - - InitializeEntity(world, ca_DelayedInit, INITPRIO_GAMETYPE); } MUTATOR_DEFINITION(gamemode_ca) diff --combined qcsrc/server/mutators/gamemode_freezetag.qc index 406cf07ced,9bc0652237..bfc2601e9a --- a/qcsrc/server/mutators/gamemode_freezetag.qc +++ b/qcsrc/server/mutators/gamemode_freezetag.qc @@@ -100,10 -100,7 +100,10 @@@ float freezetag_CheckWinner( Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_ROUND_OVER); Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_ROUND_OVER); FOR_EACH_PLAYER(e) + { e.freezetag_frozen_timeout = 0; + e.freezetag_revive_progress = 0; + } round_handler_Init(5, autocvar_g_freezetag_warmup, autocvar_g_freezetag_round_timelimit); return 1; } @@@ -126,10 -123,7 +126,10 @@@ } FOR_EACH_PLAYER(e) + { e.freezetag_frozen_timeout = 0; + e.freezetag_revive_progress = 0; + } round_handler_Init(5, autocvar_g_freezetag_warmup, autocvar_g_freezetag_round_timelimit); return 1; } @@@ -407,7 -401,6 +407,7 @@@ MUTATOR_HOOKFUNCTION(freezetag_reset_ma { FOR_EACH_PLAYER(self) { + self.killcount = 0; if (self.freezetag_frozen) freezetag_Unfreeze(world); self.freezetag_frozen_timeout = -1; @@@ -475,10 -468,7 +475,10 @@@ MUTATOR_HOOKFUNCTION(freezetag_PlayerPr if(n && self.freezetag_frozen) // OK, there is at least one teammate reviving us { self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress + frametime * max(1/60, autocvar_g_freezetag_revive_speed), 1); - self.health = max(1, self.freezetag_revive_progress * autocvar_g_balance_health_start); + if(warmup_stage) + self.health = max(1, self.freezetag_revive_progress * warmup_start_health); + else + self.health = max(1, self.freezetag_revive_progress * start_health); if(self.freezetag_revive_progress >= 1) { @@@ -519,10 -509,7 +519,10 @@@ else if(!n && self.freezetag_frozen) // only if no teammate is nearby will we reset { self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress - frametime * autocvar_g_freezetag_revive_clearspeed, 1); - self.health = max(1, self.freezetag_revive_progress * autocvar_g_balance_health_start); + if(warmup_stage) + self.health = max(1, self.freezetag_revive_progress * warmup_start_health); + else + self.health = max(1, self.freezetag_revive_progress * start_health); } else if(!n) { @@@ -544,7 -531,7 +544,7 @@@ MUTATOR_HOOKFUNCTION(freezetag_PlayerPh } else self.movement = '0 0 0'; - + self.disableclientprediction = 1; } return 1; @@@ -564,7 -551,7 +564,7 @@@ MUTATOR_HOOKFUNCTION(freezetag_PlayerDa Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_FREEZETAG_REVIVED_FALL, frag_target.netname); Send_Notification(NOTIF_ONE, frag_target, MSG_CENTER, CENTER_FREEZETAG_REVIVE_FALL); } - + frag_damage = 0; frag_force = frag_force * autocvar_g_freezetag_frozen_force; } @@@ -575,7 -562,7 +575,7 @@@ MUTATOR_HOOKFUNCTION(freezetag_PlayerJu { if(self.freezetag_frozen) return TRUE; // no jumping in freezetag when frozen - + return FALSE; } @@@ -595,7 -582,7 +595,7 @@@ MUTATOR_HOOKFUNCTION(freezetag_ItemTouc MUTATOR_HOOKFUNCTION(freezetag_BotRoles) { - if not(self.deadflag) + if (!self.deadflag) { if (random() < 0.5) self.havocbot_role = havocbot_role_ft_freeing; @@@ -615,6 -602,10 +615,6 @@@ MUTATOR_HOOKFUNCTION(freezetag_Spectate MUTATOR_HOOKFUNCTION(freezetag_GetTeamCount) { - freezetag_teams = autocvar_g_freezetag_teams_override; - if(freezetag_teams < 2) - freezetag_teams = autocvar_g_freezetag_teams; - freezetag_teams = bound(2, freezetag_teams, 4); ret_float = freezetag_teams; return 0; } @@@ -623,19 -614,14 +623,19 @@@ MUTATOR_HOOKFUNCTION(freezetag_VehicleT { if(other.freezetag_frozen) return TRUE; - + return FALSE; } void freezetag_Initialize() { precache_model("models/ice/ice.md3"); - ScoreRules_freezetag(); + + freezetag_teams = autocvar_g_freezetag_teams_override; + if(freezetag_teams < 2) + freezetag_teams = autocvar_g_freezetag_teams; + freezetag_teams = bound(2, freezetag_teams, 4); + ScoreRules_freezetag(freezetag_teams); round_handler_Spawn(freezetag_CheckTeams, freezetag_CheckWinner, func_null); round_handler_Init(5, autocvar_g_freezetag_warmup, autocvar_g_freezetag_round_timelimit); diff --combined qcsrc/server/mutators/gamemode_lms.qc index 850b4e21e2,928c78b349..e782fbf7b7 --- a/qcsrc/server/mutators/gamemode_lms.qc +++ b/qcsrc/server/mutators/gamemode_lms.qc @@@ -22,7 -22,7 +22,7 @@@ MUTATOR_HOOKFUNCTION(lms_ResetMap { lms_lowest_lives = 999; lms_next_place = player_count; - + return FALSE; } @@@ -32,7 -32,7 +32,7 @@@ MUTATOR_HOOKFUNCTION(lms_ResetPlayers FOR_EACH_CLIENT(self) if(IS_PLAYER(self)) PlayerScore_Add(self, SP_LMS_LIVES, LMS_NewPlayerLives()); - + return FALSE; } @@@ -49,7 -49,7 +49,7 @@@ MUTATOR_HOOKFUNCTION(lms_PlayerPreSpawn MUTATOR_HOOKFUNCTION(lms_PlayerDies) { self.respawn_flags |= RESPAWN_FORCE; - + return FALSE; } @@@ -60,13 -60,13 +60,13 @@@ MUTATOR_HOOKFUNCTION(lms_RemovePlayer self.frags = FRAGS_SPECTATOR; else self.frags = FRAGS_LMS_LOSER; - + if(self.killcount != -666) if(PlayerScore_Add(self, SP_LMS_RANK, 0) > 0 && self.lms_spectate_warning != 2) Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_LMS_NOLIVES, self.netname); else Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_LMS_FORFEIT, self.netname); - + return FALSE; } @@@ -74,13 -74,13 +74,13 @@@ MUTATOR_HOOKFUNCTION(lms_ClientConnect { self.classname = "player"; campaign_bots_may_start = 1; - + if(PlayerScore_Add(self, SP_LMS_LIVES, LMS_NewPlayerLives()) <= 0) { PlayerScore_Add(self, SP_LMS_RANK, 666); self.frags = FRAGS_SPECTATOR; } - + return FALSE; } @@@ -88,7 -88,7 +88,7 @@@ MUTATOR_HOOKFUNCTION(lms_PlayerThink { if(self.deadflag == DEAD_DYING) self.deadflag = DEAD_RESPAWNING; - + return FALSE; } @@@ -115,20 -115,20 +115,20 @@@ MUTATOR_HOOKFUNCTION(lms_GiveFragsForKi --lms_next_place; } frag_score = 0; - + return TRUE; } MUTATOR_HOOKFUNCTION(lms_SetStartItems) { start_items &= ~IT_UNLIMITED_AMMO; - start_ammo_shells = cvar("g_lms_start_ammo_shells"); - start_ammo_nails = cvar("g_lms_start_ammo_nails"); - start_ammo_rockets = cvar("g_lms_start_ammo_rockets"); - start_ammo_cells = cvar("g_lms_start_ammo_cells"); - start_ammo_fuel = cvar("g_lms_start_ammo_fuel"); - start_health = cvar("g_lms_start_health"); - start_armorvalue = cvar("g_lms_start_armor"); + start_health = warmup_start_health = cvar("g_lms_start_health"); + start_armorvalue = warmup_start_armorvalue = cvar("g_lms_start_armor"); + start_ammo_shells = warmup_start_ammo_shells = cvar("g_lms_start_ammo_shells"); + start_ammo_nails = warmup_start_ammo_nails = cvar("g_lms_start_ammo_nails"); + start_ammo_rockets = warmup_start_ammo_rockets = cvar("g_lms_start_ammo_rockets"); + start_ammo_cells = warmup_start_ammo_cells = cvar("g_lms_start_ammo_cells"); + start_ammo_fuel = warmup_start_ammo_fuel = cvar("g_lms_start_ammo_fuel"); return FALSE; } @@@ -147,7 -147,7 +147,7 @@@ MUTATOR_HOOKFUNCTION(lms_FilterItem self.max_health = 1; return FALSE; } - + return TRUE; } @@@ -159,7 -159,7 +159,7 @@@ MUTATOR_HOOKFUNCTION(lms_ItemTouch Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_EXTRALIVES); PlayerScore_Add(other, SP_LMS_LIVES, autocvar_g_lms_extra_lives); } - + return MUT_ITEMTOUCH_CONTINUE; } @@@ -176,7 -176,7 +176,7 @@@ void lms_Initialize( { lms_lowest_lives = 9999; lms_next_place = 0; - + lms_ScoreRules(); } diff --combined qcsrc/server/scores_rules.qc index e3649f611b,b57666a689..c55195c837 --- a/qcsrc/server/scores_rules.qc +++ b/qcsrc/server/scores_rules.qc @@@ -17,12 -17,12 +17,12 @@@ void ScoreRules_basics(float teams, flo if(score_enabled) ScoreInfo_SetLabel_TeamScore (ST_SCORE, "score", stprio); - if not(INDEPENDENT_PLAYERS) + if (!INDEPENDENT_PLAYERS) ScoreInfo_SetLabel_PlayerScore(SP_KILLS, "kills", 0); ScoreInfo_SetLabel_PlayerScore(SP_DEATHS, "deaths", SFL_LOWER_IS_BETTER); - if not(INDEPENDENT_PLAYERS) + if (!INDEPENDENT_PLAYERS) ScoreInfo_SetLabel_PlayerScore(SP_SUICIDES, "suicides", SFL_LOWER_IS_BETTER); if(score_enabled) @@@ -106,18 -106,12 +106,18 @@@ void ScoreRules_nexball(float teams ScoreRules_basics_end(); } -// FreezeTag stuff #define SP_FREEZETAG_REVIVALS 4 -void ScoreRules_freezetag() +void ScoreRules_freezetag(float teams) { - CheckAllowedTeams(world); - ScoreRules_basics(((c4>=0) ? 4 : (c3>=0) ? 3 : 2), SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, TRUE); // SFL_SORT_PRIO_PRIMARY + ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, TRUE); // SFL_SORT_PRIO_PRIMARY ScoreInfo_SetLabel_PlayerScore(SP_FREEZETAG_REVIVALS, "revivals", 0); ScoreRules_basics_end(); } + +#define ST_CA_ROUNDS 1 +void ScoreRules_ca(float teams) +{ + ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY, 0, TRUE); + ScoreInfo_SetLabel_TeamScore(ST_CA_ROUNDS, "rounds", SFL_SORT_PRIO_PRIMARY); + ScoreRules_basics_end(); +} diff --combined qcsrc/server/teamplay.qc index a9ce5499b6,5185b2c611..49e824ff0d --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@@ -56,7 -56,7 +56,7 @@@ void InitGameplayMode( teamplay = 0; serverflags &= ~SERVERFLAG_TEAMPLAY; - if not(cvar_value_issafe(world.fog)) + if (!cvar_value_issafe(world.fog)) { print("The current map contains a potentially harmful fog setting, ignored\n"); world.fog = string_null; @@@ -115,21 -115,12 +115,14 @@@ 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(); fraglimit_override = autocvar_g_ca_point_limit; leadlimit_override = autocvar_g_ca_point_leadlimit; MUTATOR_ADD(gamemode_ca); + if(autocvar_g_ca_team_spawns) + have_team_spawns = -1; // request team spawns } if(g_keyhunt) @@@ -146,8 -137,6 +139,8 @@@ fraglimit_override = autocvar_g_freezetag_point_limit; leadlimit_override = autocvar_g_freezetag_point_leadlimit; MUTATOR_ADD(gamemode_freezetag); + if(autocvar_g_freezetag_team_spawns) + have_team_spawns = -1; // request team spawns } if(g_assault) @@@ -196,7 -185,7 +189,7 @@@ have_team_spawns = -1; // request team spawns MUTATOR_ADD(gamemode_nexball); } - + if(g_keepaway) { MUTATOR_ADD(gamemode_keepaway); @@@ -604,7 -593,7 +597,7 @@@ float TeamSmallerEqThanTeam(float ta, f cb -= cbb * 0.999; } } - + // keep teams alive (teams of size 0 always count as smaller, ignoring score) if(ca < 1) if(cb >= 1) @@@ -675,7 -664,7 +668,7 @@@ float FindSmallestTeam(entity pl, floa GetTeamCounts(world); RandomSelection_Init(); - + t = 1; if(TeamSmallerEqThanTeam(2, t, pl)) t = 2;