1 #using scripts\codescripts\struct;
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\challenges_shared;
5 #using scripts\shared\clientfield_shared;
6 #using scripts\shared\damagefeedback_shared;
7 #using scripts\shared\math_shared;
8 #using scripts\shared\scoreevents_shared;
9 #using scripts\shared\sound_shared;
10 #using scripts\shared\system_shared;
11 #using scripts\shared\util_shared;
12 #using scripts\shared\weapons\_tacticalinsertion;
13 #using scripts\shared\weapons\_weaponobjects;
15 #insert scripts\shared\shared.gsh;
16 #insert scripts\shared\version.gsh;
18 #namespace smokegrenade;
20 #define SMOKE_GRENADE_RADIUS 128
24 level.willyPeteDamageRadius = 300;
25 level.willyPeteDamageHeight = 128;
26 level.smokeGrenadeDuration = 8;
27 level.smokeGrenadeDissipation = 4;
28 level.smokeGrenadeTotalTime = level.smokeGrenadeDuration + level.smokeGrenadeDissipation;
29 level.fx_smokegrenade_single =
"smoke_center";
30 level.smoke_grenade_triggers = [];
37 self endon(
"trophy_destroyed" );
39 owner AddWeaponStat( statWeapon,
"used", 1 );
41 self waittill(
"explode", position, surface );
43 oneFoot = ( 0, 0, 12 );
44 startPos = position + oneFoot;
46 smokeWeapon = GetWeapon( grenadeWeaponName );
50 damageEffectArea ( owner, startPos, smokeWeapon.explosionRadius, level.willyPeteDamageHeight, undefined );
54 function smokeDetonate( owner, statWeapon, smokeWeapon, position, radius, effectLifetime, smokeBlockDuration )
56 dir_up = (0.0, 0.0, 1.0);
57 ent = SpawnTimedFX( smokeWeapon, position, dir_up, effectLifetime );
59 ent SetTeam( owner.team );
60 ent SetOwner( owner );
65 if ( isdefined ( owner ) )
67 owner.smokeGrenadeTime = getTime();
68 owner.smokeGrenadePosition = position;
71 thread
playSmokeSound( position, smokeBlockDuration, statWeapon.projSmokeStartSound, statWeapon.projSmokeEndSound, statWeapon.projSmokeLoopSound );
79 effectArea =
spawn(
"trigger_radius", position, 0, radius, height );
82 if ( isdefined( level.dogsOnFlashDogs ) )
84 owner thread [[level.dogsOnFlashDogs]]( effectArea );
93 self endon(
"death" );
97 FxBlockSight(
self, radius );
100 if( GetDvarInt(
"scr_smokegrenade_debug", 0 ) )
116 ARRAY_ADD( level.smoke_grenade_triggers, trigger );
118 ArrayRemoveValue( level.smoke_grenade_triggers, trigger );
125 foreach( trigger
in level.smoke_grenade_triggers )
127 if(
self IsTouching( trigger ) )
138 self endon(
"disconnect");
145 self endon(
"death" );
146 self endon(
"disconnect" );
148 self notify(
"smokeTrackingStart" );
149 self endon(
"smokeTrackingStart" );
151 weapon_smoke = GetWeapon(
"willy_pete" );
155 self waittill (
"grenade_fire", grenade, weapon, cookTime );
162 if ( weapon.rootWeapon == weapon_smoke )
164 grenade thread
watchSmokeGrenadeDetonation(
self, weapon_smoke, level.fx_smokegrenade_single, level.smokeGrenadeDuration, level.smokeGrenadeTotalTime );
171 smokeSound =
spawn (
"script_origin",(0,0,1));
172 smokeSound.origin = position;
173 if( isDefined( startSound ) )
175 smokeSound playsound( startSound );
178 if( isDefined( loopSound ) )
180 smokeSound playLoopSound ( loopSound );
183 if ( duration > 0.5 )
184 wait( duration - 0.5 );
186 if( isDefined( stopSound ) )
190 smokeSound StopLoopSound( .5);