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

933 lines
34 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
enemyhq_finale_pre_load()
{
common_scripts\utility::flag_init( "finale_sniping" );
common_scripts\utility::flag_init( "open_finale_doors" );
common_scripts\utility::flag_init( "start_butchdance" );
common_scripts\utility::flag_init( "end_of_sniping" );
common_scripts\utility::flag_init( "butchdance_sniping" );
common_scripts\utility::flag_init( "finale_combat1" );
common_scripts\utility::flag_init( "finale_combat3" );
common_scripts\utility::flag_init( "more_finale_guys" );
common_scripts\utility::flag_init( "flyaway_baddies" );
common_scripts\utility::flag_init( "flyaway_lynx2" );
common_scripts\utility::flag_init( "finale_done" );
common_scripts\utility::flag_init( "merrick_exfil" );
common_scripts\utility::flag_init( "ghosts_exfil2" );
common_scripts\utility::flag_init( "chopper_ready" );
common_scripts\utility::flag_init( "killed_trucks" );
common_scripts\utility::flag_init( "obj_escape_complete" );
common_scripts\utility::flag_init( "stop_drones" );
}
setup_finale()
{
level.start_point = "finale";
maps\enemyhq::setup_common();
thread maps\enemyhq_audio::aud_check( "finale" );
common_scripts\utility::flag_set( "hvt_done" );
var_0 = getent( "bishop", "targetname" );
level.bishop = var_0 maps\_utility::spawn_ai( 1, 1 );
level.bishop.animname = "bishop";
level.bishop maps\_utility::make_hero();
level.bishop maps\_utility::gun_remove();
level.allies[1] maps\enemyhq_code::carry_bishop();
maps\enemyhq_code::safe_activate_trigger_with_targetname( "pre_exit" );
thread keegan_idle_with_bishop();
thread enable_finale_and_ghost_chopper_clips();
thread maps\enemyhq_code::handle_leave_team_fail( "leaving_clubhouse", "left_clubhouse" );
}
setup_new_finale()
{
setup_finale();
thread maps\enemyhq_audio::aud_check( "newfinale" );
}
begin_new_finale()
{
begin_finale();
}
#using_animtree("player");
begin_finale()
{
var_0 = getent( "dog_chopper_clip", "targetname" );
var_0 notsolid();
var_0 connectpaths();
level.sniper_vision_override = "enemyhq_sniper_view_b";
var_1 = getent( "finale_dead_truck_clip", "targetname" );
if ( isdefined( var_1 ) )
var_1 solid();
var_1 = getent( "finale_dead_truck", "targetname" );
if ( isdefined( var_1 ) )
var_1 show();
maps\_utility::stop_exploder( 8 );
common_scripts\utility::exploder( 888 );
maps\_utility::stop_exploder( 8010 );
maps\_utility::stop_exploder( 9090 );
level.ghost_chopper = maps\_vehicle::spawn_vehicles_from_targetname( "ghost_chopper" );
level.ghost_chopper = level.ghost_chopper[0];
var_2 = getaiarray( "axis" );
common_scripts\utility::array_thread( var_2, maps\enemyhq_code::die_quietly );
common_scripts\utility::array_thread( level.allies, maps\_utility::disable_pain );
common_scripts\utility::flag_clear( "done_sniping_early" );
maps\_utility::autosave_by_name( "finale" );
thread handle_agressive_player();
thread finale_vo();
thread new_finale_dog_hijack();
level.dog maps\enemyhq_code::lock_player_control();
thread butchdance_combat();
common_scripts\utility::flag_wait( "open_finale_doors" );
thread maps\enemyhq_audio::aud_door_bust_open();
thread open_exit_doors();
level.remote_sniper_return_struct = common_scripts\utility::getstruct( "butchdance_return_struct", "targetname" );
maps\enemyhq_code::safe_activate_trigger_with_targetname( "to_exit" );
common_scripts\utility::flag_wait( "start_butchdance" );
var_3 = common_scripts\utility::array_combine( level.allies, maps\_utility::make_array( level.bishop, level.dog ) );
common_scripts\utility::array_thread( var_3, ::super_guy, 1 );
common_scripts\utility::flag_wait( "butchdance_sniping" );
level notify( "stop_leave_fails" );
level.dog thread maps\_utility::disable_pain();
level.dog maps\_utility::set_ignoresuppression( 1 );
wait 0.5;
maps\enemyhq_code::safe_activate_trigger_with_targetname( "butchdance0" );
var_4 = getnode( "pre_exit_spot0", "targetname" );
level.allies[0] maps\_utility::teleport_ai( var_4 );
var_4 = getnode( "pre_exit_spot1", "targetname" );
level.allies[1] maps\_utility::teleport_ai( var_4 );
common_scripts\utility::flag_wait( "finale_asplode" );
var_5 = maps\_utility::spawn_anim_model( "player_rig" );
var_5 linkto( level.finale_chopper, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
var_5 thread maps\_anim::anim_first_frame_solo( var_5, "get_in_chopper" );
var_5 hide();
wait 0.1;
common_scripts\utility::flag_wait( "get_in_choppa" );
var_6 = level.player.origin - level.finale_chopper.origin;
var_7 = anglestoright( level.finale_chopper.angles );
var_8 = vectordot( var_6, var_7 );
if ( var_8 > 0 )
{
var_9 = "right";
level.scr_anim["player_rig"]["get_in_chopper"] = %ehq_helicopter_enter_opposite_side_player;
var_5 thread maps\_anim::anim_first_frame_solo( var_5, "get_in_chopper" );
wait 0.05;
}
else
var_9 = "left";
level.player enableinvulnerability();
thread maps\_utility::autosave_now();
level.player allowcrouch( 0 );
level.player allowprone( 0 );
level.player setstance( "stand" );
level.player disableweapons();
level.player disableoffhandweapons();
level.player playerlinktoblend( var_5, "tag_player", 0.5 );
var_5 thread arms_delayed_show();
thread dog_ride_chopper( var_9 );
var_5 maps\_anim::anim_single_solo( var_5, "get_in_chopper" );
var_5 hide();
level.player playerlinktodelta( var_5, "tag_player", 1, 25, 45, 30, 30, 1 );
level.player enableweapons();
thread finale_flyaway();
thread finale_sniping();
wait 28;
var_10 = 5;
thread digital_out( 0.5, var_10 );
wait 2.5;
common_scripts\utility::flag_set( "finale_done" );
level.player notify( "fadeup_static_finale" );
wait 3.5;
var_11 = maps\enemyhq_code::create_overlay_element( "black", 0 );
var_11 fadeovertime( 2 );
var_11.alpha = 1;
wait 2;
maps\_utility::nextmission();
wait 10;
}
arms_delayed_show()
{
wait 0.5;
self show();
}
digital_out( var_0, var_1 )
{
var_2 = 0;
var_3 = 0.3;
var_4 = var_2;
if ( isdefined( var_0 ) )
var_3 = var_0;
var_5 = 1.25;
if ( isdefined( var_1 ) )
var_5 = var_1;
var_6 = 0.05;
var_7 = var_5 / var_6;
var_8 = 1 / var_7;
var_9 = 90 / var_7;
var_10 = 89.9;
while ( var_10 > 0 )
{
var_11 = cos( var_10 );
level.player digitaldistortsetparams( var_11, var_11 );
wait 0.05;
var_4 = var_4 + var_8;
if ( var_10 > 45 )
{
var_10 = var_10 - var_9 / 2;
continue;
}
var_10 = var_10 - var_9;
}
level.player digitaldistortsetparams( 1, 0 );
}
keegan_idle_with_bishop()
{
level.allies[1] maps\_utility::disable_ai_color();
var_0 = common_scripts\utility::getstruct( "keegan_putdown_bishop_org", "targetname" );
var_0 maps\_anim::anim_reach_solo( level.allies[1], "wounded_carry_putdown" );
level.allies[1] notify( "stop_anim" );
level.bishop notify( "stop_anim" );
level.bishop maps\_utility::anim_stopanimscripted();
waittillframeend;
level.allies[1] thread maps\_anim::anim_loop_solo( level.allies[1], "wounded_carry_idle" );
level.bishop thread bishop_loop_carry_pose();
common_scripts\utility::flag_wait( "butchdance_sniping" );
level.allies[1] maps\_utility::anim_stopanimscripted();
common_scripts\utility::waitframe();
level.allies[1] maps\_utility::enable_ai_color();
level.allies[1] maps\enemyhq_code::carry_bishop();
}
bishop_loop_carry_pose()
{
level.bishop thread maps\_anim::anim_loop_solo( level.bishop, "wounded_carry_idle" );
common_scripts\utility::flag_wait( "butchdance_sniping" );
level.bishop maps\_utility::anim_stopanimscripted();
}
hesh_ride_chopper()
{
var_0 = level.allies[0];
var_0.ignoreme = 0;
var_0 linkto( level.finale_chopper );
var_0 maps\_utility::gun_remove();
level.finale_chopper maps\_anim::anim_single_solo( var_0, "get_in_chopper", "tag_origin" );
var_0.script_startingposition = 0;
level.finale_chopper thread maps\_vehicle::vehicle_load_ai( level.allies );
}
dog_ride_chopper( var_0 )
{
level.dog maps\enemyhq_code::set_dog_scripted_mode( level.player );
if ( isdefined( var_0 ) && var_0 == "right" )
wait 3.0;
else
level.finale_chopper maps\_anim::anim_single_solo( level.dog, "get_in_chopper", "tag_origin" );
if ( isdefined( level.dog.magic_bullet_shield ) && level.dog.magic_bullet_shield == 1 )
level.dog maps\_utility::stop_magic_bullet_shield();
level.dog maps\_utility_dogs::kill_dog_fur_effect_and_delete();
}
super_guy( var_0 )
{
self.ignoresuppression = var_0;
if ( var_0 )
{
self.old_accuracy = self.baseaccuracy;
self.baseaccuracy = 0.1;
}
else
self.baseaccuracy = self.old_accuracy;
self.dodangerreact = !var_0;
self.disablebulletwhizbyreaction = var_0;
}
new_finale_dog_hijack()
{
var_0 = common_scripts\utility::getstruct( "finale_dog_scene", "targetname" );
var_1 = maps\_vehicle::spawn_vehicle_from_targetname( "new_finale_chopper" );
var_1.animname = "heli";
level.finale_chopper = var_1;
level.finale_chopper maps\_vehicle::godon();
thread maps\enemyhq_audio::aud_chopper_second( var_1 );
common_scripts\utility::flag_wait( "end_of_sniping" );
var_2 = getent( "dog_chopper_clip", "targetname" );
var_2 solid();
var_2 disconnectpaths();
var_3 = getent( "amazing_crate", "targetname" );
var_4 = getent( "amazing_crate_clip", "targetname" );
var_4 linkto( var_3 );
var_4 connectpaths();
var_5 = common_scripts\utility::getstruct( "amazing_crate_loc", "targetname" );
var_3.origin = var_5.origin;
var_4 disconnectpaths();
var_6 = getent( "dog_hijackee", "targetname" );
var_7 = var_6 maps\_utility::spawn_ai( 1, 1 );
var_7.ignoreall = 1;
var_7.ignoreme = 1;
var_7.animname = "generic";
level.dog maps\_utility::anim_stopanimscripted();
level.dog unlink();
wait 0.1;
level.allies[0].animname = "hesh";
var_8 = maps\_utility::make_array( var_1, level.dog, var_7, level.allies[0] );
var_9 = var_1 setcontents( 0 );
var_0 thread maps\_anim::anim_single( var_8, "new_dog_hijack" );
var_1 waittillmatch( "single anim", "end" );
var_2 connectpaths();
var_2 notsolid();
var_10 = getent( "dog_chopper_player_clip", "targetname" );
var_10 notsolid();
var_1 setcontents( var_9 );
var_1 thread maps\_vehicle_code::animate_drive_idle();
wait 1;
common_scripts\utility::flag_set( "chopper_ready" );
}
finale_flyaway()
{
var_0 = common_scripts\utility::getstruct( "finale_chopper_path", "targetname" );
level.finale_chopper.attachedpath = undefined;
level.finale_chopper notify( "newpath" );
level.finale_chopper thread maps\_vehicle::vehicle_paths( var_0 );
level.finale_chopper vehicle_setspeed( 5, 30, 30 );
level.finale_chopper resumespeed( 5 );
wait 5.0;
level notify( "finale_chopper_taking_off" );
common_scripts\utility::flag_set( "finale_chopper_continue" );
}
open_exit_doors()
{
var_0 = getent( "dugout_exit_door_left", "targetname" );
var_1 = getent( "dugout_exit_door_right", "targetname" );
var_0 rotateyaw( -105, 0.2, 0.1, 0.1 );
var_0 connectpaths();
var_1 rotateyaw( 105, 0.2, 0.1, 0.1 );
var_1 connectpaths();
wait 1;
level.allies[1] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_kgn_incomingbackdown" );
}
watch_for_end_of_sniping()
{
level waittill( "hot_butchdance_action" );
common_scripts\utility::flag_set( "butchdance_sniping" );
level.player waittill( "remote_turret_deactivate" );
common_scripts\utility::flag_set( "end_of_sniping" );
thread player_fail_finale();
thread player_fail_finale_instakill();
common_scripts\utility::array_thread( level.allies, maps\_utility::enable_pain );
}
spawn_lockdown_guy()
{
while ( !common_scripts\utility::flag( "finale_sniping" ) )
{
var_0 = maps\_utility::spawn_ai( 1 );
var_0 maps\enemyhq_code::gasmask_on_npc();
if ( isdefined( self.script_aigroup ) && self.script_aigroup == "finale_lmgs" )
var_0 getenemyinfo( level.player );
var_0 thread handle_butchdance_enemies();
if ( isdefined( var_0 ) )
{
var_0 waittill( "death" );
wait 0.5;
continue;
}
return;
}
}
clear_lmgs()
{
wait 0.2;
maps\_utility::waittill_aigroupcleared( "finale_lmgs" );
common_scripts\utility::flag_set( "finale_combat1" );
}
handle_agressive_player()
{
level endon( "death" );
var_0 = common_scripts\utility::getstruct( "killer_org", "targetname" );
common_scripts\utility::flag_wait( "open_finale_doors" );
wait 1;
while ( !common_scripts\utility::flag( "end_of_sniping" ) )
{
common_scripts\utility::flag_wait_any( "finale_kill", "finale_really_kill", "end_of_sniping" );
var_1 = 0.5;
if ( common_scripts\utility::flag( "end_of_sniping" ) )
break;
while ( common_scripts\utility::flag( "finale_kill" ) || common_scripts\utility::flag( "finale_really_kill" ) )
{
magicbullet( "m27", var_0.origin, level.player.origin + ( 0, 0, 32 ) );
if ( common_scripts\utility::flag( "finale_really_kill" ) )
level.player kill();
wait( var_1 );
if ( !common_scripts\utility::flag( "finale_kill" ) )
{
var_1 = 0.5;
continue;
}
var_1 = var_1 - 0.1;
if ( var_1 < 0.1 )
var_1 = 0.1;
}
}
}
butchdance_combat()
{
var_0 = getentarray( "exfil_guys1", "targetname" );
foreach ( var_2 in var_0 )
var_2 thread spawn_lockdown_guy();
thread maps\enemyhq_code::toggle_ally_outlines( 0 );
level.player waittill( "player_switching_to_tablet" );
thread maps\enemyhq_audio::aud_start_sniper( "enhq_stadium_large_room" );
common_scripts\utility::flag_set( "finale_sniping" );
var_4 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "exfil_guys1b", 1 );
common_scripts\utility::array_thread( var_4, ::handle_butchdance_enemies );
var_4 = getaiarray( "axis" );
thread maps\enemyhq_code::ai_array_killcount_flag_set( var_4, 2, "finale_combat1" );
thread clear_lmgs();
common_scripts\utility::flag_wait( "finale_combat1" );
var_4 = getaiarray( "axis" );
var_4 common_scripts\utility::array_thread( var_4, maps\_utility::set_force_color, "y" );
var_4 common_scripts\utility::array_thread( var_4, maps\_utility::enable_ai_color );
common_scripts\utility::array_thread( level.allies, maps\_utility::set_ignoresuppression, 1 );
var_5 = common_scripts\utility::array_add( level.allies, level.dog );
common_scripts\utility::array_thread( var_5, ::super_guy, 0 );
wait 0.5;
var_6 = maps\_utility::obj( "defendsnipe" );
objective_onentity( var_6, level.allies[0], ( 0, 0, 0 ) );
objective_add( var_6, "current", &"ENEMY_HQ_PROTECT_MERRICK_AND_KEEGAN" );
objective_setpointertextoverride( var_6, &"ENEMY_HQ_PROTECT" );
maps\enemyhq_code::safe_activate_trigger_with_targetname( "butchdance1" );
var_4 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "ghost_exfil_wave1", 1 );
thread maps\enemyhq_code::ai_array_killcount_flag_set( var_4, var_4.size - 1, "ghosts_exfil2" );
foreach ( var_8 in var_4 )
var_8 thread maps\enemyhq_audio::aud_handle_remote_sniper_ai( level.aud_finale_sniper );
common_scripts\utility::flag_wait( "ghost_timer_start" );
level.player thread maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_giveussomecovering" );
common_scripts\utility::flag_wait_or_timeout( "ghosts_exfil2", 10 );
if ( !common_scripts\utility::flag( "ghosts_exfil2" ) )
level.player thread maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_weretakingfire" );
common_scripts\utility::flag_wait_or_timeout( "ghosts_exfil2", 10 );
if ( !common_scripts\utility::flag( "ghosts_exfil2" ) )
{
var_10 = common_scripts\utility::getstruct( "ghost_kill", "targetname" );
level.allies[0] maps\_utility::stop_magic_bullet_shield();
level.allies[1] maps\_utility::stop_magic_bullet_shield();
magicbullet( "m27", var_10.origin, level.allies[0].origin );
magicbullet( "m27", var_10.origin, level.allies[1].origin );
wait 0.5;
setdvar( "ui_deadquote", &"ENEMY_HQ_MERRICK_AND_KEEGAN_WERE" );
maps\_utility::missionfailedwrapper();
return;
}
else
var_4 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "ghost_exfil_wave2", 1 );
var_11 = getnode( "merrick_node", "targetname" );
var_12 = getnode( "keegan_node", "targetname" );
level.allies[0] maps\_utility::disable_ai_color();
level.allies[1] maps\_utility::disable_ai_color();
level.allies[0] maps\_utility::set_goalradius( 20 );
level.allies[1] maps\_utility::set_goalradius( 20 );
level.allies[0] maps\_utility::set_goal_node( var_11 );
level.allies[1] maps\_utility::set_goal_node( var_12 );
level.allies[0] maps\_utility::set_ignoresuppression( 1 );
level.allies[0] clearenemy();
level.allies[1] maps\_utility::set_ignoresuppression( 1 );
level.allies[1] clearenemy();
level.allies[0].ignoreall = 1;
level.allies[1].ignoreall = 1;
level.allies[1].ignoreme = 1;
wait 1;
thread waitfor_merrick();
level.allies[1] waittill( "goal" );
objective_position( var_6, ( 0, 0, 0 ) );
common_scripts\utility::flag_wait( "merrick_exfil" );
level.player thread maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_wemadeitthanks" );
level.allies[0].vehicle_position = 1;
level.allies[0].script_startingposition = 1;
level.ghost_chopper thread maps\_vehicle::vehicle_load_ai( [ level.allies[0] ] );
level.bishop notify( "stop_anim" );
level.allies[1] notify( "stop_anim" );
level.allies[1] hide();
level.bishop hide();
level.allies[1] maps\enemyhq_code::die_quietly();
level.bishop maps\enemyhq_code::die_quietly();
level.allies = maps\_utility::make_array( level.allies[2] );
var_13 = common_scripts\utility::getstruct( "ghost_chopper_path", "targetname" );
level.ghost_chopper.attachedpath = undefined;
level.ghost_chopper notify( "newpath" );
level.ghost_chopper thread maps\_vehicle::vehicle_paths( var_13 );
level.ghost_chopper vehicle_setspeed( 5, 30, 30 );
level.ghost_chopper resumespeed( 5 );
level notify( "ghost_chopper_taking_off" );
wait 2;
level.player thread maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_takinoff" );
wait 4;
level.player thread maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_weregoodnowget" );
wait 2;
maps\_utility::objective_complete( var_6 );
thread handle_ghost_chopper_removal();
common_scripts\utility::flag_set( "done_sniping_early" );
var_4 = getaiarray( "axis" );
var_4 = maps\_utility::array_removedead_or_dying( var_4 );
var_4 = sortbydistance( var_4, level.dog.origin );
if ( var_4.size > 2 )
{
var_4 = common_scripts\utility::array_remove( var_4, var_4[0] );
var_4 = common_scripts\utility::array_remove( var_4, var_4[1] );
}
level.dog.ignoreme = 1;
level.dog thread maps\enemyhq_code::dog_attack_targets_by_priority( var_4, "finale_push1" );
thread maps\enemyhq_code::toggle_ally_outlines( 1 );
var_4 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "exfil_guys2", 1 );
var_14 = getaiarray( "axis" );
var_14 = maps\_utility::array_removedead_or_dying( var_14 );
thread maps\enemyhq_code::ai_array_killcount_flag_set( var_14, var_14.size - 1, "finale_push2" );
common_scripts\utility::flag_wait_or_timeout( "start_finale_truck", 4 );
common_scripts\utility::flag_wait( "start_finale_truck" );
maps\_utility::delaythread( 3, maps\enemyhq_code::safe_activate_trigger_with_targetname, "butchdance1a" );
wait 2;
var_4 = getaiarray( "axis" );
thread maps\enemyhq_code::ai_array_killcount_flag_set( var_4, 2, "finale_push1" );
common_scripts\utility::flag_wait_or_timeout( "finale_push1", 5 );
common_scripts\utility::flag_set( "finale_push1" );
thread handle_final_finale_guys();
thread handle_finale_drones();
maps\enemyhq_code::safe_activate_trigger_with_targetname( "butchdance2" );
var_4 = getaiarray( "axis" );
thread maps\enemyhq_code::ai_array_killcount_flag_set( var_4, 2, "finale_push1" );
common_scripts\utility::flag_wait( "chopper_ready" );
thread handle_final_combat();
common_scripts\utility::flag_wait( "get_in_choppa" );
var_15 = getaiarray( "axis" );
var_5 = level.allies;
level.dog.ignoreall = 1;
level.dog.ignoreme = 1;
level.finale_chopper setvehicleteam( "allies" );
level.finale_chopper.script_team = "allies";
thread hesh_ride_chopper();
wait 1;
level.dead_finale_trucks = 0;
var_16 = maps\_vehicle::spawn_vehicles_from_targetname_and_drive( "flyaway_lynx" );
var_17 = get_vehicle_turret_ai( var_16 );
foreach ( var_8 in var_17 )
var_8 getenemyinfo( level.allies[0] );
common_scripts\utility::array_thread( var_16, ::flyaway_lynx_death_watcher );
common_scripts\utility::array_thread( var_16, ::handle_truck_shooting );
thread maps\enemyhq_code::ai_array_killcount_flag_set( var_17, var_17.size - 1, "killed_trucks" );
common_scripts\utility::flag_wait( "flyaway_baddies" );
wait 2;
maps\_utility::delaythread( 2, ::finale_explosions );
var_20 = maps\_utility::obj( "finale_defend" );
objective_add( var_20, "current", &"ENEMY_HQ_DESTROY_VEHICLE_MOUNTED" );
objective_onentity( var_20, level.finale_chopper, ( 0, 0, 0 ) );
objective_setpointertextoverride( var_20, &"ENEMY_HQ_PROTECT" );
if ( 1 )
{
common_scripts\utility::flag_set( "stop_drones" );
maps\_utility::array_delete( level.drones["axis"].array );
var_15 = maps\_utility::array_removedead_or_dying( var_15 );
var_4 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "dan_guys", 1 );
wait 0.1;
common_scripts\utility::array_thread( var_15, maps\enemyhq_code::die_quietly );
level.allies[0].ignoreme = 0;
common_scripts\utility::array_thread( var_4, ::fire_at_chopper, level.allies[0], 3, 5 );
}
else
{
var_21 = getaiarray( "axis" );
if ( var_21.size < 7 )
{
var_4 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "exfil_guys4", 1 );
common_scripts\utility::array_thread( var_4, ::fire_at_chopper, level.finale_chopper, 3, 5 );
}
}
thread maps\enemyhq_audio::aud_lynx_turrets( var_16 );
common_scripts\utility::array_thread( var_16, ::handle_end_lynxes );
while ( level.dead_finale_trucks < 2 )
wait 0.1;
common_scripts\utility::flag_set( "killed_trucks" );
common_scripts\utility::flag_wait( "finale_done" );
common_scripts\utility::flag_set( "obj_escape_complete" );
maps\_utility::objective_complete( var_20 );
}
handle_final_combat()
{
common_scripts\utility::flag_wait_or_timeout( "finale_push2", 9 );
common_scripts\utility::flag_set( "finale_push2" );
level.allies[0].ignoreall = 1;
level.allies[0] maps\_utility::set_ignoresuppression( 1 );
level.allies[0] clearenemy();
maps\enemyhq_code::safe_activate_trigger_with_targetname( "butchdance3" );
level.allies[0] maps\_utility::delaythread( 2, maps\_utility::set_ignoreall, 0 );
}
handle_truck_shooting()
{
var_0 = self.mgturret[0];
var_0 settoparc( 90 );
var_0 setsuppressiontime( 10 );
var_0 setaispread( 10 );
level.allies[0].ignoreme = 0;
var_0 setmode( "manual_ai" );
var_0 settargetentity( level.finale_chopper );
foreach ( var_2 in self.riders )
{
var_2.favoriteenemy = level.player;
var_2.maxsightdistsqrd = 400000000;
}
self waittill( "reached_dynamic_path_end" );
self setturrettargetent( level.finale_chopper );
}
flyaway_lynx_death_watcher()
{
self waittill( "death" );
playfx( level._effect["vfx_ehq_lynxexplode"], self.origin );
playfx( level._effect["vfx_lynx_fire_exfil"], self.origin );
level.player thread maps\_utility::play_sound_on_entity( "car_explode_2" );
}
handle_ghost_chopper_removal()
{
level.ghost_chopper waittill( "reached_dynamic_path_end" );
foreach ( var_1 in level.ghost_chopper.riders )
var_1 maps\enemyhq_code::die_quietly();
level.ghost_chopper delete();
}
get_vehicle_turret_ai( var_0 )
{
var_1 = [];
foreach ( var_3 in var_0 )
{
foreach ( var_5 in var_3.riders )
{
if ( var_5.vehicle_position == 3 )
var_1[var_1.size] = var_5;
}
}
return var_1;
}
handle_flyaway_fail()
{
wait 17;
if ( !common_scripts\utility::flag( "killed_trucks" ) )
{
level.finale_chopper notify( "going_down" );
playfxontag( level._effect["vfx_heli_fire"], level.finale_chopper, "tag_engine_right" );
var_0 = common_scripts\utility::getstruct( "finale_crash_path", "targetname" );
level.finale_chopper thread maps\_vehicle_code::helicopter_crash_rotate();
thread truck_turret_fail();
level.finale_chopper maps\_vehicle_code::helicopter_crash_path( var_0 );
playfxontag( level._effect["vfx_heli_crash"], level.finale_chopper, "tag_deathfx" );
}
}
truck_turret_fail()
{
wait 4;
setdvar( "ui_deadquote", &"ENEMY_HQ_YOU_WERE_SHOT_DOWN_BY" );
maps\_utility::missionfailedwrapper();
}
waitfor_merrick()
{
level.allies[0] waittill( "goal" );
common_scripts\utility::flag_set( "merrick_exfil" );
}
handle_end_lynxes()
{
thread handle_dead_truck();
var_0 = self.riders;
}
handle_dead_truck()
{
self waittill( "death" );
level.dead_finale_trucks++;
}
fire_at_chopper( var_0, var_1, var_2 )
{
var_0.ignoreme = 0;
self.ignoreall = 0;
self getenemyinfo( var_0 );
}
handle_butchdance_enemies( var_0 )
{
self endon( "death" );
level waittill( "hot_butchdance_action" );
self.ignoreme = 0;
wait( randomfloatrange( 1.5, 2.5 ) );
self.accuracy = 0.1;
self.ignoreall = 0;
}
handle_finale_drones()
{
level endon( "death" );
var_0 = getentarray( "finale_drone", "targetname" );
var_0 = common_scripts\utility::array_randomize( var_0 );
foreach ( var_2 in var_0 )
{
var_3 = maps\_utility::dronespawn( var_2 );
var_3.spawner = var_2;
var_3 thread handle_drone();
wait( randomfloatrange( 0.2, 0.75 ) );
}
}
handle_drone()
{
self endon( "death" );
self waittill( "goal" );
if ( !common_scripts\utility::flag( "finale_done" ) && !common_scripts\utility::flag( "stop_drones" ) )
{
var_0 = maps\_utility::dronespawn( self.spawner );
var_0.spawner = self.spawner;
var_0 thread handle_drone();
}
self delete();
}
handle_final_finale_guys()
{
level endon( "death" );
while ( !common_scripts\utility::flag( "finale_done" ) )
{
var_0 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "exfil_guys3", 1 );
if ( common_scripts\utility::flag( "get_in_choppa" ) )
common_scripts\utility::array_thread( var_0, ::fire_at_chopper, level.allies[0], 3, 5 );
var_0 = getaiarray( "axis" );
maps\enemyhq_code::ai_array_killcount_flag_set( var_0, int( var_0.size / 2 ), "more_finale_guys" );
common_scripts\utility::flag_wait( "more_finale_guys" );
common_scripts\utility::flag_clear( "more_finale_guys" );
}
}
finale_explosions()
{
var_0 = common_scripts\utility::getstructarray( "finale_explosion", "targetname" );
foreach ( var_2 in var_0 )
{
playfx( level._effect["finale_explosion"], var_2.origin );
wait( randomfloatrange( 0.5, 1 ) );
}
}
finale_sniping()
{
level.player thread maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_coveruswiththe" );
wait 1.5;
common_scripts\utility::flag_set( "start_exfil_sniper" );
wait 0.2;
level.player notify( "scripted_sniper_dpad" );
thread handle_flyaway_fail();
common_scripts\utility::flag_set( "flyaway_baddies" );
wait 7;
maps\enemyhq_code::safe_activate_trigger_with_targetname( "butchdance4" );
}
spawn_player_dummy()
{
wait 1;
var_0 = getent( "player_dummy", "targetname" );
var_1 = var_0 maps\_utility::spawn_ai();
var_1 maps\_utility::magic_bullet_shield();
var_1.animname = "generic";
var_1 linkto( level.finale_chopper, "tag_guy4", ( 0, 0, 0 ), ( 0, 0, 0 ) );
}
finale_vo()
{
common_scripts\utility::flag_wait( "pre_exit_scene" );
var_0 = level.allies[2];
level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_youboysdidok" );
thread watch_for_end_of_sniping();
common_scripts\utility::flag_wait( "open_finale_doors" );
wait 3;
thread maps\enemyhq_code::nag_player_until_flag( level.allies[0], "start_butchdance", "enemyhq_mrk_adamthinemout", "enemyhq_mrk_usetheremotesniper_2", "enemyhq_mrk_adamgetonthe" );
common_scripts\utility::flag_set( "enable_butchdance" );
maps\_utility::delaythread( 1, maps\enemyhq_code::sniper_hint, "start_butchdance", 4 );
level.player waittill( "player_switching_to_tablet" );
common_scripts\utility::flag_set( "start_butchdance" );
wait 3;
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_thosechoppersareour" );
level.player thread maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_welltaketheone" );
wait 1;
thread maps\enemyhq_code::nag_player_until_flag( level.player, "butchdance_sniping", "enemyhq_mrk_takeoutthoselmgs", "enemyhq_mrk_wheneveryoureready", "enemyhq_mrk_takeashot_2" );
common_scripts\utility::flag_wait( "butchdance_sniping" );
thread hurry_lines();
common_scripts\utility::flag_wait( "finale_combat1" );
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_itsclear" );
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_gogogo_2" );
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_mrk_coverus" );
common_scripts\utility::flag_wait( "end_of_sniping" );
wait 0.25;
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_ourrideisleaving" );
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_riley" );
wait 3;
common_scripts\utility::flag_wait( "chopper_ready" );
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_clearapathto" );
common_scripts\utility::flag_wait( "finale_push2" );
thread maps\enemyhq_code::nag_player_until_flag( var_0, "get_in_choppa", "enemyhq_hsh_gettothechopper", "enemyhq_hsh_adamthechopper", "enemyhq_hsh_adamgetoverhere", "enemyhq_hsh_weveleaving" );
common_scripts\utility::flag_wait( "get_in_choppa" );
wait 8;
level.player thread maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_takeouttheturrets" );
wait 5;
if ( !common_scripts\utility::flag( "killed_trucks" ) )
{
level.player thread maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_shootthetrucks" );
wait 5;
if ( !common_scripts\utility::flag( "killed_trucks" ) )
level.player thread maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_yougottahitthose" );
}
common_scripts\utility::flag_wait( "killed_trucks" );
wait 3;
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_commandthisisviking" );
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_els_heshlogancanyou" );
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_dad" );
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_els_wevegotafull" );
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_daddad" );
}
hurry_lines()
{
level waittill( "hot_butchdance_action" );
wait 6;
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_chopperswindingup" );
wait 1;
if ( !common_scripts\utility::flag( "end_of_sniping" ) )
level.player maps\enemyhq_code::radio_dialog_add_and_go( "enemyhq_hsh_loganhurry" );
}
enable_finale_and_ghost_chopper_clips()
{
var_0 = getent( "new_finale_chopper_ai_clip", "targetname" );
var_1 = getent( "ghost_chopper_ai_clip", "targetname" );
level waittill( "ghost_chopper_taking_off" );
var_1 notsolid();
var_1 connectpaths();
level waittill( "finale_chopper_taking_off" );
var_0 notsolid();
var_0 connectpaths();
}
player_fail_finale()
{
level.player endon( "death" );
var_0 = [];
var_0[0] = "enemyhq_hsh_whereareyougoing";
var_0[1] = "enemyhq_hsh_logangetoverhere";
for (;;)
{
common_scripts\utility::flag_wait( "player_left_finale_area" );
var_1 = 0;
while ( common_scripts\utility::flag( "player_left_finale_area" ) )
{
if ( var_1 > var_0.size - 1 )
{
setdvar( "ui_deadquote", &"ENEMY_HQ_YOU_LEFT_YOUR_TEAM_BEHIND" );
maps\_utility::missionfailedwrapper();
break;
}
level.player maps\enemyhq_code::radio_dialog_add_and_go( var_0[var_1] );
var_1++;
wait( randomfloatrange( 2, 4 ) );
}
}
}
player_fail_finale_instakill()
{
level.player endon( "death" );
common_scripts\utility::flag_wait( "player_left_finale_area_instakill" );
setdvar( "ui_deadquote", &"ENEMY_HQ_YOU_LEFT_YOUR_TEAM_BEHIND" );
maps\_utility::missionfailedwrapper();
}