iw6-scripts/vehicle_scripts/hovercraft.gsc
2024-02-13 13:20:49 +01:00

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 );
}
}