Front-End Changes
1.34.6.2 Changelog
MAPS
- Reintroduced Train, which has been added to the Operation Vanguard map group (available for free to all CS:GO players).
- For more information, visit www.counter-strike.net/reintroducing_train
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
Bomb Squad (Foil)
– High Grade
Dinked
– High Grade
Drug War Veteran
– High Grade
Ho Ho Ho
– High Grade
Massive Pear
– High Grade
My Little Friend
– High Grade
Pandamonium
– High Grade
Phoenix (Foil)
– High Grade
SAS Chicken
– High Grade
Thug Life
– High Grade
T-Rekt
– High Grade
Warowl
– High Grade
Work For Ammo
– High Grade
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
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.
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.
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
Gift – 9 Player
Gift – 25 Spectators
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
Overpass
Prop Building
Prop Foliage
Prop Interior
Prop Junk
Prop Utility
De_Train
[beforeafter]
Vertigo
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 Animations
Seagull
Seagull
Seagull Animations
Pigeon
Pigeon
Pigeon Animations
Updated ~ Error Model
Updated ~ Error Model
The model that displays when their is a error with the file has been updated.
Updated UI Features
Menu Background Display
The snowdrop effect has returned from last year.
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.
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)