#include maps\_utility; #include common_scripts\utility; #include maps\_riotshield; #include maps\_anim; #include maps\_vehicle; #include maps\_hud_util; #include maps\airport_code; CONST_SPEEDELEVATOR = 20;// 19 CONST_SPEEDLOBBY0 = 26;// 25 CONST_SPEEDLOBBY = 26;// 45 CONST_SPEEDLOBBY2 = 25;// 30 CONST_SPEEDSTAIRS = 42; CONST_SPEEDUPPER = 35;// 42 CONST_SPEEDSECURITY = 33;// 55 CONST_TARMAC = 27;// 60 CONST_TARMACSTAIRS = 38; CONST_SPEEDBASEMENT = 42; CONST_SPEEDTARMAC2 = 68; CONST_SPEEDTARMAC3 = 80; CONST_SPEEDCATCHUP = 80; main() { flags(); channels = maps\_equalizer::get_all_channels(); foreach ( channel, _ in channels ) { SoundSetTimeScaleFactor( channel, 0 ); } level.ambience_timescale = 0; //STARTS default_start( ::start_intro ); // set_default_start( "intro" ); add_start( "intro", ::start_intro, "[intro] -> assault the security checkpoint", ::intro_main ); add_start( "stairs", ::start_stairs, "[stairs] -> proceed up the escalaters", ::stairs_main ); add_start( "massacre", ::start_massacre, "[massacre] -> massacre the remaing civilians", ::massacre_main ); add_start( "gate", ::start_gate, "[gate] -> walk through the sea of dead bodies", ::gate_main ); add_start( "basement", ::start_basement, "[basement] -> move through the basement", ::basement_main ); add_start( "tarmac", ::start_tarmac, "[tarmac] -> assault the tarmac", ::tarmac_main ); add_start( "escape", ::start_escape, "[escape] -> escape from the airport", ::escape_main ); //test starts add_start( "grigs", ::start_grigs, "[grigsby test]" ); //MUST COME BEFORE LOAD maps\airport_challenge::ap_ch_main(); global_inits(); maps\_compass::setupMiniMap( "compass_map_airport" ); } flags() { flag_init( "do_not_save" ); flag_init( "friendly_fire_good_kill_line" ); flag_init( "friendly_fire_good_kill_line2" ); flag_init( "friendly_fire_no_kill_line" ); flag_init( "friendly_fire_checkfire_line" ); flag_init( "friendly_fire_dist_check" ); flag_init( "friendly_fire_kill_check" ); flag_init( "friendly_fire_pause_flash" ); flag_init( "friendly_fire_pause_fire" ); flag_init( "player_dynamic_move_speed" ); flag_init( "player_DMS_allow_sprint" ); flag_init( "team_initialized" ); flag_init( "elevator_up_done" ); flag_init( "lobby_scene_animate" ); flag_init( "lobby_scene_pre_animate" ); flag_init( "intro_slowmo_start" ); flag_init( "lobby_open_fire" ); flag_init( "lobby_to_stairs_go" ); flag_init( "stairs_go_up" ); flag_init( "lobby_cleanup_spray" ); flag_init( "lobby_cleanup" ); flag_init( "lobby_to_stairs_flow" ); flag_init( "lobby_ai_peeps_dead" ); //flag_init( "stairs_top_open_fire" ); flag_init( "stairs_upperdeck_civs_dead" ); flag_init( "upperdeck_flow1" ); flag_init( "upperdeck_flow1b" ); flag_init( "upperdeck_flow1c" ); flag_init( "upperdeck_flow3" ); flag_init( "upperdeck_flow4" ); flag_init( "massacre_play_sounds" ); flag_init( "massacre_rentacop_stop" ); flag_init( "massacre_rentacop_stop_dead" ); flag_init( "massacre_rentacop_rush" ); flag_init( "massacre_kill_rush" ); flag_init( "massacre_rentacop_runaway_go" ); // flag_init( "massacre_rentacop_runaway_dead" ); flag_init( "massacre_rentacop_row1_fighter_go" ); // flag_init( "massacre_rentacop_row1_fighter_dead" ); flag_init( "massacre_rentacop_row1_runner_go" ); // flag_init( "massacre_rentacop_row1_runner_dead" ); flag_init( "massacre_rentacop_rambo" ); flag_init( "massacre_rentacop_rambo_dead" ); flag_init( "massacre_runners1_dead" ); flag_init( "massacre_runners2_dead" ); flag_init( "massacre_runners3_dead" ); flag_init( "massacre_rentacops_rear_dead" ); //flag_init( "massacre_rentacops_stairs_dead" ); flag_init( "massacre_nadethrow" ); flag_init( "massacre_decided_nader" ); flag_init( "massacre_makarov_point_at_rambo" ); flag_init( "massacre_elevator_start" ); flag_init( "massacre_elevator_down" ); flag_init( "massacre_elevator_up" ); flag_init( "massacre_eleveator_should_come_up" ); flag_init( "massacre_elevator_prepare_nade" ); flag_init( "massacre_elevator_at_top" ); flag_init( "massacre_elevator_guys_ready" ); flag_init( "massacre_elevator_grenade_ready" ); flag_init( "massacre_elevator_grenade_throw" ); flag_init( "massacre_elevator_grenade_exp" ); flag_init( "massacre_line_of_fire_done" ); flag_init( "gate_main" ); flag_init( "gate_canned_deaths" ); flag_init( "gate_heli_moveon" ); //flag_init( "basement_moveout" ); flag_init( "basement_mak_speach" ); flag_init( "basement_moveout2" ); flag_init( "basement_mak_saw_riot" ); flag_init( "basement_near_entrance" ); //flag_init( "tarmac_moveout" ); flag_init( "tarmac_pre_heat_fight" ); flag_init( "tarmac_too_far" ); flag_init( "tarmac_killed_security" ); flag_init( "tarmac_open_fire" ); flag_init( "tarmac_retreat1" ); flag_init( "tarmac_retreat2" ); flag_init( "tarmac_retreat3" ); flag_init( "tarmac_advance4" ); flag_init( "tarmac_retreat4" ); flag_init( "tarmac_advance6" ); flag_init( "tarmac_retreat5" ); flag_init( "tarmac_retreat6" ); flag_init( "tarmac_advance8" ); flag_init( "tarmac_bcs" ); flag_init( "tarmac_kill_friendly_bsc" ); flag_init( "tarmac_2ndfloor_move_back" ); //tarmac_enemies_wave1_dead //tarmac_enemies_wave2_dead //tarmac_enemies_2ndfloor_dead //tarmac_van_guys_dead //tarmac_van_guys2_dead flag_init( "tarmac_van_guys_far_enough" ); flag_init( "tarmac_van_guys_spawn" ); flag_init( "tarmac_van_guys2_spawn" ); flag_init( "tarmac_van_mid_path" ); flag_init( "tarmac_van_almost_end_path" ); flag_init( "tarmac_van_end_path" ); flag_init( "tarmac_clear_out_2nd_floor" ); flag_init( "tarmac_enemies_2ndfloor" ); flag_init( "escape_van_ready" ); flag_init( "escape_doorkick" ); flag_init( "escape_sequence_reach" ); flag_init( "escape_hold_your_fire" ); flag_init( "escape_main" ); flag_init( "escape_sequence_go" ); flag_init( "escape_player_get_in" ); flag_init( "escape_player_is_in" ); flag_init( "escape_sequence_over" ); flag_init( "escape_player_shot" ); flag_init( "escape_player_realdeath" ); flag_init( "end_player_ready" ); flag_init( "end_makarov_in_place" ); flag_init( "player_ready_for_proper_ending" ); } global_inits() { level.CONST_WAIT_TARMAC_BSC = 1.5; SetDvar( "scr_elevator_speed", "64" ); SetSavedDvar( "ai_friendlyFireBlockDuration", 0 ); maps\createart\airport_art::main(); maps\createfx\airport_audio::main(); maps\createfx\airport_fx::main(); maps\airport_precache::main(); maps\airport_fx::main(); maps\_load::main(); maps\_dynamic_run_speed::main(); maps\airport_anim::main(); maps\_drone_civilian::init(); maps\_drone_ai::init(); level.drone_lookAhead_value = 60; level.nadethrow_mak_time = 2.75; maps\airport_amb::main(); thread airport_music(); thread glass_elevator_setup(); array_thread( GetEntArray( "glass_delete", "targetname" ), ::delete_glass ); PreCacheModel( "projectile_us_smoke_grenade" ); PreCacheModel( "com_cellphone_on" ); PreCacheModel( "com_metal_briefcase" ); PreCacheModel( "electronics_pda" ); PreCacheModel( "tag_origin" ); PreCacheItem( "usp_airport" ); PreCacheItem( "m4_grunt_airport" ); PreCacheItem( "saw_airport" ); PreCacheItem( "rpg_straight" ); PreCacheRumble( "tank_rumble" ); PreCacheRumble( "damage_heavy" ); PreCacheShader( "hint_mantle" ); PreCacheShader( "overlay_airport_death" ); PreCacheShader( "white" ); PreCacheShellShock( "airport" ); // The police barricade has too much fire power to confront. PreCacheString( &"AIRPORT_FAIL_POLICE_BARRICADE" ); PreCacheMenu( "offensive_skip" ); thread jet_engine_death_print(); array_thread( GetEntArray( "jet_engine", "targetname" ), ::jet_engine ); level.default_goalheight = 128; // Press^3 [{+actionslot 3}] ^7to use\nthe M203 Grenade Launcher. add_hint_string( "grenade_launcher", &"SCRIPT_LEARN_GRENADE_LAUNCHER", ::should_break_m203_hint ); } /************************************************************************************************************/ /* INTRO */ /************************************************************************************************************/ intro_main() { flag_waitopen( "friendly_fire_warning" ); level endon( "friendly_fire_warning" ); array_thread( GetEntArray( "intro_security_run_die", "targetname" ), ::add_spawn_function, ::intro_security_run_die ); array_thread( GetEntArray( "lobby_to_stairs_flow", "targetname" ), ::add_spawn_function, ::lobby_to_stairs_flow ); array_thread( GetEntArray( "lobby_to_stairs_flow", "targetname" ), ::lobby_to_stairs_flow_spawner ); array_thread( GetEntArray( "intro_security_lobby", "targetname" ), ::add_spawn_function, ::lobby_security_intro ); activate_trigger( "intro_security_lobby", "target" ); thread flag_clear_delayed( "_escalator_on", 1 ); thread airport_vision_elevator(); thread airport_vision_intro(); thread intro_dead_bodies(); thread intro_stairs_handle_player_speed(); //handle civilians in lobby thread intro_civilians(); thread stair_top_terror(); thread lobby_to_stairs_flow_snd_scape( "scn_airport_running_screams2" ); skip_airport_popup(); add_wait( ::flag_wait, "lobby_to_stairs_flow" ); add_func( ::delaythread, 2, ::lobby_to_stairs_flow_snd_scape, "scn_airport_running_screams1" ); thread do_wait(); flag_wait( "team_initialized" ); thread elevator_scene(); flag_wait( "elevator_up_done" ); lobby_scene(); flag_wait( "lobby_to_stairs_go" ); activate_trigger( "lobby_to_stairs_flow", "target" ); level notify( "stop_explode_targets" ); if ( !flag( "do_not_save" ) ) thread autosave_by_name( "lobby_to_stairs" ); nodes = GetNodeArray( "lobby_moveup_nodes", "targetname" ); foreach ( node in nodes ) level.team[ node.script_noteworthy ] thread lobby_moveout_to_stairs( node ); nodes = GetNodeArray( "prestairs_nodes", "targetname" ); foreach ( node in nodes ) level.team[ node.script_noteworthy ] thread lobby_prestairs_nodes_behavior( node ); } skip_airport_popup() { thread skip_airport_listener(); // ui_offensive_skip is temp until code provides us with profile variable if ( level.player GetLocalPlayerProfileData( "canSkipOffensiveMissions" ) != 1 ) return; level.player openpopupMenu( "offensive_skip" ); // this menu pauses the script } skip_airport_listener() { setdvar( "ui_skip_airport", "" ); while ( true ) { wait 1; if ( getdvar( "ui_skip_airport" ) == "1" ) { nextmission(); return; } } } intro_stairs_handle_player_speed() { flag_wait( "elevator_up_done" ); delayThread( 1, ::blend_movespeedscale_custom, CONST_SPEEDELEVATOR, .25 ); flag_wait( "lobby_open_fire" ); blend_movespeedscale_custom( CONST_SPEEDLOBBY0, .5 ); flag_wait( "lobby_to_stairs_go" ); delayThread( 1.5, ::blend_movespeedscale_custom, CONST_SPEEDLOBBY, 2 ); flag_wait( "player_set_speed_lobby" ); blend_movespeedscale_custom( CONST_SPEEDLOBBY2, 1.5 ); flag_wait( "player_set_speed_stairs" ); blend_movespeedscale_custom( CONST_SPEEDSTAIRS, .25 ); flag_wait( "player_set_speed_upperstairs" ); blend_movespeedscale_custom( CONST_SPEEDUPPER, 1 ); } intro_dead_bodies() { array = intro_setup_dead_bodies(); foreach ( model in array ) model Hide(); flag_wait( "lobby_open_fire" ); wait 7; array[ "stairs_dead_body3" ] Show(); wait 1; array[ "stairs_dead_body2" ] Show(); wait 1; array[ "stairs_dead_body" ] Show(); flag_wait( "player_set_speed_stairs" ); foreach ( model in array ) model Show(); } #using_animtree( "generic_human" ); intro_setup_dead_bodies() { models = GetEntArray( "upperdeck_dead_body", "targetname" ); array = []; foreach ( key, model in models ) array[ "upperdeck_dead_body" + key ] = model; array[ "stairs_dead_body" ] = GetEnt( "stairs_dead_body", "targetname" ); array[ "stairs_dead_body2" ] = GetEnt( "stairs_dead_body2", "targetname" ); array[ "stairs_dead_body3" ] = GetEnt( "stairs_dead_body3", "targetname" ); foreach ( model in array ) { model UseAnimTree( #animtree ); model thread anim_generic( model, model.script_animation ); model SetAnimTime( getanim_generic( model.script_animation ), 1 ); } return array; } intro_civilians() { wait 21.5 + 2; data = maps\airport_anim::lobby_people_data(); blood = GetEnt( "lobby_blood", "targetname" ); rope = GetEnt( "intro_rope", "targetname" ); rope Delete(); blood Hide(); for ( i = 1; i <= 14; i++ ) { node = getstruct( "intro_lobby_anim_group_" + i, "targetname" ); if( isdefined( node ) ) node thread lobby_people_create( data ); } drones = GetEntArray( "intro_lobby_crowd_2", "targetname" ); foreach ( drone in drones ) delayThread( 1, ::dronespawn, drone ); array_thread( GetEntArray( "lobby_people", "targetname" ), ::add_spawn_function, ::lobby_ai_logic ); array_thread( GetEntArray( "intro_lobby_crowd_2", "targetname" ), ::add_spawn_function, ::lobby_drone_logic ); delayThread( 1, ::activate_trigger, "lobby_people_spawner", "targetname" ); wait 3; wait 5.5; flag_set( "lobby_scene_pre_animate" ); wait 1.0; flag_set( "lobby_scene_animate" ); delayThread( 7, ::flag_set, "lobby_open_fire" ); wait 3.25; flag_wait( "lobby_open_fire" ); trig = GetEnt( "intro_line_of_fire_trig", "targetname" ); trig thread player_line_of_fire( "lobby_to_stairs_go", level.team ); add_wait( ::trigger_wait_targetname, "intro_line_of_fire_trig_final" ); add_abort( ::flag_wait, "lobby_to_stairs_go" ); level.player add_call( ::Kill ); thread do_wait(); array_thread( GetEntArray( "intro_bank_poll", "targetname" ), ::intro_phys_push ); blood delayCall( 4, ::Show ); wait 1; } elevator_scene() { //do player weapon stuff thread elevator_player(); //do cool stuff with the floor indicator thread elevator_floor_indicator(); //handle team animations in elevator node = getstruct( "intro_elevator_anim_node", "targetname" ); team = []; foreach ( member in level.team ) member thread elevator_scene_guy( node ); origin = GetEnt( "snd_origin_intro_crowd", "targetname" ); origin delayCall( 7.5 + 5 + 5.5, ::playsound, "scn_airport_crowd_opening" ); } elevator_scene_guy( node ) { node thread anim_single_solo( self, "elevator_scene" ); wait 5; wait 5.5; node thread anim_single_solo( self, "elevator_scene" ); } lobby_scene() { flag_waitopen( "friendly_fire_warning" ); level endon( "friendly_fire_warning" ); nodes = GetNodeArray( "intro_initial_firing_positions", "targetname" ); foreach ( node in nodes ) level.team[ node.script_noteworthy ] thread lobby_moveout( node ); flag_wait( "lobby_open_fire" ); foreach ( actor in level.team ) actor.ignoreall = false; origin = GetEnt( "snd_origin_intro_crowd", "targetname" ); origin PlaySound( "scn_airport_crowd_opening_terror" ); node = getstruct( "lobby_scream_track", "targetname" ); thread scream_track( node, "scn_airport_crowd_opening_running", 150 ); delayThread( 5, ::lobby_sign ); wait .5; thread explode_targets( getstructarray( "lobby_dyn_targets", "targetname" ) ); wait 2; thread explode_targets( getstructarray( "lobby_dyn_targets_lights", "targetname" ), 96, 3.5 ); wait 5.35; thread explode_targets( getstructarray( "lobby_dyn_targets_last", "targetname" ) ); } /************************************************************************************************************/ /* UPPERDECK */ /************************************************************************************************************/ stairs_main() { flag_waitopen( "friendly_fire_warning" ); level endon( "friendly_fire_warning" ); // flag_wait( "player_set_speed_lobby" ); //array_thread( GetEntArray( "upperdeck_civ", "script_noteworthy" ), ::add_spawn_function, ::upperdeck_civ ); array_thread( GetEntArray( "upperdeck_crawler", "script_noteworthy" ), ::add_spawn_function, ::upperdeck_crawler ); array_thread( GetEntArray( "upperdeck_crawlers_1", "script_noteworthy" ), ::add_spawn_function, ::upperdeck_crawler ); array_thread( GetEntArray( "upperdeck_crawlers2", "script_noteworthy" ), ::add_spawn_function, ::upperdeck_crawler ); array_thread( GetEntArray( "upperdeck_crawlers_wait", "script_noteworthy" ), ::add_spawn_function, ::upperdeck_crawler ); array_thread( GetEntArray( "upperdeck_initial_runners", "script_noteworthy" ), ::add_spawn_function, ::upperdeck_initial_runners ); array_thread( GetEntArray( "upperdeck_runners4", "script_noteworthy" ), ::add_spawn_function, ::upperdeck_runners_more, "upperdeck_flow4" ); array_thread( GetEntArray( "upperdeck_runners3", "script_noteworthy" ), ::add_spawn_function, ::upperdeck_runners3 ); array_thread( GetEntArray( "upperdeck_runners2", "script_noteworthy" ), ::add_spawn_function, ::upperdeck_runners_more, "upperdeck_flow2" ); array_thread( GetEntArray( "upperdeck_runners1b", "script_noteworthy" ), ::add_spawn_function, ::upperdeck_runners_more, "upperdeck_flow1b" ); array_thread( GetEntArray( "upperdeck_runners1c", "script_noteworthy" ), ::add_spawn_function, ::upperdeck_runners_more, "upperdeck_flow1c" ); array_thread( GetEntArray( "upperdeck_canned_deaths", "targetname" ), ::upperdeck_canned_deaths_setup, "stairs_top_open_fire" ); array_thread( GetEntArray( "upperdeck_fakesound", "targetname" ), ::upperdeck_fakesound ); array_thread( getstructarray( "upperdeck_turn_on_arrival", "script_noteworthy" ), ::upperdeck_turn_on_arrival ); GetEnt( "stairs_cop", "targetname" ) add_spawn_function( ::stairs_cop ); thread massacre_team_dialogue(); thread airport_vision_stairs(); trigL = GetEnt( "stairs_line_of_fire_trig_l", "targetname" ); teamL = []; teamL[ teamL.size ] = level.team[ "makarov" ]; teamL[ teamL.size ] = level.team[ "m4" ]; trigR = GetEnt( "stairs_line_of_fire_trig_r", "targetname" ); teamR = []; teamR[ teamR.size ] = level.team[ "saw" ]; teamR[ teamR.size ] = level.team[ "shotgun" ]; teamL[ 0 ] add_wait( ::ent_flag_wait, "stairs_at_top" ); teamL[ 1 ] add_wait( ::ent_flag_wait, "stairs_at_top" ); trigL add_func( ::player_line_of_fire, "stairs_upperdeck_civs_dead", teamL ); thread do_wait_any(); teamR[ 0 ] add_wait( ::ent_flag_wait, "stairs_at_top" ); teamR[ 1 ] add_wait( ::ent_flag_wait, "stairs_at_top" ); trigR add_func( ::player_line_of_fire, "stairs_upperdeck_civs_dead", teamR ); thread do_wait_any(); node1 = getstruct( "upperdeck_scream_track", "targetname" ); node2 = getstruct( "upperdeck_scream_track2", "targetname" ); node1b = getstruct( "upperdeck_scream_track1b", "targetname" ); node1c = getstruct( "upperdeck_scream_track1c", "targetname" ); add_wait( ::flag_wait, "upperdeck_flow1" ); add_func( ::scream_track, node1, "scn_airport_running_screams1", 150 ); thread do_wait(); add_wait( ::flag_wait, "upperdeck_flow1b" ); add_func( ::scream_track, node1b, "scn_airport_running_screams2", 150 ); thread do_wait(); add_wait( ::flag_wait, "upperdeck_flow1c" ); add_func( ::scream_track, node1c, "scn_airport_running_screams3", 150 ); thread do_wait(); add_wait( ::flag_wait, "upperdeck_flow2" ); add_func( ::scream_track, node2, "scn_airport_running_screams1", 150 ); thread do_wait(); add_wait( ::flag_wait, "upperdeck_flow4" ); add_func( ::scream_track, node2, "scn_airport_running_screams2", 150 ); thread do_wait(); add_wait( ::flag_wait, "stairs_go_up" ); add_func( ::delaythread, .5, ::exploder, "anc_stairs" ); thread do_wait(); thread stairs_saves(); add_wait( ::flag_wait, "stairs_go_up" ); add_abort( ::flag_wait, "player_set_speed_stairs" ); add_func( ::blend_movespeedscale_custom, CONST_SPEEDSTAIRS, .25 ); thread do_wait(); nodes = GetNodeArray( "upperdeck_start_nodes", "targetname" ); foreach ( node in nodes ) level.team[ node.script_noteworthy ] thread stairs_team_at_top( node ); flag_wait( "stairs_upperdeck_civs_dead" ); flag_wait( "player_set_speed_stairs" ); nodes = getstructarray( "upperdeck_team_path", "targetname" ); foreach ( node in nodes ) level.team[ node.script_noteworthy ] thread upperdeck_team_moveup( node ); flag_wait( "upperdeck_save" ); if ( !flag( "do_not_save" ) ) thread autosave_by_name( "upperdeck_flow2" ); } stairs_saves() { flag_wait( "player_set_speed_lobby" ); if ( !flag( "do_not_save" ) ) thread autosave_by_name( "stair_bottom" ); flag_wait( "player_set_speed_upperstairs" ); if ( !flag( "do_not_save" ) ) thread autosave_by_name( "stair_top" ); } /************************************************************************************************************/ /* MASSACRE */ /************************************************************************************************************/ massacre_main() { flag_waitopen( "friendly_fire_warning" ); level endon( "friendly_fire_warning" ); thread massacre_restaurant_destroy(); nodes = getstructarray( "massacre_nodes", "targetname" ); foreach ( node in nodes ) level.team[ node.script_noteworthy ] thread massacre_killers( node ); trigger = GetEnt( "massacre_rentacop_rush_guy", "target" ); trigger.origin += ( 0, 0, -10000 ); array_thread( GetEntArray( "massacre_dummy", "targetname" ), ::massacre_civ_setup ); GetEnt( "massacre_snd", "targetname" ) thread massacre_play_sounds(); array_thread( GetEntArray( "massacre_rentacop_stop", "script_noteworthy" ), ::add_spawn_function, ::massacre_rentacop_stop ); array_thread( GetEntArray( "massacre_rentacop_rush_guy", "targetname" ), ::add_spawn_function, ::massacre_rentacop_rush_guy ); array_thread( GetEntArray( "massacre_rentacop_runaway_guy", "script_noteworthy" ), ::add_spawn_function, ::massacre_rentacop_runaway_guy ); array_thread( GetEntArray( "massacre_rentacop_row1_runner", "script_noteworthy" ), ::add_spawn_function, ::massacre_rentacop_row1_runner ); array_thread( GetEntArray( "massacre_rentacop_row1_fighter", "script_noteworthy" ), ::add_spawn_function, ::massacre_rentacop_row1_fighter ); array_thread( GetEntArray( "massacre_rentacop_row1_defender", "script_noteworthy" ), ::add_spawn_function, ::massacre_rentacop_row1_defender ); array_thread( GetEntArray( "massacre_rentacops_rambo", "script_noteworthy" ), ::add_spawn_function, ::massacre_rentacops_rambo ); array_thread( GetEntArray( "massacre_rentacops_rear", "targetname" ), ::add_spawn_function, ::massacre_rentacops_rear ); array_thread( GetEntArray( "massacre_rentacops_stairs", "targetname" ), ::add_spawn_function, ::massacre_rentacops_stairs ); array_thread( GetEntArray( "massacre_runners1", "script_noteworthy" ), ::add_spawn_function, ::massacre_runners1 ); array_thread( GetEntArray( "massacre_runners2", "script_noteworthy" ), ::add_spawn_function, ::massacre_runners2, "scn_airport_running_screams1" ); array_thread( GetEntArray( "massacre_runners3", "script_noteworthy" ), ::add_spawn_function, ::massacre_runners2, "scn_airport_running_screams2" ); array_thread( GetEntArray( "massacre_crawler", "script_noteworthy" ), ::add_spawn_function, ::massacre_crawler ); //gate stuff array_thread( GetEntArray( "tarmac_littlebird_sniper", "script_noteworthy" ), ::add_spawn_function, ::tarmac_littlebird_sniper ); array_thread( GetEntArray( "tarmac_littlebird_sniper2", "script_noteworthy" ), ::add_spawn_function, ::tarmac_littlebird_sniper ); array_thread( GetEntArray( "tarmac_littlebird_pilot", "script_noteworthy" ), ::add_spawn_function, ::set_ignoreme, true ); array_thread( GetEntArray( "tarmac_littlebird_sniper", "script_noteworthy" ), ::add_spawn_function, ::tarmac_heli_bc_off ); array_thread( GetEntArray( "tarmac_littlebird_sniper2", "script_noteworthy" ), ::add_spawn_function, ::tarmac_heli_bc_off ); array_thread( GetEntArray( "tarmac_littlebird_pilot", "script_noteworthy" ), ::add_spawn_function, ::tarmac_heli_bc_off ); thread massacre_handle_player_speed(); thread massacre_elevator(); thread massacre_rentacop_rush_main(); thread massacre_handle_death_flag( "massacre_runners1", "massacre_runners1_dead" ); thread massacre_handle_death_flag( "massacre_runners2", "massacre_runners2_dead" ); thread massacre_handle_death_flag( "massacre_runners3", "massacre_runners3_dead" ); foreach ( trigger in GetEntArray( "massacre_rentacop_stop_trigs", "targetname" ) ) { trigger add_wait( ::waittill_msg, "trigger" ); add_func( ::trigger_off, "massacre_rentacop_stop_trigs", "targetname" ); thread do_wait(); } foreach ( trigger in GetEntArray( "massacre_rentacops_rambo_trigs", "targetname" ) ) { trigger add_wait( ::waittill_msg, "trigger" ); add_func( ::trigger_off, "massacre_rentacops_rambo_trigs", "targetname" ); thread do_wait(); } spawners = GetEntArray( "massacre_rentacop_extras", "targetname" ); level add_wait( ::flag_wait, "massacre_rentacop_rush" ); add_func( ::array_thread, spawners, ::spawn_ai, true ); thread do_wait(); level.team[ "m4" ] add_wait( ::ent_flag_wait, "massacre_firing_into_crowd" ); add_func( ::flag_set_delayed, "massacre_play_sounds", 1.25 ); thread do_wait_any(); level.team[ "m4" ] add_wait( ::ent_flag_wait, "massacre_firing_into_crowd" ); add_func( ::flag_set_delayed, "massacre_civ_animate", 10 ); thread do_wait_any(); trigger_wait( "massacre_rentacops_rear", "target" ); wait .1; add_wait( ::flag_wait, "massacre_rentacop_stop" ); add_func( ::flag_set, "friendly_fire_pause_flash" ); thread do_wait(); ai = get_living_ai_array( "massacre_rentacops_rear", "script_noteworthy" ); add_wait( ::waittill_dead_or_dying, ai ); add_func( ::flag_set, "massacre_rentacops_rear_dead" ); thread do_wait(); foreach ( actor in ai ) { level add_wait( ::trigger_wait, "massacre_player_too_far", "targetname" ); actor add_func( ::send_notify, "stop_blindfire" ); actor add_func( ::anim_stopanimscripted ); actor add_func( ::set_ignoreall, false ); actor add_func( ::set_favoriteenemy, level.player ); actor add_abort( ::waittill_msg, "death" ); level add_abort( ::flag_wait, "massacre_nadethrow" ); thread do_wait(); } add_wait( ::flag_wait, "massacre_rentacops_stairs_dead" ); add_wait( ::flag_wait, "massacre_rentacops_rear_dead" ); level add_abort( ::flag_wait, "do_not_save" ); add_func( ::autosave_by_name, "massacre" ); thread do_wait(); add_wait( ::flag_wait, "massacre_rentacops_stairs_dead" ); add_wait( ::flag_wait, "massacre_rentacops_rear_dead" ); add_wait( ::flag_wait, "massacre_rentacop_runaway_dead" ); add_wait( ::flag_wait, "massacre_rentacop_row1_fighter_dead" ); add_wait( ::flag_wait, "massacre_rentacop_row1_runner_dead" ); add_wait( ::flag_wait, "massacre_rentacop_rambo_dead" ); add_wait( ::flag_wait, "massacre_runners1_dead" ); add_wait( ::flag_wait, "massacre_runners2_dead" ); add_wait( ::flag_wait, "massacre_runners3_dead" ); add_func( ::flag_set, "gate_main" ); add_func( ::flag_clear, "friendly_fire_pause_flash" ); add_func( ::flag_clear, "friendly_fire_pause_fire" ); thread do_wait(); } massacre_handle_death_flag( name, _flag ) { trigger_wait( name, "target" ); wait .1; ai = get_living_ai_array( name, "script_noteworthy" ); if ( ai.size ) waittill_dead_or_dying( ai ); flag_set( _flag ); } massacre_handle_player_speed() { flag_wait( "massacre_rentacop_stop_dead" ); blend_movespeedscale_custom( CONST_SPEEDSECURITY, 1 ); flag_wait( "massacre_rentacops_rear_dead" ); blend_movespeedscale_custom( CONST_SPEEDUPPER, 1 ); } massacre_play_sounds() { flag_wait( "massacre_play_sounds" ); self PlayLoopSound( "scn_airport_crowd_terminal_loop" ); flag_wait( "massacre_civ_animate" ); self StopLoopSound(); self PlaySound( "scn_airport_crowd_terminal_end" ); } /************************************************************************************************************/ /* GATE */ /************************************************************************************************************/ gate_main() { add_wait( ::flag_wait, "gate_main" ); add_func( ::blend_movespeedscale_custom, CONST_TARMAC, 2 ); thread do_wait(); add_wait( ::flag_wait, "gate_heli_moveon" ); add_func( ::delaythread, 1, ::blend_movespeedscale_custom, CONST_TARMACSTAIRS, 2 ); thread do_wait(); add_wait( ::flag_wait, "gate_player_off_stairs" ); add_func( ::blend_movespeedscale_custom, CONST_TARMAC, .5 ); thread do_wait(); add_wait( ::trigger_wait, "gate_crawler", "target" ); add_func( ::flag_set, "gate_canned_deaths" ); thread do_wait(); nodes = GetNodeArray( "gate_moveup_nodes", "targetname" ); foreach ( node in nodes ) level.team[ node.script_noteworthy ] thread gate_moveout( node ); array_thread( GetEntArray( "gate_canned_deaths", "targetname" ), ::upperdeck_canned_deaths_setup, "gate_canned_deaths" ); array_thread( GetEntArray( "gate_crawler", "targetname" ), ::add_spawn_function, ::gate_crawler ); array_thread( GetEntArray( "gate_runners1", "script_noteworthy" ), ::add_spawn_function, ::gate_runners1 ); array_thread( GetEntArray( "gate_sliders", "script_noteworthy" ), ::add_spawn_function, ::gate_sliders ); //moved from tarmac array_thread( GetEntArray( "tarmac_van_guys", "targetname" ), ::add_spawn_function, ::tarmac_van_guys, "tarmac_van_guys_spawn" ); array_thread( GetEntArray( "tarmac_van_guys2", "targetname" ), ::add_spawn_function, ::tarmac_van_guys, "tarmac_van_guys2_spawn" ); GetEnt( "tarmac_swat_van", "targetname" ) add_spawn_function( ::tarmac_van_logic ); GetEnt( "tarmac_swat_van", "targetname" ) add_spawn_function( ::tarmac_van_stuff, "scn_airport_police_van_arrive1", "tarmac_swat_van" ); GetEnt( "tarmac_swat_van2", "targetname" ) add_spawn_function( ::tarmac_van_stuff, "scn_airport_police_van_arrive2", "tarmac_swat_van2" ); GetEnt( "tarmac_swat_van", "targetname" ) thread tarmac_van_fake( "tarmac_swat_van" ); GetEnt( "tarmac_swat_van2", "targetname" ) thread tarmac_van_fake( "tarmac_swat_van2" ); array_thread( GetEntArray( "gate_convoy_delete", "script_noteworthy" ), ::add_spawn_function, ::gate_convoy_delete ); //klaxon and gate thread gate_events(); thread gate_departures_status(); flag_wait( "massacre_rentacops_stairs_dead" ); level.drs_ahead_test = ::gate_drs_ahead_test; //music_stop( 5 ); level.scr_anim[ "generic" ][ "DRS_run" ] = %casual_killer_jog_A; level.scr_anim[ "generic" ][ "DRS_sprint" ] = %run_lowready_F; level.scr_anim[ "generic" ][ "DRS_combat_jog" ] = %casual_killer_jog_A; } gate_events() { array_thread( GetEntArray( "gate_emerg_lights", "targetname" ), ::gate_klaxon_rotate ); gate_open_gate(); flag_wait( "gate_close_gate" ); activate_trigger( "gate_runners1", "target" ); gate1 = GetEnt( "gate_gate_closing", "targetname" ); gate1 delayCall( 5.75, ::playsound, "scn_airport_sec_gate_buzzer" ); wait 7.75; gate_close_gate(); } /************************************************************************************************************/ /* BASEMENT */ /************************************************************************************************************/ basement_main() { light = GetEnt( "basement_door_light", "targetname" ); lightintensity = light GetLightIntensity(); light SetLightIntensity( 0 ); array_thread( GetEntArray( "gate_drop_chop_guys", "script_noteworthy" ), ::add_spawn_function, ::basement_drop_chop_guys ); array_thread( GetEntArray( "basement_sec_runner", "targetname" ), ::add_spawn_function, ::basement_sec_runner ); array_thread( GetEntArray( "basement_flicker_light", "targetname" ), ::basement_flicker_light ); foreach ( member in level.team ) member thread basement_pre_moveout(); flag_wait( "basement_near_entrance" ); flag_clear( "player_dynamic_move_speed" ); delayThread( 1, ::blend_movespeedscale_custom, CONST_SPEEDBASEMENT, 1.5 ); wait 1; level.player AllowSprint( true ); struct = getstruct( "scn_airport_emergency_arriving", "targetname" ); thread play_sound_in_space( "scn_airport_emergency_arriving", struct.origin ); flag_wait( "basement_moveout" ); level.drs_ahead_test = maps\_utility_code::dynamic_run_ahead_test; level.scr_anim[ "generic" ][ "DRS_run" ] = undefined; //level.makarov thread anim_generic( level.makarov, "CornerStndR_alert_signal_stopstay_down" ); wait .5; level.makarov dialogue_queue( "airport_mkv_ontime" ); thread basement_ammo_stuff(); level.makarov dialogue_queue( "airport_mkv_checkammo" ); wait 1; level.team[ "m4" ] dialogue_queue( "airport_vkt_beenwaiting" ); level.makarov thread dialogue_queue( "airport_mkv_haventweall" ); wait .5; //basement_makarov_speach(); thread player_dynamic_move_speed(); thread blend_movespeedscale_custom( CONST_SPEEDTARMAC2, 1 ); basement_door_kick( light, lightintensity ); flag_set( "basement_moveout2" ); thread airport_vision_basement(); basement_moveup(); } basement_ammo_stuff() { wait .5; level.makarov.bulletsinclip = 0; wait 1; level.team[ "saw" ].bulletsinclip = 0; wait .5; level.team[ "m4" ].bulletsinclip = 0; wait .25; level.team[ "shotgun" ].bulletsinclip = 0; } /************************************************************************************************************/ /* TARMAC */ /************************************************************************************************************/ #using_animtree( "generic_human" ); tarmac_main() { flag_waitopen( "friendly_fire_warning" ); level endon( "friendly_fire_warning" ); add_global_spawn_function( "axis", ::tarmac_difficulty_mod ); //remove_global_spawn_function( "axis", ::disable_blood_pool ); //remove_global_spawn_function( "neutral", ::disable_blood_pool ); array_thread( GetEntArray( "tarmac_enemies_wave1", "targetname" ), ::add_spawn_function, ::tarmac_enemies_wave1 ); array_thread( GetEntArray( "tarmac_enemies_wave2", "targetname" ), ::add_spawn_function, ::enable_teamflashbangImmunity ); array_thread( GetEntArray( "tarmac_enemies_wave2", "script_noteworthy" ), ::add_spawn_function, ::tarmac_enemies_wave2 ); array_thread( GetEntArray( "tarmac_enemies_runners", "targetname" ), ::add_spawn_function, ::tarmac_enemies_runners ); array_thread( GetEntArray( "tarmac_enemies_2ndfloor", "targetname" ), ::add_spawn_function, ::tarmac_enemies_2ndfloor ); array_thread( GetEntArray( "riotshield_group_1", "script_noteworthy" ), ::add_spawn_function, ::tarmac_move_through_smoke ); array_thread( GetEntArray( "riotshield_group_2", "script_noteworthy" ), ::add_spawn_function, ::tarmac_move_through_smoke ); array_thread( GetEntArray( "tarmac_wave1_moveoverride", "script_noteworthy" ), ::add_spawn_function, ::tarmac_move_through_smoke ); array_thread( GetEntArray( "tarmac_security", "targetname" ), ::add_spawn_function, ::tarmac_security ); array_thread( GetEntArray( "tarmac_security_backup", "script_noteworthy" ), ::tarmac_security_backup ); thread tarmac_handle_player_too_far(); thread airport_vision_exterior(); thread tarmac_riotshield_group( "riotshield_group_1" ); thread tarmac_riotshield_group( "riotshield_group_2" ); thread tarmac_riotshield_group_3(); thread tarmac_riotshield_group_van( "tarmac_van_guys_spawn", "tarmac_swat_van", "tarmac_van_riotshield_guys" ); thread tarmac_riotshield_group_van( "tarmac_van_guys2_spawn", "tarmac_swat_van2", "tarmac_van_riotshield_guys2" ); thread tarmac_riotshield_group_van_combine(); thread tarmac_riotshield_group_last_stand(); add_wait( ::trigger_wait_targetname, "tarmac_advance3" ); level.team[ "saw" ] add_func( ::tarmac_kill_friendly ); thread do_wait(); add_wait( ::trigger_wait_targetname, "tarmac_advance4" ); level.team[ "shotgun" ] add_func( ::tarmac_kill_friendly ); thread do_wait(); add_wait( ::trigger_wait_targetname, "tarmac_advance8" ); add_func( ::flag_set, "tarmac_advance8" ); thread do_wait(); add_wait( ::flag_wait, "tarmac_moveout" ); add_func( ::array_thread, getstructarray( "tarmac_smoke_nodes", "targetname" ), ::tarmac_smoke_nodes ); thread do_wait(); add_wait( ::flag_wait, "tarmac_hear_fsb" ); add_func( ::flag_set_delayed, "tarmac_heat_fight", 5 ); thread do_wait(); add_wait( ::flag_wait, "tarmac_open_fire" ); add_func( ::m203_hint ); thread do_wait(); // add_wait( ::trigger_wait_targetname, "tarmac_advance1" ); // add_func( ::music_stop, 15 ); // thread do_wait(); add_wait( ::flag_wait, "tarmac_enemies_2ndfloor" ); add_func( ::tarmac_bsc_2ndfloor ); add_func( ::tarmac_2ndfloor_group_think ); thread do_wait(); flag_wait( "tarmac_moveout" ); if ( !flag( "do_not_save" ) ) thread autosave_by_name( "tarmac_moveout" ); nodes = getstructarray( "tarmac_moveout_nodes", "targetname" ); nodes = array_merge( nodes, GetNodeArray( "tarmac_moveout_nodes", "targetname" ) ); foreach ( node in nodes ) level.team[ node.script_noteworthy ] thread tarmac_moveout( node ); thread tarmac_hide_elevator(); thread handle_threat_bias_stuff(); thread tarmac_team_settings(); thread handle_chatter(); flag_wait( "tarmac_heat_fight" ); array_thread( level.team, ::GrenadeDangerbsc ); array_thread( getentarray( "tarmac_bcs_enemy", "targetname" ), ::tarmac_bcs_enemy ); thread handle_flags_to_advance(); thread handle_kill_advance(); thread handle_advance_retreat(); //thread tarmac_makarov_last_node(); thread tarmac_escape_music(); tarmac_autosaves_wait(); } tarmac_2ndfloor_group_think() { wait .1; ai = get_living_ai_array( "tarmac_enemies_2ndfloor", "script_noteworthy" ); waittill_dead_or_dying( ai, ai.size - 3 ); flag_set( "tarmac_2ndfloor_move_back" ); } handle_flags_to_advance() { for ( i = 1; i <= 10; i++ ) { name = "tarmac_advance" + i + "_flag"; trigger = GetEnt( name, "targetname" ); trigger = GetEnt( trigger.target, "targetname" ); flag_wait( name ); //retreat trigger for other team if ( IsDefined( trigger.target ) ) activate_trigger_with_targetname( trigger.target ); volume = trigger get_color_volume_from_trigger(); volume waittill_volume_dead_or_dying(); trigger activate_trigger(); } } handle_chatter() { flag_waitopen( "friendly_fire_warning" ); level endon( "friendly_fire_warning" ); flag_wait( "tarmac_hear_fsb" ); node = getstruct( "tarmac_riot_node_retreat1_group1", "targetname" ); level thread function_stack( ::play_sound_in_space, "airport_fsb1_moveingo", node.origin ); level thread function_stack( ::play_sound_in_space, "airport_fsbr_servicetunnels", node.origin ); flag_wait( "tarmac_heat_fight" ); //for zakhaev if ( !flag( "tarmac_open_fire" ) ) level.makarov thread dialogue_queue( "airport_mkv_forzakhaev" ); flag_wait_or_timeout( "tarmac_open_fire", 1 ); if ( !flag( "tarmac_open_fire" ) ) tarmac_retreat_dialogue( "airport_fsb2_fsb" ); flag_wait_or_timeout( "tarmac_open_fire", 5.0 ); //F.S.B. - Take 'em out. if ( !flag( "tarmac_open_fire" ) ) level.makarov radio_dialogue( "airport_mkv_fsb" ); flag_wait( "tarmac_open_fire" ); tarmac_retreat_dialogue( "airport_fsb3_openfire" ); //battlechatter_on( "allies" ); battlechatter_on( "axis" ); trigger_wait_targetname( "tarmac_advance1" ); thread tarmac_bsc_move1(); trigger_wait_targetname( "tarmac_advance2" ); thread tarmac_bsc_move2(); trigger_wait_targetname( "tarmac_advance3" ); thread tarmac_bsc_move3(); trigger_wait_targetname( "tarmac_advance4" ); thread tarmac_bsc_move4(); trigger_wait_targetname( "tarmac_advance5" ); thread tarmac_bsc_move5(); trigger_wait_targetname( "tarmac_advance6" ); thread tarmac_bsc_move6(); trigger_wait_targetname( "tarmac_advance7" ); thread tarmac_bsc_move1(); trigger_wait_targetname( "tarmac_advance8" ); thread tarmac_bsc_move2(); trigger_wait_targetname( "tarmac_advance9" ); thread tarmac_bsc_move3b(); trigger_wait_targetname( "tarmac_advance10" ); thread tarmac_bsc_move4(); } tarmac_bsc_2ndfloor() { wait 3; flag_waitopen( "tarmac_bcs" ); makarov = level.makarov; victor = level.team[ "m4" ]; flag_set( "tarmac_bcs" ); makarov dialogue_queue( "contact_2nd_floor" ); victor dialogue_queue( "contact_2nd_floor" ); flag_clear( "tarmac_bcs" ); } tarmac_bcs_van() { flag_waitopen( "tarmac_bcs" ); makarov = level.makarov; flag_set( "tarmac_bcs" ); makarov dialogue_queue( "van_left" ); flag_clear( "tarmac_bcs" ); } tarmac_bsc_move1() { flag_waitopen_or_timeout( "tarmac_bcs", level.CONST_WAIT_TARMAC_BSC ); if( flag( "tarmac_bcs" ) ) return; makarov = level.makarov; victor = level.team[ "m4" ]; flag_set( "tarmac_bcs" ); makarov dialogue_queue( "go1" ); victor dialogue_queue( "moving1" ); flag_clear( "tarmac_bcs" ); } tarmac_bsc_move2() { flag_waitopen_or_timeout( "tarmac_bcs", level.CONST_WAIT_TARMAC_BSC ); if( flag( "tarmac_bcs" ) ) return; makarov = level.makarov; victor = level.team[ "m4" ]; flag_set( "tarmac_bcs" ); makarov dialogue_queue( "ready1" ); victor dialogue_queue( "go2" ); makarov dialogue_queue( "moving3" ); flag_clear( "tarmac_bcs" ); } tarmac_bsc_move3() { flag_waitopen_or_timeout( "tarmac_bcs", level.CONST_WAIT_TARMAC_BSC ); if( flag( "tarmac_bcs" ) ) return; makarov = level.makarov; victor = level.team[ "m4" ]; flag_set( "tarmac_bcs" ); victor dialogue_queue( "ready1" ); makarov dialogue_queue( "go2" ); victor dialogue_queue( "moving2" ); flag_clear( "tarmac_bcs" ); } tarmac_bsc_move3b() { flag_waitopen_or_timeout( "tarmac_bcs", level.CONST_WAIT_TARMAC_BSC ); if( flag( "tarmac_bcs" ) ) return; makarov = level.makarov; victor = level.team[ "m4" ]; flag_set( "tarmac_bcs" ); victor dialogue_queue( "ready1" ); makarov dialogue_queue( "go2" ); victor dialogue_queue( "moving2" ); if( !flag( "tarmac_enemies_2ndfloor_dead" ) && !flag( "tarmac_clear_out_2nd_floor" ) ) makarov dialogue_queue( "airport_mkv_behindus" ); flag_clear( "tarmac_bcs" ); } tarmac_bsc_move4() { flag_waitopen_or_timeout( "tarmac_bcs", level.CONST_WAIT_TARMAC_BSC ); if( flag( "tarmac_bcs" ) ) return; makarov = level.makarov; victor = level.team[ "m4" ]; flag_set( "tarmac_bcs" ); victor dialogue_queue( "go3" ); makarov dialogue_queue( "moving1" ); flag_clear( "tarmac_bcs" ); } tarmac_bsc_move5() { flag_waitopen_or_timeout( "tarmac_bcs", level.CONST_WAIT_TARMAC_BSC ); if( flag( "tarmac_bcs" ) ) return; makarov = level.makarov; victor = level.team[ "m4" ]; flag_set( "tarmac_bcs" ); makarov dialogue_queue( "go3" ); victor dialogue_queue( "moving3" ); flag_clear( "tarmac_bcs" ); level endon( "tarmac_bcs" ); victor waittill( "goal" ); thread tarmac_bsc_move5b(); } tarmac_bsc_move5b() { makarov = level.makarov; victor = level.team[ "m4" ]; flag_set( "tarmac_bcs" ); victor dialogue_queue( "ready2" ); flag_clear( "tarmac_bcs" ); } tarmac_bsc_move6() { flag_waitopen_or_timeout( "tarmac_bcs", level.CONST_WAIT_TARMAC_BSC ); if( flag( "tarmac_bcs" ) ) return; makarov = level.makarov; victor = level.team[ "m4" ]; flag_set( "tarmac_bcs" ); makarov dialogue_queue( "ready2" ); victor dialogue_queue( "go1" ); makarov dialogue_queue( "moving2" ); flag_clear( "tarmac_bcs" ); } handle_kill_advance() { flag_waitopen( "friendly_fire_warning" ); level endon( "friendly_fire_warning" ); flag_init( "tarmac_enemies_wave2" ); trigger = GetEnt( "tarmac_enemies_wave2", "target" ); thread set_flag_on_trigger( trigger, "tarmac_enemies_wave2" ); wait .5; ai = tarmac_get_enemies(); add_wait( ::waittill_dead_or_dying, ai, 4 ); add_wait( ::trigger_wait_targetname, "tarmac_advance1_flag" ); add_wait( ::flag_wait, "tarmac_enemies_wave2" ); do_wait_any(); activate_trigger_with_targetname( "tarmac_advance1_flag" ); ai = tarmac_get_enemies(); add_wait( ::waittill_dead_or_dying, ai, 3 ); add_wait( ::trigger_wait_targetname, "tarmac_advance2_flag" ); add_wait( ::flag_wait, "tarmac_enemies_wave2" ); do_wait_any(); activate_trigger_with_targetname( "tarmac_advance2_flag" ); ai = tarmac_get_enemies(); add_wait( ::waittill_dead_or_dying, ai, 3 ); add_wait( ::trigger_wait_targetname, "tarmac_advance3_flag" ); add_wait( ::flag_wait, "tarmac_enemies_wave2" ); do_wait_any(); activate_trigger_with_targetname( "tarmac_advance3_flag" ); flag_wait( "tarmac_enemies_wave2" ); wait .5; ai = tarmac_get_enemies(); add_wait( ::waittill_dead_or_dying, ai, 3 ); add_wait( ::trigger_wait_targetname, "tarmac_advance4_flag" ); do_wait_any(); //this moves them up to the windows activate_trigger_with_targetname( "tarmac_advance4_flag" ); flag_wait( "tarmac_van_guys2_spawn" ); ai = tarmac_get_enemies(); num = 3; if ( ai.size > 13 ) num = ai.size - 10; add_wait( ::waittill_dead_or_dying, ai, num ); add_wait( ::trigger_wait_targetname, "tarmac_advance6_flag" ); do_wait_any(); //this moves them up to the otherside of the underpass activate_trigger_with_targetname( "tarmac_advance6_flag" ); ai = tarmac_get_enemies(); add_wait( ::waittill_dead_or_dying, ai, 3 ); add_wait( ::trigger_wait_targetname, "tarmac_advance7_flag" ); do_wait_any(); //this moves them up a little past the underpass activate_trigger_with_targetname( "tarmac_advance7_flag" ); ai = tarmac_get_enemies(); add_wait( ::waittill_dead_or_dying, ai, 3 ); add_wait( ::trigger_wait_targetname, "tarmac_advance8_flag" ); do_wait_any(); activate_trigger_with_targetname( "tarmac_advance8_flag" ); ai = array_removeDead( ai ); add_wait( ::waittill_dead_or_dying, ai, 3 ); add_wait( ::trigger_wait_targetname, "tarmac_advance9_flag" ); do_wait_any(); activate_trigger_with_targetname( "tarmac_advance9_flag" ); ai = array_removeDead( ai ); add_wait( ::waittill_dead_or_dying, ai, 3 ); add_wait( ::trigger_wait_targetname, "tarmac_advance10_flag" ); do_wait_any(); activate_trigger_with_targetname( "tarmac_advance10_flag" ); } handle_advance_retreat() { flag_waitopen( "friendly_fire_warning" ); level endon( "friendly_fire_warning" ); trigger = GetEnt( "tarmac_advance6", "targetname" ); thread set_flag_on_trigger( trigger, "tarmac_advance6" ); trigger_wait( "tarmac_retreat1", "targetname" ); flag_set( "tarmac_retreat1" ); tarmac_retreat_dialogue( "airport_fsb2_aimforhead" ); trigger_wait( "tarmac_retreat2", "targetname" ); flag_set( "tarmac_retreat2" ); tarmac_retreat_dialogue( "airport_fsb3_aimforheads" ); trigger_wait( "tarmac_retreat3", "targetname" ); flag_set( "tarmac_retreat3" ); tarmac_retreat_dialogue( "airport_fsbr_sendingtruck" ); trigger_wait( "tarmac_retreat4", "targetname" ); flag_set( "tarmac_retreat4" ); flag_set( "tarmac_advance4" ); trigger_wait( "tarmac_retreat5", "targetname" ); flag_set( "tarmac_retreat5" ); trigger_wait( "tarmac_retreat6", "targetname" ); flag_set( "tarmac_retreat6" ); } tarmac_retreat_dialogue( alias ) { array = tarmac_get_enemies(); if ( !array.size ) return; guy = random( array ); guy.animname = "generic"; guy thread dialogue_queue( alias ); } tarmac_team_settings() { delayThread( 1, ::blend_movespeedscale_custom, CONST_SPEEDTARMAC2, 1 ); add_wait( ::flag_wait, "tarmac_pre_heat_fight" ); level.player add_call( ::allowsprint, true ); level.player add_call( ::allowjump, true ); add_func( ::delaythread, .1, ::blend_movespeedscale_custom, CONST_SPEEDTARMAC3, 1 ); add_func( ::flag_clear, "player_dynamic_move_speed" ); add_abort( ::flag_wait, "tarmac_heat_fight" ); thread do_wait(); flag_wait( "tarmac_heat_fight" ); thread blend_movespeedscale_custom( 100, 5 ); level.player AllowSprint( true ); flag_clear( "player_dynamic_move_speed" ); thread flag_set_delayed( "tarmac_open_fire", 8 ); SetSavedDvar( "ai_friendlyFireBlockDuration", 2000 ); flag_set( "friendly_fire_pause_flash" ); flag_set( "friendly_fire_pause_fire" ); } /************************************************************************************************************/ /* ESCAPE */ /************************************************************************************************************/ escape_main() { flag_waitopen( "friendly_fire_warning" ); level endon( "friendly_fire_warning" ); GetEnt( "escape_van_dummy", "targetname" ) add_spawn_function( ::escape_van_setup, "escape_van" ); GetEnt( "escape_van_driver", "script_noteworthy" ) add_spawn_function( ::escape_van_driver ); GetEnt( "escape_van_mate", "script_noteworthy" ) add_spawn_function( ::escape_van_mate ); array_thread( GetEntArray( "escape_final_guys", "targetname" ), ::add_spawn_function, ::escape_final_guys ); array_thread( GetEntArray( "escape_final_guys2", "targetname" ), ::add_spawn_function, ::escape_final_guys2 ); array_thread( GetEntArray( "escape_police_car_guys", "script_noteworthy" ), ::add_spawn_function, ::escape_police_car_guys ); trigger_off( "escape_get_in_trig", "targetname" ); flag_wait( "tarmac_enemies_wave1_dead" ); flag_wait( "tarmac_enemies_wave2_dead" ); flag_wait( "tarmac_van_guys_dead" ); flag_wait( "tarmac_van_guys2_dead" ); activate_trigger( "escape_van_spawn", "targetname" ); delayThread( .05, ::activate_trigger, "escape_van_guy", "target" ); thread airport_vision_escape(); wait .5; flag_set( "escape_main" ); thread battlechatter_off(); escape_setup_variables(); escape_create_survivors(); foreach ( member in level.survivors ) { member disable_heat_behavior(); member disable_ai_color(); member.ignoreall = true; member.ignoreme = true; member.fixednode = 0; member.fixednodewason = 0; } level.makarov PushPlayer( true ); thread radio_dialogue( "airport_mkv_30secs" ); nodes = GetNodeArray( "escape_start_nodes", "targetname" ); escape_survivors_follow_path( nodes, 325 ); level.makarov waittill( "reached_path_end" ); thread radio_dialogue( "airport_mkv_thisway" ); nodes = GetNodeArray( "escape_moveup_1", "targetname" ); escape_survivors_follow_path( nodes, 300 ); if ( level.survivors.size > 1 ) { level.comrad = level.survivors[ "1" ]; actor = level.survivors[ "1" ]; actor add_wait( ::waittill_msg, "reached_path_end" ); level add_abort( ::flag_wait, "escape_sequence_reach" ); actor add_func( ::delaythread, .5, ::anim_generic, actor, "CornerStndR_alert_signal_move_out" ); thread do_wait(); } level.makarov waittill( "reached_path_end" ); foreach ( member in level.survivors ) member PushPlayer( true ); node = undefined; foreach ( part in nodes ) { if ( part.script_noteworthy != "makarov" ) continue; node = part; break; } door = GetEnt( "escape_door", "targetname" ); door thread escape_palm_style_door_open( "door_wood_slow_creaky_open" ); // door thread palm_style_door_open( "door_wood_slow_creaky_open" ); node = getstruct( "escape_slow_open_node", "targetname" ); level.makarov enable_cqbwalk(); level.makarov disable_exits(); node anim_generic_run( level.makarov, "hunted_open_barndoor_flathand" ); level.makarov delayThread( 1, ::disable_cqbwalk ); level.makarov delayThread( 1, ::enable_exits ); flag_set( "escape_doorkick" ); node = GetNode( "escape_moveup_1b", "targetname" ); level.makarov follow_path( node, 260 ); array_thread( level.team, ::enable_cqbwalk ); array_thread( level.team, ::delaythread, 4, ::disable_cqbwalk ); level.makarov delaythread( 3.5, ::dialogue_queue, "airport_mkv_hallway" ); escape_end_sequence(); wait 2; activate_trigger( "escape_final_guys", "target" ); delayThread( 1.5, ::activate_trigger, "escape_police_trig", "targetname" ); thread escape_set_end_vision(); wait 10; if ( is_default_start() ) nextmission(); else IPrintLnBold( "DEVELOPER: END OF SCRIPTED LEVEL" ); } escape_palm_style_door_open( soundalias ) { /*wait( 1.35 ); if ( IsDefined( soundalias ) ) self PlaySound( soundalias ); else self PlaySound( "door_wood_slow_open" ); self RotateTo( self.angles + ( 0, 70, 0 ), 2, .5, 0 ); self ConnectPaths(); self waittill( "rotatedone" ); self RotateTo( self.angles + ( 0, 30, 0 ), 1.5, 0, 1.5 );*/ wait( 1.35 ); if ( IsDefined( soundalias ) ) self PlaySound( soundalias ); else self PlaySound( "door_wood_slow_open" ); self RotateTo( self.angles + ( 0, 70, 0 ), 2, .5, 0 ); self ConnectPaths(); self waittill( "rotatedone" ); self RotateTo( self.angles + ( 0, 40, 0 ), 1.5, 0, 1.5 ); } escape_end_sequence() { flag_waitopen( "friendly_fire_warning" ); level endon( "friendly_fire_warning" ); level notify( "friendly_fire_stop_checking_for_player_dist" ); flag_set( "escape_sequence_reach" ); thread airport_vision_makarov(); level.comrad.animname = "comrad"; team = []; team[ team.size ] = level.makarov; team[ team.size ] = level.comrad; //makarov putting his "hold" hand signal up level.makarov add_wait( ::waittill_msg, "goal" ); level.makarov add_func( ::anim_single_solo, level.makarov, "stand_exposed_wave_halt_v2" ); level.makarov add_func( ::delaythread, .05, ::dialogue_queue, "airport_mkv_holdfire" ); add_func( ::flag_set, "escape_hold_your_fire" ); add_abort( ::flag_wait, "friendly_fire_warning" ); thread do_wait(); array_thread( team, ::escape_relax ); //wait for both guys to reach their spot level.makarov.moveplaybackrate = 1.0; level.comrad.moveplaybackrate = 1.0; node = getstruct( "escape_ending_node", "targetname" ); node anim_reach_and_approach( team, "end_get_in" ); level.makarov.moveplaybackrate = 1.0; level.comrad.moveplaybackrate = 1.0; //wait for player to be in place escape_end_wait_until_player_is_in_position(); backdoor = GetEnt( "escape_door_behind", "targetname" ); backdoor RotateYaw( 90, 3, 0, 3 ); setsaveddvar( "r_lightGridEnableTweaks", 1 ); thread lerp_savedDvar( "r_lightGridIntensity", .75, 2.0 ); flag_set( "escape_sequence_go" ); trigger = GetEnt( "escape_nojump", "targetname" ); trigger thread escape_player_disable_jump_n_weapon(); //get the van van = level.escape_van_dummy; //get guys in van van notify( "stop_loop" ); array_thread( team, ::anim_stopanimscripted ); //setup idles to play once guy's are in level.comrad add_wait( ::_waittillmatch, "single anim", "end" ); van add_func( ::anim_loop_solo, level.comrad, "end_get_in_idle", "stop_loop", "origin_animate_jnt" ); thread do_wait(); waittillframeend; // thread music_stop( 7 ); level.vanmate thread end_vanmate_dialogue(); //Van Terrorist Good, you made it! Get in. foreach ( member in team ) member LinkTo( van, "tag_body" ); team[ team.size ] = level.vanmate; van thread anim_single( team, "end_get_in" ); van thread van_opendoors(); // gun = spawn_anim_model( "ending_weap" ); // van thread anim_single_solo( gun, "end_get_in" ); delay = 0.25; length = GetAnimLength( level.vanmate getanim( "end_get_in" ) ); flag_wait( "end_player_ready" ); flag_set( "escape_player_get_in" ); // delayThread( delay, ::music_doublecross ); level.player allowcrouch( false ); level.player allowprone( false ); level.player setstance( "stand" ); thread escape_slow_mo(); //GET THE PLAYER IN thread grab_player_if_he_gets_close(); flag_wait( "end_makarov_in_place" ); if ( flag( "player_ready_for_proper_ending" ) ) escape_animate_player_death(); else escape_animate_player_death2(); //level.makarov delayThread( 1, ::dialogue_queue, "airport_mkv_thiswill" ); node = GetVehicleNode( "escape_van_leave_node", "targetname" ); thread escape_van_drive_away( node ); if ( !flag( "escape_player_realdeath" ) ) level.makarov SetLookAtEntity( level.player ); else level.makarov SetLookAtEntity(); delayThread( GetAnimLength( level.makarov getanim( "end_drive_away" ) ) - 2.0, ::activate_trigger, "escape_final_guys2", "target" ); van thread anim_loop_solo( level.vanmate, "end_get_in_idle", "stop_loop", "origin_animate_jnt" ); van thread van_closedoors(); time = GetAnimLength( level.makarov getanim( "end_drive_away" ) ); delaythread( time - 1, ::radio_dialogue, "airport_mkv_allofrussia" ); van anim_single_solo( level.makarov, "end_drive_away", "origin_animate_jnt" ); level.makarov stop_magic_bullet_shield(); level.makarov Delete(); } escape_slow_mo() { flag_wait( "end_player_ready" ); wait 1.25; slowmo_start(); slowmo_setspeed_slow( .85 ); slowmo_setlerptime_in( 0 ); slowmo_lerp_in(); wait 3; slowmo_setlerptime_out( 0 ); slowmo_lerp_out(); slowmo_end(); } end_vanmate_dialogue() { self waittillmatch( "single anim", "dialog" ); self playsound( "airport_vt_madeit" ); self waittillmatch( "single anim", "dialog" ); self playsound( "airport_vt_beenough" ); } escape_van_drive_away( node ) { //get the van van = level.escape_van_dummy; level.escape_van_dummy delayCall( 3, ::playsound, "scn_ambulance_start_away" ); wait 5.0; level.escape_van_dummy delayCall( 0, ::attachPath, node ); level.escape_van_dummy delayCall( 0, ::StartPath ); } escape_kill_player( guy ) { if ( level.start_point == "grigs" ) return; if( flag( "escape_player_shot" ) ) return; flag_set( "escape_player_shot" ); time_hit_ground = .5; white_out_time = 6; //breathing level.player delayThread( .1, ::play_sound_on_entity, "breathing_hurt_start" ); level.player delayThread( time_hit_ground, ::play_sound_on_entity, "breathing_hurt" ); level.player delayThread( 3, ::play_sound_on_entity, "breathing_hurt" ); level.player delayThread( 6, ::play_sound_on_entity, "breathing_hurt" ); level.player delayThread( 9, ::play_sound_on_entity, "breathing_hurt" ); //heartbeat level.player delayThread( 1.5, ::play_sound_on_entity, "breathing_heartbeat" ); level.player delayThread( 3, ::play_sound_on_entity, "breathing_heartbeat" ); level.player delayThread( 5, ::play_sound_on_entity, "breathing_heartbeat" ); level.player delayThread( 8, ::play_sound_on_entity, "breathing_heartbeat" ); level.player delayThread( 12, ::play_sound_on_entity, "breathing_heartbeat" ); level.player delayThread( 17, ::play_sound_on_entity, "breathing_heartbeat" ); //sound ducking //level.player delayCall( white_out_time, ::shellshock, "airport", 10, true ); //rumble // level.player delayCall( .05, ::PlayRumbleOnEntity, "damage_heavy" ); // level.player delayCall( time_hit_ground, ::PlayRumbleOnEntity, "tank_rumble" ); level.player.health = 100; level.player DoDamage( 90, level.makarov GetTagOrigin( "tag_flash" ), level.makarov ); white = create_client_overlay( "white", 1 ); white thread fade_over_time( 0, .5 ); set_vision_set( "airport_death", 10 ); } escape_set_end_vision( guy ) { white = create_client_overlay( "white", 0 ); white fade_over_time( 1, 9.75 ); } /************************************************************************************************************/ /* INITIALIZATIONS */ /************************************************************************************************************/ start_intro() { start_common_airport(); thread battlechatter_off( "allies" ); } start_stairs() { start_common_airport(); intro_setup_dead_bodies(); thread battlechatter_off( "allies" ); trigger_off( "lobby_to_stairs_flow", "target" ); nodes = GetNodeArray( "prestairs_nodes", "targetname" ); ap_teleport_player(); ap_teleport_team( nodes ); thread airport_vision_intro( true ); thread blend_movespeedscale_custom( CONST_SPEEDLOBBY2 ); add_wait( ::flag_wait, "player_set_speed_stairs" ); add_func( ::blend_movespeedscale_custom, CONST_SPEEDSTAIRS, .25 ); thread do_wait(); add_wait( ::flag_wait, "player_set_speed_upperstairs" ); add_func( ::blend_movespeedscale_custom, CONST_SPEEDUPPER, 1 ); thread do_wait(); foreach ( node in nodes ) { level.team[ node.script_noteworthy ] OrientMode( "face angle", node.angles[ 1 ] ); level.team[ node.script_noteworthy ] enable_calm_combat(); level.team[ node.script_noteworthy ].ignoreall = false; level.team[ node.script_noteworthy ] thread ent_flag_set_delayed( "prestairs_nodes", .5 ); level.team[ node.script_noteworthy ] thread lobby_prestairs_nodes_behavior( node ); } thread flag_set_delayed( "player_set_speed_lobby", .5 ); thread flag_set_delayed( "stairs_go_up", 1 ); thread flag_clear_delayed( "_escalator_on", 1 ); // music_stalk(); music_alternate(); } glass_break_snds() { glassID = getglass( self.targetname ); level waittillmatch( "glass_destroyed", glassID ); play_sound_in_space( "scn_airport_skylight_glass", self.origin ); } escalator_sounds() { snds = []; snds[ snds.size ] = spawn( "script_origin", ( 5462.39, 2109.26, 76.125 ) ); snds[ snds.size ] = spawn( "script_origin", ( 5462.84, 2213.88, 160.665 ) ); snds[ snds.size ] = spawn( "script_origin", ( 5460.75, 2403.88, 314.567 ) ); snds[ snds.size ] = spawn( "script_origin", ( 5287.93, 2410.17, 316.125 ) ); snds[ snds.size ] = spawn( "script_origin", ( 5288.17, 2243.88, 184.175 ) ); snds[ snds.size ] = spawn( "script_origin", ( 5284.99, 2103.88, 68.6544 ) ); snds[ snds.size ] = spawn( "script_origin", ( 5104.29, 2009.68, 68.125 ) ); snds[ snds.size ] = spawn( "script_origin", ( 5009.83, 2106.67, 180.125 ) ); snds[ snds.size ] = spawn( "script_origin", ( 4889.42, 2225.57, 308.96 ) ); snds[ snds.size ] = spawn( "script_origin", ( 4766.84, 2102.98, 310.171 ) ); snds[ snds.size ] = spawn( "script_origin", ( 4871.84, 1995.85, 195.639 ) ); snds[ snds.size ] = spawn( "script_origin", ( 4987.36, 1885.09, 64.9956 ) ); foreach( snd in snds ) snd thread play_loop_sound_on_entity( "emt_airport_escalator" ); flag_waitopen( "_escalator_on" ); foreach( snd in snds ) snd stop_loop_sound_on_entity( "emt_airport_escalator" ); foreach( snd in snds ) snd thread play_sound_on_entity( "emt_airport_escalator_stop" ); } start_massacre() { start_common_airport(); intro_setup_dead_bodies(); thread massacre_team_dialogue(); thread airport_vision_stairs( true ); trigger_off( "upperdeck_runners2", "target" ); trigger_off( "upperdeck_runners4", "target" ); trigger_off( "upperdeck_runners1b", "target" ); trigger_off( "upperdeck_runners1c", "target" ); array_thread( GetEntArray( "upperdeck_runners3", "script_noteworthy" ), ::add_spawn_function, ::upperdeck_runners3 ); thread battlechatter_off( "allies" ); ap_teleport_player(); ap_teleport_team( getstructarray( "massacre_start_nodes", "targetname" ) ); thread blend_movespeedscale_custom( CONST_SPEEDUPPER ); foreach ( actor in level.team ) { actor thread ent_flag_set_delayed( "massacre_ready", .5 ); actor.goalradius = 8; actor.moveplaybackrate = 1.3; actor.ignoreall = false; actor enable_calm_combat(); } //music_stalk(); music_alternate(); } start_gate() { start_common_airport(); intro_setup_dead_bodies(); trigger_off( "massacre_rentacops_rear", "target" ); trigger_off( "massacre_rentacops_stairs", "target" ); trigger_off( "massacre_runners1", "target" ); trigger_off( "massacre_runners2", "target" ); trigger_off( "massacre_runners3", "target" ); trigger_off( "upperdeck_runners3", "target" ); trigger_off( "upperdeck_runners4", "target" ); trigger_off( "upperdeck_runners2", "target" ); trigger_off( "upperdeck_runners1b", "target" ); trigger_off( "upperdeck_runners1c", "target" ); flag_set( "massacre_rentacops_stairs_dead" ); flag_set( "massacre_rentacops_rear_dead" ); thread battlechatter_off( "allies" ); ap_teleport_player(); ap_teleport_team( getstructarray( "gate_start_nodes", "targetname" ) ); flag_set( "gate_main" ); foreach ( actor in level.team ) { actor thread ent_flag_set_delayed( "gate_ready_to_go", .5 ); } //music_stalk(); //music_stop( 5 ); //music_HZ_airport(); } start_basement() { start_common_airport(); thread battlechatter_off( "allies" ); array_thread( GetEntArray( "tarmac_littlebird_sniper", "script_noteworthy" ), ::add_spawn_function, ::tarmac_littlebird_sniper ); array_thread( GetEntArray( "tarmac_littlebird_sniper2", "script_noteworthy" ), ::add_spawn_function, ::tarmac_littlebird_sniper ); array_thread( GetEntArray( "tarmac_littlebird_pilot", "script_noteworthy" ), ::add_spawn_function, ::set_ignoreme, true ); array_thread( GetEntArray( "tarmac_littlebird_sniper", "script_noteworthy" ), ::add_spawn_function, ::tarmac_heli_bc_off ); array_thread( GetEntArray( "tarmac_littlebird_sniper2", "script_noteworthy" ), ::add_spawn_function, ::tarmac_heli_bc_off ); array_thread( GetEntArray( "tarmac_littlebird_pilot", "script_noteworthy" ), ::add_spawn_function, ::tarmac_heli_bc_off ); array_thread( GetEntArray( "gate_convoy_delete", "script_noteworthy" ), ::add_spawn_function, ::gate_convoy_delete ); //moved from tarmac array_thread( GetEntArray( "tarmac_van_guys", "targetname" ), ::add_spawn_function, ::tarmac_van_guys, "tarmac_van_guys_spawn" ); array_thread( GetEntArray( "tarmac_van_guys2", "targetname" ), ::add_spawn_function, ::tarmac_van_guys, "tarmac_van_guys2_spawn" ); GetEnt( "tarmac_swat_van", "targetname" ) add_spawn_function( ::tarmac_van_logic ); GetEnt( "tarmac_swat_van", "targetname" ) add_spawn_function( ::tarmac_van_stuff, "scn_airport_police_van_arrive1", "tarmac_swat_van" ); GetEnt( "tarmac_swat_van2", "targetname" ) add_spawn_function( ::tarmac_van_stuff, "scn_airport_police_van_arrive2", "tarmac_swat_van2" ); GetEnt( "tarmac_swat_van", "targetname" ) thread tarmac_van_fake( "tarmac_swat_van" ); GetEnt( "tarmac_swat_van2", "targetname" ) thread tarmac_van_fake( "tarmac_swat_van2" ); ap_teleport_player(); ap_teleport_team( getstructarray( "basement_start_nodes", "targetname" ) ); thread blend_movespeedscale_custom( CONST_TARMAC ); level.drs_ahead_test = ::gate_drs_ahead_test; flag_set( "gate_main" ); flag_set( "gate_heli_moveon" ); music_anticipation(); activate_trigger_with_targetname( "gate_heli_1" ); flag_wait( "team_initialized" ); array = []; array[ array.size ] = GetNode( "basement_start_makarov", "targetname" ); array[ array.size ] = GetNode( "basement_start_shotgun", "targetname" ); array[ array.size ] = GetNode( "basement_start_saw", "targetname" ); array[ array.size ] = GetNode( "basement_start_m4", "targetname" ); wait .2; foreach ( member in level.team ) { member enable_calm_combat(); member.ignoreall = true; member.ignoreme = true; member.moveplaybackrate = 1.2; member disable_arrivals(); member disable_exits(); member thread gate_do_jog2(); member.goalradius = 16; } foreach ( node in array ) level.team[ node.script_noteworthy ] thread follow_path( node ); } start_tarmac() { start_common_airport(); intro_setup_dead_bodies(); thread battlechatter_off( "allies" ); array_thread( GetEntArray( "tarmac_littlebird_sniper", "script_noteworthy" ), ::add_spawn_function, ::tarmac_littlebird_sniper ); array_thread( GetEntArray( "tarmac_littlebird_sniper2", "script_noteworthy" ), ::add_spawn_function, ::tarmac_littlebird_sniper ); array_thread( GetEntArray( "tarmac_littlebird_pilot", "script_noteworthy" ), ::add_spawn_function, ::set_ignoreme, true ); array_thread( GetEntArray( "tarmac_littlebird_sniper", "script_noteworthy" ), ::add_spawn_function, ::tarmac_heli_bc_off ); array_thread( GetEntArray( "tarmac_littlebird_sniper2", "script_noteworthy" ), ::add_spawn_function, ::tarmac_heli_bc_off ); array_thread( GetEntArray( "tarmac_littlebird_pilot", "script_noteworthy" ), ::add_spawn_function, ::tarmac_heli_bc_off ); //moved from tarmac array_thread( GetEntArray( "tarmac_van_guys", "targetname" ), ::add_spawn_function, ::tarmac_van_guys, "tarmac_van_guys_spawn" ); array_thread( GetEntArray( "tarmac_van_guys2", "targetname" ), ::add_spawn_function, ::tarmac_van_guys, "tarmac_van_guys2_spawn" ); GetEnt( "tarmac_swat_van", "targetname" ) add_spawn_function( ::tarmac_van_logic ); GetEnt( "tarmac_swat_van", "targetname" ) add_spawn_function( ::tarmac_van_stuff, "scn_airport_police_van_arrive1", "tarmac_swat_van" ); GetEnt( "tarmac_swat_van2", "targetname" ) add_spawn_function( ::tarmac_van_stuff, "scn_airport_police_van_arrive2", "tarmac_swat_van2" ); GetEnt( "tarmac_swat_van", "targetname" ) thread tarmac_van_fake( "tarmac_swat_van" ); GetEnt( "tarmac_swat_van2", "targetname" ) thread tarmac_van_fake( "tarmac_swat_van2" ); ap_teleport_player(); ap_teleport_team( getstructarray( "tarmac_start_nodes", "targetname" ) ); thread blend_movespeedscale_custom( CONST_TARMAC ); flag_set_delayed( "tarmac_moveout", .1 ); flag_set( "gate_main" ); flag_set( "gate_heli_moveon" ); flag_set( "basement_moveout" ); music_anticipation(); activate_trigger_with_targetname( "gate_heli_1" ); activate_trigger_with_targetname( "basement_heli_1" ); activate_trigger_with_targetname( "tarmac_van_dummy_spawn_trig" ); delayThread( .2, ::activate_trigger, "tarmac_security", "target" ); } start_escape() { start_common_airport(); intro_setup_dead_bodies(); thread battlechatter_off( "allies" ); thread airport_vision_exterior( true ); flag_wait( "team_initialized" ); foreach ( member in level.team ) { member enable_heat_behavior(); member PushPlayer( false ); } level.team[ "saw" ] stop_magic_bullet_shield(); level.team[ "shotgun" ] stop_magic_bullet_shield(); level.team[ "saw" ] Kill(); level.team[ "shotgun" ] Kill(); level.team = array_removeDead_keepkeys( level.team ); ap_teleport_player(); ap_teleport_team( getstructarray( "escape_start_nodes", "targetname" ) ); level.player AllowSprint( true ); thread blend_movespeedscale_custom( 100 ); music_escape(); flag_set( "tarmac_enemies_wave1_dead" ); flag_set( "tarmac_enemies_wave2_dead" ); flag_set( "tarmac_van_guys_dead" ); flag_set( "tarmac_van_guys2_dead" ); level.player allowjump( true ); level.player allowsprint( true ); } start_grigs() { start_common_airport(); thread battlechatter_off( "allies" ); thread airport_vision_exterior( true ); wait .1; grigs_test(); } grigs_test() { list = []; list[ list.size ] = "m4_grunt"; list[ list.size ] = "saw_reflex"; list[ list.size ] = "saw"; list[ list.size ] = "saw_acog"; list[ list.size ] = "mp5"; list[ list.size ] = "ump45"; list[ list.size ] = "g36c"; list[ list.size ] = "g36c_acog"; list[ list.size ] = "g36c_grenadier"; list[ list.size ] = "g36c_reflex"; list[ list.size ] = "striker"; node = getstruct( "escape_ending_node", "targetname" ); level.escape_van_dummy = Spawn( "script_model", node.origin ); level.escape_van_dummy.angles = node.angles; level.escape_van_dummy SetModel( "vehicle_ambulance_swat" ); level.vanmate = level.team[ "saw" ]; level.vanmate.animname = "van_mate"; level.comrad = level.team[ "m4" ]; level.comrad.animname = "comrad"; level.player enablePlayerWeapons( false ); while ( 1 ) { foreach ( weapon in list ) { store_current_weapon( weapon ); escape_animate_player_death(); wait 4; } } } start_common_airport() { thread escalator_sounds(); array_thread( getstructarray( "glass_break_snd", "script_noteworthy" ), ::glass_break_snds ); // add_global_spawn_function( "axis", ::disable_blood_pool ); // add_global_spawn_function( "neutral", ::disable_blood_pool ); array_thread( GetEntArray( "team", "targetname" ), ::add_spawn_function, ::team_init ); activate_trigger( "team", "target" ); thread flag_set_delayed( "team_initialized", .05 ); thread player_init(); ai = GetAIArray( "allies" ); foreach ( actor in ai ) { if ( actor is_hero() ) continue; actor Delete(); } thread battlechatter_off( "axis" ); array = GetEntArray( "massacre_dummy", "targetname" ); foreach ( obj in array ) obj Hide(); array = GetEntArray( "gate_canned_deaths", "targetname" ); foreach ( obj in array ) obj Hide(); array = GetEntArray( "upperdeck_canned_deaths", "targetname" ); foreach ( obj in array ) { obj Hide(); if ( IsDefined( obj.target ) ) { temp = GetEnt( obj.target, "targetname" ); temp Hide(); } } thread objective(); thread friendly_fire(); flag_init( "trigger_kill_player" ); trigs = getentarray( "kill_player", "targetname" ); foreach( trig in trigs ) thread set_flag_on_trigger( trig, "trigger_kill_player" ); thread kill_player(); thread good_save_handler(); delayThread( .5, ::player_dynamic_move_speed ); sign_departure_status_init(); array = array_randomize( level.departure_status_array ); array[ 0 ] thread sign_departure_status_flip_to( "arriving" ); array[ 1 ] thread sign_departure_status_flip_to( "arriving" ); array[ 2 ] thread sign_departure_status_flip_to( "arriving" ); array[ 3 ] thread sign_departure_status_flip_to( "boarding" ); array[ 4 ] thread sign_departure_status_flip_to( "boarding" ); } objective() { // Don't blow your cover. level.strings[ "OBJ_COVER" ] = &"AIRPORT_OBJ_COVER"; // Don't blow your cover... at any cost. level.strings[ "OBJ_COVER_COST" ] = &"AIRPORT_OBJ_COVER_COST"; // Don't blow your cover and earn Makarov's trust. level.strings[ "OBJ_COVER_TRUST" ] = &"AIRPORT_OBJ_COVER_TRUST"; // Earn Makarov's trust. level.strings[ "OBJ_TRUST" ] = &"AIRPORT_OBJ_TRUST"; // Follow Makarov's lead. level.strings[ "OBJ_TRUST_COST" ] = &"AIRPORT_OBJ_TRUST_COST"; // Get in the van. level.strings[ "OBJ_GET_IN_VAN" ] = &"AIRPORT_OBJ_GET_IN_VAN"; // Press ^3[{+gostand}]^7 to level.strings[ "mantle" ] = &"SCRIPT_MANTLE"; foreach ( string in level.strings ) PreCacheString( string ); if ( is_default_start() ) wait 24 + 5.5; else wait .05; Objective_Add( 1, "active", level.strings[ "OBJ_TRUST_COST" ] ); Objective_Current( 1 ); objective_get_pos(); /*trigger = GetEnt( "escape_nojump", "targetname" ); Objective_Add( 2, "active", level.strings[ "OBJ_GET_IN_VAN" ], trigger.origin ); Objective_Current( 2 ); flag_wait( "escape_player_is_in" ); Objective_State( 1, "done" ); Objective_State( 2, "done" );*/ } objective_get_pos() { level endon( "escape_player_get_in" ); objective_onentity( 1, level.makarov, ( 0,0,80 ) ); flag_wait( "end_get_in_the_van" ); } airport_music() { flag_init( "airport_alternate" ); flag_init( "airport_anticipation" ); flag_init( "airport_escape" ); switch ( level.start_point ) { case "default": case "start_intro": case "stairs": case "massacre": flag_wait( "airport_alternate" ); music_loop( "airport_alternate", 212 ); /# println( " *** MUSIC: airport_alternate *** " ); #/ case "gate": case "basement": case "tarmac": flag_wait( "airport_anticipation" ); thread music_stop( 1 ); thread music_sfx_to_music( "airport_anticipation", 308, undefined, 306 ); /# println( " *** MUSIC: airport_anticipation *** " ); #/ case "escape": flag_wait( "airport_escape" ); music_loop( "airport_escape", 150 ); /# println( " *** MUSIC: airport_escape *** " ); #/ flag_wait( "escape_hold_your_fire" ); thread music_stop( 2 ); snd = spawn( "script_origin", level.player.origin ); snd linkto( level.player ); snd playsound( "airport_doublecross_sfx" ); /# println( " *** MUSIC: airport_doublecross *** " ); #/ break; default: AssertMsg( "Unhandled start point " + level.start_point ); break; } }