226 lines
7.1 KiB
Plaintext
226 lines
7.1 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
#using_animtree("vehicles");
|
|
|
|
main( var_0, var_1, var_2 )
|
|
{
|
|
maps\_vehicle::build_template( "hovercraft", var_0, var_1, var_2 );
|
|
maps\_vehicle::build_localinit( ::init_local );
|
|
maps\_vehicle::build_deathmodel( "vehicle_hovercraft_enemy" );
|
|
maps\_vehicle::build_deathmodel( "vehicle_hovercraft" );
|
|
|
|
if ( var_2 == "script_vehicle_hovercraft_enemy" )
|
|
maps\_vehicle::build_drive( %hovercraft_enemy_upper_fans, undefined, 0 );
|
|
else
|
|
maps\_vehicle::build_drive( %hovercraft_movement, undefined, 0 );
|
|
|
|
maps\_vehicle::build_life( 999, 500, 1500 );
|
|
maps\_vehicle::build_rumble( "tank_rumble", 0.15, 4.5, 600, 1, 1 );
|
|
maps\_vehicle::build_team( "allies" );
|
|
level._effect["hovercraft_wake_geotrail"] = loadfx( "fx/treadfx/hovercraft_wake_geo_trail" );
|
|
level._effect["hovercraft_water_splash_loop_water"] = loadfx( "fx/water/hovercraft_side_wake" );
|
|
level._effect["hovercraft_water_splash_ring"] = loadfx( "fx/water/hovercraft_side_wake_ring" );
|
|
level._effect["hovercraft_water_splash_loop_dirt"] = loadfx( "fx/misc/no_effect" );
|
|
level._effect["hovercraft_water_splash_ring_plume"] = loadfx( "fx/misc/hover_craft_water_plume" );
|
|
level._effect["hovercraft_dirt_splash_ring_plume"] = loadfx( "fx/misc/hover_craft_dirt_plume" );
|
|
}
|
|
|
|
init_local()
|
|
{
|
|
thread hovercraft_treadfx();
|
|
}
|
|
|
|
set_vehicle_anims( var_0 )
|
|
{
|
|
return var_0;
|
|
}
|
|
|
|
hovercraft_treadfx()
|
|
{
|
|
self.water_splash_reset_function = ::water_splash_reset_hovercraft;
|
|
thread water_splash();
|
|
}
|
|
|
|
hovercraft_treadfx_chaser( var_0 )
|
|
{
|
|
self.origin = var_0 common_scripts\utility::tag_project( "tag_origin", -10000 );
|
|
wait 0.1;
|
|
playfxontag( common_scripts\utility::getfx( "hovercraft_wake_geotrail" ), self, "tag_origin" );
|
|
var_1 = 1;
|
|
self notsolid();
|
|
self hide();
|
|
var_2 = ( 0, var_0.angles[1], 0 );
|
|
|
|
while ( isalive( var_0 ) )
|
|
{
|
|
self.origin = var_0 gettagorigin( "tag_origin" ) + ( 0, 0, 8 );
|
|
var_2 = common_scripts\utility::flat_angle( self.angles );
|
|
self.angles = var_2;
|
|
|
|
if ( isdefined( var_0.surfacetype ) )
|
|
{
|
|
if ( var_1 )
|
|
{
|
|
if ( var_0.surfacetype != "water" )
|
|
{
|
|
var_1 = 0;
|
|
stopfxontag( common_scripts\utility::getfx( "hovercraft_wake_geotrail" ), self, "tag_origin" );
|
|
}
|
|
}
|
|
else if ( var_0.surfacetype == "water" )
|
|
{
|
|
playfxontag( common_scripts\utility::getfx( "hovercraft_wake_geotrail" ), self, "tag_origin" );
|
|
var_1 = 1;
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
self delete();
|
|
}
|
|
|
|
water_splash_reset_hovercraft( var_0 )
|
|
{
|
|
var_0.water_tags = [];
|
|
var_0.water_tag_trace_cache = [];
|
|
var_0.water_fx = [];
|
|
var_0.water_fx["water"] = common_scripts\utility::getfx( "hovercraft_water_splash_loop_water" );
|
|
var_0.water_fx["dirt"] = common_scripts\utility::getfx( "hovercraft_water_splash_loop_dirt" );
|
|
var_0.water_fx["concrete"] = common_scripts\utility::getfx( "hovercraft_water_splash_loop_dirt" );
|
|
var_0.water_fx["mud"] = common_scripts\utility::getfx( "hovercraft_water_splash_loop_dirt" );
|
|
var_0.water_fx["default"] = common_scripts\utility::getfx( "hovercraft_water_splash_loop_dirt" );
|
|
var_0.water_fx["sand"] = common_scripts\utility::getfx( "hovercraft_water_splash_loop_dirt" );
|
|
var_0.water_fx_ring = common_scripts\utility::getfx( "hovercraft_water_splash_ring" );
|
|
var_0.water_fx_plume = [];
|
|
var_0.water_fx_plume["water"] = common_scripts\utility::getfx( "hovercraft_water_splash_ring_plume" );
|
|
var_0.water_fx_plume["dirt"] = common_scripts\utility::getfx( "hovercraft_dirt_splash_ring_plume" );
|
|
var_0.water_fx_plume["concrete"] = common_scripts\utility::getfx( "hovercraft_dirt_splash_ring_plume" );
|
|
var_0.water_fx_plume["mud"] = common_scripts\utility::getfx( "hovercraft_dirt_splash_ring_plume" );
|
|
var_0.water_fx_plume["sand"] = common_scripts\utility::getfx( "hovercraft_dirt_splash_ring_plume" );
|
|
var_0.splash_delay = 0.01;
|
|
var_0.ring_interval = 5;
|
|
var_1 = 0;
|
|
|
|
for ( var_2 = 0; var_2 < 12; var_2++ )
|
|
{
|
|
if ( var_2 == 4 || var_2 == 5 || var_2 == 6 )
|
|
continue;
|
|
|
|
var_0.water_tags[var_1] = "TAG_FX_WATER_SPLASH" + var_2;
|
|
var_0.water_tag_trace_cache[var_1] = create_trace_cache( var_1 );
|
|
var_1++;
|
|
}
|
|
}
|
|
|
|
create_trace_cache( var_0 )
|
|
{
|
|
var_1 = spawnstruct();
|
|
var_1.last_time = gettime() - ( 2000 - var_0 );
|
|
var_1.trace = [];
|
|
var_1.trace["position"] = self.origin;
|
|
return var_1;
|
|
}
|
|
|
|
water_splash()
|
|
{
|
|
self endon( "death" );
|
|
self.touching_water_trigger = 1;
|
|
var_0 = maps\_vehicle::get_dummy();
|
|
var_1 = self.touching_trigger_ent;
|
|
|
|
if ( !isdefined( self.water_splash_info ) )
|
|
{
|
|
var_2 = spawnstruct();
|
|
self.water_splash_info = var_2;
|
|
[[ self.water_splash_reset_function ]]( var_2 );
|
|
}
|
|
else
|
|
var_2 = self.water_splash_info;
|
|
|
|
var_3 = var_2.ring_interval;
|
|
var_4 = 1;
|
|
self.water_plume_inc = 0;
|
|
self.water_plume_next = randomintrange( 3, 5 );
|
|
|
|
for (;;)
|
|
{
|
|
wait( var_2.splash_delay );
|
|
|
|
if ( self vehicle_getspeed() < 1 )
|
|
continue;
|
|
|
|
if ( distancesquared( self.origin, level.player geteye() ) < 64000000 )
|
|
wait( var_2.splash_delay );
|
|
|
|
for ( var_5 = 0; var_5 < var_2.water_tags.size; var_5++ )
|
|
water_splash_single( var_5 );
|
|
|
|
var_0 = maps\_vehicle::get_dummy();
|
|
|
|
if ( var_0 != self )
|
|
{
|
|
var_1 = var_0;
|
|
continue;
|
|
}
|
|
|
|
var_1 = self.touching_trigger_ent;
|
|
}
|
|
}
|
|
|
|
water_splash_single( var_0, var_1 )
|
|
{
|
|
var_2 = self.water_splash_info;
|
|
var_3 = maps\_vehicle::get_dummy();
|
|
var_4 = var_2.water_tags[var_0];
|
|
var_5 = var_3 gettagorigin( var_4 );
|
|
var_6 = var_5 + ( 0, 0, 150 );
|
|
var_7 = var_5 - ( 0, 0, 150 );
|
|
var_8 = var_2.water_tag_trace_cache[var_0];
|
|
|
|
if ( gettime() - var_8.last_time >= 2000 )
|
|
{
|
|
var_9 = bullettrace( var_6, var_7, 0, self );
|
|
var_8.last_time = gettime();
|
|
var_8.trace = var_9;
|
|
}
|
|
else
|
|
{
|
|
var_8.trace["position"] = maps\_utility::set_z( var_5, var_8.trace["position"][2] );
|
|
var_9 = var_8.trace;
|
|
}
|
|
|
|
if ( !isdefined( var_2.water_fx[var_9["surfacetype"]] ) )
|
|
return;
|
|
|
|
var_10 = var_9["surfacetype"];
|
|
self.surfacetype = var_10;
|
|
|
|
if ( var_10 != "water" )
|
|
var_1 = 0;
|
|
|
|
var_6 = var_9["position"];
|
|
|
|
if ( var_9["fraction"] == 1 )
|
|
return;
|
|
|
|
var_11 = common_scripts\utility::flat_angle( var_3 gettagangles( var_4 ) );
|
|
var_12 = anglestoforward( var_11 );
|
|
var_13 = anglestoup( var_11 );
|
|
|
|
if ( distancesquared( var_6, level.player geteye() ) < 64000000 )
|
|
{
|
|
if ( isdefined( self.use_big_splash ) )
|
|
{
|
|
if ( var_4 == "TAG_FX_WATER_SPLASH3" || var_4 == "TAG_FX_WATER_SPLASH7" )
|
|
{
|
|
if ( isdefined( var_2.water_fx[var_10 + "_big"] ) )
|
|
var_10 = var_10 + "_big";
|
|
}
|
|
}
|
|
|
|
playfx( var_2.water_fx[var_10], var_6, var_13, var_12 );
|
|
}
|
|
}
|