// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool enemyhq_rooftop_intro_pre_load() { common_scripts\utility::flag_init( "finished_intro_dof" ); common_scripts\utility::flag_init( "bishop_glimpse_over" ); common_scripts\utility::flag_init( "watching_bishop_glimpse" ); common_scripts\utility::flag_init( "activate_vip_sniper" ); common_scripts\utility::flag_init( "enable_butchdance" ); common_scripts\utility::flag_init( "start_rpg_kibble" ); common_scripts\utility::flag_init( "start_exfil_sniper" ); common_scripts\utility::flag_init( "blow_koolaid_wall" ); common_scripts\utility::flag_init( "FLAG_move_to_player_truck" ); common_scripts\utility::flag_init( "checkit_zoom" ); common_scripts\utility::flag_init( "checkit_dryfire" ); common_scripts\utility::flag_init( "checkit_pan" ); common_scripts\utility::flag_init( "start_convoy" ); common_scripts\utility::flag_init( "bishop_glimpse" ); common_scripts\utility::flag_init( "kill_player_fail" ); common_scripts\utility::flag_init( "FLAG_dead_guys_near_truck" ); common_scripts\utility::flag_init( "bishop_in_crosshairs" ); common_scripts\utility::flag_init( "merrick_done_lookat" ); precachemodel( "weapon_bursted_sticky_grenade" ); precachemodel( "weapon_sticky_grenade" ); precachemodel( "ehq_seat_dyn" ); precachemodel( "viewmodel_mk14" ); precachemodel( "cargocontainer_20ft_white" ); precachemodel( "com_ammo_pallet" ); precachemodel( "berlin_barrelcluster_pallet_01" ); precachemodel( "shipping_frame_boxes" ); precachemodel( "weapon_remote_sniper_tripod" ); precachemodel( "weapon_remote_sniper_gun" ); precachemodel( "mil_mre_chocolate02" ); precachemodel( "ehq_intro_window_vines_anim" ); precachemodel( "viewmodel_mk32_dud_bolt_ring_off" ); precachemodel( "dub_restaurant_chair_dirty_01b" ); precacheshader( "killiconheadshot" ); precacheitem( "remote_chopper_gunner" ); precacheitem( "remote_chopper_gunner_nopullout" ); precachemodel( "weapon_mts_255_small" ); precacheitem( "remote_tablet_nopullout" ); precacheitem( "remote_tablet" ); precacheshader( "remote_chopper_hud_target_enemy" ); precacheshader( "remote_chopper_hud_target_friendly" ); precacheshader( "remote_chopper_hud_target_e_vehicle" ); precacheshader( "inventory_stickybomb" ); precacheitem( "nosound_magicbullet" ); precacheitem( "mk32_dud_rocket" ); precacheitem( "mk32_dud" ); precacheitem( "freerunner" ); thread sniper_vip_breach(); thread butchdance(); thread rpg_kibble(); thread exfil_sniper(); thread handle_m32_launcher(); level.player thread handle_sticky_clacker(); level.switching_to_detonator = 0; level.switching_from_detonator = 0; var_0 = getentarray( "intro_hide_on_load", "script_noteworthy" ); var_1 = getentarray( "flyby_hide_on_load", "script_noteworthy" ); var_2 = getentarray( "flybyA_hide_on_load", "script_noteworthy" ); var_3 = common_scripts\utility::array_combine( var_0, var_1 ); var_4 = common_scripts\utility::array_combine( var_3, var_2 ); common_scripts\utility::array_call( var_4, ::hide ); common_scripts\utility::array_call( var_4, ::notsolid ); precachedigitaldistortcodeassets(); precachestring( &"ENEMY_HQ_ZOOMHINT" ); precachestring( &"ENEMY_HQ_ZOOMHINT_NO_GLYPH" ); level.mk32_mode = "instant"; thread listen_mk32_mode(); thread sniper_nade_setup(); } listen_mk32_mode() { wait 1; common_scripts\utility::flag_wait( "FLAG_player_enter_truck" ); level.mk32_mode = "instant"; } setup_rooftop_intro() { level.remote_target_override_function = ::handle_intro_sniper_outline; level.ehq_blackout_time = 5; maps\_utility::intro_screen_create( &"ENEMY_HQ_INTROSCREEN_LINE_1", &"ENEMY_HQ_INTROSCREEN_LINE_2", &"ENEMY_HQ_INTROSCREEN_LINE_3" ); maps\_utility::intro_screen_custom_timing( 2, 1 ); maps\_utility::intro_screen_custom_func( ::introscreen ); level.sniper_wait_extra_black = 1; level.start_point = "intro"; maps\enemyhq::setup_common( "introroof" ); thread cargo_choppers(); level.mk32_mode = "delay"; level.dog maps\enemyhq_code::lock_player_control(); } begin_rooftop_intro() { level.ehq_znear_default = getdvar( "r_znear" ); setsaveddvar( "r_znear", 40.0 ); thread maps\enemyhq_intro::spawn_player_truck(); maps\_utility::disable_trigger_with_targetname( "TRIG_get_in_truck" ); thread intro_common(); thread maps\_utility::autosave_tactical(); thread field_activity(); thread maps\enemyhq_intro::dead_guys_near_truck(); level.player.allow_dry_fire = 1; level.intro_grenades = level.player getweaponammoclip( "fraggrenade" ); level.player takeallweapons(); level.player_intro_weapon = "freerunner"; level.player giveweapon( level.player_intro_weapon ); level.player switchtoweapon( level.player_intro_weapon ); level.player.presniper_weapon = level.player_intro_weapon; level.player.presniper_weapon_clip = 0; level.player.presniper_weapon_stock = 0; level.player giveweapon( "remote_tablet" ); level.player switchtoweapon( "remote_tablet" ); level.player freezecontrols( 1 ); maps\_utility::battlechatter_off( "allies" ); maps\_utility::battlechatter_off( "axis" ); wait( level.ehq_blackout_time ); thread digital_malarky( 0.5, 1.75 ); level.player freezecontrols( 0 ); maps\enemyhq_code::safe_activate_trigger_with_targetname( "rooftop_intro_color" ); thread bishop_glimpse(); level.player intro_overlook_static(); common_scripts\utility::flag_set( "FLAG_dead_guys_near_truck" ); common_scripts\utility::flag_wait( "bishop_glimpse_over" ); setsaveddvar( "r_znear", level.ehq_znear_default ); } setup_rooftop_shoot() { level.start_point = "introshoot"; maps\enemyhq_intro::spawn_player_truck(); maps\enemyhq::setup_common( "introroof" ); thread maps\enemyhq_audio::aud_check( "rooftop_shoot" ); thread intro_common(); thread air_armada(); level.mk32_mode = "delay"; level.dog maps\enemyhq_code::lock_player_control(); setsaveddvar( "ammoCounterHide", 1 ); } begin_rooftop_shoot() { thread cargo_choppers(); thread maps\_vehicle::create_vehicle_from_spawngroup_and_gopath( 989 ); common_scripts\utility::exploder( "5600" ); level.allies[0].disable_sniper_glint = 1; level.allies[0].old_weap = level.allies[0].primaryweapon; level.allies[0] maps\_utility::forceuseweapon( "mk32_dud_rocket", "primary" ); level.allies[0].noreload = 1; level.remote_target_override_function = undefined; level.player_intro_weapon = "sc2010+reflex_sp"; level.mk32_intro_fire = 1; level.player_mk32 = "mk32_dud+eotech_sp_mk32dud"; thread watch_weaponswitch(); thread maps\enemyhq_intro::player_failcase_road(); thread player_failcase_road_mk32(); maps\_utility::disable_trigger_with_targetname( "picked_up_mk32" ); maps\_utility::disable_trigger_with_targetname( "TRIG_get_in_truck" ); level.player.allow_dry_fire = 0; level.next_repeat_vo = 0; thread keegan_tinkers_with_rifle(); level.player setstance( "crouch" ); wait 0.05; level.player setstance( "crouch" ); thread maps\_utility::autosave_by_name( "intro_rooftop" ); maps\enemyhq_code::safe_activate_trigger_with_targetname( "rooftop_crawl_forward" ); level.allies[1] thread maps\enemyhq_intro::keegan_enter_veh(); thread intro_plane_flyby_01(); pickup_mk32(); level waittill( "stop_convoy" ); level.player thread swapout_mk32(); thread go_street(); thread remove_ally_mk32(); common_scripts\utility::flag_set( "kill_player_fail" ); } player_failcase_road_mk32() { thread player_failcase_road_overrun_mk32(); level endon( "kill_player_fail" ); var_0 = []; var_0[0] = "enemyhq_mrk_logangetbackhere"; var_0[1] = "enemyhq_mrk_whereareyougoing"; for (;;) { common_scripts\utility::flag_wait( "FLAG_player_failcase_road_mk32" ); var_1 = 0; while ( common_scripts\utility::flag( "FLAG_player_failcase_road_mk32" ) ) { if ( var_1 > var_0.size - 1 ) { setdvar( "ui_deadquote", &"ENEMY_HQ_YOU_LEFT_YOUR_TEAM_BEHIND" ); maps\_utility::missionfailedwrapper(); break; } level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( var_0[var_1] ); var_1++; wait( randomfloatrange( 2, 4 ) ); } } } player_failcase_road_overrun_mk32() { level endon( "kill_player_fail" ); common_scripts\utility::flag_wait( "FLAG_player_failcase_road_overrun_mk32" ); setdvar( "ui_deadquote", &"ENEMY_HQ_YOU_LEFT_YOUR_TEAM_BEHIND" ); maps\_utility::missionfailedwrapper(); } remove_ally_mk32() { common_scripts\utility::flag_wait( "FLAG_player_enter_truck" ); wait 3; level.allies[0].noreload = undefined; level.allies[0] maps\_utility::forceuseweapon( level.allies[0].old_weap, "primary" ); level.allies[0].old_weapon = "none"; if ( isdefined( level.allies[0].weaponinfo["mk32_dud_rocket"] ) && isdefined( level.allies[0].weaponinfo["mk32_dud_rocket"].hasclip ) ) level.allies[0].weaponinfo["mk32_dud_rocket"].hasclip = 0; } introscreen() { maps\_utility::delaythread( 2, maps\_utility::smart_radio_dialogue, "enemyhq_kgn_poweringupremotesniper" ); thread maps\enemyhq_audio::aud_start_sniper_intro(); maps\_introscreen::introscreen( 0, level.ehq_blackout_time ); } intro_common() { thread ship_vista(); } monitor_player_used_zoom( var_0 ) { while ( !common_scripts\utility::flag( "checkit_zoom" ) ) { if ( abs( var_0 - level.remote_turret_current_fov ) > 20 ) common_scripts\utility::flag_set( "checkit_zoom" ); wait 0.05; } } sniper_paces() { sniper_paces_static(); level.player forceusehintoff(); } zoom_hint_wait() { if ( common_scripts\utility::flag( "checkit_zoom" ) ) return 1; return 0; } sniper_paces_static() { level endon( "bishop_glimpse" ); level.player.prev_stance = "crouch"; maps\_utility::smart_radio_dialogue( "enemyhq_mrk_scanaroundforfed" ); wait 4; if ( !common_scripts\utility::flag( "checkit_zoom" ) ) { maps\_utility::smart_radio_dialogue( "enemyhq_mrk_zoominonthe" ); common_scripts\utility::flag_wait_or_timeout( "checkit_zoom", 2 ); if ( !common_scripts\utility::flag( "checkit_zoom" ) ) { maps\_utility::display_hint( "zoom_hint" ); common_scripts\utility::flag_wait_or_timeout( "checkit_zoom", 4 ); var_0 = 9; while ( !common_scripts\utility::flag( "checkit_zoom" ) ) { maps\_utility::smart_radio_dialogue( "enemyhq_mrk_logantryzoomingin" ); common_scripts\utility::flag_wait_or_timeout( "checkit_zoom", var_0 ); if ( var_0 < 30 ) var_0 = var_0 * 1.5; } } wait 0.1; } } watch_dryfire() { level.player endon( "use_remote_turret" ); var_0 = 0; var_0 = gettime(); var_1 = 7000; for (;;) { common_scripts\utility::flag_wait( "checkit_dryfire" ); common_scripts\utility::flag_clear( "checkit_dryfire" ); if ( var_0 < gettime() ) { var_0 = gettime() + var_1; var_1 = var_1 * 1.5; maps\_utility::smart_radio_dialogue( "enemyhq_kgn_itsnotloaded" ); } wait 0.05; } } intro_overlook_static() { var_0 = common_scripts\utility::getstruct( "sniper_introaim_static", "targetname" ); level.remote_turret_current_fov = 55; level.remote_turret_right_arc = 22; level.remote_turret_left_arc = 45; level.remote_turret_top_arc = 15; level.remote_turret_bottom_arc = 17; setup_sniper_view( "sniper_introaim_static" ); common_scripts\utility::flag_wait( "remote_sniper_ready" ); self.turret_look_at_ent.origin = var_0.origin; level.remote_turret_current_fov = 55; self lerpfov( level.remote_turret_current_fov, 0.05 ); thread air_armada(); thread monitor_player_used_zoom( 55 ); thread watch_dryfire(); wait 2; thread intro_objectives(); thread sniper_paces(); monitor_player_bishop(); if ( !common_scripts\utility::flag( "bishop_glimpse" ) ) { self notify( "remote_turret_nozoom" ); thread maps\_utility::add_dialogue_line( "Merrick", "I see activity in VIP suites. I'm Overriding control." ); thread maps\_utility::smart_radio_dialogue( "enemyhq_mrk_iseeactivityin" ); thread intro_dof( 0.7 ); wait 0.4; var_1 = length( self.turret_look_at_ent.origin - self.origin ); var_0 = common_scripts\utility::getstruct( "sniper_introaim_4", "targetname" ); var_2 = self.origin + anglestoforward( level.player getplayerangles() ) * var_1; self.turret_look_at_ent.origin = var_2; self.player_view_controller snaptotargetentity( self.turret_look_at_ent ); self lerpviewangleclamp( 0, 0, 0, 0, 0, 0, 0 ); level.remote_turret_right_arc = 0; level.remote_turret_left_arc = 0; level.remote_turret_top_arc = 0; level.remote_turret_bottom_arc = 0; var_3 = length( var_0.origin - self.turret_look_at_ent.origin ) / 1000; var_3 = min( var_3, 4 ); var_3 = max( var_3, 1 ); wait 0.05; self.turret_look_at_ent moveto( var_0.origin, var_3, var_3 / 4, var_3 / 4 ); var_4 = 2; self lerpfov( var_4, var_3 ); level.remote_turret_current_fov = var_4; thread maps\enemyhq_audio::aud_focus_zoom(); common_scripts\utility::flag_set( "watching_bishop_glimpse" ); wait( var_3 ); self lerpviewangleclamp( 0, 0, 0, 5, 5, 1, 1 ); level.remote_turret_right_arc = 5; level.remote_turret_left_arc = 5; level.remote_turret_top_arc = 1; level.remote_turret_bottom_arc = 1; level.remote_turret_min_fov = 1; level.remote_turret_max_fov = 4; thread maps\enemyhq_remoteturret::remote_turret_handle_zoom(); } else { common_scripts\utility::flag_set( "watching_bishop_glimpse" ); maps\_utility::radio_dialogue_stop(); wait 0.05; thread maps\_utility::smart_radio_dialogue( "enemyhq_mrk_waityouhavesomething" ); level.remote_turret_min_fov = 1; } var_5 = gettime(); var_6 = level common_scripts\utility::waittill_any_return( "bishop_in_crosshairs", "identify_vo_timeout" ); thread maps\_utility::smart_radio_dialogue( "enemyhq_mrk_wehaveapossible" ); if ( var_6 != "identify_vo_timeout" ) level waittill( "identify_vo_timeout" ); var_7 = 9.5; maps\_utility::delaythread( var_7, maps\_utility::send_notify, "use_remote_turret" ); level maps\_utility::delaythread( var_7, common_scripts\utility::flag_set, "bishop_glimpse_over" ); wait 4.5; thread maps\_utility::smart_radio_dialogue( "enemyhq_kgn_thenthatswherewere" ); wait 1; thread maps\_utility::smart_radio_dialogue( "enemyhq_hsh_weregoinginthere" ); wait 1; maps\_utility::smart_radio_dialogue( "enemyhq_mrk_alrightadamletsfinish" ); } monitor_player_bishop() { var_0 = gettime() + 45000; var_1 = 0; var_2 = 0; var_3 = []; var_3[var_3.size] = "enemyhq_mrk_heavyfedactivity12"; var_3[var_3.size] = "enemyhq_mrk_fedactivitydeadahead"; var_4 = 8000; var_5 = []; var_5["field_area"] = 0; var_5["stadium_left"] = 0; var_5["stadium_right"] = 0; var_5["armada"] = 0; var_6 = common_scripts\utility::getstructarray( "bishop_search", "targetname" ); var_7 = 0; var_8 = []; var_8[var_8.size] = "enemyhq_mrk_enemypatrolsnothingmore"; var_8[var_8.size] = "enemyhq_mrk_morepatrolsnosign"; var_8[var_8.size] = "enemyhq_mrk_thatsjustanenemy"; var_9 = []; var_9[var_9.size] = "enemyhq_mrk_lookaroundthepress"; var_9[var_9.size] = "enemyhq_mrk_iseeactivityon"; var_9[var_9.size] = "enemyhq_mrk_checkoutthevip"; var_10 = 0; var_11 = gettime() + 25000; var_12 = 0; for (;;) { if ( var_11 < gettime() ) { var_11 = gettime() + 35000; thread maps\_utility::smart_radio_dialogue( var_9[var_10] ); var_10++; if ( var_10 >= var_9.size ) var_10 = 0; } var_13 = level.player getplayerangles(); var_14 = anglestoforward( var_13 ); if ( common_scripts\utility::flag( "bishop_glimpse_lookflag" ) ) { if ( level.remote_turret_current_fov <= 6 && var_13[0] > 0.5 && var_13[0] < 2.2 && var_13[1] > -100 && var_13[1] < -97.5 ) { level.glimpse_time = gettime(); common_scripts\utility::flag_set( "bishop_glimpse" ); break; } else if ( var_1 < gettime() && level.remote_turret_current_fov <= 30 ) { thread maps\_utility::smart_radio_dialogue( var_3[var_2] ); var_2++; if ( var_2 >= var_3.size ) var_2 = 0; var_1 = gettime() + var_4; var_4 = var_4 * 1.5; } } if ( level.remote_turret_current_fov < 45 ) { foreach ( var_16 in var_6 ) { if ( !isdefined( var_16.found ) ) { var_17 = vectornormalize( var_16.origin - level.player.origin ); var_18 = vectordot( var_17, var_14 ); var_19 = 0.9975; if ( isdefined( var_16.script_parameters ) ) var_19 = int( var_16.script_parameters ); if ( var_18 > var_19 ) { var_16.found = 1; var_5[var_16.script_noteworthy]++; break; } } } } var_21 = 1; if ( var_13[1] > -104 && var_13[1] < -94 && var_13[0] < 10 ) var_21 = 0; if ( var_21 && var_7 < gettime() && level.remote_turret_current_fov < 25 ) { var_7 = gettime() + 1000; var_22 = 0; var_23 = []; foreach ( var_25 in level.drones["axis"].array ) { if ( isdefined( var_25.found ) ) continue; var_17 = vectornormalize( var_25.origin - level.player.origin ); var_18 = vectordot( var_17, var_14 ); if ( var_18 > 0.998 ) { var_23[var_23.size] = var_25; var_22++; } if ( var_22 >= 3 ) { foreach ( var_27 in var_23 ) var_27.found = 1; thread maps\_utility::smart_radio_dialogue( var_8[var_12] ); var_12++; if ( var_12 >= var_8.size ) var_12 = 0; var_7 = gettime() + 8000; break; } } } if ( var_5["field_area"] == 3 ) { var_5["field_area"]++; thread maps\_utility::smart_radio_dialogue( "enemyhq_mrk_doesntlooklikehes_2" ); } if ( var_5["field_area"] == 6 ) { var_5["field_area"]++; thread maps\_utility::smart_radio_dialogue( "enemyhq_mrk_fieldclear" ); } if ( var_5["stadium_left"] == 4 ) { var_5["stadium_left"]++; thread maps\_utility::smart_radio_dialogue( "enemyhq_mrk_leftsideclear" ); } if ( var_5["stadium_right"] == 4 ) { var_5["stadium_right"]++; thread maps\_utility::smart_radio_dialogue( "enemyhq_mrk_rightsideclear" ); } if ( var_5["armada"] == 4 ) var_5["armada"]++; wait 0.05; } } bishop_in_crosshairs() { level endon( "intro_done" ); for (;;) { if ( isdefined( level.remote_turret_trace["entity"] ) ) { var_0 = level.remote_turret_trace["entity"]; if ( isai( var_0 ) && var_0.team == "allies" && level.remote_turret_current_fov < 4 ) { common_scripts\utility::flag_set( "bishop_in_crosshairs" ); break; } } wait 0.05; } } bishop_glimpse() { var_0 = common_scripts\utility::getstruct( "vip_sniper_breach_struct", "targetname" ); var_1 = maps\_utility::spawn_targetname( "bishop_tease_hech", 1 ); var_1.animname = "bishop"; var_1.disable_sniper_outline = 1; var_1.script_friendname = "Ajax"; var_1.name = "Ajax"; var_2 = maps\enemyhq_code::array_spawn_targetname_allow_fail( "bishop_tease" ); var_2[0].animname = "bish_e1"; var_2[1].animname = "bish_e2"; var_2[2].animname = "bish_e3"; var_2[var_2.size] = var_1; var_2[3] maps\_utility::gun_remove(); var_3 = maps\_utility::spawn_anim_model( "mr_chair" ); var_4 = maps\_utility::spawn_anim_model( "mr_chair" ); var_4 setmodel( "dub_restaurant_chair_dirty_01b" ); var_4 linkto( var_3, "J_Prop_1" ); var_5 = [ var_2[0], var_2[2] ]; var_6 = [ var_1, var_3, var_2[1] ]; var_0 maps\_anim::anim_first_frame( [ var_3 ], "bishop_glimpse" ); var_7 = 2.8; level.start_len = 2.5; var_7 = 1.3; level.start_len = 2.7; wait 0.05; level.start_anim_time = gettime() - level.start_len * 1000; var_0 thread maps\_anim::anim_loop( var_2, "bishop_glimpse_loop" ); common_scripts\utility::flag_wait( "bishop_glimpse" ); common_scripts\utility::array_thread( var_2, maps\_utility::anim_stopanimscripted ); waittillframeend; var_0 thread maps\_anim::anim_single( var_2, "bishop_glimpse" ); var_8 = 11800; level.time_cut = var_8; level thread maps\_utility::notify_delay( "identify_vo_timeout", var_8 / 1000 ); thread bishop_in_crosshairs(); common_scripts\utility::flag_wait( "bishop_glimpse_over" ); wait 0.2; common_scripts\utility::array_call( var_2, ::delete ); var_4 delete(); } glimpsethefuture( var_0, var_1 ) { var_2 = var_1 / getanimlength( level.scr_anim["bish_e1"]["bishop_glimpse"] ); level.future_start_percent = var_2; foreach ( var_4 in var_0 ) var_4 setanimtime( maps\_utility::getanim_from_animname( "bishop_glimpse", var_4.animname ), level.future_start_percent ); } intro_dof( var_0 ) { level notify( "stop_introdof" ); level endon( "stop_introdof" ); if ( isdefined( var_0 ) ) { var_1 = var_0; maps\_art::dof_enable_script( 50, 55, 10, 60, 65, 10, var_1 ); wait( var_1 ); var_1 = var_0 * 2; maps\_art::dof_disable_script( var_1 ); wait( var_1 ); return; } var_1 = 4; maps\_art::dof_enable_script( 50, 55, 8, 60, 65, 8, var_1 ); wait( var_1 ); var_1 = 1; maps\_art::dof_disable_script( var_1 ); wait( var_1 ); common_scripts\utility::flag_set( "finished_intro_dof" ); } opening_view_anims( var_0 ) { maps\_utility::delaythread( 5, ::player_get_mk32 ); var_1 = common_scripts\utility::getstruct( var_0, "targetname" ); var_2 = var_1; var_3 = maps\_utility::spawn_anim_model( "remote_sniper" ); var_4 = maps\_utility::spawn_anim_model( "remote_sniper" ); var_4 setmodel( "weapon_remote_sniper_gun" ); var_5 = maps\_utility::spawn_anim_model( "remote_sniper" ); var_5 setmodel( "weapon_remote_sniper_tripod" ); var_4 linkto( var_3, "j_prop_2" ); var_5 linkto( var_3, "j_prop_1" ); level.prop_sentry = var_3; level.intro_anim_from = var_1; level.intro_anim_from_keegan = var_2; level.allies[0].goalradius = 128; level.vines = maps\_utility::spawn_anim_model( "viney" ); level.vines setmodel( "ehq_intro_window_vines_anim" ); var_6 = level.allies[0] gettagorigin( "tag_weapon_left" ); level.bone = spawn( "script_model", var_6 ); level.bone setmodel( "mil_mre_chocolate02" ); level.bone linkto( level.allies[0], "tag_weapon_left", ( 0, 0, 0 ), ( 0, 0, 0 ) ); level.allies[1] thread end_anim_then_loop( var_2, "intro_loop_keegan", "stop_intro_loop", 1 ); level.allies[2] thread end_anim_then_loop( var_1, "intro_player_loop", "stop_intro_loop", 0 ); var_2 maps\_anim::anim_first_frame( [ level.prop_sentry ], "intro_player" ); var_1 maps\_anim::anim_first_frame( [ level.allies[2], level.dog ], "intro_player" ); var_1 thread maps\_anim::anim_single( [ level.allies[0], level.vines ], "intro_player" ); thread maps\enemyhq_audio::aud_intro_keegan_tinkering(); var_2 thread maps\_anim::anim_single( [ level.allies[1] ], "intro_player" ); } anim_intro_dog( var_0 ) { level.intro_anim_from maps\_anim::anim_single( [ level.allies[2], level.dog ], "intro_player" ); } anim_intro_sniper( var_0 ) { level.intro_anim_from_keegan maps\_anim::anim_single( [ level.prop_sentry ], "intro_player" ); } anim_drop_bone( var_0 ) { level.bone unlink(); } end_anim_then_loop( var_0, var_1, var_2, var_3 ) { wait 0.1; self waittillmatch( "single anim", "end" ); if ( var_3 ) { if ( common_scripts\utility::flag( "picked_up_mk32" ) ) return; } var_0 thread maps\_anim::anim_loop_solo( self, var_1, var_2 ); level waittill( "stop_intro_loop" ); var_0 notify( "stop_intro_loop" ); } trig_active_on_look( var_0, var_1, var_2 ) { common_scripts\utility::trigger_off(); var_3 = 0; while ( !common_scripts\utility::flag( var_2 ) ) { var_4 = anglestoforward( level.player.angles ); var_5 = vectornormalize( var_0 - level.player.origin ); var_6 = vectordot( var_4, var_5 ); if ( var_3 && var_6 < var_1 ) { var_3 = 0; common_scripts\utility::trigger_off(); } else if ( !var_3 && var_6 >= var_1 ) { var_3 = 1; common_scripts\utility::trigger_on(); } wait 0.05; } } handle_intro_ammo_counter() { while ( isdefined( level.sniper_wait_extra_black ) ) wait 0.05; setsaveddvar( "ammoCounterHide", 1 ); } pickup_mk32( var_0 ) { var_1 = getent( "mk32_noglow", "targetname" ); var_2 = getent( "mk32_glowy", "targetname" ); var_2 hide(); thread opening_view_anims( "sniper_placement_merrick" ); maps\_utility::enable_trigger_with_targetname( "picked_up_mk32" ); var_3 = common_scripts\utility::getstruct( "mk32_noglow_lookstruct", "targetname" ); var_4 = getent( "picked_up_mk32", "targetname" ); var_4 thread trig_active_on_look( var_3.origin, 0.8, "picked_up_mk32" ); common_scripts\utility::flag_wait_or_timeout( "picked_up_mk32", 10 ); var_1 delete(); if ( !common_scripts\utility::flag( "picked_up_mk32" ) ) var_2 show(); var_5 = common_scripts\utility::getstruct( "sniper_placement_forward", "targetname" ); thread convoy(); common_scripts\utility::flag_wait( "picked_up_mk32" ); setsaveddvar( "ammoCounterHide", 0 ); thread intro_helis_overhead(); level.prop_sentry setanimtime( maps\_utility::getanim_from_animname( "intro_player", "remote_sniper" ), 1 ); thread maps\enemyhq_audio::aud_pickup_mk32(); var_2 delete(); level.player disableweaponswitch(); maps\enemyhq_code::safe_disable_trigger_with_targetname( "picked_up_mk32" ); maps\enemyhq_code::setupplayerforgameplay(); level.player giveweapon( level.player_mk32 ); level.player switchtoweapon( level.player_mk32 ); wait 0.1; var_6 = spawn( "script_model", level.player.origin ); var_6 setmodel( "viewmodel_mk32_dud_bolt_ring_off" ); var_6 linktoplayerview( level.player, "J_Ammo1_Cap", ( 0, 0, 0 ), ( 0, 0, 0 ), 1 ); if ( level.start_point != "introshoot" ) wait 2.6; else wait 3.1; var_6 unlinkfromplayerview( level.player ); var_6 delete(); } intro_helis_overhead() { var_0 = thread maps\_vehicle::create_vehicle_from_spawngroup_and_gopath( 988 ); wait 1; foreach ( var_2 in var_0 ) { var_2 setmaxpitchroll( 20, 60 ); var_2 setturningability( 1 ); } } fast_convoy() { level endon( "stop_fast_convoy" ); level endon( "stop_convoy" ); var_0 = getentarray( "intro_convoy_fast", "targetname" ); wait 8; var_1 = 0; while ( var_1 < 2 ) { var_2 = var_0[0]; var_1++; var_3 = var_2 maps\_vehicle::spawn_vehicle_and_gopath(); thread maps\enemyhq_audio::aud_convoy_start( var_3 ); var_3.cargo = []; wait( randomfloatrange( 1.2, 2 ) ); } while ( level.player_hit_convoy < 3 ) { level waittill( "safe_spawn_fast" ); var_2 = var_0[0]; var_1++; var_3 = var_2 maps\_vehicle::spawn_vehicle_and_gopath(); thread maps\enemyhq_audio::aud_convoy_start( var_3 ); var_3.cargo = []; } } convoy() { common_scripts\utility::flag_wait( "start_convoy" ); maps\_utility::delaythread( 11, common_scripts\utility::flag_set, "intro_littlebirds" ); wait 2; thread fast_convoy(); level.allies[0] thread ally_shoot_convoy(); level endon( "stop_convoy" ); thread watch_convoy_trig(); level.player_hit_convoy = 0; var_0 = 0; var_1 = getentarray( "intro_convoy", "targetname" ); var_2 = undefined; var_3 = 1; var_4 = 10; while ( var_3 < var_4 ) { if ( var_3 % 3 ) var_5 = var_1[0]; else var_5 = var_1[1]; level thread maps\_utility::notify_delay( "safe_spawn_fast", 10 ); var_2 = var_5 maps\_vehicle::spawn_vehicle_and_gopath(); thread maps\enemyhq_audio::aud_convoy_start( var_2 ); var_2.cargo = []; if ( common_scripts\utility::string_starts_with( var_2.classname, "script_vehicle_man_7t" ) ) var_2 load_up(); var_0++; if ( var_3 % 3 ) wait( randomfloatrange( 3, 4 ) ); else wait( randomfloatrange( 2.5, 3 ) ); var_3++; if ( level.player_hit_convoy > 0 ) var_4 = 6; } level.last_spawned_veh = var_2; level notify( "stop_fast_convoy" ); level waittill( "stop_convoy" ); } load_up() { var_0 = []; var_0[var_0.size] = "com_ammo_pallet"; var_0[var_0.size] = "berlin_barrelcluster_pallet_01"; var_0[var_0.size] = "shipping_frame_boxes"; var_0[var_0.size] = "com_ammo_pallet"; var_0[var_0.size] = "shipping_frame_boxes"; var_0[var_0.size] = "empty"; var_1 = 3; var_2 = anglestoforward( self gettagangles( "tag_body" ) ); for ( var_3 = 0; var_3 < var_1; var_3++ ) { var_4 = randomint( var_0.size ); if ( var_0[var_4] == "empty" ) continue; var_5 = self gettagorigin( "tag_body" ) + var_2 * -80 * var_3; self.cargo[self.cargo.size] = spawn( "script_model", var_5 ); self.cargo[self.cargo.size - 1].angles = self gettagangles( "tag_body" ); self.cargo[self.cargo.size - 1] setmodel( var_0[var_4] ); self.cargo[self.cargo.size - 1] linkto( self ); self.cargo[self.cargo.size - 1].linked_vehicle = self; } } watch_convoy_trig() { var_0 = getent( "convoy_touchup", "targetname" ); while ( isdefined( var_0 ) ) { var_0 waittill( "trigger", var_1 ); if ( isdefined( level.last_spawned_veh ) && var_1 == level.last_spawned_veh ) var_0 delete(); foreach ( var_3 in var_1.cargo ) var_3 delete(); var_1 delete(); } } player_get_mk32() { wait 4; if ( !common_scripts\utility::flag( "picked_up_mk32" ) ) { level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_grabthatgrenadelauncher" ); var_0 = 0; var_1 = 0.2; var_2 = 8; for (;;) { wait( var_1 ); if ( common_scripts\utility::string_starts_with( level.player getcurrentprimaryweapon(), "mk32_du" ) ) break; var_0++; if ( var_0 * var_1 > var_2 ) { level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_pickupthelauncher" ); var_2 = var_2 * 1.5; var_0 = 0; } } } level.allies[0] maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_thegrenadesareon" ); common_scripts\utility::flag_set( "start_convoy" ); wait 4.5; level.allies[0] thread maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_heretheycometag" ); } keegan_tinkers_with_rifle() { level waittill( "stop_intro_loop" ); wait 0.1; level.allies[1] maps\_utility::enable_ai_color(); maps\enemyhq_code::safe_activate_trigger_with_targetname( "keegan_post_tinker" ); var_0 = getnode( "keegan_please_shift_it", "targetname" ); level.allies[1] setgoalnode( var_0 ); level.allies[1].goalradius = 64; wait 0.2; level.allies[1] maps\_utility::gun_recall(); } go_street() { level.allies[0] thread maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_convoyclearletsmove" ); common_scripts\utility::flag_set( "intro_done" ); thread maps\enemyhq_audio::aud_convoy_done(); common_scripts\utility::flag_waitopen_or_timeout( "player_looking_out_window", 5 ); level notify( "keegan_stop_tinkering" ); level notify( "stop_intro_loop" ); waittillframeend; var_0 = getent( "beta_blocker_player_clip", "targetname" ); if ( isdefined( var_0 ) ) var_0 notsolid(); common_scripts\utility::flag_set( "FLAG_move_to_player_truck" ); if ( isdefined( level.intro_grenades ) ) { level.player giveweapon( "fraggrenade" ); level.player setweaponammoclip( "fraggrenade", level.intro_grenades ); } } merrick_look_at_flyby() { wait 2; level.allies[0] maps\_utility::disable_ai_color(); var_0 = common_scripts\utility::getstruct( "merrick_plane_look", "targetname" ); level.allies[0].animname = "baker"; var_0 maps\_anim::anim_reach_solo( level.allies[0], "merrick_intro_watch_planes" ); var_0 maps\_anim::anim_single_solo( level.allies[0], "merrick_intro_watch_planes" ); common_scripts\utility::flag_set( "merrick_done_lookat" ); level notify( "merrick_done_lookat" ); } ally_shoot_convoy() { level endon( "stop_convoy" ); self.old_weapon = self.weapon; self notify( "got_mk32dud" ); thread ally_grenade(); anim.grenadetimers["AI_teargas_grenade"] = randomintrange( 0, 20000 ); var_0 = self; var_1 = getent( "stick_me", "targetname" ); var_2 = 0; var_3 = 0; thread watch_last_truck(); for (;;) { var_1 waittill( "trigger", var_4 ); if ( var_4 maps\_vehicle::isvehicle() && var_0 != var_4 ) { var_0 = var_4; self setentitytarget( var_4 ); wait 0.5; var_5 = self getmuzzlepos(); var_6 = var_4.origin + ( 0, 0, 90 ); wait 0.5; self clearentitytarget( var_4 ); var_2++; if ( level.player_hit_convoy == 0 && common_scripts\utility::mod( var_2, 4 ) == 0 ) { if ( var_2 < 5 ) level.allies[0] thread maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_tagthetrucks" ); else level.allies[0] thread maps\enemyhq_code::char_dialog_add_and_go( "enemyhq_mrk_logantagem" ); } continue; } wait 1.2; } } watch_last_truck() { var_0 = getent( "stick_me", "targetname" ); var_1 = level.player; for (;;) { var_0 waittill( "trigger", var_2 ); if ( var_1 == var_2 ) continue; var_1 = var_2; if ( isdefined( level.last_spawned_veh ) && var_2 == level.last_spawned_veh ) { wait 3; if ( level.player_hit_convoy == 0 ) { setdvar( "ui_deadquote", &"ENEMY_HQ_YOU_FAILED_TO_HIT_ENOUGH" ); maps\_utility::missionfailedwrapper(); wait 20; } level notify( "stop_convoy" ); break; } } } ally_grenade() { level endon( "intro_done" ); for (;;) { level.allies[0] waittill( "missile_fire", var_0, var_1 ); playfxontag( common_scripts\utility::getfx( "vfx_glow_stickyg_static" ), var_0, "tag_origin" ); var_0.ally_fired = 1; var_0 thread track_dud(); } } handle_m32_launcher() { level notify( "watching_player_mk32" ); level endon( "watching_player_mk32" ); level endon( "death" ); level.mk32_intro_fire = 0; thread maps\enemyhq_audio::aud_listen_mk32_reload(); for (;;) { level.player waittill( "grenade_fire", var_0, var_1 ); if ( common_scripts\utility::string_starts_with( var_1, "mk32_du" ) ) { var_2 = level.player getweaponammoclip( "mk32_dud+eotech_sp_mk32dud" ); if ( var_2 == 0 ) level.player notify( level.c4_weaponname ); playfxontag( common_scripts\utility::getfx( "vfx_glow_stickyg_static" ), var_0, "tag_origin" ); var_0.ally_fired = 0; if ( level.mk32_intro_fire ) var_0 thread track_dud(); else var_0 thread track_live(); } } } handle_sticky_clacker() { self endon( "death" ); var_0 = 0; level.num_active_clacks = 0; for (;;) { var_1 = common_scripts\utility::waittill_any_return( "sticky_gone_boom", "new_sticky_attached", "clack_stickies" ); var_2 = getentarray( "live_sticky_grenade", "targetname" ); if ( var_1 == "sticky_gone_boom" ) { if ( var_2.size == 0 ) self notify( "cancel_clacker_ui" ); continue; } if ( var_1 == "clack_stickies" ) { level.my_clack_num = 0; level.player notify( "exploderize_me" ); self notify( "cancel_clacker_ui" ); continue; } if ( var_1 == "new_sticky_attached" ) { if ( var_2.size == 1 ) { var_0 = 1; thread watch_clacker(); } } } } safe_switch_to_detonator() { while ( level.switching_from_detonator ) wait 0.05; level.switching_to_detonator = 1; level.preclack_weapon = self getcurrentweapon(); self giveweapon( level.c4_weaponname ); self setweaponammoclip( level.c4_weaponname, 0 ); self switchtoweapon( level.c4_weaponname ); self disableweaponswitch(); self disableweaponpickup(); self waittill( "weapon_change", var_0 ); level.switching_to_detonator = 0; } safe_switch_from_detonator() { while ( level.switching_to_detonator ) wait 0.05; level.switching_from_detonator = 1; self switchtoweapon( level.preclack_weapon ); self waittill( "weapon_change" ); self takeweapon( level.c4_weaponname ); level.switching_from_detonator = 0; self enableweaponswitch(); self enableweaponpickup(); } watch_clacker() { self endon( "death" ); self notify( "stop_watch_clacker" ); self endon( "stop_watch_clacker" ); self notifyonplayercommand( level.c4_weaponname, "+actionslot 4" ); self setweaponhudiconoverride( "actionslot4", "inventory_stickybomb" ); refreshhudammocounter(); var_0 = common_scripts\utility::waittill_any_return( "cancel_clacker_ui", level.c4_weaponname ); if ( var_0 == "cancel_clacker_ui" ) { self setweaponhudiconoverride( "actionslot4", "none" ); self notifyonplayercommand( "", "+actionslot 4" ); refreshhudammocounter(); return; } thread safe_switch_to_detonator(); for (;;) { var_0 = common_scripts\utility::waittill_any_return( "detonate", level.c4_weaponname, "cancel_clacker_ui" ); thread safe_switch_from_detonator(); if ( var_0 == "detonate" ) { self notify( "clack_stickies" ); self setweaponhudiconoverride( "actionslot4", "none" ); self notifyonplayercommand( "", "+actionslot 4" ); refreshhudammocounter(); return; } else { if ( var_0 == level.c4_weaponname ) { self setweaponhudiconoverride( "actionslot4", "none" ); self notifyonplayercommand( "", "+actionslot 4" ); thread watch_clacker(); wait 1; continue; } if ( var_0 == "cancel_clacker_ui" ) { self setweaponhudiconoverride( "actionslot4", "none" ); self notifyonplayercommand( "", "+actionslot 4" ); refreshhudammocounter(); return; } else { iprintlnbold( "WATCH CLACKER messedup- got unknown message" ); return; } } } } track_live() { level.player endon( "death" ); var_0 = self.origin; self waittill( "explode", var_1 ); if ( !isdefined( self ) ) return; stopfxontag( common_scripts\utility::getfx( "vfx_glow_stickyg_static" ), self, "tag_origin" ); if ( level.mk32_mode != "delay" ) { var_2 = length( level.player.origin + ( 0, 0, 36 ) - self.origin ); if ( var_2 > 256 ) { magicgrenademanual( "fraggrenade", var_1, ( 0, 0, 0 ), 0 ); return; } } var_3 = ( var_0 - var_1 ) / 2; var_0 = var_3 + var_1; var_1 = var_1 - var_3; var_4 = 6; var_5 = bullettrace( var_0, var_1, 1, level.player, 1, 1 ); if ( isdefined( var_5 ) && isdefined( var_5["position"] ) ) { var_1 = var_5["position"] + var_5["normal"] * 1; var_6 = spawn( "script_model", var_1 ); var_6 setmodel( "weapon_sticky_grenade" ); var_6.angles = vectortoangles( var_5["normal"] ); var_6.targetname = "live_sticky_grenade"; var_7 = common_scripts\utility::spawn_tag_origin(); var_8 = undefined; var_9 = 1; if ( isdefined( var_5["entity"] ) ) { var_10 = var_5["entity"]; if ( isai( var_10 ) && isalive( var_10 ) ) { var_11 = 1; if ( !var_10.delayeddeath && !isdefined( var_10.melee ) && ( !isdefined( var_10.magic_bullet_shield ) || var_10.magic_bullet_shield == 0 ) ) { var_10 thread maps\_utility::magic_bullet_shield( 1 ); var_11 = 0; } else var_9 = 0; var_10 thread do_dud_damage( var_0, var_1 ); var_10 waittill( "damage", var_12, var_13, var_14, var_15, var_16, var_17, var_18, var_19, var_20, var_21 ); if ( !var_11 ) var_10 maps\_utility::stop_magic_bullet_shield(); var_22 = ""; if ( isdefined( var_19 ) && var_19 != "" ) var_22 = var_19; else if ( isdefined( var_18 ) && var_18 != "" ) var_22 = var_18; if ( var_22 != "" ) var_6 linkto( var_10, var_22 ); else var_9 = 0; } else var_6 linkto( var_10 ); } if ( var_9 ) { var_7 linkto( var_6 ); playfxontag( common_scripts\utility::getfx( "vfx_glow_stickyg_blink" ), var_7, "tag_origin" ); wait 7; stopfxontag( common_scripts\utility::getfx( "vfx_glow_stickyg_blink" ), var_7, "tag_origin" ); var_7 unlink(); var_7 delete(); var_6 unlink(); } var_6 delete(); } } do_dud_damage( var_0, var_1 ) { wait 0.05; magicbullet( "nosound_magicbullet", var_0, var_1, level.player ); } track_dud() { level endon( "death" ); var_0 = self.origin; var_1 = common_scripts\utility::spawn_tag_origin(); var_1 linkto( self ); thread maps\enemyhq_audio::aud_mk32_dud_beep( var_1 ); self waittill( "explode", var_2 ); if ( !isdefined( self ) ) return; stopfxontag( common_scripts\utility::getfx( "vfx_glow_stickyg_static" ), self, "tag_origin" ); var_3 = self.ally_fired; var_1 unlink(); var_4 = ( var_0 - var_2 ) / 2; var_0 = var_4 + var_2; var_2 = var_2 - var_4; var_5 = bullettrace( var_0, var_2, 1, level.player, 1, 1 ); if ( isdefined( var_5 ) && isdefined( var_5["position"] ) ) { var_6 = "default"; if ( isdefined( var_5["surfacetype"] ) ) var_6 = var_5["surfacetype"]; var_2 = var_5["position"] + var_5["normal"] * 1.5; var_7 = spawn( "script_model", var_2 ); var_7 setmodel( "weapon_sticky_grenade" ); var_7.angles = vectortoangles( var_5["normal"] ); var_8 = undefined; var_9 = undefined; if ( isdefined( var_5["entity"] ) ) { var_9 = var_5["entity"]; if ( isdefined( var_9.linked_vehicle ) ) var_9 = var_9.linked_vehicle; } if ( isdefined( var_9 ) && ( var_9 == level.player_truck || isai( var_9 ) && var_9.team == "allies" ) ) { if ( var_9 == level.player_truck ) setdvar( "ui_deadquote", &"ENEMY_HQ_YOUR_ACTIONS_COMPROMISED" ); else setdvar( "ui_deadquote", &"ENEMY_HQ_FRIENDLY_FIRE_WILL_NOT" ); maps\_utility::missionfailedwrapper(); wait 10; } var_10 = 0; if ( isdefined( var_9 ) && var_9 maps\_vehicle::isvehicle() ) { var_10 = 1; if ( !isdefined( var_9.already_stuck ) && var_3 == 0 ) { var_9.already_stuck = 0; if ( level.player_hit_convoy < 5 && level.player_hit_convoy % 2 == 0 ) thread player_hit_vo( var_9.vehicletype, level.player_hit_convoy ); level.player_hit_convoy++; level.player notify( "player_tagged_truck" ); } var_7 linkto( var_9 ); } var_1 linkto( var_7 ); thread maps\enemyhq_audio::aud_mk32_dud_beep_hit( var_1, var_10, var_6 ); playfxontag( common_scripts\utility::getfx( "vfx_glow_stickyg_blink" ), var_1, "tag_origin" ); wait 0.6; wait 7; stopfxontag( common_scripts\utility::getfx( "vfx_glow_stickyg_blink" ), var_1, "tag_origin" ); var_1 unlink(); var_1 delete(); var_7 unlink(); var_7 delete(); } else var_1 delete(); } player_hit_vo( var_0, var_1 ) { if ( !isdefined( level.hit_vo ) ) level.hit_vo = 0; var_2 = []; var_2[var_2.size] = "enemyhq_mrk_thatsahit"; var_2[var_2.size] = "enemyhq_mrk_confirmedhit"; var_2[var_2.size] = "enemyhq_mrk_thatstuck"; var_2[var_2.size] = "enemyhq_mrk_gotit"; var_2[var_2.size] = "enemyhq_mrk_ontarget"; level.allies[0] thread maps\enemyhq_code::char_dialog_add_and_go( var_2[level.hit_vo] ); level.hit_vo++; if ( level.hit_vo >= var_2.size ) level.hit_vo = 0; } watch_for_remote_turret_activate( var_0 ) { self endon( "death" ); self notify( "stop_watching_remote_sniper" ); self endon( "stop_watching_remote_sniper" ); var_1 = common_scripts\utility::getstruct( "sniper_placement", "targetname" ); var_2 = common_scripts\utility::getstruct( "sniper_teleport_default", "targetname" ); for (;;) { self waittill( "use_remote_turret" ); if ( self getstance() == "prone" ) self setstance( "crouch" ); var_3 = var_2.origin + anglestoforward( var_2.angles ) * var_0; var_4 = var_2.angles; maps\enemyhq_remoteturret::remote_turret_activate( "remote_sniper", var_3, var_4, level.remote_turret_right_arc, level.remote_turret_left_arc, level.remote_turret_top_arc, level.remote_turret_bottom_arc ); var_5 = common_scripts\utility::waittill_any_return( "use_remote_turret", "remote_turret_deactivate" ); if ( var_5 == "use_remote_turret" ) { setsaveddvar( "cg_cinematicFullScreen", "0" ); thread maps\enemyhq_code::set_black_fade( 1, 0.1 ); self notify( "remote_turret_nozoom" ); wait 0.2; var_6 = 0; if ( isdefined( level.sniper_wait_extra_black ) ) { var_6 = level.sniper_wait_extra_black; if ( isdefined( level.ps3 ) && level.ps3 ) var_6 = var_6 + 0.75; } self giveweapon( "remote_tablet_nopullout" ); level.pre_sniping_weapon = "remote_tablet_nopullout"; thread maps\enemyhq_remoteturret::remote_turret_deactivate(); if ( var_6 ) wait( var_6 ); cinematicingame( "ehq_tablet_outro" ); wait 0.1; self giveweapon( self.presniper_weapon, 0, 0, 0, 1 ); self setweaponammoclip( self.presniper_weapon, self.presniper_weapon_clip ); self setweaponammostock( self.presniper_weapon, self.presniper_weapon_stock ); self switchtoweapon( self.presniper_weapon ); self notify( "remote_sniper_pad_down" ); wait 0.9; thread maps\enemyhq_code::set_black_fade( 0, 0.1 ); wait 0.1; self.ignoreme = 0; self.allow_dry_fire = 0; if ( isdefined( level.presnipe_grenades ) ) { level.player giveweapon( "fraggrenade" ); level.player setweaponammoclip( "fraggrenade", level.presnipe_grenades ); level.presnipe_grenades = undefined; } wait 0.1; wait 1.5; self takeweapon( "remote_tablet" ); self takeweapon( "remote_tablet_nopullout" ); } } } handle_loopers() { var_0 = maps\_vehicle::create_vehicle_from_spawngroup_and_gopath( 983 ); common_scripts\utility::array_thread( var_0, ::handle_looper ); } handle_looper() { self endon( "kill_war_ambiance" ); var_0 = self.origin; var_1 = self.angles; var_2 = self.target; for (;;) { self waittill( "reached_dynamic_path_end" ); self hide(); self vehicle_teleport( var_0, var_1 ); wait 0.1; self show(); var_3 = common_scripts\utility::getstruct( var_2, "targetname" ); thread maps\_vehicle::vehicle_paths( var_3 ); } } cargo_choppers() { var_0 = getentarray( "intro_hide_on_load", "script_noteworthy" ); common_scripts\utility::array_call( var_0, ::show ); common_scripts\utility::array_call( var_0, ::notsolid ); var_1 = maps\_vehicle::create_vehicle_from_spawngroup_and_gopath( 982 ); thread handle_loopers(); var_2 = getentarray( "cargo_heli_group2", "targetname" ); foreach ( var_4 in var_2 ) { var_5 = getentarray( var_4.script_noteworthy, "targetname" ); foreach ( var_7 in var_5 ) var_7 hide(); var_4.cargo_item_spawners = var_5; } var_10 = 0; for ( var_11 = 1; var_11 > 0; var_11-- ) { for ( var_12 = var_2.size; var_12 > 0; var_12-- ) { if ( var_10 >= var_2.size ) var_10 = 0; thread spawn_cargo_carrier( var_2[var_10] ); var_10++; } } } spawn_cargo_carrier( var_0 ) { var_1 = maps\_vehicle::vehicle_spawn( var_0 ); wait 0.1; var_2 = var_0.cargo_item_spawners; var_3 = []; for ( var_4 = 0; var_4 < var_2.size; var_4++ ) { var_3[var_4] = spawn( var_2[var_4].classname, var_2[var_4].origin ); var_3[var_4].angles = var_2[var_4].angles; if ( var_3[var_4].classname == "script_model" ) { var_3[var_4] setmodel( var_2[var_4].model ); var_3[var_4] notsolid(); } var_3[var_4] linkto( var_1 ); } wait 0.1; thread maps\_vehicle::gopath( var_1 ); var_1 waittill( "death" ); foreach ( var_6 in var_3 ) var_6 delete(); } air_armada() { var_0 = getentarray( "air_armada", "targetname" ); common_scripts\utility::array_thread( var_0, ::oneshot_armada, 60000, 15 ); var_0 = getentarray( "air_armada_looper", "targetname" ); common_scripts\utility::array_thread( var_0, ::loop_armada, 140000, 28 ); } oneshot_armada( var_0, var_1 ) { if ( !isdefined( var_0 ) ) var_0 = 20000; if ( !isdefined( var_1 ) ) var_1 = int( self.script_noteworthy ); var_2 = anglestoforward( self.angles ); var_3 = self.origin + var_2 * var_0; self moveto( var_3, var_1, 1, 1 ); wait( var_1 ); self delete(); } loop_armada( var_0, var_1 ) { if ( !isdefined( var_0 ) ) var_0 = 30000.0; if ( !isdefined( var_1 ) ) var_1 = int( self.script_noteworthy ) * 1.5; var_1 = var_1 + ( randomfloat( 2 ) - 1 ); self endon( "kill_war_ambiance" ); var_2 = self.origin; var_3 = self.angles; for (;;) { var_4 = anglestoforward( self.angles ); var_5 = self.origin + var_4 * var_0; self moveto( var_5, var_1, 1, 1 ); thread maps\enemyhq_audio::aud_fx_planes(); wait( var_1 ); self hide(); wait( randomfloatrange( 3, 8 ) ); self.origin = var_2; self.angles = var_3; wait 0.1; self show(); } } ship_vista() { var_0 = getentarray( "ship_cards", "script_noteworthy" ); var_1 = 30000.0; var_2 = 300; foreach ( var_4 in var_0 ) { var_4.my_extra = 1; var_5 = 3; if ( var_4.origin[1] > -30000 ) var_5 = 0; else if ( var_4.origin[1] > -36000 ) var_5 = 1; else if ( var_4.origin[1] > -42000 ) { var_4.my_extra = 1.5; var_5 = 2; } else var_4.my_extra = 2; var_6 = anglestoforward( var_4.angles ); var_4.startpos = var_4.origin - var_6 * var_1 / 2; var_4.origpos = var_4.origin; var_4.startang = var_4.angles; var_4.dest = var_4.origin + var_6 * var_1 / 2 * var_4.my_extra; var_4.curr_movetime = var_2 / 2; var_4.my_speed = var_5; var_7 = spawn( "script_model", var_4.startpos ); var_7.startpos = var_7.origin; var_7.angles = var_4.angles; var_7.startang = var_7.angles; var_7.dest = var_4.dest; var_7.curr_movetime = var_2; var_7.my_speed = var_5; var_7 setmodel( var_4.model ); var_4 thread loop_new_ships(); var_7 thread loop_new_ships(); } } loop_new_ships() { var_0 = 30000.0; var_1 = 300; if ( !isdefined( self.my_extra ) ) self.my_extra = 1; self endon( "kill_war_ambiance" ); var_2 = anglestoforward( self.angles ); var_3 = [ 1, 1.3, 1.7, 2 ]; for (;;) { self moveto( self.dest, self.curr_movetime * var_3[self.my_speed] * self.my_extra, 1, 1 ); wait( self.curr_movetime * var_3[self.my_speed] * self.my_extra ); self.curr_movetime = var_1; self.origin = self.startpos; self.angles = self.startang; } } blow_wall() { common_scripts\utility::flag_wait( "kick_off_atrium_combat" ); var_0 = getent( "security_gate_crash_pieces2", "targetname" ); var_1 = common_scripts\utility::getstruct( "player_teleport_atrium", "targetname" ); var_0.animname = "hamburg_security_gate_crash"; common_scripts\utility::exploder( 666 ); common_scripts\utility::exploder( 777 ); playfxontag( level._effect["vfx_ehq_seat_trail"], var_0, "J_frag_05" ); playfxontag( level._effect["vfx_ehq_seat_trail"], var_0, "J_frag_17" ); playfxontag( level._effect["vfx_ehq_seat_trail"], var_0, "J_frag_23" ); playfxontag( level._effect["vfx_ehq_seat_trail"], var_0, "J_frag_28" ); playfxontag( level._effect["vfx_ehq_seat_trail"], var_0, "J_frag_49" ); playfxontag( level._effect["vfx_ehq_seat_trail"], var_0, "J_frag_51" ); playfxontag( level._effect["vfx_ehq_seat_trail"], var_0, "J_frag_30" ); var_0 useanimtree( level.scr_animtree[var_0.animname] ); thread maps\enemyhq_code::play_rumble_seconds( "damage_heavy", 1 ); var_1 thread maps\_anim::anim_single_solo( var_0, "security_gate_crash" ); wait 1; thread maps\enemyhq_code::play_rumble_seconds( "damage_light", 1 ); wait 1.25; thread maps\enemyhq_code::play_rumble_seconds( "damage_heavy", 1 ); } handle_intro_sniper_outline() { for (;;) { var_0 = gettime(); var_1 = anglestoforward( level.player getplayerangles() ); var_2 = common_scripts\utility::array_combine( level.drones["axis"].array, getaiarray() ); foreach ( var_4 in var_2 ) { if ( !isdefined( var_4 ) ) continue; if ( isdefined( var_4.dot_check_time ) && var_4.dot_check_time > var_0 ) continue; var_5 = 0.998; var_6 = 0; var_7 = vectornormalize( var_4.origin - level.player.origin ); if ( vectordot( var_1, var_7 ) >= var_5 ) var_6 = 1; if ( isdefined( var_4.has_target_shader ) && var_4.has_target_shader && ( !isdefined( var_4.disable_sniper_outline ) || !var_4.disable_sniper_outline ) ) { if ( var_6 ) continue; } if ( ( !isdefined( var_4.has_target_shader ) || var_4.has_target_shader == 0 ) && isdefined( var_4.disable_sniper_outline ) && var_4.disable_sniper_outline ) continue; if ( ( !isdefined( var_4.disable_sniper_outline ) || !var_4.disable_sniper_outline ) && var_6 ) { var_4.has_target_shader = 1; if ( var_4.team == "axis" ) var_4 maps\_utility::set_hudoutline( "enemy", 1 ); else var_4 maps\_utility::set_hudoutline( "friendly", 1 ); var_4.dot_check_time = var_0 + 2000; var_4 thread maps\enemyhq_remoteturret::remove_remote_turret_target_on_death(); continue; } var_4.has_target_shader = 0; var_4 notify( "remove_sniper_outline" ); } if ( isdefined( level.dog ) ) { if ( isdefined( level.dog.has_target_shader ) && level.dog.has_target_shader && isdefined( level.dog.disable_sniper_outline ) && level.dog.disable_sniper_outline ) { level.dog hudoutlinedisable(); level.dog.has_target_shader = 0; } else if ( ( !isdefined( level.dog.has_target_shader ) || !level.dog.has_target_shader ) && ( !isdefined( level.dog.disable_sniper_outline ) || !level.dog.disable_sniper_outline ) ) { level.dog maps\_utility::set_hudoutline( "friendly", 1 ); level.dog.has_target_shader = 1; } } wait 0.05; } } intro_plane_flyby_01() { var_0 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "intro_escort_01a" ); var_1 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "intro_escort_01b" ); var_2 = getentarray( "flybyA_hide_on_load", "script_noteworthy" ); common_scripts\utility::array_call( var_2, ::show ); var_3 = getent( "intro_transport_03", "targetname" ); var_4 = getent( "intro_transport_04", "targetname" ); var_5 = getent( "intro_transport_05", "targetname" ); var_3 thread maps\enemyhq_intro::intro_transport_mover( 65000, 17 ); var_4 thread maps\enemyhq_intro::intro_transport_mover( 65000, 17 ); var_5 thread maps\enemyhq_intro::intro_transport_mover( 65000, 17 ); } watch_weaponswitch() { if ( level.start_point != "introshoot" ) { wait 0.5; level.player waittill( "weapon_change", var_0 ); level.player disableweaponswitch(); } level.player disableweapons(); } digital_malarky( var_0, var_1 ) { level.player digitaldistortsetparams( 1, 0 ); wait 0.7; var_2 = 1; 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 = var_2 / var_7; var_9 = 90 / var_7; for ( var_10 = 0; var_4 > var_8; var_10 = var_10 + var_9 ) { level.player digitaldistortsetparams( cos( var_10 ), var_3 ); wait 0.05; var_4 = var_4 - var_8; } level.player digitaldistortsetparams( 0, 1 ); } swapout_mk32() { self giveweapon( level.player_intro_weapon ); if ( maps\_utility::player_has_weapon( "m9a1" ) ) self takeweapon( "m9a1" ); if ( maps\_utility::player_has_weapon( "freerunner" ) ) self takeweapon( "freerunner" ); self enableweaponswitch(); self enableweaponpickup(); common_scripts\utility::flag_wait( "FLAG_player_enter_truck" ); level.mk32_intro_fire = 0; } text_3d_ent( var_0 ) { } #using_animtree("generic_human"); pick_drone_patrol_anim() { var_0 = undefined; if ( self.update_drone_anim ) { var_0 = spawnstruct(); if ( randomint( 5 ) == 1 ) { self.moveplaybackrate = randomfloatrange( 0.9, 1.1 ); var_1 = %patrol_bored_patrolwalk_twitch; } else { self.moveplaybackrate = randomfloatrange( 0.95, 1.05 ); var_1 = %patrol_bored_patrolwalk; } var_0.runanim = var_1; var_2 = maps\_drone::get_anim_data( var_0.runanim ); var_0.anim_relative = var_2.anim_relative; var_0.run_speed = var_2.run_speed; return var_0; } return var_0; } pick_drone_gundown_anim() { var_0 = undefined; if ( self.update_drone_anim ) { var_0 = spawnstruct(); self.update_drone_anim = 0; if ( !randomint( 5 ) ) { self.moveplaybackrate = randomfloatrange( 0.9, 1.1 ); var_1 = randomint( level.gundown_twitch.size ); var_2 = level.gundown_twitch[var_1]; self.gundown_walk = undefined; } else { self.moveplaybackrate = randomfloatrange( 0.95, 1.05 ); if ( !isdefined( self.gundown_walk ) ) { var_1 = randomint( level.gundown_patrol.size ); self.gundown_walk = level.gundown_patrol[var_1]; } var_2 = self.gundown_walk; } var_0.runanim = var_2; var_3 = maps\_drone::get_anim_data( var_0.runanim ); var_0.anim_relative = var_3.anim_relative; var_0.run_speed = var_3.run_speed; return var_0; } return var_0; } watch_anim_end( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = "gundown"; self endon( "death" ); self endon( "goal" ); self.update_drone_anim = 1; for (;;) { self waittillmatch( "drone_anim", "end" ); self.update_drone_anim = 1; if ( var_0 == "gundown" ) var_1 = pick_drone_gundown_anim(); else var_1 = pick_drone_patrol_anim(); if ( !isdefined( self.last_runanim ) || isdefined( var_1 ) && var_1.runanim != self.last_runanim ) { self.last_runanim = var_1.runanim; var_2 = var_1.runanim; var_3 = var_1.run_speed; var_4 = var_1.anim_relative; if ( !var_4 ) thread maps\_drone::drone_move_z( var_3 ); else self notify( "drone_move_z" ); maps\_drone::drone_play_looping_anim( var_2, self.moveplaybackrate ); wait 0.3; } } } pick_drone_gundown_dummy() { return undefined; } field_activity() { level.runanimdebug = 0; var_0 = maps\_utility::array_spawn_targetname( "field_activity_drones" ); level.gundown_twitch = [ %patrol_bored_gundown_walk_twitch1, %patrol_bored_gundown_walk_twitch1, %patrol_bored_gundown_walk_twitch2, %patrol_bored_gundown_walk_twitch2, %patrol_bored_gundown_walk_twitch3, %patrol_bored_gundown_walk_twitch4, %patrol_bored_gundown_walk_twitch4 ]; level.gundown_patrol = [ %patrol_bored_gundown_walk1, %patrol_bored_gundown_walk1, %patrol_bored_gundown_walk2, %patrol_bored_gundown_walk2, %patrol_bored_gundown_walk3 ]; thread setup_soccer_scene(); foreach ( var_2 in var_0 ) { var_2.ignoreall = 1; if ( isdefined( var_2.script_noteworthy ) && var_2.script_noteworthy == "pushup_guy1" ) { var_2.animname = "generic"; var_2 thread maps\_anim::anim_loop_solo( var_2, "intro_pushups1" ); continue; } if ( isdefined( var_2.script_noteworthy ) && var_2.script_noteworthy == "pushup_guy2" ) { var_2.animname = "generic"; var_2 thread maps\_anim::anim_loop_solo( var_2, "intro_pushups2" ); continue; } if ( !isdefined( var_2.script_patroller ) ) { if ( randomint( 4 ) ) { var_2.debug_anim = 0; var_2.drone_move_time = -1; var_2 thread watch_anim_end(); var_2.drone_move_callback = ::pick_drone_gundown_dummy; continue; } var_2 thread watch_anim_end( "patrol" ); var_2.drone_move_time = -1; var_2.drone_move_callback = ::pick_drone_gundown_dummy; } } var_4 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "field_activity_veh_01" ); var_5 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "field_activity_veh_02" ); common_scripts\utility::flag_wait( "FLAG_player_enter_truck" ); foreach ( var_2 in var_0 ) { if ( isdefined( var_2 ) ) var_2 delete(); } } setup_soccer_scene() { var_0 = common_scripts\utility::getstruct( "field_soccer_struct", "targetname" ); var_1 = getent( "soccer_pass_guy1", "targetname" ); level.soccer_pass_guy1 = var_1 maps\_utility::spawn_ai( 1 ); var_2 = getent( "soccer_pass_guy2", "targetname" ); level.soccer_pass_guy2 = var_2 maps\_utility::spawn_ai( 1 ); var_3 = getent( "soccer_goal_guy1", "targetname" ); level.soccer_goal_guy1 = var_3 maps\_utility::spawn_ai( 1 ); var_4 = getent( "soccer_goal_guy2", "targetname" ); level.soccer_goal_guy2 = var_4 maps\_utility::spawn_ai( 1 ); level.soccer_goal_guy1.animname = "soccer_goal_guy1"; level.soccer_goal_guy2.animname = "soccer_goal_guy2"; level.soccer_pass_guy1.animname = "soccer_pass_guy1"; level.soccer_pass_guy2.animname = "soccer_pass_guy2"; level.soccerball_goal = maps\_utility::spawn_anim_model( "soccerball_goal", var_0.origin ); level.soccerball_goal setmodel( "soccer_ball" ); level.soccerball_goal.animname = "soccerball_goal"; level.soccerball_pass = maps\_utility::spawn_anim_model( "soccerball_pass", var_0.origin ); level.soccerball_pass setmodel( "soccer_ball" ); level.soccerball_pass.animname = "soccerball_pass"; var_5 = []; var_5[0] = level.soccer_pass_guy1; var_5[1] = level.soccer_pass_guy2; var_5[2] = level.soccerball_pass; var_6 = []; var_6[0] = level.soccer_goal_guy1; var_6[1] = level.soccer_goal_guy2; var_6[2] = level.soccerball_goal; var_0 thread maps\_anim::anim_loop( var_5, "soccer_scene_pass" ); var_0 thread maps\_anim::anim_loop( var_6, "soccer_scene_goal" ); common_scripts\utility::flag_wait( "FLAG_player_enter_truck" ); foreach ( var_8 in var_5 ) { if ( isdefined( var_8 ) ) var_8 delete(); } foreach ( var_8 in var_6 ) { if ( isdefined( var_8 ) ) var_8 delete(); } } exfil_sniper() { level.player endon( "death" ); common_scripts\utility::flag_wait( "start_exfil_sniper" ); level.remote_turret_right_arc = 30; level.remote_turret_left_arc = 30; level.remote_turret_top_arc = 2; level.remote_turret_bottom_arc = 25; wait_for_dpad(); level.player.remote_canreload = 1; level.player setup_sniper_view( "exfil_sniper_struct" ); level.player endon( "remote_turret_deactivate" ); common_scripts\utility::flag_wait( "remote_sniper_ready" ); level.remote_turret_max_fov = 45; level.remote_turret_min_fov = 5; var_0 = common_scripts\utility::getstruct( "exfil_sniper_struct", "targetname" ); level.player.turret_look_at_ent.origin = var_0.origin; level.remote_turret_current_fov = 25; level.player lerpfov( level.remote_turret_current_fov, 0.05 ); level.player thread intro_dof( 0.3 ); level waittill( "done_sniping_early" ); level.player notify( "use_remote_turret" ); } butchdance() { level.player endon( "death" ); common_scripts\utility::flag_wait( "enable_butchdance" ); level.remote_turret_right_arc = 30; level.remote_turret_left_arc = 10; level.remote_turret_top_arc = 8; level.remote_turret_bottom_arc = 8; wait_for_dpad(); level.player.remote_canreload = 1; level.player setup_sniper_view( "butchdance_struct", 2000 ); level.player endon( "remote_turret_deactivate" ); common_scripts\utility::flag_wait( "remote_sniper_ready" ); level.remote_turret_max_fov = 30; level.remote_turret_min_fov = 5; var_0 = common_scripts\utility::getstruct( "butchdance_struct", "targetname" ); level.player.turret_look_at_ent.origin = var_0.origin; var_1 = 4; level.remote_turret_current_fov = 20; level.player lerpfov( level.remote_turret_current_fov, 0.05 ); level.player thread intro_dof( 0.3 ); level.player waittill( "weapon_fired" ); level notify( "hot_butchdance_action" ); level waittill( "done_sniping_early" ); wait 0.5; level.player notify( "use_remote_turret" ); } rpg_kibble() { level.player endon( "death" ); level endon( "cancel_rpg_sniper" ); common_scripts\utility::flag_wait( "start_rpg_kibble" ); level.remote_turret_right_arc = 5; level.remote_turret_left_arc = 5; level.remote_turret_top_arc = 3; level.remote_turret_bottom_arc = 3; wait_for_dpad(); level.player.remote_canreload = 1; var_0 = common_scripts\utility::spawn_tag_origin(); level.player setup_sniper_view( "rpg_kibble_struct" ); level.player endon( "remote_turret_deactivate" ); common_scripts\utility::flag_wait( "remote_sniper_ready" ); level.remote_turret_max_fov = 15; level.remote_turret_min_fov = 4; var_1 = common_scripts\utility::getstruct( "rpg_kibble_struct", "targetname" ); level.player.turret_look_at_ent.origin = var_1.origin; level.remote_turret_current_fov = 12; level.player lerpfov( level.remote_turret_current_fov, 0.05 ); level.player thread intro_dof( 0.3 ); level notify( "ppoor_kibble_action" ); common_scripts\utility::flag_wait_or_timeout( "done_sniping_early", 60 ); wait 0.5; level.player notify( "use_remote_turret" ); var_0 delete(); } sniper_vip_breach() { level.player endon( "death" ); common_scripts\utility::flag_wait( "activate_vip_sniper" ); var_0 = common_scripts\utility::getstruct( "vip_sniper_breach_struct", "targetname" ); level.remote_turret_start_look = var_0.origin; level.remote_turret_right_arc = 10; level.remote_turret_left_arc = 10; level.remote_turret_top_arc = 5; level.remote_turret_bottom_arc = 5; wait_for_dpad(); level.player.remote_canreload = 1; level.player setup_sniper_view( "vip_sniper_breach_struct", 1000 ); level.player endon( "remote_turret_deactivate" ); common_scripts\utility::flag_wait( "remote_sniper_ready" ); level.remote_turret_max_fov = 20; level.remote_turret_min_fov = 2; level.player.turret_look_at_ent.origin = var_0.origin; var_1 = 4; level.remote_turret_current_fov = 6; level.player lerpfov( level.remote_turret_current_fov, 0.05 ); level.player thread intro_dof( 0.3 ); level.player waittill( "weapon_fired" ); level.player giveweapon( "freerunner" ); level.player.presniper_weapon = "freerunner"; level.player giveweapon( "freerunner" ); level.player.presniper_weapon = "freerunner"; level notify( "vip_breach_hot" ); level common_scripts\utility::waittill_notify_or_timeout( "done_sniping_early", 10 ); wait 0.5; level.player notify( "use_remote_turret" ); } wait_for_dpad() { level.player notifyonplayercommand( "scripted_sniper_dpad", "+actionslot 1" ); level.player setweaponhudiconoverride( "actionslot1", "killiconheadshot" ); refreshhudammocounter(); setsaveddvar( "cg_cinematicFullScreen", "0" ); cinematicingame( "ehq_tablet_intro", 1 ); var_0 = 0; while ( !var_0 ) { var_0 = 1; level.player waittill( "scripted_sniper_dpad" ); if ( level.player isthrowinggrenade() || common_scripts\utility::flag( "sniper_block_player_nade" ) ) var_0 = 0; } level.presnipe_grenades = level.player getweaponammoclip( "fraggrenade" ); level.player takeweapon( "fraggrenade" ); level.player.ignoreme = 1; level.player setweaponhudiconoverride( "actionslot1", "none" ); level.player notifyonplayercommand( "", "+actionslot 1" ); level.player.presniper_weapon = level.player getcurrentweapon(); level.player.presniper_weapon_clip = level.player getweaponammoclip( level.player.presniper_weapon ); level.player.presniper_weapon_stock = level.player getweaponammostock( level.player.presniper_weapon ); level.player giveweapon( "remote_tablet" ); level.player switchtoweapon( "remote_tablet" ); level.player notify( "player_switching_to_tablet" ); wait 1.0; pausecinematicingame( 0 ); wait 0.4; thread maps\enemyhq_code::set_black_fade( 1, 0.15 ); maps\_utility::delaythread( 0.45, maps\enemyhq_code::set_black_fade, 0, 0.15, 1 ); wait 0.25; } sniper_nade_setup() { if ( common_scripts\utility::flag_exist( "sniper_block_player_nade" ) ) return; common_scripts\utility::flag_init( "sniper_block_player_nade" ); level.sniper_player_nades = 0; level.player sniper_grenade_check(); } sniper_grenade_check() { for (;;) { self waittill( "grenade_fire", var_0 ); common_scripts\utility::flag_set( "sniper_block_player_nade" ); thread sniper_grenade_check_dieout( var_0 ); } } sniper_grenade_check_dieout( var_0 ) { level.sniper_player_nades++; var_0 common_scripts\utility::waittill_notify_or_timeout( "death", 10 ); level.sniper_player_nades--; waittillframeend; if ( !level.sniper_player_nades ) common_scripts\utility::flag_clear( "sniper_block_player_nade" ); } setup_sniper_view( var_0, var_1 ) { self endon( "death" ); if ( !isdefined( var_1 ) ) var_1 = 0; level.player thread watch_for_remote_turret_activate( var_1 ); var_2 = common_scripts\utility::getstruct( "sniper_placement", "targetname" ); level.remote_sniper_origin = var_2.origin; var_3 = common_scripts\utility::getstruct( var_0, "targetname" ); if ( !isdefined( self.turret_look_at_ent ) ) { self.turret_look_at_ent = spawn( "script_model", self.origin ); self.turret_look_at_ent setmodel( "tag_origin" ); } self.turret_look_at_ent.origin = var_3.origin; self notify( "use_remote_turret" ); } intro_objectives() { var_0 = maps\_utility::obj( "find_ajax" ); objective_add( var_0, "active", &"ENEMY_HQ_LOCATE_AJAX_USING_THE" ); objective_current( var_0 ); common_scripts\utility::flag_wait( "bishop_glimpse_over" ); maps\_utility::objective_complete( var_0 ); common_scripts\utility::flag_wait( "picked_up_mk32" ); var_1 = maps\_utility::obj( "tag_trucks" ); objective_add( var_1, "active", &"ENEMY_HQ_MARK_THE_CONVOY_WITH" ); objective_current( var_1 ); level.player waittill( "player_tagged_truck" ); maps\_utility::objective_complete( var_1 ); }