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

443 lines
15 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
_precache()
{
precachemodel( "angel_flare_rig" );
precacheshader( "heli_warning_missile_red" );
precacheshader( "apache_flare_back" );
precacheshader( "apache_ammo" );
precacheshader( "apache_warn_incoming_left" );
precacheshader( "apache_warn_incoming_right" );
precacheshader( "apache_warn_lock_left" );
precacheshader( "apache_warn_lock_right" );
precachestring( &"CHOPPERHUD_ENEMY_LOCK" );
precachestring( &"CHOPPERHUD_INCOMING" );
_fx();
flare_rig_anims();
evad_anims();
}
_fx()
{
level._effect["FX_chopper_flare"] = loadfx( "fx/_requests/apache/apache_flare" );
level._effect["FX_chopper_flare_explosion"] = loadfx( "fx/_requests/apache/apache_trophy_explosion" );
}
#using_animtree("vehicles");
evad_anims()
{
maps\_anim::create_anim_scene( #animtree, "apache_evade_right", %apache_break_r, "generic" );
maps\_anim::create_anim_scene( #animtree, "apache_evade_left", %apache_break_l, "generic" );
maps\_anim::create_anim_scene( #animtree, "battlehind_evade_right", %battlehind_break_r, "generic" );
maps\_anim::create_anim_scene( #animtree, "battlehind_evade_left", %battlehind_break_l, "generic" );
}
#using_animtree("script_model");
flare_rig_anims()
{
level.scr_animtree["flare_rig"] = #animtree;
level.scr_model["flare_rig"] = "angel_flare_rig";
level.scr_anim["flare_rig"]["flare"][0] = %ac130_angel_flares01;
level.scr_anim["flare_rig"]["flare"][1] = %ac130_angel_flares02;
}
_init( var_0, var_1, var_2 )
{
var_3 = spawnstruct();
var_3.owner = var_1;
var_3.vehicle = var_0;
var_3.vehicle.missile_defense = var_3;
var_3.type = "missile_defense";
var_3.lockedontome = [];
var_3.firedonme = [];
var_3.flareindex = 0;
var_3.flares = [];
var_3.flarenumpairs = 2;
var_3.flarecooldown = common_scripts\utility::ter_op( var_2, 5, 1 );
var_3.flarereloadtime = 8.0;
var_3.flareactiveradius = 4000;
var_3.flarefx = common_scripts\utility::getfx( "FX_chopper_flare" );
var_3.flarefxexplode = common_scripts\utility::getfx( "FX_chopper_flare_explosion" );
var_3.missiletargetflareradius = 2000;
var_3.flaredestroymissileradius = 192;
var_3.flarespawnmaxpitchoffset = 20;
var_3.flarespawnminpitchoffset = 10;
var_3.flarespawnmaxyawoffset = 80;
var_3.flarespawnminyawoffset = 55;
var_3.flarespawnoffsetright = 104;
var_3.flarerig_name = "flare_rig";
var_3.flarerig_animrate = 3;
var_3.flarerig_link = 1;
var_3.flarerig_tagorigin = undefined;
var_3.flarerig_tagangles = undefined;
var_3.flaresound = "chopper_flare_fire";
var_3.targeting = var_0.heli.targeting;
var_3.hud_currentstate = "none";
var_3.hud_laststate = "none";
var_3.flareauto = var_2;
var_3 hud_init();
return var_3;
}
hud_init()
{
var_0 = self.owner;
var_1 = self.vehicle.heli.pilot.hud;
var_2 = [];
var_2["warning"] = [];
var_2["warning"]["bg_lock_left"] = var_0 maps\_hud_util::createclienticon( "apache_warn_lock_left", 128, 128 );
var_2["warning"]["bg_lock_left"] maps\_hud_util::setpoint( "CENTER", "CENTER", -185, 0 );
var_2["warning"]["bg_lock_left"].alpha = 1.0;
var_2["warning"]["bg_lock_right"] = var_0 maps\_hud_util::createclienticon( "apache_warn_lock_right", 128, 128 );
var_2["warning"]["bg_lock_right"] maps\_hud_util::setpoint( "CENTER", "CENTER", 185, 0 );
var_2["warning"]["bg_lock_right"].alpha = 1.0;
var_2["warning"]["bg_inc_left"] = var_0 maps\_hud_util::createclienticon( "apache_warn_incoming_left", 128, 128 );
var_2["warning"]["bg_inc_left"] maps\_hud_util::setpoint( "CENTER", "CENTER", 0, 0 );
var_2["warning"]["bg_inc_left"].alpha = 1.0;
var_2["warning"]["bg_inc_left"] maps\_hud_util::setparent( var_2["warning"]["bg_lock_left"] );
var_2["warning"]["bg_inc_right"] = var_0 maps\_hud_util::createclienticon( "apache_warn_incoming_right", 128, 128 );
var_2["warning"]["bg_inc_right"] maps\_hud_util::setpoint( "CENTER", "CENTER", 0, 0 );
var_2["warning"]["bg_inc_right"].alpha = 1.0;
var_2["warning"]["bg_inc_right"] maps\_hud_util::setparent( var_2["warning"]["bg_lock_right"] );
var_2["warning"]["msg_left"] = var_0 maps\_hud_util::createclientfontstring( "objective", 0.8 );
var_2["warning"]["msg_left"] maps\_hud_util::setpoint( "CENTER", "CENTER", 4, 0 );
var_2["warning"]["msg_left"] settext( &"CHOPPERHUD_ENEMY_LOCK" );
var_2["warning"]["msg_left"].alpha = 0.0;
var_2["warning"]["msg_left"] maps\_hud_util::setparent( var_2["warning"]["bg_lock_left"] );
var_2["warning"]["msg_right"] = var_0 maps\_hud_util::createclientfontstring( "objective", 0.8 );
var_2["warning"]["msg_right"] maps\_hud_util::setpoint( "CENTER", "CENTER", -4, 0 );
var_2["warning"]["msg_right"] settext( &"CHOPPERHUD_ENEMY_LOCK" );
var_2["warning"]["msg_right"].alpha = 0.0;
var_2["warning"]["msg_right"] maps\_hud_util::setparent( var_2["warning"]["bg_lock_right"] );
var_3 = common_scripts\utility::ter_op( getdvarint( "widescreen" ) == 1, -180, -90 );
var_2["flares"] = [];
var_2["flares"]["back"] = var_0 maps\_hud_util::createclienticon( "apache_flare_back", 64, 32 );
var_2["flares"]["back"] maps\_hud_util::setpoint( "CENTER", "CENTER", var_3, 76 );
var_2["flares"]["back"].alpha = 1.0;
var_2["flares"]["ammo"] = [];
for ( var_4 = 0; var_4 < 2; var_4++ )
{
var_5 = var_0 maps\_hud_util::createclienticon( "apache_ammo", 16, 16 );
var_5 maps\_hud_util::setpoint( "RIGHT", "CENTER", 20, -4 + var_4 * 8 );
var_5.alpha = 1.0;
var_5.isavailable = 1;
var_5 maps\_hud_util::setparent( var_2["flares"]["back"] );
var_2["flares"]["ammo"][var_4] = var_5;
}
self.hud = var_2;
}
hud_update()
{
var_0 = self.vehicle.heli;
if ( var_0 maps\_utility::ent_flag( "FLAG_pilot_active" ) )
{
switch ( self.hud_currentstate )
{
case "none":
self.hud["warning"]["msg_left"].alpha = 0.0;
self.hud["warning"]["msg_right"].alpha = 0.0;
self.hud["warning"]["bg_lock_left"].alpha = 0.0;
self.hud["warning"]["bg_lock_right"].alpha = 0.0;
self.hud["warning"]["bg_inc_left"].alpha = 0.0;
self.hud["warning"]["bg_inc_right"].alpha = 0.0;
break;
case "warning":
case "incoming":
self.hud["warning"]["msg_left"].alpha = 1.0;
self.hud["warning"]["msg_right"].alpha = 1.0;
if ( self.hud_currentstate == "warning" )
{
self.hud["warning"]["bg_lock_left"].alpha = 1.0;
self.hud["warning"]["bg_lock_right"].alpha = 1.0;
self.hud["warning"]["bg_inc_left"].alpha = 0.0;
self.hud["warning"]["bg_inc_right"].alpha = 0.0;
}
else
{
self.hud["warning"]["bg_lock_left"].alpha = 0.0;
self.hud["warning"]["bg_lock_right"].alpha = 0.0;
self.hud["warning"]["bg_inc_left"].alpha = 1.0;
self.hud["warning"]["bg_inc_right"].alpha = 1.0;
}
break;
}
}
}
_start()
{
var_0 = self.owner;
var_0 endon( "LISTEN_end_missile_defense" );
hud_start();
childthread vehicle_scripts\_chopper_missile_defense_utility::monitorenemymissilelockon( ::hud_enemy_missile_lockon );
childthread vehicle_scripts\_chopper_missile_defense_utility::monitorenemymissilefire();
if ( !isdefined( self.flareauto ) || self.flareauto )
childthread vehicle_scripts\_chopper_missile_defense_utility::monitorflarerelease_auto( ::hud_makeused_flares, ::hud_makefree_flares );
else
childthread vehicle_scripts\_chopper_missile_defense_utility::monitorflarerelease_input( ::hud_makeused_flares, ::hud_makefree_flares );
childthread vehicle_scripts\_chopper_missile_defense_utility::monitorflares();
childthread monitorstateshud();
}
hud_start()
{
var_0 = self.vehicle.heli;
if ( var_0 maps\_utility::ent_flag( "FLAG_pilot_active" ) )
{
self.hud["warning"]["msg_left"].alpha = 0.0;
self.hud["warning"]["msg_right"].alpha = 0.0;
self.hud["warning"]["bg_lock_left"].alpha = 0.0;
self.hud["warning"]["bg_lock_right"].alpha = 0.0;
self.hud["warning"]["bg_inc_left"].alpha = 0.0;
self.hud["warning"]["bg_inc_right"].alpha = 0.0;
self.hud["warning"]["msg_right"].alpha = 0.0;
}
}
monitorstateshud()
{
var_0 = self.owner;
for (;;)
{
waittillframeend;
if ( vehicle_scripts\_chopper_missile_defense_utility::isanymissilefiredonme() )
self.hud_currentstate = "incoming";
else if ( vehicle_scripts\_chopper_missile_defense_utility::isanyenemylockedontome() && !vehicle_scripts\_chopper_missile_defense_utility::isanymissilefiredonme() )
self.hud_currentstate = "warning";
else
self.hud_currentstate = "none";
if ( self.hud_currentstate != self.hud_laststate )
{
if ( self.hud_laststate == "warning" )
var_0 common_scripts\utility::stop_loop_sound_on_entity( "missile_locking" );
else if ( self.hud_laststate == "incoming" )
var_0 common_scripts\utility::stop_loop_sound_on_entity( "missile_incoming" );
if ( self.hud_currentstate == "none" )
{
if ( self.hud_laststate == "warning" )
var_0 thread maps\_utility::play_sound_on_entity( "missile_locking_failed" );
hud_turnoffmissilewarning();
}
if ( self.hud_currentstate == "warning" )
{
var_0 thread common_scripts\utility::play_loop_sound_on_entity( "missile_locking" );
hud_missile_warning();
}
else if ( self.hud_currentstate == "incoming" )
{
var_0 thread common_scripts\utility::play_loop_sound_on_entity( "missile_incoming" );
hud_missile_incoming();
}
}
self.hud_laststate = self.hud_currentstate;
wait 0.05;
}
}
hud_enemy_missile_lockon( var_0 )
{
var_1 = self.owner;
var_0 common_scripts\utility::waittill_any( "death", "deathspin", "LISTEN_missile_fire_self", "LISTEN_missile_lockOnFailed" );
self.lockedontome = common_scripts\utility::array_removeundefined( self.lockedontome );
if ( isdefined( var_0 ) )
self.lockedontome = common_scripts\utility::array_remove( self.lockedontome, var_0 );
}
hud_buttonhelp( var_0, var_1 )
{
self endon( "death" );
for (;;)
{
var_0.alpha = 0;
var_1.alpha = 1;
wait 0.15;
var_0.alpha = 1;
var_1.alpha = 0;
wait 0.15;
}
}
hud_flashalpha( var_0, var_1, var_2 )
{
self endon( "death" );
self.alpha = var_0;
for (;;)
{
self fadeovertime( var_1 );
self.alpha = 0;
wait( var_1 );
if ( isdefined( var_2 ) && var_2 > 0 )
wait( var_2 );
self fadeovertime( var_1 );
self.alpha = var_0;
wait( var_1 );
}
}
hud_missile_warning()
{
var_0 = self.vehicle.heli;
if ( var_0 maps\_utility::ent_flag( "FLAG_pilot_active" ) )
{
self.hud["warning"]["msg_left"] settext( &"CHOPPERHUD_ENEMY_LOCK" );
self.hud["warning"]["msg_left"].color = ( 1, 1, 1 );
self.hud["warning"]["msg_right"] settext( &"CHOPPERHUD_ENEMY_LOCK" );
self.hud["warning"]["msg_right"].color = ( 1, 1, 1 );
self.hud["warning"]["msg_left"].alpha = 1.0;
self.hud["warning"]["msg_right"].alpha = 1.0;
self.hud["warning"]["bg_lock_left"].alpha = 1.0;
self.hud["warning"]["bg_lock_right"].alpha = 1.0;
self.hud["warning"]["bg_inc_left"].alpha = 0.0;
self.hud["warning"]["bg_inc_right"].alpha = 0.0;
}
}
hud_missile_incoming()
{
var_0 = self.vehicle.heli;
if ( var_0 maps\_utility::ent_flag( "FLAG_pilot_active" ) )
{
self.hud["warning"]["msg_left"] settext( &"CHOPPERHUD_INCOMING" );
self.hud["warning"]["msg_left"].color = ( 1, 1, 1 );
self.hud["warning"]["msg_right"] settext( &"CHOPPERHUD_INCOMING" );
self.hud["warning"]["msg_right"].color = ( 1, 1, 1 );
self.hud["warning"]["msg_left"].alpha = 1.0;
self.hud["warning"]["msg_right"].alpha = 1.0;
self.hud["warning"]["bg_lock_left"].alpha = 0.0;
self.hud["warning"]["bg_lock_right"].alpha = 0.0;
self.hud["warning"]["bg_inc_left"].alpha = 1.0;
self.hud["warning"]["bg_inc_right"].alpha = 1.0;
}
}
hud_turnoffmissilewarning()
{
var_0 = self.vehicle.heli;
if ( var_0 maps\_utility::ent_flag( "FLAG_pilot_active" ) )
{
self.hud["warning"]["msg_left"].alpha = 0.0;
self.hud["warning"]["msg_right"].alpha = 0.0;
self.hud["warning"]["bg_lock_left"].alpha = 0.0;
self.hud["warning"]["bg_lock_right"].alpha = 0.0;
self.hud["warning"]["bg_inc_left"].alpha = 0.0;
self.hud["warning"]["bg_inc_right"].alpha = 0.0;
self.hud["warning"]["msg_right"].alpha = 0.0;
}
}
hud_makeused_flares()
{
var_0 = hud_countfree_flares();
var_1 = var_0 > 0;
if ( var_1 )
{
var_0--;
hud_updateammo_flares( var_0 );
}
return var_1;
}
hud_makefree_flares( var_0 )
{
if ( isdefined( var_0 ) && var_0 > 0 )
wait( var_0 );
var_1 = hud_countfree_flares();
var_2 = var_1 < 2;
if ( var_2 )
{
var_1++;
hud_updateammo_flares( var_1 );
}
return var_2;
}
hud_updateammo_flares( var_0 )
{
foreach ( var_3, var_2 in self.hud["flares"]["ammo"] )
{
if ( var_3 + 1 <= var_0 )
{
var_2.isavailable = 1;
var_2.alpha = 1.0;
continue;
}
var_2.isavailable = 0;
var_2.alpha = 0.0;
}
}
hud_countfree_flares()
{
var_0 = 0;
foreach ( var_2 in self.hud["flares"]["ammo"] )
{
if ( var_2.isavailable )
var_0++;
}
return var_0;
}
_end()
{
var_0 = self.owner;
var_0 notify( "LISTEN_end_missile_defense" );
common_scripts\utility::array_thread( self.hud, ::set_key, [ 0, "alpha" ] );
var_0 common_scripts\utility::stop_loop_sound_on_entity( "missile_locking" );
var_0 common_scripts\utility::stop_loop_sound_on_entity( "missile_incoming" );
}
set_key( var_0, var_1 )
{
if ( !isdefined( self ) || !isdefined( var_1 ) )
return;
switch ( var_1 )
{
case "alpha":
self.alpha = var_0;
break;
}
}
_destroy()
{
_end();
self.vehicle.missile_defense = undefined;
maps\_utility::deep_array_call( self.hud, ::destroy );
}