CS: GO December 10th Patch – Content Analysis

 

Front-End Changes


 

1.34.6.2 Changelog

MAPS
GAMEPLAY
  • CZ75-Auto adjustments
    • Magazine size has been reduced to 8 and reserve ammo is now 16 (3 mags total).
    • Damage has been reduced slightly.
    • Firing rate has been reduced slightly
    • The CZ75-Auto takes nearly twice as long to draw, and has an updated draw animation.
    • Kill reward is now 1/3.
    • Updated the weapon description.
  • Increased price of M4A1-S to $3100
  • Reduced price of Desert Eagle to $700
  • Updated the Tec-9 firing sound.
  • Fixed M4A1-S muzzle flash showing through smoke.
  • Fixed not being able to defuse the bomb in some cases where it was planted on a ledge and the player attempting to defuse was standing next to it on the ground (e.g. the fountain in Cobblestone).
  • Fixed a case on community servers where a player would get income after the first round when they should not.
UI
  • Team equipment value now correctly accounts for cost of CZ75-Auto and for two flashbangs.
  • “Assists” on teammate kills no longer get counted in scoreboard.
  • Added some new holiday freeze-cam borders and the holiday cheer has been re-enabled – Happy holidays!
MISC
  • Gifts have been re-enabled.
  • Released a new set of stickers (available now as offers), and put some music kits on sale.
  • Fixed a few localization errors
  • Fixed a typo in the game mode descriptions.
  • Fixed several exploits in the engine.

 

Re-introducing Train

Train is Back! Valve has just released a new and upgraded version of the map for Counter-Strike: Global Offensive. They rebuilt the map from the ground up “in order to improve both the visual appearance and competitive gameplay balance of this iconic location.” Not much more to say… Other than look at the comparisons!
 

De_Train\\\’s Radar

Player\\\’s Perspective
Spectator\\\’s Perspective

 

Game play – Weapon Changes

Within the weapon change log – the Desert Eagle was reduced in price while the Tec-9 had some slight buffs to it\\\’s values.

Weapon Before Patch After Patch
Desert Eagle
Weapon Price – $800 $700
Tec-9
Weapon characteristics –
Range Modifier 0.831 0.861
Accuracy Model Parameters –
Spread 2 1.8
Inaccuracy Crouch 7.57 7.27
Inaccuracy Stand 9.43 9.03
Inaccuracy Fire 36.88 32.88
Inaccuracy Move 3.81 3.21
Recovery Time Stand 0.386834 0.376834

Additional Community Stickers

Valve has once again released another set of community made stickers with this latest update.

Blood Broiler

High Grade
blood_broiler_large

Bomb Squad (Foil)

High Grade
bombsquad_foil_large

Dinked

High Grade
dinked_large

Drug War Veteran

High Grade
drugwarveteran_large

Ho Ho Ho

High Grade
hohoho_large

Massive Pear

High Grade
massivepear_large

My Little Friend

High Grade
mylittlefriend_large

Pandamonium

High Grade
pandamonium_large

Phoenix (Foil)

High Grade
phoenix_foil_large

SAS Chicken

High Grade
saschicken_large

Thug Life

High Grade
thuglife_large

T-Rekt

High Grade
trekt_large

Warowl

High Grade
warowl_large

Work For Ammo

High Grade
workforfood_large

 

Back-End Changes


 

Version Released

 

Client Version = 151

Server Version = 151

Patch Version = 1.34.6.2

Skin Modified ~ Tribute AK47

The texture for the \\\’Tribute\\\’ AK47 skin has been slightly modified by having one of the “8” removed. A comparison of the texture difference is located below :

Updated/Added Audio Effects

Warning:  The following sound player level\\\’s default at the maximum volume. This is a reminder to turn down the volume with the slider before playing.

The Tec-9 bullet sound effect have been reworked with this patch release. Also new map sound effects have been added with the release of the revamp De_Train.

Tec-9
  • Old


 

  • New

 

Map Sound Effects
  • De_Train – Radio
  • De_Train – Train Loop
  • Tech Room – Server Loop
  • Tech Room – SFX 1
  • Tech Room – SFX 2
  • Tech Room – SFX 3
  • Tech Room – SFX 4
  • Tech Room – SFX 5
  • Tech Room – SFX 6
  • Tech Room – SFX 7
  • Tech Room – SFX 8
  • Tech Room – SFX 9
  • Tech Room – Ambient Sound

 

There is evidence that the developers are working on a new sound effect for footsteps on concrete. A key example of the current issue with footsteps on concrete takes place on Nuke; in many different situations the player is mislead by the current sound effects. Located below is the current version of the footsteps on concrete and after that is the \\\’WIP\\\’ version – to most people at the moment they will sound almost identically :

  • Concrete1.wav ~ Current Version
  • Concrete1_test.wav

 

Texture Modified ~ Water Heater

The following texture for a water heater model has been modified with the release of the new De_Train. Since the theme of the revamp De_Train is for certain in a ex-soviet location; the English writing on the water heater has been removed.

Particle Modifications

De_Train

The remodeling of Train has added two new particles that are related to the effect of a TV impact.

  • Old Particles


 

  • New Particles – TV Impacts

Weapon Muzzle Flash

The particle effect from shooting the M4A1-S behind smoke has been fixed. There was a glitch where the muzzle flash would be highlighted through the smoke, and it would give away the enemy position.

Old - Muzzle Flash Assault Rifle

Old – M4A1-S Muzzle Flash

New - Muzzle Flash Assault Rifle

New – M4A1-S Muzzle Flash

Weapon Muzzle Flash ~ Values

 

Train\\\’s Map Placements

The remodeling of De_Train has moved around the placement of all the usual positions and the loading screen icons.

  • Location of these modifications are represented in de_train.txt
// HLTV overview description file for de_train.bsp

"de_train"
{
	"material"	"overviews/de_train"	// texture file
	- "pos_x"	"-2050"	// upper left world coordinate
	- "pos_y"	"2300"
	- "scale"	"4.0" 
	+ "pos_x"	"-2477"	// upper left world coordinate
	+ "pos_y"	"2392"
	+ "scale"	"4.7" 
	// loading screen icons and positions
	- "CTSpawn_x"	"0.88"
	- "CTSpawn_y"	"0.86"
	- "TSpawn_x"	"0.06"
	- "TSpawn_y"	"0.18"
	- "bombA_x"	"0.60"
	- "bombA_y"	"0.52"
	- "bombB_x"	"0.50"
	- "bombB_y"	"0.88"
	+ "CTSpawn_x"	"0.86"
	+ "CTSpawn_y"	"0.77"
	+ "TSpawn_x"	"0.12"
	+ "TSpawn_y"	"0.25"
	+ "bombA_x"	"0.59"
	+ "bombA_y"	"0.49"
	+ "bombB_x"	"0.52"
	+ "bombB_y"	"0.76"

 

Audio Modifications

The \\\’physics cannister – thruster loop\\\’ had it\\\’s dBs turned down slightly; while the original value one was added as a test value alongside the test footsteps.

  • Location of these modifications are represented in game_sounds_ambient_generic.txt
"PhysicsCannister.ThrusterLoop"
{
	"channel"		"CHAN_STATIC"
	"volume"		"VOL_NORM"
	"pitch"			"100"

	- "soundlevel"	"SNDLVL_100DB"
	+ "soundlevel"	"SNDLVL_90DB"

	"wave"			"ambient/gas/cannister_loop.wav"
}
"Test.Footstep"
{
	"channel"	"CHAN_STATIC"
	"volume"	"VOL_NORM"
	"pitch"		"100"

	"soundlevel"	"SNDLVL_90DB"

	"wave"		"player/footsteps/concrete1_test.wav"
}



"Test.ThrusterLoop"
{
	"channel"	"CHAN_STATIC"
	"volume"	"VOL_NORM"
	"pitch"		"100"

	"soundlevel"	"SNDLVL_90DB"

	"wave"		"ambient/gas/cannister_loop.wav"
}

"de_train.RadioLoop"
{
	"channel"	"CHAN_STATIC"
	"volume"	"0.5"
	"pitch"		"100"

	"soundlevel"	"SNDLVL_70DB"

	"wave"		"*ambient/de_train_radio.wav"
}

 
The sound scape for De_Train needed to be updated with the revamp of the map.

  • Location of these additions are represented in soundscapes_train_new.txt
// new de_train soundscapes


//------------------------------------------------
//
// Generic outdoors ambience
//
"train_new.Outside"
{
	"dsp" "1"
	"fadetime" "1.75"
	
        // underlying area "tone"
	"playlooping"
	{
		"volume"	"0.6"
		"pitch"		"100"
		"wave"		"ambient\\\\wind\\\\tree_sway_wind_lp_02.wav"
	}
	
	"playlooping"
	{
		"volume"	"0.6"
		"pitch"		"100"
		"wave"		"ambient\\\\wind\\\\csgo_dust_wind_lp_01.wav"
	}
	
	"playrandom"
	{
		"time"		"15,30"
		"volume"	"0.1"
		"pitch"		"90,110"

		"rndwave"
		{
			"wave"	"ambient/wind/wind_gust_8.wav"
			"wave"	"ambient/wind/wind_gust_10.wav"
		}
	}

	// position this around the outskirts of the map - distant train sounds
	"playrandom"
	{
		"time"		"5,30"
		"volume"	"0.1,0.3"
		"pitch"		"90,100"
		"soundlevel"  	"SNDLVL_90dB"
		"position"            "1" 

		"rndwave"
		{
			"wave"	"(ambient/playonce/machines/train_pass_1.wav"
			"wave"	"(ambient/playonce/machines/train_pass_2.wav"
			"wave"	"(ambient/playonce/machines/train_pass_3.wav"
			"wave"	"(ambient/playonce/machines/train_pass_1.wav"
			"wave"	"(ambient/playonce/machines/train_pass_2.wav"
			"wave"	"(ambient/playonce/machines/train_pass_3.wav"
			"wave"	"(ambient/machines/train_horn_1.wav"
			"wave"	"(ambient/machines/train_horn_2.wav"
			"wave"	"(ambient/machines/train_horn_3.wav"
		}
	}
	
	"playrandom"
	{
		"time"		"20,45"
		"volume"	"0.04,0.09"
		"pitch"		"80,100"


		"rndwave"
		{
			"wave"	"ambient/playonce/machines/train_pass_far.wav"
		}
	}
	
	"playrandom"
	{
		"time"		"15,40"
		"volume"	"0.15,0.20"
		"pitch"		"80,100"
		"soundlevel"  	"SNDLVL_95dB"

		"rndwave"
		{
			"wave"	"ambient/playonce/misc/garbage_truck1.wav"
			"wave"	"ambient/playonce/misc/truck_backup1.wav"
			"wave"	"ambient/playonce/misc/truck_drive1.wav"
			"wave"	"ambient/playonce/misc/truck_drive2.wav"
			"wave"	"ambient/playonce/misc/crane_move1.wav"
		}
	}

	"playrandom"
	{
		"time"		"6,20"
		"volume"	"0.20,0.40"
		"pitch"		"80,100"
		"soundlevel"  	"SNDLVL_95dB"

		"rndwave"
		{
			"wave"	"ambient/misc/carhonk1.wav"
			"wave"	"ambient/misc/carhonk2.wav"
			"wave"	"ambient/misc/carhonk3.wav"

		}
	}
	
	// planes flying overhead
	"playrandom"
	{
		"time"		"60,90"
		"volume"	"0.05,0.1"
		"pitch"		"90,100"
		

		"rndwave"
		{
			"wave"	"ambient/overhead/plane1.wav"
			"wave"	"ambient/overhead/plane2.wav"
			"wave"	"ambient/playonce/overhead/plane3.wav"
		}
	}
	
	// Flies from behind fence
	"playrandom"
	{
		"time"		"3,15"
		"volume"	"0.2"
		"pitch"		"90,110"
		"soundlevel"  	"SNDLVL_55dB"
		"position"	"2"

		"rndwave"
		{
			"wave"	"ambient/animal/flies1.wav"
			"wave"	"ambient/animal/flies2.wav"
			"wave"	"ambient/animal/flies3.wav"
			"wave"	"ambient/animal/flies4.wav"
			"wave"	"ambient/animal/flies5.wav"
		}

//---------------------------------------------------------
//
// Generic outdoors ambience
//
"train_new.Outside_TSpawn"
{
	"dsp" "1"
	"fadetime" "1.75"
	
        // underlying area "tone"
	"playlooping"
	{
		"volume"	"0.5"
		"pitch"		"100"
		"wave"		"ambient\\\\wind\\\\tree_sway_wind_lp_02.wav"
	}
	
	"playlooping"
	{
		"volume"	"0.6"
		"pitch"		"100"
		"wave"		"ambient\\\\wind\\\\csgo_dust_wind_lp_01.wav"
	}
	
	"playrandom"
	{
		"time"		"15,30"
		"volume"	"0.1"
		"pitch"		"90,110"

		"rndwave"
		{
			"wave"	"ambient/wind/wind_gust_8.wav"
			"wave"	"ambient/wind/wind_gust_10.wav"
		}
	}

	// position this around the outskirts of the map - distant train sounds
	"playrandom"
	{
		"time"		"5,30"
		"volume"	 "0.1,0.3"
		"pitch"		"90,100"
		"soundlevel"  	"SNDLVL_90dB"
		"position"       "1" 

		"rndwave"
		{
			"wave"	"(ambient/playonce/machines/train_pass_1.wav"
			"wave"	"(ambient/playonce/machines/train_pass_2.wav"
			"wave"	"(ambient/playonce/machines/train_pass_3.wav"
			"wave"	"(ambient/playonce/machines/train_pass_1.wav"
			"wave"	"(ambient/playonce/machines/train_pass_2.wav"
			"wave"	"(ambient/playonce/machines/train_pass_3.wav"
			"wave"	"(ambient/machines/train_horn_1.wav"
			"wave"	"(ambient/machines/train_horn_2.wav"
			"wave"	"(ambient/machines/train_horn_3.wav"
		}
	}
	
	"playrandom"
	{
		"time"		"20,45"
		"volume"	"0.04,0.09"
		"pitch"		"80,100"


		"rndwave"
		{
			"wave"	"ambient/playonce/machines/train_pass_far.wav"
		}
	}
	
	"playrandom"
	{
		"time"		"15,40"
		"volume"	"0.15,0.20"
		"pitch"		"80,100"
		"soundlevel"  	"SNDLVL_95dB"

		"rndwave"
		{
			"wave"	"ambient/playonce/misc/garbage_truck1.wav"
			"wave"	"ambient/playonce/misc/truck_backup1.wav"
			"wave"	"ambient/playonce/misc/truck_drive1.wav"
			"wave"	"ambient/playonce/misc/truck_drive2.wav"
			"wave"	"ambient/playonce/misc/crane_move1.wav"
		}
	}

	"playrandom"
	{
		"time"		"6,20"
		"volume"	"0.20,0.40"
		"pitch"		"80,100"
		"soundlevel"  	"SNDLVL_95dB"

		"rndwave"
		{
			"wave"	"ambient/misc/carhonk1.wav"
			"wave"	"ambient/misc/carhonk2.wav"
			"wave"	"ambient/misc/carhonk3.wav"

		}
	}
	
	// planes flying overhead
	"playrandom"
	{
		"time"		"60,90"
		"volume"	"0.05,0.1"
		"pitch"		"90,100"
		

		"rndwave"
		{
			"wave"	"ambient/overhead/plane1.wav"
			"wave"	"ambient/overhead/plane2.wav"
			"wave"	"ambient/playonce/overhead/plane3.wav"
		}
	}
	
	// Flies from dumpster
	"playrandom"
	{
		"time"		"3,15"
		"volume"	"0.2"
		"pitch"		"90,110"
		"soundlevel"  	"SNDLVL_55dB"
		"position"	"2"

		"rndwave"
		{
			"wave"	"ambient/animal/flies1.wav"
			"wave"	"ambient/animal/flies2.wav"
			"wave"	"ambient/animal/flies3.wav"
			"wave"	"ambient/animal/flies4.wav"
			"wave"	"ambient/animal/flies5.wav"
		}
	}
	
	// Info Node on Truck
	"playlooping"
	{
		"position"	"3"
		"volume"	"0.4"
		"wave"		"ambient/machines/truck_idle_lp_01.wav"
		"soundlevel"	"SNDLVL_65dB"
	}
	
	// Info Node on Train
	"playlooping"
	{
		"position"	"4"
		"volume"	"0.8"
		"wave"		"ambient/de_train_trainloop.wav"
		"soundlevel"	"SNDLVL_85dB"
	}
}


//-------------------------------------------------
//
// Generic outdoors ambience
//
"train_new.Outside_CTSpawn"
{
	"dsp" "1"
	"fadetime" "1.75"
	
        // underlying area "tone"
	"playlooping"
	{
		"volume"	"0.5"
		"pitch"		"100"
		"wave"		"ambient\\\\wind\\\\tree_sway_wind_lp_02.wav"
	}
	
	"playlooping"
	{
		"volume"	"0.6"
		"pitch"		"100"
		"wave"		"ambient\\\\wind\\\\csgo_dust_wind_lp_01.wav"
	}
	
	"playrandom"
	{
		"time"		"15,30"
		"volume"	"0.1"
		"pitch"		"90,110"

		"rndwave"
		{
			"wave"	"ambient/wind/wind_gust_8.wav"
			"wave"	"ambient/wind/wind_gust_10.wav"
		}
	}

	// position this around the outskirts of the map - distant train sounds
	"playrandom"
	{
		"time"		"5,30"
		"volume"	"0.1,0.3"
		"pitch"		"90,100"
		"soundlevel"  	"SNDLVL_90dB"
		"position"      "1" 

		"rndwave"
		{
			"wave"	"(ambient/playonce/machines/train_pass_1.wav"
			"wave"	"(ambient/playonce/machines/train_pass_2.wav"
			"wave"	"(ambient/playonce/machines/train_pass_3.wav"
			"wave"	"(ambient/playonce/machines/train_pass_1.wav"
			"wave"	"(ambient/playonce/machines/train_pass_2.wav"
			"wave"	"(ambient/playonce/machines/train_pass_3.wav"
			"wave"	"(ambient/machines/train_horn_1.wav"
			"wave"	"(ambient/machines/train_horn_2.wav"
			"wave"	"(ambient/machines/train_horn_3.wav"
		}
	}
	
	"playrandom"
	{
		"time"		"20,45"
		"volume"	"0.04,0.09"
		"pitch"		"80,100"


		"rndwave"
		{
			"wave"	"ambient/playonce/machines/train_pass_far.wav"
		}
	}
	
	"playrandom"
	{
		"time"		"15,40"
		"volume"	"0.15,0.20"
		"pitch"		"80,100"
		"soundlevel"  	"SNDLVL_95dB"

		"rndwave"
		{
			"wave"	"ambient/playonce/misc/garbage_truck1.wav"
			"wave"	"ambient/playonce/misc/truck_backup1.wav"
			"wave"	"ambient/playonce/misc/truck_drive1.wav"
			"wave"	"ambient/playonce/misc/truck_drive2.wav"
			"wave"	"ambient/playonce/misc/crane_move1.wav"
		}
	}

	"playrandom"
	{
		"time"		"6,20"
		"volume"	"0.20,0.40"
		"pitch"		"80,100"
		"soundlevel"  	"SNDLVL_95dB"

		"rndwave"
		{
			"wave"	"ambient/misc/carhonk1.wav"
			"wave"	"ambient/misc/carhonk2.wav"
			"wave"	"ambient/misc/carhonk3.wav"

		}
	}
	
	// planes flying overhead
	"playrandom"
	{
		"time"		"60,90"
		"volume"	"0.05,0.1"
		"pitch"		"90,100"
		

		"rndwave"
		{
			"wave"	"ambient/overhead/plane1.wav"
			"wave"	"ambient/overhead/plane2.wav"
			"wave"	"ambient/playonce/overhead/plane3.wav"
		}
	}
	
	// Info Node on Truck
	"playlooping"
	{
		"position"	"3"
		"volume"	"0.4"
		"wave"		"ambient/machines/big_truck.wav"
		"soundlevel"	"SNDLVL_65dB"
	}
}

//------------------------------------------
"train_new.Warehouse"
{
	"dsp"	"1"
	"fadetime" "1.75"


	"playlooping"
	{

		"pitch"		"100"
		"volume"	"0.1"
		"wave"	"ambient/atmosphere/factory_loop_1.wav"
	}
	
	"playlooping"
	{
		"volume"	"0.5"
		"pitch"		"100"
		"wave"		"ambient/atmosphere/mill_bigwarehouseamb_loop.wav"
	}
	

	"playrandom"
	{
		"position"	"random"	
		"time"		"10,20"
		"volume"	"0.2,0.3"
		"pitch"		"95,110"
		"soundlevel"  	"SNDLVL_75dB"

		"rndwave"
		{
			"wave"	"ambient/atmosphere/cs_metalscrapeverb01.wav"
			"wave"	"ambient/atmosphere/cs_metalscrapeverb02.wav"
			"wave"	"ambient/atmosphere/cs_metalscrapeverb03.wav"
			"wave"	"ambient/atmosphere/cs_metalscrapeverb04.wav"
			"wave"	"ambient/atmosphere/cs_metalscrapeverb05.wav"
			"wave"	"ambient/atmosphere/cs_metalscrapeverb06.wav"
			"wave"	"ambient/atmosphere/cs_metalscrapeverb07.wav"
			"wave"	"ambient/atmosphere/cs_metalscrapeverb08.wav"
			"wave"	"ambient/atmosphere/cs_metalscrapeverb09.wav"
			"wave"	"ambient/atmosphere/cs_metalscrapeverb10.wav"
		}
	}
	 
	// the positions correspond to each window along the catwalk
	"playrandom"
	{
		"time"		"20,40"
		"volume"	"0.2,0.3"
		"pitch"		"90,100"
		"position"      "1" 
		"soundlevel"  	"SNDLVL_75dB"

		"rndwave"
		{
			"wave"	"(ambient/playonce/machines/train_pass_1.wav"
			"wave"	"(ambient/playonce/machines/train_pass_2.wav"
			"wave"	"(ambient/playonce/machines/train_pass_3.wav"
		}

//---------------------------------------------------
"train_new.InteriorGeneric"
{
	"dsp"	"1"
	"fadetime" "1.75"


	"playlooping"
	{

		"pitch"			"100"
		"volume"		"0.9"

		"wave"	"ambient/atmosphere/csgo_dust_indoors_lp_01.wav"
	}
	
	
	"playrandom"
	{
		"time"		"50,60"
		"volume"	"0.05,0.1"
		"pitch"		"90,100"
		"position"      "random" 

		"rndwave"
		{
			"wave"	"(ambient/playonce/machines/train_pass_1.wav"
			"wave"	"(ambient/playonce/machines/train_pass_2.wav"
			"wave"	"(ambient/playonce/machines/train_pass_3.wav"
		}
	}
	
	// vents 1
	"playlooping"
	{
		"position"	"1"
		"volume"	"0.2"
		"soundlevel"  	"SNDLVL_70dB"
		"wave"		"ambient/machines/air_conditioner_loop_1.wav"
	}
	

}

//-----------------------------------------------
"train_new.Breakroom"
{
	"dsp"	"1"
	"fadetime" "1"


	"playlooping"
	{

		"pitch"		"100"
		"volume"	"0.4"
		"wave"	"ambient/tones/office_room_tone_02.wav"
	}
	
	// Info Node on Fridge
	"playlooping"
	{
		"position"	"0"
		"volume"	"0.2"
		"wave"		"ambient/misc/flour_light_loud.wav"
		"soundlevel"	"SNDLVL_65dB"
	}

}

//-----------------------------------------
"train_new.Showers"
{
	"dsp"	"1"
	"fadetime" "1"


	"playlooping"
	{

		"pitch"		"100"
		"volume"	"0.7"
		"wave"	"ambient/tones/office_room_tone_01.wav"
	}
	
	// Position 1: Water pipes
	"playlooping"
	{
		"position"	"1"
		"volume"	"0.2"
		"wave"		")ambient/atmosphere/amb_water_drip_01.wav"
		"soundlevel" 	"SNDLVL_50dB"
	}

}

//---------------------------------------------
"train_new.Outside_Ivy"
{
	"dsp"	"1"
	"fadetime" "1.5"
	
	"playsoundscape"
	{
		"name" "train_new.Outside"
	}

	
	"playlooping"
	{
		"pitch"		"100"
		"volume"	"0.7"
		"position"	"1"
		"soundlevel"  	"SNDLVL_90dB"
		"wave"	"ambient/tones/industrial2_loop.wav"
	}

}




//----------------------------------------------
"train_new.OfficeRoom"
{
	"dsp"	"1"
	"fadetime" "1.75"

	// underlying area "tone"
	"playlooping"
	{
		"volume"	"0.1"
		"pitch"		"100"
		"wave"		"ambient/atmosphere/indoor1.wav"
	}
	
}


//------------------------------------------
"train_new.TechRoom"
{
	"dsp"	"1"
	"fadetime" "1.75"

	// underlying area "tone"
	"playlooping"
	{
		"volume"	"0.2"
		"pitch"		"100"
		"wave"		"ambient/office/tech_room.wav"
	}
	
	
	// Power hum playing from server outside tech room
	"playlooping"
	{
		"position"	"1"	
		"pitch"		"100"
		"volume"	"0.8"
		"soundlevel"  	"SNDLVL_60dB"

		"wave"	"ambient/office/tech_loop_server.wav"
	}
	
	"playrandom"
	{
		"position"	"2"	
		"time"		"3,15"
		"volume"	"0.5,0.9"
		"pitch"		"95,110"
		"soundlevel"  	"SNDLVL_75dB"

		"rndwave"
		{
			"wave"	"ambient/office/tech_oneshot_01.wav"
			"wave"	"ambient/office/tech_oneshot_02.wav"
			"wave"	"ambient/office/tech_oneshot_03.wav"
			"wave"	"ambient/office/tech_oneshot_04.wav"
			"wave"	"ambient/office/tech_oneshot_05.wav"
			"wave"	"ambient/office/tech_oneshot_06.wav"
			"wave"	"ambient/office/tech_oneshot_07.wav"
			"wave"	"ambient/office/tech_oneshot_08.wav"
			"wave"	"ambient/office/tech_oneshot_09.wav"
		}

//----------------------------------------------
"train_new.Alley"
{
	"dsp"	"1"
	"fadetime" "1.5"

	"playlooping"
	{

		"pitch"		"100"
		"volume"	"0.6"
		"wave"	"ambient/atmosphere/factory_loop_1.wav"
	}

	// Steam behind fence
	"playlooping"
	{
		"position"	"1"	
		"pitch"		"90"
		"volume"	"0.5"
		"soundlevel"  	"SNDLVL_50dB"

		"wave"	"ambient/gas/steam_loop1.wav"
	}

	// Power hum from lights
	"playlooping"
	{
		"position"	"2"	
		"pitch"		"100"
		"volume"	"0.4"
		"soundlevel"  	"SNDLVL_60dB"

		"wave"	"ambient/machines/power_transformer_loop_1.wav"
	}

	

	// Flies from behind fence
	"playrandom"
	{
		"time"		"3,15"
		"volume"	"0.4"
		"pitch"		"90,110"
		"soundlevel"  	"SNDLVL_75dB"
		"position"	"random"

		"rndwave"
		{
			"wave"	"ambient/animal/flies1.wav"
			"wave"	"ambient/animal/flies2.wav"
			"wave"	"ambient/animal/flies3.wav"
			"wave"	"ambient/animal/flies4.wav"
			"wave"	"ambient/animal/flies5.wav"
		}

 

New Holiday Borders

Last year\\\’s holiday update only came with one featured border; this year there has been an addition of three more borders.

Last Year's Border

Previous Holiday Border


Holiday Border 2

Holiday Border 2


Holiday Border 3

Holiday Border 3


Holiday Border 4

Holiday Border 4

Updated Store Images

With the new Store UI being introduced in the following patch, bar images had to be redone for the gift packages display.

Gift – 1 Player
gift1player_storeold

Old

gift1player_store

New

Double Store Image

Double Sized Display

Gift – 9 Player

Old

Old


New

New


Double Store Image

Double Sized Display

Gift – 25 Spectators

Old

Old


New

New


Double Store Image

Double Sized Display

 

Updated Strings

Added text for the call outs/positions of the remolded de_train.

  • Location of these additions are represented in the navplace.db + csgo_english.txt
//Train
	Ivy
	PopDog
	TMain
	Tunnel1
	Tunnel2
	ElectricalBox

 
With De_Train being taken out of the reserve map pool and moved to the operation map pool for the revamp – this put a question mark on De_Shorttrain for the game type \\\’Demolition\\\’. The answer is De_Shorttrain has been completely removed for the game modes \\\’Demolition\\\’ and \\\’Deathmatch\\\’.

  • Location of these modifications are represented in the gamemodes.txt
"mg_demolition"
{
	"imagename"		"mapgroup-demolition"
	"nameID"		"#SFUI_Mapgroup_demolition"
	"tooltipID"		"#SFUI_MapGroup_Tooltip_Desc_demo"
	- "tooltipMaps"	"de_lake,de_stmarc,de_sugarcane,de_bank,de_safehouse,de_shorttrain,de_shortdust"
	+ "tooltipMaps"	"de_lake,de_stmarc,de_sugarcane,de_bank,de_safehouse,de_shortdust"
	"name"			"mg_demolition"
	"maps"
	{
		"de_lake"		""
		"de_stmarc"		""
		"de_sugarcane"		""
		"de_bank"		""
		"de_safehouse"		""
		- "de_shorttrain"	""
		"de_shortdust"		""

- "mg_de_train"
- {
	- "imagename"		"map-train-overall"
	- "nameID"		"#SFUI_Map_de_train"
	- "tooltipID"		"#SFUI_Map_Tooltip_Desc_Reserves"
	- "name"		"mg_de_train"
	- "icontag"		"bomb"
	- "grouptype"		"reserves"
	- "maps"
	- {
		- "de_train"		""
+ "mg_de_train"
+ {
	+ "imagename"		"map-train-overall"
	+ "nameID"		"#SFUI_Map_de_train"
	+ "tooltipID"		"#SFUI_Map_Tooltip_Desc_Train"
	+ "name"		"mg_de_train"
	+ "icontag"		"bomb"
	+ "requires_attr"                       "season access"
	+  "requires_attr_value"   "4"
	+ "requires_attr_reward"                "minutes played"
	+ "show_medal_icon"       "5Operation$Community Season Five Summer 2014"
	+ "show_rich_presence"    "_vanguard"
	+ "grouptype"     "op_op05"
	+ "maps"
	+ {
		+ "de_train"		""

 
The Tec-9 and Desert Eagle had their values modified within their assigned config while the CZ-75 and M4A1-S had their modifications within the prefab values.

  • Location of these modifications are represented in the items_game.txt
"weapon_cz75a_prefab"
{
	"prefab"		"weapon_p250_prefab"
	"item_name"		"#SFUI_WPNHUD_CZ75"
	"item_description"	"#CSGO_Item_Desc_cz75a"
	"model_player"		"models/weapons/v_pist_cz_75.mdl"
	"model_world"		"models/weapons/w_pist_cz_75.mdl"
	"icon_default_image"		"materials/icons/inventory_icon_weapon_cz75a.vtf"
	"image_inventory"		"econ/weapons/base_weapons/weapon_cz75a"
	"attributes"
	{
		+ "damage"		"33"
		"is full auto"		"1"
		"in game price"		"500"
		- "cycletime"		"0.100000"
		+ "cycletime"		"0.110000"
		"recoil angle"		"0"
		"recoil angle variance"		"180"
		- "recoil magnitude"		"25"
		- "recoil magnitude variance"	"10"
		+ "recoil magnitude"		"27"
		+ "recoil magnitude variance"	"12"
		"spread"		"3"
		- "primary clip size"		"12"
		+ "primary clip size"		"8"
		- "inaccuracy fire"		"25.000000"
		"magazine model"		"models/weapons/w_pist_cz_75_mag.mdl"
		"inaccuracy stand"		"10.430000"
		+ "inaccuracy fire"		"25.000000"
		"inaccuracy crouch"		"7.600000"
		+ "kill award"		"100"
	}
"weapon_m4a1_silencer_prefab"
{
	"prefab"		"rifle"
	"item_class"		"weapon_m4a1"
	"item_name"		"#SFUI_WPNHUD_M4_SILENCER"
	"item_description"	"#CSGO_Item_Desc_m4a1_silencer"
	"item_rarity"		"uncommon"
	"image_inventory"	"econ/weapons/base_weapons/weapon_m4a1_silencer"
	"model_player"		"models/weapons/v_rif_m4a1_s.mdl"
	"model_world"		"models/weapons/w_rif_m4a1_s.mdl"
	"icon_default_image"	"materials/icons/inventory_icon_weapon_m4a1_silencer.vtf"
	}
	"attributes"
	{
		- "in game price"		"2900"
		+ "in game price"		"3100"
		

 

There has been a new attribute placed in the item\\\’s config.

  • Location of these additions are represented in the items_game.txt
"197"
{
	"name"		"kill award"
	"attribute_class"	"kill_award"
	"description_format"	"value_is_additive"
	"hidden"		"0"
	"effect_type"		"positive"
	"attribute_type"	"uint32"
	}

 
The string containing the description about the CZ-75 was modified to match the current update.

  • Location of these modifications are represented in the csgo_english.txt
   - "CSGO_Item_Desc_CZ75a"		"A fully automatic variant of the CZ75, the CZ75-Auto is another inexpensive choice against armored opponents. But with very little ammo provided, strong trigger discipline is required."
   + "CSGO_Item_Desc_CZ75a"		"A fully automatic variant of the CZ75, the CZ75-Auto is the ideal short-term choice for turning the tables and gaining your opponents weapon. But with very little ammo in the magazine, strong trigger discipline is required."

 
The correct text has been placed in the descriptions for the competitive game mode.

  • Location of these modifications are represented in the csgo_english.txt
   - "SFUI_GameModeCompetitiveDescSPList"        "· Friendly fire is ON\\\\n· Team collision is OF\\\\n· Armor and defuse kits are purchasable\\\\n· Best out of 30 rounds"
   - "SFUI_GameModeCompetitiveDescList"          "· Friendly fire is ON\\\\n· Team collision is OF\\\\n· Armor and defuse kits are purchasable\\\\n· Best out of 30 rounds"
   + "SFUI_GameModeCompetitiveDescSPList"        "· Friendly fire is ON\\\\n· Team collision is ON\\\\n· Armor and defuse kits are purchasable\\\\n· Best out of 30 rounds"
   + "SFUI_GameModeCompetitiveDescList"          "· Friendly fire is ON\\\\n· Team collision is ON\\\\n· Armor and defuse kits are purchasable\\\\n· Best out of 30 rounds"

 
Display text was added for the description about having De_Train in the Vanguard Operation pool.

  • Location of this addition is represented in the csgo_english.txt
   "SFUI_Map_Tooltip_Desc_Train"	"This map is part of the Operation Vanguard Group. \\\\n\\\\nThis map is available to everyone on Official Matchmaking for the duration of the current operation."

 
The display text for the gifting system has been slightly reworded compared with the system last year.

  • Location of these modifications are represented in the csgo_english.txt
   - "SFUI_Store_Hint_Gift_-_1_Player"		"Gift an item to a random player. Item expiring soon"
   - "SFUI_Store_Hint_Gift_-_9_Players"		"Gift items to 9 other players. Item expiring soon"
   - "SFUI_Store_Hint_Gift_-_25_Spectators"	"Gift items to 25 viewers. Item expiring soon"
   - "SFUIHUD_Spec_Event_DroppingItemsFor"	"NOW DROPPING ITEMS FOR:"
   + "SFUI_Store_Hint_Gift_-_1_Player"		"Gift an item to a random player in your match"
   + "SFUI_Store_Hint_Gift_-_9_Players"		"Gift items to 9 other players in your match"
   + "SFUI_Store_Hint_Gift_-_25_Spectators"	"Gift items to 25 GOTV viewers watching your match"
   + "SFUIHUD_Spec_Event_DroppingItemsFor"	"DROPPING ITEMS FOR:"

 

Strings needed to be added for the attributes and details of the coupons associated with these stickers.

  • Location of these additions are represented in the items_game.txt
"10035"
{
	"name"		"coupon - blood_broiler"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - blood_broiler"
	"tool"
	{
		"restriction"		"coupon_blood_broiler"
	}
	"associated_item"		"20035"
}
"20035"
{
	"name"		"coupon key - blood_broiler"
	"item_name"	"#coupon_key_blood_broiler"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_blood_broiler"
	}
	"associated_item"		"10035"
}
"10036"
{
	"name"		"coupon - dinked"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - dinked"
	"tool"
	{
		"restriction"		"coupon_dinked"
	}
	"associated_item"		"20036"
}
"20036"
{
	"name"		"coupon key - dinked"
	"item_name"	"#coupon_key_dinked"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_dinked"
	}
	"associated_item"		"10036"
}
"10037"
{
	"name"		"coupon - drugwarveteran"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - drugwarveteran"
	"tool"
	{
		"restriction"		"coupon_drugwarveteran"
	}
	"associated_item"		"20037"
}
"20037"
{
	"name"		"coupon key - drugwarveteran"
	"item_name"	"#coupon_key_drugwarveteran"
	"item_description"		"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_drugwarveteran"
	}
	"associated_item"		"10037"
}
"10038"
{
	"name"		"coupon - hohoho"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - hohoho"
	"tool"
	{
		"restriction"		"coupon_hohoho"
	}
	"associated_item"		"20038"
}
"20038"
{
	"name"		"coupon key - hohoho"
	"item_name"	"#coupon_key_hohoho"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_hohoho"
	}
	"associated_item"		"10038"
}
"10039"
{
	"name"		"coupon - massivepear"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - massivepear"
	"tool"
	{
		"restriction"		"coupon_massivepear"
	}
	"associated_item"		"20039"
}
"20039"
{
	"name"		"coupon key - massivepear"
	"item_name"	"#coupon_key_massivepear"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_massivepear"
	}
	"associated_item"		"10039"
}
"10040"
{
	"name"		"coupon - mylittlefriend"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - mylittlefriend"
	"tool"
	{
		"restriction"		"coupon_mylittlefriend"
	}
	"associated_item"		"20040"
}
"20040"
{
	"name"		"coupon key - mylittlefriend"
	"item_name"	"#coupon_key_mylittlefriend"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_mylittlefriend"
	}
	"associated_item"		"10040"
}
"10041"
{
	"name"		"coupon - pandamonium"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - pandamonium"
	"tool"
	{
		"restriction"		"coupon_pandamonium"
	}
	"associated_item"		"20041"
}
"20041"
{
	"name"		"coupon key - pandamonium"
	"item_name"	"#coupon_key_pandamonium"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_pandamonium"
	}
	"associated_item"		"10041"
}
"10042"
{
	"name"		"coupon - pieceofcake"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - pieceofcake"
	"tool"
	{
		"restriction"		"coupon_pieceofcake"
	}
	"associated_item"		"20042"
}
"20042"
{
	"name"		"coupon key - pieceofcake"
	"item_name"	"#coupon_key_pieceofcake"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_pieceofcake"
	}
	"associated_item"		"10042"
}
"10043"
{
	"name"		"coupon - saschicken"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - saschicken"
	"tool"
	{
		"restriction"		"coupon_saschicken"
	}
	"associated_item"		"20043"
}
"20043"
{
	"name"		"coupon key - saschicken"
	"item_name"	"#coupon_key_saschicken"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_saschicken"
	}
	"associated_item"		"10043"
}
"10044"
{
	"name"		"coupon - thuglife"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - thuglife"
	"tool"
	{
		"restriction"		"coupon_thuglife"
	}
	"associated_item"		"20044"
}
"20044"
{
	"name"		"coupon key - thuglife"
	"item_name"	"#coupon_key_thuglife"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_thuglife"
	}
	"associated_item"		"10044"
}
"10045"
{
	"name"		"coupon - trekt"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - trekt"
	"tool"
	{
		"restriction"		"coupon_trekt"
	}
	"associated_item"		"20045"
}
"20045"
{
	"name"		"coupon key - trekt"
	"item_name"	"#coupon_key_trekt"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_trekt"
	}
	"associated_item"		"10045"
}
"10046"
{
	"name"		"coupon - warowl"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - warowl"
	"tool"
	{
		"restriction"		"coupon_warowl"
	}
	"associated_item"		"20046"
}
"20046"
{
	"name"		"coupon key - warowl"
	"item_name"	"#coupon_key_warowl"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_warowl"
	}
	"associated_item"		"10046"
}
"10047"
{
	"name"		"coupon - workforfood"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - workforfood"
	"tool"
	{
		"restriction"		"coupon_workforfood"
	}
	"associated_item"		"20047"
}
"20047"
{
	"name"		"coupon key - workforfood"
	"item_name"	"#coupon_key_workforfood"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_workforfood"
	}
	"associated_item"		"10047"
}
"10048"
{
	"name"		"coupon - phoenix_foil"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - phoenix_foil"
	"tool"
	{
		"restriction"		"coupon_phoenix_foil"
	}
	"associated_item"		"20048"
}
"20048"
{
	"name"		"coupon key - phoenix_foil"
	"item_name"		"#coupon_key_phoenix_foil"
	"item_description"		"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_phoenix_foil"
	}
	"associated_item"		"10048"
}
"10049"
{
	"name"		"coupon - bombsquad_foil"
	"item_name"	"#coupon"
	"item_description"	"#coupon_desc"
	"image_inventory"	"econ/coupon/offer"
	"prefab"		"coupon_crate_prefab"
	"loot_list_name"	"coupon loot list - bombsquad_foil"
	"tool"
	{
		"restriction"		"coupon_bombsquad_foil"
	}
	"associated_item"		"20049"
}
"20049"
{
	"name"		"coupon key - bombsquad_foil"
	"item_name"	"#coupon_key_bombsquad_foil"
	"item_description"	"#coupon_key_desc"
	"prefab"		"coupon_key_prefab"
	"tool"
	{
		"restriction"		"coupon_bombsquad_foil"
	}
	"associated_item"		"10049"

 

The needed attributes and description strings for the actual stickers.

  • Location of these additions are represented in the items_game.txt
"258"
{
	"name"		"blood_broiler"
	"item_name"	"#StickerKit_comm02_blood_broiler"
	"description_string"	"#StickerKit_desc_comm02_blood_broiler"
	"sticker_material"	"community02/blood_broiler"
	"item_rarity"		"rare"
}
"259"
{
	"name"		"dinked"
	"item_name"	"#StickerKit_comm02_dinked"
	"description_string"	"#StickerKit_desc_comm02_dinked"
	"sticker_material"	"community02/dinked"
	"item_rarity"		"rare"
}
"260"
{
	"name"		"drugwarveteran"
	"item_name"	"#StickerKit_comm02_drugwarveteran"
	"description_string"	"#StickerKit_desc_comm02_drugwarveteran"
	"sticker_material"	"community02/drugwarveteran"
	"item_rarity"		"rare"
}
"261"
{
	"name"		"hohoho"
	"item_name"	"#StickerKit_comm02_hohoho"
	"description_string"	"#StickerKit_desc_comm02_hohoho"
	"sticker_material"	"community02/hohoho"
	"item_rarity"		"rare"
}
"262"
{
	"name"		"massivepear"
	"item_name"	"#StickerKit_comm02_massivepear"
	"description_string"	"#StickerKit_desc_comm02_massivepear"
	"sticker_material"	"community02/massivepear"
	"item_rarity"		"rare"
}
"263"
{
	"name"		"mylittlefriend"
	"item_name"	"#StickerKit_comm02_mylittlefriend"
	"description_string"	"#StickerKit_desc_comm02_mylittlefriend"
	"sticker_material"	"community02/mylittlefriend"
	"item_rarity"		"rare"
}
"264"
{
	"name"		"pandamonium"
	"item_name"	"#StickerKit_comm02_pandamonium"
	"description_string"	"#StickerKit_desc_comm02_pandamonium"
	"sticker_material"	"community02/pandamonium"
	"item_rarity"		"rare"
}
"265"
{
	"name"		"pieceofcake"
	"item_name"	"#StickerKit_comm02_pieceofcake"
	"description_string"	"#StickerKit_desc_comm02_pieceofcake"
	"sticker_material"	"community02/pieceofcake"
	"item_rarity"		"rare"
}
"266"
{
	"name"		"saschicken"
	"item_name"	"#StickerKit_comm02_saschicken"
	"description_string"	"#StickerKit_desc_comm02_saschicken"
	"sticker_material"	"community02/saschicken"
	"item_rarity"		"rare"
}
"267"
{
	"name"		"thuglife"
	"item_name"	"#StickerKit_comm02_thuglife"
	"description_string"	"#StickerKit_desc_comm02_thuglife"
	"sticker_material"	"community02/thuglife"
	"item_rarity"		"rare"
}
"268"
{
	"name"		"trekt"
	"item_name"	"#StickerKit_comm02_trekt"
	"description_string"	"#StickerKit_desc_comm02_trekt"
	"sticker_material"	"community02/trekt"
	"item_rarity"		"rare"
}
"269"
{
	"name"		"warowl"
	"item_name"	"#StickerKit_comm02_warowl"
	"description_string"	"#StickerKit_desc_comm02_warowl"
	"sticker_material"	"community02/warowl"
	"item_rarity"		"rare"
}
"270"
{
	"name"		"workforfood"
	"item_name"	"#StickerKit_comm02_workforfood"
	"description_string"	"#StickerKit_desc_comm02_workforfood"
	"sticker_material"	"community02/workforfood"
	"item_rarity"		"rare"
}
"271"
{
	"name"		"phoenix_foil"
	"item_name"	"#StickerKit_comm02_phoenix_foil"
	"description_string"	"#StickerKit_desc_comm02_phoenix_foil"
	"sticker_material"	"community02/phoenix_foil"
	"item_rarity"		"rare"
}
"272"
{
	"name"		"bombsquad_foil"
	"item_name"	"#StickerKit_comm02_bombsquad_foil"
	"description_string"	"#StickerKit_desc_comm02_bombsquad_foil"
	"sticker_material"	"community02/bombsquad_foil"
	"item_rarity"		"rare"

 

Strings added for the contents of the coupon loot list to receive the claim to purchase one of the new stickers.

  • Location of these additions are represented in the items_game.txt
	"coupon loot list - blood_broiler"
{
	"public_list_contents"		"1"
	"[blood_broiler]sticker"	"1"
}
"coupon loot list - dinked"
{
	"public_list_contents"		"1"
	"[dinked]sticker"		"1"
}
"coupon loot list - drugwarveteran"
{
	"public_list_contents"		"1"
	"[drugwarveteran]sticker"	"1"
}
"coupon loot list - hohoho"
{
	"public_list_contents"		"1"
	"[hohoho]sticker"		"1"
}
"coupon loot list - massivepear"
{
	"public_list_contents"		"1"
	"[massivepear]sticker"		"1"
}
"coupon loot list - mylittlefriend"
{
	"public_list_contents"		"1"
	"[mylittlefriend]sticker"	"1"
}
"coupon loot list - pandamonium"
{
	"public_list_contents"		"1"
	"[pandamonium]sticker"		"1"
}
"coupon loot list - pieceofcake"
{
	"public_list_contents"		"1"
	"[pieceofcake]sticker"		"1"
}
"coupon loot list - saschicken"
{
	"public_list_contents"		"1"
	"[saschicken]sticker"		"1"
}
"coupon loot list - thuglife"
{
	"public_list_contents"		"1"
	"[thuglife]sticker"		"1"
}
"coupon loot list - trekt"
{
	"public_list_contents"		"1"
	"[trekt]sticker"		"1"
}
"coupon loot list - warowl"
{
	"public_list_contents"		"1"
	"[warowl]sticker"		"1"
}
"coupon loot list - workforfood"
{
	"public_list_contents"		"1"
	"[workforfood]sticker"		"1"
}
"coupon loot list - phoenix_foil"
{
	"public_list_contents"		"1"
	"[phoenix_foil]sticker"		"1"
}
"coupon loot list - bombsquad_foil"
{
	"public_list_contents"		"1"
	"[bombsquad_foil]sticker"	"1"

 

The strings added for the sticker’s description display and it’s associated coupon key claim.

  • Location of these additions are represented in the items_game.txt
"StickerKit_comm02_blood_broiler"		"Blood Boiler"
"StickerKit_desc_comm02_blood_broiler"		""
"coupon_key_blood_broiler"			"Claim: Sticker | Blood Boiler"	

"StickerKit_comm02_dinked"		"Dinked"
"StickerKit_desc_comm02_dinked"		""
"coupon_key_dinked"			"Claim: Sticker | Dinked"	

"StickerKit_comm02_drugwarveteran"		"Drug War Veteran"
"StickerKit_desc_comm02_drugwarveteran"		""
"coupon_key_drugwarveteran"			"Claim: Sticker | Drug War Veteran"	

"StickerKit_comm02_hohoho"		"Ho Ho Ho"
"StickerKit_desc_comm02_hohoho"		""
"coupon_key_hohoho"			"Claim: Sticker | Ho Ho Ho"	

"StickerKit_comm02_massivepear"		"Massive Pear"
"StickerKit_desc_comm02_massivepear"	""
"coupon_key_massivepear"		"Claim: Sticker | Massive Pear"	

"StickerKit_comm02_mylittlefriend"		"My Little Friend"
"StickerKit_desc_comm02_mylittlefriend"		""
"coupon_key_mylittlefriend"			"Claim: Sticker | My Little Friend"	

"StickerKit_comm02_pandamonium"			"Pandamonium"
"StickerKit_desc_comm02_pandamonium"		""
"coupon_key_pandamonium"			"Claim: Sticker | Pandamonium"	

"StickerKit_comm02_pieceofcake"			"Piece Of Cake"
"StickerKit_desc_comm02_pieceofcake"		""
"coupon_key_pieceofcake"			"Claim: Sticker | Piece Of Cake"	

"StickerKit_comm02_saschicken"			"SAS Chicken"
"StickerKit_desc_comm02_saschicken"		""
"coupon_key_saschicken"				"Claim: Sticker | SAS Chicken"	

"StickerKit_comm02_thuglife"			"Thug Life"
"StickerKit_desc_comm02_thuglife"		""
"coupon_key_thuglife"				"Claim: Sticker | Thug Life"	

"StickerKit_comm02_trekt"		"T-Rekt"
"StickerKit_desc_comm02_trekt"		""
"coupon_key_trekt"				"Claim: Sticker | T-Rekt"	

"StickerKit_comm02_warowl"		"Warowl"
"StickerKit_desc_comm02_warowl"		""
"coupon_key_warowl"			"Claim: Sticker | Warowl"	

"StickerKit_comm02_workforfood"			"Work For Ammo"
"StickerKit_desc_comm02_workforfood"		""
"coupon_key_workforfood"			"Claim: Sticker | Work For Ammo"	

"StickerKit_comm02_phoenix_foil"		"Phoenix (Foil)"
"StickerKit_desc_comm02_phoenix_foil"		""
"coupon_key_phoenix_foil"			"Claim: Sticker | Phoenix (Foil)"	

"StickerKit_comm02_bombsquad_foil"		"Bomb Squad (Foil)"
"StickerKit_desc_comm02_bombsquad_foil"		""
"coupon_key_bombsquad_foil"			"Claim: Sticker | Bomb Squad (Foil)"

 

Bird/Animal Scripts

The revamped De_Train map showcases some of the new scripts the developers have added. There is a whole brand new script system that gives the ability of having functionally animals within the maps. These new scripts are unrelated to the chickens that are already within the game. Located below shows the scripts that have been currently added for the system :

  • Location of these contents is represented in util.nut
//Squirrel Utilities
//Constants
Pi <- 3.14159265
TwoPi <- 6.2831853
HalfPi <- 1.5707963

Rad <- 0.01745329251994329576923690768489
Deg <- 57.295779513082320876798154814105

//==================//
//--Math Functions--//
//==================//
//Distance between the x/y components of two 3D vectors.
function Distance2D(v1,v2)
{
	local a = (v2.x-v1.x);
	local b = (v2.y-v1.y);
	
	return sqrt((a*a)+(b*b));
}

//Distance between two 3D vectors.
function Distance3D(v1,v2)
{
	local a = (v2.x-v1.x);
	local b = (v2.y-v1.y);
	local c = (v2.z-v1.z);
	
	return sqrt((a*a)+(b*b)+(c*c));
}

//Return the Pitch and Yaw between two 3D vectors.
function AngleBetween(v1,v2)
{
		local aZ = atan2((v1.y - v2.y),(v1.x - v2.x))+Pi;	
		local aY = atan2((v1.z - v2.z),Distance2D(v1,v2))+Pi;
		
		return Vector(aY,aZ,0.0);
}

function AngleBetween2(v1,v2)
{
		local aZ = atan2((v1.z - v2.z),(v1.x - v2.x))+Pi;	
		local aY = atan2((v1.z - v2.z),(v1.y - v2.y))+Pi;
		
		return Vector(aY,aZ,0.0);
}

//Returns the difference between two angles
//actionsnippet.com/?p=1451
function AngleDiff(angle0,angle1)
{
    return (abs((angle0 + Pi -  angle1)%(Pi*2.)) - Pi);
}

//Normalizes a vector
function Normalize(v)
{
	local len = v.Length();
	return Vector(v.x/len,v.y/len,v.z/len);
}

//Cross product of two vectors
function Cross(v1, v2) 
{
	local v = Vector(0.0,0.0,0.0);
	v.x = ( (v1.y * v2.z) - (v1.z * v2.y) );
	v.y = ( (v1.x * v2.z) - (v1.z * v2.x) );
	v.z = ( (v1.x * v2.y) - (v1.y * v2.x) );
	return v;
}

//Constrain a number to a given range
function clamp(v,mi,ma)
{
	if(v < mi) return mi;
	if(v > ma) return ma;
	return v;
}

//Return the biggest of two numbers.
function max(v1,v2)
{
	if(v1 > v2) return v1;
	return v2;
}

//Return the smallest of two numbers.
function min(v1,v2)
{
	if(v1 < v2) return v1;
	return v2;
}
//Vector multiplication fix
function Mul(v1,v2)
{
	local typ = typeof(v2);
	if(typ == "integer" || typ == "float")
	{
		return Vector(v1.x*v2,v1.y*v2,v1.z*v2);
	}
	if(typ == "Vector")
	{
		return Vector(v1.x*v2.x,v1.y*v2.y,v1.z*v2.z);
	}
	return null;
}

//=================//
//--Trace Helpers--//
//=================//
class TraceInfo 
{
	constructor(h,d)
	{
		Hit = h;
		Dist = d;
	}

	Hit = null;
	Dist = null;
}
//Returns the hit position of a trace between two points.
function TraceVec(start, end, filter)
{
	local dir = (end-start);
	local frac = TraceLine(start,end,filter);
	//return start+(dir*frac);
	return TraceInfo(start+(dir*frac),dir.Length());
}
//Returns the hit position of a trace along a normalized direction vector.
function TraceDir(orig, dir, maxd, filter)
{
	local frac = TraceLine(orig,orig+dir*maxd,filter);
	if(frac == 1.0) { return TraceInfo(orig+(dir*maxd),0.0);}
	return TraceInfo(orig+(dir*(maxd*frac)),maxd*frac);
}

//=================//
//--Debug Helpers--//
//=================//

//Draws a cross showing the X, Y, and Z axes.
function DrawAxis(pos,s,nocull,time)
{
	DebugDrawLine(Vector(pos.x-s,pos.y,pos.z), Vector(pos.x+s,pos.y,pos.z), 255, 0, 0, nocull, time);
	DebugDrawLine(Vector(pos.x,pos.y-s,pos.z), Vector(pos.x,pos.y+s,pos.z), 0, 255, 0, nocull, time);
	DebugDrawLine(Vector(pos.x,pos.y,pos.z-s), Vector(pos.x,pos.y,pos.z+s), 0, 0, 255, nocull, time);
}

//Draw the bounding box of a given entity.
function DrawEntityBBox(ent,r,g,b,a,time)
{
	DebugDrawBox(ent.GetOrigin(),ent.GetBoundingMins(), ent.GetBoundingMaxs(), r, g, b, a, time)
}

//Draws a line along a given normal.
function DrawNormal(pos,norm,s,time)
{
	local ns = norm*s;
	DebugDrawLine(Vector(pos.x,pos.y,pos.z), Vector(pos.x+ns.x,pos.y+ns.y,pos.z+ns.z), 0, 255, 255, false, time);	
}

 

  • Location of these contents is represented in pigeonspawner.nut
m_bIsBirdMasterSpawner <- true;

m_bInitialized <- false;

m_BirdSpawnEnts <- [];
m_nNumBirdsInMap <- 0;

// THINK_FREQUENCY <- 0.5;
// SPAWN_FREQUENCY <- 15;
MAX_BIRDS_SPAWNED <- 6;

// m_flLastThink <- 0;
m_flLastSpawnTime <- 0;

m_nCurBirdArrayPos <- 0;



function OnPostSpawn()
{
	if ( m_bInitialized == false )
	{
		CollectBirdSpawnEnts();
		m_bInitialized = true;
		DoIncludeScript("dev/Util.nut",null);
	}
}

function AddBird()
{
	m_nNumBirdsInMap++;
	//printl( "^^ m_nNumBirdsInMap = "+m_nNumBirdsInMap );
}

function SubtractBird()
{
	m_nNumBirdsInMap--;
	//printl( "^^ m_nNumBirdsInMap = "+m_nNumBirdsInMap );
}

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

function CollectBirdSpawnEnts()
{
	ent <- null;

	while( ( ent = Entities.FindByClassname( ent, "env_entity_maker" ) ) != null )
	{
		if ( FindInArray( m_BirdSpawnEnts, ent ) == null )
		{
			if ( ent && ent.GetScriptScope() && ent.GetScriptScope().m_bIsBirdSpawner )
			{
				m_BirdSpawnEnts.push( ent );
				//printl( "^^ Adding bird spawner! total = "+m_BirdSpawnEnts.len() );
			}		
		}
	}
}

function SpawnPigeonsRandom()
{
	local chance = RandomInt(0, 1);

	if ( chance == 0 )
	{
		SpawnPigeons();
	}

	if ( chance == 1 )
	{
		//printl ("No pigeons for you!");
	}
}


function SpawnPigeons()
{

//	m_flLastThink = Time();

	if ( m_nNumBirdsInMap >= MAX_BIRDS_SPAWNED )
		return;

	if ( m_flLastSpawnTime == 0 )
	{
		if ( m_BirdSpawnEnts.len() <= 0 )
			return;

		local nStartPos = RandomInt( 0, m_BirdSpawnEnts.len()-1 );
		m_nCurBirdArrayPos = nStartPos;

		local nDistance = 1600;
		// find any players close by
		local bFoundPlayer = false;
		local bNearOtherBirds = false;
		ent <- null;
		while( ( ent = Entities.FindByClassnameWithin( null, "player", m_BirdSpawnEnts[m_nCurBirdArrayPos].GetOrigin(), nDistance ) ) != null )
		{
			if ( ent )
			{
				bFoundPlayer = true;
				break;
			}
		}

		if ( bFoundPlayer == false )
		{
			// we got one!  now see if there are any birds close by, if so, dont spawn
			otherbird <- null;
			nDistance = 200;
			while( ( otherbird = Entities.FindByClassnameWithin( null, "logic_script", m_BirdSpawnEnts[m_nCurBirdArrayPos].GetOrigin(), nDistance ) ) != null )
			{
				if ( otherbird && otherbird.GetScriptScope() && otherbird.GetScriptScope().m_bIsBirdScript )
				{
					bNearOtherBirds = true;
					break;
				}
			}

			if ( bNearOtherBirds == false )
			{
				local bSuccessfull = false;
				//printl( "^^ bNearOtherBirds = false! trying to spawn a bird!" );
				// we really got one now!
				// spawn all of them in a radius
				for( j <- 0; j < m_BirdSpawnEnts.len(); j++ )
				{
					local dist = Distance3D(m_BirdSpawnEnts[j].GetOrigin(),m_BirdSpawnEnts[m_nCurBirdArrayPos].GetOrigin());
					//printl( "^^ dist = "+dist );
					if ( dist < 160 )
					{
						EntFire( m_BirdSpawnEnts[j].GetName(), "ForceSpawn", 0, 0 );
						//printl( "^^ Spawning a bird!" );
						// spawn successful		
						bSuccessfull = true;		
					}
				}

				if ( bSuccessfull == true )
				{
//					m_flLastSpawnTime = Time();	
					return;
				}
			}
		}

		// didn\\\'t find a spawn spot, try the next spawner
		// try again next think
		m_nCurBirdArrayPos = (m_nCurBirdArrayPos + 1) % m_BirdSpawnEnts.len();
	}
}

 

  • Location of these contents is represented in master_bird_spawner.nut
m_bIsBirdMasterSpawner <- true;

m_bInitialized <- false;

m_BirdSpawnEnts <- [];
m_nNumBirdsInMap <- 0;

THINK_FREQUENCY <- 0.5;
SPAWN_FREQUENCY <- 15;
MAX_BIRDS_SPAWNED <- 16;

m_flLastThink <- 0;
m_flLastSpawnTime <- 0;

m_nCurBirdArrayPos <- 0;

function OnPostSpawn()
{
	if ( m_bInitialized == false )
	{
		CollectBirdSpawnEnts();
		m_bInitialized = true;
		DoIncludeScript("dev/Util.nut",null);
	}
}

function AddBird()
{
	m_nNumBirdsInMap++;
	//printl( "^^ m_nNumBirdsInMap = "+m_nNumBirdsInMap );
}

function SubtractBird()
{
	m_nNumBirdsInMap--;
	//printl( "^^ m_nNumBirdsInMap = "+m_nNumBirdsInMap );
}

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

function CollectBirdSpawnEnts()
{
	ent <- null;

	while( ( ent = Entities.FindByClassname( ent, "env_entity_maker" ) ) != null )
	{
		if ( FindInArray( m_BirdSpawnEnts, ent ) == null )
		{
			if ( ent && ent.GetScriptScope() && ent.GetScriptScope().m_bIsBirdSpawner )
			{
				m_BirdSpawnEnts.push( ent );
				//printl( "^^ Adding bird spawner! total = "+m_BirdSpawnEnts.len() );
			}		
		}
	}
}

function Think()
{
	if ( m_flLastThink + THINK_FREQUENCY > Time() )
		return;

	m_flLastThink = Time();

	if ( m_nNumBirdsInMap >= MAX_BIRDS_SPAWNED )
		return;

	if ( m_flLastSpawnTime == 0 || m_flLastSpawnTime + SPAWN_FREQUENCY < Time() )
	{
		if ( m_BirdSpawnEnts.len() <= 0 )
			return;

		local nStartPos = RandomInt( 0, m_BirdSpawnEnts.len()-1 );
		m_nCurBirdArrayPos = nStartPos;

		local nDistance = 1600;
		// find any players close by
		local bFoundPlayer = false;
		local bNearOtherBirds = false;
		ent <- null;
		while( ( ent = Entities.FindByClassnameWithin( null, "player", m_BirdSpawnEnts[m_nCurBirdArrayPos].GetOrigin(), nDistance ) ) != null )
		{
			if ( ent )
			{
				bFoundPlayer = true;
				break;
			}
		}

		if ( bFoundPlayer == false )
		{
			// we got one!  now see if there are any birds close by, if so, dont spawn
			otherbird <- null;
			nDistance = 200;
			while( ( otherbird = Entities.FindByClassnameWithin( null, "logic_script", m_BirdSpawnEnts[m_nCurBirdArrayPos].GetOrigin(), nDistance ) ) != null )
			{
				if ( otherbird && otherbird.GetScriptScope() && otherbird.GetScriptScope().m_bIsBirdScript )
				{
					bNearOtherBirds = true;
					break;
				}
			}

			if ( bNearOtherBirds == false )
			{
				local bSuccessfull = false;
				//printl( "^^ bNearOtherBirds = false! trying to spawn a bird!" );
				// we really got one now!
				// spawn all of them in a radius
				for( j <- 0; j < m_BirdSpawnEnts.len(); j++ )
				{
					local dist = Distance3D(m_BirdSpawnEnts[j].GetOrigin(),m_BirdSpawnEnts[m_nCurBirdArrayPos].GetOrigin());
					//printl( "^^ dist = "+dist );
					if ( dist < 160 )
					{
						EntFire( m_BirdSpawnEnts[j].GetName(), "ForceSpawn", 0, 0 );
						//printl( "^^ Spawning a bird!" );
						// spawn successful		
						bSuccessfull = true;		
					}
				}

				if ( bSuccessfull == true )
				{
					m_flLastSpawnTime = Time();	
					return;
				}
			}
		}

		// didn\\\'t find a spawn spot, try the next spawner
		// try again next think
		m_nCurBirdArrayPos = (m_nCurBirdArrayPos + 1) % m_BirdSpawnEnts.len();
	}
}

 

  • Location of these contents is represented in birdspawner.nut
m_bIsBirdSpawner <- true;

 

  • Location of these contents is represented in birds.nut
m_bIsBirdScript <- true;

m_bInitialized <- false;
m_MasterScript <- null;

THINK_FREQUENCY <- 0.5;
START_FADING_TIME <- 5.5;
m_flLastThink <- 0;
m_bIsFlying <- false;

m_flFlyAwayStart <- -1;
m_nAlpha <- 255;

m_bIsIdling <- false;
m_bIsDestroyed <- false;

m_bIsAlerted <- false;
m_bPlaySound <- true;
m_nBirdType <- 0; // 0 = seagull, 1 = pigeon, 2 = crow

m_bGeneratedRandomIdleTime <- false;
m_bRandomIdleTime <- -1;

function SetBirdType( nType )
{
	// 0 = seagull, 1 = pigeon, 2 = crow
	m_nBirdType <- nType; 
}

function FindPlayersCloseBy()
{
	ent <- null;

	local nDistance = 400;
	while( ( ent = Entities.FindByClassnameWithin( null, "player", EntityGroup[0].GetOrigin(), nDistance ) ) != null )
	{
		if ( ent )
			return true;
	}
}

function BirdThink()
{
	if ( m_bInitialized == false )
	{
		master <- null;
		while( ( master = Entities.FindByClassname( null, "logic_script" ) ) != null )
		{
			if ( master )
			{
				m_MasterScript = master;
				m_bInitialized = true;
				m_MasterScript.GetScriptScope().AddBird();
				break;
			}
		}
	}

	if ( m_bIsDestroyed || EntityGroup[0] == null )
		return;

	if ( m_flLastThink + THINK_FREQUENCY > Time() )
		return;

	m_flLastThink = Time();

	if ( m_bIsFlying == true ) 
	{
		if ( m_flFlyAwayStart + START_FADING_TIME < Time() )
		{
			m_nAlpha = m_nAlpha - 10;
			if ( m_nAlpha <= 0 )
			{
				CleanupBird();
				return;
			}

			local alpha = m_nAlpha + "";
			EntFire( EntityGroup[0].GetName(), "Alpha", alpha, 0 );
			//printl( "^^ Setting Alpha to "+alpha );
		}

		return;
	}
	else if ( (m_flFlyAwayStart != -1 && m_flFlyAwayStart < Time()) )
	{
		FlyAwayBird();
	}
	else if ( FindPlayersCloseBy() )
	{
		local nRandomDelay = RandomInt(0,35);
		local flDelay = nRandomDelay/100.0;
		FlyAwayAfterDelay( flDelay );

		ScareOtherNearbyBirds();
	}
	else if ( m_bIsIdling == false )
	{
		if ( m_bGeneratedRandomIdleTime == false )
		{
			local nRandomDelay = RandomInt(0,80);
			//printl( "^^ nRandomDelay = "+nRandomDelay );
			local flDelay = nRandomDelay/100.0;
			m_bRandomIdleTime = Time() + flDelay;
			m_bGeneratedRandomIdleTime = true; 
		}
		 
		if ( m_bRandomIdleTime < Time() )
		{
			EntFire( EntityGroup[0].GetName(), "SetAnimation", "Idle01", 0 );
			m_bIsIdling = true;

			// find another bird nearby and face it
			//local vecDir = EntityGroup[0].GetForwardVector();

			local vecOtherBirdOrigin = Vector(0, 0, 0);
			otherbird <- null;
			local nDistance = 128;
			while( ( otherbird = Entities.FindByClassnameWithin( null, "logic_script", EntityGroup[0].GetOrigin(), nDistance ) ) != null )
			{
				if ( otherbird )
				{
					local scope = otherbird.GetScriptScope();
					if ( scope.m_bIsBirdScript == true )
					{
						vecOtherBirdOrigin = otherbird.GetOrigin();
						break;
					}
				}
			}

			local vecDir = vecOtherBirdOrigin - EntityGroup[0].GetOrigin();
			local flNorm = vecDir.Norm();
			//printl( "^^ flNorm = "+flNorm );
			vecDir.x = vecDir.x / flNorm;
			vecDir.y = vecDir.y / flNorm;
			vecDir.z = 0;

			//printl( "^^ vecDir.x = "+vecDir.x );
			//printl( "^^ vecDir.y = "+vecDir.y );
			//printl( "^^ vecDir.z = "+vecDir.z );

			// randomly set direction		
			EntityGroup[3].SetForwardVector( vecDir );
			EntityGroup[0].SetForwardVector( vecDir );

			EntFire( EntityGroup[1].GetName(), "TeleportToPathNode", EntityGroup[3].GetName(), 0 );
			EntFire( EntityGroup[0].GetName(), "SetParent", EntityGroup[1].GetName(), 0.1 );
			//printl( "^^ m_bRandomIdleTime < Time()" );
		}
	}
}

function FlyAwayAfterDelay( flDelay )
{
	if ( m_bIsFlying == true )
		return;

	m_flFlyAwayStart = Time() + flDelay;
	ScareOtherNearbyBirds();
}

function FlyAwayBird()
{
	if ( m_bIsFlying == true || m_bIsDestroyed == true || EntityGroup[0] == null )
		return;

	EntFire( EntityGroup[0].GetName(), "SetAnimation", "Takeoff", 0 );
	EntFire( EntityGroup[1].GetName(), "SetSpeed", 120, 0.65 );
	
	if ( m_nBirdType == 0 )
	{
		if ( m_bPlaySound )
			EntFire( EntityGroup[2].GetName(), "PlaySound", 0, 0.65 );

		EntFire( EntityGroup[1].GetName(), "StartForward", 0, 0.65 );
		EntFire( EntityGroup[0].GetName(), "SetParent", EntityGroup[1].GetName(), 0.7 );
	}
	else
	{
		if ( m_bPlaySound )
			EntFire( EntityGroup[2].GetName(), "PlaySound", 0, 0.3 );
				
		EntFire( EntityGroup[1].GetName(), "StartForward", 0, 0.3 );
		EntFire( EntityGroup[0].GetName(), "SetParent", EntityGroup[1].GetName(), 0.35 );	
	}

	if ( m_nBirdType == 0 )
		EntFire( EntityGroup[0].GetName(), "SetAnimation", "Fly", 1.65 );
	else
		EntFire( EntityGroup[0].GetName(), "SetAnimation", "Fly01", 1.0 );

	EntFire( EntityGroup[2].GetName(), "StopSound", 0, 3.0 );

	m_bIsFlying = true; 
	m_flFlyAwayStart <- Time();
	THINK_FREQUENCY = 0.25;	
}

function ScareOtherNearbyBirds()
{
	if ( m_bIsAlerted == true )
		return;

	m_bIsAlerted = true;

	ent <- null;
	local nDistance = 128;
	while( ( ent = Entities.FindByClassnameWithin( null, "logic_script", EntityGroup[0].GetOrigin(), nDistance ) ) != null )
	{
		if ( ent && ent.GetScriptScope() )
		{
			//printl( "^^ Found ScriptScope!!!! ("+ent.GetName()+")" );
			local scope = ent.GetScriptScope();

			if ( scope.m_bIsBirdScript == true && scope.m_bIsAlerted != true )
			{
				local nRandomDelay = RandomInt(0,5);
				local flDelay = nRandomDelay/10.0;
				scope.m_bPlaySound = false;
				scope.FlyAwayAfterDelay( flDelay );
				//printl( "^^ FlyAwayAfterDelay!!!! ("+flDelay+")" );
			}
			return;
		}
	}
}

function Hurtme()
{
	if ( m_bIsDestroyed || EntityGroup[0] == null )
		return;

	//printl( "^^ Hurtme!!!!" );

	DispatchParticleEffect( "chicken_gone", EntityGroup[0].GetOrigin(), EntityGroup[0].GetForwardVector() );

	ScareOtherNearbyBirds();

	if ( EntityGroup[1] == null )
		return;

	//printl( "^^ EntityGroup[1] = "+EntityGroup[1]+", EntityGroup[1].GetName() = "+EntityGroup[1].GetName() );
	EntFire( EntityGroup[1].GetName(), "StartForward", 0, 0 );	

	CleanupBird();
}

function CleanupBird()
{
	EntityGroup[0].Destroy();
	EntityGroup[1].Destroy();
	EntityGroup[2].Destroy();
	EntityGroup[3].Destroy();
	m_bIsDestroyed = true;

	m_MasterScript.GetScriptScope().SubtractBird();
}

 

Added Textures

The remodeling of De_Train has brought a new approach from the developers using mostly all new resources instead of those already within the client. For the texture side of this patch - there is 956 texture related files added that equal to 286 MB. Many of those textures will involve models or materials that could be only featured in a Soviet themed map but there are plenty of other new materials available to map creators now. A gallery of many of those added materials is located below :

Brick Materials
Grass Materials
Concrete Materials
Tiles Materials
Metal Materials
Wood Materials
Plaster Materials
Asphalt Materials
Trash Materials
Other Materials
Decal/Sign Materials

 

Added/Updated Models

New Models

The same situation happen to the models - the devs created plenty of new models for De_Train. For the model side - there was 831 model related files added that equal to 33 MB. Many of these models can only involve maps that have a Soviet or a train station theme but overall there is many more.
NOTE - The developers for the first time started using high resolution models for certain items. All of those will be marked with HR in front of the name.

Ivy


Ivy A 0000 <---------------> Ivy A 0001

Overpass
Crane 1

Crane 1

Crane 1

Crane 1

Prop Building
Building Skybox 002A

Building Skybox 002A

Prop Foliage
HR Medium Tree 02

HR Medium Tree 02

Prop Interior


Model View <---------------> Model\\\'s Physic Characteristics

 
Prison Heater 001A

Prison Heater 001A

New Prison Heater 001A

New Prison Heater 001A

New VCR

New VCR

Prop Junk
Unfolded 02

Cardboard Unfolded 02

Unfolded 04

Cardboard Unfolded 04

Unfolded 03

Cardboard Unfolded 03

Unfolded 01

Cardboard Unfolded 01

Garbage 256 Composite 002A New

Garbage 256 Composite 002A New

Prop Utility
Electric Panel 04

HR Electric Panel 04

Electric Panel 01

HR Electric Panel 01

HR Cable Thick 32

HR Cable Thick 32

HR Cable 90 Bend

HR Cable 90 Bend

HR Cables - 32,64,128,256

HR Cables - 32,64,128,256

Electric Panel 03

HR Electric Panel 03

Electric Panel 02

HR Electric Panel 02

De_Train
Air Vent B

HR Air Vent B

Air Vent A

HR Air Vent A

Barrel A

HR Barrel A

Blue Prints

HR Blue Prints

Blue Floor Mat

HR Blue Floor Mat

Computer Cart A

HR Computer Cart A

Crane A Lift

HR Crane A Lift

Crane A Support

HR Crane A Support

Dock A

HR Dock A

Door A

HR Door A

Dumpster A

HR Dumpster A

Fire Hose WA

HR Fire Hose WA

Garage Door A

HR Garage Door A

Gate Fence A Sign

HR Gate Fence A Sign

Geiger Counter

HR Geiger Counter

Hand Truck

HR Hand Truck

Guard Rail A

HR Guard Rail A

Drop Ceiling A

HR Drop Ceiling A

Clothes Pile 02

HR Clothes Pile 02

Clothes Pile

HR Clothes Pile

Food Pile

HR Food Pile

Food Pile 02

HR Food Pile 02

TV Plasma

HR TV Plasma

TV Plasma P1

HR TV Plasma P1

TV Wall Mount

HR TV Wall Mount


[beforeafter]
Ivy B <---------------> Ivy B1

 


Ivy C <---------------> Ivy C1

 

Ladder Door A

HR Ladder Door A

Lift A

HR Lift A

Lift B

HR Lift B

Light Tower Cluser 01 New

Light Tower Cluser 01 New

Light Pole A

HR Light Pole A

Light Signal New

Light Signal New

Locker Bench New

Locker Bench New

Lockers Long New

Lockers Long New

Machine B

HR Machine B

Manhole

HR Manhole

Metal Door H

HR Metal Door H

Metal Door  J

HR Metal Door J

Metal Door K

HR Metal Door K

Metal Door M

HR Metal Door M

Metal Door B

HR Metal Door B

Metal Door C

HR Metal Door C

Metal Door C Door

HR Metal Door C Door

Metal Door E

HR Metal Door E

Metal Door E EXT

HR Metal Door E EXT

Metal Door Frame A

HR Metal Door Frame A

Metal Door G Glass

HR Metal Door G Glass

Metal Door D

HR Metal Door D

Metal Door G

HR Metal Door G

Metal Door I

HR Metal Door I

Metal Door L

HR Metal Door L

Metal Support Base

HR Metal Support Base

Metal Overhang A

HR Metal Overhang A

Metal Support A

HR Metal Support A

Metal Grate

HR Metal Grate

Modern Lights LNG A

HR Modern Lights LNG A

Modern Lights LNG B

HR Modern Lights LNG B

Nuclear Engine B

HR Nuclear Engine B

Nuclear Container A

HR Nuclear Container A

Nuclear Engine A

HR Nuclear Engine A

Nuclear Engine A Stand

HR Nuclear Engine A Stand

Outlets A1

HR Outlets A1

Outlets A2

HR Outlets A2

Pipe Set A 128 Corner

HR Pipe Set A 128 Corner

Pipe C

HR Pipe C

Set A 128

HR Set A 128

Plants  C

HR Plants C

Plants A

HR Plants A

Plants B

HR Plants B

Silo A

HR Silo A

Rail A

HR Rail A

Rubble A

HR Rubble A

Server A

HR Server A

Russian Sign A

HR Russian Sign A

Roof A

HR Roof A

Skybox Building A

HR Skybox Building A

Skybox Building B

HR Skybox Building B

Skybox Building C

HR Skybox Building C

Small Stairs

HR Small Stairs

Smoke A

HR Smoke A

Tech Wall A

HR Tech Wall A

Tiles A Broken

HR Tiles A Broken

Track Switch 01 New

Track Switch 01 New

Track Sign 01 New

Track Sign 01 New

Trailer A

HR Trailer A

Trailer Door A

HR Trailer Door A


Train Straps Model<---------------> Model\\\'s Physic Characteristics

 

Train Tarp Model <---------------> Model\\\'s Physic Characteristics

 
Train Bumper Post New

Train Bumper Post New


Train Car A Model <---------------> Model\\\'s Physic Characteristics

 
Train Car A Decal A

HR Train Car A Decal A

Train Car A Decal B

HR Train Car A Decal B

Train Car A Decal C

HR Train Car A Decal C


Train Car A Details <---------------> Model\\\'s Physic Characteristics

 
Train Car B

HR Train Car B

Train Car Debris A

HR Train Car Debris A

Train Car Debris B

HR Train Car Debris B

Train Car Flat

HR Train Car Flat

Crate Stack Single

HR Crate Stack Single

Crate Stack

HR Crate Stack

Train Wheels A

HR Train Wheels A

Train Ladder

HR Train Ladder

Train Light Fixture

HR Train Light Fixture

Train Rail Conc

HR Train Rail Conc

Train Signalbox 01 New

Train Signalbox 01 New

Train Sign A

HR Train Sign A

Trash A Ground

HR Trash A Ground

Trash Plastic Bottles

Trash Plastic Bottles

Trash A

HR Trash A

Trash A Cans

HR Trash A Cans

Wall Relief B

HR Wall Relief B

TV Wall Mount

HR TV Wall Mount

Vending Machine Old

Vending Machine Old

Wall Relief A

HR Wall Relief A

Window D

HR Window D

Window A

HR Window A

Window A Glass

HR Window A Glass

Window A1

HR Window A1

Window B

HR Window B

Window C

HR Window C

Window C Glass

HR Window C Glass

Window B Glass

HR Window B Glass

Vertigo
HVAC Simple Vent

HVAC Simple Vent

HVAC Duct B End Vent  01 Simple

HVAC Duct B End Vent 01 Simple

Bird Models

Valve has added three new bird models associated with the new script system. Located below is a preview of the models and it\\\'s animations :

Crow

Crow Model

Crow Model


Crow's Physics Boundaries

Crow\\\'s Physics Boundaries


Crow's Hit Boxes

Crow\\\'s Hit Boxes

Crow Animations

Eat A

Eat A

Eat B

Eat B

Flying

Flying

Hop

Hop

Hop B

Hop B

Idle

Idle

Land

Land

Land B

Land B

Llamar

Llamar

Run

Run

Soar

Soar

Take Off

Take Off

Walk

Walk

Seagull

SeaGull Model

SeaGull Model


Seagull's Physics Boundaries

Seagull\\\'s Physics Boundaries


Seagull's Hit Boxes

Seagull\\\'s Hit Boxes

Seagull Animations

Fly

Fly

Hop

Hop

Hop B

Hop B

Idle

Idle

Land

Land

Run

Run

Soar

Soar

Take Off

Take Off

Walk

Walk

Pigeon

Pidgeon Model

Pigeon Model


Pidgeon's Physics Boundaries

Pigeon\\\'s Physics Boundaries


Pidgeon's Hit Boxes

Pigeon\\\'s Hit Boxes

Pigeon Animations

Eat A

Eat A

Eat B

Eat B

Fly

Fly

Hop

Hop

Hop B

Hop B

Idle

Idle

Land

Land

Land B

Land B

Run

Run

Soar

Soar

Take Off

Take Off

Walk

Walk

Updated ~ Error Model

The model that displays when their is a error with the file has been updated.

Image of the Error Model

Error Model Image

 

Updated UI Features

NOTICE:  The following UI displays do not picture the final product. These images shows us the viewer a visual difference between the two versions. Also the following displays will feature the default/sample entries that the devs used.

Menu Background Display

The snowdrop effect has returned from last year.

Showcase of the previous background.

Previous Background Display


 
Showcase of the current background.

Current Background Display

HUD Alert Panel UI

The gift alert panel has been updated for this holiday season. The background color/image has been changed with the borders, and there has been the addition of snowfall within the UI.

Store Tile Panel

The dimensions of some coupon related elements were over sized and have now been restricted to match the related elements.

Lobby Panel UI

The preview image for De_Train has been replaced with the new image in the lobby panel. But there was a mistake made by the developers by not sizing the image right; this is the reason the new image appears in a larger dimension below. Also I assume there will be UI overlap issues until the right size image is added.

Old Preview Image

Old ~ Preview Image

New Preview Image

New ~ Preview Image

 

Con Var Adjustments

Four convar additions/changes took place within this patch -

ammo_357sig_min_max
Default: 16
Client only
Modified in v1.34.6.2

sv_holiday_mode
Default: 2
0 = OFF, 1 = Halloween, 2 = Winter
Client only
New in v1.34.5.4
Modified in v1.34.6.2

sv_max_queries_sec
Default: 10.0
Maximum queries per second to respond to from a single IP address.
Modified in v1.34.6.2

sv_max_queries_window
Default: 30
Window over which to average queries per second averages.
Modified in v1.34.6.2

 

Extended OS Back End Log Changes

OS X

Modified file – bin/materialsystem.dylib (+4.78 KB)
Modified file – csgo/bin/client.dylib (+27.68 KB)
Modified file – csgo/bin/server.dylib (+15.93 KB)
Modified file – bin/engine.dylib (+4.11 KB)

Linux

Modified file – csgo/bin/client_client.so (+20.00 KB)
Modified file – csgo/bin/server_client.so (+15.09 KB)
Modified file – bin/stdshader_dx9_client.so (+4.00 KB)
Modified file – csgo/bin/server.so (+16.98 KB)
Modified file – bin/engine.so (+3.18 KB)
Modified file – bin/engine_xlsp.so (+4.05 KB)
Modified file – bin/engine_ds_client.so (+2.38 KB)
Modified file – bin/engine_client.so (+2.25 KB)

Windows

Modified file – bin/stdshader_dx9.dll (+3.50 KB)
Modified file – csgo/bin/server.dll (+8.00 KB)
Modified file – csgo/bin/client.dll (+20.50 KB)
Modified file – bin/engine.dll (+1.50 KB)