1258 lines
43 KiB
Plaintext
1258 lines
43 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
defend_sparrow_pre_load()
|
|
{
|
|
common_scripts\utility::flag_init( "player_entering_sparrow" );
|
|
common_scripts\utility::flag_init( "defend_sparrow_start" );
|
|
common_scripts\utility::flag_init( "defend_sparrow_finished" );
|
|
common_scripts\utility::flag_init( "sparrow_wave1_down" );
|
|
common_scripts\utility::flag_init( "ac_130_hit" );
|
|
common_scripts\utility::flag_init( "ac130_wave1_attack" );
|
|
common_scripts\utility::flag_init( "ac130_wave2_attack" );
|
|
common_scripts\utility::flag_init( "ac130_wave3_attack" );
|
|
common_scripts\utility::flag_init( "ac130_wave4_attack" );
|
|
common_scripts\utility::flag_init( "ac130_wave5_attack" );
|
|
common_scripts\utility::flag_init( "ac130_final_approach" );
|
|
common_scripts\utility::flag_init( "ac130_start_attack_run" );
|
|
common_scripts\utility::flag_init( "ac_130_attack_run_1_done" );
|
|
common_scripts\utility::flag_init( "ac_130_attack_run_2_done" );
|
|
common_scripts\utility::flag_init( "ac_130_attack_run_3_done" );
|
|
common_scripts\utility::flag_init( "ac_130_attack_run_4_done" );
|
|
common_scripts\utility::flag_init( "ac_130_attack_run_5_done" );
|
|
common_scripts\utility::flag_init( "gunship_death_path" );
|
|
common_scripts\utility::flag_init( "gunship_left_path" );
|
|
common_scripts\utility::flag_init( "gunship_right_path" );
|
|
precachedigitaldistortcodeassets();
|
|
precachemodel( "projectile_slamraam_missile" );
|
|
precachemodel( "crr_sparrow_launcher" );
|
|
precacheitem( "sparrow_missile" );
|
|
precacheitem( "sparrow_missile_flak" );
|
|
precacheshader( "dpad_laser_designator" );
|
|
precacheitem( "sparrow_targeting_device" );
|
|
precacheshader( "crr_hud_missile_system_overlay_01" );
|
|
precacheshader( "crr_hud_lock_on_box" );
|
|
precacheshader( "crr_hud_interlace_mask" );
|
|
precacheshader( "crr_hud_rocket_icon_loaded" );
|
|
precacheshader( "crr_hud_rocket_icon_empty" );
|
|
precacheshader( "crr_hud_arrow_l" );
|
|
precacheshader( "crr_hud_arrow_r" );
|
|
precacheshader( "crr_hud_icon_class_2" );
|
|
precacheshader( "crr_hud_icon_class_4" );
|
|
precacheshader( "crr_hud_icon_fed_gunship" );
|
|
precacheshader( "crr_hud_icon_fed_helicopter" );
|
|
precacheshader( "crr_hud_icon_fed_inflatable" );
|
|
precacheshader( "crr_hud_missl_sys_ladder_l" );
|
|
precacheshader( "crr_hud_missl_sys_ladder_r" );
|
|
precacheshader( "cinematic" );
|
|
precacheshader( "hud_red_dot" );
|
|
precachemodel( "com_barrel_black_h" );
|
|
precachestring( &"CARRIER_ENGAGE" );
|
|
precachestring( &"CARRIER_USE_SPARROW" );
|
|
precachestring( &"CARRIER_USE_SPARROW_CONSOLE" );
|
|
precachestring( &"CARRIER_SPARROW_FIRE" );
|
|
precachestring( &"CARRIER_SPARROW_FIRE_PC" );
|
|
maps\_utility::add_hint_string( "fire_sparrow", &"CARRIER_SPARROW_FIRE" );
|
|
maps\_utility::add_hint_string( "fire_sparrow_pc", &"CARRIER_SPARROW_FIRE_PC" );
|
|
precacherumble( "ac130_40mm_fire" );
|
|
precachemodel( "crr_laptop_toughbook_obj" );
|
|
precacheitem( "ac130_25mm_carrier" );
|
|
precacheitem( "ac130_40mm_carrier" );
|
|
precacheitem( "ac130_105mm_carrier" );
|
|
level.defend_sparrow_control = getent( "defend_sparrow_control", "targetname" );
|
|
level.defend_sparrow_control maps\_utility::hide_entity();
|
|
var_0 = getent( "sparrow_launcher", "targetname" );
|
|
var_1 = getent( "sparrow_launcher_damage", "targetname" );
|
|
var_1 linkto( var_0 );
|
|
var_1 maps\_utility::hide_entity();
|
|
}
|
|
|
|
setup_defend_sparrow()
|
|
{
|
|
level.start_point = "defend_sparrow";
|
|
maps\carrier_code::setup_common();
|
|
maps\carrier_code::spawn_allies();
|
|
thread maps\carrier_audio::aud_check( "defend_sparrow" );
|
|
var_0 = getent( "water_wake_intro", "targetname" );
|
|
var_0 delete();
|
|
thread spawn_ac130();
|
|
thread sparrow_dead_operator();
|
|
}
|
|
|
|
begin_defend_sparrow()
|
|
{
|
|
thread sparrow_handle_ps4_ssao( 0 );
|
|
common_scripts\utility::waitframe();
|
|
thread run_sparrow_down_vo();
|
|
wait 1;
|
|
thread cleanup_enemies();
|
|
common_scripts\utility::flag_wait( "defend_sparrow_finished" );
|
|
level.player setviewkickscale( level.original_view_kick );
|
|
level maps\_utility::delaythread( 4, ::heli_cleanup );
|
|
wait 3;
|
|
var_0 = getent( "sparrow_launcher_damage", "targetname" );
|
|
var_0 maps\_utility::show_entity();
|
|
level.player maps\carrier_code_sparrow::sam_remove_control();
|
|
common_scripts\utility::exploder( 5501 );
|
|
maps\_utility::stop_exploder( 5505 );
|
|
thread maps\_utility::autosave_now();
|
|
}
|
|
|
|
sparrow_handle_ps4_ssao( var_0 )
|
|
{
|
|
if ( !level.ps4 )
|
|
return;
|
|
|
|
if ( !var_0 )
|
|
common_scripts\utility::flag_wait( "defend_sparrow_start" );
|
|
|
|
setsaveddvar( "r_ssaoScriptScale", 0 );
|
|
level waittill( "odin_strike_over" );
|
|
maps\_art::enable_ssao_over_time( 2 );
|
|
}
|
|
|
|
catchup_defend_sparrow()
|
|
{
|
|
|
|
}
|
|
|
|
run_defend_sparrow()
|
|
{
|
|
level.player endon( "death" );
|
|
var_0 = common_scripts\utility::getstruct( "sparrow_run_animnode", "targetname" );
|
|
var_1 = maps\_utility::spawn_anim_model( "player_rig" );
|
|
var_1 hide();
|
|
var_1 dontcastshadows();
|
|
var_0 maps\_anim::anim_first_frame_solo( var_1, "sparrow_enter_player" );
|
|
level.defend_sparrow_control maps\_utility::glow();
|
|
var_2 = getent( "sparrow_trigger_player", "targetname" );
|
|
var_2 setcursorhint( "HINT_NOICON" );
|
|
|
|
if ( level.console || level.player common_scripts\utility::is_player_gamepad_enabled() )
|
|
var_2 sethintstring( &"CARRIER_USE_SPARROW_CONSOLE" );
|
|
else
|
|
var_2 sethintstring( &"CARRIER_USE_SPARROW" );
|
|
|
|
level.ds_vo_timer_left = 0;
|
|
level.ds_vo_timer_right = 0;
|
|
level notify( "jet_battle_end" );
|
|
maps\player_scripted_anim_util::waittill_trigger_activate_looking_at( var_2, level.defend_sparrow_control, cos( 40 ), 0, 1 );
|
|
common_scripts\utility::flag_set( "obj_sparrow_complete" );
|
|
level.defend_sparrow_control maps\_utility::stopglow();
|
|
level.original_view_kick = level.player getviewkickscale();
|
|
level.player setviewkickscale( level.original_view_kick * 0.1 );
|
|
level.ac_130 thread maps\carrier_code_sparrow::sam_add_target();
|
|
level.ac_130 thread ac130_constant_target();
|
|
common_scripts\utility::flag_set( "player_entering_sparrow" );
|
|
maps\_utility::battlechatter_off( "allies" );
|
|
maps\_utility::flavorbursts_off( "allies" );
|
|
level.player playerlinktoblend( var_1, "tag_player", 0.333333 );
|
|
level.player thread maps\carrier_code::cinematic_on();
|
|
var_0 thread maps\_anim::anim_single_solo( var_1, "sparrow_enter_player" );
|
|
maps\_utility::delaythread( 0.05, maps\_anim::anim_set_rate, [ var_1 ], "sparrow_enter_player", 1.5 );
|
|
wait 0.333333;
|
|
var_1 show();
|
|
var_3 = getanimlength( var_1 maps\_utility::getanim( "sparrow_enter_player" ) );
|
|
wait( ( var_3 - 0.8 ) / 1.5 );
|
|
level.player thread maps\carrier_code_sparrow::sam_give_control();
|
|
level.player notify( "use_sam" );
|
|
var_1 waittillmatch( "single anim", "end" );
|
|
var_1 delete();
|
|
common_scripts\utility::exploder( 5505 );
|
|
common_scripts\utility::waitframe();
|
|
thread maps\carrier::obj_gunship();
|
|
level.helis_can_respawn = 1;
|
|
level.heli_kill_counter = 0;
|
|
thread heli_combat_kill_counter();
|
|
thread run_background_zodiacs();
|
|
thread spawn_background_helis();
|
|
common_scripts\utility::flag_set( "defend_sparrow_start" );
|
|
thread sparrow_fire_hint();
|
|
thread maps\_utility::vision_set_fog_changes( "carrier", 0 );
|
|
thread maps\_art::sunflare_changes( "carrier_sparrow_sunflare", 0 );
|
|
thread run_defend_vo();
|
|
wait 0.25;
|
|
}
|
|
|
|
sparrow_fire_hint()
|
|
{
|
|
level endon( "sparrow_missile_fired" );
|
|
wait 5;
|
|
var_0 = getkeybinding( "+speed_throw" );
|
|
var_1 = isdefined( var_0 ) && var_0["count"] != 0;
|
|
|
|
if ( var_1 )
|
|
level.player thread maps\_utility::display_hint( "fire_sparrow" );
|
|
else
|
|
level.player thread maps\_utility::display_hint( "fire_sparrow_pc" );
|
|
}
|
|
|
|
sparrow_dead_operator()
|
|
{
|
|
var_0 = maps\_utility::spawn_targetname( "defend_sparrow_operator", 1 );
|
|
var_0.animname = "generic";
|
|
var_0.ignoreall = 1;
|
|
var_0.ignoreme = 1;
|
|
var_0.diequietly = 1;
|
|
var_0 setlookattext( "", &"" );
|
|
var_0.name = "";
|
|
var_0 setcandamage( 0 );
|
|
var_0.a.nodeath = 1;
|
|
var_1 = maps\_utility::spawn_anim_model( "sparrow_laptop" );
|
|
var_2 = common_scripts\utility::getstruct( "sparrow_run_animnode", "targetname" );
|
|
var_3 = [ var_0, var_1 ];
|
|
common_scripts\utility::waitframe();
|
|
var_2 maps\_anim::anim_first_frame_solo( var_0, "sparrow_enter" );
|
|
var_2 maps\_anim::anim_first_frame_solo( var_1, "sparrow_enter" );
|
|
var_4 = var_1 gettagorigin( "j_prop_1" );
|
|
var_5 = var_1 gettagangles( "j_prop_1" );
|
|
level.defend_sparrow_control.origin = var_4;
|
|
level.defend_sparrow_control.angles = var_5;
|
|
level.defend_sparrow_control linkto( var_1, "j_prop_1" );
|
|
common_scripts\utility::flag_wait( "player_entering_sparrow" );
|
|
var_2 thread maps\_anim::anim_single( var_3, "sparrow_enter" );
|
|
common_scripts\utility::waitframe();
|
|
maps\_anim::anim_set_rate( var_3, "sparrow_enter", 1.5 );
|
|
thread maps\carrier_audio::aud_carr_dead_sparrow_ops();
|
|
var_0 waittillmatch( "single anim", "end" );
|
|
level.defend_sparrow_control unlink();
|
|
var_1 delete();
|
|
var_2 maps\_anim::anim_last_frame_solo( var_0, "sparrow_enter" );
|
|
common_scripts\utility::flag_wait( "defend_sparrow_start" );
|
|
wait 0.1;
|
|
var_0 delete();
|
|
}
|
|
|
|
cleanup_enemies()
|
|
{
|
|
var_0 = getaiarray( "axis" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( isalive( var_2 ) )
|
|
var_2 thread maps\ss_util::fake_death_bullet( 1.5 );
|
|
}
|
|
}
|
|
|
|
run_sparrow_down_vo()
|
|
{
|
|
level endon( "defend_sparrow_start" );
|
|
level.hesh maps\_utility::smart_dialogue( "carrier_hsh_weneedtotarget" );
|
|
thread run_defend_sparrow();
|
|
thread run_nag_vo();
|
|
}
|
|
|
|
run_nag_vo()
|
|
{
|
|
level endon( "defend_sparrow_start" );
|
|
var_0 = maps\_utility::make_array( "carrier_hsh_logangetonthat", "carrier_hsh_getonthemark", "carrier_hsh_adamgrabtheguidance" );
|
|
maps\carrier_code::nag_until_flag( var_0, "defend_sparrow_start", 5, 10, 5 );
|
|
}
|
|
|
|
run_defend_vo()
|
|
{
|
|
level endon( "player_failed_gunship" );
|
|
wait 0.2;
|
|
maps\_utility::smart_radio_dialogue( "carrier_us1_thereitisenemy" );
|
|
maps\_utility::smart_radio_dialogue( "carrier_us1_targettheac130" );
|
|
thread death_warning_vo();
|
|
thread run_background_vo();
|
|
common_scripts\utility::flag_wait( "ac130_wave5_attack" );
|
|
maps\_utility::smart_radio_dialogue( "carrier_hsh_thegunshipiscircling" );
|
|
wait 3;
|
|
|
|
if ( level.heli_kill_counter < 1 )
|
|
maps\_utility::smart_radio_dialogue( "carrier_hsh_takeoutthosechoppers_2" );
|
|
|
|
while ( !common_scripts\utility::flag( "ac_130_attack_run_4_done" ) )
|
|
{
|
|
common_scripts\utility::flag_wait( "ac130_start_attack_run" );
|
|
maps\_utility::smart_radio_dialogue( "carrier_us1_theac130ismaking" );
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "defend_sparrow_finished" );
|
|
wait 0.8;
|
|
maps\_utility::smart_radio_dialogue( "carrier_ttn_radarisclearall" );
|
|
}
|
|
|
|
death_warning_vo()
|
|
{
|
|
level endon( "defend_sparrow_finished" );
|
|
common_scripts\utility::flag_wait( "ac_130_attack_run_4_done" );
|
|
common_scripts\utility::flag_wait( "ac130_start_attack_run" );
|
|
maps\_utility::smart_radio_dialogue( "carrier_hsh_wecanttakeanother" );
|
|
}
|
|
|
|
run_background_vo()
|
|
{
|
|
level endon( "defend_sparrow_finished" );
|
|
wait 1.5;
|
|
maps\_utility::smart_radio_dialogue_overlap( "carrier_us1_maingunsdownwe" );
|
|
maps\_utility::smart_radio_dialogue_overlap( "carrier_us2_hullbreachhullbreach" );
|
|
maps\_utility::smart_radio_dialogue_overlap( "carrier_us2_thisistheoregon" );
|
|
maps\_utility::smart_radio_dialogue_overlap( "carrier_ttn_sendingrescueteamsto" );
|
|
maps\_utility::smart_radio_dialogue_overlap( "carrier_us1_weneedassistanceasap" );
|
|
maps\_utility::smart_radio_dialogue_overlap( "carrier_ttn_attemptingtorerouteair" );
|
|
maps\_utility::smart_radio_dialogue_overlap( "carrier_us2_hulliscompromisedabandon" );
|
|
maps\_utility::smart_radio_dialogue_overlap( "carrier_hp2_comeinoregonyou" );
|
|
maps\_utility::smart_radio_dialogue_overlap( "carrier_ttn_wevelostcommunications" );
|
|
maps\_utility::smart_radio_dialogue_overlap( "carrier_hp2_wehavebeencut" );
|
|
}
|
|
|
|
destroyer_mg_monitor()
|
|
{
|
|
level endon( "defend_sparrow_finished" );
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( self.origin[0] >= 3600 && self.origin[0] <= 6600 )
|
|
destroyer_mg_fire();
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
destroyer_mg_fire()
|
|
{
|
|
level endon( "defend_sparrow_finished" );
|
|
var_0 = common_scripts\utility::getstructarray( "destroyer4_mg_fire", "targetname" );
|
|
var_1 = common_scripts\utility::getclosest( self.origin, var_0 );
|
|
var_2 = var_1 common_scripts\utility::spawn_tag_origin();
|
|
var_3 = common_scripts\utility::getstruct( var_1.target, "targetname" );
|
|
var_4 = var_3 common_scripts\utility::spawn_tag_origin();
|
|
var_5 = common_scripts\utility::getstruct( var_3.target, "targetname" );
|
|
|
|
if ( common_scripts\utility::cointoss() )
|
|
{
|
|
var_4 moveto( var_5.origin, 2.5 );
|
|
var_2 destroyer_volley( var_4 );
|
|
}
|
|
else
|
|
var_2 destroyer_volley( self );
|
|
|
|
var_2 delete();
|
|
var_4 delete();
|
|
}
|
|
|
|
destroyer_ac130_exchange()
|
|
{
|
|
level endon( "defend_sparrow_finished" );
|
|
var_0 = common_scripts\utility::getstructarray( "destroyer_ac130_fire", "targetname" );
|
|
var_1 = level.destroyer_target;
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::flag_wait( "ac130_start_attack_run" );
|
|
common_scripts\utility::array_thread( var_0, ::destroyer_volley, var_1 );
|
|
}
|
|
}
|
|
|
|
destroyer_volley( var_0 )
|
|
{
|
|
level endon( "defend_sparrow_finished" );
|
|
|
|
for ( var_1 = 0; var_1 < 29; var_1++ )
|
|
{
|
|
var_2 = magicbullet( "ac130_25mm_carrier", self.origin, var_0.origin );
|
|
wait 0.15;
|
|
}
|
|
}
|
|
|
|
run_background_zodiacs()
|
|
{
|
|
level.sparrow_zodiacs = [];
|
|
wait 0.1;
|
|
maps\_utility::array_spawn_function_noteworthy( "sparrow_zodiacs", ::bg_zodiac_respawn );
|
|
maps\_utility::array_spawn_function_noteworthy( "sparrow_zodiacs", ::zodiac_setup );
|
|
maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "sparrow_zodiac_1" );
|
|
maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "sparrow_zodiac_2" );
|
|
maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "sparrow_zodiac_3" );
|
|
maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "sparrow_zodiac_4" );
|
|
}
|
|
|
|
bg_zodiac_respawn()
|
|
{
|
|
level endon( "defend_sparrow_finished" );
|
|
level.sparrow_zodiacs = common_scripts\utility::add_to_array( level.sparrow_zodiacs, self );
|
|
maps\carrier_code_sparrow::sam_add_target();
|
|
var_0 = self.spawner.targetname;
|
|
common_scripts\utility::waittill_any( "death", "reached_dynamic_path_end" );
|
|
|
|
if ( isdefined( self.riders ) )
|
|
{
|
|
foreach ( var_2 in self.riders )
|
|
{
|
|
if ( isdefined( var_2 ) )
|
|
var_2 delete();
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self ) )
|
|
self delete();
|
|
|
|
wait 0.25;
|
|
level.sparrow_zodiacs = maps\_utility::array_removedead( level.sparrow_zodiacs );
|
|
maps\_utility::array_spawn_function_targetname( var_0, ::bg_zodiac_respawn );
|
|
maps\_vehicle::spawn_vehicles_from_targetname_and_drive( var_0 );
|
|
}
|
|
|
|
zodiac_setup()
|
|
{
|
|
self.health = 55000;
|
|
self.currenthealth = self.health;
|
|
thread zodiac_sparrow_death();
|
|
thread maps\carrier_code_zodiac::zodiac_treadfx();
|
|
thread maps\carrier_code_zodiac::setup_fake_riders();
|
|
}
|
|
|
|
zodiac_sparrow_death()
|
|
{
|
|
self waittill( "sparrow_hit_zodiac" );
|
|
var_0 = self.origin + 250 * vectornormalize( level.player.origin - self.origin );
|
|
thread maps\carrier_code_zodiac::explode_single_zodiac( 0.33, var_0 );
|
|
}
|
|
|
|
spawn_pre_sparrow_helis()
|
|
{
|
|
level.helis_can_respawn = 1;
|
|
maps\_utility::array_spawn_function_targetname( "ds_helis_pre_path", maps\carrier_code::heli_fast_explode, 100 );
|
|
maps\_utility::array_spawn_function_targetname( "ds_helis_pre_path", ::heli_attack_mg, level.rear_elevator );
|
|
var_0 = maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "ds_helis_pre_path" );
|
|
common_scripts\utility::flag_wait( "sparrow_hud_black" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( isdefined( var_2 ) )
|
|
var_2 delete();
|
|
}
|
|
}
|
|
|
|
spawn_background_helis()
|
|
{
|
|
level.sparrow_background_helis = [];
|
|
wait 0.1;
|
|
var_0 = thread spawn_repeating_background_heli( "ds_background_heli_1" );
|
|
var_1 = thread spawn_repeating_background_heli( "ds_background_heli_2" );
|
|
level.sparrow_background_helis = common_scripts\utility::add_to_array( level.sparrow_background_helis, var_0 );
|
|
level.sparrow_background_helis = common_scripts\utility::add_to_array( level.sparrow_background_helis, var_1 );
|
|
}
|
|
|
|
spawn_repeating_background_heli( var_0 )
|
|
{
|
|
maps\_utility::array_spawn_function_targetname( var_0, maps\carrier_code::heli_fast_explode, 100 );
|
|
maps\_utility::array_spawn_function_targetname( var_0, ::heli_background_attack_mg );
|
|
maps\_utility::array_spawn_function_targetname( var_0, ::heli_background_respawn );
|
|
maps\_utility::array_spawn_function_targetname( var_0, ::destroyer_mg_monitor );
|
|
return maps\_vehicle::spawn_vehicles_from_targetname_and_drive( var_0 );
|
|
}
|
|
|
|
heli_background_respawn()
|
|
{
|
|
level endon( "defend_sparrow_finished" );
|
|
level endon( "ac130_final_approach" );
|
|
level.sparrow_background_helis = common_scripts\utility::add_to_array( level.sparrow_background_helis, self );
|
|
var_0 = self.spawner.targetname;
|
|
wait 0.2;
|
|
maps\carrier_code_sparrow::sam_add_target();
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::waittill_either( "death", "reached_dynamic_path_end" );
|
|
|
|
if ( isdefined( self ) && isalive( self ) )
|
|
self delete();
|
|
|
|
level.sparrow_background_helis = maps\_utility::array_removedead( level.sparrow_background_helis );
|
|
wait 0.1;
|
|
thread spawn_repeating_background_heli( var_0 );
|
|
}
|
|
}
|
|
|
|
heli_background_attack_mg()
|
|
{
|
|
maps\_utility::ent_flag_init( "sparrow_heli_start_mg_run" );
|
|
self endon( "death" );
|
|
level endon( "defend_sparrow_finished" );
|
|
self notify( "heli_attack_mg_stop" );
|
|
self endon( "heli_attack_mg_stop" );
|
|
common_scripts\utility::array_call( self.mgturret, ::turretfiredisable );
|
|
common_scripts\utility::array_call( self.mgturret, ::setmode, "manual" );
|
|
var_0 = common_scripts\utility::getstructarray( "sparrow_heli_background_attack", "targetname" );
|
|
var_1 = common_scripts\utility::spawn_tag_origin();
|
|
thread self_cleanup( var_1 );
|
|
|
|
for (;;)
|
|
{
|
|
maps\_utility::ent_flag_wait( "sparrow_heli_start_mg_run" );
|
|
var_2 = common_scripts\utility::getclosest( self.origin, var_0 );
|
|
var_1.origin = var_2.origin;
|
|
common_scripts\utility::array_call( self.mgturret, ::turretfireenable );
|
|
var_3 = 0.2;
|
|
|
|
while ( maps\_utility::ent_flag( "sparrow_heli_start_mg_run" ) )
|
|
{
|
|
for ( var_4 = 0; var_4 < 35; var_4++ )
|
|
{
|
|
common_scripts\utility::array_call( self.mgturret, ::settargetentity, var_1 );
|
|
common_scripts\utility::array_call( self.mgturret, ::shootturret );
|
|
wait( var_3 );
|
|
}
|
|
|
|
self notify( "done_with_volley" );
|
|
wait( randomfloatrange( 0.25, 0.5 ) );
|
|
}
|
|
|
|
common_scripts\utility::array_call( self.mgturret, ::turretfiredisable );
|
|
common_scripts\utility::array_call( self.mgturret, ::setmode, "manual" );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
spawn_initial_combat_helis()
|
|
{
|
|
level.sparrow_helis = [];
|
|
level.ds_vo_timer = 0;
|
|
|
|
if ( isdefined( level.sam_launchers ) && level.sam_launchers[level.sam_launcher_index].angles[1] >= 17.5 && level.sam_launchers[level.sam_launcher_index].angles[1] < 105 )
|
|
{
|
|
var_0 = thread spawn_repeating_heli( "ds_helis_right_1", 1 );
|
|
var_1 = thread spawn_repeating_heli( "ds_helis_right_2", 1 );
|
|
var_2 = thread spawn_repeating_heli( "ds_helis_right_3", 1 );
|
|
maps\_utility::smart_radio_dialogue( "carrier_ttn_incomingright" );
|
|
}
|
|
else
|
|
{
|
|
var_0 = thread spawn_repeating_heli( "ds_helis_left_1", 1 );
|
|
var_1 = thread spawn_repeating_heli( "ds_helis_left_2", 1 );
|
|
var_2 = thread spawn_repeating_heli( "ds_helis_left_3", 1 );
|
|
maps\_utility::smart_radio_dialogue( "carrier_ttn_incomingleft" );
|
|
}
|
|
}
|
|
|
|
spawn_repeating_heli( var_0, var_1 )
|
|
{
|
|
maps\_utility::array_spawn_function_targetname( var_0, maps\carrier_code_sparrow::sam_add_target );
|
|
maps\_utility::array_spawn_function_targetname( var_0, maps\carrier_code::drone_delete_on_unload );
|
|
maps\_utility::array_spawn_function_targetname( var_0, ::heli_attack_mg, level.sam_damage_dummy, level.sparrow_control );
|
|
maps\_utility::array_spawn_function_targetname( var_0, ::heli_combat_respawn );
|
|
maps\_utility::array_spawn_function_targetname( var_0, ::heli_combat_path );
|
|
|
|
if ( issubstr( var_0, "_1" ) )
|
|
maps\_utility::array_spawn_function_targetname( var_0, maps\carrier_code::heli_fast_explode, 100 );
|
|
|
|
return maps\_vehicle::spawn_vehicles_from_targetname_and_drive( var_0 );
|
|
}
|
|
|
|
heli_combat_kill_counter()
|
|
{
|
|
var_0 = 0;
|
|
level.helis_can_respawn = 1;
|
|
common_scripts\utility::flag_wait( "ac130_wave5_attack" );
|
|
common_scripts\utility::waitframe();
|
|
common_scripts\utility::flag_clear( "ac130_wave5_attack" );
|
|
thread spawn_initial_combat_helis();
|
|
heli_combat_kill_wave( 5, 8 );
|
|
heli_combat_kill_wave( 4, 6 );
|
|
heli_combat_kill_wave( 3, 5.5 );
|
|
heli_combat_kill_wave( 3, 5 );
|
|
}
|
|
|
|
heli_combat_kill_wave( var_0, var_1 )
|
|
{
|
|
var_2 = 0;
|
|
thread heli_combat_stop_respawn( var_0 );
|
|
|
|
while ( level.heli_kill_counter < var_0 || var_2 <= var_1 )
|
|
{
|
|
wait 0.05;
|
|
var_2 = var_2 + 0.05;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "ac130_start_attack_run" );
|
|
common_scripts\utility::waitframe();
|
|
common_scripts\utility::flag_clear( "ac130_start_attack_run" );
|
|
common_scripts\utility::flag_wait( "ac130_wave5_attack" );
|
|
common_scripts\utility::waitframe();
|
|
common_scripts\utility::flag_clear( "ac130_wave5_attack" );
|
|
level.heli_kill_counter = 0;
|
|
level.helis_can_respawn = 1;
|
|
}
|
|
|
|
heli_combat_stop_respawn( var_0 )
|
|
{
|
|
var_0 = var_0 - 1;
|
|
|
|
while ( level.heli_kill_counter < var_0 )
|
|
wait 0.05;
|
|
|
|
level.helis_can_respawn = 0;
|
|
}
|
|
|
|
heli_combat_respawn()
|
|
{
|
|
level endon( "defend_sparrow_finished" );
|
|
level endon( "ac130_final_approach" );
|
|
level.sparrow_helis = common_scripts\utility::add_to_array( level.sparrow_helis, self );
|
|
var_0 = self.spawner.targetname;
|
|
self waittill( "death" );
|
|
level.heli_kill_counter = level.heli_kill_counter + 1;
|
|
level.sparrow_helis = maps\_utility::array_removedead( level.sparrow_helis );
|
|
|
|
while ( !level.helis_can_respawn )
|
|
wait 0.05;
|
|
|
|
if ( isdefined( level.sam_launchers ) && level.sam_launchers[level.sam_launcher_index].angles[1] >= 17.5 && level.sam_launchers[level.sam_launcher_index].angles[1] < 105 )
|
|
{
|
|
if ( issubstr( var_0, "_1" ) )
|
|
thread spawn_repeating_heli( "ds_helis_right_1" );
|
|
else if ( issubstr( var_0, "_2" ) )
|
|
thread spawn_repeating_heli( "ds_helis_right_2" );
|
|
else if ( issubstr( var_0, "_3" ) )
|
|
thread spawn_repeating_heli( "ds_helis_right_3" );
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
maps\_utility::delaythread( 0.4, ::run_incoming_vo, 0, 1 );
|
|
}
|
|
else
|
|
{
|
|
if ( issubstr( var_0, "_1" ) )
|
|
thread spawn_repeating_heli( "ds_helis_left_1", 1 );
|
|
else if ( issubstr( var_0, "_2" ) )
|
|
thread spawn_repeating_heli( "ds_helis_left_2", 1 );
|
|
else if ( issubstr( var_0, "_3" ) )
|
|
thread spawn_repeating_heli( "ds_helis_left_3", 1 );
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
maps\_utility::delaythread( 0.4, ::run_incoming_vo, 1, 0 );
|
|
}
|
|
}
|
|
|
|
heli_combat_path()
|
|
{
|
|
self endon( "death" );
|
|
self waittill( "reached_dynamic_path_end" );
|
|
|
|
if ( isdefined( self ) )
|
|
self delete();
|
|
}
|
|
|
|
run_incoming_vo( var_0, var_1 )
|
|
{
|
|
level.player endon( "death" );
|
|
level endon( "defend_sparrow_finished" );
|
|
level endon( "ac130_final_approach" );
|
|
level endon( "player_failed_gunship" );
|
|
|
|
if ( var_0 == 1 )
|
|
{
|
|
if ( level.ds_vo_timer == 0 )
|
|
{
|
|
level.ds_vo_timer = 1;
|
|
maps\_utility::smart_radio_dialogue( "carrier_ttn_incomingleft" );
|
|
wait 9;
|
|
level.ds_vo_timer = 0;
|
|
}
|
|
}
|
|
else if ( level.ds_vo_timer == 0 )
|
|
{
|
|
level.ds_vo_timer = 1;
|
|
maps\_utility::smart_radio_dialogue( "carrier_ttn_incomingright" );
|
|
wait 9;
|
|
level.ds_vo_timer = 0;
|
|
}
|
|
}
|
|
|
|
debug_heli_gun( var_0 )
|
|
{
|
|
self endon( "done_with_volley" );
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
wait 0.05;
|
|
}
|
|
|
|
heli_attack_mg( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( self.ent_flag["sparrow_heli_start_mg_run"] ) )
|
|
maps\_utility::ent_flag_init( "sparrow_heli_start_mg_run" );
|
|
|
|
self endon( "death" );
|
|
level endon( "defend_sparrow_finished" );
|
|
self notify( "heli_attack_mg_stop" );
|
|
self endon( "heli_attack_mg_stop" );
|
|
common_scripts\utility::array_call( self.mgturret, ::turretfiredisable );
|
|
common_scripts\utility::array_call( self.mgturret, ::setmode, "manual" );
|
|
var_2 = getentarray( "sparrow_heli_attack_location", "targetname" );
|
|
var_3 = var_0;
|
|
var_4 = common_scripts\utility::spawn_tag_origin();
|
|
thread self_cleanup( var_4 );
|
|
|
|
for (;;)
|
|
{
|
|
maps\_utility::ent_flag_wait( "sparrow_heli_start_mg_run" );
|
|
|
|
if ( isdefined( level.sam_damage_dummy ) )
|
|
{
|
|
var_5 = common_scripts\utility::getclosest( self.origin, var_2 );
|
|
var_4.origin = var_5.origin;
|
|
var_4 moveto( level.sam_damage_dummy.origin, 4.25 );
|
|
}
|
|
|
|
common_scripts\utility::array_call( self.mgturret, ::turretfireenable );
|
|
var_6 = 0.25;
|
|
var_7 = 0.2;
|
|
|
|
while ( maps\_utility::ent_flag( "sparrow_heli_start_mg_run" ) && level.helis_can_respawn == 1 )
|
|
{
|
|
for ( var_8 = 0; var_8 < 35; var_8++ )
|
|
{
|
|
if ( isdefined( level.sam_damage_dummy ) )
|
|
common_scripts\utility::array_call( self.mgturret, ::settargetentity, var_4 );
|
|
else
|
|
common_scripts\utility::array_call( self.mgturret, ::settargetentity, var_3 );
|
|
|
|
common_scripts\utility::array_call( self.mgturret, ::shootturret );
|
|
wait( var_7 );
|
|
}
|
|
|
|
self notify( "done_with_volley" );
|
|
wait( randomfloatrange( 0.25, 0.5 ) );
|
|
}
|
|
|
|
common_scripts\utility::array_call( self.mgturret, ::turretfiredisable );
|
|
common_scripts\utility::array_call( self.mgturret, ::setmode, "manual" );
|
|
var_3 = var_0;
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
self_cleanup( var_0 )
|
|
{
|
|
self waittill( "death" );
|
|
wait 0.1;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 delete();
|
|
}
|
|
|
|
heli_cleanup()
|
|
{
|
|
foreach ( var_1 in level.sparrow_helis )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
var_1 kill();
|
|
}
|
|
|
|
foreach ( var_1 in level.sparrow_background_helis )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
var_1 kill();
|
|
}
|
|
|
|
foreach ( var_6 in level.sparrow_zodiacs )
|
|
{
|
|
if ( isdefined( var_6 ) )
|
|
var_6 delete();
|
|
}
|
|
}
|
|
|
|
spawn_ac130()
|
|
{
|
|
maps\_utility::array_spawn_function_targetname( "enemy_ac130", ::ac130_missile_defense_init );
|
|
maps\_utility::array_spawn_function_targetname( "enemy_ac130", ::ac130_attack_random );
|
|
maps\_utility::array_spawn_function_targetname( "enemy_ac130", ::ac130_direct_attack_path );
|
|
level.ac_130 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "enemy_ac130" );
|
|
|
|
if ( isdefined( level.player_ignored_2nd_osprey ) )
|
|
{
|
|
var_0 = getvehiclenode( "ac_130_skipped_osprey_path", "targetname" );
|
|
level.ac_130 vehicle_teleport( var_0.origin, var_0.angles );
|
|
level.ac_130 thread maps\_vehicle::vehicle_paths( var_0 );
|
|
}
|
|
|
|
thread maps\carrier_audio::aud_gunship_loc();
|
|
}
|
|
|
|
ac130_direct_attack_path()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "ac130_done" );
|
|
common_scripts\utility::flag_wait( "sparrow_hud_black" );
|
|
self notify( "attack_starting" );
|
|
thread ac130_kill_player();
|
|
var_0 = getvehiclenode( "ac_130_attack_path_left", "targetname" );
|
|
var_1 = getvehiclenode( "ac_130_attack_path_right", "targetname" );
|
|
var_2 = 1;
|
|
level.ac130_last_105_fire_time = 0;
|
|
|
|
for (;;)
|
|
{
|
|
self.attacked_this_run = 0;
|
|
|
|
if ( isdefined( level.sam_launchers ) && level.sam_launchers[level.sam_launcher_index].angles[1] >= 17.5 && level.sam_launchers[level.sam_launcher_index].angles[1] < 105 )
|
|
{
|
|
common_scripts\utility::flag_set( "gunship_right_path" );
|
|
self vehicle_teleport( var_1.origin, var_1.angles );
|
|
self attachpath( var_1 );
|
|
thread maps\_vehicle::vehicle_paths( var_1 );
|
|
thread maps\carrier_audio::aud_carr_gunship_attack_run();
|
|
wait 0.75;
|
|
|
|
if ( common_scripts\utility::flag( "ac_130_attack_run_1_done" ) )
|
|
maps\_utility::smart_radio_dialogue( "carrier_us1_ac130totheright" );
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::flag_set( "gunship_left_path" );
|
|
self vehicle_teleport( var_0.origin, var_0.angles );
|
|
self attachpath( var_0 );
|
|
thread maps\_vehicle::vehicle_paths( var_0 );
|
|
thread maps\carrier_audio::aud_carr_gunship_attack_run();
|
|
wait 0.75;
|
|
|
|
if ( common_scripts\utility::flag( "ac_130_attack_run_1_done" ) )
|
|
maps\_utility::smart_radio_dialogue( "carrier_us1_ac130totheleft" );
|
|
}
|
|
|
|
wait 8;
|
|
|
|
if ( var_2 == 1 && level.ac130_attacked_player_count == 0 || var_2 == 3 && level.ac130_attacked_player_count < 2 )
|
|
{
|
|
thread maps\carrier_code::ac130_magic_105( level.sam_launchers[level.sam_launcher_index].origin );
|
|
level.ac130_last_105_fire_time = gettime();
|
|
level.ac130_attacked_player_count++;
|
|
}
|
|
|
|
self waittill( "reached_dynamic_path_end" );
|
|
common_scripts\utility::flag_clear( "ac130_wave5_attack" );
|
|
common_scripts\utility::flag_clear( "gunship_death_path" );
|
|
common_scripts\utility::flag_clear( "gunship_left_path" );
|
|
common_scripts\utility::flag_clear( "gunship_right_path" );
|
|
common_scripts\utility::flag_set( "ac_130_attack_run_" + var_2 + "_done" );
|
|
var_2 = var_2 + 1;
|
|
common_scripts\utility::flag_wait( "ac130_start_attack_run" );
|
|
}
|
|
}
|
|
|
|
ac130_kill_player()
|
|
{
|
|
common_scripts\utility::flag_wait( "ac_130_attack_run_4_done" );
|
|
|
|
if ( !common_scripts\utility::flag( "ac_130_hit" ) )
|
|
{
|
|
level.player disableinvulnerability();
|
|
var_0 = level.player common_scripts\utility::spawn_tag_origin();
|
|
level.ac_130 maps\carrier_code::ac130_magic_105( var_0.origin );
|
|
wait 0.25;
|
|
level notify( "player_failed_gunship" );
|
|
level.player kill();
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
ac130_constant_target()
|
|
{
|
|
self endon( "death" );
|
|
level.ac130_attacked_player_count = 0;
|
|
var_0 = 1;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "sam_targeted", var_1 );
|
|
|
|
while ( gettime() - level.ac130_last_105_fire_time > 8000 && distance2dsquared( self.origin, level.player geteye() ) > 12960000 )
|
|
wait 0.05;
|
|
|
|
if ( gettime() - level.ac130_last_105_fire_time > 8000 && level.ac130_attacked_player_count < 2 && var_0 > level.ac130_attacked_player_count )
|
|
{
|
|
thread maps\carrier_code::ac130_magic_105( level.sam_launchers[level.sam_launcher_index].origin );
|
|
level.ac130_attacked_player_count++;
|
|
}
|
|
|
|
common_scripts\utility::flag_wait( "ac130_start_attack_run" );
|
|
var_0++;
|
|
maps\carrier_code_sparrow::sam_add_target();
|
|
}
|
|
}
|
|
|
|
ac130_attack_random()
|
|
{
|
|
self endon( "death" );
|
|
level.destroyer_target = common_scripts\utility::spawn_tag_origin();
|
|
level.destroyer_target linkto( self, "tag_origin" );
|
|
common_scripts\utility::flag_wait( "sparrow_hud_black" );
|
|
var_0 = undefined;
|
|
var_1 = undefined;
|
|
var_2 = undefined;
|
|
var_3 = undefined;
|
|
|
|
for (;;)
|
|
{
|
|
var_4 = randomint( 2 );
|
|
|
|
switch ( var_4 )
|
|
{
|
|
case 0:
|
|
var_0 = 0;
|
|
break;
|
|
case 1:
|
|
var_0 = 1;
|
|
break;
|
|
}
|
|
|
|
if ( var_0 == 0 )
|
|
{
|
|
var_1 = common_scripts\utility::spawn_tag_origin();
|
|
var_2 = maps\carrier_code::get_gun_tag();
|
|
var_3 = self gettagorigin( "tag_flash_40mm_" + var_2 );
|
|
var_1.origin = var_3;
|
|
var_1 linkto( self, "tag_flash_40mm_" + var_2 );
|
|
|
|
for ( var_5 = 0; var_5 < 2; var_5++ )
|
|
{
|
|
thread maps\carrier_code::ac130_magic_bullet( "40mm" );
|
|
var_1 maps\_utility::play_sound_on_entity( "ac130_40mm_fire_npc" );
|
|
wait 0.5;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_1 = common_scripts\utility::spawn_tag_origin();
|
|
var_2 = maps\carrier_code::get_gun_tag();
|
|
var_3 = self gettagorigin( "tag_flash_25mm_" + var_2 );
|
|
var_1.origin = var_3;
|
|
var_1 linkto( self, "tag_flash_25mm_" + var_2 );
|
|
|
|
for ( var_5 = 0; var_5 < 40; var_5++ )
|
|
{
|
|
thread maps\carrier_code::ac130_magic_bullet( "25mm" );
|
|
var_1 maps\_utility::play_sound_on_entity( "ac130_25mm_fire_npc" );
|
|
wait 0.15;
|
|
}
|
|
}
|
|
|
|
wait( randomfloatrange( 1.25, 2.0 ) );
|
|
var_1 delete();
|
|
}
|
|
}
|
|
|
|
ac130_missile_defense_init()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "flares_empty" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "sam_targeted", var_0 );
|
|
common_scripts\utility::flag_set( "ac_130_hit" );
|
|
|
|
while ( isvalidmissile( var_0 ) )
|
|
{
|
|
if ( common_scripts\utility::distance_2d_squared( self.origin, var_0.origin ) < squared( 2500 ) )
|
|
break;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
if ( !isdefined( var_0 ) || !isvalidmissile( var_0 ) )
|
|
continue;
|
|
|
|
thread angel_flare_burst( 10 );
|
|
|
|
while ( !isdefined( self.flares ) )
|
|
wait 0.05;
|
|
|
|
if ( !isdefined( var_0 ) || !isvalidmissile( var_0 ) )
|
|
continue;
|
|
|
|
var_1 = common_scripts\utility::getclosest( var_0.origin, self.flares );
|
|
var_1.mytarget = var_0;
|
|
var_0 missile_settargetent( var_1 );
|
|
|
|
while ( isvalidmissile( var_0 ) )
|
|
{
|
|
if ( distancesquared( var_1.origin, var_0.origin ) < squared( 768 ) )
|
|
break;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
var_2 = common_scripts\utility::getfx( "chopper_flare_explosion" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 delete();
|
|
|
|
playfx( var_2, var_1.origin );
|
|
var_1 delete();
|
|
thread ac130_missile_take_hit();
|
|
maps\_utility::delaythread( 5, common_scripts\utility::flag_clear, "ac_130_hit" );
|
|
wait 0.4;
|
|
thread maps\_utility::smart_radio_dialogue( "carrier_us2_ac130hasdeployedflares" );
|
|
common_scripts\utility::waitframe();
|
|
self notify( "flares_empty" );
|
|
}
|
|
}
|
|
|
|
angel_flare_burst( var_0 )
|
|
{
|
|
playfxontag( common_scripts\utility::getfx( "angel_flare_swirl" ), self, "tag_flash_flares" );
|
|
|
|
for ( var_1 = 0; var_1 < var_0; var_1++ )
|
|
{
|
|
thread shootflares();
|
|
wait( randomfloatrange( 0.1, 0.25 ) );
|
|
}
|
|
}
|
|
|
|
shootflares()
|
|
{
|
|
if ( !isdefined( level.anim_index ) )
|
|
level.anim_index = 0;
|
|
|
|
var_0 = maps\_utility::spawn_anim_model( "flare_rig" );
|
|
var_0.origin = self gettagorigin( "tag_flash_flares" );
|
|
var_0.angles = self gettagangles( "tag_flash_flares" ) + ( 0, 180, 0 );
|
|
var_1 = [];
|
|
var_2 = [ "flare_right_top", "flare_left_bot", "flare_right_bot", "flare_left_top" ];
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
var_5 = common_scripts\utility::spawn_tag_origin();
|
|
var_5.origin = var_0 gettagorigin( var_4 );
|
|
var_5.angles = var_0 gettagangles( var_4 );
|
|
var_5 linkto( var_0, var_4 );
|
|
var_5 thread flare_trackvelocity();
|
|
var_1[var_4] = var_5;
|
|
}
|
|
|
|
self.flares = var_1;
|
|
var_7 = level.scr_anim["flare_rig"]["flare"].size;
|
|
var_8 = level.scr_anim["flare_rig"]["flare"][level.anim_index % var_7];
|
|
level.anim_index++;
|
|
var_0 setflaggedanim( "flare_anim", var_8, 1, 0, 1 );
|
|
var_9 = common_scripts\utility::getfx( "angel_flare_geotrail" );
|
|
var_1 = common_scripts\utility::array_randomize( var_1 );
|
|
|
|
foreach ( var_4, var_5 in var_1 )
|
|
{
|
|
if ( isdefined( var_5 ) )
|
|
playfxontag( var_9, var_1[var_4], "tag_origin" );
|
|
}
|
|
|
|
var_0 waittillmatch( "flare_anim", "end" );
|
|
|
|
foreach ( var_4, var_5 in var_1 )
|
|
{
|
|
if ( isdefined( var_5 ) )
|
|
{
|
|
stopfxontag( var_9, var_1[var_4], "tag_origin" );
|
|
var_5 delete();
|
|
}
|
|
}
|
|
|
|
var_0 delete();
|
|
var_1 = common_scripts\utility::array_removeundefined( var_1 );
|
|
common_scripts\utility::array_thread( var_1, ::flare_doburnout );
|
|
return var_1;
|
|
}
|
|
|
|
flare_trackvelocity()
|
|
{
|
|
self endon( "death" );
|
|
self.velocity = 0;
|
|
var_0 = self.origin;
|
|
|
|
for (;;)
|
|
{
|
|
self.velocity = self.origin - var_0;
|
|
var_0 = self.origin;
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
flare_doburnout()
|
|
{
|
|
self endon( "death" );
|
|
self movegravity( 14 * self.velocity, 0.2 );
|
|
wait 0.2;
|
|
|
|
if ( !isdefined( self ) || isdefined( self.mytarget ) )
|
|
return;
|
|
|
|
self delete();
|
|
}
|
|
|
|
ac130_missile_take_hit()
|
|
{
|
|
self endon( "ac130_hit" );
|
|
var_0 = [];
|
|
var_0[0] = common_scripts\utility::spawn_tag_origin();
|
|
var_0[1] = common_scripts\utility::spawn_tag_origin();
|
|
var_0[0].origin = self gettagorigin( "tag_light_l_wing" );
|
|
var_0[1].origin = self gettagorigin( "tag_light_r_wing" );
|
|
var_0[0] linkto( self );
|
|
var_0[1] linkto( self );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "sam_targeted", var_1 );
|
|
common_scripts\utility::flag_set( "ac_130_hit" );
|
|
|
|
while ( isvalidmissile( var_1 ) )
|
|
{
|
|
if ( common_scripts\utility::distance_2d_squared( self.origin, var_1.origin ) < squared( 1500 ) )
|
|
break;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
if ( !isdefined( var_1 ) || !isvalidmissile( var_1 ) )
|
|
continue;
|
|
|
|
var_2 = common_scripts\utility::getclosest( var_1.origin, var_0 );
|
|
|
|
if ( var_2 == var_0[0] )
|
|
var_3 = anglestoright( var_2.angles ) * -12;
|
|
else
|
|
var_3 = anglestoright( var_2.angles ) * 12;
|
|
|
|
var_1 missile_settargetent( var_2, var_3 );
|
|
var_4 = missile_createattractorent( var_2, 25000, 10000 );
|
|
|
|
while ( isvalidmissile( var_1 ) )
|
|
{
|
|
if ( distancesquared( var_2.origin + var_3, var_1.origin ) < squared( 768 ) )
|
|
break;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
missile_deleteattractor( var_4 );
|
|
var_5 = common_scripts\utility::getfx( "vfx_missile_death_air" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_1 delete();
|
|
|
|
playfx( var_5, var_2.origin );
|
|
wait 0.1;
|
|
level.wing_tag = common_scripts\utility::spawn_tag_origin();
|
|
|
|
if ( var_2 == var_0[0] )
|
|
{
|
|
level.first_gunship_wing = "left1";
|
|
level.wing_tag.origin = self gettagorigin( "tag_fx_engine_le_1" );
|
|
level.wing_tag.angles = self gettagangles( "tag_fx_engine_le_1" );
|
|
level.wing_tag linkto( self, "tag_fx_engine_le_1" );
|
|
playfxontag( common_scripts\utility::getfx( "vfx_ac130_engine_fire" ), level.wing_tag, "tag_origin" );
|
|
}
|
|
else
|
|
{
|
|
level.first_gunship_wing = "right1";
|
|
level.wing_tag.origin = self gettagorigin( "tag_fx_engine_ri_1" );
|
|
level.wing_tag.angles = self gettagangles( "tag_fx_engine_ri_1" );
|
|
level.wing_tag linkto( self, "tag_fx_engine_ri_1" );
|
|
playfxontag( common_scripts\utility::getfx( "vfx_ac130_engine_fire" ), level.wing_tag, "tag_origin" );
|
|
}
|
|
|
|
maps\_utility::delaythread( 1, common_scripts\utility::flag_clear, "ac_130_hit" );
|
|
wait 0.4;
|
|
thread maps\_utility::smart_radio_dialogue( "carrier_us2_goodhittheac130" );
|
|
thread ac130_final_life();
|
|
common_scripts\utility::waitframe();
|
|
self notify( "ac130_hit" );
|
|
}
|
|
}
|
|
|
|
ac130_final_life()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "player_failed_gunship" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "sam_targeted", var_0 );
|
|
common_scripts\utility::flag_set( "ac_130_hit" );
|
|
|
|
while ( isvalidmissile( var_0 ) )
|
|
{
|
|
if ( distancesquared( self.origin, var_0.origin ) < squared( 640 ) )
|
|
break;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
if ( !common_scripts\utility::flag( "gunship_death_path" ) )
|
|
{
|
|
common_scripts\utility::flag_wait( "gunship_death_path" );
|
|
|
|
if ( common_scripts\utility::flag( "gunship_right_path" ) )
|
|
{
|
|
var_1 = getvehiclenode( "gunship_deathpath_right", "targetname" );
|
|
self attachpath( var_1 );
|
|
thread maps\_vehicle::vehicle_paths( var_1 );
|
|
}
|
|
else
|
|
{
|
|
var_1 = getvehiclenode( "gunship_deathpath_left", "targetname" );
|
|
self attachpath( var_1 );
|
|
thread maps\_vehicle::vehicle_paths( var_1 );
|
|
}
|
|
}
|
|
|
|
self.script_bulletshield = 0;
|
|
self.script_grenadeshield = 0;
|
|
level.ac_130 maps\_utility::delaythread( 1.25, maps\carrier_code::ac130_magic_bullet, "40mm", level.sam_launchers[level.sam_launcher_index].origin );
|
|
var_2 = common_scripts\utility::getfx( "vfx_missile_death_air" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 delete();
|
|
|
|
playfx( var_2, self.origin );
|
|
wait 0.1;
|
|
common_scripts\utility::flag_set( "defend_sparrow_finished" );
|
|
thread maps\carrier_audio::aud_carr_sparrow_105_incoming();
|
|
thread maps\carrier_audio::aud_carr_gunship_killed();
|
|
thread maps\_utility::smart_radio_dialogue( "carrier_ttn_federationgunshipisdown" );
|
|
maps\_utility::delaythread( 1.5, common_scripts\utility::flag_set, "obj_gunship_complete" );
|
|
var_3 = common_scripts\utility::spawn_tag_origin();
|
|
|
|
if ( isdefined( level.first_gunship_wing ) && level.first_gunship_wing == "left1" )
|
|
{
|
|
level.second_gunship_wing = "right2";
|
|
var_3.origin = self gettagorigin( "tag_fx_engine_ri_2" );
|
|
var_3.angles = self gettagangles( "tag_fx_engine_ri_2" );
|
|
var_3 linkto( self, "tag_fx_engine_ri_2" );
|
|
playfxontag( common_scripts\utility::getfx( "vfx_ac130_engine_fire" ), var_3, "tag_origin" );
|
|
}
|
|
else
|
|
{
|
|
level.second_gunship_wing = "left2";
|
|
var_3.origin = self gettagorigin( "tag_fx_engine_le_2" );
|
|
var_3.angles = self gettagangles( "tag_fx_engine_le_2" );
|
|
var_3 linkto( self, "tag_fx_engine_le_2" );
|
|
playfxontag( common_scripts\utility::getfx( "vfx_ac130_engine_fire" ), var_3, "tag_origin" );
|
|
}
|
|
|
|
common_scripts\utility::waittill_either( "reached_dynamic_path_end", "victory_start" );
|
|
stopfxontag( common_scripts\utility::getfx( "vfx_ac130_engine_fire" ), level.wing_tag, "tag_origin" );
|
|
stopfxontag( common_scripts\utility::getfx( "vfx_ac130_engine_fire" ), var_3, "tag_origin" );
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( isdefined( self ) )
|
|
self delete();
|
|
|
|
common_scripts\utility::waitframe();
|
|
var_3 delete();
|
|
|
|
if ( isdefined( level.wing_tag ) )
|
|
level.wing_tag delete();
|
|
}
|
|
}
|