Arms Race
Arms Race (internally: gungameprogressive) is a game mode in Counter-Strike: Global Offensive.
A map can be launched in this game mode by invoking the console commands game_type 1; game_mode 0; map <mapname>, or shorter: map <mapname> gg. See Counter-Strike:_Global_Offensive/Game Modes for details and tips.
On official servers, Arms Race is played as a skirmish game mode, meaning that additionally, sv_skirmish_id 10 is set, too. This has the side effect that the game mode icon seen in the loading screen has a shield and that the map voting process at the end of the game also "offers" a different war game.
Game Mode Description
Officially, this game mode plays as follows:
- The game is a single extended round with instant respawn.
- Players start with a weapon and progress to different weapons as they get kills. When a map loads, the game generates a random weapon progression, consisting of 2 sniper rifles, 3 rifles, 1 machine gun, 3 SMGs, 4 pistols, 2 shotguns and the Golden Knife, in this order.
- Killing a player with the knife steals a progression: The killer progresses, the killed loses a progression (assuming they are not at the first weapon).
- The leading player of a team is highlighted to other players and killing them grants an instant progression.
- The first player to get a kill with the golden knife wins the match.
Map Requirements
The only required entities for a map to work in Arms Race are spawn points for each team.
Spawn points
Arms Race uses the normal info_player_(counter)terrorist as well as the info_armsrace_(counter)terrorist entities as player spawns. The spawn priorities of all of these are ignored in Arms Race, so a terrorist will always spawn at a randomly chosen spawnpoint from all existing info_player_terrorists and info_armsrace_terrorists.[confirm]
Template:ModernTip
To use the same spawn points like in ![]() Deathmatch, one could...
 Deathmatch, one could...
- select all info_deathmatch_spawn entities (e.g. using Entity Report), copy and paste them in the same spot (e.g. ⇧ Shift+→ and then ←), change the class to info_armsrace_terrorist and do the same again for info_armsrace_counterterrorist. Also, you might want to disable the default spawns, see below.
- execute the VScript code SendToConsoleServer("mp_randomspawn 1; mp_randomspawn_los 1")if the current game mode is Arms Race, which might not require a map recompile.
Modifying Gameplay
Weapon Progressions
| ConVar | Default | Description | 
|---|---|---|
| mp_ggprogressive_use_random_weapons | 1 | 
 | 
| mp_ggprogressive_random_weapon_kills_needed | 2 | If mp_ggprogressive_use_random_weaponsis set to 1, this determines the number of kills that a player must make with a weapon to progress to the next (except for the Golden Knife, which requires one kill). | 
| sv_ggprogressive_autosniper_first | 1 | |
| sv_ggprogressive_shotgun_last | 1 | 
 | 
To play with a custom weapon progression, it is suggested to define it in the file csgo/gamemodes_server.txt, then set mp_ggprogressive_use_random_weapons to 0 and launch a map in this game mode, see above.
The file csgo/gamemodes_server.txt could look like this:
| "GameModes_Server.txt"
{
	"gameTypes"
	{
		// ...
		
		"gungame"
		{
			"gameModes"
			{
				"gungameprogressive"
				{
					// ...
					"weaponprogression_ct"
					{
						"ak47"		{ "kills"	"3" }
						"awp"		{ "kills"	"3" }
						"knifegg"	{ "kills"	"1" }
					}
								
					"weaponprogression_t"
					{
						"ak47"		{ "kills"	"3" }
						"awp"		{ "kills"	"3" }
						"knifegg"	{ "kills"	"1" }
					}
				}
				// ...
			}
		}
		// ...
	}
	// ...
}
 | 
Template:ModernNote Template:ModernNote
Related ConVars
| ConVar | Default | Description | 
|---|---|---|
| mp_ggprogressive_healthshot_killcount | 3 | Grant healthshots in Arms Race after this number of kills. | 
| mp_ggprogressive_round_restart_delay | 15 | Number of seconds to delay before restarting a round after a win in Arms Race. Template:ModernNote | 
Disabling Default Spawns using VScript
TYPE <- ScriptGetGameType()
MODE <- ScriptGetGameMode()
if (TYPE == 1 && MODE == 0) // Arms Race uses game_type == 1 and game_mode == 0
{
	EntFire("info_player_terrorist", "SetDisabled")
	EntFire("info_player_counterterrorist", "SetDisabled")
}
else
{
	EntFire("info_player_terrorist", "SetEnabled")
	EntFire("info_player_counterterrorist", "SetEnabled")
}
If you want to use the info_armsrace_terrorist and info_armsrace_counterterrorist spawns exclusively, the info_player_terrorist and info_player_counterterrorist entities must be disabled, unless there are none. One way to do this only for Arms Race is writing a VScript such as the one on the right.
- Create a text file with the content shown on the right. Save it at csgo/scripts/vscripts/or in a subfolder from there as a.nutfile.
- In Hammer, create a logic_script and add this file to its Entity Scripts.
- In-game, check the console when running the map to see if something goes wrong. If a team is full, there are most likely no valid spawn points for that team.
- When publishing the map, this script must also be packed (see e.g. VIDE).
Bots
The current ![]() Deathmatch bots can be used in Arms Race, but need a slight modification. When they spawn, they are programmed to buy a weapon and because they can't buy in Arms Race, they get stuck "buying". To overcome this, one could copy and paste
 Deathmatch bots can be used in Arms Race, but need a slight modification. When they spawn, they are programmed to buy a weapon and because they can't buy in Arms Race, they get stuck "buying". To overcome this, one could copy and paste csgo/scripts/ai/deathmatch/bt_default.kv3, rename it and remove these lines:
{
	type = "action_buy"
},
In-game, by setting mp_bot_ai_bt "scripts/ai/deathmatch/<new filename>.kv3", all bots will then use this modified behavior tree without getting stuck.