1 #insert scripts\shared\shared.gsh;
3 #using scripts\shared\audio_shared;
22 function play( localClientNum, vehicle, fx_id, fx_tag )
24 if ( !isdefined(fx_id ) )
30 StopFx( localClientNum,
handle );
39 if ( !isdefined(
id ) )
42 handle = PlayFxOnTag( localClientNum,
id, vehicle, fx_tag );
46 if ( !isdefined(
id ) ||
id != fx_id )
50 StopFx( localClientNum,
handle );
54 handle = PlayFxOnTag( localClientNum,
id, vehicle, fx_tag );
59 function stop( localClientNum )
63 StopFx( localClientNum,
handle );
87 function init( _name, _tag_name )
100 function update( localClientNum, vehicle, speed_fraction )
102 if ( vehicle.vehicleclass ===
"boat" )
106 trace = bullettrace( vehicle.origin + ( 0, 0, 60 ), vehicle.origin - ( 0, 0, 200 ),
false, vehicle );
108 if(
trace[
"fraction"] < 1.0 )
110 surface =
trace[
"surfacetype"];
114 [[
ground_fx[
"skid" ] ]]->stop( localClientNum );
115 [[
ground_fx[
"tread" ] ]]->stop( localClientNum );
122 if ( !vehicle IsWheelColliding(
name ) )
124 [[
ground_fx[
"skid" ] ]]->stop( localClientNum );
125 [[
ground_fx[
"tread" ] ]]->stop( localClientNum );
129 peelingout = vehicle IsWheelPeelingOut(
name );
130 sliding = vehicle IsWheelSliding(
name );
131 surface = vehicle GetWheelSurface(
name );
134 origin = vehicle GetTagOrigin(
tag_name ) + ( 0, 0, 1 );
135 angles = vehicle GetTagAngles(
tag_name );
137 fwd = AnglesToForward( angles );
138 right = AnglesToRight( angles );
146 if ( isdefined( peel_fx ) )
148 PlayFx( localClientNum, peel_fx, origin, fwd * -1 );
159 vehicle.skidding =
true;
164 [[
ground_fx[
"skid" ] ]]->stop( localClientNum );
167 if ( speed_fraction > 0.1 )
175 [[
ground_fx[
"tread" ] ]]->stop( localClientNum );
180 if ( vehicle IsLocalClientDriver( localClientNum ) )
182 player = GetLocalPlayer( localClientNum );
183 player PlayRumbleOnEntity( localClientNum,
"reload_small" );
219 function update( localClientNum, vehicle, speed_fraction )
221 if ( vehicle IsLocalClientDriver( localClientNum ) )
223 player = getlocalplayer( localClientNum );
225 if ( speed_fraction > 0 )
230 player Earthquake( strength, time, player.origin, 500 );
234 if ( RandomInt( 100 ) < 10 )
236 player PlayRumbleOnEntity( localClientNum,
rumble_name );
253 self endon(
"entityshutdown" );
257 self waittill(
"enter_vehicle", user );
259 if ( isdefined( user ) && user isplayer() )
270 self endon(
"entityshutdown" );
271 self endon(
"exit_vehicle" );
275 curspeed =
self GetSpeed();
276 curspeed = 0.0005 * curspeed;
277 curspeed = Abs(curspeed);
280 SetSavedDvar(
"r_speedBlurFX_enable",
"1");
281 SetSavedDvar(
"r_speedBlurAmount",curspeed);
285 SetSavedDvar(
"r_speedBlurFX_enable",
"0");
293 self endon(
"entityshutdown" );
297 if (
self.surfacefxdeftype ==
"" )
300 if ( !isdefined(
self.wheel_fx ) )
302 wheel_names =
array(
"front_left",
"front_right",
"back_left",
"back_right" );
303 wheel_tag_names =
array(
"tag_wheel_front_left",
"tag_wheel_front_right",
"tag_wheel_back_left",
"tag_wheel_back_right" );
306 if( isdefined(
self.scriptvehicletype ) &&
self.scriptvehicletype ==
"raps" )
308 wheel_names =
array(
"front_left" );
309 wheel_tag_names =
array(
"tag_origin" );
311 else if(
self.vehicleclass ==
"boat" )
313 wheel_names =
array(
"tag_origin" );
314 wheel_tag_names =
array(
"tag_origin" );
318 for ( i = 0; i < wheel_names.size; i++ )
320 self.wheel_fx[i] =
new VehicleWheelFx();
321 [[
self.wheel_fx[i] ]]->init( wheel_names[i], wheel_tag_names[i] );
326 [[
self.camera_fx[
"speed" ] ]]->init( 0.5, 1.0, 0.1, 0.115,
"reload_small" );
329 [[
self.camera_fx[
"skid" ] ]]->init( 0.25, 0.35, 0.1, 0.115 );
332 self.last_screen_dirt = 0;
333 self.screen_dirt_delay = 0;
339 speed = Length(
self GetVelocity() );
340 max_speed = ( speed < 0 ?
self GetMaxReverseSpeed() :
self GetMaxSpeed() );
341 speed_fraction = ( max_speed > 0 ? Abs(speed) / max_speed : 0 );
343 self.skidding =
false;
345 for ( i = 0; i <
self.wheel_fx.size; i++ )
347 [[
self.wheel_fx[i] ]]->update( localClientNum,
self, speed_fraction );
366 if ( type ==
"tread" )
368 fxarray =
self.treadfxnamearray;
370 else if ( type ==
"peel" )
372 fxarray =
self.peelfxnamearray;
374 else if ( type ==
"skid" )
376 fxarray =
self.skidfxnamearray;
379 if( isdefined( fxarray ) )
381 return fxarray[ surface ];
389 const normal_speed_fraction = 0.25;
392 if ( speed > 0 && speed_fraction >= normal_speed_fraction )
394 viewangles = getlocalclientangles( localClientNum );
395 pitch = angleclamp180( viewangles[0] );
397 const max_additional_time = 1000;
398 const no_effects_pitch = -10.0;
399 const full_effects_pitch = 10.0;
401 if ( pitch > no_effects_pitch )
403 current_additional_time = 0;
404 if ( pitch < full_effects_pitch )
406 current_additional_time = max_additional_time * ( ( (pitch - full_effects_pitch) / ( no_effects_pitch - full_effects_pitch ) ) );
409 if (
self.last_screen_dirt +
self.screen_dirt_delay + current_additional_time < getrealtime() )
412 if ( screen_fx_type ==
"dirt" )
420 self.last_screen_dirt = getrealtime();
421 self.screen_dirt_delay = RandomIntRange( 250, 500 );
429 self endon(
"entityshutdown" );
430 self endon(
"exit_vehicle" );
434 self waittill(
"veh_collision", hip, hitn, hit_intensity );
436 if (
self IsLocalClientDriver( localClientNum ) )
440 player = getlocalplayer( localClientNum );
442 if ( isdefined(
self.driving_fx_collision_override ) )
444 self [[
self.driving_fx_collision_override ]]( localClientNum, player, hip, hitn, hit_intensity );
448 if( isdefined( player ) && isdefined( hit_intensity ) )
450 if( hit_intensity >
self.heavyCollisionSpeed )
454 if (isdefined (
self.sounddef))
456 alias =
self.sounddef +
"_suspension_lg_hd";
460 alias =
"veh_default_suspension_lg_hd";
463 id = PlaySound( 0, alias,
self.origin, volume);
465 if( isdefined(
self.heavyCollisionRumble ) )
467 player PlayRumbleOnEntity( localClientNum,
self.heavyCollisionRumble );
470 else if( hit_intensity >
self.lightCollisionSpeed )
474 if (isdefined (
self.sounddef))
476 alias =
self.sounddef +
"_suspension_lg_lt";
480 alias =
"veh_default_suspension_lg_lt";
483 id = PlaySound( 0, alias,
self.origin, volume );
485 if( isdefined(
self.lightCollisionRumble ) )
487 player PlayRumbleOnEntity( localClientNum,
self.lightCollisionRumble );
498 self endon(
"entityshutdown" );
499 self endon(
"exit_vehicle" );
503 self waittill(
"veh_landed" );
505 if (
self IsLocalClientDriver( localClientNum ) )
507 player = getlocalplayer( localClientNum );
509 if( isdefined( player ) )
511 if ( isdefined(
self.driving_fx_jump_landing_override ) )
513 self [[
self.driving_fx_jump_landing_override ]]( localClientNum, player );
519 if (isdefined (
self.sounddef))
521 alias =
self.sounddef +
"_suspension_lg_hd";
525 alias =
"veh_default_suspension_lg_hd";
528 id = PlaySound( 0, alias,
self.origin, volume);
529 if( isdefined(
self.jumpLandingRumble ) )
531 player PlayRumbleOnEntity( localClientNum,
self.jumpLandingRumble );
541 self endon(
"entityshutdown" );
542 self endon(
"exit_vehicle" );
546 self waittill(
"veh_suspension_limit_activated" );
548 if (
self IsLocalClientDriver( localClientNum ) )
550 player = getlocalplayer( localClientNum );
552 if( isdefined( player ) )
556 if (isdefined (
self.sounddef))
558 alias =
self.sounddef +
"_suspension_lg_lt";
562 alias =
"veh_default_suspension_lg_lt";
565 id = PlaySound( 0, alias,
self.origin, volume);
566 player PlayRumbleOnEntity( localClientNum,
"damage_light" );
574 curspeed =
self GetSpeed();
575 maxSpeed =
self GetMaxSpeed();
579 volume = volume * volume * volume;
586 return (
self iswheelcolliding(
"front_left" ) ||
self iswheelcolliding(
"front_right" ) ||
587 self iswheelcolliding(
"back_left" ) ||
self iswheelcolliding(
"back_right" ) );
592 switch( surface_type )
610 right_rear =
self GetWheelSurface(
"back_right");
611 left_rear =
self GetWheelSurface(
"back_left");