1 #using scripts\codescripts\struct;
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\system_shared;
5 #using scripts\shared\util_shared;
6 #using scripts\shared\filter_shared;
8 #insert scripts\shared\shared.gsh;
12 #define MAX_SCREEN_FX_RANGE 600
13 #define EXPLOSION_DIRT_DURATION 2000
14 #define EXPLOSION_DIRT_FADE_TIME 500
15 #define SLIDE_DIRT_DURATION 300
16 #define SLIDE_DIRT_FADE_TIME 300
17 #define FALL_DAMAGE_DIRT_DURATION 1000
18 #define FALL_DAMAGE_FADE_TIME 500
24 level.dirt_enable_explosion = GetDvarInt(
"scr_dirt_enable_explosion", 1 );
25 level.dirt_enable_slide = GetDvarInt(
"scr_dirt_enable_slide", 1 );
26 level.dirt_enable_fall_damage = GetDvarInt(
"scr_dirt_enable_fall_damage", 1 );
40 level.dirt_enable_explosion = GetDvarInt(
"scr_dirt_enable_explosion", level.dirt_enable_explosion );
41 level.dirt_enable_slide = GetDvarInt(
"scr_dirt_enable_slide", level.dirt_enable_slide );
42 level.dirt_enable_fall_damage = GetDvarInt(
"scr_dirt_enable_fall_damage", level.dirt_enable_fall_damage );
51 if(
self != GetLocalPlayer( localClientNum ) )
54 if ( level.dirt_enable_explosion || level.dirt_enable_slide || level.dirt_enable_fall_damage )
59 if( level.dirt_enable_explosion )
64 if( level.dirt_enable_slide )
69 if( level.dirt_enable_fall_damage )
78 self endon (
"entityshutdown" );
84 self waittill(
"fall_damage" );
91 self endon (
"entityshutdown" );
93 self.wasPlayerSliding =
false;
98 self.isPlayerSliding =
self IsPlayerSliding();
99 if(
self.isPlayerSliding )
101 if( !
self.wasPlayerSliding )
103 self notify(
"endTheDirty" );
104 seed = RandomFloatRange( 0.0, 1.0 );
112 else if(
self.wasPlayerSliding )
117 self.wasPlayerSliding =
self.isPlayerSliding;
122 function doTheDirty( localClientNum, right, up, distance, dirtDuration, dirtFadeTime )
124 self endon(
"entityshutdown" );
125 self notify(
"doTheDirty" );
126 self endon(
"doTheDirty" );
127 self endon(
"endTheDirty" );
135 while( elapsedTime < dirtDuration )
137 if( elapsedTime > dirtDuration - dirtFadeTime )
149 currentTime = GetServerTime( localClientNum );
158 self endon (
"entityshutdown" );
162 level waittill(
"explode", localClientNum, position, mod, weapon, owner_cent );
164 explosionDistance = Distance(
self.origin, position );
165 if ( ( ( mod ==
"MOD_GRENADE_SPLASH" ) || ( mod ==
"MOD_PROJECTILE_SPLASH" ) ) && ( explosionDistance <
MAX_SCREEN_FX_RANGE ) && !GetInKillcam( localClientNum ) && !IsThirdPerson( localClientNum ) )
167 cameraAngles =
self GetCamAngles();
168 if( !isDefined( cameraAngles ) )
171 forwardVec = VectorNormalize( AnglesToForward( cameraAngles ) );
172 upVec = VectorNormalize( AnglesToUp( cameraAngles ) );
173 rightVec = VectorNormalize( AnglesToRight( cameraAngles ) );
174 explosionVec = VectorNormalize( position - (
self GetCamPos() ) );
176 if( VectorDot( forwardVec, explosionVec ) > 0 )
178 trace = bulletTrace( GetLocalClientEyePos( localClientNum ), position,
false,
self );
179 if (
trace[
"fraction"] >= .9 )
181 uDot = -1.0 * VectorDot( explosionVec, upVec );
182 rDot = VectorDot( explosionVec, rightVec );
183 uDotAbs = abs( uDot );
184 rDotAbs = abs( rDot );
185 if( udotabs > rdotabs )