452 lines
17 KiB
Plaintext
452 lines
17 KiB
Plaintext
#include maps\_vehicle;
|
|
#include maps\_vehicle_aianim;
|
|
#include maps\_utility;
|
|
#include common_scripts\utility;
|
|
#using_animtree( "vehicles" );
|
|
|
|
main( model, type )
|
|
{
|
|
build_template( "snowmobile", model, type );
|
|
build_localinit( ::init_local );
|
|
build_deathmodel( "vehicle_snowmobile", "vehicle_snowmobile_static" );
|
|
build_deathfx( "explosions/large_vehicle_explosion", undefined, "explo_metal_rand" );
|
|
build_treadfx();
|
|
build_life( 999, 500, 1500 );
|
|
build_aianims( ::setanims, ::set_vehicle_anims );
|
|
build_compassicon( "automobile", false );
|
|
build_team( "allies" );
|
|
build_unload_groups( ::Unload_Groups );
|
|
|
|
if ( !isDefined( anim._effect ) )
|
|
anim._effect = [];
|
|
|
|
|
|
anim._effect[ "snowmobile_leftground" ] = loadfx( "treadfx/bigair_snow_snowmobile_emitter" );
|
|
anim._effect[ "snowmobile_bumpbig" ] = loadfx( "treadfx/bigjump_land_snow_snowmobile" );
|
|
anim._effect[ "snowmobile_bump" ] = loadfx( "treadfx/smalljump_land_snow_snowmobile" );
|
|
// anim._effect[ "snowmobile_sway_left" ] = loadfx( "treadfx/leftturn_snow_snowmobile" );
|
|
// anim._effect[ "snowmobile_sway_right" ] = loadfx( "treadfx/rightturn_snow_snowmobile" );
|
|
// anim._effect[ "snowmobile_collision" ] = loadfx( "explosions/grenadeExp_snow" );
|
|
|
|
}
|
|
|
|
init_local()
|
|
{
|
|
self.driver_shooting = false;
|
|
self.passenger_shooting = true;
|
|
self.steering_enable = true;
|
|
self.steering_maxroll = 15;
|
|
self.steering_maxdelta = 0.15;
|
|
self.steering = 0;
|
|
self.update_time = -1;
|
|
|
|
if ( !is_specialop() )
|
|
self thread do_steering();
|
|
|
|
self.bigjump_timedelta = 500;
|
|
self.event_time = -1;
|
|
self.event = [];
|
|
self.event[ "jump" ] = [];
|
|
self.event[ "jump" ][ "driver" ] = false;
|
|
self.event[ "jump" ][ "passenger" ] = false;
|
|
self.event[ "bump" ] = [];
|
|
self.event[ "bump" ][ "driver" ] = false;
|
|
self.event[ "bump" ][ "passenger" ] = false;
|
|
self.event[ "bump_big" ] = [];
|
|
self.event[ "bump_big" ][ "driver" ] = false;
|
|
self.event[ "bump_big" ][ "passenger" ] = false;
|
|
self.event[ "sway_left" ] = [];
|
|
self.event[ "sway_left" ][ "driver" ] = false;
|
|
self.event[ "sway_left" ][ "passenger" ] = false;
|
|
self.event[ "sway_right" ] = [];
|
|
self.event[ "sway_right" ][ "driver" ] = false;
|
|
self.event[ "sway_right" ][ "passenger" ] = false;
|
|
self thread watchVelocity();
|
|
self thread listen_leftground();
|
|
self thread listen_landed();
|
|
self thread listen_jolt();
|
|
self thread listen_collision();
|
|
|
|
self thread setRiderShooting();
|
|
|
|
if ( issubstr( self.vehicletype, "player" ) )
|
|
{
|
|
glock = spawn( "script_model", (0,0,0) );
|
|
glock setmodel( "viewmodel_glock" );
|
|
glock linkto( self, "tag_origin", (0,0,0), (0,0,0) );
|
|
glock hideallparts();
|
|
}
|
|
}
|
|
|
|
watchVelocity()
|
|
{
|
|
self endon( "death" );
|
|
vel = self Vehicle_GetVelocity();
|
|
for ( ;; )
|
|
{
|
|
self.prevFrameVelocity = vel;
|
|
vel = self Vehicle_GetVelocity();
|
|
wait .05;
|
|
}
|
|
}
|
|
|
|
setRiderShooting()
|
|
{
|
|
self endon( "death" );
|
|
waittillframeend;
|
|
|
|
if ( self.riders.size == 1 )
|
|
{
|
|
// no passenger, make the driver shoot
|
|
self.driver_shooting = true;
|
|
self.passenger_shooting = false;
|
|
}
|
|
}
|
|
|
|
snowmobile_fx( fxName )
|
|
{
|
|
if ( isDefined( anim._effect[ fxName ] ) )
|
|
playFxOnTag( anim._effect[ fxName ], self, "tag_deathfx" );
|
|
//println( fxName );
|
|
}
|
|
|
|
|
|
listen_leftground()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for ( ;; )
|
|
{
|
|
self waittill( "veh_leftground" );
|
|
self.event_time = gettime();
|
|
self.event[ "jump" ][ "driver" ] = true;
|
|
self.event[ "jump" ][ "passenger" ] = true;
|
|
|
|
snowmobile_fx( "snowmobile_leftground" );
|
|
}
|
|
}
|
|
|
|
|
|
listen_landed()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for ( ;; )
|
|
{
|
|
self waittill( "veh_landed" );
|
|
if ( self.event_time + self.bigjump_timedelta < gettime() )
|
|
{
|
|
self.event[ "bump_big" ][ "driver" ] = true;
|
|
self.event[ "bump_big" ][ "passenger" ] = true;
|
|
|
|
snowmobile_fx( "snowmobile_bumpbig" );
|
|
}
|
|
else
|
|
{
|
|
self.event[ "bump" ][ "driver" ] = true;
|
|
self.event[ "bump" ][ "passenger" ] = true;
|
|
|
|
snowmobile_fx( "snowmobile_bump" );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
listen_jolt()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for ( ;; )
|
|
{
|
|
self waittill( "veh_jolt", jolt );
|
|
if ( jolt[ 1 ] >= 0 )
|
|
{
|
|
self.event[ "sway_left" ][ "driver" ] = true;
|
|
self.event[ "sway_left" ][ "passenger" ] = true;
|
|
|
|
snowmobile_fx( "snowmobile_sway_left" );
|
|
}
|
|
else
|
|
{
|
|
self.event[ "sway_right" ][ "driver" ] = true;
|
|
self.event[ "sway_right" ][ "passenger" ] = true;
|
|
|
|
snowmobile_fx( "snowmobile_sway_right" );
|
|
}
|
|
}
|
|
}
|
|
|
|
listen_collision()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for ( ;; )
|
|
{
|
|
self waittill( "veh_collision", collision, start_vel );
|
|
|
|
foreach ( rider in self.riders )
|
|
{
|
|
if ( isalive( rider ) && !isdefined( rider.magic_bullet_shield ) )
|
|
{
|
|
rider.specialDeathFunc = animscripts\snowmobile::snowmobile_collide_death;
|
|
rider kill();
|
|
}
|
|
}
|
|
snowmobile_fx( "snowmobile_collision" );
|
|
}
|
|
}
|
|
|
|
do_steering()
|
|
{
|
|
self endon( "death" );
|
|
|
|
wait( 0.05 );
|
|
|
|
self setanimknoball( %snowmobile, %root, 1, 0 );
|
|
self setanimlimited( %sm_turn, 1, 0 );
|
|
|
|
for ( ;; )
|
|
{
|
|
update_steering( self );
|
|
|
|
if ( self.steering_enable )
|
|
{
|
|
if ( self.steering >= 0 )
|
|
{
|
|
self setanimknoblimited( %snowmobile_vehicle_lean_R_delta, 1, 0, 0 );
|
|
self setanimtime( %snowmobile_vehicle_lean_R_delta, self.steering );
|
|
}
|
|
else
|
|
{
|
|
self setanimknoblimited( %snowmobile_vehicle_lean_L_delta, 1, 0, 0 );
|
|
self setanimtime( %snowmobile_vehicle_lean_L_delta, abs( self.steering ) );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self clearanim( %snowmobile_vehicle_lean_R_delta, 0 );
|
|
self clearanim( %snowmobile_vehicle_lean_L_delta, 0 );
|
|
}
|
|
|
|
wait( 0.05 );
|
|
}
|
|
}
|
|
|
|
init_snowmobile_mount_anims()
|
|
{
|
|
|
|
level.snowmobile_mount_anims = [];
|
|
level.snowmobile_mount_anims[ "snowmobile_passenger" ] = [];
|
|
level.snowmobile_mount_anims[ "snowmobile_driver" ] = [];
|
|
|
|
// go through all the generic anims and find ones with the specific prefix
|
|
foreach ( scene_name, animation in level.scr_anim["generic"] )
|
|
{
|
|
if ( issubstr( scene_name, "snowmobile_passenger_mount" ) )
|
|
{
|
|
level.snowmobile_mount_anims[ "snowmobile_passenger" ][ scene_name ] = true;
|
|
continue;
|
|
}
|
|
|
|
if ( issubstr( scene_name, "snowmobile_driver_mount" ) )
|
|
{
|
|
level.snowmobile_mount_anims[ "snowmobile_driver" ][ scene_name ] = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
set_vehicle_anims( positions )
|
|
{
|
|
return positions;
|
|
}
|
|
|
|
#using_animtree( "generic_human" );
|
|
setanims()
|
|
{
|
|
level.scr_anim[ "generic" ][ "snowmobile_passenger_mount_dir1" ] = %snowmobile_passenger_mount_dir3;
|
|
level.scr_anim[ "generic" ][ "snowmobile_passenger_mount_dir3" ] = %snowmobile_passenger_mount_dir1;
|
|
level.scr_anim[ "generic" ][ "snowmobile_driver_mount_dir3" ] = %snowmobile_driver_mount_dir3;
|
|
level.scr_anim[ "generic" ][ "snowmobile_driver_mount_dir1" ] = %snowmobile_driver_mount_dir1;
|
|
|
|
level.scr_anim[ "generic" ][ "snowmobile_passenger_mount_dir1_short" ] = %snowmobile_passenger_mount_dir3_short;
|
|
level.scr_anim[ "generic" ][ "snowmobile_passenger_mount_dir3_short" ] = %snowmobile_passenger_mount_dir1_short;
|
|
level.scr_anim[ "generic" ][ "snowmobile_driver_mount_dir3_short" ] = %snowmobile_driver_mount_dir3_short;
|
|
level.scr_anim[ "generic" ][ "snowmobile_driver_mount_dir1_short" ] = %snowmobile_driver_mount_dir1_short;
|
|
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "idle" ] = %snowmobile_driver_aiming_idle;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "drive" ] = %snowmobile_driver_driving_idle;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "left2right" ] = %snowmobile_driver_lean_L2R;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "right2left" ] = %snowmobile_driver_lean_R2L;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "fire" ] = %snowmobile_driver_autofire;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "single" ] = %snowmobile_driver_fire;
|
|
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "drive_jump" ] = %snowmobile_driver_driving_jump_01;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "drive_bump" ] = %snowmobile_driver_driving_bump_01;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "drive_bump_big" ] = %snowmobile_driver_driving_bump_02;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "drive_sway_left" ] = %snowmobile_driver_driving_swayL_01;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "drive_sway_right" ] = %snowmobile_driver_driving_swayR_01;
|
|
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "shoot_jump" ] = %snowmobile_driver_aiming_jump_01;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "shoot_bump" ] = %snowmobile_driver_aiming_bump_01;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "shoot_bump_big" ] = %snowmobile_driver_aiming_bump_02;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "shoot_sway_left" ] = %snowmobile_driver_aiming_swayL_01;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "shoot_sway_right" ] = %snowmobile_driver_aiming_swayR_01;
|
|
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "add_aim_left" ][ "left" ] = %snowmobile_driver_aim4L_add;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "add_aim_left" ][ "center" ] = %snowmobile_driver_aim4C_add;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "add_aim_left" ][ "right" ] = %snowmobile_driver_aim4R_add;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "straight_level" ][ "left" ] = %snowmobile_driver_aim5L;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "straight_level" ][ "center" ] = %snowmobile_driver_aim5C;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "straight_level" ][ "right" ] = %snowmobile_driver_aim5R;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "add_aim_right" ][ "left" ] = %snowmobile_driver_aim6L_add;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "add_aim_right" ][ "center" ] = %snowmobile_driver_aim6C_add;
|
|
level.scr_anim[ "snowmobile" ][ "driver" ][ "add_aim_right" ][ "right" ] = %snowmobile_driver_aim6R_add;
|
|
|
|
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "hide" ] = %snowmobile_passenger_hide;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "drive" ] = %snowmobile_passenger_driving_idle;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "add_lean" ][ "left" ] = %snowmobile_passenger_lean_L;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "add_lean" ][ "right" ] = %snowmobile_passenger_lean_R;
|
|
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "idle" ] = %snowmobile_passenger_aiming_idle;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "fire" ] = %snowmobile_passenger_autofire;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "single" ] = %snowmobile_passenger_fire;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "reload" ] = %snowmobile_passenger_reload;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "gun_down" ] = %snowmobile_passenger_aim2hide;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "gun_up" ] = %snowmobile_passenger_hide2aim;
|
|
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "hide_jump" ] = %snowmobile_passenger_driving_jump_01;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "hide_bump" ] = %snowmobile_passenger_driving_bump_01;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "hide_bump_big" ] = %snowmobile_passenger_driving_bump_02;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "hide_sway_left" ] = %snowmobile_passenger_driving_swayL_01;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "hide_sway_right" ] = %snowmobile_passenger_driving_swayR_01;
|
|
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "drive_jump" ] = %snowmobile_passenger_aiming_jump_01;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "drive_bump" ] = %snowmobile_passenger_aiming_bump_01;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "drive_bump_big" ] = %snowmobile_passenger_aiming_bump_02;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "drive_sway_left" ] = %snowmobile_passenger_aiming_swayL_01;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "drive_sway_right" ] = %snowmobile_passenger_aiming_swayR_01;
|
|
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "aim_left" ][ "left" ] = %snowmobile_passenger_aim4L;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "aim_left" ][ "center" ] = %snowmobile_passenger_aim4C;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "aim_left" ][ "right" ] = %snowmobile_passenger_aim4R;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "aim_right" ][ "left" ] = %snowmobile_passenger_aim6L;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "aim_right" ][ "center" ] = %snowmobile_passenger_aim6C;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "aim_right" ][ "right" ] = %snowmobile_passenger_aim6R;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "add_aim_backleft" ][ "left" ] = %snowmobile_passenger_aim1L_add;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "add_aim_backleft" ][ "center" ] = %snowmobile_passenger_aim1C_add;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "add_aim_backleft" ][ "right" ] = %snowmobile_passenger_aim1R_add;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "add_aim_backright" ][ "left" ] = %snowmobile_passenger_aim3L_add;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "add_aim_backright" ][ "center" ] = %snowmobile_passenger_aim3C_add;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "add_aim_backright" ][ "right" ] = %snowmobile_passenger_aim3R_add;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "straight_level" ][ "left" ] = %snowmobile_passenger_aim5L;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "straight_level" ][ "center" ] = %snowmobile_passenger_aim5C;
|
|
level.scr_anim[ "snowmobile" ][ "passenger" ][ "straight_level" ][ "right" ] = %snowmobile_passenger_aim5R;
|
|
|
|
level.scr_anim[ "snowmobile" ][ "big" ][ "death" ][ "back" ] = %snowmobile_driver_death_B_01;
|
|
level.scr_anim[ "snowmobile" ][ "big" ][ "death" ][ "left" ] = %snowmobile_driver_death_L_01;
|
|
level.scr_anim[ "snowmobile" ][ "big" ][ "death" ][ "front" ] = %snowmobile_driver_death_F_01;
|
|
level.scr_anim[ "snowmobile" ][ "big" ][ "death" ][ "right" ] = %snowmobile_driver_death_R_01;
|
|
|
|
level.scr_anim[ "snowmobile" ][ "small" ][ "death" ][ "back" ] = %snowmobile_driver_death_B_03;
|
|
level.scr_anim[ "snowmobile" ][ "small" ][ "death" ][ "left" ] = %snowmobile_driver_death_L_03;
|
|
level.scr_anim[ "snowmobile" ][ "small" ][ "death" ][ "right" ] = %snowmobile_driver_death_R_03;
|
|
|
|
init_snowmobile_mount_anims();
|
|
|
|
|
|
positions = [];
|
|
for ( i = 0; i < 2; i++ )
|
|
positions[ i ] = spawnstruct();
|
|
|
|
positions[ 0 ].sittag = "tag_driver";
|
|
positions[ 1 ].sittag = "tag_passenger";
|
|
|
|
positions[ 0 ].getout = %snowmobile_driver_dismount;
|
|
positions[ 1 ].getout = %snowmobile_passenger_dismount;
|
|
|
|
|
|
return positions;
|
|
}
|
|
|
|
|
|
|
|
unload_groups()
|
|
{
|
|
unload_groups = [];
|
|
unload_groups[ "all" ] = [];
|
|
|
|
group = "all";
|
|
unload_groups[ group ][ unload_groups[ group ].size ] = 0;
|
|
unload_groups[ group ][ unload_groups[ group ].size ] = 1;
|
|
unload_groups[ "default" ] = unload_groups[ "all" ];
|
|
|
|
return unload_groups;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*QUAKED script_vehicle_snowmobile (1 0 0) (-16 -16 -24) (16 16 32) USABLE SPAWNER
|
|
|
|
put this in your GSC:
|
|
maps\_snowmobile::main( "vehicle_snowmobile" );
|
|
|
|
and these lines in your CSV:
|
|
include,vehicle_snowmobile_snowmobile
|
|
sound,vehicle_snowmobile,vehicle_standard,all_sp
|
|
|
|
|
|
defaultmdl="vehicle_snowmobile"
|
|
default:"vehicletype" "snowmobile"
|
|
default:"script_team" "allies"
|
|
*/
|
|
|
|
/*QUAKED script_vehicle_snowmobile_alt (1 0 0) (-16 -16 -24) (16 16 32) USABLE SPAWNER
|
|
|
|
put this in your GSC:
|
|
maps\_snowmobile::main( "vehicle_snowmobile_alt" );
|
|
|
|
and these lines in your CSV:
|
|
include,vehicle_snowmobile_snowmobile
|
|
sound,vehicle_snowmobile,vehicle_standard,all_sp
|
|
|
|
|
|
defaultmdl="vehicle_snowmobile_alt"
|
|
default:"vehicletype" "snowmobile"
|
|
default:"script_team" "allies"
|
|
*/
|
|
|
|
/*QUAKED script_vehicle_snowmobile_coop (1 0 0) (-16 -16 -24) (16 16 32) USABLE SPAWNER
|
|
|
|
put this in your GSC:
|
|
maps\_snowmobile::main( "vehicle_snowmobile", "snowmobile_player_coop" );
|
|
|
|
and these lines in your CSV:
|
|
include,vehicle_snowmobile_snowmobile
|
|
sound,vehicle_snowmobile,vehicle_standard,all_sp
|
|
|
|
|
|
defaultmdl="vehicle_snowmobile"
|
|
default:"vehicletype" "snowmobile_player_coop"
|
|
default:"script_team" "allies"
|
|
*/
|
|
|
|
/*QUAKED script_vehicle_snowmobile_coop_alt (1 0 0) (-16 -16 -24) (16 16 32) USABLE SPAWNER
|
|
|
|
put this in your GSC:
|
|
maps\_snowmobile::main( "vehicle_snowmobile_alt", "snowmobile_player_coop" );
|
|
|
|
and these lines in your CSV:
|
|
include,vehicle_snowmobile_snowmobile
|
|
sound,vehicle_snowmobile,vehicle_standard,all_sp
|
|
|
|
|
|
defaultmdl="vehicle_snowmobile_alt"
|
|
default:"vehicletype" "snowmobile_player_coop"
|
|
default:"script_team" "allies"
|
|
*/ |