iw6-scripts/maps/carrier_defend_sparrow.gsc
2024-02-13 13:20:49 +01:00

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