1 #using scripts\codescripts\struct;
3 #using scripts\shared\audio_shared;
4 #using scripts\shared\callbacks_shared;
5 #using scripts\shared\clientfield_shared;
6 #using scripts\shared\system_shared;
7 #using scripts\shared\util_shared;
8 #using scripts\shared\_explode;
10 #insert scripts\shared\shared.gsh;
11 #insert scripts\shared\version.gsh;
13 #define GRAVITY_SPIKES_DIRT_DURATION 1000
14 #define GRAVITY_SPIKES_DIRT_FADE_TIME 500
16 #precache( "client_fx", "weapon/fx_hero_grvity_spk_grnd_hit_dust" );
18 #namespace gravity_spikes;
24 level._effect[
"gravity_spike_dust"] =
"weapon/fx_hero_grvity_spk_grnd_hit_dust";
25 level.gravity_spike_table =
"surface_explosion_gravityspikes";
29 level.dirt_enable_gravity_spikes = GetDvarInt(
"scr_dirt_enable_gravity_spikes", 0 );
34 if ( GetActiveLocalClients() > 1 )
37 weapon_proximity = GetWeapon(
"hero_gravityspikes" );
41 level waittill(
"explode", localClientNum, position, mod, weapon, owner_cent );
43 if ( weapon.rootWeapon != weapon_proximity )
48 if( isdefined(owner_cent) && ( GetLocalPlayer( localClientNum ) == owner_cent ) && level.dirt_enable_gravity_spikes )
62 radius_of_effect = 40;
64 number_of_circles = 3;
65 base_number_of_effects = 3;
66 additional_number_of_effects_per_circle = 7;
68 explosion_radius = weapon.explosionRadius;
69 radius_per_circle = ( explosion_radius - radius_of_effect ) / number_of_circles;
71 for ( circle = 0; circle < number_of_circles; circle++ )
74 radius_for_this_circle = radius_per_circle * (circle + 1);
75 number_for_this_circle = base_number_of_effects + (additional_number_of_effects_per_circle * circle);
82 currentAngle = ( ( 360 / fxCount ) * fxIndex );
83 cosCurrent = cos( currentAngle + rotation );
84 sinCurrent = sin( currentAngle + rotation );
86 return startPos + ( defaultDistance * cosCurrent, defaultDistance * sinCurrent, 0 );
91 half_x = int(max_x_offset / 2);
92 half_y = int(max_y_offset / 2);
93 rand_x = RandomIntRange( -half_x, half_x );
94 rand_y = RandomIntRange( -half_y, half_y );
96 return startPos + ( rand_x, rand_y, 0 );
104 return bullettrace( startPos + ( 0,0,trace_height ), startPos - ( 0,0,trace_depth ),
false, owner );
110 segment = 360 / count;
116 for ( i = 0; i < count; i++ )
123 if (
trace[
"fraction"] < 1.0 )
125 fx = GetFXFromSurfaceTable( level.gravity_spike_table,
trace[
"surfacetype"] );
127 if ( isdefined( fx ) )
129 angles = ( 0, RandomIntRange(0,359), 0 );
130 forward = AnglesToForward( angles );
132 normal =
trace[
"normal"];
133 if ( LengthSquared( normal ) == 0 )
137 PlayFx( localClientNum, fx,
trace[
"position"], normal, forward );