If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!
This article has a talk page!

Counter-Strike: Global Offensive

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Counter-Strike: Global Offensive

Also known as: CS:GO
Developers: Valve, Hidden Path Entertainment
Publisher: Valve
Platforms: Windows, Mac OS X, Linux, Xbox 360, PlayStation 3
Released internationally: August 21, 2012 (Windows/Mac/360/PS3), September 23, 2014 (Linux)


AreasIcon.png This game has unused areas.
CharacterIcon.png This game has unused playable characters.
DevTextIcon.png This game has hidden development-related text.
GraphicsIcon.png This game has unused graphics.
ModelsIcon.png This game has unused models.
ItemsIcon.png This game has unused items.
Sgf2-unusedicon1.png This game has unused abilities.
MusicIcon.png This game has unused music.
SoundIcon.png This game has unused sounds.
TextIcon.png This game has unused text.
DebugIcon.png This game has debugging material.
RegionIcon.png This game has regional differences.
Carts.png This game has revisional differences.


DevelopmentIcon.png This game has a development article
ProtoIcon.png This game has a prototype article

See, this is why server preservation is important.
This game's online features are no longer supported.
While this game's online features were once accessible, they are (as of September 27th, 2023 (official matchmaking only)) no longer officially supported and online-exclusive features may be documented as now-unseen content.
Cactus feels all lost and stuff.
Note about this game's playability
With the release of Counter-Strike 2 on September 27th, 2023, Valve shut down official matchmaking for this game. However, Global Offensive is still playable on community servers via a legacy build and the console ports are still operational.
Hmmm...
To do:
  • Source code leak.
  • Unused War Games for Operation Hydra.
  • Anything interesting in the console releases (other than basically being a snapshot of what the game looked like on Day 1)?

Counter-Strike: Global Offensive started out as a console port of Counter-Strike: Source with more HD Brown™; and foggy maps, but focused their efforts on its competitive matchmaking mode, the eSports scene and the skin marketplace to great effect. They actually updated de_dust in this one, with de_cbble being given a proper sense of scale later.

The game went Free to Play on December 6, 2018, and later an updated version, called Counter-Strike 2 was released on September 27th, 2023, porting the game over into the Source 2 engine among other changes. It also essentially replaced this game as well, for better or for worse.

Sub-Pages

Read about development information and materials for this game.
Development Info
Read about prototype versions of this game that have been released or dumped.
Prototype Info
Cs go mp5 profile.png
Unused Models
Hostages from another era.
CS GO Pin smileblue large.png
Unused Textures
Placeholder graphics galore!
TextIcon.png
Unused Text
Unused Rankings text, among other things.
SoundIcon.png
Unused Sounds
"Now playing as a terrorist..."
CSGO-Icon Beartrap.png
Unused Items
Music in my smoke grenades? More likely than you think.

Unused Config Files

give_all_items

Typing "exec give_all_items" in console doesn't do anything because the command "econ_droppaintedgun" is not coded. Also, some weapons listed below are not implemented, such as "weapon_dbarrel", "weapon_c4_radio", "weapon_c4_customcode" and "weapon_knife_pliers" ... These weapons don't even exist in-game. Note that "aq_oiled" is the internal name for the Case Hardened skin.

econ_droppaintedgun weapon_ak47 aq_oiled
econ_droppaintedgun weapon_aug aq_oiled
econ_droppaintedgun weapon_awp aq_oiled
econ_droppaintedgun weapon_bayonet aq_oiled
econ_droppaintedgun weapon_bizon aq_oiled
econ_droppaintedgun weapon_c4 aq_oiled
econ_droppaintedgun weapon_c4_customcode aq_oiled
econ_droppaintedgun weapon_c4_radio aq_oiled
econ_droppaintedgun weapon_dbarrel aq_oiled
econ_droppaintedgun weapon_deagle aq_oiled
econ_droppaintedgun weapon_decoy aq_oiled
econ_droppaintedgun weapon_elite aq_oiled
econ_droppaintedgun weapon_famas aq_oiled
econ_droppaintedgun weapon_fiveseven aq_oiled
econ_droppaintedgun weapon_flashbang aq_oiled
econ_droppaintedgun weapon_g3sg1 aq_oiled
econ_droppaintedgun weapon_galilar aq_oiled
econ_droppaintedgun weapon_glock aq_oiled
econ_droppaintedgun weapon_hegrenade aq_oiled
econ_droppaintedgun weapon_hkp2000 aq_oiled
econ_droppaintedgun weapon_incgrenade aq_oiled
econ_droppaintedgun weapon_knife aq_oiled
econ_droppaintedgun weapon_knife_css aq_oiled
econ_droppaintedgun weapon_knife_flip aq_oiled
econ_droppaintedgun weapon_knife_gut aq_oiled
econ_droppaintedgun weapon_knife_karambit aq_oiled
econ_droppaintedgun weapon_knife_pliers aq_oiled
econ_droppaintedgun weapon_m249 aq_oiled
econ_droppaintedgun weapon_m4a1 aq_oiled
econ_droppaintedgun weapon_m4a1_silencer aq_oiled
econ_droppaintedgun weapon_mac10 aq_oiled
econ_droppaintedgun weapon_mag7 aq_oiled
econ_droppaintedgun weapon_molotov aq_oiled
econ_droppaintedgun weapon_mp7 aq_oiled
econ_droppaintedgun weapon_mp9 aq_oiled
econ_droppaintedgun weapon_negev aq_oiled
econ_droppaintedgun weapon_nova aq_oiled
econ_droppaintedgun weapon_p250 aq_oiled
econ_droppaintedgun weapon_p90 aq_oiled
econ_droppaintedgun weapon_revolver aq_oiled
econ_droppaintedgun weapon_sawedoff aq_oiled
econ_droppaintedgun weapon_scar20 aq_oiled
econ_droppaintedgun weapon_sg556 aq_oiled
econ_droppaintedgun weapon_smokegrenade aq_oiled
econ_droppaintedgun weapon_ssg08 aq_oiled
econ_droppaintedgun weapon_taser aq_oiled
econ_droppaintedgun weapon_tec9 aq_oiled
econ_droppaintedgun weapon_ump45 aq_oiled
econ_droppaintedgun weapon_usp_silencer aq_oiled
econ_droppaintedgun weapon_xm1014 aq_oiled

Half-Life 2 E3 Leftovers

The game contains files lab.cfg and start.cfg which are leftovers from the HL2 E3 demo.

lab.cfg

unbindall
bind "TAB" "+showscores"
bind "ENTER" "+attack"
bind "ESCAPE" "cancelselect"
bind "SPACE" "+jump"
bind "'" "+moveup"
bind "," "+moveleft"
bind "." "+moveright"
bind "/" "+movedown"
bind "1" "slot1"
bind "2" "slot2"
bind "3" "slot3"
bind "4" "slot4"
bind "5" "slot5"
bind "6" "slot6"
bind "7" "ent_fire scene_1_acting_intro start"
bind ";" "+mlook"
bind "[" "invprev"
bind "]" "invnext"
bind "`" "toggleconsole"
bind "a" "+moveleft"
bind "c" "+movedown"
bind "d" "+moveright"
bind "e" "+use"
bind "f" "impulse 100"
bind "g" "dropprimary"
bind "i" "impulse 101"
bind "n" "noclip"
bind "p" "snapshot"
bind "q" "lastinv"
bind "r" "+reload"
bind "s" "+back"
bind "t" "+zoom"
bind "u" "messagemode2"
bind "v" "+moveup"
bind "w" "+forward"
bind "y" "messagemode"
bind "z" "+strafe"
bind "UPARROW" "+forward"
bind "DOWNARROW" "+back"
bind "LEFTARROW" "+left"
bind "RIGHTARROW" "+right"
bind "ALT" "+speed"
bind "CTRL" "+duck"
bind "SHIFT" "+walk"
bind "F5" "snapshot"
bind "F6" "save quick"
bind "F7" "load quick"
bind "INS" "+klook"
bind "PGDN" "+lookdown"
bind "PGUP" "+lookup"
bind "END" "centerview"
bind "MWHEELDOWN" "invnext"
bind "MWHEELUP" "invprev"
bind "MOUSE1" "+attack"
bind "MOUSE2" "+attack2"
bind "PAUSE" "pause"
ai_report_task_timings_on_limit "0"
suitvolume "0.25"
sv_aim "1"
hud_quickinfo "1"
muzzleflash_light "1"
hud_toggle "0"
phonemedelay "0"
phonemefilter "0.08"
flex_rules "1"
hud_fastswitch "0"
closecaption "0"
cc_linger_time "2.0"
crosshair "1"
cam_command "0"
cam_snapto "0"
cam_idealyaw "90"
cam_idealpitch "0"
cam_idealdist "64"
c_maxpitch "90"
c_minpitch "0"
c_maxyaw "135"
c_minyaw "-135"
c_maxdistance "200"
c_mindistance "30"
c_orthowidth "100"
c_orthoheight "100"
cl_upspeed "320"
sv_maxspeed "50"
lookspring "0"
lookstrafe "0"
joystick "0"
m_pitch "0.022"
m_filter "0"
sensitivity "2"
m_side "0.8"
m_yaw "0.022"
m_forward "1"
sv_noclipaccelerate "5"
sv_noclipspeed "2000"
sv_skyname "sky_white"
sv_backspeed "0.6"
cl_idealpitchscale "0.8"
hud_centerid "0"
net_graphwidth "192"
net_scale "5"
net_graphpos "1"
net_graphsolid "1"
r_viewcubemapsize "96"
voice_modenable "1"
voice_forcemicrecord "1"
voice_enable "1"
voice_scale "1"
snd_mixahead "0.1"
snd_surround "0"
hisound "0"
volume "0.680000"
sv_voiceenable "1"
sv_forcepreload "0"
r_eyesize "0"
r_eyeshift_z "0"
r_eyeshift_y "0"
r_eyeshift_x "0"
r_eyemove "1"
r_eyegloss "1"
skill "1"
mp_decals "300"
r_speedsquiet "0"
r_anamorphic "0"
mat_compressedtextures "1"
mat_picmip "0"
con_alpha "192"
con_color "200 200 200"
cl_forcepreload "0"
cl_updaterate "20"
cl_dlmax "128"
rate "2500"
bottomcolor "0"
topcolor "0"
model ""
skin ""
team ""
name "unnamed"
cl_timeout "305"
cl_captions "0"
cl_cmdbackup "2"
cl_cmdrate "30"
bgmvolume "1"
+mlook
sv_friction "1"
cl_hudenable 0
bind h “ent_fire scene_1_acting_intro start”

start.cfg

cl_hudenable 0
developer 0
disp_modlimit_up 512

r_anamorphic 1
snd_surround 1

rem remember to do this in your regular config!!!!
rem bind f2 "exec e3demo.cfg"

cl_mouseenable 0

rem unbind these in config.cfg!!!
rem unbind uparrow
rem unbind downarrow
rem unbind leftarrow
rem unbind leftarrow
rem unbind a
rem unbind s
rem unbind d
rem unbind w


startdemos e3_hl2logo 

Unused Scripts

"weapon_rifle"

A weapon called "Rifle" can to be found in the scripts folder inside CSGO's one. "weapon_rifle" seems to be the internal name for Left 4 Dead's M16.
According to the information below, the "Rifle" uses the M4A4 model and animations, has 30 mag size, can be used by both teams, and costs $3100 (similar to M4A4) but spawning it on a local server with sv_cheats 1 displays "Attempted to create unknown entity type weapon_rifle! NULL Ent in GiveNamedItem!" in the console.

WeaponData
{
    // particle muzzle flash effect to play when fired
    MuzzleFlashEffect_1stPerson     weapon_muzzle_flash_assaultrifle
    MuzzleFlashEffect_3rdPerson     weapon_muzzle_flash_assaultrifle
    HeatEffect                      weapon_muzzle_smoke
    HeatPerShot                     0.35
    AddonScale                      0.90
    AddonLocation                   primary_rifle

    // model for the shell casing to eject when we fire bullets
    EjectBrassEffect                weapon_shell_casing_rifle

    // the tracer particle effect and frequency
    TracerEffect                    weapon_tracers_assrifle
    // 0 = never, 1 = every shot, 2 = every other, etc
    TracerFrequency                 3

    WeaponType                      Rifle
    FullAuto                        1
    CrosshairMinDistance            4           // 3 to 5
    CrosshairDeltaDistance          3           // AK is uniquely 4
    BuiltRightHanded                1
    CanEquipWithShield              0
    
    PlayerAnimationExtension        m4

    Team                            ANY
    MaxPlayerSpeed                  220         // 215 to 225
    WeaponPrice                     3100        // 2000 to 3500
    KillAward                       300
    WeaponArmorRatio                1.4         // 1.4 to 1.55

    // Weapon characteristics:
    Penetration                     2
    Damage                          30          // 30 to 36
    Range                           8192
    clip_size                       30          // 25 to 35
    default_clip"		    -1
    default_clip2"		    -1
    RangeModifier                   0.97        // 0.955 to 0.98
    Bullets                         1
    CycleTime                       0.09        // 0.09 to 0.1
    TimeToIdle                      1.5         // 1.1 to 1.9
    IdleInterval                    20          // M4A1 is uniquely 60 
    FlinchVelocityModifierLarge     0.40
    FlinchVelocityModifierSmall     0.55
    
    // Accuracy parameters:
    Spread                          0.60
    InaccuracyCrouch                4.00        // 2.8 to 7.39
    InaccuracyStand                 5.50        // 3.85 to 8.77
    InaccuracyJump                  0.640       // 0.627 to 0.852
    InaccuracyLand                  0.192       // 0.188 to 0.256
    InaccuracyLadder                85.38       // 83.66 to 107.61
    InaccuracyFire                  6.83        // 6.16 to 8.78
    InaccuracyMove                  100.00      // 91.01 to 123.56
                                 
    // Accuracy parameters for secondary fire mode ( burst or scoped ):
    SpreadAlt                       0.60
    InaccuracyCrouchAlt             3.00        // 1.98 to 4.84
    InaccuracyStandAlt              5.00        // 2.65 to 7.78
    InaccuracyJumpAlt               0.70        // 0.627 to 0.852
    InaccuracyLandAlt               0.20        // 0.188 to 0.256
    InaccuracyLadderAlt             100         // 83.66 to 113.58
    InaccuracyFireAlt               5.00        // 3.35 to 6.68
    InaccuracyMoveAlt               90.0        // 78.46 to 106.52
                                 
    RecoveryTimeCrouch              0.34        // 0.302625 to 0.384861
    RecoveryTimeStand               0.45        // 0.423676 to 0.538805

    RecoilSeed                      12345

    RecoilAngle                     0
    RecoilAngleVariance             70          // Famas is uniquely 60 
    RecoilMagnitude                 23          // 21 to 23, AK-47 is outlier at 30
    RecoilMagnitudeVariance         1
    
    // Weapon data is loaded by both the Game and Client DLLs.
    printname                       #SFUI_WPNHUD_M4A1
    viewmodel                       models/weapons/v_rif_m4a1.mdl
    playermodel                     models/weapons/w_rif_m4a1.mdl
    
    anim_prefix                     anim
    bucket                          0
    bucket_position                 0
    
    primary_ammo                    BULLET_PLAYER_556MM // or BULLET_PLAYER_762MM
    secondary_ammo                  None

    weight                          25          // Famas is uniquely 75
    item_flags                      0
    
    rumble                          4           // Famas is uniquely 3

    // Sounds for the weapon. There is a max of 16 sounds per category (i.e. max 16 single_shot sounds)
    SoundData
    {
        single_shot                 Weapon_M4A1.Single
//      special1                    Weapon_M4A1.Silenced
//      special2                    Weapon_M4A1.Silencer_Off
//      special3                    Weapon_M4A1.Silencer_On
    }

    // Weapon Sprite data is loaded by the Client DLL.
    TextureData
    {
        weapon
        {
                font        CSweaponsSmall
                character   W
        }
        weapon_s
        {   
                font        CSweapons
                character   W
        }
        ammo
        {
                font        CSTypeDeath
                character   N
        }
        crosshair
        {
                file        sprites/crosshairs
                x           0
                y           48
                width       24
                height      24
        }
        autoaim
        {
                file        sprites/crosshairs
                x           0
                y           48
                width       24
                height      24
        }
    }
    ModelBounds
    {
        Viewmodel
        {
            Mins    "-10 -2 -13"
            Maxs    "30 10 0"
        }
        World
        {
            Mins    "-8 -9 -6"
            Maxs    "29 9 8"
        }
    }
}

Notes

In addition, if cheats are enabled (sv_cheats 1) on a server, typing give weapon_mp5navy, weapon_scout, weapon_usp, or weapon_gail in the console will cause the game to crash.

game_sounds_weapons

In game_sounds_weapons.txt, sounds with effects also mention Counter-Strike: Source and an unimplemented SCAR 17.

//TMP
"Weapon_TMP.Single"
{
	"channel"		"CHAN_STATIC"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_93dB"
	"wave"			")weapons/tmp/tmp-1.wav"

	"soundentry_version" "2"
	"operator_stacks"
	{
		"start_stack"
		{
			
			"import_stack" "CS_distance_weapon_start"
			
			"play_distant_version_1"
			{
				"entry_name" "Weapon_TMP.SingleDistant"
			}
		}

		"update_stack"
		{
			"import_stack" "CS_update_weapon"
			"mixer"
			{
				"mixgroup" "FirstWeapons"
			}
			"volume_distance_xfade"
			{
				"input_map_min" "0.0"
				"input_map_max" "1.0"
			}
		}
	}
}

"Weapon_TMP.SingleDistant"
{
	"channel"		"CHAN_STATIC"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_94dB"
	"wave"			"weapons/tmp/tmp-1-distant.wav"

	"soundentry_version" "2"

	"operator_stacks"
	{
		"start_stack"
		{
			"import_stack" "CS_limit_start"
		}

		"update_stack"
		{
			"import_stack" "CS_update_weapon"
			"mixer"
			{
				"mixgroup" "DistWeapons"
			}

		}
	}
}

"Weapon_TMP.Clipout"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/tmp/tmp_clipout.wav" 
}

"Weapon_TMP.Clipin"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/tmp/tmp_clipin.wav" 
}

"Weapon_TMP.Draw"
{
	"channel"		"CHAN_STATIC"
	"volume"		".5"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/tmp/tmp_draw.wav" 
}

// "Weapon_TMP.BoltPull"
// {
	// "channel"		"CHAN_ITEM"
	// "volume"		"1.0"
	// "pitch"			"PITCH_NORM"
	// "wave"			"weapons/tmp/tmp_boltpull.wav"
// }

"Weapon_TMP.BoltBack"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/tmp/tmp_boltback.wav"
}

"Weapon_TMP.BoltForward"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/tmp/tmp_boltforward.wav"
}

//MP5
"Weapon_MP5Navy.Single"
{
	"channel"		"CHAN_STATIC"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_93dB"
	"wave"			")weapons/mp5navy/mp5-1.wav"

	"soundentry_version" "2"
	"operator_stacks"
	{
		"start_stack"
		{
			
			"import_stack" "CS_distance_weapon_start"
			
			"play_distant_version_1"
			{
				"entry_name" "Weapon_MP5Navy.SingleDistant"
			}
		}

		"update_stack"
		{
			"import_stack" "CS_update_weapon"
			"mixer"
			{
				"mixgroup" "FirstWeapons"
			}
			"volume_distance_xfade"
			{
				"input_map_min" "0.0"
				"input_map_max" "1.0"
			}
		}
	}
	
}

"Weapon_MP5Navy.SingleDistant"
{
	"channel"		"CHAN_STATIC"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_94dB"
	"wave"			"weapons/mp5navy/mp5-1-distant.wav"

	"soundentry_version" "2"

	"operator_stacks"
	{
		"start_stack"
		{
			"import_stack" "CS_limit_start"
		}

		"update_stack"
		{
			"import_stack" "CS_update_weapon"
			"mixer"
			{
				"mixgroup" "DistWeapons"
			}

		}
	}
	
}

"Weapon_MP5Navy.Clipout"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/mp5navy/mp5_clipout.wav" 
}

"Weapon_MP5Navy.Clipin"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/mp5navy/mp5_clipin.wav" 
}

"Weapon_MP5Navy.Draw"
{
	"channel"		"CHAN_STATIC"
	"volume"		".5"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/mp5navy/mp5_draw.wav" 
}

"Weapon_MP5Navy.Slideback"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/mp5navy/mp5_slideback.wav" 
}

"Weapon_MP5Navy.SlideForward"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/mp5navy/mp5_slideforward.wav" 
}

//SCAR 17
"Weapon_SCAR17.Single"
{
	"channel"		"CHAN_STATIC"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_93dB"
	"wave"			")weapons/scar17/scar20_unsil-1.wav"

	"soundentry_version" "2"
	"operator_stacks"
	{
		"start_stack"
		{
			
			"import_stack" "CS_distance_weapon_start"
			
			"play_distant_version_1"
			{
				"entry_name" "Weapon_SCAR17.SingleDistant"
			}
		}

		"update_stack"
		{
			"import_stack" "CS_update_weapon"
			"mixer"
			{
				"mixgroup" "FirstWeapons"
			}
			"volume_distance_xfade"
			{
				"input_map_min" "0.0"
				"input_map_max" "1.0"
			}
		}
	}
	
}

"Weapon_SCAR17.SingleDistant"
{
	"channel"		"CHAN_STATIC"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_94dB"
	"wave"			"weapons/scar17/scar20_unsil-1-distant.wav"

	"soundentry_version" "2"

	"operator_stacks"
	{
		"start_stack"
		{
			"import_stack" "CS_limit_start"
		}

		"update_stack"
		{
			"import_stack" "CS_update_weapon"
			"mixer"
			{
				"mixgroup" "DistWeapons"
			}

		}
	}
	
}

"Weapon_SCAR17.Clipout"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/scar17/scar20_clipout.wav"
}

"Weapon_SCAR17.Clipin"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/scar17/scar20_clipin.wav"
}

"Weapon_SCAR17.ClipTouch"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/scar17/scar20_cliptouch.wav"
}

"Weapon_SCAR17.Draw"
{
	"channel"		"CHAN_STATIC"
	"volume"		".5"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/scar17/scar20_draw.wav"
}

"Weapon_SCAR17.BoltBack"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/scar17/scar20_boltback.wav"
}

"Weapon_SCAR17.BoltForward"
{
	"channel"		"CHAN_ITEM"
	"volume"		"1.0"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/scar17/scar20_boltforward.wav"
}

"Weapon_SCAR17.Draw"
{
	"channel"		"CHAN_STATIC"
	"volume"		".5"
	"pitch"			"PITCH_NORM"
	"soundlevel"  		"SNDLVL_65dB"
	"wave"			"weapons/scar17/scar20_draw.wav"
}

Regional Differences

Low Violence

Originally, the German version of the game found on Steam had "low violence" enabled, which turned blood into "Oil" and has animations for people laying down and putting their hands over their heads once killed. It was later removed due to Germany finally having a decent law in place relating to portraying blood in video games, and as a result, goes unused. This feature however, can be reenabled by typing -lv in the launch options. For obvious reasons, the console-retail version (Xbox 360 and PS3) is still bloodless.

Perfect World Edition

Item Changes

Many items were changed in the Chinese "Perfect World" edition of CS:GO, the most notable examples are the Crown (Foil) sticker and the "Bone Machine" skin for the XM1014.

Map Changes

  • Many maps were edited to remove certain text, such as Dust 2 where all Arabic text in signs has been blanked-out.
  • The Perfect World edition of CS:GO lacks ar_monastery due to said map being set in Tibet.

Language

Sounds for factions have also been changed in some countries.

Unused Map Areas

de_cache

Like most other maps in the Competitive map pool, de_cache is set up to use small 1v1 arenas for warm-up, however, warm-ups in the map still take place in the entire map.

CSGO de cache warmuparena.jpg CSGO de cache warmuparena2.jpg

de_cbble

Despite being just out of view, the original passage to B site still remains intact after the Halloween 2018 rework of Cobble. The porta-potties were replaced with gravestones.

CSGO-de cbble original Bpassage.png

de_shortdust

Although the map is a cut-down version of de_dust, many areas of the original map are still fully rendered instead of being removed from the map entirely.

de_dust's A site in Shortdust. A part of de_dust's alleyway in Shortdust.

fy_poolday

A remake of the classic Counter-Strike 1.6 map Poolday, that was meant to be released for Operation Payback. A thumbnail image for the map existed, as well as a picture for the official CS:GO blog. Strings remain for the map.

Thumbnail.

gd_cbble

A cut-down version of de_cbble for the co-operative Guardian mode. The map involves defending against waves of terrorist bots for a set amount of time. A hostage named "Lord William" is present on the map as a nod to Cobble in the previous games being under his ownership. The T and CT spawns are flipped. Players spawn either on a sniper tower or on the bombsite, and can choose between a SSG 08 and a MAG-7 on some weapon crates.

One of the available spawnpoints. Ditto. One of the available weapon caches.

lobby_mapveto

The background map that was used for CS:GO's iteration of Premier Competitive. With the release of Counter-Strike 2, Valve removed all forms of matchmaking from CS:GO, leaving this "map" unused.

Taunts

Hmmm...
To do:
Document the code for taunts in the 2020 leak. The leak also includes code for first person taunts.

Taunts were a scrapped mechanic first seen in the May 31, 2016 patch. Based on the leaked strings, they would be executed in third person mode, only be allowed in specific gamemodes and at the start and end of the round.

ACT_CSGO_TAUNT_CT
ACT_CSGO_TAUNT_SPAWN_CT
ACT_CSGO_TAUNT_SPAWN_T
ACT_CSGO_TAUNT_T

AE_CL_TAUNT_SET_CAMERA_ENABLED
AE_CL_TAUNT_SET_CAMERA_FOV
AE_BEGIN_TAUNT_LOOP

Required key "taunt_definitions" missing.

Taunt definition %short: missing required "name"
Taunt definition %short: missing required "sequence_name"
Taunt definition %short: name must be signed char positive integer

"Normally taunts are restricted to respawning game modes and the end of the round. Set this to allow taunts at any time."

String related to taunts would later be seen in subsequent patches on January 12, 2017 and June 20, 2017.

//January 12
cl_enable_animated_taunt_cam
mp_tauntcam_dist
mp_tauntcam_pitch
mp_tauntcam_speed
mp_tauntcam_yaw
//June 20
sv_taunt_on_spawn
sv_taunt_override

A plethora of sound files intended for the unreleased taunts would later be added in the November 18, 2019 patch with the introduction of Operation Shattered Web.

Dungeon

Files related to a Dungeon mode were added with Operation Shattered Web in the November 18, 2019 patch.

Dungeon can be described as a procedurally generated wave based co-op gamemode, resembling a rouge-like experience. Each floor would stack the CTs against a wave of AI controlled Ts with random pre-defined loadouts. Waves took place on "floors", which players would access through an elevator. These waves would get increasingly harder with Floor 16 being the final wave. The mode would also feature fast travel, that would be unlocked upon reaching Floor 5, 10 and 15.


main.nut

DEBUG <- false;

wave <- 0;

NEXTFLOOR <- 0;						// the next floor to travel to
FASTTRAVEL1 <- false;				// has player unlocked fast travel stage 1?  these vars persist on "@script_varcontainer"
FASTTRAVEL2 <- false;				// has player unlocked fast travel stage 2? 
FASTTRAVEL3 <- false;				// has player unlocked fast travel stage 3? 

PLAYER_AMOUNT <- 0;					// how many players are playing?

PERSISTENTCONTAINER <- Entities.FindByName (null, "@script_varcontainer");
ISWARMUP <- ScriptIsWarmupPeriod();

// Floor list
// Floor 0 - Starting area
// Floor 1 - combat arena, group 1
// Floor 2 - combat arena, group 1
// Floor 3 - Combat arena, group 1
// Floor 4 - Combat arena, group 1
//
// Floor 5 - Combat arena, group 2
// Floor 6 - Combat arena, group 2
// Floor 7 - Combat arena, group 2
// Floor 8 - Combat arena, group 2
//
// Floor 9 - Shortcut fight
//
// Floor 10 - Combat arena, group 3
// Floor 11 - Combat arena, group 3
// Floor 12 - Combat arena, group 3
// Floor 13 - Combat arena, group 3
//
// Floor 14 - Combat arena, group 4
// Floor 15 - Combat arena, group 4

// Floor 16 - End fight

CURRENTDIFFICULTY <- 0;
ENEMYAMOUNT <- 0;
LoadoutType <- [1, 9]
WeaponLoadout <- {}

// NOTE: EnemyDifficulty() uses these to decide weapon loadouts, remember to keep in sync!

// early game loadouts

WeaponLoadout[1] <- "glock"
WeaponLoadout[2] <- "deagle"
WeaponLoadout[3] <- "tec9"
WeaponLoadout[4] <- "sawedoff"
WeaponLoadout[5] <- "nova"
WeaponLoadout[6] <- "mp7"
WeaponLoadout[7] <- "bizon"
WeaponLoadout[8] <- "mac10"
WeaponLoadout[9] <- "ump45"

// mid game

WeaponLoadout[10] <- "galilar"
WeaponLoadout[11] <- "famas"
WeaponLoadout[12] <- "p90"
WeaponLoadout[13] <- "ump45, flashbang"
WeaponLoadout[14] <- "mag7"
WeaponLoadout[15] <- "deagle, molotov"
WeaponLoadout[16] <- "xm1014"
WeaponLoadout[17] <- "famas, hegrenade"
WeaponLoadout[18] <- "nova, flashbang"

// late game

WeaponLoadout[19] <- "xm1014, flashbang"
WeaponLoadout[20] <- "ak47"
WeaponLoadout[21] <- "p90, hegrenade"
WeaponLoadout[22] <- "sg556"
WeaponLoadout[23] <- "m4a1, flashbang"
WeaponLoadout[24] <- "ak47, molotov"
WeaponLoadout[25] <- "galilar, hegrenade"

// PISTOLS: deagle, fiveseven, tec9, p250
// HEAVY : sawedoff, nova, xm1014, mag7, m249
// RIFLES : famas, sg556, ak47, galilar, aug, awp, m4a1
// SMG : mp9, mp7, bizon, ump45, p90, mac10
// NADES : hegrenade, smokegrenade, molotov, flashbang

m_CTs <- [];

function CollectCTs()
{
	ent <- null;

	while( ( ent = Entities.FindByClassname( ent, "player" ) ) != null )
	{
		if ( FindInArray( m_CTs, ent ) == null )
		{
			m_CTs.push( ent );
		}
	}
}

function RoundInit()		// called on OnLevelReset
{

	if (ISWARMUP == false)
	{
		wave = 0;
		EnemyDifficulty( 1 );

		FASTTRAVEL1 = PERSISTENTCONTAINER.GetScriptScope().FASTTRAVEL1;
		FASTTRAVEL2 = PERSISTENTCONTAINER.GetScriptScope().FASTTRAVEL2;
		FASTTRAVEL3 = PERSISTENTCONTAINER.GetScriptScope().FASTTRAVEL3;
	
		SendToConsoleServer( "mp_coopmission_bot_difficulty_offset 1" );
		ScriptCoopSetBotQuotaAndRefreshSpawns( 0 );
	
		CollectCTs();
	
		PLAYER_AMOUNT = m_CTs.len();
	
		printl ("");
		printl ("PLAYER AMOUNT: " + PLAYER_AMOUNT );
		printl ("");
	
		SetFloor();			// set up elevator, spawn points
		
		EntFire("trigger.elevator_doors", "Enable", 0, 0);
	}
	else
	{
	printl ("");
	printl ("");
	printl ("We're in warmup so I D G A F");
	printl ("");
	printl ("");
	}
}

SpawnCollection <- []

function CollectSpawns( name )
{
	ent <- null;

	while( ( ent = Entities.FindByName( ent, name ) ) != null )
	{
		if ( FindInArray( SpawnCollection, ent ) == null )
		{
			SpawnCollection.push( ent );
		}
	}
	
	SetupSpawns();
	
}

function PlayersInElevator( var )
{
local amount = var;
printl ("PLAYERS IN ELEVATOR : " + amount)

	if (amount ==  PLAYER_AMOUNT)
	{
		EntFire("elevator.relay.startmove", "Trigger", 0, 0);
	}
}

function Test()
{


RemoveDecalsAndGuns();



}

function EnemyDifficulty( difficulty )							// Updated via Progression();
{

	switch ( difficulty )
	{
		case 1: 
			LoadoutType[0] = 1;
			LoadoutType[1] = 9;
			ENEMYAMOUNT = 6;
			break;
		case 2:
			LoadoutType[0] = 10;
			LoadoutType[1] = 18;
			ENEMYAMOUNT = 8;
			break;
		case 3:
			LoadoutType[0] = 19;
			LoadoutType[1] = 25;
			ENEMYAMOUNT = 10;
			break;
	}



}

function SetupSpawns()
{

	foreach (spawn in SpawnCollection)
	{
	
	local loadout = WeaponLoadout[RandomInt( LoadoutType[0], LoadoutType[1] )];
	
	spawn.__KeyValueFromString ("weapons_to_give", loadout );
	
	printl ("Equipped bot with " + loadout);
	
	}

		if (wave >= 10)
		{
		local SpawnLen = SpawnCollection.len();
		local RandomPick = SpawnCollection[RandomInt( 0, SpawnLen - 1 )]
		
		RandomPick.__KeyValueFromInt ("armor_to_give", 2 );
		RandomPick.__KeyValueFromString ("model_to_use", "models/player/custom_player/legacy/tm_phoenix_heavy.mdl" );
		}

}

function RespawnPlayers()
{
	ScriptCoopMissionRespawnDeadPlayers();
}

function Progression()
{ 

printl ("WAVE IS CURRENTLY: " + wave);

	if (wave <= 4)
	{
	EntFire( "floor_group1", "PickRandomShuffle", "", 0 );
	EnemyDifficulty( 1 );
	}
	else if (wave == 5)
		{
		SetNextFloor(9);
		}
		else if (wave >= 6 && wave <= 9)
			{
			EntFire( "floor_group2", "PickRandomShuffle", "", 0 );
			EnemyDifficulty( 2 );
			}
			else if (wave == 10)
				{
				SetNextFloor(9);
				}
				else if (wave >= 11 && wave <= 14)
					{
					EntFire( "floor_group3", "PickRandomShuffle", "", 0 );
					EnemyDifficulty( 3 );
					}
					else if (wave == 15)
						{
						SetNextFloor(9);
						}
						else if (wave >= 16 && wave <= 17)
							{
							EntFire( "floor_group4", "PickRandomShuffle", "", 0 );
							}
							else if (wave == 18)
								{
								SetNextFloor(16);
								}
		
}

function SetNextFloor( floor )
{
NEXTFLOOR = floor;

SetSpawnGroup();
}

function SetFloor()
{
	EntFire( "*-spawn", "SetDisabled", "", 0 );		// disable all spawns
	
	// check if player has unlocked fast travel
	
	printl ("FAST TRAVEL STAGE 3: " + FASTTRAVEL3);
	printl ("FAST TRAVEL STAGE 2: " + FASTTRAVEL2);
	printl ("FAST TRAVEL STAGE 1: " + FASTTRAVEL1);
	
	if (FASTTRAVEL3 == true && wave <= 15)
	{
	wave = 16;
	}
	else if (FASTTRAVEL2 == true && wave <= 10)
		{
		wave = 11;
		}
		else if (FASTTRAVEL1 == true && wave <= 5)
			{
			wave = 6;
			}
			else
				{
				wave++;
				printl ("No fast travel unlocked");
				}
	
	Progression();
}

function SetSpawnGroup()
{

	local SpawnGroup = NEXTFLOOR + "-spawn";
	printl (SpawnGroup);
	
	EntFire( SpawnGroup, "SetEnabled", "", 0.1 );

	CollectSpawns( SpawnGroup );

}

function UnlockCheckpointSluice( players )		// check if players are spread out in different sluices
{

	if (players == PLAYER_AMOUNT)
	{
		EntFire( "@checkpoint_relay_start", "Trigger", "", 0 );
	}

}

DroppedWeapon <- null;

function RemoveDecalsAndGuns()				// don't use this quite yet, it will remove the players weapons as well..
{
printl ("CLEANING UP, WOO!");
SendToConsole("r_cleardecals");

//	while((DroppedWeapon = Entities.FindByClassname(DroppedWeapon,"prop_physics")) != null)
//		{
//			DoEntFire("!self","Kill","0",0,null,DroppedWeapon); // Will fire on named and un-named entities alike.
//		}

}

function ElevatorSetFloor()			// run when entering elevator 
{
	EntFire( "elevator.mover", "RunScriptCode", "SetTargetFloor(" + NEXTFLOOR + ")", 0 );
}

function ElevatorArrived()			// run when elevator stops moving
{

	if ( wave == 1 )
	{
		SpawnFirstEnemies( ENEMYAMOUNT );
	}
	else
	{
	SpawnNextWave( ENEMYAMOUNT );
	}

}

function SpawnFirstEnemies( amount )
{
	ScriptCoopMissionSpawnFirstEnemies( amount );	
	ScriptCoopResetRoundStartTime();
}

function SpawnNextWave( amount )
{
	ScriptCoopMissionSpawnNextWave( amount );
}

function OnMissionCompleted()
{
	// fade out screen, end round
	EntFire( "@screen_fade", "Fade", "", 0.0 );	
	EntFire( "@game_end", "EndRound_CounterTerroristsWin", "3", 0.0 );	
	
}

function OnRoundLostKilled()
{
	//what will happen if you loose the round because you died (you could tell the players that your grandma is better than them)
	
}

function OnRoundLostTime()
{
	//what will happen if you loose the round because the time runs out (you could tell the player that they are like turtles)
	
}

function OnRoundReset() 
{
	//called when the round resets
	// IMPORTANT: you need a game_coopmission_manager that has the output 'OnLevelReset' when this is called you NEED to call this function
	// in order for the level to work properly every round!
	RoundInit();
}

function OnSpawnsReset()
{
	//called right before the round resets (usually used for correcting stuff when on a new round other stuff is immediately called)
	//enabled/disabled the correct spawns for the start. * means every group going from Terrorist_00 to infinite enemygroup_example
	EntFire( "*-spawn", "SetDisabled", "", 0 );
	EntFire( "*-CT", "SetDisabled", "", 0 );
	EntFire( "1-CT", "SetEnabled", "", 0 );
}

function OnWaveCompleted()
{	
	if (wave < 18)
	{
		SpawnCollection.clear();
		SetFloor();
		EntFire("elevator.relay.unlock", "Trigger", 0, 0);
	}
	else if (wave == 18)
	{
	printl ("that was the final wave");
	OnMissionCompleted()
	}
	
	if (wave == 6)		// TODO: this one and the next should both be in a checkpoint fight, fast travel unlocked via level script. ooooor just increase enemy amount for checkpoint fights?
	{
	EntFire( "@script_varcontainer", "RunScriptCode", "SetFastTravelVar(" + 1 + ")", 0 );
	ScriptPrintMessageCenterAll ("Fast travel to floor 6 unlocked!");
	}
		if (wave == 11)
		{
		EntFire( "@script_varcontainer", "RunScriptCode", "SetFastTravelVar(" + 2 + ")", 0 );
		ScriptPrintMessageCenterAll ("Fast travel to floor 11 unlocked!");
		}
			if (wave == 16)
			{
			EntFire( "@script_varcontainer", "RunScriptCode", "SetFastTravelVar(" + 3 + ")", 0 );
			ScriptPrintMessageCenterAll ("Fast travel to floor 16 unlocked!");
			}
	

	//Check which wave the player is and do stuff
//	if ( wave == 1 )
//	{
//		EntFire( "wave_*", "SetDisabled", "", 0 );
//		EntFire( "wave_02", "SetEnabled", "", 0 );
//		EntFire( "door_wave_01", "Unlock", "", 1 );
//		EntFire( "door_wave_01", "SetGlowEnabled", "", 1 );
//	}
//	else if ( wave == 2 )
//	{
//		EntFire( "wave_*", "SetDisabled", "", 0 );
//		EntFire( "wave_03", "SetEnabled", "", 0 );
//		EntFire( "door_wave_02", "Unlock", "", 1 );
//		EntFire( "door_wave_02", "SetGlowEnabled", "", 1 );
//	}
//	else if ( wave == 3 )
//	{
//		EntFire( "door_wave_03", "Unlock", "", 1 );
//		EntFire( "door_wave_03", "SetGlowEnabled", "", 1 );
//	}


}

function ChangeGameModeToCoopIfNotCorrect()
{
	// This will change the game mode and game type if the player has not initialized this before starting the map.
        local game_mode = ScriptGetGameMode();
        local game_type = ScriptGetGameType();
        local map = GetMapName();

	if (game_mode != 1 || game_type != 4)
	{
		SendToConsole("game_mode 1; game_type 4; changelevel " + map);
	}
}

// util stuff

function FindInArray( array, thing )
{
	foreach( i, elem in array )
	{
		if ( elem == thing )
			return i;
	}
	
	return null;
}

function debugPrint( text )
{
	if ( DEBUG == false )
		return;

	printl( text );
}

elevator.nut

FLOORHEIGHT <- 0.0625;

ELEVATOR_MOVING <- false;

IN_TRANSIT <- false;

TARGET_FLOOR <- 0;

function Think()
{
	local MoveVector = self.GetVelocity();

	if (MoveVector.z != 0)
		{
		ELEVATOR_MOVING = true;
		}
		else
		{
		ELEVATOR_MOVING = false;
		}
		
		if (IN_TRANSIT == true && ELEVATOR_MOVING == false)
			{
			EntFire("elevator.relay.endmove", "Trigger", 0, 0);
			IN_TRANSIT = false;
			}

}


function SetTargetFloor( floor )
{

TARGET_FLOOR = floor;
printl ("ELEVATOR: Floor received, set to " + TARGET_FLOOR);

}


function MoveToFloor()
{
local movedistance = TARGET_FLOOR * FLOORHEIGHT;

EntFire("elevator.mover", "SetPosition", movedistance, 0);

printl ("ELEVATOR: moving to floor " + TARGET_FLOOR + ", which is at position " + movedistance);

IN_TRANSIT = true;
}




function TestMove()
{
local randomfloor = RandomInt(2, 14)
TARGET_FLOOR = randomfloor;
printl (randomfloor);

MoveToFloor();
}

persistent.nut

// persistent variables, checked and set from main script

FASTTRAVEL1 <- false;				// has player unlocked fast travel stage 1? 
FASTTRAVEL2 <- false;				// has player unlocked fast travel stage 2? 
FASTTRAVEL3 <- false;				// has player unlocked fast travel stage 3? 

function SetFastTravelVar( var )
{

	if (var == 1)
	{
		FASTTRAVEL1 = true;
	}
		if (var == 2)
		{
			FASTTRAVEL2 = true;
		}
			if (var == 3)
			{
				FASTTRAVEL3 = true;
			}

printl ("")
printl ("PERSISTENT VAR:")
printl ("FASTRAVEL1 = " + FASTTRAVEL1)
printl ("FASTRAVEL2 = " + FASTTRAVEL2)
printl ("FASTRAVEL3 = " + FASTTRAVEL3)
printl ("")
}

Leftovers De_balkan

Despite the developers never releasing this map has only mission bonus condition string referring in game files.

"quest_bonus_de_balkan"		"when the map is Balkan"

On the February 28, 2018, to Steam Database were added Rich Presence.

Revisional Differences

Hmmm...
To do:
CS:GO has seen many revisional changes that they substantiate their own page, See https://www.counter-strike.net/news/updates.