Counter-Strike: Global Offensive/Game Modes/Arms Race: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(Operation Riptide Update. Added new ConVars.)
(Reorganized sections. Added tip about "dual" spawn points. Added Bots section. Reworded Disabling Default Spawns.)
Line 29: Line 29:
{{Placement Tip|Since Arms Race maps use deathmatch-style spawn mechanics, the placement of spawn points doesn't matter much; however, to keep your map simple and easy to understand, you'll probably want to cluster the spawn points together in areas, usually one for each team.}}
{{Placement Tip|Since Arms Race maps use deathmatch-style spawn mechanics, the placement of spawn points doesn't matter much; however, to keep your map simple and easy to understand, you'll probably want to cluster the spawn points together in areas, usually one for each team.}}


====Disabling default spawns using VScript====
{{Tip|To have spawn points where both CTs and Ts can spawn, place one of both Arms Race spawn entities inside each other. To use the same spawn points like in {{csgo mode|Dm}}, select all [[info_deathmatch_spawn]] entities (e.g. using [[Entity Report]]), copy and paste them in the same spot (e.g. {{key|shift|right}} and then {{key|left}}), change the class to info_armsrace_terrorist and do the same again with info_armsrace_counterterrorist. Players will not spawn inside each other as long as there are enough of these "dual" spawn points. You also might want to disable the default spawns, see [[#Disabling Default Spawns using VScript|below]].}}
{| style="float:right;"
| <source lang=cpp>
TYPE <- ScriptGetGameType()
MODE <- ScriptGetGameMode()


if (TYPE == 1 && MODE == 0) // Arms Race uses game_type == 1 and game_mode == 0
== Modifying Gameplay ==
{
=== Weapon Progressions ===
EntFire("info_player_terrorist", "SetDisabled", "", 0)
EntFire("info_player_counterterrorist", "SetDisabled", "", 0)
}
else
{
EntFire("info_player_terrorist", "SetEnabled", "", 0)
EntFire("info_player_counterterrorist", "SetEnabled", "", 0)
}
</source>
|}
If you want to use the [[info_armsrace_terrorist]] and [[info_armsrace_counterterrorist]] spawns exclusively, the other must be disabled. One way to disable all info_player_counterterrorist and info_player_terrorist spawns '''''only for Arms Race''''' is writing a [[VScript]] such as the one on the right.
 
Give this text file a name and save it with the <code>.nut</code> extension, for example <code>mapname.nut</code> and put it either directly into <code>csgo/scripts/vscripts/</code> or in a (new) subdirectory from there. Place a [[logic_script]] in your level and add the previous script to its Entity Scripts. Check the console when running the map to see if something goes wrong. When publishing the map, this script must also be packed (see e.g. [[VIDE]]).
{{clr}}
 
==Weapon Progressions==
{| class=standard-table
{| class=standard-table
! ConVar !! Default !! Description
! ConVar !! Default !! Description
Line 59: Line 39:
| 1
| 1
|
|
*0: The game uses a progression defined in <code>csgo/[[gamemodes.txt]]</code> or <code>csgo/gamemodes_server.txt</code>.
*1: The game generates a random weapon progression, see [[#Game Mode Description|above]].
*1: The game generates a random weapon progression, see [[#Game Mode Description|above]].
*0: The game uses a progression defined in <code>csgo/[[gamemodes.txt]]</code> or <code>csgo/gamemodes_server.txt</code>.
|-
|-
| <code>mp_ggprogressive_random_weapon_kills_needed</code>
| <code>mp_ggprogressive_random_weapon_kills_needed</code>
Line 75: Line 55:
| 1
| 1
|
|
*0: In random progressions, shotguns are after the [[weapon_deagle|Desert Eagle]] and before the other pistols.
*0: In random progressions, shotguns follow after the [[weapon_deagle|Desert Eagle]]/[[weapon_revolver|R8 Revolver]], before the other pistols.
*1: In random progressions, shotguns are the last weapon group.
*1: In random progressions, shotguns are the last weapon group.
|}
|}
Line 128: Line 108:
{{note | See [[:Category: Counter-Strike: Global Offensive Weapons]] for a list of weapons. For this, omit the <code>weapon_</code> prefix.}}
{{note | See [[:Category: Counter-Strike: Global Offensive Weapons]] for a list of weapons. For this, omit the <code>weapon_</code> prefix.}}


==Related ConVars==
=== Related ConVars ===
{| class=standard-table
{| class=standard-table
! ConVar !! Default !! Description
! ConVar !! Default !! Description
Line 140: Line 120:
| Number of seconds to delay before restarting a round after a win in Arms Race. {{note|This is overriden by <code>mp_match_restart_delay</code>.}}
| Number of seconds to delay before restarting a round after a win in Arms Race. {{note|This is overriden by <code>mp_match_restart_delay</code>.}}
|}
|}
=== Disabling Default Spawns using VScript ===
<source lang=cpp style="float:right; background:none">
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")
}
</source>
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 <code>csgo/scripts/vscripts/</code> or in a subfolder from there as a <code>.nut</code> file.
* In [[Hammer]], create a [[logic_script]] and add this file to its <code>Entity Scripts</code>.
* In-game, check the console when running the map to see if something goes wrong. If [[Both Teams are Full error|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 {{csgo mode|Dm}} [[bot]]s 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 <code>csgo/scripts/ai/deathmatch/bt_default.kv3</code>, rename it and remove these lines:
<pre>
{
type = "action_buy"
},
</pre>
In-game, by setting {{ent|mp_bot_ai_bt|"scripts/ai/deathmatch/<new filename>.kv3"}}, all bots will then use this modified [[CS:GO Bot Behavior Trees|behavior tree]] without getting stuck.


[[Category:Counter-Strike: Global Offensive]]
[[Category:Counter-Strike: Global Offensive]]
[[Category:Level Design Tutorials]]
[[Category:Level Design Tutorials]]

Revision as of 19:07, 16 November 2021

English (en)中文 (zh)Translate (Translate)
Counter-Strike: Global Offensive Level Creation
Csgo icon armsrace.png
Csgo icon skirmish armsrace.png

Arms Race (internally: gungameprogressive) is a game mode in Template:Game name.

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 CS:GO Game Mode Commands 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 he is not at the first weapon).
  • The leading player of a team is highlighted to other players and killing him 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]

Tip.pngTip:You should aim to include at least 16 spawn points for each team, so your map will run smoothly with up to 32 players on a server.
PlacementTip.gifPlacement Tip:Since Arms Race maps use deathmatch-style spawn mechanics, the placement of spawn points doesn't matter much; however, to keep your map simple and easy to understand, you'll probably want to cluster the spawn points together in areas, usually one for each team.
Tip.pngTip:To have spawn points where both CTs and Ts can spawn, place one of both Arms Race spawn entities inside each other. To use the same spawn points like in CS:GO/CS2 Deathmatch Deathmatch, 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 with info_armsrace_counterterrorist. Players will not spawn inside each other as long as there are enough of these "dual" spawn points. You also might want to disable the default spawns, see below.

Modifying Gameplay

Weapon Progressions

ConVar Default Description
mp_ggprogressive_use_random_weapons 1
  • 0: The game uses a progression defined in csgo/gamemodes.txt or csgo/gamemodes_server.txt.
  • 1: The game generates a random weapon progression, see above.
mp_ggprogressive_random_weapon_kills_needed 2 If mp_ggprogressive_use_random_weapons is 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
  • 0: In random progressions, either the G3SG1 or the Scar-20 is the first weapon.
  • 1: In random progressions, any sniper rifle is the first weapon.
sv_ggprogressive_shotgun_last 1
  • 0: In random progressions, shotguns follow after the Desert Eagle/R8 Revolver, before the other pistols.
  • 1: In random progressions, shotguns are the last weapon group.

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" }
					}
				}

				// ...
			}
		}

		// ...
	}

	// ...
}
Note.pngNote: This is just the necessary part of the file. The expressions // ... should indicate that there can be much more in it.
Note.pngNote: See Category: Counter-Strike: Global Offensive Weapons for a list of weapons. For this, omit the weapon_ prefix.

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.
Note.pngNote:This is overriden by mp_match_restart_delay.

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 .nut file.
  • 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 CS:GO/CS2 Deathmatch 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.