Counter-Strike: Global Offensive/Game Modes/Wingman

Wingman (internally: scrimcomp2v2) is a game mode in .
Here, you can learn how to modify a Competitive map for it, and how all of this works.
A map is launched in the Wingman game mode with the commands game_type 0; game_mode 2; map <mapname>, or shorter: map <mapname> scrimcomp2v2.
__TOC__
== Game Mode Description ==
 Pivotal (CFG) differences
Property 	Competitive	Wingman
Players per team 	5 	2
Best of 	30 	16
Roundtime in minutes 	1:55 	1:30
Freezetime in seconds	15 	10
Max Money 	$16000 	$8000
Technically, this game mode is almost equal to the game mode.
The round ending events are equal, meaning that this game mode can be played with bombsites, hostages or none of them.
The crucial differences are the game mode's CFG file (see the table on the right) and maxplayers.
Officially, the game mode plays as follows:
* Two teams of two players play a match in a competitive environment.
* There is one accessible bombsite.
== Adding Wingman Support to a Map ==
Any map can be modified to support in the same way as Cobblestone, Inferno, Nuke, Overpass, Vertigo and Train.
These maps are actually too large for Wingman, but if they are launched in Wingman, the spawn points and buyzones are "shifted" if needed and there are blockers that limit the playable area to only one bombsite.
The following sections are about how mapmakers can reproduce this.
=== Scripting ===
csgo/scripts/vscripts/2v2/2v2_enable.nut
// This function is called from the map OnMapSpawn
function EnableWingman()
{
 // checks the game mode and type and the current match
 local nMode = ScriptGetGameMode();
 local nType = ScriptGetGameType();
 // type 0, mode 0 = casual
 // type 0, mode 1 = competitive
 // type 1, mode 0 = arms race
 // type 1, mode 1 = demolition
 // type 1, mode 2 = deathmatch
 // etc 
	 
	if (nMode == 2 && nType == 0)								// if we are running 2v2, do stuff
	{
	 EntFire("spawnpoints.standard", "SetDisabled", 0, 0);
	 EntFire("spawnpoints.2v2", "SetEnabled", 0, 0);
	 EntFire("brush.blocker", "Enable", 0, 0);
	 EntFire("buyzone.2v2", "SetEnabled", 0, 0);
	 EntFire("navblocker.2v2", "BlockNav", 0, 0);
	}
	else
	{
	 EntFire("buyzone.2v2", "Disable", 0, 0);				// disable 2v2 buyzones
	 EntFire("navblocker.2v2", "UnblockNav", 0, 0);
	}
 
 }
To shift spawn points or block areas only in Wingman, our map must detect the current game mode which requires VScripting.
Fortunately, Valve has already made a VScript that does that (seen on the right) and made it available to everyone, so you don't have to write any code.
To run this script, create a entity in your map, and give it the targetname script.2v2 (arbitrary).
Set its Entity Scripts property to 2v2/2v2_enable.nut.
Then create a with the following output:
	OnMapSpawn	script.2v2	RunScriptCode	EnableWingman()	0	No
Every round, this will run the EnableWingman function which fires I/O events to some named entities in our level depending on the current game mode.
That's why all of the following entity names are required to be exactly as in the above VScript, otherwise it will not work.
=== Spawn points and Buyzones ===
First, select all of the normal spawn points, both CT and T, and change their names to spawnpoints.standard. The script will deactivate these in Wingman.
Now, create at least two spawn points for each team that should be used in Wingman. In the official Valve maps, they use 4 for each team.
Select them all, name them spawnpoints.2v2 and set Enable by default? to No.
If these spawns are not already inside of a , create one for them, select the team and name it buyzone.2v2. Do the same for the other team.
=== Blocking the Playable Area ===
The game can work as it is now, but you will probably want only one bombsite to be reachable.
To do that, create some clip brushes with the tools/toolsclip texture in the places that you don't want the players to go. Tie them to es and name them brush.blocker. Set Start disabled to Yes and the script will enable them only in Wingman.
You can even make more of those and use the cool tools/wrongway texture to signalize to players that there is an invisible wall. It even fades out with distance! For these brushes, it is good practice to set their Solidity to Never Solid if they are already inside a larger brush.blocker because then their collision is not needed.
=== Blocking Navigation Meshes ===
Now the brush.blockers will do a great job on blocking players, however, bots might still try to walk through the blockers.
Create brush entities inside the brush.blockers with the tools/toolstrigger texture and name them navblocker.2v2.
The VScript will finally fire BlockNav to these entities in Wingman or UnblockNav in all other game modes, informing the bots whether the area is blocked or not.
== Testing and Uploading ==
To play a map in Wingman mode, type in the commands game_type 0; game_mode 2 into the console and then enter the map command to access your map.
When you upload the map to the workshop, be sure to select "Wingman" in the list of game modes so that people can select that when they open the map through the in-game workshop tab.
Done!
Category: Counter-Strike: Global Offensive
Category: Level Design
Category: Tutorials