/******************************************************************* * Decompiled By: Bog * Decompiled File: betrayal_code.gsc * Game: Call of Duty: Advanced Warfare * Platform: PC * Function Count: 366 * Decompile Time: 6739 ms * Timestamp: 4/22/2024 2:25:32 AM *******************************************************************/ //Function Number: 1 office_scene_master_handler() { office_scene_pre_setup(); office_scene_setup(); office_scene_cleanup(); level thread confrontation_scene_master_handler(); } //Function Number: 2 office_scene_pre_setup() { level thread office_scene_player_actions_manager(); level.player freezecontrols(1); thread office_scene_vignette_setup(); maps\betrayal_util::prepare_blast_doors("roof_window_blastdoor",-200); maps\betrayal_util::prepare_blast_doors("roof_slide_blastdoor",-160); maps\betrayal_util::prepare_blast_doors("roof_slide_blastdoor_mrX",-160); level.gideon pushplayer(1); level.gideon maps\_utility::set_moveplaybackrate(1.025,0.5); common_scripts\utility::flag_set("flag_dialogue_start_office"); common_scripts\utility::flag_wait("flag_office_start_intro_pcap"); thread maps\betrayal_lighting::lighting_target_dof(level.player,level.gideon,2.5,23); office_scene_intro_pcap(); } //Function Number: 3 office_scene_intro_pcap() { if(isdefined(getent("flag_office_gideon_start_moving","targetname"))) { maps\_utility::activate_trigger_with_targetname("flag_office_gideon_start_moving"); } level.gideon.dynamicturnscaling = 1; level.gideon maps\betrayal_util::setup_squad_member_for_scene(); level.player freezecontrols(0); var_00 = maps\_utility::spawn_anim_model("player_rig",level.player.origin,level.player.angles); var_00 hide(); level.player lerpfov(40,0.05); var_01 = 0.5; level.player playerlinktoblend(var_00,"tag_player",var_01); level.player common_scripts\utility::delaycall(var_01,::playerlinktodelta,var_00,"tag_player",0.75,8,22,14,4,1); level.player enableslowaim(); level.player enableweapons(); var_00 common_scripts\utility::delaycall(var_01,::show); var_02 = [var_00,level.gideon]; var_03 = maps\betrayal_util::get_ent_by_targetname("animorg_intro_moment"); var_03 thread maps\_anim::anim_single_solo_run(level.gideon,"intro"); var_03 maps\_anim::anim_single_solo(var_00,"intro"); var_00 delete(); level.gideon maps\betrayal_util::setup_squad_member_for_gameplay(); level.player unlink(); level.player disableslowaim(); level.player allowcrouch(1); office_scene_player_give_just_hands(); level thread maps\betrayal_util::start_player_office_scene_walk_sway(); maps\_utility::autosave_by_name(); } //Function Number: 4 office_scene_setup() { level thread office_scene_move_to_secret_room(); common_scripts\utility::flag_set("flag_dialogue_start_office"); } //Function Number: 5 office_scene_move_to_secret_room() { level thread office_scene_player_movement_manager(); office_scene_gideon_to_roof(); office_scene_gideon_to_stairs(); office_scene_gideon_enter_secret_room(); } //Function Number: 6 office_scene_gideon_to_roof() { common_scripts\utility::flag_set("flag_objective_office_scene_follow_gideon"); common_scripts\utility::flag_set("office_scene_heli_go_1"); common_scripts\utility::flag_wait("flag_office_gideon_at_roof_door"); var_00 = maps\betrayal_util::get_ents_by_targetname("office_hallway_door_right"); var_01 = maps\betrayal_util::get_ents_by_targetname("office_hallway_door_left"); soundscripts\_snd::snd_message("office_hallway_door_open",var_01,var_00); maps\betrayal_util::open_double_sliding_doors_toggle("office_hallway_door",1); common_scripts\utility::flag_set("flag_office_gideon_clear_to_move_to_roof"); maps\_utility::activate_trigger_with_targetname("trigger_office_gideon_to_roof"); maps\betrayal_util::wait_for_trigger_and_ai_single("trigger_office_alone_on_roof",level.gideon); soundscripts\_snd::snd_message("office_hallway_door_close",var_01,var_00); maps\betrayal_util::open_double_sliding_doors_toggle("office_hallway_door",1); common_scripts\utility::flag_set("flag_office_clean_up_awards"); } //Function Number: 7 office_scene_gideon_to_stairs() { common_scripts\utility::run_thread_on_targetname("trigger_office_start_gideon_double_stairs",::office_scene_gideon_down_double_stairs); common_scripts\utility::flag_wait("flag_office_gideon_at_stairs_door"); var_00 = maps\betrayal_util::get_ents_by_targetname("office_roof_door_right"); var_01 = maps\betrayal_util::get_ents_by_targetname("office_roof_door_left"); soundscripts\_snd::snd_message("office_roof_door_open",var_01,var_00); maps\betrayal_util::open_double_sliding_doors_toggle("office_roof_door",0.75); if(isdefined(getent("trigger_office_gideon_to_stairs","targetname"))) { maps\_utility::activate_trigger_with_targetname("trigger_office_gideon_to_stairs"); } common_scripts\utility::flag_set("flag_office_gideon_ready_to_move_down_stairs"); maps\betrayal_util::wait_for_trigger_and_ai_single("trigger_office_in_stairwell",level.gideon); maps\_utility::autosave_by_name(); soundscripts\_snd::snd_message("office_roof_door_close",var_01,var_00); maps\betrayal_util::open_double_sliding_doors_toggle("office_roof_door",1); common_scripts\_exploder::exploder(1999); } //Function Number: 8 office_scene_gideon_down_double_stairs() { self waittill("trigger"); var_00 = maps\betrayal_util::get_ent_by_targetname("animorg_atlas_stairs"); var_00 maps\_anim::anim_reach_solo(level.gideon,"atlas_bldg_double_stairs"); var_00 maps\_anim::anim_single_solo_run(level.gideon,"atlas_bldg_double_stairs"); var_00 delete(); } //Function Number: 9 office_scene_gideon_enter_secret_room() { maps\_utility::trigger_wait_targetname("trigger_office_gideon_to_swipe_door"); var_00 = maps\betrayal_util::get_ent_by_targetname("animorg_atlas_keycard"); level.gideon_walking_down_stairs = 1; var_00 maps\_anim::anim_reach_solo(level.gideon,"atlas_bldg_swipe_door"); common_scripts\utility::flag_set("flag_office_gideon_scanning_door"); soundscripts\_snd::snd_message("bet_gideon_arm_scanner"); common_scripts\utility::flag_set("flag_dialogue_office_door"); var_00 maps\_anim::anim_single_solo_run(level.gideon,"atlas_bldg_swipe_door"); var_00 delete(); } //Function Number: 10 office_scene_open_swipe_door(param_00) { var_01 = getent("confrontation_door_security_scanner","targetname"); var_02 = getent("confrontation_door_security_scanner_glow","targetname"); var_01 setmodel("security_lock_01_unlocked"); var_02 setmodel("security_lock_01_unlocked_glow"); wait(2.75); var_03 = maps\betrayal_util::get_ents_by_targetname("confrontation_room_enter_door_left"); var_03 soundscripts\_snd::snd_message("aud_scanner_door_open"); thread maps\betrayal_util::open_sliding_door_toggle(var_03,"confrontation_room_enter_door",0.5); wait(0.5); thread office_scene_scripted_player_blocker_move_with_gideon(); maps\betrayal_util::wait_for_trigger_and_ai_single("trigger_everyone_in_secret_room",level.gideon); level thread maps\betrayal_util::open_sliding_door_toggle(var_03,"confrontation_room_enter_door",1); common_scripts\utility::flag_set("flag_objective_office_scene_follow_gideon_complete"); } //Function Number: 11 office_scene_player_actions_manager() { level.player disableweapons(); level.player giveweapon("iw5_unarmed_nullattach"); wait(0.5); level.player switchtoweapon("iw5_unarmed_nullattach"); level.player disableweaponswitch(); level.player maps\_shg_utility::setup_player_for_scene(); level.player allowjump(0); level.player allowprone(0); level.player disableoffhandweapons(); level.player disableoffhandsecondaryweapons(); level.player allowsprint(0); common_scripts\utility::flag_wait("flag_confrontation_give_player_real_gun"); level.player takeweapon("iw5_unarmed_nullattach"); var_00 = level.player getweaponslist("primary"); level.player enableweaponswitch(); level.player switchtoweapon(var_00[0]); level.player disableweapons(); level.player allowjump(1); level.player allowprone(1); level.player enableoffhandweapons(); level.player enableoffhandsecondaryweapons(); level.player allowsprint(1); } //Function Number: 12 office_scene_player_give_just_hands() { level.player allowmelee(0); level.player allowsprint(0); level.player setmovespeedscale(0.47); } //Function Number: 13 office_scene_player_movement_manager() { level thread office_scene_player_handle_move_speed(); common_scripts\utility::flag_wait("trigger_office_scene_player_at_confrontation"); level.player maps\_utility::player_speed_default(1); } //Function Number: 14 office_scene_player_handle_move_speed() { var_00 = 0.05; var_01 = 0.65; var_02 = 0; var_03 = 120; var_04 = 500; var_05 = 200; level.player setmovespeedscale(1); level.playerspeedscale = 1; var_06 = 1; while(!common_scripts\utility::flag("flag_office_gideon_scanning_door")) { var_07 = distance(level.gideon.origin,level.player.origin); var_08 = vectornormalize(anglestoforward(level.gideon.angles) + vectornormalize(level.gideon.origin - level.player.origin)); var_09 = level.gideon maps\_shg_utility::get_differentiated_velocity(); var_0A = level.player maps\_shg_utility::get_differentiated_velocity(); if(var_07 > var_04 || abs(level.gideon.origin[2] - level.player.origin[2]) > 110) { var_0B = vectorlerp((level.playerspeedscale,0,0),(1,0,0),0.1); if(isdefined(level.gideon_walking_down_stairs) && level.gideon_walking_down_stairs) { } level.player setmovespeedscale(var_0B[0]); level.playerspeedscale = var_0B[0]; wait 0.05; continue; } var_0C = 0 - office_scene_player_signed_distance_to_plane(level.gideon.origin,var_08,level.player.origin); var_0D = var_0C; var_06 = maps\_shg_utility::linear_map_clamp(var_0D,var_02,var_03,var_00,var_01); var_0E = length(var_09); var_0F = length(var_0A); if(var_0E > var_0F) { var_06 = var_06 * 1.1; } waittillframeend; if(isdefined(level.gideon_walking_down_stairs) && level.gideon_walking_down_stairs) { var_06 = var_06 * 0.9; } var_0B = vectorlerp((level.playerspeedscale,0,0),(var_06,0,0),0.32); level.player setmovespeedscale(var_0B[0]); level.playerspeedscale = var_0B[0]; wait 0.05; } level.gideon_walking_down_stairs = undefined; var_10 = 1 - var_06 / 50; while(var_06 < 1) { var_06 = var_06 + var_10; level.player setmovespeedscale(var_06); wait(0.1); } level.player setmovespeedscale(1); } //Function Number: 15 office_scene_player_signed_distance_to_plane(param_00,param_01,param_02) { return vectordot(param_02 - param_00,param_01); } //Function Number: 16 office_scene_vignette_setup() { thread office_scene_vignette_setup_civilians(); maps\betrayal_util::add_spawn_function_to_noteworthy("office_scene_silent_heli",::office_scene_silence_heli); thread office_scene_vignette_helicopters(); thread office_scene_vignette_drones(); thread office_scene_vignette_boats(); level thread office_scene_vignette_spawn_personal_guard_hallway(); wait(0.5); maps\_utility::activate_trigger_with_targetname("office_scene_vig_civ_trigger"); maps\_utility::activate_trigger_with_targetname("office_scene_vig_civ_walker_trigger"); } //Function Number: 17 office_scene_vignette_setup_civilians() { common_scripts\utility::run_thread_on_targetname("office_scene_civilian_spawn_trig",::maps\betrayal_util::civilian_setup,"roof_scene_civilian_react_trig",0,0); common_scripts\utility::run_thread_on_targetname("office_scene_civilian_walker_spawn_trig",::maps\betrayal_util::civilian_walker_setup,"roof_scene_civilian_react_trig",0); common_scripts\utility::run_thread_on_targetname("office_scene_vig_civ_trigger",::maps\betrayal_util::civilian_setup,10000,1); common_scripts\utility::run_thread_on_targetname("office_scene_vig_civ_walker_trigger",::maps\betrayal_util::civilian_walker_setup,"roof_scene_civilian_react_trig",0); thread office_scene_scripted_dodge_gideon_civilian(); thread office_scene_vignette_handle_atlas_ai(); wait(0.5); level.office_civ = getent("spawner_office_atlas_employee","script_noteworthy"); level.office_civ.animname = "atlas_emp_1"; } //Function Number: 18 office_scene_vignette_drones() { common_scripts\utility::flag_wait("office_scene_heli_go_3"); var_00 = getentarray("sewer_scene_drone","targetname"); foreach(var_02 in var_00) { var_03 = var_02 maps\_vehicle::spawn_vehicle_and_gopath(); var_03 thread office_scene_vignette_handle_drones(); } } //Function Number: 19 office_scene_vignette_handle_drones() { common_scripts\utility::flag_wait("trigger_office_scene_player_at_confrontation"); if(isdefined(self)) { self delete(); } } //Function Number: 20 office_scene_vignette_boats() { level thread office_scene_vignette_boat_loop_handler("vig_civ_boat","trigger_office_scene_player_at_confrontation"); } //Function Number: 21 office_scene_vignette_boat_loop_handler(param_00,param_01) { var_02 = getentarray(param_00,"targetname"); level.boats = []; level.active_boats = []; foreach(var_04 in var_02) { var_05 = var_04 maps\_utility::spawn_vehicle(); level.boats = common_scripts\utility::array_add(level.boats,var_05); if(issubstr(var_05.model,"watertaxi_01")) { level thread maps\betrayal_fx::treadfx_ai_boats_taxi_vista(var_05); continue; } level thread maps\betrayal_fx::treadfx_ai_boats_yacht_vista(var_05); } while(!common_scripts\utility::flag(param_01)) { if(level.active_boats.size < 6) { var_07 = 0; for(;;) { var_08 = 1; var_07 = randomintrange(0,level.boats.size); if(!common_scripts\utility::array_contains(level.active_boats,level.boats[var_07])) { break; } wait(0.05); } level.active_boats = common_scripts\utility::array_add(level.active_boats,level.boats[var_07]); level.boats[var_07] childthread office_scene_vignette_send_boat_through_path(); wait(randomintrange(7,12)); } wait(1); } common_scripts\utility::flag_wait(param_01); foreach(var_0A in level.boats) { if(isdefined(var_0A)) { level.boats = common_scripts\utility::array_remove(level.boats,var_0A); var_0A delete(); } } } //Function Number: 22 office_scene_vignette_send_boat_through_path(param_00) { var_01 = self.origin; var_02 = self.angles; var_03 = getvehiclenode(self.target,"targetname"); thread maps\_vehicle_code::_vehicle_paths(var_03); self startpath(var_03); self waittill("reached_dynamic_path_end"); self vehicle_teleport(var_01,var_02,0); level.active_boats = common_scripts\utility::array_remove(level.active_boats,self); } //Function Number: 23 office_scene_vignette_helicopters() { common_scripts\utility::flag_wait("office_scene_heli_go_1"); var_00 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("office_scene_warbird01"); var_00 soundscripts\_snd::snd_message("aud_ambient_helicopter","office_scene_warbird01"); if(level.nextgen) { thread maps\betrayal_util::spawn_and_handle_looping_helicopters("office_scene_looping_heli","trigger_office_scene_player_at_confrontation",2); } else { thread maps\betrayal_util::spawn_and_handle_looping_helicopters("office_scene_looping_heli","trigger_office_scene_player_at_confrontation",1); } common_scripts\utility::flag_wait("office_scene_heli_go_2"); if(level.nextgen) { var_01 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("office_scene_warbird02"); var_01 soundscripts\_snd::snd_message("aud_ambient_helicopter","office_scene_warbird02"); var_01 thread office_scene_scripted_handle_landing_heli("trigger_office_gideon_to_swipe_door"); common_scripts\utility::flag_wait("office_scene_heli_go_3"); var_02 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("high_fly_warbird01"); var_02 soundscripts\_snd::snd_message("aud_ambient_helicopter","high_fly_warbird01"); if(level.nextgen) { var_03 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("high_fly_warbird02"); var_03 soundscripts\_snd::snd_message("aud_ambient_helicopter","high_fly_warbird02"); var_04 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("high_fly_warbird03"); var_04 soundscripts\_snd::snd_message("aud_ambient_helicopter","high_fly_warbird03"); } } } //Function Number: 24 office_scene_silence_heli() { self vehicle_turnengineoff(); } //Function Number: 25 office_scene_vignette_handle_atlas_ai() { var_00 = getentarray("office_scene_atlas_ai_spawner","targetname"); foreach(var_02 in var_00) { var_03 = common_scripts\utility::getstructarray(var_02.target,"targetname"); foreach(var_05 in var_03) { var_06 = var_05 maps\betrayal_util::civilian_spawn_single(var_02,"ai",1); var_06 office_scene_vignette_set_atlas_walker_urgent_walk_anims(); var_06 maps\_utility::forceuseweapon("iw5_bal27_sp_variablereddot","primary"); var_06.disablearrivals = 1; var_06.disableexits = 1; var_06 setgoalpos(var_06.origin); var_06 thread office_scene_vignette_atlas_walker_manager(); wait 0.05; var_06 forceteleport(var_05.origin,var_05.angles); var_06 maps\betrayal_util::remove_display_name(); var_06 maps\betrayal_util::stop_current_animations(); var_06.animname = "generic"; var_06 maps\_utility::set_idle_anim("bet_ceremony_security_idle_guy01"); } } } //Function Number: 26 office_scene_vignette_spawn_personal_guard_hallway() { var_00 = []; var_01 = maps\betrayal_util::get_ents_by_targetname("office_scene_spawn_personal_guard_hallway"); foreach(var_03 in var_01) { var_04 = var_03 maps\_utility::spawn_ai(1); var_00 = common_scripts\utility::array_add(var_00,var_04); } foreach(var_04 in var_00) { var_04 maps\betrayal_util::remove_display_name(); var_04 thread maps\betrayal_util::delete_ai_on_flag("trigger_office_scene_player_at_confrontation"); var_04 maps\betrayal_util::stop_current_animations(); var_04.animname = "generic"; var_07 = var_04.animation; var_04 maps\_utility::set_idle_anim(var_07); var_04 thread maps\_anim::anim_generic_loop(var_04,var_07); if(!isdefined(level.office_guard)) { level.office_guard = var_04 common_scripts\utility::spawn_tag_origin(); level.office_guard.animname = "atlas_emp_2"; } } } //Function Number: 27 office_scene_vignette_atlas_walker_manager() { if(isdefined(self.script_linkto)) { var_00 = getent(self.script_linkto,"script_linkname"); var_00 waittill("trigger"); var_01 = getnode(self.target,"targetname"); maps\_utility::set_goal_node(var_01); self.goalradius = 16; self notify("move"); self waittill("goal"); self pushplayer(1); } common_scripts\utility::flag_wait("trigger_office_scene_player_at_confrontation"); if(isdefined(self)) { self delete(); } } //Function Number: 28 office_scene_vignette_set_atlas_walker_urgent_walk_anims() { if(isdefined(self.isurgentwalk)) { return; } maps\_utility::gun_remove(); self.isurgentwalk = 1; self.alwaysrunforward = 1; self.alertlevel = "noncombat"; self.alertlevelint = 0; var_00 = ["exposed","exposed_crouch"]; var_01[1] = %npc_urgent_walk_arrive_1; var_01[2] = %npc_urgent_walk_arrive_2; var_01[3] = %npc_urgent_walk_arrive_3; var_01[4] = %npc_urgent_walk_arrive_4; var_01[6] = %npc_urgent_walk_arrive_6; var_01[7] = %npc_urgent_walk_arrive_7; var_01[8] = %npc_urgent_walk_arrive_8; var_01[9] = %npc_urgent_walk_arrive_9; var_02[1] = %npc_urgent_walk_exit_1; var_02[2] = %npc_urgent_walk_exit_2; var_02[3] = %npc_urgent_walk_exit_3; var_02[4] = %npc_urgent_walk_exit_4; var_02[6] = %npc_urgent_walk_exit_6; var_02[7] = %npc_urgent_walk_exit_7; var_02[8] = %npc_urgent_walk_exit_8; var_02[9] = %npc_urgent_walk_exit_9; var_03[0] = %npc_urgent_walk_turn_2; var_03[1] = %npc_urgent_walk_turn_1; var_03[2] = %npc_urgent_walk_turn_4; var_03[3] = %npc_urgent_walk_turn_7; var_03[5] = %npc_urgent_walk_turn_9; var_03[6] = %npc_urgent_walk_turn_6; var_03[7] = %npc_urgent_walk_turn_3; var_03[8] = %npc_urgent_walk_turn_2; var_04 = [%npc_urgent_walk_twitch01_idle,%npc_urgent_walk_twitch02_idle,%npc_urgent_walk_twitch03_idle]; maps\_utility::set_npc_anims("urgent_walk_betrayal",%det_casual_walk_fast_burke,%det_casual_walk_fast_burke,var_04,var_01,var_02,var_00,var_03,var_03,undefined); } //Function Number: 29 office_scene_scripted_dodge_gideon_civilian() { var_00 = maps\betrayal_util::get_ent_by_targetname("office_scene_gideon_interact_civilian"); var_01 = var_00 maps\_utility::spawn_ai(1); var_00.count = 1; var_01.target = var_00.target; var_01.animname = "generic"; var_02 = "civilian_walk_hurried"; var_01.runanim = level.scr_anim[var_01.animname][var_02][0]; var_01 maps\_utility::set_run_anim_array(var_02,undefined,1); var_01.is_walking = 0; var_01 thread office_scene_scripted_dodge_gideon_civ_wait_for_gideon_in_range(175); var_01 thread maps\betrayal_util::civilian_actor_play_idle(); common_scripts\utility::flag_wait("office_scene_civilian_dodges_gideon"); var_03 = getnode(var_01.target,"targetname"); var_01 maps\_utility::set_goal_node(var_03); var_01.goal_node = var_03; var_01 maps\betrayal_util::stop_current_animations(); var_01 maps\betrayal_util::civilian_detach_props(); var_01.goalradius = 16; var_01 notify("move"); var_01.is_walking = 1; var_01 waittill("goal"); var_01.is_walking = 0; var_01 thread maps\betrayal_util::civilian_actor_play_idle(); common_scripts\utility::flag_wait("trigger_office_scene_player_at_confrontation"); if(isdefined(var_01)) { var_01 delete(); } } //Function Number: 30 office_scene_scripted_dodge_gideon_civ_wait_for_gideon_in_range(param_00) { self endon("death"); maps\_utility::waittill_entity_in_range(level.gideon,param_00); maps\betrayal_util::stop_current_animations(); self.animname = "generic"; var_01 = "bet_lobby_civ_sidestep_R"; maps\_anim::anim_single_solo(self,var_01); thread maps\betrayal_util::civilian_walker_idle_when_blocked(); self notify("move"); } //Function Number: 31 office_scene_scripted_handle_landing_heli(param_00) { var_01 = maps\betrayal_util::get_ent_by_targetname("heli_landing_civ"); var_02 = var_01 maps\_utility::spawn_ai(1); var_02 maps\_utility::set_ignoreall(1); var_02.animname = "generic"; var_03 = "civilian_walk_hurried"; var_02.runanim = level.scr_anim[var_02.animname][var_03][0]; var_02 maps\_utility::set_run_anim_array(var_03,undefined,1); var_02 thread maps\betrayal_util::civilian_actor_play_idle(); wait(23); var_02 maps\betrayal_util::stop_current_animations(); var_04 = getnode(var_02.target,"targetname"); var_02 maps\_utility::set_goal_node(var_04); var_02 maps\betrayal_util::civilian_detach_props(); var_02.goalradius = 16; var_02 notify("move"); wait(10); var_05 = common_scripts\utility::getstruct("land_heli_path02","targetname"); thread maps\_vehicle_code::_vehicle_paths(var_05); wait 0.05; maps\_utility::trigger_wait_targetname("trigger_office_gideon_to_swipe_door"); var_02 delete(); if(isdefined(self)) { self delete(); } } //Function Number: 32 office_scene_scripted_player_blocker_move_with_gideon() { var_00 = maps\betrayal_util::get_ent_by_targetname("block_player_from_confrontation_entrance"); var_00 linkto(level.gideon); wait(5); var_00 notsolid(); var_00 delete(); } //Function Number: 33 office_scene_cleanup() { maps\_utility::clear_all_color_orders("allies"); common_scripts\utility::flag_wait("flag_objective_office_scene_follow_gideon_complete"); } //Function Number: 34 confrontation_scene_master_handler(param_00) { confrontation_scene_setup(); if(!isdefined(param_00)) { confrontation_scene_hologram(); confrontation_scene_irons_lockdown(); } if(isdefined(param_00) && param_00 == "qte") { level.ilana maps\betrayal_util::setup_squad_member_for_scene(); common_scripts\utility::flag_set("flag_confrontation_give_player_real_gun"); confrontation_scene_cleanup_hologram(); confrontation_scene_cleanup_confrontation(); var_01 = maps\betrayal_util::get_ents_by_targetname("confrontation_room_exit_door_right"); thread maps\betrayal_util::open_sliding_door_toggle(var_01,"confrontation_room_exit_door",0.2); level.player maps\_shg_utility::setup_player_for_scene(); level.confrontation_rig show(); level.player playerlinktodelta(level.confrontation_rig,"tag_player",0.75,10,10,7,7,1); if(level.nextgen) { setsaveddvar("r_adaptiveSubdivBaseFactor",0.01); } } confrontation_scene_escape(); if(level.nextgen) { setsaveddvar("r_adaptiveSubdivBaseFactor",1.5); } confrontation_scene_cleaup(); level thread escape_scene_master_handler(); } //Function Number: 35 hoverscreen_chromo_anim2(param_00,param_01) { var_02 = 0; if(param_01) { var_02 = param_01; } var_03 = param_00 * 20; var_04 = 0; var_05 = level.chromo_offset; level.chromo_offset = var_02; thread confrontation_hudoutline_animate(); for(var_04 = 0;var_04 < var_03;var_04++) { var_06 = 1 / var_03 * var_05; level.chromo_offset = level.chromo_offset + var_06; setsaveddvar("r_chromaticSeparationG",level.chromo_offset * -1); setsaveddvar("r_chromaticSeparationR",level.chromo_offset); wait(0.05); } } //Function Number: 36 create_confrontation_static_overlay(param_00,param_01,param_02) { level.chromo_offset = 5; setsaveddvar("r_chromaticAberrationTweaks",1); setsaveddvar("r_chromaticAberration",2); setsaveddvar("r_chromaticSeparationG",0); setsaveddvar("r_chromaticSeparationR",0); setsaveddvar("r_chromaticSeparationB",0); setsaveddvar("r_chromaticAberrationAlpha",1); var_03 = 1; return var_03; } //Function Number: 37 confrontation_static_start() { level.player.conf_static = create_confrontation_static_overlay("overlay_static",10,0.05); thread hoverscreen_chromo_anim2(6,0); soundscripts\_snd::snd_message("bet_hologram_start"); } //Function Number: 38 confrontation_hudoutline_setup() { setsaveddvar("r_hudoutlinehaloblurradius",10); setsaveddvar("r_hudoutlineenable",1); setsaveddvar("r_hudoutlinecurvywidth",1); setsaveddvar("r_hudoutlinecurvywhen",1); setsaveddvar("r_hudoutlinepostmode",3); setsaveddvar("r_hudoutlinecurvylumscale",0.2); setsaveddvar("r_hudoutlinecurvydarkenscale",0.25); setsaveddvar("r_hudoutlinecurvyblurradius",0.5); setsaveddvar("r_hudoutlinecurvydepth",0.8); if(!isdefined(level.player.detection_highlight_hud_effect)) { level.player.detection_highlight_hud_effect_old = level.player.detection_highlight_hud_effect; level.player.detection_highlight_hud_effect = newclienthudelem(level.player); level.player.detection_highlight_hud_effect.color = (0,0.005,0.01); level.player.detection_highlight_hud_effect.alpha = 0.01; } } //Function Number: 39 confrontation_hologram_fadeout() { var_00 = 0; level.hologram_rand_level = 0; var_01 = 1; while(level.confrontation_holo.size < 4) { wait(0.05); } foreach(var_03 in level.confrontation_holo) { var_03.hidden = 0; } while(var_01) { foreach(var_03 in level.confrontation_holo) { if(!isdefined(var_03)) { level.confrontation_holo = undefined; var_01 = 0; } } var_07 = 10000; if(var_01) { var_08 = level.player.origin; foreach(var_03 in level.confrontation_holo) { var_0A = var_03 gettagorigin("tag_origin"); var_0B = distance((var_08[0],var_08[1],0),(var_0A[0],var_0A[1],0)); if(var_0B < var_07) { var_07 = var_0B; } if(var_03.hidden == 0 && var_0B < 50) { if(var_0B < 36) { var_03 hide(); var_03.hidden = 1; } else if(randomfloat(100) < 50) { var_03 hide(); } else { var_03 show(); } } if(var_0B >= 50) { var_03 show(); var_03.hidden = 0; } } var_0D = randomfloat(1) * 2 - 1; var_0E = 1 - clamp(var_07 / 52,0,1); level.hologram_rand_level = var_0D * var_0E; wait(0.05); } } } //Function Number: 40 confrontation_hudoutline_animate() { thread confrontation_hologram_fadeout(); level.hudoutline_conf_intensity = 1; var_00 = 0; while(isdefined(level.player.detection_highlight_hud_effect)) { var_01 = perlinnoise2d(var_00 * 2,0.5,3,2,0.5) * 5; var_02 = clamp(var_01 * 1.2 - 1,0,1) * 2.5; if(isdefined(level.hologram_rand_level)) { var_02 = clamp(var_02 + level.hologram_rand_level * 5,-5,5) * 2.5; } setsaveddvar("r_hudoutlinecurvylumscale",0.15 + 0.1 * var_01 * level.hudoutline_conf_intensity); setsaveddvar("r_hudoutlinehalolumscale",0.15 + 0.1 * var_01 * level.hudoutline_conf_intensity); setsaveddvar("r_chromaticSeparationG",level.chromo_offset * -1 * var_02); setsaveddvar("r_chromaticSeparationR",level.chromo_offset * var_02); var_00 = var_00 + 0.05; wait(0.05); } } //Function Number: 41 confrontation_hudoutline_cleanup() { var_00 = 1; var_01 = 20; var_02 = 0; var_03 = level.chromo_offset; level.chromo_offset = var_00; for(var_02 = 0;var_02 < var_01;var_02++) { var_04 = 1 / var_01 * var_03; var_05 = 1 / var_01; level.chromo_offset = level.chromo_offset - var_04; level.hudoutline_conf_intensity = level.hudoutline_conf_intensity - var_05; level.chromo_offset = clamp(level.chromo_offset,0,20); level.hudoutline_conf_intensity = clamp(level.hudoutline_conf_intensity,0,20); setsaveddvar("r_chromaticSeparationG",level.chromo_offset * -1); setsaveddvar("r_chromaticSeparationR",level.chromo_offset); wait(0.05); } setsaveddvar("r_hudoutlineenable",0); setsaveddvar("r_chromaticAberrationTweaks",0); setsaveddvar("r_chromaticAberration",0); level.player.detection_highlight_hud_effect destroy(); level.player.detection_highlight_hud_effect = level.player.detection_highlight_hud_effect_old; } //Function Number: 42 confrontation_scene_setup() { maps\betrayal_util::spawn_squad("start_confrontation",0,1); var_00 = maps\betrayal_util::spawn_ai_from_targetname_single("spawner_confrontation_irons",1,0); var_00.animname = "irons"; var_00 setcontents(0); confrontation_hudoutline_setup(); level thread maps\betrayal_lighting::lighting_confrontation_auto_dof(level.player,var_00); var_00 attach("npc_mp443_nocamo","TAG_WEAPON_RIGHT",1); var_00 hidepart("TAG_RAIL_MASTER_ON","npc_mp443_nocamo"); var_00 hide(); var_00.ignoreall = 1; var_00.ignoreme = 1; var_01 = maps\betrayal_util::spawn_ai_from_targetname_single("spawner_confrontation_technologist",1,0); var_01.animname = "technologist"; var_01 setcontents(0); var_01 hide(); var_02 = maps\betrayal_util::spawn_ai_from_targetname_single("spawner_confrontation_guard1",1,0); var_02 maps\_utility::gun_remove(); var_02 hide(); var_02 maps\_utility::place_weapon_on("iw5_sn6_sp_opticsreddot","right"); var_02.animname = "guard1"; var_02.ignoreall = 1; var_02.ignoreme = 1; var_02.allowdeath = 1; var_02.a.nodeath = 1; var_02.noragdoll = 1; var_02 maps\betrayal_util::remove_display_name(); level.escape_take_down_guard = var_02; var_03 = maps\_utility::spawn_anim_model("flash_bang",var_02.origin,var_02.angles); var_04 = maps\_utility::spawn_anim_model("irons_chair",var_00.origin,var_00.angles); var_04 setmodel("dem_irons_chair_01_cloaktrans"); var_04 hide(); var_05 = maps\_utility::spawn_anim_model("guest_chair",var_00.origin,var_00.angles); var_05 hide(); var_05 setmodel("dem_irons_guest_chair_01_rig_cloaktrans"); var_06 = maps\_utility::spawn_anim_model("jammer",level.ilana.origin,level.ilana.angles); var_07 = maps\betrayal_util::get_ent_by_targetname("animorg_confrontation"); var_07 maps\_anim::anim_first_frame_solo(level.ilana,"confrontation_pt1"); var_07 maps\_anim::anim_first_frame_solo(var_00,"confrontation_pt1"); var_07 maps\_anim::anim_first_frame_solo(var_01,"confrontation_pt1"); var_07 maps\_anim::anim_first_frame_solo(var_02,"confrontation_pt1"); var_07 maps\_anim::anim_first_frame_solo(var_03,"confrontation_pt1"); var_07 maps\_anim::anim_first_frame_solo(var_04,"confrontation_pt1"); var_07 maps\_anim::anim_first_frame_solo(var_05,"confrontation_pt1"); var_07 maps\_anim::anim_first_frame_solo(var_06,"confrontation_pt1"); level.hologram_guys = [level.ilana,level.gideon,var_00,var_01,var_02,var_03,var_04,var_05,var_06]; var_08 = maps\betrayal_util::spawn_ai_from_targetname_single("spawner_confrontation_ironsreal",1,0); var_08 hide(); var_08.animname = "irons"; var_08.ignoreall = 1; var_08.ignoreme = 1; var_08 maps\betrayal_util::remove_display_name(); var_09 = maps\betrayal_util::spawn_ai_from_targetname_single("spawner_confrontation_guard2",1,0); var_09 maps\_utility::gun_remove(); var_09 hide(); var_09 maps\_utility::place_weapon_on("iw5_sn6_sp_opticsreddot","right"); var_09.animname = "guard2"; var_09.ignoreall = 1; var_09.ignoreme = 1; var_09.allowdeath = 1; var_09.a.nodeath = 1; var_09.noragdoll = 1; var_09 thread maps\_utility::magic_bullet_shield(); var_09 maps\betrayal_util::remove_display_name(); level.escape_shoot_guard = var_09; var_0A = maps\_utility::spawn_anim_model("player_pistol",level.player.origin + (0,0,-100),level.player.angles); level.confrontation_rig = maps\_utility::spawn_anim_model("player_rig",level.player.origin,level.player.angles); level.confrontation_rig hide(); level.confrontation_guys = [level.ilana,level.gideon,var_08,var_02,var_09,var_0A,level.confrontation_rig]; level.escape_guys1 = [level.ilana,var_02,var_09,level.confrontation_rig]; level.escape_guys2_a = [var_02,level.confrontation_rig]; level.escape_guys2_b = [level.ilana,var_09]; level.escape_guys3 = [var_09,level.ilana]; level.escape_guys3_a = [var_09]; level.escape_guys3_b = [level.ilana]; common_scripts\utility::flag_set("flag_dialogue_start_confrontation"); common_scripts\utility::flag_set("confrontation_start_lighting"); wait 0.05; var_0B = var_00 getorigin(); var_0B = var_0B + (0,0,-150); var_00 overridelightingorigin(var_0B); var_01 overridelightingorigin(var_0B); var_00 overridereflectionprobe(var_0B); var_01 overridereflectionprobe(var_0B); var_04 overridelightingorigin(var_0B); var_05 overridelightingorigin(var_0B); var_04 overridereflectionprobe(var_0B); var_05 overridereflectionprobe(var_0B); } //Function Number: 43 confrontation_scene_hologram() { var_00 = maps\betrayal_util::get_ent_by_targetname("animorg_confrontation"); var_00 maps\_anim::anim_reach_solo(level.gideon,"confrontation_pt1"); maps\_utility::autosave_by_name(); level.ilana maps\betrayal_util::setup_squad_member_for_scene(); level.gideon maps\betrayal_util::setup_squad_member_for_scene(); if(level.nextgen) { setsaveddvar("r_adaptiveSubdivBaseFactor",0.01); } var_00 maps\_anim::anim_single(level.hologram_guys,"confrontation_pt1"); confrontation_scene_cleanup_hologram(); maps\_utility::autosave_by_name(); } //Function Number: 44 confrontation_scene_irons_no_gun(param_00) { param_00 setmodel("irons_casual_nogun"); } //Function Number: 45 confrontation_scene_cleanup_hologram() { foreach(var_01 in level.hologram_guys) { if(!common_scripts\utility::array_contains(level.confrontation_guys,var_01)) { var_01 delete(); } } } //Function Number: 46 confrontation_scene_open_flashbang_door(param_00) { var_01 = maps\betrayal_util::get_ents_by_targetname("confrontation_room_exit_door_right"); thread maps\betrayal_util::open_sliding_door_toggle(var_01,"confrontation_room_exit_door",0.2,0.1); } //Function Number: 47 confrontation_scene_flashbang_explode(param_00) { soundscripts\_snd::snd_message("bet_conf_flash_bang_exp"); level.player lightsetforplayer("betrayal_interior_flash"); maps\_utility::vision_set_changes("betrayal_interior_flash",0.02); level.player playrumbleonentity("grenade_rumble"); wait(1); if(level.nextgen) { level.player lightsetforplayer("betrayal_interior_confrontation_2"); maps\_utility::vision_set_changes("betrayal_interior",2); return; } level.player lightsetforplayer("betrayal_interior_darker"); maps\_utility::vision_set_changes("betrayal_interior_darker",2); } //Function Number: 48 confrontation_scene_irons_lockdown() { var_00 = maps\betrayal_util::get_ent_by_targetname("animorg_confrontation"); common_scripts\utility::flag_set("confrontation2_start_lighting"); soundscripts\_snd::snd_music_message("betrayal_scene_begin"); var_01 = maps\betrayal_util::get_ents_by_targetname("confrontation_room_exit_door_right"); thread maps\betrayal_util::open_sliding_door_toggle(var_01,"confrontation_room_exit_door",0.2); level.player maps\_shg_utility::setup_player_for_scene(); level.player playerlinktodelta(level.confrontation_rig,"tag_player",0.75,0,0,0,0,1); level.player enableslowaim(); var_02 = 0.5; level.confrontation_rig common_scripts\utility::delaycall(var_02,::show); level.player common_scripts\utility::delaycall(var_02 + 0.1,::lerpviewangleclamp,2,0,1,15,15,10,8); common_scripts\utility::flag_set("flag_confrontation_give_player_real_gun"); foreach(var_04 in level.confrontation_guys) { var_04 show(); } var_06 = getent("betrayal_conf_ilana_origin","targetname"); level.confrontation_guys[0] overridelightingorigin(var_06.origin); var_07 = getent("betrayal_confrontation_guard1_origin","targetname"); var_08 = getent("betrayal_confrontation_guard2_origin","targetname"); level.confrontation_guys[3] overridelightingorigin(var_07.origin); level.confrontation_guys[4] overridelightingorigin(var_08.origin); var_00 maps\_anim::anim_single(level.confrontation_guys,"confrontation_pt2"); confrontation_scene_cleanup_confrontation(); common_scripts\utility::flag_set("flag_dialog_confrontation_mrX"); level.player lerpviewangleclamp(2,0,1,10,10,7,7); var_00 maps\_anim::anim_single(level.escape_guys1,"confrontation_pt2_pause"); maps\_utility::autosave_by_name(); } //Function Number: 49 confrontation_scene_cleanup_confrontation() { foreach(var_01 in level.confrontation_guys) { if(!common_scripts\utility::array_contains(level.escape_guys1,var_01)) { if(var_01 == level.gideon) { var_01 maps\_utility::stop_magic_bullet_shield(); } var_01 delete(); } } } //Function Number: 50 confrontation_scene_escape() { var_00 = maps\betrayal_util::get_ent_by_targetname("animorg_confrontation"); common_scripts\utility::flag_set("escape_lighting"); level.ilana defaultlightingorigin(); common_scripts\utility::flag_set("flag_dialog_confrontation_go"); soundscripts\_snd::snd_message("bet_conf_fire_suppression"); var_00 maps\_anim::anim_single(level.escape_guys1,"escape_pt1"); level notify("escape_pt1_done"); if(!common_scripts\utility::flag("flag_escape_pt1_passed")) { confrontation_scene_qte_kick_slomo_stop(); var_00 maps\_anim::anim_single(level.escape_guys1,"escape_pt1_fail"); wait(100); } soundscripts\_snd::snd_music_message("post_betrayal_action"); level thread confrontation_scene_escape_player_rise(var_00); var_00 maps\_anim::anim_single(level.escape_guys2_b,"escape_pt2"); level notify("escape_pt2_done"); if(!common_scripts\utility::flag("flag_escape_pt2_passed")) { confrontation_scene_qte_shoot_slomo_stop(); var_00 maps\_anim::anim_single(level.escape_guys3,"escape_pt3_fail"); wait(100); } var_01 = level.escape_shoot_guard setcontents(0); level.player disableslowaim(); level.player unlink(); level.confrontation_rig delete(); thread confrontation_handle_player_clip(); maps\_player_exo::player_exo_activate(); level thread confrontation_scene_escape_guard_dies(var_00); common_scripts\utility::flag_set("flag_dialog_confrontation_leave"); soundscripts\_snd::snd_message("bet_conf_kill_guard"); var_00 maps\_anim::anim_single_solo_run(level.escape_guys3_b[0],"escape_pt3"); foreach(var_03 in level.escape_guys1) { if(!isremovedentity(var_03) && var_03 != level.ilana) { if(!isai(var_03)) { var_03 delete(); } } } maps\_utility::autosave_by_name(); } //Function Number: 51 confrontation_scene_escape_player_rise(param_00) { param_00 maps\_anim::anim_single(level.escape_guys2_a,"escape_pt2"); level.escape_take_down_guard.allowdeath = 1; level.escape_take_down_guard.a.nodeath = 1; level.escape_take_down_guard.noragdoll = 1; level.escape_take_down_guard maps\_utility::gun_remove(); level.escape_take_down_guard kill(); } //Function Number: 52 confrontation_scene_escape_qte_fail(param_00) { if(!common_scripts\utility::flag("missionfailed")) { if(param_00.animname == "player_rig") { setdvar("ui_deadquote",&"BETRAYAL_FAIL_ESCAPE"); } else { setdvar("ui_deadquote",&"BETRAYAL_FAIL_ESCAPE_SHOOT"); } maps\_utility::missionfailedwrapper(); } } //Function Number: 53 confrontation_scene_escape_qte_kick(param_00) { level endon("escape_pt1_done"); var_01 = level.escape_take_down_guard maps\_shg_utility::hint_button_tag("melee","j_knee_le"); var_01 thread confrontation_scene_button_clean_up("escape_pt1_done"); confrontation_scene_qte_kick_slomo_start(); while(!common_scripts\utility::flag("flag_escape_pt1_passed")) { if(level.player meleebuttonpressed()) { confrontation_scene_qte_kick_slomo_stop(); common_scripts\utility::flag_set("flag_escape_pt1_passed"); break; } wait(0.05); } var_01 maps\_shg_utility::hint_button_clear(); } //Function Number: 54 confrontation_scene_escape_qte_kick_kill(param_00) { level.player maps\_upgrade_challenge::give_player_challenge_kill(1); } //Function Number: 55 confrontation_scene_button_clean_up(param_00) { level waittill(param_00); if(isdefined(self)) { maps\_shg_utility::hint_button_clear(); } } //Function Number: 56 confrontation_scene_escape_qte_raise_gun(param_00) { confrontation_scene_qte_shoot_slomo_start(); level.ilana maps\betrayal_util::setup_squad_member_for_gameplay(); level.player maps\_shg_utility::setup_player_for_gameplay(); level.player disableoffhandweapons(); level.player disableoffhandsecondaryweapons(); level.player notify("stop_player_walk_sway"); level.player thread maps\_utility::blend_movespeedscale_default(); level.player setmovespeedscale(1); level.player lerpviewangleclamp(2,0,1,15,15,10,10); param_00 hide(); } //Function Number: 57 confrontation_scene_escape_qte_shoot(param_00) { level endon("escape_pt2_done"); for(;;) { level.escape_shoot_guard waittill("damage",var_01,var_02); if(var_02 == level.player) { if(level.escape_shoot_guard.damagelocation == "helmet" || level.escape_shoot_guard.damagelocation == "head") { level.player maps\_upgrade_challenge::give_player_challenge_headshot(1); } else { level.player maps\_upgrade_challenge::give_player_challenge_kill(1); } confrontation_scene_qte_shoot_slomo_stop(); common_scripts\utility::flag_set("flag_escape_pt2_passed"); level.player enableoffhandweapons(); level.player enableoffhandsecondaryweapons(); break; } wait(0.05); } } //Function Number: 58 confrontation_scene_escape_guard_dies(param_00) { param_00 maps\_anim::anim_single(level.escape_guys3_a,"escape_pt3"); level.escape_shoot_guard.allowdeath = 1; level.escape_shoot_guard.a.nodeath = 1; level.escape_shoot_guard.noragdoll = 1; level.escape_shoot_guard maps\_utility::stop_magic_bullet_shield(); level.escape_shoot_guard kill(); } //Function Number: 59 confrontation_scene_gun_swap(param_00) { level.escape_shoot_guard maps\_utility::gun_remove(); level.ilana maps\_utility::gun_recall(); } //Function Number: 60 confrontation_scene_qte_kick_slomo_start() { setslowmotion(1,0.6,0.2); soundscripts\_snd::snd_message("bet_conf_slo_mo_kick_start"); } //Function Number: 61 confrontation_scene_qte_kick_slomo_stop() { setslowmotion(0.6,1,0.2); soundscripts\_snd::snd_message("bet_conf_slo_mo_kick_stop"); } //Function Number: 62 confrontation_scene_qte_shoot_slomo_start() { setslowmotion(1,0.2,1.3); soundscripts\_snd::snd_message("bet_conf_slo_mo_shoot_start"); } //Function Number: 63 confrontation_scene_qte_shoot_slomo_stop() { setslowmotion(0.2,1,0.2); soundscripts\_snd::snd_message("bet_conf_slo_mo_shoot_stop"); } //Function Number: 64 confrontation_scene_player_rumble_heavy(param_00) { level.player playrumbleonentity("grenade_rumble"); } //Function Number: 65 confrontation_scene_player_rumble_light(param_00) { level.player playrumbleonentity("damage_heavy"); } //Function Number: 66 confrontation_scene_cleaup() { maps\_utility::clear_all_color_orders("allies"); } //Function Number: 67 confrontation_handle_player_clip() { var_00 = maps\betrayal_util::get_ent_by_targetname("confrontation_pass_ilona_blocker"); var_00.org_pos = var_00.origin; var_00.close_pos = var_00.origin - (0,0,128); var_00 moveto(var_00.close_pos,0.1); wait(7.25); var_00 moveto(var_00.org_pos,0.1); escape_scene_setup_firedoor("escape_scene_fire_safety_drop_door"); var_01 = maps\betrayal_util::get_ent_by_targetname("escape_scene_fire_safety_drop_door"); var_01.col notsolid(); var_01.col connectpaths(); } //Function Number: 68 escape_scene_master_handler() { common_scripts\utility::flag_set("flag_dialogue_start_escape"); escape_scene_setup(); escape_scene_sentinel_makes_contact(); escape_scene_cleanup(); level thread roof_scene_master_handler(); } //Function Number: 69 escape_scene_setup() { escape_scene_setup_firedoor("escape_scene_fire_safety_drop_door"); escape_scene_setup_firedoor("escape_scene_fire_safety_drop_door_guards"); escape_scene_setup_firedoor("escape_scene_fire_safety_drop_door_climb"); level thread escape_scene_start_hallway_drop_door(); escape_scene_setup_firedoor("escape_scene_elevator_door"); level.escape_pa = maps\betrayal_util::get_ent_by_targetname("roof_escape_PA"); level.escape_pa.animname = "PA"; } //Function Number: 70 escape_scene_cleanup() { common_scripts\utility::flag_set("flag_escape_clean_up_hallway"); maps\betrayal_util::clean_up_ai_single(level.ilana); maps\_utility::clear_all_color_orders("axis"); maps\_utility::clear_all_color_orders("allies"); } //Function Number: 71 escape_scene_setup_firedoor(param_00) { var_01 = maps\betrayal_util::get_ents_by_targetname(param_00); foreach(var_03 in var_01) { var_03.org_pos = var_03.origin; var_04 = maps\betrayal_util::get_ents_by_targetname(var_03.target); foreach(var_06 in var_04) { if(var_06.classname == "script_origin") { var_03.open_org = (var_03.origin[0],var_03.origin[1],var_06.origin[2]); } if(var_06.classname == "script_brushmodel") { var_03.col = var_06; } var_07 = var_03 getorigin(); var_07 = var_07 + (0,0,-5); var_03 overridelightingorigin(var_07); if(level.currentgen) { var_08 = getent("door_lighting","targetname"); var_03 overridelightingorigin(var_08.origin); } } if(isdefined(var_03.col)) { var_03.col linkto(var_03); } if(!var_03 maps\_utility::ent_flag_exist("fire_door_closed")) { var_03 maps\_utility::ent_flag_init("fire_door_closed"); } var_03 maps\_utility::ent_flag_set("fire_door_closed"); } } //Function Number: 72 escape_scene_open_firedoor(param_00,param_01,param_02) { maps\_utility::ent_flag_clear("fire_door_closed"); if(!isdefined(param_01)) { param_01 = 0; } if(!isdefined(param_02)) { param_02 = 0; } self moveto(self.open_org,param_00,param_01,param_02); } //Function Number: 73 escape_scene_close_firedoor(param_00,param_01,param_02) { maps\_utility::ent_flag_set("fire_door_closed"); if(!isdefined(param_01)) { param_01 = 0; } if(!isdefined(param_02)) { param_02 = 0; } self moveto(self.org_pos,param_00,param_01,param_02); } //Function Number: 74 escape_scene_sentinel_makes_contact() { common_scripts\utility::flag_set("flag_objective_escape_scene_start"); escape_scene_rush_for_door(); escape_scene_hallway_run(); escape_scene_hallway_climb(); } //Function Number: 75 escape_scene_rush_for_door() { thread maps\betrayal_util::handle_ally_keep_up_with_player(level.ilana); level thread escape_scene_manage_guards(); common_scripts\utility::flag_set("flag_escape_scene_rush_door_open"); maps\_utility::activate_trigger_with_targetname("trigger_escape_ilana_into_hallway"); level thread maps\betrayal_util::start_fire_suppression_group("escape_scene_fire_supression_point_hallway","flag_escape_clean_up_hallway"); level thread escape_scene_wait_for_player_past_guard_doors(); level thread escape_scene_clean_up_secret_room(); } //Function Number: 76 escape_scene_start_hallway_drop_door() { var_00 = maps\betrayal_util::get_ent_by_targetname("escape_scene_fire_safety_drop_door"); var_00 show(); var_00 endon("escape_slam_door"); if(var_00 maps\_utility::ent_flag("fire_door_closed")) { var_00 thread escape_scene_open_firedoor(0.5,0.4,0.1); soundscripts\_snd::snd_message("fire_door_1_open",var_00); wait(0.5); var_00.col connectpaths(); var_00.col solid(); } var_00 thread escape_scene_wait_for_player_past_drop_door(); var_01 = getentarray("escape_guards_secret_room_spawner","targetname"); foreach(var_03 in var_01) { var_04 = var_03 maps\_utility::spawn_ai(1); var_05 = getnode(var_03.target,"targetname"); var_04 maps\_utility::set_goal_node(var_05); } } //Function Number: 77 escape_scene_wait_for_player_past_guard_doors() { var_00 = maps\betrayal_util::get_ent_by_targetname("escape_scene_fire_safety_drop_door_guards"); var_00 show(); var_01 = maps\betrayal_util::get_ent_by_targetname("escape_scene_fire_safety_drop_door"); var_01 show(); maps\betrayal_util::wait_for_trigger_and_ai_single("trigger_escape_player_near_climb_door",level.ilana); var_00 notify("escape_open_door"); var_01 notify("escape_open_door"); if(var_00 maps\_utility::ent_flag("fire_door_closed")) { var_00 thread escape_scene_open_firedoor(1.5,1); var_00 soundscripts\_snd::snd_message("open_firedoor_for_guards"); var_00.col connectpaths(); } if(var_01 maps\_utility::ent_flag("fire_door_closed")) { var_01 thread escape_scene_open_firedoor(1.5,1); var_01 soundscripts\_snd::snd_message("open_firedoor_for_guards"); var_01.col connectpaths(); } } //Function Number: 78 escape_scene_wait_for_player_past_drop_door() { maps\betrayal_util::wait_for_trigger_and_ai_single("escape_scene_player_past_drop_door",level.ilana); self notify("escape_slam_door"); if(!maps\_utility::ent_flag("fire_door_closed")) { thread escape_scene_close_firedoor(0.6,0.5); soundscripts\_snd::snd_message("fire_door_1_close",self); self.col solid(); wait(0.5); } self.col disconnectpaths(); thread escape_scene_manage_flood_spawn_fire_door(); common_scripts\utility::flag_wait("flag_escape_ilona_should_cover_player"); level.ilana maps\_utility::set_ignoreall(0); } //Function Number: 79 escape_scene_manage_guards() { level endon("trigger_escape_in_elevator_shaft"); level.escape_scene_side_door_guards = maps\betrayal_util::spawn_ai_from_targetname("spawner_guard_escape_side_firedoor",1,0); common_scripts\utility::array_thread(level.escape_scene_side_door_guards,::maps\_utility::set_ignoreall,0); common_scripts\utility::array_thread(level.escape_scene_side_door_guards,::escape_scene_remove_guards_on_complete); common_scripts\utility::array_thread(level.escape_scene_side_door_guards,::escape_scene_guard_player_seek,25); level.escape_scene_side_door_guards[0] thread escape_scene_guard_call_help(); maps\betrayal_util::wait_for_trigger_and_ai_single("escape_scene_player_past_drop_door",level.ilana); level.escape_scene_confrontation_room_guards = maps\betrayal_util::spawn_ai_from_targetname("spawner_guard_escape_hallway",1,0); common_scripts\utility::array_thread(level.escape_scene_confrontation_room_guards,::maps\_utility::set_ignoreall,0); common_scripts\utility::array_thread(level.escape_scene_confrontation_room_guards,::escape_scene_remove_guards_on_complete); common_scripts\utility::array_thread(level.escape_scene_confrontation_room_guards,::escape_scene_guard_player_seek,25); var_00 = maps\betrayal_util::get_ent_by_targetname("escape_scene_enemy_accuracy_increase_trigger"); var_00 thread escape_scene_manage_guard_accuracy(); maps\betrayal_util::wait_for_trigger_and_ai_single("escape_turn_on_guard_colors",level.ilana); level.escape_scene_side_door_guards = maps\_utility::array_removedead_or_dying(level.escape_scene_side_door_guards); level.escape_scene_confrontation_room_guards = maps\_utility::array_removedead_or_dying(level.escape_scene_confrontation_room_guards); common_scripts\utility::array_thread(level.escape_scene_side_door_guards,::maps\_utility::set_force_color,"g"); common_scripts\utility::array_thread(level.escape_scene_confrontation_room_guards,::maps\_utility::set_force_color,"g"); maps\_utility::activate_trigger_with_targetname("escape_scene_guards_move_up"); } //Function Number: 80 escape_scene_guard_player_seek(param_00) { maps\_utility::set_goal_radius(param_00); maps\_utility::set_goal_ent(level.player); } //Function Number: 81 escape_scene_guard_call_help() { maps\betrayal_util::wait_for_trigger_and_ai_single("escape_scene_player_past_drop_door",level.ilana); wait(1); self.animname = "scripted"; var_00 = "ny_manhattan_radio_sandman_talk"; common_scripts\utility::flag_set("flag_dialogue_escape_guarddoor"); thread maps\_anim::anim_single_solo(self,var_00); wait(6); maps\betrayal_util::stop_current_animations(); escape_scene_guard_player_seek(25); var_01 = maps\betrayal_util::get_ent_by_targetname("escape_scene_fire_safety_drop_door"); if(var_01 maps\_utility::ent_flag("fire_door_closed")) { var_01 thread escape_scene_open_firedoor(2,0,1); var_01 soundscripts\_snd::snd_message("open_firedoor_for_guards"); wait(0.5); var_01.col connectpaths(); } var_01 thread escape_scene_close_door_when_player_close(); var_02 = maps\betrayal_util::get_ent_by_targetname("escape_scene_fire_safety_drop_door_guards"); if(var_02 maps\_utility::ent_flag("fire_door_closed")) { var_02 thread escape_scene_open_firedoor(2,0,1); var_02 soundscripts\_snd::snd_message("open_firedoor_for_guards"); wait(0.5); var_02.col connectpaths(); } foreach(var_04 in level.escape_scene_side_door_guards) { if(!isremovedentity(var_04)) { var_04.baseaccuracy = 10; } } level.escape_scene_confrontation_room_guards = common_scripts\utility::array_removeundefined(level.escape_scene_confrontation_room_guards); foreach(var_04 in level.escape_scene_confrontation_room_guards) { if(!isremovedentity(var_04)) { var_04.baseaccuracy = 10; } } } //Function Number: 82 escape_scene_manage_guard_accuracy() { for(;;) { self waittill("trigger",var_00); if(var_00.team == "axis") { var_00.baseaccuracy = 5; } wait 0.05; } } //Function Number: 83 escape_scene_manage_flood_spawn_fire_door() { maps\betrayal_util::wait_for_trigger_and_ai_single("trigger_escape_player_near_climb_door",level.ilana); thread escape_scene_close_door_when_player_close(); wait(8); if(!maps\_utility::ent_flag("fire_door_closed")) { thread escape_scene_close_firedoor(0.5,0.5); self.col solid(); wait(0.5); } self.col disconnectpaths(); maps\betrayal_util::wait_for_trigger_and_ai_single("trigger_escape_player_at_climb",level.ilana); if(maps\_utility::ent_flag("fire_door_closed")) { thread escape_scene_open_firedoor(0.5,0.5); self.col solid(); wait(0.5); } self.col connectpaths(); self notify("closed"); } //Function Number: 84 escape_scene_close_door_when_player_close() { self endon("closed"); maps\_utility::waittill_entity_in_range(level.player,300); if(!maps\_utility::ent_flag("fire_door_closed")) { thread escape_scene_close_firedoor(0.5,0.5); self.col solid(); wait(0.5); } self.col disconnectpaths(); } //Function Number: 85 escape_scene_clean_up_secret_room() { maps\betrayal_util::wait_for_trigger_and_ai_single("trigger_escape_out_of_secret_room",level.ilana); common_scripts\utility::flag_set("flag_dialogue_escape_intros"); maps\betrayal_util::wait_for_trigger_and_ai_single("trigger_escape_player_at_climb",level.ilana); wait(0.5); common_scripts\utility::flag_set("flag_escape_clean_up_secret_room"); } //Function Number: 86 escape_scene_hallway_run() { maps\_utility::trigger_wait_targetname("trigger_escape_player_near_climb_door"); var_00 = maps\betrayal_util::get_ent_by_targetname("escape_scene_fire_safety_drop_door_climb"); if(var_00 maps\_utility::ent_flag("fire_door_closed")) { var_00 thread escape_scene_open_firedoor(2,0,1); soundscripts\_snd::snd_message("big_fire_door_open",var_00); wait(0.5); var_00.col connectpaths(); } maps\_utility::activate_trigger_with_targetname("trigger_escape_move_to_climb"); maps\betrayal_util::wait_for_trigger_and_ai_single("trigger_escape_player_at_climb",level.ilana); level.ilana maps\_utility::set_ignoreall(1); if(!var_00 maps\_utility::ent_flag("fire_door_closed")) { var_00 thread escape_scene_close_firedoor(0.5,0.4,0); soundscripts\_snd::snd_message("big_fire_door_close",var_00); wait(0.4); } var_00.col disconnectpaths(); level thread maps\betrayal_fx::escape_fire_door_slam_shut(); } //Function Number: 87 escape_scene_hallway_climb() { common_scripts\utility::flag_set("flag_dialogue_escape_deadend"); common_scripts\utility::flag_wait("flag_escape_open_elevator"); var_00 = maps\betrayal_util::get_ent_by_targetname("elevator_shaft_blocker"); var_00 notsolid(); wait(1); common_scripts\utility::flag_set("flag_objective_escape_scene_elevator_open"); level thread escape_scene_open_elevator_doors(); var_01 = maps\betrayal_util::get_ent_by_targetname("escape_elevator_block_collision"); var_01 notsolid(); wait(2); common_scripts\utility::flag_set("flag_dialogue_escape_climb"); maps\_utility::activate_trigger_with_targetname("trigger_escape_move_into_elevator_shaft"); maps\betrayal_util::wait_for_trigger_and_ai_single("trigger_escape_in_elevator_shaft",level.ilana); var_01 solid(); maps\_utility::autosave_by_name(); level thread escape_scene_close_elevator_doors(); level notify("trigger_escape_in_elevator_shaft"); var_02 = getentarray("spawner_guard_escape_hallway_flood","targetname"); foreach(var_04 in var_02) { var_04.count = 0; var_04 delete(); } level thread escape_scene_swarm_warning(); level thread roof_scene_industrial_drone_swarm_launch_manager(1); maps\_utility::trigger_wait_targetname("trigger_escape_climb_top_out"); var_06 = maps\betrayal_util::get_ent_by_targetname("animorg_elevator_topout"); maps\_player_exo::player_exo_deactivate(); maps\_exo_climb::force_animated_dismount(var_06,"player_rig","elevator_climb_dismount"); level.player waittill("stop_player_climbing"); level thread roof_scene_scripted_elevator_shaft_close(); common_scripts\utility::flag_set("flag_objective_escape_scene_on_roof"); maps\_player_exo::player_exo_activate(); } //Function Number: 88 escape_scene_swarm_warning() { maps\betrayal_util::waittill_player_exo_climbing(); wait(1); common_scripts\utility::flag_set("flag_dialogue_escape_swarm"); } //Function Number: 89 escape_scene_open_elevator_doors() { var_00 = maps\betrayal_util::get_ents_by_targetname("escape_scene_elevator_door"); soundscripts\_snd::snd_message("open_elevator_doors",var_00); foreach(var_02 in var_00) { var_02.org_pos = var_02.origin; } var_04 = 1; for(;;) { var_05 = 0; foreach(var_02 in var_00) { if(var_02.script_index == var_04) { var_05 = 1; var_02 thread escape_scene_open_elveator_door(); wait(0.1); } } if(!var_05) { break; } wait(0.4); var_04++; } } //Function Number: 90 escape_scene_open_elveator_door() { self.col connectpaths(); self.col linkto(self); self moveto(self.open_org,3,1,1); wait(3); self.col notsolid(); } //Function Number: 91 escape_scene_close_elevator_doors() { var_00 = maps\betrayal_util::get_ents_by_targetname("escape_scene_elevator_door"); soundscripts\_snd::snd_message("close_elevator_doors",var_00); var_01 = 1; for(;;) { var_02 = 0; foreach(var_04 in var_00) { if(var_04.script_index == var_01) { var_02 = 1; var_04 thread escape_scene_close_elveator_door(); wait(0.1); } } if(!var_02) { break; } wait(0.4); var_01++; } } //Function Number: 92 escape_scene_close_elveator_door() { self.col solid(); self.col linkto(self); self moveto(self.org_pos,3,1,1); self.col disconnectpaths(); } //Function Number: 93 escape_scene_remove_guards_on_complete() { maps\_utility::trigger_wait_targetname("trigger_escape_climb_top_out"); wait(2); if(isdefined(self)) { self delete(); } } //Function Number: 94 roof_scene_master_handler() { roof_scene_set_up(); roof_scene_industrial_section(); roof_scene_grass_section(); roof_scene_enter_water_cleanup(); level thread swim_scene_master_handler(); } //Function Number: 95 roof_scene_set_up() { common_scripts\utility::flag_set("flag_roof_player_on_roof"); var_00 = maps\betrayal_util::get_ent_by_targetname("roof_slide_blocker"); var_00 delete(); var_01 = maps\betrayal_util::get_ent_by_targetname("roof_scene_elevator_hatch"); if(var_01.model != "btr_elevator_vent_cover_a_closed") { level thread roof_scene_scripted_elevator_shaft_close(); } maps\betrayal_util::prepare_blast_doors("roof_window_blastdoor",-160); maps\betrayal_util::prepare_blast_doors("roof_slide_blastdoor",-160); maps\betrayal_util::prepare_blast_doors("roof_slide_blastdoor_mrX",-160); level thread roof_scene_grass_close_window_blast_doors(); if(!isdefined(level.escape_pa)) { level.escape_pa = maps\betrayal_util::get_ent_by_targetname("roof_escape_PA"); level.escape_pa.animname = "PA"; } thread roof_scene_vignette_civilians(); thread roof_scene_vignettes(); common_scripts\utility::run_thread_on_targetname("roof_fan_blade",::maps\betrayal_util::scripted_spin_fan_blades,1,"roof_scene_cleanup"); thread roof_scene_setup_failstates(); common_scripts\utility::flag_set("flag_dialogue_start_roof"); common_scripts\utility::flag_set("flag_enable_battle_chatter"); } //Function Number: 96 roof_scene_setup_failstates() { thread roof_scene_industrial_section_failstates(); thread roof_scene_grass_section_failstates(); } //Function Number: 97 roof_scene_industrial_section() { level.ilana.colornode_setgoal_func = ::roof_scene_scripted_ilona_fire_at_swarm; setsaveddvar("glass_damageToWeaken",32000); setsaveddvar("glass_damageToDestroy",64000); } //Function Number: 98 roof_scene_industrial_drone_swarm_launch_manager(param_00) { level roof_scene_industrial_set_up_swarm(); if(isdefined(param_00) && param_00 == 1) { maps\_utility::trigger_wait_targetname("trigger_escape_climb_top_out"); wait(2.75); } level thread roof_scene_industrial_launch_drone_swarm(); } //Function Number: 99 roof_scene_industrial_set_up_swarm() { if(level.currentgen) { level.snake_cloud = vehicle_scripts\_attack_drone_common::spawn_snake_cloud("drone_swarm_spawner_roof","drone_swarm_roof_path_1",6,5); } else { level.snake_cloud = vehicle_scripts\_attack_drone_common::spawn_snake_cloud("drone_swarm_spawner_roof","drone_swarm_roof_path_1"); } common_scripts\utility::flag_set("flag_roof_swarm_spawned"); common_scripts\utility::flag_set("roof_start_lighting"); common_scripts\utility::run_thread_on_targetname("trigger_roof_drone_swarm_move",::maps\betrayal_util::drone_swarm_move_change_path_on_trigger,1); var_00 = maps\betrayal_util::get_ent_by_targetname("roof_drone_spawner_kamikaze"); var_01 = maps\betrayal_util::get_ents_by_targetname("roof_drone_attack_point"); thread maps\betrayal_util::drone_swarm_start_kamikaze_attack(var_00,"flag_roof_player_past_fence","flag_roof_player_jumped_off_atlas_building",var_01,2,4,3,175); } //Function Number: 100 roof_scene_industrial_open_hatch() { common_scripts\utility::flag_set("flag_roof_swarm_launched"); self rotatepitch(95,2.5,0.25,0.5); } //Function Number: 101 roof_scene_industrial_launch_drone_swarm() { common_scripts\utility::flag_wait("flag_roof_swarm_spawned"); var_00 = maps\betrayal_util::get_ents_by_targetname("roof_drone_hatch"); foreach(var_02 in var_00) { var_02 maps\_utility::delaythread(randomfloatrange(0,1),::roof_scene_industrial_open_hatch); } wait(1); level.snake_cloud thread vehicle_scripts\_attack_drone_common::snake_cloud_goto_points("drone_swarm_roof_path_2",undefined,3); thread maps\betrayal_fx::escape_drone_door_open(); wait(1); common_scripts\utility::flag_set("flag_dialogue_roof_swarm"); } //Function Number: 102 roof_scene_industrial_section_failstates() { wait(90); if(!common_scripts\utility::flag("flag_roof_player_has_mantled")) { maps\betrayal_util::drone_swarm_kamikaze_set_attack_vars(1,2,4,50); thread roof_scene_industrial_death_squad_handler(); if(maps\betrayal_util::player_mission_failed_handler(20,undefined,"flag_roof_player_has_mantled")) { maps\betrayal_util::drone_swarm_kamikaze_set_attack_vars(2,4,3,175); } } } //Function Number: 103 roof_scene_industrial_death_squad_handler() { var_00 = []; if(!common_scripts\utility::flag("flag_roof_player_has_mantled")) { var_01 = getentarray("rooftop_death_squad01","targetname"); foreach(var_03 in var_01) { var_04 = var_03 maps\_utility::spawn_ai(1,0); if(isdefined(var_04)) { var_04.health = 1000; var_04.baseaccuracy = 10; var_04.canjumppath = 1; var_04 maps\_utility::player_seek_enable(); var_00 = common_scripts\utility::array_add(var_00,var_04); } } } common_scripts\utility::flag_wait("flag_roof_player_has_mantled"); foreach(var_04 in var_00) { if(isdefined(var_04)) { var_04.health = 150; var_04.baseaccuracy = 0.5; var_04.canjumppath = 1; var_04 maps\_utility::player_seek_disable(); } } common_scripts\utility::flag_wait("roof_scene_player_escaped"); foreach(var_04 in var_00) { if(isdefined(var_04)) { var_04 maps\betrayal_util::delete_ai(); } } } //Function Number: 104 roof_scene_grass_section() { common_scripts\utility::run_thread_on_targetname("trigger_roof_deploy_guards",::roof_scene_grass_deploy_guards); common_scripts\utility::run_thread_on_targetname("trigger_roof_start_slide",::roof_scene_slide); maps\_utility::trigger_wait_targetname("player_on_grass_section"); common_scripts\utility::flag_set("flag_roof_player_has_mantled"); level waittill("player_out_of_atlas"); } //Function Number: 105 roof_scene_grass_deploy_guards() { self waittill("trigger"); level.roof_scene_guards = []; common_scripts\utility::flag_set("flag_dialogue_roof_gates"); level thread roof_scene_grass_handle_guard_doors("office_roof_door","spawner_roof_office_hallway","trigger_roof_office_roof_stairs_empty"); level thread roof_scene_grass_handle_guard_doors("office_hallway_door","spawner_roof_office_roof_stairs","trigger_roof_office_hallway_empty"); wait(2); thread roof_scene_grass_monitor_guard_clear(); } //Function Number: 106 roof_scene_grass_handle_guard_doors(param_00,param_01,param_02) { level thread maps\betrayal_util::open_double_sliding_doors_toggle(param_00,0.5); var_03 = maps\betrayal_util::spawn_ai_from_targetname(param_01,1,0); level.roof_scene_guards = common_scripts\utility::array_add(level.roof_scene_guards,var_03[0]); maps\betrayal_util::wait_for_no_trigger_just_ai_group(param_02,var_03); level thread maps\betrayal_util::open_double_sliding_doors_toggle(param_00,0.5); var_03[0] thread roof_scene_grass_guard_cleanup(); } //Function Number: 107 roof_scene_grass_guard_cleanup() { common_scripts\utility::flag_wait("rooftop_escape_player_sliding_on_roof"); if(isdefined(self)) { maps\betrayal_util::delete_ai(); } } //Function Number: 108 roof_scene_grass_monitor_guard_clear() { while(level.roof_scene_guards.size > 0) { wait(0.5); } var_00 = maps\betrayal_util::get_ent_by_targetname("ilana_move_to_slide"); if(isdefined(var_00)) { maps\_utility::activate_trigger_with_targetname("ilana_move_to_slide"); } } //Function Number: 109 roof_scene_grass_close_window_blast_doors() { maps\_utility::trigger_wait_targetname("trigger_roof_start_window_blastdoors"); level thread maps\betrayal_util::raise_blast_doors("roof_window_blastdoor",0.5); level thread maps\betrayal_util::raise_blast_doors("roof_slide_blastdoor",0.5); thread roof_scene_grass_setup_blast_door_clip(); level thread maps\betrayal_util::raise_blast_doors("roof_slide_blastdoor_mrX",1,"flag_roof_open_mrX_blast_doors"); } //Function Number: 110 roof_scene_grass_setup_blast_door_clip() { var_00 = maps\betrayal_util::get_ents_by_targetname("rooftop_blast_door_clip"); foreach(var_02 in var_00) { var_02.down_pos = var_02.origin - (0,0,192); var_02 moveto(var_02.down_pos,0.1); } } //Function Number: 111 roof_scene_grass_section_failstates() { common_scripts\utility::flag_wait("roof_scene_ilana_at_escape"); wait(50); if(!common_scripts\utility::flag("roof_scene_player_escaped")) { maps\betrayal_util::drone_swarm_kamikaze_set_attack_vars(1,2,4,50); thread roof_scene_grass_death_squad_handler(); if(maps\betrayal_util::player_mission_failed_handler(20,undefined,"roof_scene_player_escaped")) { maps\betrayal_util::drone_swarm_kamikaze_set_attack_vars(2,4,3,175); } } } //Function Number: 112 roof_scene_grass_death_squad_handler() { var_00 = []; if(!common_scripts\utility::flag("roof_scene_player_escaped")) { var_01 = getentarray("roof_scene_death_squad_spawner","targetname"); foreach(var_03 in var_01) { for(;;) { var_04 = var_03 maps\_utility::spawn_ai(); if(!maps\_utility::spawn_failed(var_04)) { break; } wait(0.05); } var_04.health = 1000; var_04.baseaccuracy = 10; var_04.canjumppath = 1; var_00 = common_scripts\utility::array_add(var_00,var_04); } } common_scripts\utility::flag_wait("roof_scene_player_escaped"); foreach(var_04 in var_00) { if(isdefined(var_04)) { var_04 maps\betrayal_util::delete_ai(); } } } //Function Number: 113 roof_scene_slide() { self usetriggerrequirelookat(); maps\_utility::addhinttrigger(&"BETRAYAL_HINT_SLIDE_MANTLE",&"BETRAYAL_HINT_SLIDE_MANTLE"); level.player notifyonplayercommand("fake_mantle_jump","+gostand"); common_scripts\utility::run_thread_on_targetname("trigger_roof_start_slide_player_present",::roof_scene_slide_wait_for_player_jumped); level waittill("flag_roof_player_jumped_off_atlas_building"); level.player notifyonplayercommandremove("fake_mantle_jump","+gostand"); self delete(); level.ilana roof_scene_scripted_ilona_fire_at_swarm_behavior_clear(); thread swim_scene_pre_setup(); common_scripts\utility::flag_set("roof_scene_player_escaped"); maps\_utility::autosave_by_name(); common_scripts\utility::flag_set("flag_objective_escape_scene_complete"); level.rig = maps\_utility::spawn_anim_model("player_rig",level.player.origin,level.player.angles); level.rig hide(); level.player maps\_shg_utility::setup_player_for_scene(); level.player enableslowaim(); var_00 = 0.5; level.player playerlinktoblend(level.rig,"tag_player",var_00); level.rig common_scripts\utility::delaycall(var_00,::show); level.player common_scripts\utility::delaycall(var_00,::playerlinktodelta,level.rig,"tag_player",1,0,0,0,0,1); level.player common_scripts\utility::delaycall(var_00 + 0.05,::lerpviewangleclamp,1,0,0,15,15,12,8); var_01 = maps\betrayal_util::get_ent_by_targetname("animorg_roof_slide"); var_02 = []; var_02[0] = level.rig; var_03 = maps\betrayal_util::spawn_ai_from_targetname("spawner_roof_slide_guard",1,0); for(var_04 = 0;var_04 < var_03.size;var_04++) { var_03[var_04].animname = "roof_guard_" + var_04 + 1; var_03[var_04].baseaccuracy = var_03[var_04].baseaccuracy / 2; if(var_04 == 0) { level.falling_guard = var_03[var_04]; } var_02[var_02.size] = var_03[var_04]; } thread swim_scene_swarm_setup(); var_05 = maps\_utility::getanim_from_animname("roof_slide","player_rig"); var_06 = getanimlength(var_05); var_07 = 1; var_01 thread roof_scene_slide_ilana_anim_to_swim(); soundscripts\_snd::snd_music_message("roof_slide"); soundscripts\_snd::snd_message("bet_escape_roof_slide"); var_01 maps\_anim::anim_single(var_02,"roof_slide"); level.player unlink(); level.player disableslowaim(); level.player maps\_shg_utility::setup_player_for_gameplay(); level.rig delete(); maps\_utility::autosave_by_name(); wait(0.05); level notify("player_out_of_atlas"); } //Function Number: 114 roof_scene_slide_wait_for_player_jumped() { for(;;) { level.player waittill("fake_mantle_jump"); if(self istouching(level.player)) { break; } wait(0.05); } common_scripts\utility::flag_set("flag_roof_player_jumped_off_atlas_building"); self delete(); } //Function Number: 115 roof_scene_hide_rig(param_00) { param_00 hide(); } //Function Number: 116 roof_scene_slide_ilana_anim_to_swim() { level.ilana.is_swimming = 1; maps\_anim::anim_single_solo(level.ilana,"roof_slide"); level.ilana.swim_path_targetname = "ilana_swim_path"; level.ilana animcustom(::swim_scene_ilana_swim_on_path_behavior); } //Function Number: 117 roof_scene_slide_slomo_start(param_00) { setslowmotion(1,0.15,0.1); soundscripts\_snd::snd_message("bet_escape_roof_slomo_start"); } //Function Number: 118 roof_scene_slide_slomo_stop(param_00) { setslowmotion(0.15,1,0.2); soundscripts\_snd::snd_message("bet_escape_roof_slomo_end"); wait(0.5); common_scripts\utility::flag_set("flag_dialogue_roof_fall"); } //Function Number: 119 roof_scene_slide_remove_glass_blocker(param_00) { var_01 = maps\betrayal_util::get_ents_by_targetname("atlas_roof_glass_blocker"); foreach(var_03 in var_01) { var_03 delete(); } setsaveddvar("glass_damageToWeaken",75); setsaveddvar("glass_damageToDestroy",275); } //Function Number: 120 roof_scene_slide_raise_gates(param_00) { common_scripts\utility::flag_set("flag_roof_close_mrX_blast_doors"); } //Function Number: 121 roof_scene_vignettes() { if(level.nextgen) { thread maps\betrayal_util::spawn_and_handle_looping_helicopters("office_scene_looping_heli","flag_roof_player_jumped_off_atlas_building",5); } else { thread maps\betrayal_util::spawn_and_handle_looping_helicopters("office_scene_looping_heli","flag_roof_player_jumped_off_atlas_building",2); } common_scripts\utility::run_thread_on_targetname("roof_scene_vig_civ_spawn_trig",::maps\betrayal_util::civilian_setup,"roof_scene_vig_civ_scatter",0); } //Function Number: 122 roof_scene_vignette_civilians() { common_scripts\utility::run_thread_on_targetname("rooftop_scene_civilian_spawn_trig",::maps\betrayal_util::civilian_setup,"roof_scene_civilian_react_trig",0); soundscripts\_snd::snd_message("atlas_building_roof_walla","roof_scene_civilian_react_trig"); } //Function Number: 123 roof_scene_scripted_ilona_fire_at_swarm(param_00) { self clearentitytarget(); maps\_utility::set_ignoreall(0); self notify("stop_firing_at_swarm"); self endon("stop_firing_at_swarm"); self setgoalnode(param_00); thread maps\_colors::color_node_arrival_notifies(param_00); self waittill("goal"); while(!isdefined(level.snake_cloud) || !isdefined(level.snake_cloud.snakes)) { wait(0.5); } var_01 = randomintrange(0,level.snake_cloud.snakes.size); if(isdefined(level.roof_scene_guards)) { while(level.roof_scene_guards.size > 0) { level.roof_scene_guards = maps\_utility::remove_dead_from_array(level.roof_scene_guards); wait(1); } } self setentitytarget(level.snake_cloud.snakes[0]); maps\_utility::set_ignoreall(0); } //Function Number: 124 roof_scene_scripted_ilona_fire_at_swarm_behavior_clear() { self notify("stop_firing_at_swarm"); self clearentitytarget(); self.colornode_setgoal_func = undefined; } //Function Number: 125 roof_scene_scripted_elevator_shaft_close() { wait(0.05); var_00 = maps\betrayal_util::get_ent_by_targetname("roof_scene_elevator_hatch"); var_00 setmodel("btr_elevator_vent_cover_a_closed"); var_01 = maps\betrayal_util::get_ent_by_targetname("elevator_shaft_open_clip"); if(isdefined(var_01)) { var_01 connectpaths(); var_01 delete(); } var_02 = maps\betrayal_util::get_ent_by_targetname("elevator_shaft_blocker"); var_02 solid(); maps\betrayal_util::waittill_player_not_exo_climbing(); var_03 = maps\betrayal_util::get_ent_by_targetname("start_roof_ilana"); while(!maps\betrayal_util::can_teleport_ai_to_pos(level.ilana,var_03.origin)) { wait(0.05); } var_04 = maps\betrayal_util::get_ent_by_targetname("roof_scene_ilona_start"); if(isdefined(var_04)) { maps\_utility::activate_trigger_with_targetname("roof_scene_ilona_start"); } level.ilana forceteleport(var_03.origin,var_03.angles); } //Function Number: 126 roof_scene_enter_water_cleanup() { maps\_utility::trigger_wait_targetname("trigger_roof_player_in_water"); level notify("roof_scene_cleanup"); maps\_utility::clear_all_color_orders("allies"); maps\_utility::clear_all_color_orders("axis"); maps\betrayal_util::clean_up_ai_single(level.ilana); level.ilana maps\betrayal_util::move_squad_member_to_ent_by_targetname("start_swim_ilana"); common_scripts\utility::flag_set("flag_roof_escape_complete"); if(level.nextgen) { setsaveddvar("r_mbEnable","0"); setsaveddvar("r_dof_physical_bokehEnable",0); } level.ilana.ignoreall = 1; } //Function Number: 127 swim_scene_master_handler() { swim_scene_pre_setup(); swim_scene_setup(); swim_scene_boats(); swim_scene_climb_out_water(); swim_scene_cleanup(); level thread sewer_scene_master_handler(); } //Function Number: 128 swim_scene_pre_setup() { maps\_player_exo::player_exo_deactivate(); if(!isdefined(level.dock_debris) && !isdefined(level.dock_debris_blocker)) { swim_scene_scripted_destroyed_dock_hide(); } if(!isdefined(level.swim_warbird)) { common_scripts\utility::run_thread_on_targetname("trigger_start_swim_littlebird_patrol",::swim_scene_chase_littlebird_patrol,2); } } //Function Number: 129 swim_scene_setup() { level.player disableweapons(); level.player.drowning_damage = level.player.maxhealth * 0.1 / level.player.damagemultiplier; maps\_underwater::override_breath_values(24,1); thread swim_scene_handle_player_containment(); thread swim_scene_dock_destroy(); thread swim_scene_dock_guards(); if(!isdefined(level.snake_cloud)) { if(level.currentgen) { level.snake_cloud = vehicle_scripts\_attack_drone_common::spawn_snake_cloud("swarm_spawner_swim","swarm_swim_path",6,5); } else { level.snake_cloud = vehicle_scripts\_attack_drone_common::spawn_snake_cloud("swarm_spawner_swim","swarm_swim_path"); } } if(common_scripts\utility::flag("swim_devstart")) { thread swim_scene_swarm_setup(); } if(!isdefined(level.ilana.is_swimming)) { level.ilana clearanim(%body,0); level.ilana.swim_path_targetname = "ilana_swim_path"; level.ilana animcustom(::swim_scene_ilana_swim_on_path_behavior); } common_scripts\_exploder::exploder(3002); common_scripts\utility::flag_set("flag_dialogue_start_swim"); common_scripts\utility::flag_clear("flag_enable_battle_chatter"); } //Function Number: 130 swim_scene_boats() { common_scripts\utility::run_thread_on_targetname("trigger_swimg_sink_boat1",::swim_scene_boat_sink); common_scripts\utility::run_thread_on_targetname("trigger_swimg_sink_boat2",::swim_scene_boat_sink); } //Function Number: 131 swim_scene_ilana_swim_on_path_behavior() { self endon("killanimscript"); if(!isdefined(self.swim_path_targetname)) { return; } var_00 = common_scripts\utility::getstruct(self.swim_path_targetname,"targetname"); if(!isdefined(var_00)) { return; } maps\_utility::disable_pain(); var_01 = var_00.origin; self animmode("nogravity"); var_02 = vectortoangles(var_01 - self.origin); self setanimknobrestart(%bet_swimming_forward_idle_ilona,1,0.2,1.2); for(;;) { if(distancesquared(self.origin,var_01) < 3600) { if(isdefined(var_00.target)) { var_00 = common_scripts\utility::getstruct(var_00.target,"targetname"); var_01 = var_00.origin; } else { break; } } var_03 = vectortoangles(var_01 - self.origin); var_04 = clamp(angleclamp180(var_03[0] - var_02[0]),-1.5,1.5); var_05 = clamp(angleclamp180(var_03[1] - var_02[1]),-1.5,1.5); var_02 = (var_02[0] + var_04,var_02[1] + var_05,var_03[2]); self orientmode("face angle 3d",var_02,1); wait(0.05); } var_06 = maps\betrayal_util::get_ent_by_targetname("sewer_get_out_ilana"); while(!maps\betrayal_util::can_teleport_ai_to_pos(level.ilana,var_06.origin)) { wait(0.05); } var_07 = getent("sewer_get_out_ilana","targetname"); soundscripts\_snd::snd_message("bet_ilona_swim_end",level.ilana); self forceteleport(var_07.origin,var_07.angles); var_08 = getnode("ilona_exit_swim_cover","targetname"); maps\_utility::set_goal_node(var_08); self animmode("gravity"); self orientmode("face default"); maps\_utility::enable_pain(); } //Function Number: 132 swim_scene_chase_littlebird_patrol(param_00) { self waittill("trigger"); if(!isdefined(level.swim_warbird)) { level.swim_warbird = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("swim_ambush_helo"); level.swim_warbird soundscripts\_snd::snd_message("aud_ambient_helicopter","swim_ambush_helo"); level.swim_warbird thread maps\betrayal_util::warbird_shooting_think(1,1,param_00); var_01 = maps\betrayal_util::get_ent_by_targetname("swim_warbird_target01"); wait(3); level.swim_warbird thread swim_scene_warbird_fire_at_target_for_duration(var_01,4); wait(4); var_01 delete(); return; } self.turret_target_override = level.player; maps\_utility::ent_flag_clear("fire_turrets"); } //Function Number: 133 swim_scene_warbird_fire_at_target_for_duration(param_00,param_01) { if(isdefined(param_00)) { param_00 makeentitysentient("allies"); if(isdefined(param_00)) { self.turret_target_override = param_00; } self.sight_check = 0; wait(param_01); } self.turret_target_override = level.player; self.sight_check = 1; } //Function Number: 134 swim_scene_swarm_setup() { if(!common_scripts\utility::flag("swim_devstart")) { wait(4.25); } thread swim_scene_swarm_kamikaze_attack(); thread swim_scene_swarm_movement(); wait(0.2); level notify("start_swim_kamikaze"); common_scripts\utility::flag_wait("flag_swim_tunnel"); level notify("stop_swim_dist_monitor"); level.snake_cloud vehicle_scripts\_attack_drone_common::snake_cloud_goto_points("swarm_swim_path4",undefined,4); } //Function Number: 135 swim_scene_swarm_movement() { level endon("stop_swim_dist_monitor"); var_00 = maps\betrayal_util::get_ent_by_targetname("swim_tunnel_hole_opening"); var_01 = 950; var_02 = 400; var_03 = 0; for(;;) { var_04 = distance2d(level.player.origin,var_00.origin); if(var_04 < var_02 && var_04 > var_03) { level.snake_cloud vehicle_scripts\_attack_drone_common::snake_cloud_goto_points("swarm_swim_path3",undefined,4); } if(var_04 < var_01 && var_04 > var_02) { level.snake_cloud vehicle_scripts\_attack_drone_common::snake_cloud_goto_points("swarm_swim_path2",undefined,4); } if(var_04 >= var_01) { level.snake_cloud vehicle_scripts\_attack_drone_common::snake_cloud_goto_points("swarm_swim_path1",undefined,4); } wait 0.05; } } //Function Number: 136 swim_scene_swarm_kamikaze_attack() { } //Function Number: 137 swim_scene_boat_sink() { var_00 = maps\betrayal_util::get_ents_by_targetname(self.target); var_01 = undefined; var_02 = undefined; foreach(var_04 in var_00) { if(var_04.classname == "script_model") { var_01 = var_04; } if(var_04.classname == "script_brushmodel") { var_02 = var_04; } } var_02 linkto(var_01); var_06 = var_01 common_scripts\utility::spawn_tag_origin(); var_06.angles = vectortoangles(anglestoup(var_01.angles)); var_06 linkto(var_01); self waittill("trigger"); level.swim_warbird thread swim_scene_warbird_fire_at_target_for_duration(var_01,3); wait(4); level.player thread maps\betrayal_fx::canal_boat_explosion(var_06); soundscripts\_snd::snd_message("bet_swim_boat_explo",var_06); var_01 playrumbleonentity("grenade_rumble"); var_07 = undefined; var_08 = 0; var_09 = 0; for(;;) { var_0A = physicstrace(var_01.origin,var_01.origin + (0,0,-1000)); if(!isdefined(var_07)) { var_07 = var_0A; } if(distance(var_0A,var_01.origin) < 150) { break; } if(var_01.origin[2] < var_07[2]) { break; } var_0B = randomfloatrange(3,4); var_0C = randomfloatrange(-50,50); var_0D = randomfloatrange(-50,50); var_0E = randomfloatrange(-30,-20); var_08 = clamp(randomfloatrange(-5,5) + var_08,-20,20); var_09 = clamp(randomfloatrange(-5,5) + var_09,-20,20); var_01 moveto(var_01.origin + (var_0C,var_0D,var_0E),var_0B); var_01 rotateto((var_09,var_01.angles[1],var_08),var_0B); wait(var_0B); } var_01 thread swim_scene_boat_sink_bob(); stopfxontag(level._effect["boat_explosion"],var_06,"tag_origin"); stopfxontag(level._effect["boat_explosion_underwater"],var_06,"tag_origin"); wait(4); var_06 unlink(); var_06 delete(); } //Function Number: 138 swim_scene_boat_sink_bob() { var_00 = self.origin[0] - 15; var_01 = self.origin[0] + 15; var_02 = self.origin[1] - 15; var_03 = self.origin[1] + 15; var_04 = self.origin[2] - 15; var_05 = self.origin[2] + 15; var_06 = 0; var_07 = 0; while(!common_scripts\utility::flag("flag_swim_tunnel")) { var_08 = randomfloatrange(3,4); var_09 = clamp(self.origin[0] + randomfloatrange(-15,15),var_00,var_01); var_0A = clamp(self.origin[1] + randomfloatrange(-15,15),var_02,var_03); var_0B = clamp(self.origin[2] + randomfloatrange(-15,15),var_04,var_05); var_06 = clamp(randomfloatrange(-5,5) + var_06,-20,20); var_07 = clamp(randomfloatrange(-5,5) + var_07,-20,20); self moveto((var_09,var_0A,var_0B),var_08); self rotateto((var_07,self.angles[1],var_06),var_08); wait(var_08); } } //Function Number: 139 swim_scene_dock_destroy() { common_scripts\utility::flag_wait("flag_swim_tunnel"); level thread maps\betrayal_fx::canal_dock_destroy(); wait(0.5); level.dock_debris show(); level.dock_debris_blocker solid(); soundscripts\_snd::snd_message("bet_swim_dock_debris_blocker"); maps\_utility::autosave_by_name(); if(isdefined(level.swim_warbird)) { level.swim_warbird delete(); } } //Function Number: 140 swim_scene_scripted_destroyed_dock_hide() { level.dock_debris = maps\betrayal_util::get_ent_by_targetname("swim_scene_sunk_dock_debris"); level.dock_debris_blocker = maps\betrayal_util::get_ent_by_targetname("swim_scene_debris_blocker"); level.dock_debris_blocker notsolid(); level.dock_debris hide(); } //Function Number: 141 swim_scene_dock_guards() { var_00 = getentarray("swim_dock_guards","targetname"); foreach(var_02 in var_00) { var_03 = var_02 maps\_utility::spawn_ai(1); var_04 = getnode(var_02.target,"targetname"); var_03 thread swim_scene_dock_guard_removal(); var_03.canjumppath = 1; if(isdefined(var_03.script_noteworthy)) { if(var_03.script_noteworthy == "dock_guard1") { var_03.animname = "atlas_guard_1"; var_03 thread maps\betrayal_util::simple_anim_at_struct("dock_guard1_animorg"); var_03 thread swim_scene_dock_guard_goal(var_04); var_03.baseaccuracy = 0.25; var_03.grenadeammo = 0; var_03 maps\_utility::set_favoriteenemy(level.player); } if(var_03.script_noteworthy == "dock_guard2") { var_03.animname = "atlas_guard_2"; var_03 thread maps\betrayal_util::simple_anim_at_struct("dock_guard2_animorg"); var_03 thread swim_scene_dock_guard_goal(var_04); var_03.baseaccuracy = 0.25; var_03.grenadeammo = 0; var_03 maps\_utility::set_favoriteenemy(level.player); } } } } //Function Number: 142 swim_scene_dock_guard_goal(param_00) { if(isdefined(self)) { self waittill("anim_finished"); if(isdefined(self)) { maps\_utility::set_goal_node(param_00); } } } //Function Number: 143 swim_scene_dock_guard_removal() { common_scripts\utility::flag_wait("flag_sewer_exit_civ_setup"); if(isdefined(self)) { self delete(); } } //Function Number: 144 swim_scene_climb_out_water() { var_00 = getentarray("sewer_containment","targetname"); foreach(var_02 in var_00) { var_02 notsolid(); } common_scripts\utility::flag_wait("flag_swim_water_player_out_of_water"); soundscripts\_snd::snd_music_message("sewer_out_of_water"); foreach(var_02 in var_00) { var_02 solid(); } wait(1); level.player enableweapons(); } //Function Number: 145 swim_scene_handle_current() { level endon("swim_scene_cleanup"); common_scripts\utility::flag_set("flag_swim_water_motion_on"); for(;;) { maps\_utility::trigger_wait_targetname("trigger_swim_no_current"); common_scripts\utility::flag_clear("flag_swim_water_motion_on"); maps\_utility::trigger_wait_targetname("trigger_swim_river_current"); common_scripts\utility::flag_set("flag_swim_water_motion_on"); } } //Function Number: 146 swim_scene_handle_player_containment() { var_00 = getentarray("swim_barrier","targetname"); var_01 = 0; var_02 = 6; var_03 = 0; for(;;) { wait(0.05); var_04 = 0; foreach(var_06 in var_00) { if(level.player istouching(var_06)) { var_04 = 1; break; } } if(!var_04) { var_01 = 0; var_03 = 0; maps\_utility::hint_fade(); continue; } var_01 = var_01 + 0.05; if(var_01 >= var_02) { setdvar("ui_deadquote",&"BETRAYAL_FAIL_ESCAPE"); maps\_utility::missionfailedwrapper(); } if(var_03 == 0) { maps\_utility::display_hint("leaving_mission_area"); var_03 = 1; } } } //Function Number: 147 swim_scene_cleanup() { level notify("swim_scene_cleanup"); maps\_utility::clear_all_color_orders("axis"); maps\_utility::clear_all_color_orders("allies"); } //Function Number: 148 sewer_scene_master_handler() { sewer_scene_setup(); sewer_scene_manhole_interaction(); sewer_scene_market_section(); level thread oldtown_scene_master_handler(); common_scripts\utility::flag_wait("flag_sewer_oldtown_intro_complete"); sewer_scene_cleanup(); common_scripts\utility::flag_set("flag_sewer_scene_transfer_to_free_run"); wait(2); common_scripts\utility::flag_set("flag_sewer_checkpoint_guards_wakeup"); } //Function Number: 149 sewer_scene_setup() { level thread sewer_scene_dialogue_manager(); level thread sewer_scene_ilona_movement_manager(); level thread sewer_scene_swim_cleanup(); level thread sewer_scene_setup_manholde_vignette_civs(); level thread sewer_scene_scripted_objects(); common_scripts\utility::flag_set("flag_dialogue_start_sewer"); common_scripts\utility::flag_clear("flag_enable_battle_chatter"); soundscripts\_snd::snd_message("market_walla_init"); } //Function Number: 150 sewer_scene_swim_cleanup() { level endon("sewer_scene_start_backtrack_fail"); level waittill("flag_sewer_swap_to_oldtown_swarm"); if(isdefined(level.snake_cloud)) { level.snake_cloud vehicle_scripts\_attack_drone_common::cleanup_snake_cloud(); level.snake_cloud = undefined; } if(isdefined(level.swim_warbird)) { level.swim_warbird delete(); } } //Function Number: 151 sewer_scene_cleanup() { level notify("sewer_scene_cleanup"); } //Function Number: 152 sewer_scene_dialogue_manager() { level.player endon("death"); level endon("flag_sewer_scene_transfer_to_free_run"); level endon("flag_sewer_checkpoint_guards_wakeup"); level endon("sewer_scene_cleanup"); level.civilian1 = maps\betrayal_util::get_ent_by_targetname("civilian01_VO_PA"); level.civilian1.animname = "civilian_1"; level.civilian2 = maps\betrayal_util::get_ent_by_targetname("civilian02_VO_PA"); level.civilian2.animname = "civilian_2"; level.oldtown_pa = maps\betrayal_util::get_ent_by_targetname("oldtown_pa"); level.oldtown_pa.animname = "PA_2"; level.atlas_guard = maps\betrayal_util::get_ent_by_targetname("guard_market_VO_PA"); level.atlas_guard.animname = "atlas_guard_1"; common_scripts\utility::flag_wait("flag_sewer_oppression_event_start"); wait(0.2); level.civilian1 = maps\betrayal_util::get_ent_by_targetname("civilian01_market_VO_PA"); level.civilian1.animname = "civilian_1"; level.civilian2 = maps\betrayal_util::get_ent_by_targetname("civilian02_market_VO_PA"); level.civilian2.animname = "civilian_2"; common_scripts\utility::flag_set("flag_dialogue_sewer_checkpoint"); } //Function Number: 153 sewer_scene_ilona_movement_manager() { level.ilana pushplayer(1); common_scripts\utility::flag_wait("flag_sewer_oppression_event_ilona_start_secret"); level.ilana allowedstances("crouch","prone"); common_scripts\utility::flag_wait("flag_sewer_oppression_event_ilona_building_start"); level.ilana allowedstances("stand","crouch","prone"); } //Function Number: 154 sewer_scene_manhole_interaction() { if(!isdefined(level.snake_cloud)) { level thread sewer_scene_manhole_spawn_swim_swarm(); } var_00 = maps\betrayal_util::get_ent_by_targetname("animorg_sewer_ladder_climb"); var_01 = maps\betrayal_util::get_ent_by_targetname("oldtown_sewer_lid"); var_02 = maps\betrayal_util::get_ent_by_targetname("oldtown_sewer_lid_outside"); var_02 hide(); var_01.animname = "sewer_lid"; var_01 maps\_utility::assign_animtree(); var_00 maps\_anim::anim_first_frame_solo(var_01,"sewer_grate_open"); var_03 = maps\betrayal_util::get_ent_by_targetname("trigger_swim_get_out_sewer"); var_04 = var_03 maps\_shg_utility::hint_button_trigger("use",200); var_03 maps\_utility::addhinttrigger(&"BETRAYAL_OPEN_MANHOLE",&"BETRAYAL_OPEN_MANHOLE_PC"); var_03 waittill("trigger"); maps\_player_exo::player_exo_deactivate(); var_04 maps\_shg_utility::hint_button_clear(); var_03 delete(); common_scripts\utility::flag_set("flag_objective_swim_scene_complete"); common_scripts\utility::flag_set("oldtown_start_lighting"); level.swim_warbird = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("sewer_exit_warbird_outro"); level.swim_warbird soundscripts\_snd::snd_message("aud_ambient_helicopter","sewer_exit_warbird_outro"); if(level.currentgen) { maps\_utility::tff_sync(); } level maps\betrayal_util::animate_player_on_rig_simple("player_hands","sewer_grate_open","animorg_sewer_ladder_climb",0.5,[var_01]); var_01 hide(); var_02 show(); common_scripts\utility::flag_set("flag_dialogue_sewer_guards"); common_scripts\utility::flag_set("flag_objective_freerun_scene_start"); maps\_player_exo::player_exo_activate(); level thread sewer_scene_manhole_backtrack_failure(); common_scripts\utility::flag_wait("flag_sewer_backtrack_ender"); } //Function Number: 155 sewer_scene_teleport_ilona_to_sewer_exit(param_00) { level.ilana pushplayer(0); level.ilana maps\betrayal_util::start_squad_member_at_start("exit_sewer_ilana"); } //Function Number: 156 sewer_scene_manhole_spawn_swim_swarm() { if(level.currentgen) { level.snake_cloud = vehicle_scripts\_attack_drone_common::spawn_snake_cloud("swarm_spawner_swim","swarm_swim_path4",6,5); return; } level.snake_cloud = vehicle_scripts\_attack_drone_common::spawn_snake_cloud("swarm_spawner_swim","swarm_swim_path4"); } //Function Number: 157 sewer_scene_setup_manholde_vignette_civs() { common_scripts\utility::flag_set("flag_sewer_exit_civ_setup"); common_scripts\utility::run_thread_on_targetname("sewer_exit_scene_civilian_setup_initial",::maps\betrayal_util::civilian_setup,"flag_sewer_exit_player_fired_weapon",0); thread sewer_exit_monitor_player_weapon_fire(); } //Function Number: 158 sewer_exit_monitor_player_weapon_fire() { level endon("flag_sewer_oppression_event_start"); level.player common_scripts\utility::waittill_any("begin_firing","grenade_fire"); common_scripts\utility::flag_set("flag_sewer_exit_player_fired_weapon"); } //Function Number: 159 sewer_scene_manhole_backtrack_failure() { level thread sewer_scene_backtrack_failure(); common_scripts\utility::flag_wait("flag_sewer_backtrack_ender"); level.snake_cloud vehicle_scripts\_attack_drone_common::snake_cloud_goto_points("swarm_swim_path5",undefined,4); } //Function Number: 160 sewer_scene_backtrack_failure() { wait(40); if(!common_scripts\utility::flag("flag_sewer_backtrack_ender")) { level notify("sewer_scene_start_backtrack_fail"); level thread sewer_scene_backtrack_fail_send_in_flyers(); var_00 = maps\betrayal_util::get_ents_by_targetname("sewer_backtrack_guards"); foreach(var_02 in var_00) { var_03 = var_02 maps\_utility::spawn_ai(1); wait 0.05; var_03 maps\_vehicle::godon(); var_03.baseaccuracy = 5; var_03.goalradius = 32; if(isdefined(var_03.script_noteworthy)) { switch(var_03.script_noteworthy) { case "sewer_guard1": var_03.animname = "atlas_guard_1"; var_03 thread maps\_mech::mech_start_hunting(); break; case "sewer_guard2": var_03.animname = "atlas_guard_2"; level.atlas_guard2 = var_03; var_03 thread maps\_mech::mech_start_hunting(); break; case "sewer_guard3": var_03.animname = "atlas_guard_3"; level.atlas_guard3 = var_03; var_03.health = 300; break; case "sewer_guard4": var_03.animname = "atlas_guard_4"; level.atlas_guard4 = var_03; var_03.health = 300; break; case "sewer_guard5": var_03.canjumppath = 1; level.atlas_guard5 = var_03; var_03.health = 300; break; } } } level.atlas_guard3 thread maps\betrayal_util::simple_anim_at_struct("sewer_guard3_animorg"); level.atlas_guard4 thread maps\betrayal_util::simple_anim_at_struct("sewer_guard4_animorg"); level.ilana.ignoreall = 0; level thread maps\betrayal_vo::play_dialogue_oldtown_player_spotted(level.atlas_guard5,level.atlas_guard2); level.player common_scripts\utility::waittill_any_timeout(10,"death"); wait(0.5); setdvar("ui_deadquote",&"BETRAYAL_FAIL_ESCAPE"); maps\_utility::missionfailedwrapper(); } } //Function Number: 161 sewer_scene_backtrack_fail_send_in_flyers() { level.snake_cloud vehicle_scripts\_attack_drone_common::snake_cloud_goto_points("swarm_playerfail1",undefined,4); var_00 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("sewer_exit_fail_warbird"); var_00 soundscripts\_snd::snd_message("aud_ambient_helicopter","sewer_exit_fail_warbird"); var_00 thread maps\_vehicle::godon(); var_00 thread maps\betrayal_util::warbird_shooting_think(0,1); var_00.turret_target_override = level.player; } //Function Number: 162 sewer_scene_market_section() { level waittill("oldtown_intro_civ_setup"); thread sewer_scene_market_vig_civ_init(); thread sewer_scene_drone_vehicle_setup(); thread sewer_scene_market_bystander_oppression_setup(); thread sewer_scene_spawn_guards_at_market_checkpoint(1); thread sewer_scene_market_atlas_oppression_setup(); level thread sewer_scene_market_section_handle_ilona_move(); level thread sewer_scene_guards_alerted_wake_up_scene(); level thread sewer_scene_checkpoint_handle_guard_wakeup(); } //Function Number: 163 sewer_scene_market_section_handle_ilona_move() { } //Function Number: 164 sewer_scene_guards_alerted_wake_up_scene() { common_scripts\utility::flag_wait("flag_sewer_checkpoint_guards_wakeup"); var_00 = getaiarray("axis"); var_00 = sortbydistance(var_00,level.player.origin); level thread maps\betrayal_vo::play_dialogue_oldtown_player_spotted(var_00[0],var_00[1]); level notify("market_walla_guards_wakeup"); level.ilana.ignoreall = 0; if(isdefined(level.snake_cloud)) { level.snake_cloud thread vehicle_scripts\_attack_drone_common::snake_cloud_goto_points("freerun_drone_path0",undefined,4); } thread maps\betrayal_util::clear_ignore_all_on_group(level.bystander_oppression_event_ents); common_scripts\utility::flag_set("flag_enable_battle_chatter"); } //Function Number: 165 sewer_scene_market_vig_civ_init() { common_scripts\utility::run_thread_on_targetname("sewer_exit_scene_civilian_setup",::maps\betrayal_util::civilian_setup,"flag_sewer_checkpoint_guards_wakeup",0); } //Function Number: 166 sewer_scene_drone_vehicle_setup() { level thread sewer_scene_drone_oppresion_fly(); level thread sewer_scene_drone_surprise_ilona(); } //Function Number: 167 sewer_scene_drone_oppresion_fly() { common_scripts\utility::flag_wait("flag_sewer_oppression_event_start"); var_00 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("atlas_guard_oppression_event_drone_00"); var_01 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("atlas_guard_oppression_event_drone_01"); } //Function Number: 168 sewer_scene_drone_surprise_ilona() { level endon("sewer_scene_cleanup"); var_00 = maps\betrayal_util::get_ent_by_targetname("trigger_sewer_ilona_drone_scare"); for(;;) { var_00 waittill("trigger",var_01); if(var_01 == level.player) { return; } if(var_01 == level.ilana) { var_02 = distance(level.ilana.origin,level.player.origin); if(var_02 > 150) { var_03 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("atlas_guard_oppression_event_drone_02"); var_03.pacifist = 1; wait(0.75); level.ilana.animname = "ilana"; var_04 = "ilona_react_to_drone"; level.ilana maps\_anim::anim_single_solo_run(level.ilana,var_04); } return; } } } //Function Number: 169 sewer_scene_spawn_guards_at_market_checkpoint(param_00) { level.guards_at_market_checkpoint_array = []; var_01 = getentarray("guard_at_market_checkpoint","script_noteworthy"); foreach(var_03 in var_01) { var_04 = var_03 maps\_utility::spawn_ai(1,0); level.guards_at_market_checkpoint_array = common_scripts\utility::array_add(level.guards_at_market_checkpoint_array,var_04); if(isdefined(param_00)) { var_04 maps\_utility::set_ignoreall(param_00); } else { var_04 maps\_utility::set_ignoreall(1); } var_04 thread maps\betrayal_util::delete_ai_on_flag("flag_sewer_finish_sewer_scene_cleanup"); var_04 thread sewer_scene_checkpoint_guard_wakeup(); var_04.animname = "generic"; if(isdefined(var_04.animation)) { var_05 = var_04.animation; } else { var_05 = "bet_ceremony_security_idle_guy01"; } var_04 thread maps\_anim::anim_loop([var_04],var_05); } } //Function Number: 170 sewer_scene_market_bystander_oppression_setup() { level endon("flag_sewer_checkpoint_guards_wakeup"); level.bystander_oppression_event_ents = maps\betrayal_util::spawn_ai_from_targetname("bystander_oppression_event",1,0); foreach(var_01 in level.bystander_oppression_event_ents) { if(isdefined(var_01)) { var_01.animname = "generic"; var_02 = var_01 maps\betrayal_util::civilian_get_random_idle(); var_01 thread maps\_anim::anim_loop_solo(var_01,var_02); } } common_scripts\utility::array_thread(level.bystander_oppression_event_ents,::sewer_scene_vignette_actor_flee); common_scripts\utility::flag_wait("oppression_ent_completed_beat_02"); common_scripts\utility::array_thread(level.bystander_oppression_event_ents,::sewer_scene_vignette_bystander_react); } //Function Number: 171 sewer_scene_vignette_bystander_react() { self endon("death"); if(isdefined(self) && isdefined(self.script_noteworthy)) { maps\betrayal_util::stop_current_animations(); self.animname = "civilian_react"; var_00 = self.script_noteworthy; maps\_anim::anim_single_solo(self,var_00); if(isdefined(self.script_parameters)) { maps\betrayal_util::stop_current_animations(); var_00 = self.script_parameters; thread maps\_anim::anim_loop([self],var_00); return; } maps\betrayal_util::stop_current_animations(); var_00 = maps\betrayal_util::civilian_get_random_reaction(); thread maps\_anim::anim_loop([self],var_00); } } //Function Number: 172 sewer_scene_vignette_actor_flee() { common_scripts\utility::flag_wait("flag_sewer_checkpoint_guards_wakeup"); if(isdefined(self) && isdefined(self.target)) { maps\betrayal_util::stop_current_animations(); var_00 = getnode(self.target,"targetname"); self.goalradius = 16; maps\_utility::set_goal_node(var_00); self notify("move"); thread maps\betrayal_util::delete_ai_on_goal(); } } //Function Number: 173 sewer_scene_market_atlas_oppression_setup() { level.guard_oppression_event_ents = []; maps\betrayal_util::add_spawn_function_to_noteworthy("atlas_guard_oppression_event_roof_guy",::sewer_scene_store_oppresion_guy); var_00 = maps\betrayal_util::get_ents_by_targetname("atlas_guard_oppression_event"); foreach(var_02 in var_00) { var_03 = var_02 maps\_utility::spawn_ai(1,0); level.guard_oppression_event_ents = common_scripts\utility::array_add(level.guard_oppression_event_ents,var_03); } var_05 = maps\betrayal_util::get_ent_by_targetname("atlas_guard_oppression_event_starter"); level.oppression_starter = var_05 maps\_utility::spawn_ai(1,0); level.guard_oppression_event_ents = common_scripts\utility::array_add(level.guard_oppression_event_ents,level.oppression_starter); foreach(var_07 in level.guard_oppression_event_ents) { var_07 thread maps\betrayal_util::delete_ai_on_flag("boat_scene_start"); var_07.canjumppath = 1; var_07 maps\_utility::set_ignoreall(1); var_07 thread sewer_scene_checkpoint_guard_wakeup(); var_07 maps\betrayal_util::stop_current_animations(); var_07.animname = "generic"; if(isdefined(var_07.animation)) { var_08 = var_07.animation; } else { var_08 = "bet_ceremony_security_idle_guy01"; } var_07 thread maps\_anim::anim_loop([var_07],var_08); } level thread sewer_scene_handle_opression_event(); common_scripts\utility::flag_wait("oppression_ent_completed_beat_01"); foreach(var_07 in level.guard_oppression_event_ents) { if(isdefined(var_07.target)) { var_07 maps\betrayal_util::stop_current_animations(); var_0B = getnode(var_07.target,"targetname"); var_07 maps\_utility::set_goal_node(var_0B); var_07.goalradius = 16; var_07 notify("move"); } } } //Function Number: 174 sewer_scene_store_oppresion_guy() { if(!isdefined(level.sewer_scene_oppresion_guys)) { level.sewer_scene_oppresion_guys = []; } level.sewer_scene_oppresion_guys[level.sewer_scene_oppresion_guys.size] = self; } //Function Number: 175 sewer_scene_handle_opression_event() { var_00 = maps\betrayal_util::get_ent_by_targetname("oppressed_civ01_spanwer"); var_01 = maps\betrayal_util::get_ent_by_targetname("oppressed_civ02_spanwer"); level.oppressed_civ01 = var_00 maps\_utility::spawn_ai(1,0); level.oppressed_civ02 = var_01 maps\_utility::spawn_ai(1,0); level.oppressed_civs = []; level.oppressed_civs = common_scripts\utility::array_add(level.oppressed_civs,level.oppressed_civ01); level.oppressed_civs = common_scripts\utility::array_add(level.oppressed_civs,level.oppressed_civ02); foreach(var_03 in level.oppressed_civs) { var_03 thread maps\betrayal_util::delete_ai_on_flag("flag_sewer_finish_sewer_scene_cleanup"); var_03 maps\_utility::set_ignoreall(1); var_03 maps\betrayal_util::stop_current_animations(); var_03.animname = "scripted"; if(isdefined(var_03.animation)) { var_04 = var_03.animation; } else { var_04 = "civilian_stand_idle"; } var_03 thread maps\_anim::anim_loop([var_03],var_04); } level.oppressed_civ01 thread sewer_scene_oppression_civ01(); level.oppressed_civ02 thread sewer_scene_oppression_civ02(); level.oppression_starter thread sewer_scene_oppression_guard(); level.oppression_starter thread sewer_scene_checkpoint_guard_wakeup(); soundscripts\_snd::snd_message("market_walla_cleanup","flag_sewer_finish_sewer_scene_cleanup"); common_scripts\utility::flag_wait("flag_sewer_oppression_event_start"); common_scripts\utility::flag_set("start_oppression_event"); } //Function Number: 176 sewer_scene_oppression_civ01() { level endon("flag_sewer_checkpoint_guards_wakeup"); thread sewer_scene_vignette_actor_flee(); common_scripts\utility::flag_wait("start_oppression_event"); maps\betrayal_util::stop_current_animations(); self.animname = "scripted"; thread maps\_anim::anim_loop([self],"civilian_directions_stand_idle"); common_scripts\utility::flag_wait("oppression_ent_completed_beat_02"); wait(0.2); maps\betrayal_util::stop_current_animations(); self.animname = "scripted"; maps\_anim::anim_single_solo(self,"civ_react_handsup"); maps\betrayal_util::stop_current_animations(); self.animname = "scripted"; thread maps\_anim::anim_loop([self],"civ_react_handsup_idle"); } //Function Number: 177 sewer_scene_oppression_civ02() { level endon("flag_sewer_checkpoint_guards_wakeup"); thread sewer_scene_vignette_actor_flee(); common_scripts\utility::flag_wait("start_oppression_event"); maps\betrayal_util::stop_current_animations(); self.animname = "scripted"; thread maps\_anim::anim_loop([self],"civilian_directions_stand_idle_2"); common_scripts\utility::flag_wait("oppression_ent_completed_beat_02"); wait(0.5); maps\betrayal_util::stop_current_animations(); self.animname = "scripted"; maps\_anim::anim_single_solo(self,"civ_react_handsup"); maps\betrayal_util::stop_current_animations(); self.animname = "scripted"; thread maps\_anim::anim_loop([self],"civ_react_handsup_idle"); } //Function Number: 178 sewer_scene_oppression_guard() { level endon("flag_sewer_checkpoint_guards_wakeup"); common_scripts\utility::flag_wait("start_oppression_event"); maps\betrayal_util::stop_current_animations(); self.animname = "scripted"; thread maps\_anim::anim_single_solo(self,"soldier_drone_walk_to_and_point"); wait(3); common_scripts\utility::flag_set("oppression_ent_completed_beat_01"); wait(1); self.animname = "scripted"; thread maps\_anim::anim_loop([self],"soldier_drone_standing_gun_raised_idle"); common_scripts\utility::flag_set("oppression_ent_completed_beat_02"); wait(1); var_00 = "ny_manhattan_radio_sandman_talk"; maps\_anim::anim_single_solo(self,var_00); self.animname = "scripted"; thread maps\_anim::anim_loop([self],"soldier_drone_standing_gun_raised_idle"); common_scripts\utility::flag_wait("oppression_ent_completed_beat_03"); } //Function Number: 179 sewer_scene_checkpoint_guard_wakeup() { self endon("death"); common_scripts\utility::flag_wait("flag_sewer_checkpoint_guards_wakeup"); maps\betrayal_util::stop_current_animations(); maps\_utility::set_goal_radius(128); self setgoalpos(self.origin); for(;;) { maps\_utility::set_ignoreall(0); maps\_utility::set_baseaccuracy(0.05); while(!common_scripts\utility::flag("flag_sewer_player_failed_checkpoint")) { wait(0.5); } self.original_position = self.origin; maps\_utility::set_ignoreall(0); maps\_utility::set_baseaccuracy(5); thread maps\_utility::player_seek_enable(); while(common_scripts\utility::flag("flag_sewer_player_failed_checkpoint")) { wait(0.5); } maps\_utility::player_seek_disable(); maps\_utility::set_goal_pos(self.original_position); } } //Function Number: 180 sewer_scene_checkpoint_handle_guard_wakeup() { level thread sewer_scene_checkpoint_fail_conditions(); common_scripts\utility::flag_wait("oppression_ent_completed_beat_02"); wait(15); common_scripts\utility::flag_set("flag_sewer_checkpoint_guards_wakeup"); } //Function Number: 181 sewer_scene_checkpoint_fail_conditions(param_00) { common_scripts\utility::flag_wait("start_market_fail_conditions"); level thread sewer_scene_checkpoint_failed_player_jumped_down(); if(!isdefined(param_00) || param_00) { level thread sewer_scene_checkpoint_failed_player_stayed_behind(); level thread sewer_scene_checkpoint_failed_player_shot(); level thread sewer_scene_checkpoint_failed_player_too_close(); level thread sewer_scene_checkpoint_failed_player_went_back(); } common_scripts\utility::flag_wait("flag_sewer_player_failed_checkpoint"); level thread sewer_scene_chkpt_fail_warbird(); if(!isdefined(param_00) || param_00) { level thread sewer_scene_chkpt_fail_extra_hunters(); } thread sewer_scene_checkpoint_player_killvol_handling(); if(maps\betrayal_util::player_mission_failed_handler(20,"flag_sewer_player_failed_checkpoint") && !common_scripts\utility::flag("flag_sewer_player_jumped_in_market")) { thread sewer_scene_checkpoint_fail_conditions(0); } } //Function Number: 182 sewer_scene_checkpoint_failed_player_jumped_down() { level endon("flag_sewer_player_failed_checkpoint"); common_scripts\utility::flag_wait("flag_sewer_player_jumped_in_market"); common_scripts\utility::flag_set("flag_sewer_checkpoint_guards_wakeup"); common_scripts\utility::flag_set("flag_sewer_player_failed_checkpoint"); } //Function Number: 183 sewer_scene_checkpoint_player_killvol_handling() { level.player endon("death"); level.market_kill_volume = maps\betrayal_util::get_ent_by_targetname("sewer_scene_security_magicbullet_player"); var_00 = getent("sewer_scene_magic_bullet_start","targetname"); var_01 = level.player geteye(); for(;;) { if(level.player istouching(level.market_kill_volume)) { var_01 = level.player geteye(); magicbullet("iw5_thor_sp",var_00.origin,var_01); level.player kill(); wait(0.5); setdvar("ui_deadquote",&"BETRAYAL_FAIL_ESCAPE"); maps\_utility::missionfailedwrapper(); } wait 0.05; } } //Function Number: 184 sewer_scene_checkpoint_failed_player_went_back() { level endon("flag_sewer_player_failed_checkpoint"); common_scripts\utility::flag_wait("flag_sewer_player_went_back"); common_scripts\utility::flag_set("flag_sewer_checkpoint_guards_wakeup"); wait(20); if(common_scripts\utility::flag("flag_sewer_oldtown_intro_complete")) { return; } common_scripts\utility::flag_set("flag_sewer_player_failed_checkpoint"); } //Function Number: 185 sewer_scene_checkpoint_failed_player_stayed_behind() { level endon("flag_sewer_player_failed_checkpoint"); common_scripts\utility::flag_wait("oppression_ent_completed_beat_02"); wait(15); common_scripts\utility::flag_set("flag_sewer_checkpoint_guards_wakeup"); wait(40); if(common_scripts\utility::flag("flag_sewer_oldtown_intro_complete")) { return; } common_scripts\utility::flag_set("flag_sewer_player_failed_checkpoint"); } //Function Number: 186 sewer_scene_checkpoint_failed_player_shot() { level endon("flag_sewer_player_failed_checkpoint"); level.player common_scripts\utility::waittill_any("begin_firing","grenade_fire"); common_scripts\utility::flag_set("flag_sewer_checkpoint_guards_wakeup"); wait(10); if(common_scripts\utility::flag("flag_sewer_oldtown_intro_complete")) { return; } common_scripts\utility::flag_set("flag_sewer_player_failed_checkpoint"); } //Function Number: 187 sewer_scene_checkpoint_failed_player_too_close() { level endon("flag_sewer_player_failed_checkpoint"); var_00 = 0; while(!var_00) { wait(0.05); level.sewer_scene_oppresion_guys = common_scripts\utility::array_removeundefined(level.sewer_scene_oppresion_guys); foreach(var_02 in level.sewer_scene_oppresion_guys) { if(isdefined(var_02) && distance(var_02.origin,level.player.origin) < 250) { var_00 = 1; } } } common_scripts\utility::flag_set("flag_sewer_checkpoint_guards_wakeup"); wait(20); if(common_scripts\utility::flag("flag_sewer_oldtown_intro_complete")) { return; } common_scripts\utility::flag_set("flag_sewer_player_failed_checkpoint"); } //Function Number: 188 sewer_scene_chkpt_fail_warbird() { var_00 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("chkpt_fail_warbird"); var_00 soundscripts\_snd::snd_message("aud_ambient_helicopter","chkpt_fail_warbird"); var_00 thread maps\_vehicle::godon(); var_00 thread maps\betrayal_util::warbird_shooting_think(0,1); var_00 setlookatent(level.player); common_scripts\utility::flag_waitopen("flag_sewer_player_failed_checkpoint"); var_01 = common_scripts\utility::getstruct("final_path_fail_warbird","targetname"); var_00 thread maps\_vehicle_code::_vehicle_paths(var_01); } //Function Number: 189 sewer_scene_chkpt_fail_extra_hunters() { level notify("stop_fail_extra_hunters"); level endon("stop_fail_extra_hunters"); var_00 = maps\betrayal_util::get_ents_by_targetname("sewer_guard_failed_hunter"); var_01 = []; common_scripts\utility::array_thread(var_00,::maps\_utility::add_spawn_function,::sewer_scene_chkpt_fail_extra_hunters_setup); var_02 = 6; while(var_00.size > 0) { var_00 = sortbydistance(var_00,level.player.origin); while(common_scripts\utility::flag("flag_sewer_player_failed_checkpoint")) { var_01 = maps\_utility::array_removedead_or_dying(var_01); foreach(var_04 in var_01) { var_04 thread sewer_scene_chkpt_fail_extra_hunters_setup(); } if(var_01.size < var_02) { for(var_06 = 0;var_06 < var_00.size;var_06++) { if(!maps\_utility::either_player_looking_at(var_00[var_06].origin,undefined,undefined,undefined)) { var_07 = var_00[var_06] maps\_utility::spawn_ai(); if(maps\_utility::spawn_failed(var_07)) { continue; } var_01 = common_scripts\utility::array_add(var_01,var_07); var_00[var_06] delete(); var_00[var_06] = undefined; } if(!common_scripts\utility::flag("flag_sewer_player_failed_checkpoint")) { break; } if(var_01.size >= var_02) { break; } wait(0.5); } var_00 = common_scripts\utility::array_removeundefined(var_00); if(var_00.size <= 0) { break; } } wait(2); } foreach(var_04 in var_01) { if(isdefined(var_04)) { var_04 maps\_utility::set_baseaccuracy(0.5); var_04 thread maps\_utility::player_seek_disable(); } } wait(2); if(common_scripts\utility::flag("oldtown_section4")) { break; } } foreach(var_04 in var_01) { var_04 maps\betrayal_util::delete_ai(); } } //Function Number: 190 sewer_scene_chkpt_fail_extra_hunters_setup() { maps\_utility::set_ignoreall(0); maps\_utility::set_baseaccuracy(5); thread maps\_utility::player_seek_enable(); } //Function Number: 191 sewer_scene_scripted_objects() { level.oldtown_ceiling_fans = maps\betrayal_util::get_ents_by_targetname("ceiling_fan_turning"); common_scripts\utility::run_thread_on_targetname("ceiling_fan_turning",::maps\betrayal_util::scripted_spin_fan_blades,7,"oldtown_dock_scene_cleanup"); } //Function Number: 192 oldtown_scene_master_handler() { common_scripts\utility::flag_set("flag_dialogue_start_oldtown"); level thread oldtown_freerun(); common_scripts\utility::flag_wait("oldtown_dock_flyby"); level thread oldtown_dock_master_handler(); } //Function Number: 193 oldtown_freerun() { level.oldtown_enemy_array = []; level.oldtown_chasers = []; level thread oldtown_freerun_civ_init(); level thread oldtown_freerun_enemy_spawner_init(); level thread oldtown_freerun_ilona_ignore_pain_handler(); level thread oldtown_freerun_scripted_object_setup(); common_scripts\utility::flag_wait("flag_sewer_scene_transfer_to_free_run"); level.ilana.runngun = 1; thread oldtown_freerun_ilana_awareness(); common_scripts\utility::flag_set("flag_enable_battle_chatter"); level.player setclutforplayer("clut_betrayal_c3_01",5); thread oldtown_freerun_enemy_removal(); thread oldtown_freerun_enemy_cleanup_maintain(); if(!isdefined(level.guards_at_market_checkpoint_array)) { sewer_scene_spawn_guards_at_market_checkpoint(0); thread maps\betrayal_util::clear_ignore_all_on_group(level.guards_at_market_checkpoint_array); } thread oldtown_freerun_security_checkpoint_guards_hold_fire(); if(!isdefined(level.market_kill_volume)) { thread sewer_scene_checkpoint_player_killvol_handling(); } thread oldtown_freerun_enemy_dresser_kick(); thread oldtown_freerun_warbird_pass(); thread oldtown_freerun_failstate_monitor(); if(level.currentgen) { thread oldtown_freerun_cg_perf_maintain(); } } //Function Number: 194 oldtown_freerun_cg_perf_maintain() { var_00 = ["basic_set_1"]; thread maps\_cg_encounter_perf_monitor::cg_spawn_perf_monitor("oldtown_dock_flyby",var_00,12,0); } //Function Number: 195 oldtown_freerun_ilana_awareness() { common_scripts\utility::flag_wait("rear_pressure_go"); level.ilana.ignoreall = 0; level.ilana.ignoresuppression = 1; } //Function Number: 196 oldtown_freerun_ilona_ignore_pain_handler() { common_scripts\utility::flag_wait("freerun_ilona_ignore_pain"); level.ilana maps\_utility::disable_pain(); common_scripts\utility::flag_wait("freerun_ilona_feel_pain"); level.ilana maps\_utility::enable_pain(); } //Function Number: 197 oldtown_freerun_civ_init() { thread oldtown_freerun_civ_setup(); thread oldtown_freerun_civ_walker_setup(); thread oldtown_freerun_civ_badplace_pathing(); thread oldtown_freerun_civ_ender(); } //Function Number: 198 oldtown_freerun_civ_setup() { common_scripts\utility::run_thread_on_targetname("freerun_civilian_spawn_trig",::maps\betrayal_util::civilian_setup,1200,0); } //Function Number: 199 oldtown_freerun_civ_badplace_pathing() { var_00 = getentarray("oldtown_freerun_dronezone","targetname"); foreach(var_02 in var_00) { badplace_brush("droneZone_volume",-1,var_02,"neutral","axis","allies"); } } //Function Number: 200 oldtown_freerun_civ_walker_setup() { level.freerun_walker_array = []; var_00 = 10; var_01 = getent("freerun_civ_male_walker_spawner","targetname"); var_02 = getent("freerun_civ_female_walker_spawner","targetname"); var_03 = [var_01,var_02]; var_04 = common_scripts\utility::getstructarray("freerun_walker_start","targetname"); var_05 = getnodearray("freerun_walker_exit_node","targetname"); thread oldtown_freerun_civ_walker_maintainer(var_03,var_04,var_05,var_00); } //Function Number: 201 oldtown_freerun_civ_walker_maintainer(param_00,param_01,param_02,param_03) { level endon("freerun_go"); for(;;) { if(level.freerun_walker_array.size < param_03) { param_01 = common_scripts\utility::array_randomize(param_01); param_02 = common_scripts\utility::array_randomize(param_02); param_00 = common_scripts\utility::array_randomize(param_00); param_00[0].count = 1; var_04 = param_00[0] maps\_utility::spawn_ai(1); level.freerun_walker_array = common_scripts\utility::array_add(level.freerun_walker_array,var_04); var_04.goalradius = 32; var_04.alertlevel = "noncombat"; var_04 maps\betrayal_util::set_custom_patrol_anim_set("panic"); var_04 forceteleport(param_01[0].origin,param_01[0].angles); wait 0.05; var_04 setgoalnode(param_02[0]); var_04 thread oldtown_freerun_civ_walker_panic(); var_04 thread oldtown_freerun_civ_walker_removal(); } wait 0.05; } } //Function Number: 202 oldtown_freerun_civ_walker_panic() { self endon("death"); level waittill("freerun_go"); wait(randomfloatrange(0.5,1.25)); if(isdefined(self)) { self.alertlevel = "combat"; maps\betrayal_util::set_custom_patrol_anim_set("panic"); } self.animname = "civilian_react"; level.esc_node_locations = sortbydistance(level.esc_node_locations,self.origin); var_00 = level.esc_node_locations[0]; level.esc_node_locations = common_scripts\utility::array_remove(level.esc_node_locations,level.esc_node_locations[0]); wait 0.05; self setgoalnode(var_00); self waittill("goal"); var_00 thread maps\_anim::anim_loop_solo(self,"civ_react_cower_crouch_to_crouch_2","stop_loop"); if(isdefined(var_00.target)) { thread maps\betrayal_util::civilian_actor_ai_player_reaction(var_00); } } //Function Number: 203 oldtown_freerun_civ_walker_panic_retreat(param_00) { var_01 = getnode(param_00.target,"targetname"); var_02 = var_01.script_noteworthy; common_scripts\utility::flag_wait(var_02); self notify("stop_loop"); self stopanimscripted(); wait 0.05; self setgoalnode(var_01); self waittill("goal"); var_01 thread maps\_anim::anim_loop_solo(self,"civ_react_cower_crouch_to_crouch_2","stop_loop"); } //Function Number: 204 oldtown_freerun_civ_walker_removal() { level waittill("freerun_go"); self endon("death"); self waittill("goal"); level.freerun_walker_array = common_scripts\utility::array_remove(level.freerun_walker_array,self); maps\betrayal_util::delete_ai(); } //Function Number: 205 oldtown_freerun_civ_ender() { common_scripts\utility::flag_wait("flag_sewer_oldtown_intro_complete"); common_scripts\utility::flag_set("rear_pressure_go"); level notify("freerun_go"); } //Function Number: 206 oldtown_freerun_enemy_spawner_init() { maps\betrayal_util::add_spawn_function_to_noteworthy("basic_set_1",::oldtown_freerun_enemy_spawner_func); maps\betrayal_util::add_spawn_function_to_noteworthy("basic_set_1",::oldtown_freerun_enemy_spawner_alert); maps\betrayal_util::add_spawn_function_to_noteworthy("vo_group_1",::oldtown_freerun_enemy_spawner_func); maps\betrayal_util::add_spawn_function_to_noteworthy("vo_group_1",::oldtown_freerun_enemy_vo_setup); maps\betrayal_util::add_spawn_function_to_noteworthy("vo_group_1",::oldtown_freerun_enemy_secondgoal,"flr1_set1_spawner5_goal_second"); maps\betrayal_util::add_spawn_function_to_noteworthy("vig_jump_group_1",::oldtown_freerun_enemy_spawner_func); maps\betrayal_util::add_spawn_function_to_noteworthy("vig_jump_group_1",::oldtown_freerun_vis_jumper); maps\betrayal_util::add_spawn_function_to_noteworthy("vig_jump_group_1",::oldtown_freerun_enemy_spawner_alert); maps\betrayal_util::add_spawn_function_to_noteworthy("vig_jump_group_2",::oldtown_freerun_enemy_spawner_func); maps\betrayal_util::add_spawn_function_to_noteworthy("vig_jump_group_2",::oldtown_freerun_vis_jumper2); maps\betrayal_util::add_spawn_function_to_noteworthy("vig_jump_group_2",::oldtown_freerun_enemy_spawner_alert); maps\betrayal_util::add_spawn_function_to_noteworthy("mech_group_1",::oldtown_freerun_mech_hunting); maps\betrayal_util::add_spawn_function_to_noteworthy("mech_group_1",::oldtown_freerun_mech_persist); maps\betrayal_util::add_spawn_function_to_noteworthy("doorkick_group_1",::oldtown_freerun_enemy_spawner_func); maps\betrayal_util::add_spawn_function_to_noteworthy("doorkick_group_1",::oldtown_freerun_doorkick_enemy_setup); maps\betrayal_util::add_spawn_function_to_noteworthy("frag_group_1",::oldtown_freerun_enemy_spawner_func); maps\betrayal_util::add_spawn_function_to_noteworthy("dresser_group_1",::oldtown_freerun_enemy_spawner_func); maps\betrayal_util::add_spawn_function_to_noteworthy("dresser_group_1",::oldtown_freerun_enemy_dresser_kick_setup); } //Function Number: 207 oldtown_freerun_enemy_spawner_alert() { if(!isdefined(level.freerun_enemy_alert_notified)) { if(randomint(100) < 15) { level.freerun_enemy_alert_notified = 1; level thread maps\betrayal_vo::play_dialogue_oldtown_player_spotted(self,undefined,1); wait(1); level.freerun_enemy_alert_notified = undefined; } } } //Function Number: 208 oldtown_freerun_enemy_spawner_func(param_00) { var_01 = self.target; wait 0.05; if(isdefined(param_00)) { thread oldtown_freerun_enemy_removal_offscreen(param_00); } self.baseaccuracy = 0.5; self.canjumppath = 1; thread oldtown_freerun_enemy_goal_assign(var_01); thread oldtown_freerun_enemy_monitor_player_pos(); level.oldtown_enemy_array = common_scripts\utility::array_add(level.oldtown_enemy_array,self); } //Function Number: 209 oldtown_freerun_enemy_monitor_player_pos() { self endon("death"); var_00 = self.target; for(;;) { var_01 = oldtown_freerun_enemy_chk_player_pos(var_00); if(var_01 < 0) { break; } wait 0.05; } thread oldtown_freerun_enemy_chase_player(); } //Function Number: 210 oldtown_freerun_enemy_chk_player_pos(param_00) { var_01 = getnode(param_00,"targetname"); var_02 = anglestoforward(var_01.angles); var_03 = level.player.origin - var_01.origin; var_04 = vectordot(var_02,var_03); return var_04; } //Function Number: 211 oldtown_freerun_security_checkpoint_guards_hold_fire() { var_00 = maps\betrayal_util::get_ent_by_targetname("security_checkpoint_guards_hold_fire"); var_00 waittill("trigger"); if(isdefined(level.guard_oppression_event_ents)) { level.guard_oppression_event_ents = common_scripts\utility::array_removeundefined(level.guard_oppression_event_ents); level.guards_at_market_checkpoint_array = common_scripts\utility::array_removeundefined(level.guards_at_market_checkpoint_array); var_01 = maps\_utility::array_merge(level.guard_oppression_event_ents,level.guards_at_market_checkpoint_array); } else { var_01 = common_scripts\utility::array_removeundefined(level.guards_at_market_checkpoint_array); } var_01 = common_scripts\utility::array_removeundefined(var_01); foreach(var_03 in var_01) { var_03 maps\_utility::set_ignoreall(1); } while(level.player istouching(var_00)) { var_01 = common_scripts\utility::array_removeundefined(var_01); foreach(var_03 in var_01) { if(level.player maps\_utility::player_can_see_ai(var_03)) { var_03 maps\_utility::set_ignoreall(0); var_01 = common_scripts\utility::array_remove(var_01,var_03); continue; } if(!var_03.ignoreall) { var_03 maps\_utility::set_ignoreall(1); } } wait 0.05; } var_01 = common_scripts\utility::array_removeundefined(var_01); foreach(var_03 in var_01) { var_03 maps\_utility::set_ignoreall(0); } } //Function Number: 212 oldtown_freerun_enemy_chase_player() { if(level.oldtown_chasers.size < 4) { level.oldtown_chasers = common_scripts\utility::array_add(level.oldtown_chasers,self); thread maps\_utility::player_seek_enable(); } } //Function Number: 213 oldtown_freerun_enemy_chaser_cleaner() { level endon("kill_oldtown_monitor"); for(;;) { level.oldtown_chasers = maps\_utility::array_removedead_or_dying(level.oldtown_chasers); wait(1); } } //Function Number: 214 oldtown_freerun_enemy_goal_assign(param_00,param_01) { self endon("death"); maps\betrayal_util::assign_goal_node(param_00); if(isdefined(param_01)) { if(param_01 == 1) { var_02 = self.goalradius; self.goalradius = 32; self.ignoreall = 1; self waittill("goal"); self.ignoreall = 0; self.goalradius = var_02; } } } //Function Number: 215 oldtown_freerun_enemy_vo_setup() { if(isdefined(self.script_parameters)) { self.animname = "atlas_guard_2"; level.atlas_guard2 = self; return; } if(!isdefined(self.script_parameters)) { self.animname = "atlas_guard_3"; level.atlas_guard3 = self; } } //Function Number: 216 oldtown_freerun_enemy_cleanup_maintain() { level endon("kill_oldtown_monitor"); for(;;) { wait(0.1); level.oldtown_enemy_array = maps\_utility::array_removedead_or_dying(level.oldtown_enemy_array); level.oldtown_chasers = maps\_utility::array_removedead_or_dying(level.oldtown_chasers); } } //Function Number: 217 oldtown_freerun_enemy_removal() { var_00 = getnodearray("oldtown_freerun_enemy_exit","targetname"); level.origfov = getdvarint("cg_fov"); var_01 = 1500; common_scripts\utility::flag_wait("oldtown_boat_spawn"); foreach(var_03 in level.oldtown_enemy_array) { var_04 = common_scripts\utility::within_fov(level.player.origin,level.player.angles,var_03.origin,level.origfov); var_05 = distance2d(level.player.origin,var_03.origin); if(var_05 > var_01 && var_04 != 0) { var_00 = sortbydistance(var_00); var_03 maps\betrayal_util::assign_goal_node(var_00[0],32); var_03.ignoreall = 1; var_03 waittill("goal"); var_03 maps\betrayal_util::delete_ai(); continue; } var_03 maps\betrayal_util::delete_ai(); } } //Function Number: 218 oldtown_freerun_enemy_removal_offscreen(param_00) { self endon("death"); common_scripts\utility::flag_wait(param_00); level.origfov = getdvarint("cg_fov"); var_01 = getnodearray("oldtown_freerun_enemy_exit","targetname"); var_02 = common_scripts\utility::within_fov(level.player.origin,level.player.angles,self.origin,level.origfov); if(var_02 != 0) { var_01 = sortbydistance(var_01); maps\betrayal_util::assign_goal_node(var_01[0],32); self.ignoreall = 1; self waittill("goal"); maps\betrayal_util::delete_ai(); return; } maps\betrayal_util::delete_ai(); } //Function Number: 219 oldtown_freerun_mech_hunting() { self endon("death"); common_scripts\utility::flag_wait("mech_start_hunt"); thread maps\_utility::player_seek_enable(); common_scripts\utility::flag_wait("oldtown_dock_flyby"); oldtown_freerun_enemy_removal_offscreen("oldtown_boat_spawn"); } //Function Number: 220 oldtown_freerun_mech_persist() { self endon("death"); var_00 = 600; level.mech_is_hunting = 0; for(;;) { wait(2); if(level.mech_is_hunting != 1) { var_01 = distance2d(self.origin,level.player.origin); if(var_01 < var_00) { maps\_mech::mech_stop_hunting(); level.mech_is_hunting = 0; } else { maps\_mech::mech_start_hunting(); level.mech_is_hunting = 1; } continue; } continue; } } //Function Number: 221 oldtown_freerun_enemy_dresser_kick_setup() { thread maps\_utility::magic_bullet_shield(); wait 0.05; self.animname = "generic"; level notify("event_cabinet_go"); } //Function Number: 222 oldtown_freerun_enemy_dresser_kick() { var_00 = common_scripts\utility::getstruct("event_cabinet_animorg","targetname"); var_01 = maps\_utility::spawn_anim_model("cabinet_org",var_00.origin,var_00.angles); var_02 = getent("dresser_org1","targetname"); var_03 = getent("event_cabinet","targetname"); var_00 thread maps\_anim::anim_first_frame_solo(var_01,"cabinet_pull"); var_02 linkto(var_01,"tag_origin_animated"); var_03 linkto(var_01,"tag_origin_animated"); level waittill("event_cabinet_go"); var_04 = maps\_utility::get_living_ai("dresser_group_1","script_noteworthy"); var_04.allowdeath = 0; var_05 = var_04 maps\_utility::getanim_from_animname("cabinet_pull","generic"); var_06 = getanimlength(var_05); var_07 = [var_04,var_01]; var_00 thread maps\_anim::anim_single(var_07,"cabinet_pull"); wait(1.1); var_04 maps\_utility::stop_magic_bullet_shield(); var_04.allowdeath = 1; wait(var_06 - 1.1); var_02 disconnectpaths(); } //Function Number: 223 oldtown_freerun_enemy_fragging() { common_scripts\utility::flag_wait("freerun_frag_go"); var_00 = common_scripts\utility::getstruct("frag_gren_end","targetname"); var_01 = common_scripts\utility::getstruct("frag_gren_start","targetname"); magicgrenade("fraggrenade",var_01.origin,var_00.origin,2); } //Function Number: 224 oldtown_freerun_doorkick_enemy_setup() { level endon("freerun_doorkick_player_go"); common_scripts\utility::flag_wait("freerun_doorkick_enemy_go"); if(common_scripts\utility::flag("freerun_doorkick_player_go")) { return; } level notify("freerun_doorkick_enemy_go"); var_00 = common_scripts\utility::getstruct("enemy_doorkick","targetname"); if(!isdefined(self.script_parameters)) { return; } self.animname = "generic"; self.allowdeath = 1; var_00 thread maps\_anim::anim_single_solo(self,"exo_doorkick"); } //Function Number: 225 oldtown_freerun_doorkick_enemy() { level endon("freerun_doorkick_player_go"); var_00 = getent("clip_enemy_doorkick","targetname"); var_01 = getent("model_enemy_doorkick","targetname"); var_02 = getent("model_enemy_doorkick_broken","targetname"); var_03 = common_scripts\utility::getstruct("struct_enemy_doorkick","targetname"); level.enemy_doorkick = [var_00,var_01,var_02]; var_00 disconnectpaths(); var_02 hide(); level waittill("door_smash_open"); var_00 connectpaths(); var_02 show(); var_01 delete(); var_00 delete(); var_04 = var_02.origin - var_03.origin; var_01 = var_02; var_05 = (randomintrange(-5,5),randomintrange(-5,5),randomintrange(-10,10)); var_01 physicslaunchserver(var_01.origin + var_05,var_04 * randomintrange(5,15)); } //Function Number: 226 oldtown_freerun_doorkick_player() { level endon("freerun_doorkick_enemy_go"); level.player_doorkick = getentarray("oldtown_exo_door_punch2","script_noteworthy"); foreach(var_01 in level.player_doorkick) { var_01 hide(); var_01 thread oldtown_freerun_doorkick_player_removal(); } common_scripts\utility::flag_wait("freerun_doorkick_player_go"); level notify("freerun_doorkick_player_go"); foreach(var_01 in level.player_doorkick) { var_01 show(); } level.enemy_doorkick[0] delete(); level.enemy_doorkick[1] delete(); level.enemy_doorkick[2] delete(); } //Function Number: 227 oldtown_freerun_doorkick_player_removal() { level endon("freerun_doorkick_player_go"); level waittill("freerun_doorkick_enemy_go"); self notify("exo_door_punched"); wait 0.05; self delete(); } //Function Number: 228 oldtown_freerun_vis_jumper() { common_scripts\utility::flag_wait("freerun_vis_jump_go"); if(self.script_parameters != "freerun_vis_jump_guy") { return; } self.goalradius = 8; self waittill("goal"); } //Function Number: 229 oldtown_freerun_vis_jumper2() { common_scripts\utility::flag_wait("freerun_vis_jump2_go"); if(self.script_parameters != "freerun_vis_jump2_guy") { return; } self.goalradius = 8; self waittill("goal"); } //Function Number: 230 oldtown_freerun_enemy_secondgoal(param_00) { if(!isdefined(self.script_parameters)) { return; } var_01 = 8; self.goalradius = var_01; self waittill("goal"); wait(0.1); maps\betrayal_util::assign_goal_node(param_00,var_01); } //Function Number: 231 oldtown_freerun_warbird_pass() { common_scripts\utility::flag_wait("oldtown_section2"); if(level.nextgen) { var_00 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("oldtown_freerun_flyby"); var_00 soundscripts\_snd::snd_message("aud_ambient_helicopter","oldtown_freerun_flyby"); var_00 thread maps\_vehicle::godon(); } } //Function Number: 232 oldtown_freerun_scripted_object_setup() { if(!isdefined(level.oldtown_ceiling_fans)) { level.oldtown_ceiling_fans = maps\betrayal_util::get_ents_by_targetname("ceiling_fan_turning"); common_scripts\utility::run_thread_on_targetname("ceiling_fan_turning",::maps\betrayal_util::scripted_spin_fan_blades,7,"oldtown_dock_scene_cleanup"); } } //Function Number: 233 oldtown_freerun_failstate_monitor() { thread oldtown_freerun_failstate_backtrack(); thread oldtown_dock_failstate_backtrack(); } //Function Number: 234 oldtown_freerun_failstate_backtrack() { level endon("player_near_freerun_end"); level.player endon("death"); level.freerun_backtrack_death_squad_spawners = maps\betrayal_util::get_ents_by_targetname("freerun_backtrack_deathsquad_spawner"); var_00 = maps\betrayal_util::get_ent_by_targetname("player_halfway_done_freerun"); var_00 waittill("trigger"); var_01 = maps\betrayal_util::get_ent_by_targetname("trigger_freerun_backtrack_deathsquad"); var_01 waittill("trigger"); common_scripts\utility::flag_set("disable_autosaves"); thread oldtown_freerun_failstate_backtrack_deathsquad(); wait(1); level thread maps\betrayal_vo::play_dialogue_oldtown_player_spotted(level.freerun_fail_hunter[0],level.freerun_fail_hunter[1]); wait(9); level.player kill(); wait(0.5); setdvar("ui_deadquote",&"BETRAYAL_FAIL_ESCAPE"); maps\_utility::missionfailedwrapper(); common_scripts\utility::flag_clear("disable_autosaves"); } //Function Number: 235 oldtown_freerun_failstate_backtrack_deathsquad() { level endon("player_near_freerun_end"); level.player endon("death"); level.freerun_fail_hunter = []; foreach(var_01 in level.freerun_backtrack_death_squad_spawners) { var_02 = var_01 maps\_utility::spawn_ai(1,0); var_02.health = 1000; var_02.baseaccuracy = 10; if(isdefined(var_02.target)) { var_03 = getnode(var_02.target,"targetname"); if(isdefined(var_03)) { var_02 maps\_utility::set_goal_node(var_03); } var_02 notify("move"); } var_02 thread maps\_utility::player_seek_enable(); level.freerun_fail_hunter[level.freerun_fail_hunter.size] = var_02; wait 0.05; } } //Function Number: 236 oldtown_dock_master_handler() { common_scripts\utility::flag_set("flag_dialogue_start_docks"); common_scripts\utility::flag_set("flag_enable_battle_chatter"); level thread oldtown_dock(); common_scripts\utility::flag_wait("boat_scene_start"); level thread oldtown_dock_cleanup(); level thread boat_scene_master_handler(); } //Function Number: 237 oldtown_dock_cleanup() { level thread oldtown_dock_post_boat_cleanup(); level thread oldtown_dock_combat_cleanup(); level notify("oldtown_dock_scene_cleanup"); common_scripts\utility::flag_wait("flag_boat_player_in_boat"); maps\_utility::activate_trigger("dock_civ_remover","targetname"); maps\_utility::activate_trigger("freerun_civilian_cleanup_trig","targetname"); } //Function Number: 238 oldtown_dock_post_boat_cleanup() { common_scripts\utility::flag_wait("flag_boat_player_in_boat"); } //Function Number: 239 oldtown_dock() { thread oldtown_dock_civ_setup(); boat_scene_early_setup(); level notify("oldtown_freerun_end"); level.oldtown_dock_enemies = []; level.ilana_dock_advance_count = 0; oldtown_dock_enemy_setup(); thread oldtown_dock_anim_jumper_setup(); thread oldtown_dock_littlebird_rooftop_vig(); thread oldtown_dock_mech_entrance(); common_scripts\utility::flag_set("flag_dialogue_docks_intro"); common_scripts\utility::flag_set("mech_docks_entrance"); thread oldtown_dock_ilana_advance(); thread oldtown_dock_fail_init(); } //Function Number: 240 oldtown_dock_civ_setup() { var_00 = maps\betrayal_util::get_ents_by_targetname("oldtown_freerun_dock_civ1"); foreach(var_02 in var_00) { var_03 = maps\betrayal_util::get_ents_by_targetname(var_02.target); foreach(var_05 in var_03) { if(isspawner(var_05)) { var_05 maps\_utility::add_spawn_function(::add_doc_civ_walla); } } } common_scripts\utility::run_thread_on_targetname("oldtown_freerun_dock_civ1",::maps\betrayal_util::civilian_setup,10000,0); } //Function Number: 241 add_doc_civ_walla() { soundscripts\_snd::snd_message("add_doc_civ_walla",self); } //Function Number: 242 oldtown_dock_ilana_advance() { oldtown_dock_ilana_advance_think("oldtown_dock_ally_redirect_1"); level.ilana.ignoresuppression = 0; level waittill("ilana_dock_advance2"); thread oldtown_dock_ilana_advance_think("oldtown_dock_ally_redirect"); level waittill("ilana_dock_advance3"); thread oldtown_dock_ilana_advance_think("oldtown_dock_ally_redirect_3"); common_scripts\utility::flag_set("flag_dialogue_docks_boat"); } //Function Number: 243 oldtown_dock_ilana_advance_think(param_00) { maps\_utility::activate_trigger(param_00,"targetname"); level.ilana.ignoreall = 1; wait(1.5); level.ilana.ignoreall = 0; } //Function Number: 244 oldtown_dock_enemy_setup() { maps\betrayal_util::add_spawn_function_to_noteworthy("docks_deploy_guy1",::oldtown_dock_enemy_moveup,"docks_deploy_guy1_goal1","docks_deploy_guy1_goal2"); maps\betrayal_util::add_spawn_function_to_noteworthy("docks_deploy_guy2",::oldtown_dock_enemy_moveup,"docks_deploy_guy2_goal1","docks_deploy_guy2_goal2"); maps\betrayal_util::add_spawn_function_to_noteworthy("docks_deploy_guy3",::oldtown_dock_enemy_moveup,"docks_deploy_guy3_goal1","docks_deploy_guy3_goal2"); maps\betrayal_util::add_spawn_function_to_noteworthy("docks_deploy_guy4",::oldtown_dock_enemy_moveup,"docks_deploy_guy4_goal1","docks_deploy_guy4_goal2"); maps\betrayal_util::add_spawn_function_to_noteworthy("docks_deploy_guy5",::oldtown_dock_enemy_moveup,"docks_deploy_guy5_goal1","docks_deploy_guy5_goal2"); maps\betrayal_util::add_spawn_function_to_noteworthy("docks_deploy_guy6",::oldtown_dock_enemy_moveup,"docks_deploy_guy6_goal1","docks_deploy_guy6_goal2"); var_00 = getentarray("oldtown_boat_spawners","targetname"); foreach(var_02 in var_00) { var_03 = var_02 maps\_utility::spawn_ai(1); var_03 thread maps\betrayal_util::delete_ai_on_flag("dock_scene_cleanup_failstate_ai"); wait 0.05; level.oldtown_dock_enemies = common_scripts\utility::array_add(level.oldtown_dock_enemies,var_03); var_03.health = 150; var_03 thread oldtown_dock_enemy_mech_death_alert(); } thread oldtown_dock_enemy_retreat(); } //Function Number: 245 oldtown_dock_enemy_moveup(param_00,param_01) { self endon("death"); wait 0.05; self.goalradius = 64; var_02 = getnode(param_00,"targetname"); var_03 = getnode(param_01,"targetname"); if(isdefined(self) && isalive(self)) { maps\_utility::set_goal_node(var_02); } level waittill("mech_goal_go"); if(isdefined(self) && isalive(self)) { maps\_utility::set_goal_node(var_03); } self.baseaccuracy = self.baseaccuracy / 3; } //Function Number: 246 oldtown_dock_enemy_retreat() { level endon("stop_dock_refill"); wait(1); for(;;) { level.oldtown_dock_enemies = maps\_utility::array_removedead_or_dying(level.oldtown_dock_enemies); if(isdefined(level.dock_mech)) { if(level.oldtown_dock_enemies.size <= 3) { level notify("dock_enemy_retreat"); level notify("ilana_dock_advance2"); foreach(var_01 in level.oldtown_dock_enemies) { var_01 maps\betrayal_util::assign_goal_vol("oldtown_boat_goalvol2"); } level.dock_mech maps\_mech::mech_start_hunting(); return; } } wait(1); } } //Function Number: 247 oldtown_dock_enemy_mech_death_alert() { self endon("death"); level waittill("mech_dead"); thread maps\_utility::player_seek_enable(); } //Function Number: 248 oldtown_dock_combat_cleanup() { common_scripts\utility::flag_wait("player_on_boat"); level notify("stop_dock_refill"); common_scripts\utility::flag_wait("dock_cleanup"); wait(1); foreach(var_01 in level.oldtown_dock_enemies) { var_01 maps\betrayal_util::delete_ai(); } } //Function Number: 249 oldtown_dock_mech_entrance() { level waittill("little_bird_vignette_complete"); var_00 = getentarray("dock_mech_spawner","targetname"); var_01 = 0; while(!var_01) { foreach(var_03 in var_00) { if(!maps\betrayal_util::player_can_see_point(var_03.origin) && !maps\betrayal_util::player_can_see_point(var_03.origin + (0,0,60)) && !maps\betrayal_util::player_can_see_point(var_03.origin + (0,0,120))) { level.dock_mech = var_03 maps\_utility::spawn_ai(1); common_scripts\utility::flag_set("flag_dialogue_docks_ast"); var_01 = 1; level.dock_mech maps\_utility::add_damage_function(::oldtown_dock_mech_damage_function); break; } } wait(0.5); } wait 0.05; level.dock_mech.goalradius = 256; level.dock_mech maps\_mech::mech_start_target_attacker(); level.dock_mech maps\_mech::mech_start_rockets(); var_05 = getnode("dock_mech_goal1","targetname"); var_06 = getnode("dock_mech_goal2","targetname"); var_07 = getnode("dock_mech_goal3","targetname"); var_08 = [var_05,var_06,var_07]; level.dock_mech thread oldtown_dock_mech_goal(var_08); thread oldtown_dock_mech_death_event(); wait(0.75); common_scripts\utility::flag_set("flag_objective_dock_scene_start"); } //Function Number: 250 oldtown_dock_mech_damage_function(param_00,param_01,param_02,param_03,param_04,param_05,param_06) { if(param_01 == level.ilana) { if(self.health > 0 && param_00 > self.bullet_resistance) { self.health = self.health + int(param_00 - self.bullet_resistance * 0.5); } } } //Function Number: 251 oldtown_dock_mech_rockets() { level endon("mech_dead"); var_00 = getent("start_boat_player","targetname"); var_01 = 450; for(;;) { if(distance2d(level.player.origin,var_00.origin) < var_01) { level.dock_mech maps\_utility::set_favoriteenemy(level.player); level.dock_mech maps\_mech::mech_fire_rockets(); wait(1); } wait 0.05; } } //Function Number: 252 oldtown_dock_mech_goal(param_00) { self endon("death"); param_00 = sortbydistance(param_00,level.player.origin); maps\_utility::set_goal_node(param_00[0]); } //Function Number: 253 oldtown_dock_mech_death_event() { level endon("stop_mech_event_monitor"); for(;;) { wait 0.05; if(!isdefined(level.dock_mech) || level.dock_mech.health <= 0) { level notify("mech_dead"); level notify("ilana_dock_advance2"); wait 0.05; level notify("ilana_dock_advance3"); common_scripts\utility::flag_set("flag_objective_dock_scene_complete"); common_scripts\utility::flag_set("boat_scene_start"); common_scripts\utility::flag_set("swarm_docks_entrance"); level notify("stop_mech_event_monitor"); } } } //Function Number: 254 oldtown_dock_anim_jumper_setup() { maps\betrayal_util::add_spawn_function_to_targetname("dock_jumper1_spawner",::oldtown_dock_anim_jumper,"dock_anim_jumper1"); maps\betrayal_util::add_spawn_function_to_targetname("dock_jumper2_spawner",::oldtown_dock_anim_jumper,"dock_anim_jumper2"); maps\betrayal_util::add_spawn_function_to_targetname("dock_jumper3_spawner",::oldtown_dock_anim_jumper,"dock_anim_jumper3"); var_00 = maps\betrayal_util::spawn_ai_from_targetname_single("dock_jumper1_spawner",1); var_01 = maps\betrayal_util::spawn_ai_from_targetname_single("dock_jumper2_spawner",1); var_02 = maps\betrayal_util::spawn_ai_from_targetname_single("dock_jumper3_spawner",1); var_00 thread maps\_utility::deletable_magic_bullet_shield(); var_01 thread maps\_utility::deletable_magic_bullet_shield(); var_02 thread maps\_utility::deletable_magic_bullet_shield(); } //Function Number: 255 oldtown_dock_anim_jumper(param_00) { self endon("death"); self.allowdeath = 1; var_01 = common_scripts\utility::getstruct(param_00,"targetname"); var_02 = var_01.animation; self.animname = param_00; var_01 thread maps\_anim::anim_single_solo(self,var_02); var_03 = maps\_utility::getanim(var_02); var_04 = getanimlength(var_03); thread maps\_anim::anim_set_rate_single(self,var_02,0.3); wait(var_04); self delete(); } //Function Number: 256 oldtown_dock_littlebird_rooftop_vig() { var_00 = maps\betrayal_util::get_ent_by_targetname("oldtown_docks_littlebird_go"); var_00 waittill("trigger"); common_scripts\utility::flag_set("flag_objective_freerun_scene_complete"); var_01 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("oldtown_docks_littlebird2"); var_01 soundscripts\_snd::snd_message("aud_ambient_helicopter","oldtown_docks_littlebird2"); var_02 = getnode("docks_rooftop_littlebird_goal1","targetname"); var_03 = maps\_utility::get_living_ai("docks_rooftop_littlebird_vig1","script_noteworthy"); if(isdefined(var_03)) { var_03.allowdeath = 1; var_03.canjumppath = 1; var_03 thread oldtown_dock_littlebird_rooftop_goal(var_02); var_03 thread maps\betrayal_util::balcony_death_anims(); } var_04 = getnode("docks_rooftop_littlebird_goal2","targetname"); var_05 = maps\_utility::get_living_ai("docks_rooftop_littlebird_vig2","script_noteworthy"); if(isdefined(var_05)) { var_05.allowdeath = 1; var_05.canjumppath = 1; var_05 thread oldtown_dock_littlebird_rooftop_goal(var_04); var_05 thread maps\betrayal_util::balcony_death_anims(); } var_01 waittill("unloading"); level notify("little_bird_vignette_complete"); } //Function Number: 257 oldtown_dock_littlebird_rooftop_goal(param_00) { self endon("death"); maps\_utility::disable_pain(); self waittill("jumpedout"); self.goalradius = 16; self setgoalnode(param_00); self.ignoreall = 1; self waittill("goal"); maps\_utility::enable_pain(); self.ignoreall = 0; self.baseaccuracy = 0.05; thread maps\betrayal_util::delete_ai_on_flag("dock_scene_cleanup_failstate_ai"); } //Function Number: 258 oldtown_dock_fail_init() { level thread oldtown_dock_fail_start(); if(!isdefined(level.oldtown_dock_backtrack_death_squad_spawners)) { thread oldtown_dock_failstate_backtrack(); } common_scripts\utility::flag_wait("docks_end_fail_state_monitor"); level notify("oldtown_docks_end_failure"); } //Function Number: 259 oldtown_dock_fail_start() { level endon("oldtown_docks_end_failure"); common_scripts\utility::flag_wait("boat_scene_start"); wait(40); if(!common_scripts\utility::flag("docks_end_fail_state_monitor")) { level thread oldtown_dock_backtrack_fail_send_in_flyers(); level.oldtown_dock_fail_enemies = []; var_00 = maps\betrayal_util::get_ents_by_targetname("docks_fail_guards"); foreach(var_02 in var_00) { var_03 = var_02 maps\_utility::spawn_ai(1); wait 0.05; var_03 maps\_vehicle::godon(); var_03.baseaccuracy = 5; var_03.goalradius = 32; var_03 thread maps\betrayal_util::delete_ai_on_flag("dock_scene_cleanup_failstate_ai"); level.oldtown_dock_fail_enemies = common_scripts\utility::array_add(level.oldtown_dock_fail_enemies,var_03); if(isdefined(var_03.script_noteworthy)) { switch(var_03.script_noteworthy) { case "docks_guard1": var_03.animname = "atlas_guard_1"; level.atlas_guard1 = var_03; var_03 thread oldtown_dock_fail_enemy_hunt(); break; case "docks_guard2": var_03.animname = "atlas_guard_2"; level.atlas_guard2 = var_03; var_03 thread oldtown_dock_fail_enemy_hunt(); break; case "docks_guard3": var_03.animname = "atlas_guard_3"; level.atlas_guard3 = var_03; var_03 maps\_utility::player_seek_enable(); var_03 maps\_utility::set_goal_radius(16); var_03.canjumppath = 1; break; case "docks_guard4": var_03.animname = "atlas_guard_4"; level.atlas_guard4 = var_03; var_03 maps\_utility::player_seek_enable(); var_03 maps\_utility::set_goal_radius(16); var_03.canjumppath = 1; break; case "docks_guard5": var_03.canjumppath = 1; level.atlas_guard5 = var_03; var_03 thread oldtown_dock_fail_enemy_hunt(); break; case "docks_guard6": var_03.canjumppath = 1; level.atlas_guard6 = var_03; var_03 thread oldtown_dock_fail_enemy_hunt(); break; case "docks_mech1": var_03 thread maps\_mech::mech_start_hunting(); var_03 thread maps\_mech::mech_start_rockets(); level.atlas_guard7 = var_03; break; } } } level.atlas_guard1 thread maps\betrayal_util::simple_anim_at_struct("docks_guard1_animorg"); level.atlas_guard2 thread maps\betrayal_util::simple_anim_at_struct("docks_guard2_animorg"); var_05 = getaiarray("axis"); var_05 = sortbydistance(var_05,level.player.origin); level thread maps\betrayal_vo::play_dialogue_oldtown_player_spotted(var_05[0],var_05[1]); thread oldtown_dock_fail_avoid_player_got_in_boat(); maps\betrayal_util::player_mission_failed_handler(20,undefined,"docks_end_fail_state_monitor"); } } //Function Number: 260 oldtown_dock_fail_avoid_player_got_in_boat() { level.player endon("death"); common_scripts\utility::flag_wait("docks_end_fail_state_monitor"); foreach(var_01 in level.oldtown_dock_fail_enemies) { if(isai(var_01)) { var_01 maps\_utility::set_ignoreall(1); } } common_scripts\utility::flag_wait("flag_boat_player_in_boat"); foreach(var_01 in level.oldtown_dock_fail_enemies) { if(isai(var_01)) { var_01 maps\_utility::set_ignoreall(0); } } } //Function Number: 261 oldtown_dock_backtrack_fail_send_in_flyers() { var_00 = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("docks_fail_warbird"); var_00 soundscripts\_snd::snd_message("aud_ambient_helicopter","docks_fail_warbird"); var_00 thread maps\_vehicle::godon(); var_00 thread maps\betrayal_util::warbird_shooting_think(0,1); var_00.turret_target_override = level.player; common_scripts\utility::flag_wait_either("dock_scene_cleanup_failstate_ai","docks_end_fail_state_monitor"); if(common_scripts\utility::flag("dock_scene_cleanup_failstate_ai")) { var_00 delete(); return; } var_00 maps\_utility::ent_flag_clear("fire_turrets"); common_scripts\utility::flag_wait("flag_boat_player_in_boat"); var_00 maps\_utility::ent_flag_set("fire_turrets"); common_scripts\utility::flag_wait("dock_scene_cleanup_failstate_ai"); var_00 delete(); } //Function Number: 262 oldtown_dock_fail_enemy_hunt() { self waittill("anim_finished"); wait(0.5); maps\_utility::player_seek_enable(); } //Function Number: 263 oldtown_dock_failstate_backtrack() { level endon("dock_scene_cleanup_failstate_ai"); level.player endon("death"); level.oldtown_dock_backtrack_death_squad_spawners = maps\betrayal_util::get_ents_by_targetname("dock_backtrack_deathsquad_spawner"); var_00 = maps\betrayal_util::get_ent_by_targetname("player_near_freerun_end"); var_00 waittill("trigger"); level notify("player_near_freerun_end"); var_01 = maps\betrayal_util::get_ent_by_targetname("dock_backtrack_leaving_mission_area_trig"); var_02 = maps\betrayal_util::get_ent_by_targetname("trigger_dock_backtrack_deathsquad"); var_03 = 0; while(!level.player istouching(var_02)) { if(level.player istouching(var_01) && var_03 == 0) { thread maps\_utility::hintdisplayhandler("leaving_mission_area_trigger",undefined,var_01); var_03 = 1; continue; } if(!level.player istouching(var_02)) { var_03 = 0; } wait 0.05; } common_scripts\utility::flag_set("disable_autosaves"); thread oldtown_dock_failstate_backtrack_deathsquad(); wait(1); level thread maps\betrayal_vo::play_dialogue_oldtown_player_spotted(level.freerun_fail_hunter[0],level.freerun_fail_hunter[1]); if(!maps\betrayal_util::player_mission_failed_handler(8,undefined,"docks_end_fail_state_monitor")) { level.player kill(); wait(0.5); setdvar("ui_deadquote",&"BETRAYAL_FAIL_ESCAPE"); maps\_utility::missionfailedwrapper(); common_scripts\utility::flag_clear("disable_autosaves"); return; } common_scripts\utility::flag_clear("disable_autosaves"); } //Function Number: 264 oldtown_dock_failstate_backtrack_deathsquad() { level endon("docks_end_fail_state_monitor"); level.player endon("death"); level.freerun_fail_hunter = []; foreach(var_01 in level.oldtown_dock_backtrack_death_squad_spawners) { var_02 = var_01 maps\_utility::spawn_ai(1,0); var_02.health = 1000; var_02.baseaccuracy = 10; if(isdefined(var_02.target)) { var_03 = getnode(var_02.target,"targetname"); if(isdefined(var_03)) { var_02 maps\_utility::set_goal_node(var_03); } var_02 notify("move"); } var_02 thread maps\_utility::player_seek_enable(); level.freerun_fail_hunter[level.freerun_fail_hunter.size] = var_02; wait 0.05; } } //Function Number: 265 play_grapple_anim(param_00) { waittillframeend; param_00 setanim(level.scr_anim["grapple_launcher"]["boat_getin"]); } //Function Number: 266 boat_scene_master_handler(param_00) { boat_scene_early_setup(); common_scripts\utility::flag_set("flag_dialogue_start_boat"); if(!isdefined(param_00)) { maps\_utility::autosave_by_name(); var_01 = maps\betrayal_util::get_ent_by_targetname("trigger_use_get_in_boat"); var_01 maps\_utility::addhinttrigger(&"BETRAYAL_BOAT_ENTER_HINT_TEXT",&"BETRAYAL_BOAT_ENTER_HINT_TEXT_PC"); var_02 = var_01 maps\_shg_utility::hint_button_position("use",var_01.origin + (0,0,25),undefined,200,undefined,var_01); level.obj_get_in_org = var_02.object.origin; var_01 waittill("trigger"); soundscripts\_snd::snd_music_message("boat_chase_begin"); common_scripts\utility::flag_set("docks_end_fail_state_monitor"); maps\_player_exo::player_exo_deactivate(); var_02 maps\_shg_utility::hint_button_clear(); var_01 delete(); level thread boat_scene_setup_spawn_swarm(); var_03 = maps\betrayal_util::get_ent_by_targetname("animorg_boat_mount"); var_04 = maps\_utility::spawn_anim_model("player_rig",var_03.origin,var_03.angles); var_04 attach("vm_grapple_launcher_base_lodvm","tag_weapon_right"); var_04 hide(); level.player maps\_shg_utility::setup_player_for_scene(1); var_05 = 0.5; level.player playerlinktoblend(var_04,"tag_player",var_05); level.player common_scripts\utility::delaycall(var_05,::playerlinktodelta,var_04,"tag_player",1,0,0,0,0,1); level.player enableslowaim(); var_04 common_scripts\utility::delaycall(var_05,::show); var_06 = [var_04,level.player_boat]; common_scripts\utility::delay_script_call(3,::common_scripts\utility::flag_set,"flag_dialogue_boat_grapple"); thread play_grapple_anim(var_04); var_03 maps\_anim::anim_single(var_06,"boat_getin",undefined,undefined,undefined,1); wait(0.2); level.player unlink(); var_04 delete(); if(level.currentgen) { maps\_utility::tff_sync(); } level.player maps\_shg_utility::setup_player_for_gameplay(); level.player_boat makeusable(); maps\betrayal_util::start_player_diveboat_ride(); level.player_boat makeunusable(); level.player disableslowaim(); level.player allowcrouch(0); level.player allowprone(0); level.player_boat thread boat_scene_drive_tutorial(); maps\_utility::autosave_by_name(); } if(level.nextgen) { setsaveddvar("r_umbraAccurateOcclusionThreshold","1024"); } level.player_boat vehphys_enablecrashing(); common_scripts\utility::flag_set("flag_objective_boat_chase_start"); common_scripts\utility::flag_set("flag_boat_start_bobbing_boats"); level.player setclutforplayer("clut_betrayal_c3_01",5); level.ilana.ignoreall = 1; level.ilana forceteleport(level.player_boat gettagorigin("tag_passenger"),level.player_boat gettagangles("tag_passenger")); level.ilana linkto(level.player_boat,"tag_passenger",(0,0,-100),(0,0,0)); level.ilana hide(); boat_scene_setup(); common_scripts\utility::flag_set("flag_boat_player_in_boat"); wait(0.05); boat_scene_crash_moment(); common_scripts\utility::flag_set("boat_crash_lighting"); maps\_utility::trigger_wait_targetname("trigger_boat_crashed_in_building"); level.player allowcrouch(1); level.player allowprone(1); level.player boat_scene_hide_warning_elem(); if(level.nextgen) { setsaveddvar("r_umbraAccurateOcclusionThreshold","256"); } wait(0.05); maps\betrayal_util::move_player_to_ent_by_targetname("start_climb_player"); level.ilana show(); level.ilana unlink(); level.ilana maps\betrayal_util::move_squad_member_to_ent_by_targetname("start_climb_ilana"); level.ilana maps\_utility::set_goal_pos(level.ilana.origin); wait(0.05); boat_scene_cleanup(); level thread climb_scene_master_handler(); } //Function Number: 267 boat_scene_early_setup() { if(common_scripts\utility::flag("flag_boat_early_setup_complete")) { return; } common_scripts\utility::flag_set("flag_boat_early_setup_complete"); if(!isdefined(level.player_boat)) { level.player_boat = maps\_vehicle::spawn_vehicle_from_targetname("vehicle_player_boat"); } level.player_boat vehphys_disablecrashing(); level.player_boat.animname = "player_boat"; level.player_boat useanimtree(#animtree); level thread boat_scene_early_setup_start_bobbing_boats(); level.player setclientomnvar("ui_diveboat",1); } //Function Number: 268 boat_scene_swap_to_grapple_body(param_00) { param_00 setmodel("viewbody_atlas_military_smp_grapple"); } //Function Number: 269 boat_scene_early_setup_start_bobbing_boats() { common_scripts\utility::flag_wait("flag_boat_start_bobbing_boats"); common_scripts\utility::array_thread(maps\betrayal_util::get_ents_by_targetname("civilian_yacht_01"),::boat_scene_bobbing_obstacle); common_scripts\utility::array_thread(maps\betrayal_util::get_ents_by_targetname("civilian_yacht_01"),::maps\betrayal_fx::boat_small_static_foam); common_scripts\utility::array_thread(maps\betrayal_util::get_ents_by_targetname("civilian_yacht_02"),::boat_scene_bobbing_obstacle); common_scripts\utility::array_thread(maps\betrayal_util::get_ents_by_targetname("civilian_yacht_02"),::maps\betrayal_fx::boat_small_static_foam); common_scripts\utility::array_thread(maps\betrayal_util::get_ents_by_targetname("civilian_yacht_03"),::boat_scene_bobbing_obstacle); common_scripts\utility::array_thread(maps\betrayal_util::get_ents_by_targetname("civilian_yacht_03"),::maps\betrayal_fx::boat_small_static_foam); common_scripts\utility::array_thread(maps\betrayal_util::get_ents_by_targetname("civilian_boat_02"),::boat_scene_bobbing_obstacle); common_scripts\utility::array_thread(maps\betrayal_util::get_ents_by_targetname("civilian_boat_02"),::maps\betrayal_fx::boat_small_static_foam); common_scripts\utility::array_thread(maps\betrayal_util::get_ents_by_targetname("civilian_barge_01"),::boat_scene_bobbing_obstacle); common_scripts\utility::array_thread(maps\betrayal_util::get_ents_by_targetname("civilian_barge_01"),::maps\betrayal_fx::boat_large_static_foam); common_scripts\utility::array_thread(maps\betrayal_util::get_ents_by_targetname("civilian_taxi_01"),::boat_scene_bobbing_obstacle); common_scripts\utility::array_thread(maps\betrayal_util::get_ents_by_targetname("civilian_taxi_01"),::maps\betrayal_fx::boat_small_static_foam); } //Function Number: 270 boat_scene_setup() { level.player_boat thread boat_scene_boat_warning_system(); level.player_boat thread maps\betrayal_fx::vm_boat_wake(); level thread maps\betrayal_lighting::underwater_boat_visionset_change(); maps\betrayal_util::add_spawn_function_to_noteworthy("spawner_boat_chase_ai",::maps\betrayal_util::remove_on_spawner_delete); maps\betrayal_util::add_spawn_function_to_noteworthy("spawner_boat_chase_ai",::maps\betrayal_util::allow_boost_jump); common_scripts\utility::run_thread_on_targetname("trigger_boat_start_moving_obstacle",::boat_scene_moving_obstacle); common_scripts\utility::array_call(maps\betrayal_util::get_ents_by_targetname("hidden_water_ramp"),::hide); common_scripts\utility::run_thread_on_targetname("trigger_boat_raise_canal_blocker",::boat_scene_raise_canal_blocker); maps\betrayal_util::add_spawn_function_to_noteworthy("spawner_boat_chase_warbird",::maps\betrayal_util::warbird_shooting_think,0,0); maps\betrayal_util::add_spawn_function_to_noteworthy("spawner_boat_chase_warbird",::boat_scene_heli_change_paths); maps\betrayal_util::add_spawn_function_to_noteworthy("spawner_boat_chase_warbird",::maps\betrayal_util::remove_on_spawner_delete); maps\betrayal_util::add_spawn_function_to_noteworthy("spawner_boat_chase_warbird",::soundscripts\_snd::snd_message,"aud_ambient_helicopter","spawner_boat_chase_warbird"); level thread boat_scene_setup_spawn_swarm(); common_scripts\utility::run_thread_on_targetname("trigger_boat_bridge_collapse",::maps\betrayal_fx::boat_scene_bridge_collapse); boat_scene_vig_civ_setup(); common_scripts\utility::flag_clear("flag_enable_battle_chatter"); } //Function Number: 271 boat_scene_setup_spawn_swarm() { if(!isdefined(level.snake_cloud)) { if(level.currentgen) { level.snake_cloud = vehicle_scripts\_attack_drone_common::spawn_snake_cloud("drone_swarm_spawner_boat",undefined,6,5); return; } level.snake_cloud = vehicle_scripts\_attack_drone_common::spawn_snake_cloud("drone_swarm_spawner_boat",undefined,16,12); } } //Function Number: 272 boat_scene_heli_change_paths() { common_scripts\utility::run_thread_on_targetname(self.target,::boat_scene_heli_change_paths_on_trigger,self); } //Function Number: 273 boat_scene_heli_change_paths_on_trigger(param_00) { self waittill("trigger"); var_01 = common_scripts\utility::getstruct(self.target,"targetname"); param_00 thread maps\_vehicle::vehicle_paths(var_01,0); param_00 thread maps\_utility::ent_flag_clear_delayed("fire_turrets",2); } //Function Number: 274 boat_scene_raise_canal_blocker() { maps\betrayal_util::prepare_blast_doors(self.target,-160); self waittill("trigger"); maps\betrayal_util::raise_blast_doors(self.target,1); } //Function Number: 275 boat_scene_vig_civ_setup() { if(level.nextgen) { common_scripts\utility::run_thread_on_targetname("trigger_vig_civ_setup",::maps\betrayal_util::civilian_setup,1200,1); } } //Function Number: 276 boat_scene_crash_moment() { common_scripts\utility::run_thread_on_targetname("trigger_boat_disable_dive",::boat_scene_disable_dive); maps\_utility::trigger_wait_targetname("trigger_boat_start_crash"); soundscripts\_snd::snd_message("bet_boat_crash_audio_handler"); var_00 = maps\betrayal_util::get_ent_by_targetname("animorg_boat_crash"); var_01 = maps\_utility::spawn_anim_model("player_rig_grapple",level.player.origin,level.player.angles); var_02 = level.player_boat; var_03 = [var_01,var_02]; thread maps\betrayal_fx::vm_boat_crash_se_fx_start(var_02); level.player_boat makeusable(); level.player_boat vehicle_scripts\_diveboat::remove_diveboat_weapons(); level.player_boat vehicle_scripts\_diveboat::stop_diveboat_threads(); level.player.drivingvehicle = undefined; level.player_boat useby(level.player); level.player_boat makeunusable(); level.player_boat setviewmodeldepth(0); level.player maps\_shg_utility::setup_player_for_scene(); level.player playerlinktodelta(var_01,"tag_player",1,7,7,5,5,1); common_scripts\utility::flag_set("flag_objective_boat_chase_complete"); var_00 maps\_anim::anim_single(var_03,"boat_crash"); level notify("boat_crash_end"); level.player unlink(); var_01 delete(); } //Function Number: 277 boat_scene_disable_dive() { level.player_boat endon("death"); level endon("boat_scene_cleanup"); while(!isdefined(level.player_boat)) { wait(0.05); } for(;;) { if(self istouching(level.player)) { level.player_boat vehicle_diveboatenabledive(0); } else { level.player_boat vehicle_diveboatenabledive(1); } wait(0.05); } } //Function Number: 278 boat_scene_crash_moment_whiteout(param_00) { maps\betrayal_util::player_knockout_white(); if(level.currentgen) { common_scripts\utility::flag_set("flag_tff_trans_canals_to_finale"); } } //Function Number: 279 boat_scene_boat_warning_system() { level endon("boat_scene_cleanup"); self endon("death"); boat_scene_prep_water_impacts(); childthread boat_scene_monitor_boat_params(); childthread boat_scene_missile_dive_warning(); childthread boat_scene_prep_drones(); childthread boat_scene_handle_boat_collisions(); childthread boat_scene_handle_boat_damage(); childthread boat_scene_handle_fail_state(); var_00 = 0; for(;;) { if(isdefined(self.dive_boat_params.dive_warning) && !var_00) { level.player boat_scene_show_warning_elem(self.dive_boat_params.dive_warning); var_00 = 1; common_scripts\utility::flag_set("flag_incoming_missile_warning"); } else if(!isdefined(self.dive_boat_params.dive_warning) && var_00) { level.player boat_scene_hide_warning_elem(); self.dive_boat_params.dive_warning = undefined; var_00 = 0; } wait(0.05); } } //Function Number: 280 boat_scene_monitor_boat_params() { maps\_utility::ent_flag_init("dive_boat_params_underwater"); var_00 = self.angles; self.dive_boat_params = spawnstruct(); for(;;) { wait(0.05); var_01 = anglestoforward(self.angles); self.dive_boat_params.fwd_dir = (var_01[0],var_01[1],0); var_02 = self.angles - var_00; var_03 = self vehicle_getspeed() / self vehicle_gettopspeed() * 7; self.dive_boat_params.yawdiff = var_03 * var_02[1]; var_04 = rotatevector(var_01,(0,var_03 * var_02[1],0)); self.dive_boat_params.fwd_aug = (var_04[0],var_04[1],0); self.dive_boat_params.upsspeed = max(maps\betrayal_util::mph_to_ups(self vehicle_getspeed()),maps\betrayal_util::mph_to_ups(5)); var_05 = anglestoright(self.angles); self.dive_boat_params.right = (var_05[0],var_05[1],0); if(self vehicle_diveboatissubmerged()) { maps\_utility::ent_flag_set("dive_boat_params_underwater"); } else { maps\_utility::ent_flag_clear("dive_boat_params_underwater"); } self notify("dive_boat_params_updated"); if(getdvarint("debug_diveboat_params") == 1) { } var_00 = self.angles; } } //Function Number: 281 boat_scene_show_warning_elem(param_00) { if(isdefined(param_00) && param_00 == "collision") { level.player setclientomnvar("ui_diveboat_msg",1); } else if(isdefined(param_00) && param_00 == "missile") { level.player setclientomnvar("ui_diveboat_msg",2); } level.player thread boat_scene_cleanup_warning_elem_on_crash(); } //Function Number: 282 boat_scene_cleanup_warning_elem_on_crash() { self endon("death"); level waittill("boat_scene_cleanup"); boat_scene_hide_warning_elem(); } //Function Number: 283 boat_scene_hide_warning_elem() { level.player setclientomnvar("ui_diveboat_msg",0); } //Function Number: 284 boat_scene_missile_dive_warning() { var_00 = maps\betrayal_util::get_ents_by_targetname("trigger_boat_fire_missile"); foreach(var_02 in var_00) { childthread boat_scene_fire_missile_at_boat(var_02); } childthread boat_scene_target_lock_sound(); } //Function Number: 285 boat_scene_play_target_lock_sound_loop(param_00) { level.player endon("damage"); var_01 = 0; while(var_01 < param_00 && !self vehicle_diveboatissubmerged()) { soundscripts\_snd::snd_message("lock_on_target"); wait(0.35); var_01 = var_01 + 0.35; } } //Function Number: 286 boat_scene_target_lock_sound() { level endon("boat_scene_cleanup"); for(;;) { common_scripts\utility::flag_wait("flag_incoming_missile_warning"); thread boat_scene_play_target_lock_sound_loop(10); if(!self vehicle_diveboatissubmerged()) { common_scripts\utility::flag_set("flag_dialogue_boat_missiles"); } common_scripts\utility::flag_clear("flag_incoming_missile_warning"); } } //Function Number: 287 boat_scene_fire_missile_at_boat(param_00) { param_00 waittill("trigger"); if(maps\_utility::ent_flag("dive_boat_params_underwater")) { boat_scene_missile_wait_for_player_to_surface(); } if(maps\_utility::ent_flag("dive_boat_params_underwater")) { return; } if(isdefined(self.dive_boat_params.dive_warning)) { return; } self.dive_boat_params.dive_warning = "missile"; var_01 = 1.25; var_02 = randomintrange(5,9); thread boat_scene_missile_launch_volley(var_02,var_01); maps\_utility::ent_flag_wait_or_timeout("dive_boat_params_underwater",1.5); self.dive_boat_params.dive_warning = undefined; } //Function Number: 288 boat_scene_missile_wait_for_player_to_surface() { var_00 = gettime(); while(isdefined(self)) { if(!maps\_utility::ent_flag("dive_boat_params_underwater")) { break; } if(gettime() >= var_00 + 2000) { break; } wait(0.05); } } //Function Number: 289 boat_scene_missile_launch_volley(param_00,param_01,param_02) { maps\_utility::ent_flag_wait_or_timeout("dive_boat_params_underwater",1.5); if(isdefined(param_02)) { wait(param_02); } var_03 = 150 * param_00 - 1; for(var_04 = param_00;var_04 > 0;var_04--) { if(var_04 == 1) { childthread boat_scene_missile_flight(var_03,1); } else { childthread boat_scene_missile_flight(var_03); } var_03 = var_03 - 150; wait(randomfloatrange(0.05,0.1)); } } //Function Number: 290 boat_scene_missile_flight(param_00,param_01) { var_02 = 0.25 * self.dive_boat_params.upsspeed * self.dive_boat_params.fwd_aug; var_03 = param_00 * self.dive_boat_params.fwd_aug; var_04 = (0,randomfloatrange(-12.5,12.5),0); var_05 = rotatevector(var_02 + var_03,var_04); var_06 = self.origin + var_05; var_07 = undefined; for(var_08 = 0;var_08 < 5;var_08++) { var_09 = (randomfloatrange(0,20),0,0); var_0A = (0,randomfloatrange(0,360),0); var_09 = rotatevector(var_09,var_0A); var_0B = var_06 + var_09; var_0C = bullettrace(var_0B + (0,0,500),var_0B + (0,0,-100),0,undefined,0,0,0,0,0); if(isdefined(var_0C["surfacetype"]) && issubstr(var_0C["surfacetype"],"water")) { var_07 = var_0C["position"]; break; } } if(!isdefined(var_07)) { return; } var_0D = common_scripts\utility::spawn_tag_origin(); var_0D.origin = var_07; var_0D.angles = (270,0,0); var_0E = 600; var_0F = magicbullet("iw5_mahemcustombetrayalboatdive_sp",var_0D.origin + (0,0,var_0E),var_0D.origin); wait(0.25); playfxontag(level._effect["bet_water_explosion_single"],var_0D,"tag_origin"); boat_scene_spawn_water_impact(var_0D.origin); var_0D playrumbleonentity("grenade_rumble"); if(isdefined(param_01)) { boat_scene_missile_impact_damage_boat(var_0D.origin); } wait(2); var_0D delete(); } //Function Number: 291 boat_scene_missile_impact_damage_boat(param_00) { if(maps\_utility::ent_flag("dive_boat_params_underwater")) { return; } physicsexplosionsphere(param_00,256,0,3); level.player dodamage(200,param_00); wait(0.5); if(level.player.health <= 0) { setdvar("ui_deadquote",&"BETRAYAL_BOAT_MISSILE_FAIL"); } } //Function Number: 292 boat_scene_prep_drones() { common_scripts\utility::run_thread_on_targetname("trigger_boat_drone_swarm_start",::maps\betrayal_util::drone_swarm_move_change_path_on_trigger); } //Function Number: 293 boat_scene_prep_water_impacts() { level.water_impacts = maps\betrayal_util::get_ents_by_targetname("boat_water_impact"); } //Function Number: 294 boat_scene_spawn_water_impact(param_00) { foreach(var_02 in level.water_impacts) { if(!isdefined(var_02.in_use)) { if(!isdefined(var_02.org_pos)) { var_02 hide(); var_02.org_pos = var_02.origin; } var_03 = bullettrace(param_00 + (0,0,-64),param_00 + (0,0,512),0,undefined); if(var_03["surfacetype"] == "water_waist") { param_00 = var_03["position"]; } var_02.in_use = 1; var_02.origin = param_00; var_02 thread boat_scene_remove_water_impact(); return; } } } //Function Number: 295 boat_scene_remove_water_impact() { wait(0.5); self.origin = self.org_pos; self.in_use = undefined; self hide(); } //Function Number: 296 boat_scene_moving_obstacle() { level endon("boat_scene_cleanup"); var_00 = maps\betrayal_util::get_ents_by_targetname(self.target); self.spawned_boats = []; foreach(var_02 in var_00) { thread boat_scene_moving_obstacle_spawn_boat_in_radius(var_02); } self waittill("trigger"); foreach(var_05 in self.spawned_boats) { var_05 thread maps\_vehicle::gopath(var_05); if(issubstr(var_05.model,"watertaxi_01")) { level thread maps\betrayal_fx::treadfx_ai_boats_taxi(var_05); continue; } level thread maps\betrayal_fx::treadfx_ai_boats_yacht(var_05); } } //Function Number: 297 boat_scene_moving_obstacle_spawn_boat_in_radius(param_00) { level endon("boat_scene_cleanup"); self endon("death"); self endon("trigger"); if(!isdefined(param_00.radius)) { param_00.radius = 5000; } for(;;) { if(!isdefined(param_00) || isremovedentity(param_00)) { return; } var_01 = distance2d(param_00.origin,level.player.origin); if(var_01 < param_00.radius) { var_02 = maps\_vehicle_code::_vehicle_spawn(param_00); if(!isdefined(var_02)) { return; } param_00 thread boat_scene_moving_obstacle_delete_boat_on_spawner_death(var_02); self.spawned_boats[self.spawned_boats.size] = var_02; return; } wait(0.05); } } //Function Number: 298 boat_scene_moving_obstacle_delete_boat_on_spawner_death(param_00) { level endon("boat_scene_cleanup"); param_00.script_linkname = undefined; self waittill("death"); if(isdefined(param_00) && !isremovedentity(param_00)) { param_00 delete(); } } //Function Number: 299 boat_scene_bobbing_obstacle(param_00) { level endon("boat_scene_cleanup"); self endon("death"); if(!isdefined(param_00)) { param_00 = maps\betrayal_util::get_ent_by_targetname(self.target); param_00 linkto(self); } maps\_utility::ent_flag_init("flag_big_bobbing"); for(;;) { var_01 = boat_scene_small_bob_settings(); maps\_bobbing_boats::prep_bobbing([self],::maps\_bobbing_boats::bobbingobject,var_01,0); thread maps\_bobbing_boats::start_bobbing_single(randomfloatrange(0,1)); maps\_utility::ent_flag_wait("flag_big_bobbing"); var_01 = boat_scene_big_bob_settings(); maps\_bobbing_boats::prep_bobbing([self],::maps\_bobbing_boats::bobbingobject,var_01,0); thread maps\_bobbing_boats::start_bobbing_single(randomfloatrange(0,1)); maps\_utility::ent_flag_waitopen("flag_big_bobbing"); } } //Function Number: 300 boat_scene_small_bob_settings() { var_00 = spawnstruct(); var_00.max_pitch = 1; var_00.min_pitch_period = 3; var_00.max_pitch_period = 6; var_00.max_yaw = 2; var_00.min_yaw_period = 3; var_00.max_yaw_period = 6; var_00.max_roll = 2; var_00.min_roll_period = 3; var_00.max_roll_period = 6; var_00.max_sink = 6; var_00.max_float = 6; var_00.min_bob_period = 3; var_00.max_bob_period = 6; return var_00; } //Function Number: 301 boat_scene_big_bob_settings() { var_00 = spawnstruct(); var_00.max_pitch = 3; var_00.min_pitch_period = 3; var_00.max_pitch_period = 6; var_00.max_yaw = 0; var_00.min_yaw_period = 3; var_00.max_yaw_period = 6; var_00.max_roll = 6; var_00.min_roll_period = 3; var_00.max_roll_period = 6; var_00.max_sink = 36; var_00.max_float = 24; var_00.min_bob_period = 3; var_00.max_bob_period = 6; return var_00; } //Function Number: 302 boat_scene_drive_tutorial() { thread boat_scene_drive_gas_tutorial(); thread boat_scene_dive_tutorial(); } //Function Number: 303 boat_scene_drive_gas_tutorial() { level endon("boat_scene_cleanup"); self waittill("dive_boat_params_updated"); maps\_utility::hintdisplayhandler("boat_gas"); if(isdefined(level.current_hint)) { level.current_hint waittill("destroying"); } } //Function Number: 304 boat_scene_dive_tutorial(param_00) { level endon("boat_scene_cleanup"); common_scripts\utility::run_thread_on_targetname("trigger_boat_hint_dive",::boat_scene_dive_tutorial_trigger_hit); for(;;) { level waittill("display_boat_dive_hint",var_01); if(!maps\_utility::ent_flag("dive_boat_params_underwater")) { maps\_utility::hintdisplayhandler("boat_dive",undefined,var_01); if(isdefined(level.current_hint)) { level.current_hint waittill("destroying"); } } var_01 delete(); } } //Function Number: 305 boat_scene_dive_tutorial_trigger_hit() { level endon("boat_scene_cleanup"); self waittill("trigger"); common_scripts\utility::flag_set("flag_dialogue_boat_dive"); level notify("display_boat_dive_hint",self); } //Function Number: 306 boat_scene_handle_boat_collisions() { for(;;) { self waittill("veh_contact",var_00,var_01); if(self vehicle_getspeed() > 15) { level.player dodamage(20,var_01); level.player playrumbleonentity("damage_heavy"); } wait(0.05); } } //Function Number: 307 boat_scene_handle_boat_damage() { for(;;) { self waittill("damage",var_00,var_01,var_02,var_03); if(randomint(100) < 5) { level.player dodamage(var_00 * 0.02,var_03,var_01); level.player playrumbleonentity("damage_light"); } maps\_vehicle::vehicle_set_health(2000); wait(0.05); } } //Function Number: 308 boat_scene_handle_fail_state() { var_00 = maps\betrayal_util::get_ents_by_targetname("trigger_boat_path_fail"); common_scripts\utility::array_thread(var_00,::boat_scene_trigger_fail_path); var_01 = maps\betrayal_util::progress_path_create("boat_chase_fail_path"); var_02 = var_01 maps\betrayal_util::progress_path_get_my_node_from_org(level.player.origin); var_03 = gettime(); var_04 = var_02; var_05 = 0; for(;;) { if(gettime() > var_03 + 7000) { boat_scene_fail_path(); break; } var_06 = maps\betrayal_util::get_progression_between_points(level.player.origin,var_02.origin,var_02.next_node.origin); var_07 = maps\betrayal_util::progress_path_move_to_correct_node(var_02,var_06["progress"],var_06["offset"]); var_08 = var_07.progress; var_09 = var_07.offset; var_02 = var_07.node; if(var_02 == var_04.next_node) { var_03 = gettime(); var_04 = var_02; var_05 = var_08; } if(var_02 == var_04 && var_08 >= var_05 + 5) { var_03 = gettime(); var_04 = var_02; var_05 = var_08; } wait(0.05); } } //Function Number: 309 boat_scene_trigger_fail_path() { self waittill("trigger"); boat_scene_fail_path(); } //Function Number: 310 boat_scene_fail_path() { setdvar("ui_deadquote",&"BETRAYAL_FAIL_ESCAPE"); maps\_utility::missionfailedwrapper(); } //Function Number: 311 boat_scene_cleanup() { level.player setclientomnvar("ui_diveboat",0); level notify("boat_scene_cleanup"); } //Function Number: 312 climb_scene_master_handler(param_00) { climb_scene_setup(); if(level.nextgen) { thread maps\betrayal_util::spawn_and_handle_looping_helicopters("climb_scene_vignette_heli","flag_climb_player_at_finale",5); } else { thread maps\betrayal_util::spawn_and_handle_looping_helicopters("climb_scene_vignette_heli","flag_climb_player_at_finale",2); } if(!isdefined(param_00)) { wait(0.05); level.ilana.ignoreall = 0; level.ilana.pacifist = 1; level thread climb_scene_setup_droneswarm(); climb_scene_first_climb(); climb_scene_on_foot(); climb_scene_second_climb(); climb_scene_skybridge(); } else if(isdefined(param_00) && param_00 == "roof") { common_scripts\utility::flag_clear("flag_enable_battle_chatter"); common_scripts\utility::flag_set("flag_climb_player_begin_fall_fails"); common_scripts\utility::flag_set("flag_climb_player_at_first_onfoot"); climb_scene_on_foot(); climb_scene_second_climb(); climb_scene_skybridge(); } else if(isdefined(param_00) && param_00 == "crates") { common_scripts\utility::flag_set("flag_climb_player_begin_fall_fails"); common_scripts\utility::flag_set("flag_climb_player_at_first_onfoot"); climb_scene_second_climb(); climb_scene_skybridge(); } else if(isdefined(param_00) && param_00 == "skybridge") { common_scripts\utility::flag_set("flag_climb_player_begin_fall_fails"); common_scripts\utility::flag_set("flag_climb_player_at_first_onfoot"); common_scripts\utility::flag_set("flag_climb_player_at_skybridge"); climb_scene_skybridge(); } else if(isdefined(param_00) && param_00 == "finale_outro") { level thread climb_scene_finale(); } common_scripts\utility::flag_wait("flag_climb_player_at_finale"); climb_scene_cleanup(); } //Function Number: 313 climb_scene_setup() { maps\_utility::clear_all_color_orders("axis"); maps\_utility::clear_all_color_orders("allies"); common_scripts\utility::flag_set("flag_dialogue_start_climb"); level.ilana setmodel("ilana_atlas_pmc_launcher"); common_scripts\utility::run_thread_on_targetname("finale_climb_civ_setup",::maps\betrayal_util::civilian_setup,"flag_climb_player_discovered",0); maps\_utility::activate_trigger_with_targetname("finale_climb_civ_setup"); common_scripts\utility::run_thread_on_targetname("climbimg_moving_crate_on_foot_start_node",::climb_scene_moving_crates); common_scripts\utility::run_thread_on_targetname("climbimg_moving_crate_construction_ambience_start_node",::climb_scene_moving_crates); common_scripts\utility::run_thread_on_targetname("climbimg_moving_crate_climb_ambience_start_node",::climb_scene_moving_crates); common_scripts\utility::run_thread_on_targetname("trigger_climb_force_dismount",::climb_scene_force_dismount); maps\betrayal_util::add_spawn_function_to_noteworthy("climb_warbird",::maps\betrayal_util::warbird_shooting_think,0,0); maps\betrayal_util::add_spawn_function_to_noteworthy("spawner_skybridge_guard",::climb_scene_set_colors_careful_on_arrival_setting); common_scripts\utility::run_thread_on_targetname("trigger_climb_start_crane",::climb_scene_start_crane); common_scripts\utility::run_thread_on_targetname("trigger_skybridge_break_glass",::climb_scene_skybridge_break_glass); level thread climb_scene_ilona_simple_climbing(); level.ilana.script_careful = 1; level.ilana pathabilityadd("grapple"); level.ilana maps\_utility::set_moveplaybackrate(1); common_scripts\utility::run_thread_on_targetname("trigger_climb_fail_trigger",::climb_scene_fail_fall); maps\_exo_climb::setup_climb_model("atlas_army",1); foreach(var_01 in level.player getweaponslistoffhands()) { if(common_scripts\utility::array_contains(level.player.variable_grenade["special"],var_01)) { level.player takeweapon(var_01); } } common_scripts\utility::flag_clear("flag_hint_player_exoclimb_jumped"); common_scripts\utility::flag_clear("flag_hint_player_exoclimb_magmoved"); common_scripts\utility::flag_clear("flag_hint_player_exoclimb_combat"); common_scripts\utility::flag_clear("flag_hint_player_exoclimb_cover"); } //Function Number: 314 climb_scene_setup_droneswarm() { if(!isdefined(level.snake_cloud)) { if(level.currentgen) { level.snake_cloud = vehicle_scripts\_attack_drone_common::spawn_snake_cloud("drone_swarm_spawner_climb",undefined,6,5); } else { level.snake_cloud = vehicle_scripts\_attack_drone_common::spawn_snake_cloud("drone_swarm_spawner_climb"); } } common_scripts\utility::run_thread_on_targetname("trigger_climb_drone_swarm_start",::maps\betrayal_util::drone_swarm_move_change_path_on_trigger); maps\_utility::trigger_wait_targetname("trigger_climb_drone_swarm_cleanup"); level.snake_cloud vehicle_scripts\_attack_drone_common::cleanup_snake_cloud(); } //Function Number: 315 climb_scene_cleanup() { level notify("climb_scene_cleanup"); } //Function Number: 316 climb_scene_start_action(param_00) { wait(4); level notify("climb_scene_start_action"); } //Function Number: 317 climb_scene_fail_fall() { var_00 = level.player.grapple["dist_max"]; for(;;) { wait(0.05); for(;;) { self waittill("trigger",var_01); if(var_01 == level.player) { break; } wait(0.05); } if(isdefined(level.player.grapple) && level.player.grapple["grappling"]) { continue; } if(common_scripts\utility::flag("flag_climb_falling_fail")) { continue; } common_scripts\utility::flag_set("flag_climb_falling_fail"); level.player.grapple["dist_max"] = 1; setblur(5,0.5); wait(0.25); if(isdefined(level.player.grapple) && level.player.grapple["grappling"]) { common_scripts\utility::flag_clear("flag_climb_falling_fail"); level.player.grapple["dist_max"] = var_00; setblur(0,0.25); continue; } break; } setdvar("ui_deadquote",&"BETRAYAL_CLIMB_FALL_FAIL"); maps\_utility::missionfailedwrapper(); level.player thread climb_scene_fail_on_ground_notify(); level.player common_scripts\utility::waittill_any_timeout(1,"death","player_on_ground"); if(isalive(level.player)) { level.player kill(); } wait(0.05); setdvar("ui_deadquote",&"BETRAYAL_CLIMB_FALL_FAIL"); } //Function Number: 318 climb_scene_fail_on_ground_notify() { level.player endon("death"); for(;;) { if(level.player isonground()) { level.player notify("player_on_ground"); } wait(0.05); } } //Function Number: 319 climb_scene_first_climb() { if(level.currentgen) { if(!istransientloaded("betrayal_finale_tr")) { level waittill("tff_post_canals_to_finale"); } } maps\betrayal_util::player_knockout_wakeup(); level thread climb_scene_anim_boat_getout(); common_scripts\utility::flag_set("flag_dialogue_climb_boatexit"); common_scripts\utility::delay_script_call(14,::common_scripts\utility::flag_set,"flag_dialogue_climb_intro"); maps\_exo_climb::enable_exoclimb_combat(1); level waittill("climb_scene_start_action"); level.ilana.ignoreall = 0; } //Function Number: 320 climb_scene_handle_finale_walker_civilian_vingette() { var_00 = maps\betrayal_util::get_ents_by_targetname("climb_scene_walker_spawner"); foreach(var_02 in var_00) { var_03 = var_02 maps\_utility::spawn_ai(1,0); var_03 thread climb_scene_handle_walker(); var_03 thread climb_scene_handle_walker_reaction(); var_03 thread maps\betrayal_util::delete_ai_on_flag("climb_delete_walkers"); } } //Function Number: 321 climb_scene_handle_walker() { self endon("reacting"); self endon("death"); self.original_position = self.origin; self.animname = "generic"; var_00 = maps\betrayal_util::civilian_get_random_walk(); self.civilian_walk_animation = var_00; self.runanim = level.scr_anim[self.animname][var_00][0]; maps\_utility::set_run_anim_array(var_00,undefined,1); self.is_reacting = 0; self.goalradius = 16; for(;;) { if(isdefined(self.target)) { var_01 = getnode(self.target,"targetname"); maps\_utility::set_goal_node(var_01); } maps\betrayal_util::stop_current_animations(); self.goalradius = 16; self notify("move"); self waittill("goal"); maps\betrayal_util::stop_current_animations(); self.animname = "generic"; var_00 = maps\betrayal_util::civilian_get_random_idle(); thread maps\_anim::anim_generic_loop(self,var_00); wait(3); maps\_utility::set_goal_pos(self.original_position); maps\betrayal_util::stop_current_animations(); self.goalradius = 16; self notify("move"); self waittill("goal"); maps\betrayal_util::stop_current_animations(); self.animname = "generic"; var_00 = maps\betrayal_util::civilian_get_random_idle(); thread maps\_anim::anim_generic_loop(self,var_00); wait(3); } } //Function Number: 322 climb_scene_handle_walker_reaction() { self endon("death"); maps\betrayal_util::stop_current_animations(); var_00 = getnodearray("climb_scene_walker_escape_node","targetname"); common_scripts\utility::flag_wait("flag_climb_player_at_skybridge"); if(isdefined(self)) { self delete(); } } //Function Number: 323 climb_scene_anim_boat_getout() { level.player maps\_shg_utility::setup_player_for_scene(); var_00 = maps\_utility::spawn_anim_model("player_rig_grapple",level.player.origin,level.player.angles); level.player playerlinktodelta(var_00,"tag_player",1,20,23,12,0,1); level.player enableslowaim(); var_01 = maps\_utility::spawn_anim_model("player_boat",var_00.origin,var_00.angles); var_02 = [var_00,var_01,level.ilana]; var_03 = maps\betrayal_util::get_ent_by_targetname("animorg_boat_getout"); var_03 maps\_anim::anim_single(var_02,"boat_getout"); level.player unlink(); level.player disableslowaim(); level.player maps\_shg_utility::setup_player_for_gameplay(); maps\_player_exo::player_exo_activate(); var_00 delete(); maps\_utility::autosave_by_name(); common_scripts\utility::flag_set("flag_objective_climb_start"); level.player maps\_grapple::grapple_give(); thread climb_scene_grapple_hint_handler(); common_scripts\utility::flag_set("flag_enable_battle_chatter"); } //Function Number: 324 climb_scene_grapple_hint_handler() { var_00 = getentarray("grapple_hint_trig","targetname"); var_01 = undefined; while(!isdefined(var_01)) { foreach(var_03 in var_00) { if(level.player istouching(var_03)) { maps\_utility::hintdisplayhandler("grapple"); var_01 = var_03; break; } } wait 0.05; } while(level.player istouching(var_01)) { wait(0.5); } wait(0.5); if(!common_scripts\utility::flag("flag_climb_player_finished_first_grapple")) { thread climb_scene_grapple_hint_handler(); } } //Function Number: 325 climb_scene_on_foot() { climb_scene_on_foot_setup(); common_scripts\utility::flag_wait("flag_climb_player_at_first_onfoot"); common_scripts\utility::flag_set("flag_enable_battle_chatter"); level thread climb_scene_on_foot_warbird_arrival(); level thread climb_scene_on_foot_crate_death_area(); } //Function Number: 326 climb_scene_on_foot_setup() { maps\betrayal_util::add_spawn_function_to_targetname("spawner_climb_onfoot_zipline",::climb_scene_setup_zipliners); maps\betrayal_util::add_spawn_function_to_noteworthy("climb_roof_enemies",::climb_scene_set_colors_careful_on_arrival_setting); maps\betrayal_util::add_spawn_function_to_noteworthy("climb_roof_snipers",::maps\betrayal_util::delete_ai_on_path_end); common_scripts\utility::run_thread_on_targetname("trigger_climb_ilana_past_crate",::climb_scene_on_foot_ilana_past_crate); } //Function Number: 327 climb_scene_on_foot_ilana_past_crate() { level endon("flag_climb_ilana_past_crate"); self waittill("trigger"); for(;;) { if(maps\_utility::get_ai_group_sentient_count("climb_roof_guard") == 0) { break; } wait(0.05); } common_scripts\utility::flag_set("flag_climb_ilana_past_crate"); } //Function Number: 328 climb_scene_on_foot_warbird_arrival() { while(isdefined(level.climb_warbird)) { wait(0.05); } level.climb_warbird = maps\_vehicle::spawn_vehicle_from_targetname_and_drive("spawner_climb_onfoot_heli"); level.climb_warbird thread climb_scene_warbird_setup_rotar_death_trigger(); level.climb_warbird soundscripts\_snd::snd_message("aud_ambient_helicopter","spawner_climb_onfoot_heli"); level.climb_warbird thread climb_scene_first_on_foot_warbird_turret(); } //Function Number: 329 climb_scene_warbird_setup_rotar_death_trigger() { var_00 = getent("climb_scene_warbird_kill_trigger","script_noteworthy"); var_00 enablelinkto(); var_00 linkto(self); self waittill("death"); var_00 unlink(); var_00 delete(); } //Function Number: 330 climb_scene_first_on_foot_warbird_turret() { maps\_utility::ent_flag_init("start_roof_turrets"); maps\_utility::ent_flag_wait("start_roof_turrets"); while(maps\_utility::ent_flag("start_roof_turrets")) { wait(randomfloatrange(4,5.5)); maps\_utility::ent_flag_set("fire_turrets"); wait(randomfloatrange(2,3.5)); maps\_utility::ent_flag_clear("fire_turrets"); } } //Function Number: 331 climb_scene_on_foot_crate_death_area() { var_00 = maps\betrayal_util::get_ent_by_targetname("climb_roof_path_blocker_for_crate_test"); var_01 = getnodearray("climb_roof_crate_node","targetname"); level thread climbing_scene_on_foot_no_friendly_damage_in_death_area(); var_02 = 0; var_03 = 0; while(!common_scripts\utility::flag("flag_climb_player_at_skybridge")) { var_03 = 0; foreach(var_05 in level.climbing_crates) { if(var_05 istouching(var_00)) { var_03 = 1; break; } } if(var_03 && !var_02) { var_02 = 1; foreach(var_08 in var_01) { var_08 disconnectnode(); } continue; } if(!var_03 && var_02) { var_02 = 0; foreach(var_08 in var_01) { var_08 connectnode(); } } wait(0.05); } } //Function Number: 332 climbing_scene_on_foot_no_friendly_damage_in_death_area() { level endon("flag_climb_player_at_skybridge"); var_00 = maps\betrayal_util::get_ent_by_targetname("trigger_climb_roof_no_pain"); for(;;) { if(var_00 istouching(level.ilana)) { level.ilana maps\_utility::disable_pain(); } else { level.ilana maps\_utility::enable_pain(); } wait(0.1); } } //Function Number: 333 climb_scene_second_climb() { common_scripts\utility::flag_wait("flag_climb_player_at_second_climb"); common_scripts\utility::flag_set("flag_enable_battle_chatter"); level thread climb_scene_second_climb_ilona_no_push(); } //Function Number: 334 climb_scene_second_climb_ilona_no_push() { var_00 = maps\betrayal_util::get_ents_by_targetname("trigger_climb_no_push_ilana"); while(!common_scripts\utility::flag("flag_climb_player_at_skybridge")) { var_01 = 0; foreach(var_03 in var_00) { if(level.ilana istouching(var_03)) { var_01 = 1; } } if(var_01) { level.ilana.pushable = 0; level.ilana.script_pushable = 0; continue; } level.ilana.pushable = 1; level.ilana.script_pushable = 1; wait(0.05); } level.ilana.pushable = 1; level.ilana.script_pushable = 1; } //Function Number: 335 climb_scene_skybridge() { common_scripts\utility::flag_wait("flag_climb_player_at_skybridge"); common_scripts\utility::flag_set("flag_enable_battle_chatter"); level.default_goalradius = 512; level thread climb_scene_skybridge_teleport_ilona(); level.player_dof_aperture = 2; level.player_dof_max_distance = 250; } //Function Number: 336 climb_scene_skybridge_teleport_ilona() { var_00 = maps\betrayal_util::get_ent_by_targetname("start_climbskybridge_ilana"); while(!maps\betrayal_util::can_teleport_ai_to_pos(level.ilana,var_00.origin) || level.ilana check_is_climbing()) { wait(0.05); } maps\_utility::activate_trigger_with_noteworthy("trigger_skybridge_break_glass_ilana"); level.ilana maps\betrayal_util::move_squad_member_to_ent_by_targetname("start_climbskybridge_ilana"); } //Function Number: 337 check_is_climbing() { if(isdefined(self.istraversing)) { return self.istraversing; } return 0; } //Function Number: 338 climb_scene_skybridge_break_glass() { self waittill("trigger"); var_00 = maps\betrayal_util::get_ent_by_targetname(self.target); glassradiusdamage(var_00.origin,200,100,50); level.player playrumbleonentity("damage_heavy"); } //Function Number: 339 climb_scene_set_colors_careful_on_arrival_setting(param_00) { self.colornode_setgoal_func = ::climb_scene_colors_careful_on_arrival; if(isdefined(param_00)) { self.custom_careful_radius = param_00; } } //Function Number: 340 climb_scene_colors_careful_on_arrival(param_00) { self endon("death"); self setgoalnode(param_00); thread maps\_colors::color_node_arrival_notifies(param_00); self waittill("goal"); self.fixednode = 0; if(isdefined(param_00.radius)) { self.goalradius = param_00.radius; return; } if(isdefined(self.custom_careful_radius)) { self.goalradius = self.custom_careful_radius; return; } self.goalradius = 1028; } //Function Number: 341 climb_scene_setup_zipliners() { self endon("death"); self.org_spawner = self.spawner; self.ignoreme = 1; self waittill("jumpedout"); self.ignoreme = 0; } //Function Number: 342 climb_scene_force_dismount() { level.climbing_ilona_teleported = 0; var_00 = maps\betrayal_util::get_ents_by_targetname("climb_mag_ilona_teleport"); for(;;) { maps\betrayal_util::waittill_player_exo_climbing(); self waittill("trigger"); if(!maps\_exo_climb::is_exo_climbing()) { continue; } if(isdefined(level.climbing_player_dismounting)) { maps\betrayal_util::waittill_player_not_exo_climbing(); continue; } level.climbing_player_dismounting = 1; var_01 = maps\betrayal_util::get_ent_by_targetname(self.target); maps\_exo_climb::force_animated_dismount(var_01,"player_rig","elevator_climb_dismount"); maps\betrayal_util::waittill_player_not_exo_climbing(); level.climbing_player_dismounting = undefined; while(!level.climbing_ilona_teleported) { var_02 = maps\_utility::get_farthest_ent(level.player.origin,var_00); if(maps\betrayal_util::can_teleport_ai_to_pos(level.ilana,var_02.origin)) { level.ilana maps\betrayal_util::move_squad_member_to_ent(var_02); level.climbing_ilona_teleported = 1; break; } wait(0.05); } } } //Function Number: 343 climb_scene_ilona_simple_climbing() { level endon("climb_scene_cleanup"); for(;;) { while(!maps\_exo_climb::is_exo_climbing()) { wait(1); } while(maps\_exo_climb::is_exo_climbing()) { wait(0.05); } wait(0.05); } } //Function Number: 344 climb_scene_moving_crates() { var_00 = maps\betrayal_util::get_ents_by_targetname(self.target); if(var_00.size <= 0) { return; } var_01 = 0; if(isdefined(self.script_delay)) { var_01 = self.script_delay; } if(!isdefined(level.climbing_crates)) { level.climbing_crates = []; } level.climbing_crates = common_scripts\utility::array_combine(level.climbing_crates,var_00); foreach(var_03 in var_00) { var_04 = maps\betrayal_util::get_ent_by_targetname(var_03.target); var_04 linkto(var_03); var_03.origin = self.origin; if(isdefined(self.angles)) { var_03.angles = self.angles; } var_03.animname = "construction_crate"; var_03 useanimtree(#animtree); var_03 hide(); } climb_scene_preprocess_crate_path(); for(;;) { var_06 = undefined; foreach(var_03 in var_00) { if(!isdefined(var_03.is_moving)) { var_06 = var_03; break; } } if(isdefined(var_06)) { var_06 thread climb_scene_move_crate_on_path(self); wait(randomfloatrange(var_01,var_01 + 2)); continue; } wait(0.05); } } //Function Number: 345 climb_scene_preprocess_crate_path() { if(isdefined(self.script_linkto)) { var_00 = getent(self.script_linkto,"script_linkname"); if(isdefined(var_00) && var_00.classname == "trigger_multiple") { self.climb_trigger = var_00; var_00 thread maps\_exo_climb::toggle_mount_mag_trigger_off(); } } if(isdefined(self.target)) { var_01 = common_scripts\utility::getstructarray(self.target,"targetname"); foreach(var_03 in var_01) { var_03 climb_scene_preprocess_crate_path(); } return; } } //Function Number: 346 climb_scene_move_crate_on_path(param_00) { self show(); self.is_moving = 1; soundscripts\_snd::snd_message("crate_path_start",self); var_01 = param_00.origin; var_02 = (0,0,0); if(isdefined(param_00.angles)) { var_02 = param_00.angles; } var_03 = param_00; var_04 = undefined; var_05 = 1; for(;;) { if(isdefined(var_03.target)) { var_06 = common_scripts\utility::getstructarray(var_03.target,"targetname"); var_07 = []; if(isdefined(self.player_linked)) { foreach(param_00 in var_06) { if(isdefined(param_00.script_parameters) && param_00.script_parameters == "player_path") { var_07 = common_scripts\utility::array_add(var_07,param_00); } if(isdefined(param_00.script_parameters) && param_00.script_parameters == "player_path_only") { var_07 = common_scripts\utility::array_add(var_07,param_00); } } } foreach(param_00 in var_06) { if(isdefined(param_00.script_parameters) && param_00.script_parameters == "player_path_only") { var_06 = common_scripts\utility::array_remove(var_06,param_00); } } if(var_07.size != 0) { var_04 = var_07[randomint(var_07.size)]; } else { var_04 = var_06[randomint(var_06.size)]; } } else { self hide(); self.origin = var_01; self.angles = var_02; self.is_moving = undefined; return; } var_0C = 0; var_0D = 0; var_0E = 0; var_0F = undefined; if(isdefined(var_03.script_noteworthy)) { if(var_03.script_noteworthy == "crate_transfer_point") { var_0C = 0.2; var_0E = 1; } if(var_03.script_noteworthy == "crate_mount_point") { var_0C = 0.2; var_0E = 4; var_0F = var_03.climb_trigger; var_0F thread maps\_exo_climb::toggle_mount_mag_trigger_on(self); } if(var_03.script_noteworthy == "crate_mount_point_stop") { wait(0.1); var_0F = var_03.climb_trigger; var_0F thread maps\_exo_climb::toggle_mount_mag_trigger_on(self); return; } if(var_03.script_noteworthy == "crate_turn_right") { maps\_anim::anim_single_solo(self,"crate_corner_right"); wait(0.1); } if(var_03.script_noteworthy == "crate_turn_left") { maps\_anim::anim_single_solo(self,"crate_corner_left"); wait(0.1); } } if(isdefined(var_03.script_delay)) { var_0E = var_03.script_delay; } if(!var_05) { if(isdefined(var_0F)) { wait(var_0E - 1.5); var_0F thread maps\_exo_climb::toggle_mount_mag_trigger_off(self,1.5); wait(1.5); wait(0.05); } else { wait(var_0E); } } if(var_05) { var_05 = 0; } if(isdefined(var_04.script_noteworthy)) { if(var_04.script_noteworthy == "crate_transfer_point") { var_0D = 0.2; } if(var_04.script_noteworthy == "crate_mount_point") { var_0D = 0.2; } } var_10 = maps\betrayal_util::mph_to_ups(12); if(isdefined(var_03.speed)) { var_10 = var_03.speed; } var_11 = distance(var_04.origin,self.origin); var_12 = var_11 / var_10; self moveto(var_04.origin,var_12,var_12 * var_0C,var_12 * var_0D); if(isdefined(var_04.angles) && var_04.angles != self.angles) { thread climb_scene_rotate_crate_on_path(var_04.angles,var_12); } wait(var_12); var_03 = var_04; } } //Function Number: 347 climb_scene_rotate_crate_on_path(param_00,param_01) { var_02 = param_01 / 2; var_03 = param_01 / 4; wait(var_03); self rotateto(param_00,var_02,var_02 / 5,var_02 / 5); } //Function Number: 348 climb_scene_start_crane() { var_00 = maps\betrayal_util::get_ent_by_targetname("climb_crane_mover"); var_01 = maps\betrayal_util::get_ent_by_targetname(var_00.target); var_02 = maps\betrayal_util::get_ent_by_targetname(var_01.target); var_00.pickup_goal_ang = var_01.angles; var_01 delete(); var_00.dropoff_goal_ang = var_02.angles; var_02 delete(); var_03 = maps\betrayal_util::get_ent_by_targetname("script_glass_shatter_node"); var_03 linkto(var_00); self waittill("trigger"); var_03 thread climb_scene_crane_glass_break(); var_00 rotateto(var_00.pickup_goal_ang,6,1,1); var_04 = maps\betrayal_util::get_ent_by_targetname("trigger_crane_player_mount"); var_05 = maps\betrayal_util::get_ent_by_targetname(var_04.target); var_06 = maps\_shg_utility::hint_button_position("use",var_05.origin,undefined,200); var_04 maps\_utility::addhinttrigger(&"EXOCLIMB_CLIMB_HINT",&"EXOCLIMB_CLIMB_HINT_PC"); var_04 waittill("trigger"); var_04 delete(); common_scripts\utility::flag_set("flag_objective_climb_start_crane"); var_06 maps\_shg_utility::hint_button_clear(); level.player thread climb_scene_handle_crane_climb(var_00); level waittill("climb_scene_start_crane_move"); var_00 soundscripts\_snd::snd_message("reverse_mag_glove_crane_move"); var_00 rotateto(var_00.dropoff_goal_ang,7,1,1); } //Function Number: 349 climb_scene_handle_crane_climb(param_00) { var_01 = climb_scene_crane_mount(); var_01 linkto(param_00); level.climbing_crane_allow_input = 1; var_01.start_moving = 0; var_01 thread climb_scene_handle_crane_climb_movement_input(); var_02 = "right"; var_03 = 0; var_01 thread maps\_anim::anim_loop_solo(var_01,var_02 + "_idle","stop_crane_idle"); maps\_utility::hintdisplayhandler("player_moved_forward"); for(;;) { if(var_03 > 11) { break; } while(!var_01.start_moving) { wait(0.05); } common_scripts\utility::flag_set("flag_climb_player_started_moving"); if(var_02 == "left") { var_02 = "right"; } else { var_02 = "left"; } var_01 thread climb_scene_crane_move(var_02); var_03++; if(var_03 == 1) { level notify("climb_scene_start_crane_move"); } if(var_03 == 3) { common_scripts\utility::flag_set("flag_dialogue_crane_go"); } } level notify("crane_climb_dismount"); climb_scene_crane_dismount_to_wall(var_01); } //Function Number: 350 climb_scene_crane_move(param_00) { self notify("stop_crane_move"); self endon("stop_crane_move"); self notify("stop_crane_idle"); level.climbing_crane_allow_input = undefined; self.start_moving = 0; maps\_anim::anim_single_solo(self,param_00 + "_move"); thread maps\_anim::anim_loop_solo(self,param_00 + "_idle","stop_crane_idle"); } //Function Number: 351 climb_scene_crane_allow_input(param_00) { level.climbing_crane_allow_input = 1; } //Function Number: 352 climb_scene_crane_move_rumble(param_00) { level.player playrumbleonentity("damage_light"); } //Function Number: 353 climb_scene_crane_grab_rumble(param_00) { level.player playrumbleonentity("damage_heavy"); } //Function Number: 354 climb_scene_crane_move_shake(param_00) { level.player screenshakeonentity(4,2,0.5,0.5,0,0.25,128,10,5,5,2); } //Function Number: 355 climb_scene_crane_grab_shake(param_00) { level.player screenshakeonentity(12,6,2,0.5,0,0.25,128,10,5,5,2); } //Function Number: 356 climb_scene_handle_crane_climb_movement_input() { level endon("crane_climb_dismount"); for(;;) { var_00 = level.player getnormalizedmovement(); if(length2d(var_00) <= 0.15) { self.start_moving = 0; } else { var_01 = angleclamp360(var_00[0],var_00[1]); if(var_01 < 135 && var_01 > 45 && isdefined(level.climbing_crane_allow_input)) { self.start_moving = 1; } else { self.start_moving = 0; } } wait(0.05); } } //Function Number: 357 climb_scene_crane_mount() { maps\_player_exo::player_exo_deactivate(); var_00 = maps\_utility::spawn_anim_model("player_rig_grapple",level.player.origin,level.player.angles); var_00 hide(); common_scripts\utility::array_thread(getaiarray("axis"),::maps\betrayal_util::delete_ai); var_01 = maps\betrayal_util::get_ent_by_targetname("animorg_construction_outro"); level.player maps\_shg_utility::setup_player_for_scene(); var_02 = 0.5; level.player enableslowaim(0.5,0.3); level.player playerlinktoblend(var_00,"tag_player",var_02); level.player common_scripts\utility::delaycall(var_02,::playerlinktodelta,var_00,"tag_player",0.75,0,0,0,0,1); level.player common_scripts\utility::delaycall(var_02 + 0.1,::lerpviewangleclamp,0.5,0,0,15,15,10,36); var_00 common_scripts\utility::delaycall(var_02,::show); level notify("flag_dialogue_climb_crane_nag_stop"); common_scripts\utility::delay_script_call(2,::common_scripts\utility::flag_set,"flag_dialogue_crane_start"); var_01 maps\_anim::anim_single_solo(var_00,"crane_mount"); return var_00; } //Function Number: 358 climb_scene_crane_dismount_to_wall(param_00) { var_01 = maps\betrayal_util::get_ent_by_targetname("origin_button_crane_dismount"); var_02 = maps\_shg_utility::hint_button_position("jump",var_01.origin,500,600); common_scripts\utility::flag_set("flag_dialogue_crane_jump"); while(!level.player jumpbuttonpressed()) { wait(0.05); } var_02 maps\_shg_utility::hint_button_clear(); var_03 = maps\betrayal_util::get_ent_by_targetname("animorg_construction_outro"); param_00 notify("stop_crane_idle"); param_00 notify("stop_crane_move"); param_00 maps\_utility::anim_stopanimscripted(); level.player lerpviewangleclamp(1,0,0,15,15,10,6); common_scripts\utility::delay_script_call(3,::common_scripts\utility::flag_set,"flag_dialogue_crane_slide"); var_03 maps\_anim::anim_single_solo(param_00,"crane_to_final"); climb_scene_finale(param_00); } //Function Number: 359 climb_scene_crane_glass_break() { wait(3); for(var_00 = 0;var_00 < 8;var_00++) { glassradiusdamage(self.origin,200,50,50); wait(0.5); } level waittill("climb_scene_start_crane_move"); for(var_00 = 0;var_00 < 8;var_00++) { glassradiusdamage(self.origin,200,50,50); wait(0.5); } self delete(); } //Function Number: 360 climb_scene_finale(param_00) { soundscripts\_snd::snd_music_message("climb_scene_finale"); maps\_player_exo::player_exo_deactivate(); climb_scene_cleanup(); common_scripts\utility::flag_set("flag_climb_player_at_finale"); common_scripts\utility::flag_set("flag_objective_climb_complete"); if(!isdefined(param_00)) { param_00 = maps\_utility::spawn_anim_model("player_rig_grapple",level.player.origin,level.player.angles); level.player playerlinktodelta(param_00,"tag_player",0.75,15,15,10,15); level.player maps\_shg_utility::setup_player_for_scene(); } var_01 = climb_scene_finale_setup_anim_ents(); var_01 = common_scripts\utility::array_add(var_01,param_00); var_02 = maps\betrayal_util::get_ent_by_targetname("animorg_construction_outro"); thread maps\betrayal_lighting::setup_lighting_finale_start(var_01); level.player enableslowaim(); level.player lerpfov(50,2); var_02 maps\_anim::anim_single(var_01,"finale_scene"); } //Function Number: 361 climb_scne_finale_hide_body(param_00) { param_00 hide(); } //Function Number: 362 climb_scne_finale_fade_out(param_00) { maps\_utility::nextmission(); } //Function Number: 363 climb_scene_finale_setup_anim_ents() { var_00 = []; var_01 = climb_scene_finale_setup_people_ents(); var_00 = common_scripts\utility::array_combine(var_00,var_01); var_01 = climb_scene_finale_setup_vehicle_ents(); var_00 = common_scripts\utility::array_combine(var_00,var_01); var_02 = maps\_utility::spawn_anim_model("finale_crate_ext",var_00[1].origin,var_00[1].angles); var_03 = maps\_utility::spawn_anim_model("finale_crate_int",var_00[1].origin,var_00[1].angles); var_00[var_00.size] = var_02; var_00[var_00.size] = var_03; return var_00; } //Function Number: 364 climb_scene_finale_setup_people_ents() { var_00 = []; var_00[0] = level.ilana; var_00[0] maps\betrayal_util::remove_display_name(); var_00[1] = maps\betrayal_util::spawn_ai_from_targetname_single("spawner_climb_finale_cormack",1,0); var_00[1].animname = "cormack"; var_00[1] maps\betrayal_anim::assign_cloak_model("body_hero_cormack_sentinel_covert_cloak"); var_00[1] thread maps\betrayal_anim::cloak_on(); var_00[1] maps\betrayal_util::remove_display_name(); var_00[2] = maps\betrayal_util::spawn_ai_from_targetname_single("spawner_climb_finale_gideon",1,0); var_00[2].animname = "gideon"; var_00[2] maps\betrayal_util::remove_display_name(); var_00[3] = maps\betrayal_util::spawn_ai_from_targetname_single("spawner_climb_finale_joker",1,0); var_00[3].animname = "joker"; var_00[3] maps\betrayal_util::remove_display_name(); var_00[4] = maps\betrayal_util::spawn_ai_from_targetname_single("spawner_climb_finale_sentinel1",1,0); var_00[4].animname = "sentinel1"; var_00[4] maps\betrayal_anim::assign_cloak_model("sentinel_covert_body_a"); var_00[4] maps\_utility::place_weapon_on("iw5_bal27_sp_opticsacog2_silencer01","right"); var_00[4] thread maps\betrayal_anim::cloak_on(); var_00[4] maps\betrayal_util::remove_display_name(); var_00[5] = maps\betrayal_util::spawn_ai_from_targetname_single("spawner_climb_finale_sentinel2",1,0); var_00[5].animname = "sentinel2"; var_00[5] maps\betrayal_anim::assign_cloak_model("sentinel_covert_body_a"); var_00[5] maps\_utility::place_weapon_on("iw5_hbra3_sp_silencer01","right"); var_00[5] thread maps\betrayal_anim::cloak_on(); var_00[5] maps\betrayal_util::remove_display_name(); return var_00; } //Function Number: 365 climb_scene_finale_setup_vehicle_ents() { var_00 = []; var_00[0] = maps\_vehicle::spawn_vehicle_from_targetname("spawner_climb_finale_warbird"); var_00[0] soundscripts\_snd::snd_message("spawn_ending_pcap_warbird"); var_00[0].ignoreall = 1; var_00[0].animname = "warbird"; var_00[0] useanimtree(#animtree); return var_00; } //Function Number: 366 climb_scene_finale_setup_player_ents() { var_00 = []; level.player_rig = maps\_utility::spawn_anim_model("player_rig"); level.player_rig hide(); var_00[0] = level.player_rig; return var_00; }