// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool section_precache() { precacheitem( "factory_knife" ); precachemodel( "Viewmodel_knife_iw6" ); precachemodel( "head_fed_army_d" ); precachemodel( "com_flashlight_on" ); precachemodel( "shipping_frame_50cal" ); precachemodel( "shipping_frame_crates" ); precachemodel( "shipping_frame_minigun" ); precachemodel( "vld_playing_card_deck" ); precachemodel( "cnd_cellphone_01_on" ); precachemodel( "com_folding_chair" ); precachemodel( "weapon_p226" ); precachemodel( "fac_ambush_desk_search_chair" ); precachemodel( "trash_cup_tall2" ); precachestring( &"FACTORY_DROP_KILL_HINT" ); } section_flag_init() { common_scripts\utility::flag_init( "loading_area_guards_dead" ); common_scripts\utility::flag_init( "conveyor_guards" ); common_scripts\utility::flag_init( "entered_conveyor" ); common_scripts\utility::flag_init( "powerstealth_ready" ); common_scripts\utility::flag_init( "powerstealth_split" ); common_scripts\utility::flag_init( "ps_first_wave_in_position" ); common_scripts\utility::flag_init( "ps_first_kills_done" ); common_scripts\utility::flag_init( "ps_rogers_first_kill_done" ); common_scripts\utility::flag_init( "ps_second_wave_start" ); common_scripts\utility::flag_init( "ps_second_wave_dialogue_done" ); common_scripts\utility::flag_init( "ps_bravo_second_pos_ready" ); common_scripts\utility::flag_init( "charlie_posted_up" ); common_scripts\utility::flag_init( "ps_charlie_second_enemy_alerted" ); common_scripts\utility::flag_init( "tunnel_guard_arrived" ); common_scripts\utility::flag_init( "guard_tunnel_alerted" ); common_scripts\utility::flag_init( "guard_platform_alerted" ); common_scripts\utility::flag_init( "catwalk_guard_dead" ); common_scripts\utility::flag_init( "keegan_killed_window_guard" ); common_scripts\utility::flag_init( "ps_foreman_office_entry" ); common_scripts\utility::flag_init( "second_charlie_kill_arrived" ); common_scripts\utility::flag_init( "throat_stab_chair" ); common_scripts\utility::flag_init( "throat_stab_sequence_aborted" ); common_scripts\utility::flag_init( "ps_alpha_kill_second" ); common_scripts\utility::flag_init( "ps_second_kill_made" ); common_scripts\utility::flag_init( "ps_second_kills_done" ); common_scripts\utility::flag_init( "bravo_second_kill_arrived" ); common_scripts\utility::flag_init( "ps_final_wave_start" ); common_scripts\utility::flag_init( "start_break_area_kill" ); common_scripts\utility::flag_init( "ps_final_kill_made" ); common_scripts\utility::flag_init( "ps_final_kills_done" ); common_scripts\utility::flag_init( "ps_right_path_a" ); common_scripts\utility::flag_init( "ps_alpha_second_pos_ready" ); common_scripts\utility::flag_init( "ps_charlie_second_pos_ready" ); common_scripts\utility::flag_init( "ps_alpha_tunnel_approach" ); common_scripts\utility::flag_init( "ps_alpha_final_pos_ready" ); common_scripts\utility::flag_init( "ps_final_kill_bravo_ready" ); common_scripts\utility::flag_init( "player_broke_break_area" ); common_scripts\utility::flag_init( "ps_baker_at_final_kill" ); common_scripts\utility::flag_init( "ps_break_area_triggered" ); common_scripts\utility::flag_init( "break_area_first_dead" ); common_scripts\utility::flag_init( "ps_break_area_done" ); common_scripts\utility::flag_init( "ps_alert_chair_guard" ); common_scripts\utility::flag_init( "ps_alpha_done" ); common_scripts\utility::flag_init( "ps_bravo_done" ); common_scripts\utility::flag_init( "ps_charlie_done" ); common_scripts\utility::flag_init( "window_alerted" ); common_scripts\utility::flag_init( "railing_tumble_kill_ready" ); common_scripts\utility::flag_init( "bravo_final_kill_arrived" ); common_scripts\utility::flag_init( "start_final_rogers_kill" ); common_scripts\utility::flag_init( "smoker_arrived" ); common_scripts\utility::flag_init( "powerstealth_midpoint" ); common_scripts\utility::flag_init( "speed_100" ); common_scripts\utility::flag_init( "ps_end_setup" ); common_scripts\utility::flag_init( "powerstealth_end" ); common_scripts\utility::flag_init( "open_exit_doors" ); common_scripts\utility::flag_init( "lgt_playerkill_jumpdown" ); common_scripts\utility::flag_init( "lgt_playerkill_done" ); common_scripts\utility::flag_init( "lgt_intro_reveal" ); common_scripts\utility::flag_init( "ps_gate_allies_arrived" ); common_scripts\utility::flag_init( "ps_gate_open" ); common_scripts\utility::flag_init( "charlie_at_gate" ); } section_hint_string_init() { maps\_utility::add_hint_string( "chair_stab_hint", &"SCRIPT_PLATFORM_OILRIG_HINT_STEALTH_KILL", ::hint_chair_stab_should_break ); } hint_chair_stab_should_break() { if ( common_scripts\utility::flag( "throat_stab_chair" ) || !common_scripts\utility::flag( "ready_to_stab_neck" ) ) return 1; return 0; } powerstealth_start() { foreach ( var_1 in level.squad ) { var_1 maps\_utility::disable_bulletwhizbyreaction(); var_1 maps\_utility::disable_pain(); var_1 maps\_utility::disable_surprise(); } level.player switchtoweapon( level.default_weapon ); level.player takeweapon( "flash_grenade" ); level.player takeweapon( "fraggrenade" ); common_scripts\utility::flag_set( "intro_checkpoint_done" ); common_scripts\utility::flag_set( "player_entered_awning" ); common_scripts\utility::flag_set( "outer_perim_cleared" ); common_scripts\utility::flag_set( "entered_factory_1" ); common_scripts\utility::flag_set( "factory_entrance_setup" ); common_scripts\utility::flag_set( "trainyard_enemy_dead" ); teleport_squad( "powerstealth", "deltaecho" ); maps\_utility::player_speed_percent( 70 ); thread conveyor_crate_setup(); maps\_utility::battlechatter_off(); thread maps\_weather::rainnone( 3 ); } powerstealth() { maps\_utility::player_speed_percent( 70 ); thread maps\factory_ambush::ambush_dest_screens(); thread maps\factory_intro::train_cleanup(); powerstealth_setup(); powerstealth_enc(); foreach ( var_1 in level.squad ) { var_1.disableplayeradsloscheck = 0; var_1 pushplayer( 0 ); var_1.moveplaybackrate = 1.0; var_1 maps\_utility::enable_pain(); } common_scripts\utility::flag_wait_all( "ps_alpha_done", "ps_bravo_done", "ps_charlie_done" ); } powerstealth_setup() { common_scripts\utility::flag_wait( "through_conveyor" ); foreach ( var_1 in level.squad ) { var_1.ignoreall = 1; var_1.ignoreme = 1; var_1.disableplayeradsloscheck = 1; var_1 pushplayer( 1 ); } level thread factory_stealth_settings(); maps\_stealth_utility::stealth_set_default_stealth_function( "factory_stealth", ::factory_stealth_settings ); var_3 = getent( "ps_guard_1_platform", "script_noteworthy" ); var_3 maps\_utility::add_spawn_function( ::ps_guard_platform_think ); level.guard_platform = var_3 maps\_utility::spawn_ai(); wait 0.5; var_4 = getent( "ps_guard_2_tunnel", "script_noteworthy" ); var_4 maps\_utility::add_spawn_function( ::ps_guard_tunnel_think ); level.guard_tunnel = var_4 maps\_utility::spawn_ai(); wait 0.5; var_5 = getent( "ps_guard_window_01", "script_noteworthy" ); var_5 maps\_utility::add_spawn_function( ::ps_guard_window_01_think ); level.guard_window_01 = var_5 maps\_utility::spawn_ai(); wait 0.5; var_6 = getent( "ps_guard_window_02", "script_noteworthy" ); var_6 maps\_utility::add_spawn_function( ::ps_guard_window_02_think ); level.guard_window_02 = var_6 maps\_utility::spawn_ai(); wait 0.5; var_7 = getent( "ps_final_rogers_kill", "script_noteworthy" ); var_7 maps\_utility::add_spawn_function( ::ps_final_rogers_kill_think ); level.guard_office_sleeper = var_7 maps\_utility::spawn_ai(); var_8 = getentarray( "powerstealth_final_kills", "targetname" ); foreach ( var_10 in var_8 ) var_10 maps\_utility::add_spawn_function( ::final_alpha_kill_think ); maps\factory_util::safe_trigger_by_targetname( "powerstealth_final_kills_spawner" ); thread maps\factory_weapon_room::presat_init_revolving_door(); } ps_guard_platform_think() { self endon( "death" ); level endon( "ps_charlie_second_enemy_alerted" ); level endon( "guard_platform_alerted" ); ps_guard_standard_settings(); self.patrol_walk = [ "walk_gun_unwary" ]; self.moveplaybackrate = 0.6; maps\_utility::set_generic_run_anim_array( common_scripts\utility::random( self.patrol_walk ) ); attach_flashlight( 1, 1 ); var_0 = getnode( self.target, "script_noteworthy" ); var_0 maps\_anim::anim_reach_solo( self, "flashlight_search_loop" ); var_0 thread maps\_anim::anim_loop_solo( self, "flashlight_search_loop", "stop_loop" ); common_scripts\utility::flag_wait( "powerstealth_split" ); maps\_utility::waittill_entity_in_range_or_timeout( level.player, 475, 2.5 ); thread ps_guard_platform_think_breakout( var_0 ); ps_guard_platform_continue_patrol( var_0 ); } ps_guard_platform_continue_patrol( var_0 ) { level endon( "ps_charlie_second_enemy_alerted" ); level endon( "guard_platform_alerted" ); self.dontdrop_flashlight = 1; detach_flashlight(); wait 0.1; attach_flashlight( 1, 0 ); self.dontdrop_flashlight = undefined; self stopanimscripted(); var_0 notify( "stop_loop" ); self.goalradius = 8; var_0 = getent( "guard_platform_walk_and_search", "script_noteworthy" ); var_0 maps\_anim::anim_reach_solo( self, "active_patrolwalk_v4" ); var_0 maps\_anim::anim_single_solo( self, "active_patrolwalk_v4" ); maps\_anim::anim_single_solo( self, "active_patrolwalk_v5" ); maps\_anim::anim_single_solo( self, "active_patrolwalk_pause" ); thread maps\_anim::anim_loop_solo( self, "flashlight_search_loop", "stop_loop" ); } ps_guard_platform_think_breakout( var_0 ) { self endon( "death" ); thread set_flags_on_notify( "ps_charlie_second_enemy_alerted" ); thread watch_for_player( 90, "ps_charlie_second_enemy_alerted" ); thread wait_for_waking_event( "guard_platform_alerted" ); common_scripts\utility::flag_wait_any( "ps_charlie_second_enemy_alerted", "guard_platform_alerted" ); common_scripts\utility::flag_set( "ps_charlie_second_enemy_alerted" ); common_scripts\utility::flag_set( "guard_platform_alerted" ); self.goalradius = 8; self stopanimscripted(); var_0 notify( "stop_loop" ); self setgoalpos( self.origin ); maps\_utility::clear_generic_run_anim(); maps\_utility::clear_generic_idle_anim(); self.ignoreall = 0; self.see_player = 1; self.favoriteenemy = level.player; waittillframeend; self setgoalpos( level.player.origin ); detach_flashlight(); } set_flags_on_notify( var_0 ) { self endon( "death" ); self waittill( var_0 ); common_scripts\utility::flag_set( var_0 ); } ps_guard_tunnel_think() { self endon( "death" ); level endon( "guard_tunnel_alerted" ); ps_guard_standard_settings( 1 ); thread watch_for_player( 25, undefined, 1, 1 ); thread wait_for_waking_event( "guard_tunnel_alerted" ); thread notify_alpha_on_alert(); thread ps_guard_tunnel_breakout(); var_0 = getent( "ps_guard_2_tunnel_start_node", "script_noteworthy" ); var_0 maps\_anim::anim_reach_solo( self, "casual_stand_idle" ); var_0 thread maps\_anim::anim_loop_solo( self, "casual_stand_idle", "stop_loop" ); common_scripts\utility::flag_wait( "ps_alpha_second_pos_ready" ); common_scripts\utility::waittill_either( "baker_in_position", "ps_charlie_second_pos_ready" ); var_0 stopanimscripted(); var_0 notify( "stop_loop" ); if ( !self.see_player ) ps_guard_tunnel_patrol( var_0 ); } #using_animtree("generic_human"); ps_guard_tunnel_patrol( var_0 ) { self endon( "death" ); level endon( "guard_tunnel_alerted" ); var_0 maps\_anim::anim_reach_solo( self, "active_patrolwalk_turn_180" ); maps\_utility::delaythread( 0.01, maps\_anim::anim_set_rate_single, self, "active_patrolwalk_turn_180", 0.75 ); var_0 maps\_anim::anim_single_solo( self, "active_patrolwalk_turn_180" ); attach_flashlight( 1 ); var_0 = getent( "ps_guard_2_tunnel_node", "script_noteworthy" ); maps\_utility::delaythread( 0.01, maps\_anim::anim_set_rate_single, self, "active_patrolwalk_v2", 0.75 ); var_0 thread maps\_anim::anim_single_solo( self, "active_patrolwalk_v2" ); var_1 = self getanimtime( %active_patrolwalk_v2 ); while ( var_1 < 0.94 ) { var_1 = self getanimtime( %active_patrolwalk_v2 ); wait 0.05; } self.goalradius = 8; self stopanimscripted(); self.see_player = 1; self.favoriteenemy = level.player; self setgoalpos( level.player.origin ); self.ignoreall = 0; maps\_utility::clear_generic_run_anim(); maps\_utility::clear_generic_idle_anim(); detach_flashlight(); level.squad["ALLY_ALPHA"] notify( "second_kill_ready" ); self waittill( "damage" ); } ps_guard_tunnel_breakout() { self endon( "death" ); common_scripts\utility::flag_wait( "guard_tunnel_alerted" ); self.ignoreall = 0; self stopanimscripted(); self.see_player = 1; self.favoriteenemy = level.player; self setgoalpos( level.player.origin ); self.ignoreall = 0; maps\_utility::clear_generic_run_anim(); maps\_utility::clear_generic_idle_anim(); detach_flashlight(); } notify_alpha_on_alert() { self endon( "death" ); self.alerted = 0; while ( !self.alerted ) wait 0.5; common_scripts\utility::flag_set( "guard_tunnel_alerted" ); level.squad["ALLY_ALPHA"] notify( "guard_tunnel_alerted" ); } attack_closest_enemies( var_0 ) { self endon( "death" ); while ( isalive( self ) ) { var_1 = maps\_utility::get_closest_living( self.origin, var_0 ); self.favoriteenemy = var_1; wait 0.2; } } watch_for_player( var_0, var_1, var_2, var_3 ) { self endon( "death" ); self endon( "in_animation" ); level endon( "railgun_reveal_setup" ); var_4 = cos( var_0 ); self.see_player = 0; while ( isalive( self ) ) { wait 0.1; var_5 = distance( level.player.origin, self.origin ); if ( isdefined( var_5 ) ) { if ( var_5 > 200 ) continue; else { var_6 = common_scripts\utility::within_fov( self.origin, self.angles, level.player.origin, var_4 ); if ( !var_6 ) { if ( var_5 < 80 ) break; else continue; continue; } if ( !isdefined( var_2 ) ) wait( var_5 / 100 ); else wait( var_5 / 175 ); var_7 = common_scripts\utility::within_fov( self.origin, self.angles, level.player.origin, var_4 ); if ( !var_7 ) continue; else break; } } } thread delay_stealth_break( 1 ); if ( isdefined( var_1 ) ) self notify( var_1 ); else { self.goalradius = 8; self stopanimscripted(); self setgoalpos( self.origin ); self.ignoreall = 0; self.see_player = 1; self.favoriteenemy = level.player; maps\_utility::clear_generic_run_anim(); maps\_utility::clear_generic_idle_anim(); if ( isdefined( var_3 ) ) detach_flashlight(); } self.alerted = 1; } delay_stealth_break( var_0 ) { self endon( "death" ); wait( var_0 ); level notify( "stealth_broken" ); } ps_check_for_player_damage() { self endon( "death" ); level endon( "stealth_broken" ); level endon( "presat_revolving_door_dialog_done" ); self waittill( "damage", var_0, var_1 ); if ( var_1 == level.player ) level.player maps\_player_stats::register_kill( self, "MOD_PISTOL_BULLET" ); } ps_final_rogers_kill_think() { self endon( "death" ); ps_guard_standard_settings(); self.animname = "generic"; level.sleeping_guard = self; var_0 = spawn( "script_model", ( 0, 0, 0 ) ); var_0 setmodel( "cnd_cellphone_01_on" ); var_0.origin = self gettagorigin( "tag_inhand" ); var_0 linkto( self, "tag_inhand", ( 0, 0, 0 ), ( 0, 0, 0 ) ); var_1 = getent( "sleeping_guard_node", "script_noteworthy" ); var_1 maps\_anim::anim_first_frame_solo( self, "sleep_enter" ); self waittill( "done_waking_up" ); var_1 notify( "stop_loop" ); self stopanimscripted(); } final_alpha_kill_think() { level endon( "railgun_reveal_setup" ); self.allowdeath = 1; maps\_utility::magic_bullet_shield(); var_0 = common_scripts\utility::getstruct( "rest_area_kills", "script_noteworthy" ); var_1 = getent( self.script_noteworthy + "_org", "script_noteworthy" ); var_2 = []; if ( var_1.script_noteworthy == "ps_break_area_a_org" ) { var_3 = maps\_utility::spawn_anim_model( "chair_opfor01" ); var_4 = getent( "col_chair_breakarea_01", "script_noteworthy" ); var_4 notsolid(); var_2["chair_opfor01"] = var_3; var_2["opfor01"] = self; self.animname = "opfor01"; level.guard_breakarea_01 = self; var_5 = maps\_utility::get_living_ai( "ps_break_area_b", "script_noteworthy" ); var_0 = getent( "ps_break_area_a_org", "script_noteworthy" ); } else { var_3 = maps\_utility::spawn_anim_model( "chair_opfor02" ); var_4 = getent( "col_chair_breakarea_02", "script_noteworthy" ); var_4 notsolid(); var_2["chair_opfor02"] = var_3; var_2["opfor02"] = self; self.animname = "opfor02"; level.guard_breakarea_02 = self; var_5 = maps\_utility::get_living_ai( "ps_break_area_a", "script_noteworthy" ); var_0 = getent( "ps_break_area_b_org", "script_noteworthy" ); } var_0 thread maps\_anim::anim_loop_solo( var_3, "break_area_idle_chair", "stop_loop" ); var_0 thread maps\_anim::anim_loop_solo( self, self.animation, "stop_loop" ); if ( var_1.script_noteworthy == "ps_break_area_a_org" ) thread break_area_gun_handling_a(); else thread break_area_gun_handling_b(); thread watch_for_player( 350, "player_broke_break_area" ); var_6 = common_scripts\utility::waittill_any_return( "damage", "friend_is_dead", "player_broke_break_area", "ps_baker_at_final_kill" ); common_scripts\utility::flag_set( "ps_break_area_triggered" ); var_0 notify( "stop_loop" ); maps\_utility::anim_stopanimscripted(); if ( var_6 == "damage" ) { var_5 notify( "friend_is_dead" ); self.allowdeath = 0; self.noragdoll = 1; if ( self.animname == "opfor01" ) level.guard_breakarea_01 thread maps\factory_audio::stealth_kill_table_right_sfx(); else level.guard_breakarea_02 thread maps\factory_audio::stealth_kill_table_left_sfx(); var_0 notify( "stop_loop" ); maps\_utility::anim_stopanimscripted(); if ( isdefined( self.magic_bullet_shield ) ) maps\_utility::stop_magic_bullet_shield(); self.alreadyshot = 1; var_0 maps\_anim::anim_single( var_2, "rest_area_kills" ); var_3 thread do_chair_collision( var_4 ); if ( isalive( self ) ) maps\factory_anim::kill_no_react(); } else if ( var_6 == "friend_is_dead" ) { var_0 notify( "stop_loop" ); maps\_utility::anim_stopanimscripted(); maps\_utility::stop_magic_bullet_shield(); maps\_utility::disable_surprise(); self.allowdeath = 1; self stopsounds(); if ( common_scripts\utility::flag( "ps_alpha_final_pos_ready" ) && isalive( self ) ) self playsound( "factory_sp1_enlamadre" ); if ( self.animname == "opfor01" ) { level.guard_breakarea_01 thread maps\factory_audio::stealth_kill_table_alert_right_sfx(); var_0 thread maps\_anim::anim_single_solo( var_3, "break_area_react_a_chair" ); var_0 maps\_anim::anim_single_solo( self, "break_area_react_a" ); } else { level.guard_breakarea_02 thread maps\factory_audio::stealth_kill_table_alert_left_sfx(); var_0 thread maps\_anim::anim_single_solo( var_3, "break_area_react_b_chair" ); var_0 maps\_anim::anim_single_solo( self, "break_area_react_b" ); } var_3 thread do_chair_collision( var_4 ); var_7 = [ level.squad["ALLY_ALPHA"], level.player ]; while ( isalive( self ) ) { var_8 = maps\_utility::get_closest_living( self.origin, var_7 ); self.favoriteenemy = var_8; wait 0.2; } } else if ( var_6 == "player_broke_break_area" ) { var_0 notify( "stop_loop" ); maps\_utility::anim_stopanimscripted(); maps\_utility::stop_magic_bullet_shield(); maps\_utility::disable_surprise(); self stopsounds(); if ( common_scripts\utility::flag( "ps_alpha_final_pos_ready" ) && isalive( self ) ) thread maps\_utility::smart_dialogue( "factory_sp1_quienchingadoson" ); if ( self.animname == "opfor01" ) { level.guard_breakarea_01 thread maps\factory_audio::stealth_kill_table_alert_right_sfx(); var_0 thread maps\_anim::anim_single_solo( var_3, "break_area_react_a_chair" ); var_0 thread maps\_anim::anim_single_solo( self, "break_area_react_a" ); } else { level.guard_breakarea_02 thread maps\factory_audio::stealth_kill_table_alert_left_sfx(); var_0 thread maps\_anim::anim_single_solo( var_3, "break_area_react_b_chair" ); var_0 thread maps\_anim::anim_single_solo( self, "break_area_react_b" ); } var_3 thread do_chair_collision( var_4 ); var_5 notify( "player_broke_break_area" ); var_7 = [ level.squad["ALLY_ALPHA"], level.player ]; while ( isalive( self ) ) { var_8 = maps\_utility::get_closest_living( self.origin, var_7 ); self.favoriteenemy = var_8; wait 0.2; } } else if ( var_6 == "ps_baker_at_final_kill" ) { self stopsounds(); maps\_utility::stop_magic_bullet_shield(); self.allowdeath = 0; self.noragdoll = 1; var_0 notify( "stop_loop" ); maps\_utility::anim_stopanimscripted(); level.guard_breakarea_01 thread maps\factory_audio::stealth_kill_table_right_sfx(); level.guard_breakarea_02 thread maps\factory_audio::stealth_kill_table_left_sfx(); var_0 maps\_anim::anim_single( var_2, "rest_area_kills" ); var_3 thread do_chair_collision( var_4 ); maps\factory_anim::kill_no_react(); } } break_area_gun_handling_a() { self endon( "death" ); wait 0.1; var_0 = spawn( "weapon_" + self.weapon, self gettagorigin( "j_gun" ) ); var_0.angles = self gettagangles( "j_gun" ); common_scripts\utility::waitframe(); maps\_utility::gun_remove(); self waittill( "grab_gun" ); maps\_utility::gun_recall(); var_0 delete(); } break_area_gun_handling_b() { self endon( "death" ); wait 0.1; var_0 = spawn( "weapon_" + self.weapon, self gettagorigin( "j_gun" ) + ( 0, 0, 10 ) ); var_0.angles = self gettagangles( "j_gun" ); common_scripts\utility::waitframe(); maps\_utility::gun_remove(); self waittill( "grab_gun" ); maps\_utility::gun_recall(); var_0 delete(); } do_chair_collision( var_0 ) { self endon( "done_with_collision" ); for (;;) { if ( !maps\_utility::players_within_distance( 32, self.origin ) ) break; wait 0.1; } self notify( "done_with_collision" ); } ps_guard_window_01_think() { self endon( "death" ); ps_guard_standard_settings(); maps\_utility::set_generic_run_anim( "walk_gun_unwary" ); maps\_utility::set_generic_idle_anim( "patrol_idle_stretch" ); common_scripts\utility::flag_wait_any( "ps_bravo_second_pos_ready", "ps_alpha_second_pos_ready", "ps_charlie_second_pos_ready" ); self.goalradius = 8; var_0 = getnode( "ps_guard_window_01_idle", "script_noteworthy" ); var_0 maps\_anim::anim_reach_solo( self, "dufflebag_casual_idle" ); self.animname = "enemy"; self.deathanim = %factory_power_stealth_console_death; var_0 thread maps\_anim::anim_loop_solo( self, "dufflebag_casual_idle" ); thread wait_for_waking_event( "window_alerted" ); var_1 = common_scripts\utility::waittill_any_return( "damage", "wake_up" ); if ( var_1 == "wake_up" ) { self stopanimscripted(); self.deathanim = undefined; self.ignoreme = 1; maps\_anim::anim_single_solo( self, "prague_intro_dock_guard_reaction_02" ); } common_scripts\utility::flag_set( "guard_window_01_dead" ); } ps_guard_window_02_think() { self endon( "death" ); self.goalradius = 8; ps_guard_standard_settings(); common_scripts\utility::flag_wait_any( "guard_window_01_dead", "start_break_area_kill" ); } monitor_player_distance() { while ( isalive( self ) ) { var_0 = distance( level.player.origin, self.origin ); if ( var_0 > 100 ) continue; else { wait 3.0; self stopanimscripted(); self.ignoreall = 0; self.see_player = 1; common_scripts\utility::flag_set( "ps_final_kill_made" ); break; } wait 0.4; } } ps_guard_standard_settings( var_0 ) { self.goalradius = 8; self.allowdeath = 1; self.animname = "enemy"; self.health = 1; self.ignoreall = 1; if ( isdefined( var_0 ) ) { self.patrol_walk = [ "walk_gun_unwary", "patrol_bored_patrolwalk", "patrol_bored_patrolwalk_twitch" ]; self.patrol_idle = [ "patrol_idle_stretch", "patrol_idle_smoke", "patrol_idle_checkphone" ]; maps\_utility::set_generic_run_anim_array( common_scripts\utility::random( self.patrol_walk ) ); maps\_utility::set_generic_idle_anim( common_scripts\utility::random( self.patrol_idle ) ); } } factory_stealth_settings() { var_0 = []; var_0["prone"] = 70; var_0["crouch"] = 350; var_0["stand"] = 512; var_1 = []; var_1["prone"] = 512; var_1["crouch"] = 3000; var_1["stand"] = 4000; maps\_stealth_utility::stealth_detect_ranges_set( var_0, var_1 ); var_2 = []; var_2["player_dist"] = 750; var_2["sight_dist"] = 750; var_2["detect_dist"] = 128; var_2["found_dist"] = 96; var_2["found_dog_dist"] = 50; maps\_stealth_utility::stealth_corpse_ranges_custom( var_2 ); } powerstealth_enc() { thread ps_begin(); thread ps_first_wave(); thread ps_second_wave(); thread ps_final_wave(); common_scripts\utility::flag_wait( "powerstealth_midpoint" ); common_scripts\utility::flag_wait( "powerstealth_end" ); foreach ( var_1 in level.squad ) var_1.script_pushable = 0; common_scripts\utility::flag_clear( "_stealth_spotted" ); } ps_begin() { thread ps_gate_animation(); level endon( "ps_second_wave_start" ); foreach ( var_1 in level.squad ) { var_1 notify( "stop_adjust_movement_speed" ); var_1.script_pushable = 0; var_1 maps\_utility::disable_pain(); } level.ai_friendlyfireblockduration = getdvarfloat( "ai_friendlyFireBlockDuration" ); setsaveddvar( "ai_friendlyFireBlockDuration", 0 ); level.squad["ALLY_ALPHA"] thread alpha_ps_animation(); level.squad["ALLY_BRAVO"] thread bravo_ps_movement(); common_scripts\utility::flag_wait( "ps_begin" ); level.squad["ALLY_ALPHA"] maps\_utility::smart_dialogue( "factory_bkr_goright" ); common_scripts\utility::flag_set( "ps_gate_allies_arrived" ); wait 1.5; level thread maps\_utility::smart_radio_dialogue( "factory_bkr_go" ); thread maps\factory_audio::audio_factory_reveal_mix( "three" ); common_scripts\utility::flag_wait( "ps_gate_open" ); maps\factory_util::safe_trigger_by_targetname( "sca_powerstealth_start" ); wait 1; common_scripts\utility::flag_set( "powerstealth_ready" ); level.squad["ALLY_ALPHA"] thread alpha_ps_start_settings(); common_scripts\utility::flag_wait( "exited_conveyor" ); thread maps\_weather::rainnone( 8 ); thread ps_end(); } alpha_ps_animation() { var_0 = getnode( "ps_intro_alpha_idle", "script_noteworthy" ); var_0 maps\_anim::anim_reach_solo( level.squad["ALLY_ALPHA"], "factory_power_stealth_ally_intro_loop" ); var_0 thread maps\_anim::anim_loop_solo( self, "factory_power_stealth_ally_intro_loop", "stop_loop" ); common_scripts\utility::flag_wait( "charlie_at_gate" ); common_scripts\utility::flag_wait( "ps_gate_allies_arrived" ); var_0 notify( "stop_loop" ); var_0 maps\_anim::anim_single_solo( self, "factory_power_stealth_ally_intro_talk" ); var_0 thread maps\_anim::anim_loop_solo( self, "factory_power_stealth_ally_exit_loop", "stop_loop" ); common_scripts\utility::flag_wait( "powerstealth_ready" ); wait 1.5; var_0 notify( "stop_loop" ); var_0 maps\_anim::anim_single_solo( self, "factory_power_stealth_ally_intro_exit" ); } ps_gate_animation() { common_scripts\utility::flag_wait( "ps_begin" ); wait 1; var_0 = getent( "ps_gate", "targetname" ); level.squad["ALLY_CHARLIE"].goalradius = 32; level.squad["ALLY_CHARLIE"] waittill( "goal" ); common_scripts\utility::flag_set( "charlie_at_gate" ); wait 0.25; thread maps\factory_audio::audio_powerstealth_gate_unlock(); level.squad["ALLY_CHARLIE"] maps\_anim::anim_single_solo( level.squad["ALLY_CHARLIE"], "card_swipe" ); level.squad["ALLY_CHARLIE"] pushplayer( 1 ); thread maps\factory_audio::audio_powerstealth_gate_open(); var_1 = 0.25; var_0 movey( 2, var_1, 0.05, 0.05 ); wait( var_1 ); var_2 = 2; var_0 movey( 50, var_2, 1, 0.1 ); wait( var_2 * 0.75 ); common_scripts\utility::flag_set( "ps_gate_open" ); wait( var_2 * 0.25 ); var_3 = getent( "ps_gate_collision", "targetname" ); var_3 notsolid(); common_scripts\utility::flag_wait( "powerstealth_midpoint" ); var_0 movey( -52, var_2, 0.5, 0.1 ); var_3 solid(); } alpha_ps_start_settings() { maps\_utility::enable_ai_color_dontmove(); self setgoalnode( getnode( "ps_first_wave_alpha_node", "script_noteworthy" ) ); maps\_utility::disable_pain(); self pushplayer( 1 ); maps\_utility::disable_bulletwhizbyreaction(); self.ignoresuppression = 1; self.ignorerandombulletdamage = 1; self.disablefriendlyfirereaction = 1; self.disableplayeradsloscheck = 1; } bravo_ps_movement() { maps\_utility::enable_cqbwalk(); common_scripts\utility::flag_wait( "powerstealth_ready" ); maps\_utility::disable_cqbwalk(); common_scripts\utility::flag_wait( "powerstealth_split" ); } ps_first_wave() { level endon( "railgun_reveal_setup" ); var_0 = maps\_utility::get_ai_group_count( "ps_first_wave" ); thread ps_first_wave_dialogue(); level.squad["ALLY_ALPHA"] thread wait_for_alpha_arrival(); thread maps\factory_util::check_trigger_flagset( "sca_ps_low_path_start" ); common_scripts\utility::flag_wait( "exited_conveyor" ); if ( isdefined( getent( "sca_ps_first_kills_done", "targetname" ) ) ) maps\factory_util::safe_trigger_by_targetname( "sca_ps_first_kills_done" ); } wait_for_alpha_arrival() { var_0 = getnode( "ps_first_wave_alpha_node", "script_noteworthy" ); maps\_utility::waittill_entity_in_range( var_0, 200 ); common_scripts\utility::flag_set( "ps_first_wave_in_position" ); } ps_first_wave_dialogue() { level endon( "ps_first_kills_done" ); common_scripts\utility::flag_wait( "ps_first_wave_in_position" ); wait 0.1; common_scripts\utility::flag_set( "ps_first_kills_done" ); } ps_first_kill_progression() { level endon( "ps_second_wave_start" ); var_0 = 0; foreach ( var_2 in level.squad ) { if ( isalive( var_2.favoriteenemy ) ) { var_2 maps\_utility::cqb_aim( var_2.favoriteenemy ); wait 0.1; var_2 shootblank(); var_2 maps\factory_intro::safe_magic_bullet( var_2 gettagorigin( "tag_flash" ), var_2.favoriteenemy getshootatpos() ); var_2.favoriteenemy kill( var_2.origin, var_2 ); var_0 = var_0 + 1; } } if ( var_0 > 2 ) { maps\_utility::smart_radio_dialogue( "factory_rgs_thatsakill" ); wait 0.1; } common_scripts\utility::flag_set( "ps_first_kills_done" ); } ps_second_wave() { level.squad["ALLY_ALPHA"] thread ps_second_wave_alpha(); level.squad["ALLY_BRAVO"] thread ps_second_wave_bravo(); level.squad["ALLY_CHARLIE"] thread ps_second_wave_charlie(); common_scripts\utility::flag_wait( "ps_second_wave_start" ); common_scripts\utility::flag_set( "ps_second_wave_dialogue_done" ); maps\factory_util::safe_trigger_by_targetname( "sca_ps_bravo_second_position" ); common_scripts\utility::flag_wait( "ps_charlie_second_pos_ready" ); common_scripts\utility::flag_set( "ps_second_kills_done" ); maps\factory_util::safe_trigger_by_targetname( "sca_ps_second_kills_done" ); } ps_second_wave_alpha() { level endon( "railgun_reveal_setup" ); common_scripts\utility::flag_wait( "powerstealth_split" ); thread tunnel_interrupt(); if ( !common_scripts\utility::flag( "guard_tunnel_dead" ) && !common_scripts\utility::flag( "guard_tunnel_alerted" ) ) tunnel_first_position(); else { var_0 = getnode( "baker_first_position_node", "script_noteworthy" ); self setgoalnode( var_0 ); } thread break_area_dialogue( level.guard_breakarea_01, level.guard_breakarea_02 ); if ( !common_scripts\utility::flag( "guard_tunnel_dead" ) && !common_scripts\utility::flag( "guard_tunnel_alerted" ) ) tunnel_second_position(); var_1 = getent( "vol_ps_with_baker", "targetname" ); if ( !common_scripts\utility::flag( "guard_tunnel_alerted" ) ) { if ( common_scripts\utility::flag( "ps_player_with_alpha_second" ) && isalive( level.guard_tunnel ) && level.player istouching( var_1 ) ) tunnel_melee_scene(); else { var_0 = getnode( "alpha_quick_kill", "script_noteworthy" ); self.goalradius = 8; self setgoalnode( var_0 ); self waittill( "goal" ); } } if ( isalive( level.guard_tunnel ) ) ps_second_wave_alpha_execute( level.guard_tunnel ); self setlookatentity(); ps_final_wave_alpha(); } tunnel_first_position() { level endon( "guard_tunnel_dead" ); level endon( "guard_tunnel_alerted" ); self.goalradius = 8; var_0 = getnode( "baker_first_position_node", "script_noteworthy" ); var_0 maps\_anim::anim_reach_solo( self, "factory_power_stealth_lower_hallway_enter_ally" ); if ( common_scripts\utility::flag( "ps_player_with_alpha_second" ) ) var_0 maps\_anim::anim_single_solo( self, "factory_power_stealth_lower_hallway_enter_ally" ); } tunnel_second_position() { level endon( "guard_tunnel_dead" ); self endon( "guard_tunnel_alerted" ); self.goalradius = 8; var_0 = getnode( "baker_first_position_node", "script_noteworthy" ); var_1 = getnode( "baker_second_position", "script_noteworthy" ); var_2 = distance( level.player.origin, var_1.origin ); var_3 = getent( "vol_ps_with_baker", "targetname" ); level.guard_tunnel notify( "baker_in_position" ); if ( var_2 > 80 && level.player istouching( var_3 ) ) { var_0 maps\_anim::anim_single_solo( self, "factory_power_stealth_lower_hallway_cross_ally" ); var_1 = getnode( "baker_second_position", "script_noteworthy" ); self setgoalnode( var_1 ); } else { var_0 = getnode( "baker_first_position_node", "script_noteworthy" ); self setgoalnode( var_0 ); } } tunnel_interrupt() { level endon( "guard_tunnel_dead" ); common_scripts\utility::flag_wait( "guard_tunnel_alerted" ); self stopanimscripted(); var_0 = getnode( "baker_second_position", "script_noteworthy" ); self setgoalnode( var_0 ); } tunnel_melee_scene() { self endon( "guard_tunnel_alerted" ); level endon( "guard_tunnel_dead" ); self setlookatentity( level.player ); wait 0.5; self setlookatentity( level.guard_tunnel ); thread maps\_utility::smart_dialogue( "factory_mrk_hesallyours" ); self waittill( "second_kill_ready" ); wait 0.5; wait 1.0; } ps_second_wave_alpha_execute( var_0 ) { level endon( "railgun_reveal_setup" ); var_0.allowdeath = 1; var_0.noragdoll = 0; if ( isalive( var_0 ) ) { self.favoriteenemy = var_0; maps\_utility::disable_surprise(); self.no_pistol_switch = 1; self.ignoreall = 0; var_0 waittill( "death" ); self.ignoreall = 1; self.no_pistol_switch = 0; } } ps_second_wave_bravo() { level endon( "railgun_reveal_setup" ); common_scripts\utility::flag_wait_any( "ps_bravo_second_pos_ready", "guard_tunnel_dead" ); if ( level.player istouching( getent( "ps_player_with_bravo", "script_noteworthy" ) ) ) { thread maps\_utility::smart_radio_dialogue( "factory_kgn_loganandihave" ); thread maps\_utility::handsignal( "stop" ); } common_scripts\utility::flag_set( "ps_charlie_second_pos_ready" ); common_scripts\utility::flag_set( "ps_alpha_second_pos_ready" ); var_0 = getent( "ps_bravo_office_approach", "script_noteworthy" ); ps_bravo_office_approach( var_0 ); if ( isalive( level.guard_window_01 ) ) { self stopanimscripted(); var_0 notify( "stop_loop" ); ps_second_wave_bravo_execute( level.guard_window_01, var_0 ); } else { self stopanimscripted(); var_0 notify( "stop_loop" ); self.goalradius = 128; self setgoalnode( getnode( "bravo_final_kill_start", "script_noteworthy" ) ); } common_scripts\utility::flag_wait( "guard_tunnel_dead" ); ps_final_wave_bravo(); } ps_bravo_office_approach( var_0 ) { level.guard_window_01 endon( "death" ); common_scripts\utility::flag_wait_any( "ps_second_wave_start", "guard_tunnel_dead" ); wait 2.0; level thread bravo_office_lights(); bravo_sneak( var_0 ); common_scripts\utility::flag_wait_any( "ps_final_kill_bravo_ready", "ps_alert_chair_guard", "start_break_area_kill" ); } bravo_office_lights() { var_0 = getentarray( "office_light_right_path", "script_noteworthy" ); foreach ( var_2 in var_0 ) thread bravo_office_lights_flicker( var_2 ); } bravo_office_lights_flicker( var_0 ) { var_1 = 0.5; if ( isdefined( var_0 ) ) { for ( var_2 = 0; var_2 <= 3; var_2++ ) { var_0 setlightintensity( 0.5 ); wait 0.02; var_0 setlightintensity( 0 ); wait( randomfloatrange( 0.01, 0.04 ) ); } var_3 = 0.9; if ( maps\_utility::is_gen4() ) var_3 = 1.5; while ( var_1 <= var_3 ) { var_0 setlightintensity( var_1 ); wait 0.06; var_1 = var_1 + 0.25; } } } bravo_sneak( var_0 ) { level endon( "keegan_killed_window_guard" ); level.guard_window_01 endon( "death" ); var_0 maps\_anim::anim_reach_solo( self, "keegan_office_kill_enter" ); thread bravo_sneak_dialogue(); var_0 maps\_anim::anim_single_solo( self, "keegan_office_kill_enter" ); var_0 thread maps\_anim::anim_loop_solo( self, "keegan_office_kill_loop", "stop_loop" ); self notify( "bravo_in_window_position" ); self.in_position = 1; wait 3.5; } bravo_sneak_dialogue() { level.guard_window_01 endon( "death" ); var_0 = getent( "vol_ps_with_keegan", "targetname" ); if ( level.player istouching( var_0 ) && isalive( level.guard_window_01 ) ) { thread maps\_utility::smart_dialogue( "factory_kgn_getdownwaitfor" ); self waittill( "bravo_in_window_position" ); thread maps\_utility::smart_dialogue( "factory_kgn_takehim" ); } } bravo_shoot_office_guard( var_0 ) { if ( isalive( level.guard_window_01 ) ) { var_0 maps\_utility::cqb_aim( level.guard_window_01 ); wait 0.2; var_0 shootblank(); var_0 maps\factory_intro::safe_magic_bullet( var_0 gettagorigin( "tag_flash" ), level.guard_window_01 getshootatpos() ); } } ps_second_wave_bravo_execute( var_0, var_1 ) { if ( isalive( var_0 ) ) { var_1 maps\_anim::anim_single_solo( self, "keegan_office_kill_shoot" ); thread maps\_anim::anim_generic_loop( self, "exposed_crouch_idle_twitch_v2", "stop_loop" ); } else { thread maps\_utility::smart_dialogue( "factory_kgn_goodkill" ); if ( isdefined( self.in_position ) ) var_1 maps\_anim::anim_single_solo( self, "keegan_office_kill_exit" ); } common_scripts\utility::flag_set( "keegan_killed_window_guard" ); } ps_second_wave_charlie() { level endon( "railgun_reveal_setup" ); common_scripts\utility::flag_wait( "powerstealth_split" ); var_0 = getent( "ps_corner_kill_charlie_org", "targetname" ); thread handle_sleeping_guy( level.sleeping_guard ); thread ps_second_wave_breakout( var_0 ); self.goalradius = 16; if ( !common_scripts\utility::flag( "ps_charlie_second_enemy_alerted" ) && !common_scripts\utility::flag( "guard_platform_alerted" ) ) { charlie_post_at_corner( var_0 ); var_0 notify( "stop_loop" ); var_0 stopanimscripted(); if ( !common_scripts\utility::flag( "guard_platform_alerted" ) ) var_0 maps\_anim::anim_single_solo( self, "factory_power_stealth_ally_corner_exit" ); } maps\_utility::enable_cqbwalk(); if ( isalive( level.guard_platform ) && !common_scripts\utility::flag( "guard_platform_alerted" ) ) ps_second_wave_charlie_execute( level.guard_platform ); common_scripts\utility::flag_set( "ps_second_kill_made" ); common_scripts\utility::flag_wait( "ps_rogers_first_kill_done" ); if ( level.player istouching( getent( "vol_ps_top_level", "script_noteworthy" ) ) ) thread maps\_utility::smart_radio_dialogue( "factory_hsh_loganandiare" ); else thread maps\_utility::smart_radio_dialogue( "factory_hsh_flashlightisdown" ); self.ignoreall = 1; self.favoriteenemy = undefined; thread ps_final_wave_charlie(); } charlie_post_at_corner( var_0 ) { level endon( "ps_charlie_second_enemy_alerted" ); var_0 maps\_anim::anim_reach_solo( self, "factory_power_stealth_ally_corner_entrance" ); var_0 maps\_anim::anim_single_solo( self, "factory_power_stealth_ally_corner_entrance" ); var_0 thread maps\_anim::anim_loop_solo( self, "factory_power_stealth_ally_corner_idle", "stop_loop" ); common_scripts\utility::flag_set( "charlie_posted_up" ); if ( level.player istouching( getent( "vol_ps_top_level", "script_noteworthy" ) ) ) { wait 1.8; if ( isalive( level.guard_platform ) ) thread maps\_utility::smart_dialogue( "factory_hsh_shoothimnow" ); common_scripts\utility::flag_wait_or_timeout( "ps_rogers_first_kill_done", 5.2 ); } } ps_second_wave_charlie_execute( var_0 ) { level endon( "railgun_reveal_setup" ); self.goalradius = 190; var_1 = getnode( "charlie_quick_kill", "script_noteworthy" ); self setgoalnode( var_1 ); if ( isalive( var_0 ) ) { maps\_utility::cqb_aim( var_0 ); wait 0.2; self shootblank(); maps\factory_intro::safe_magic_bullet( self gettagorigin( "tag_flash" ), var_0 getshootatpos() ); var_0 kill(); } } ps_second_wave_breakout( var_0 ) { level endon( "ps_rogers_first_kill_done" ); common_scripts\utility::flag_wait_any( "ps_charlie_second_enemy_alerted", "guard_platform_alerted" ); level.guard_platform thread delay_stealth_break( 1 ); self stopanimscripted(); var_0 notify( "stop_loop" ); if ( common_scripts\utility::flag( "charlie_posted_up" ) ) var_0 maps\_anim::anim_single_solo( self, "factory_power_stealth_ally_corner_exit" ); self.goalradius = 64; self setgoalpos( level.guard_platform.origin ); self.ignoreall = 0; self.favoriteenemy = level.guard_platform; level.guard_platform waittill( "death" ); } ps_final_wave() { common_scripts\utility::flag_wait( "ps_second_kills_done" ); foreach ( var_1 in level.squad ) var_1 pushplayer( 0 ); common_scripts\utility::flag_wait_all( "powerstealth_end", "ps_break_area_done" ); common_scripts\utility::flag_set( "ps_final_kills_done" ); foreach ( var_1 in level.squad ) var_1 maps\_utility::enable_ai_color_dontmove(); maps\factory_util::safe_trigger_by_targetname( "sca_ps_final_kills_done" ); } ps_final_wave_alpha() { level endon( "railgun_reveal_setup" ); var_0 = getent( "vol_ps_baker_final_kill", "script_noteworthy" ); if ( level.player istouching( var_0 ) && !common_scripts\utility::flag( "ps_break_area_triggered" ) ) wait 0.3; var_1 = getent( "vol_ps_top_level", "script_noteworthy" ); var_2 = getent( "vol_ps_rogers_wait_for_melee_kill", "script_noteworthy" ); if ( level.player istouching( var_1 ) || level.player istouching( var_2 ) ) common_scripts\utility::flag_wait_or_timeout( "ps_foreman_office_entry", 12.0 ); common_scripts\utility::flag_set( "start_break_area_kill" ); self pushplayer( 0 ); if ( level.player istouching( var_0 ) ) thread maps\_utility::smart_dialogue( "factory_mrk_cmonletsmove" ); ps_final_wave_alpha_execution_scene(); if ( !common_scripts\utility::flag( "ps_break_area_triggered" ) ) ps_final_wave_alpha_execute(); else ps_final_wave_alpha_breakout(); var_3 = getnode( "ALLY_ALPHA_weapon_security_node", "targetname" ); maps\_anim::anim_reach_cleanup_solo( level.squad["ALLY_ALPHA"] ); self setgoalnode( var_3 ); maps\_utility::enable_ai_color_dontmove(); self waittill( "goal" ); self pushplayer( 0 ); maps\_utility::enable_bulletwhizbyreaction(); self.ignoresuppression = 0; self.ignorerandombulletdamage = 0; self.disablefriendlyfirereaction = 0; self.disableplayeradsloscheck = 0; setsaveddvar( "ai_friendlyFireBlockDuration", level.ai_friendlyfireblockduration ); thread maps\_utility::smart_radio_dialogue( "factory_mrk_bottomclear" ); common_scripts\utility::flag_set( "ps_alpha_done" ); } ps_final_wave_alpha_execution_scene() { level endon( "ps_break_area_triggered" ); self.goalradius = 8; var_0 = getent( "alpha_final_kill_origin", "script_noteworthy" ); var_0 maps\_anim::anim_reach_solo( self, "factory_power_stealth_breakarea_ally_shoot" ); var_0 thread maps\_anim::anim_single_solo( self, "factory_power_stealth_breakarea_ally_shoot" ); } break_area_dialogue( var_0, var_1 ) { level endon( "ps_break_area_triggered" ); level endon( "break_area_first_dead" ); var_0 endon( "death" ); var_1 endon( "death" ); var_0 maps\_utility::dialogue_queue( "factory_sp1_miranomeimporta" ); wait 0.5; var_1 maps\_utility::dialogue_queue( "factory_sp2_peroyaterminaronlas" ); wait 0.5; var_0 maps\_utility::dialogue_queue( "factory_sp1_ycuandosesupone" ); wait 0.5; var_1 maps\_utility::dialogue_queue( "factory_sp2_elseorventuradijo" ); wait 0.5; var_0 maps\_utility::dialogue_queue( "factory_sp1_puesesperoquelo" ); wait 0.5; var_1 maps\_utility::dialogue_queue( "factory_sp2_yoandoigual" ); wait 0.8; var_0 maps\_utility::dialogue_queue( "factory_sp1_quhoratienes" ); wait 0.5; var_1 maps\_utility::dialogue_queue( "factory_sp2_dosymedia" ); wait 0.5; var_0 maps\_utility::dialogue_queue( "factory_sp1_putamadrenosquedan" ); } ps_alpha_pistol_switch( var_0 ) { var_1 = spawn( "script_model", ( 0, 0, 0 ) ); var_1 setmodel( "weapon_p226" ); var_1 linkto( var_0, "tag_inhand", ( 10, 0, 2 ), ( 0, 0, 0 ) ); level.pistol = var_1; wait 1.7; var_1 delete(); } ps_alpha_pistol_fire( var_0 ) { if ( !common_scripts\utility::flag( "break_area_first_dead" ) ) { level.squad["ALLY_ALPHA"] maps\factory_intro::safe_magic_bullet( level.pistol gettagorigin( "tag_flash" ), level.break_area_guard_array[0] getshootatpos(), "p226_tactical+silencerpistol_sp" ); common_scripts\utility::flag_set( "break_area_first_dead" ); } else level.squad["ALLY_ALPHA"] maps\factory_intro::safe_magic_bullet( level.pistol gettagorigin( "tag_flash" ), level.break_area_guard_array[1] getshootatpos(), "p226_tactical+silencerpistol_sp" ); } ps_final_wave_alpha_breakout() { level endon( "ps_break_area_done" ); self stopanimscripted(); var_0 = getnode( "alpha_final_kill_node", "script_noteworthy" ); self setgoalnode( var_0 ); self.ignoreall = 0; var_1 = [ level.guard_tunnel, level.guard_breakarea_01, level.guard_breakarea_02 ]; foreach ( var_3 in var_1 ) { if ( isalive( var_3 ) ) { self.favoriteenemy = var_3; while ( !isdefined( var_3.alreadyshot ) && isalive( var_3 ) ) wait 0.1; } } wait 0.5; if ( level.player istouching( getent( "vol_ps_baker_final_kill", "script_noteworthy" ) ) ) thread maps\_utility::smart_dialogue( "factory_mrk_breaksover" ); self.ignoreall = 1; } ps_final_wave_alpha_execute() { level endon( "railgun_reveal_setup" ); var_0 = maps\_utility::get_living_ai( "ps_break_area_a", "script_noteworthy" ); var_1 = maps\_utility::get_living_ai( "ps_break_area_b", "script_noteworthy" ); level.break_area_guard_array = [ var_0, var_1 ]; foreach ( var_0 in level.break_area_guard_array ) var_0 thread ps_check_for_player_damage(); wait 0.8; var_4 = getent( "vol_ps_baker_final_kill", "script_noteworthy" ); if ( level.player istouching( var_4 ) && !common_scripts\utility::flag( "ps_break_area_triggered" ) ) { thread maps\_utility::smart_dialogue( "factory_mrk_breaksover" ); wait 0.3; } wait 0.65; common_scripts\utility::flag_set( "ps_baker_at_final_kill" ); foreach ( var_0 in level.break_area_guard_array ) { if ( isdefined( var_0 ) && isalive( var_0 ) && !isdefined( level.pistol ) ) { maps\_utility::cqb_aim( var_0 ); self shootblank(); level.squad["ALLY_ALPHA"] maps\factory_intro::safe_magic_bullet( level.squad["ALLY_ALPHA"] gettagorigin( "tag_flash" ), var_0 getshootatpos() ); } wait 0.3; } maps\_utility::enable_pain(); common_scripts\utility::flag_set( "ps_break_area_done" ); } ps_final_wave_bravo() { level endon( "railgun_reveal_setup" ); ps_final_wave_bravo_execute( level.guard_window_01 ); maps\_utility::enable_ai_color_dontmove(); thread ps_bravo_at_door(); thread maps\_utility::smart_radio_dialogue( "factory_kgn_rightclear" ); common_scripts\utility::flag_set( "ps_bravo_done" ); } ps_bravo_at_door() { var_0 = getnode( "ALLY_BRAVO_weapon_security_node", "targetname" ); self.goalradius = 8; self setgoalnode( var_0 ); self waittill( "goal" ); common_scripts\utility::flag_set( "presat_bravo_in_position" ); } ps_final_wave_bravo_execute( var_0 ) { level endon( "railgun_reveal_setup" ); common_scripts\utility::flag_wait_any( "guard_window_01_dead", "ps_break_area_triggered", "keegan_killed_window_guard" ); if ( level.player istouching( getent( "vol_ps_with_keegan", "targetname" ) ) ) thread maps\_utility::smart_dialogue( "factory_kgn_lookslikehehad" ); var_1 = getent( "ps_guard_window_02_death", "script_noteworthy" ); if ( isalive( level.guard_window_02 ) ) { level.guard_window_02 thread railing_tumble_scene(); level.guard_window_02.goalradius = 8; var_1 maps\_anim::anim_reach_solo( level.guard_window_02, "keegan_top_stairway_kill" ); } if ( isalive( level.guard_window_02 ) ) { var_1 thread maps\_anim::anim_single_solo( level.guard_window_02, "keegan_top_stairway_kill" ); level.guard_window_02.allowdeath = 1; maps\_utility::cqb_aim( level.guard_window_02 ); self.favoriteenemy = level.guard_window_02; } wait 2.2; if ( isalive( level.guard_window_02 ) ) { level.guard_window_02.allowdeath = 0; level.guard_window_02.a.nodeath = 1; for ( var_2 = 0; var_2 < 3; var_2++ ) { self shootblank(); maps\factory_intro::safe_magic_bullet( self gettagorigin( "tag_flash" ), level.guard_window_02 getshootatpos() ); wait 0.0769; } level.guard_window_02.deathanim = undefined; level waittill( "guard_window_02_dead" ); thread powerstealth_dialogue_call( 200, "factory_kgn_ekia" ); } maps\_utility::anim_stopanimscripted(); } railing_tumble_scene() { level.guard_window_02 endon( "death" ); wait 1.5; thread custom_door_open( "door_ps_right_path_org", 100, 0.3 ); level.guard_window_02 thread maps\factory_audio::stealth_kill_railing_sfx(); common_scripts\utility::flag_set( "railing_tumble_kill_ready" ); } ps_final_wave_charlie() { level endon( "presat_started" ); maps\_utility::enable_ai_color_dontmove(); thread throat_stab_abort_monitor(); if ( !common_scripts\utility::flag( "throat_stab_chair" ) ) charlie_signal(); var_0 = getent( "vol_ps_rogers_wait_for_melee_kill", "script_noteworthy" ); if ( level.player istouching( var_0 ) && isalive( level.sleeping_guard ) ) { wait 0.5; level.squad["ALLY_CHARLIE"] thread maps\_utility::smart_dialogue( "factory_hsh_makeitquietif" ); while ( distance( level.player.origin, level.sleeping_guard.origin ) < 600 && !common_scripts\utility::flag( "throat_stab_chair" ) && isalive( level.sleeping_guard ) ) wait 0.5; } else common_scripts\utility::flag_wait( "guard_tunnel_dead" ); if ( !common_scripts\utility::flag( "throat_stab_chair" ) ) charlie_finish_office(); else if ( isdefined( level.sleeping_guard ) && !isdefined( level.player.in_stab_animation ) ) { self.ignoreall = 0; self.favoriteenemy = level.sleeping_guard; level.sleeping_guard waittill( "death" ); self.ignoreall = 1; } if ( level.player istouching( getent( "vol_ps_chair_office", "script_noteworthy" ) ) ) { self.goalradius = 8; maps\_utility::enable_cqbwalk(); var_1 = getnode( "charlie_post_office_idle", "script_noteworthy" ); self setgoalnode( var_1 ); maps\_anim::anim_reach_cleanup_solo( self ); } maps\_utility::enable_ai_color_dontmove(); maps\_utility::disable_cqbwalk(); while ( isdefined( level.player.in_stab_animation ) ) wait 0.5; maps\_utility::smart_radio_dialogue( "factory_hsh_topclear" ); thread ps_charlie_at_door(); common_scripts\utility::flag_set( "ps_charlie_done" ); } ps_charlie_at_door() { var_0 = getnode( "ALLY_CHARLIE_weapon_security_node", "targetname" ); self pushplayer( 1 ); self.goalradius = 32; self setgoalnode( var_0 ); self waittill( "goal" ); common_scripts\utility::flag_set( "presat_charlie_in_position" ); } throat_stab_abort_monitor() { level.sleeping_guard endon( "death" ); common_scripts\utility::flag_wait( "throat_stab_sequence_aborted" ); common_scripts\utility::flag_set( "throat_stab_chair" ); if ( isdefined( level.sleep_guard ) ) { self.ignoreall = 0; self.favoriteenemy = level.sleeping_guard; self.goalradius = 8; self setgoalpos( level.sleeping_guard.origin ); level.sleeping_guard waittill( "death" ); self.ignoreall = 1; } } charlie_signal() { level endon( "presat_started" ); level.sleeping_guard endon( "death" ); level endon( "throat_stab_chair" ); self.goalradius = 8; maps\_utility::disable_cqbwalk(); var_0 = getnode( "charlie_final_kill_post", "script_noteworthy" ); var_0 maps\_anim::anim_reach_and_approach_solo( self, "CornerStndR_alert_signal_enemy_spotted" ); maps\_utility::disable_cqbwalk(); self waittill( "goal" ); maps\_utility::enable_cqbwalk(); var_1 = getent( "vol_ps_rogers_signal_player", "script_noteworthy" ); if ( level.player istouching( var_1 ) ) maps\_anim::anim_generic( self, "CornerStndR_alert_signal_enemy_spotted" ); self setgoalnode( var_0 ); wait 0.5; } charlie_finish_office() { level endon( "presat_started" ); level.sleeping_guard endon( "death" ); level endon( "throat_stab_chair" ); level endon( "throat_stab_sequence_aborted" ); var_0 = getent( "vol_ps_chair_office", "script_noteworthy" ); if ( isalive( level.sleeping_guard ) && !level.player istouching( var_0 ) ) { self.goalradius = 64; self setgoalnode( getnode( "charlie_post_office_idle", "script_noteworthy" ) ); wait 1.0; } if ( isalive( level.sleeping_guard ) ) ps_final_wave_charlie_execute( level.sleeping_guard ); } ps_final_wave_charlie_execute( var_0 ) { level endon( "presat_started" ); if ( isalive( var_0 ) && !isdefined( level.player.in_stab_animation ) ) { self.goalradius = 16; var_1 = getnode( "charlie_shoot_sleeper_node", "script_noteworthy" ); self setgoalnode( var_1 ); self waittill( "goal" ); maps\_utility::disable_surprise(); maps\_utility::cqb_aim( var_0 ); wait 0.2; thread flash(); maps\factory_intro::safe_magic_bullet( self gettagorigin( "tag_flash" ), var_0 getshootatpos() ); var_0 kill(); maps\_utility::enable_surprise(); if ( common_scripts\utility::flag( "ps_foreman_office_entry" ) ) { wait 0.8; level.squad["ALLY_CHARLIE"] thread maps\_utility::smart_dialogue( "factory_hsh_cmonadamletskeep" ); } } } ps_end() { common_scripts\utility::flag_wait_any( "ps_alpha_done", "ps_bravo_done", "ps_charlie_done" ); var_0 = getentarray( "sca_ps_delete", "script_noteworthy" ); foreach ( var_2 in var_0 ) var_2 common_scripts\utility::trigger_off(); } flash() { playfxontag( common_scripts\utility::getfx( "office_muzzle_flash" ), self, "tag_flash" ); } setup_patrol() { self endon( "death" ); self.animname = "generic"; self.disablearrivals = 1; self.disableexits = 1; self.health = 1; self.moveplaybackrate = 1.4; self.patrol_walk = [ "walk_gun_unwary", "patrol_bored_patrolwalk", "patrol_bored_patrolwalk_twitch" ]; self.patrol_idle = [ "patrol_idle_stretch", "patrol_idle_smoke", "patrol_idle_checkphone" ]; maps\_utility::set_generic_run_anim_array( common_scripts\utility::random( self.patrol_walk ) ); maps\_utility::set_generic_idle_anim( common_scripts\utility::random( self.patrol_idle ) ); maps\_stealth_utility::stealth_default(); if ( isdefined( self.target ) ) start_patrol( self.target ); } start_patrol( var_0, var_1 ) { if ( isdefined( var_1 ) ) wait( var_1 ); thread maps\_patrol::patrol( var_0 ); } powerstealth_dialogue_call( var_0, var_1 ) { if ( !maps\_utility::players_within_distance( var_0, self.origin ) ) maps\_utility::smart_radio_dialogue( var_1 ); } handle_sleeping_guy( var_0 ) { if ( !isdefined( var_0 ) ) return; var_0.allowdeath = 1; var_0.ignoreme = 1; var_0.ignoreall = 1; var_0.dontevershoot = 1; var_0.health = 50; var_0.animname = "generic"; var_0 maps\_utility::set_battlechatter( 0 ); var_0.deathanim = %factory_power_stealth_opfor_console_death_shot; var_1 = maps\_utility::spawn_anim_model( "chair" ); level.chair_col = getent( "col_chair_rolling", "script_noteworthy" ); level.chair_col linkto( var_1, "tag_chair_collision", ( 0, 0, 0 ), ( 90, 0, 0 ) ); chair_col_setup(); var_0 thread check_for_melee_stab( var_1 ); var_0 thread anim_sleep( var_1 ); var_0 thread wake_guy_up( var_1 ); if ( isalive( var_0 ) ) var_0 waittill( "death" ); if ( isdefined( level.player.in_stab_animation ) ) level.player waittill( "stab_finished" ); else { var_1 thread maps\factory_audio::stealth_kill_console_sfx( var_0 ); var_1 thread knock_over_chair( "sleeper_shot" ); } clean_up_stab(); common_scripts\utility::flag_wait( "presat_revolving_door_closed" ); var_1 delete(); } ready_to_stab() { level.player allowmelee( 0 ); level.player.ready_to_neck_stab = 1; var_0 = common_scripts\utility::within_fov( self.origin, self.angles, level.player.origin, 280 ); if ( !var_0 ) level.player maps\_utility::display_hint( "chair_stab_hint" ); common_scripts\utility::flag_set( "ready_to_stab_neck" ); } clean_up_stab() { if ( isdefined( level.player.ready_to_neck_stab ) && level.player.ready_to_neck_stab ) { level.player.ready_to_neck_stab = undefined; level.player allowmelee( 1 ); common_scripts\utility::flag_clear( "ready_to_stab_neck" ); } } check_for_melee_stab( var_0 ) { self endon( "death" ); level.player endon( "death" ); self endon( "guy_waking_up" ); var_1 = 22500; for (;;) { var_2 = distancesquared( level.player.origin, self.origin ); var_3 = abs( angleclamp180( level.player.angles[1] - self.angles[1] ) ); if ( var_3 < 45 && var_2 < var_1 ) { ready_to_stab(); if ( level.player meleebuttonpressed() && isalive( self ) && !level.player ismeleeing() && !level.player isthrowinggrenade() ) { thread throat_stab_me( var_0 ); return; } } else clean_up_stab(); wait 0.05; } } throat_stab_me( var_0 ) { level.player.in_stab_animation = 1; thread maps\factory_audio::stealth_kill_throat_stab_sfx(); common_scripts\utility::flag_set( "throat_stab_chair" ); var_1 = maps\factory_intro::player_start_stabbing(); level.player setstance( "stand" ); level.player allowcrouch( 0 ); var_2 = spawnstruct(); var_2.origin = self.origin; var_2.angles = self.angles; var_3 = []; var_3[0] = var_1; var_3[1] = self; var_4 = getent( "sleeping_guard_node", "script_noteworthy" ); var_4 maps\_anim::anim_first_frame_solo( var_1, "throat_stab" ); var_5 = 0.4; level.player playerlinktoblend( var_1, "tag_player", var_5, 0.3, 0.08 ); wait( var_5 ); level.player playerlinktodelta( var_1, "tag_player", 1, 0, 0, 0, 0, 1 ); var_1 show(); if ( isalive( self ) ) { var_1 show(); var_1 attach( "Viewmodel_knife_iw6", "tag_weapon_right", 1 ); var_0 thread knock_over_chair( "throat_stab" ); var_4 maps\_anim::anim_single( var_3, "throat_stab" ); maps\_vignette_util::vignette_actor_kill(); var_1 detach( "Viewmodel_knife_iw6", "tag_weapon_right", 1 ); var_1 hide(); } level.player unlink(); var_1 delete(); maps\factory_intro::player_done_stabbing(); level.player.in_stab_animation = undefined; level.player notify( "stab_finished" ); level.squad["ALLY_CHARLIE"] thread maps\_utility::smart_dialogue( "factory_hsh_niceonebro" ); } anim_sleep( var_0 ) { self endon( "death" ); self endon( "guy_waking_up" ); var_1 = getent( "sleeping_guard_node", "script_noteworthy" ); var_1 maps\_anim::anim_first_frame_solo( var_0, "sleep_enter" ); common_scripts\utility::flag_wait( "powerstealth_midpoint" ); var_1 thread maps\_anim::anim_single_solo( var_0, "sleep_enter" ); var_1 maps\_anim::anim_single_solo( self, "sleep_enter" ); var_1 thread maps\_anim::anim_loop_solo( self, "sleep_idle", "stop_loop" ); } wake_guy_up( var_0 ) { self endon( "death" ); thread detect_player_proximity(); wait_for_waking_event(); self notify( "guy_waking_up" ); common_scripts\utility::flag_set( "throat_stab_sequence_aborted" ); self stopanimscripted(); clean_up_stab(); self.deathanim = undefined; var_1 = getent( "sleeping_guard_node", "script_noteworthy" ); var_0 thread knock_over_chair( "sleep_react" ); var_1 maps\_anim::anim_single_solo( self, "sleep_react" ); self notify( "done_waking_up" ); maps\_utility::disable_surprise(); self.ignoreme = 0; self.ignoreall = 0; self.dontevershoot = undefined; self.goalradius = 8; self setgoalpos( level.player.origin ); self.health = 1; thread maps\_utility::set_battlechatter( 1 ); thread maps\_utility::gun_recall(); } detect_player_proximity() { self endon( "death" ); self endon( "guy_waking_up" ); common_scripts\utility::flag_wait( "ps_alert_chair_guard" ); self notify( "guy_waking_up" ); } wait_for_waking_event( var_0 ) { self endon( "death" ); self endon( "flashbang" ); self endon( "guy_waking_up" ); self addaieventlistener( "bulletwhizby" ); self addaieventlistener( "explode" ); self addaieventlistener( "projectile_impact" ); for (;;) { self waittill( "ai_event", var_1 ); self notify( "wake_up" ); thread delay_stealth_break( 1 ); if ( isdefined( var_0 ) ) common_scripts\utility::flag_set( var_0 ); if ( var_1 == "gunshot" || var_1 == "bulletwhizby" || var_1 == "explode" ) return; } } knock_over_chair( var_0 ) { if ( !isdefined( self.knocked_over ) ) { self.knocked_over = 1; var_1 = getent( "sleeping_guard_node", "script_noteworthy" ); if ( var_0 == "sleeper_shot" || var_0 == "sleep_react" ) thread maps\factory_audio::stealth_kill_console_chair_sfx(); var_1 maps\_anim::anim_single_solo( self, var_0 ); thread chair_col( var_0 ); } } chair_col( var_0 ) { self endon( "done_with_collision" ); for (;;) { if ( !maps\_utility::players_within_distance( 96, self.origin ) ) { level.chair_col unlink(); level.chair_col notsolid(); level.chair_col delete(); var_1 = ""; switch ( var_0 ) { case "sleeper_shot": var_1 = "_shot"; break; case "throat_stab": var_1 = "_stabbed"; break; case "sleep_react": var_1 = "_react"; break; } var_2 = getent( "col_chair_rolling" + var_1, "script_noteworthy" ); var_2 solid(); self.knocked_over = 1; break; } wait 0.5; } self notify( "done_with_collision" ); } chair_col_setup() { var_0 = getent( "col_chair_rolling_shot", "script_noteworthy" ); var_1 = getent( "col_chair_rolling_stabbed", "script_noteworthy" ); var_2 = getent( "col_chair_rolling_react", "script_noteworthy" ); var_0 notsolid(); var_1 notsolid(); var_2 notsolid(); } knock_over_chair_default( var_0 ) { var_0 endon( "done_waking_up" ); var_0 waittill( "damage", var_1, var_2, var_3, var_4, var_5 ); self.knocked_over = 0; thread knock_over_chair( "sleeper_shot" ); } custom_door_open( var_0, var_1, var_2, var_3, var_4 ) { if ( !isdefined( var_2 ) ) var_2 = 1; var_5 = getent( var_0, "targetname" ); var_6 = getentarray( var_5.target, "targetname" ); for ( var_7 = 0; var_7 < var_6.size; var_7++ ) var_6[var_7] linkto( var_5 ); var_8 = var_5.angles; var_5 rotateto( var_5.angles + ( 0, var_1, 0 ), var_2 ); for ( var_7 = 0; var_7 < var_6.size; var_7++ ) { if ( var_6[var_7].classname != "script_model" ) var_6[var_7] connectpaths(); } var_5 waittill( "rotatedone" ); if ( isdefined( var_3 ) ) { if ( !isdefined( var_4 ) ) var_4 = 3.5; wait( var_4 ); var_5 rotateto( var_8, var_2 / 4 ); for ( var_7 = 0; var_7 < var_6.size; var_7++ ) { if ( var_6[var_7].classname != "script_model" ) var_6[var_7] disconnectpaths(); } } } teleport_squad( var_0, var_1 ) { if ( !isdefined( var_1 ) ) var_2 = [ "ALLY_ALPHA", "ALLY_BRAVO", "ALLY_CHARLIE", "ALLY_ECHO" ]; else var_2 = [ "ALLY_ALPHA", "ALLY_BRAVO", "ALLY_CHARLIE" ]; for ( var_3 = 0; var_3 < var_2.size; var_3++ ) { maps\factory_util::actor_teleport( level.squad[var_2[var_3]], var_2[var_3] + "_" + var_0 + "_teleport" ); var_4 = getnode( var_2[var_3] + "_" + var_0 + "_node", "targetname" ); level.squad[var_2[var_3]] setgoalnode( var_4 ); } } teleport_squadmember( var_0, var_1 ) { maps\factory_util::actor_teleport( level.squad[var_1], var_1 + "_" + var_0 + "_teleport" ); } squad_stealth_on() { foreach ( var_1 in level.squad ) { var_1.ignoreall = 1; var_1.ignoreme = 1; var_1 maps\_utility::enable_cqbwalk(); } } squad_stealth_off() { foreach ( var_1 in level.squad ) { var_1.ignoreall = 0; var_1.ignoreme = 0; var_1 maps\_utility::disable_cqbwalk(); var_1.moveplaybackrate = 1.0; } } conveyor_crate_setup() { thread spawn_crate_above_round_door(); thread maps\factory_anim::conveyor_system(); } spawn_crate_above_round_door() { level endon( "presat_locked" ); level endon( "stop_crate_conveyor_system" ); for (;;) { var_0 = randomintrange( 0, 3 ); if ( var_0 == 0 ) var_1 = "shipping_frame_50cal"; else if ( var_0 == 1 ) var_1 = "shipping_frame_crates"; else if ( var_0 == 2 ) var_1 = "shipping_frame_minigun"; else var_1 = "shipping_frame_crates"; var_2 = spawn( "script_model", ( 6421, 1703, 550 ) ); var_2 setmodel( var_1 ); var_2 thread crate_above_round_door_move(); var_2 thread maps\factory_audio::audio_crate_move_above_door(); wait( randomfloatrange( 1.2, 5.0 ) ); } } crate_above_round_door_move() { self rotateto( ( 6, 0, 0 ), 0.1 ); self moveto( ( 8229, 1703, 348 ), 28 ); self waittill( "movedone" ); self delete(); } attach_flashlight( var_0, var_1, var_2 ) { if ( !isdefined( var_1 ) ) var_1 = 1; if ( !isdefined( var_2 ) ) var_2 = 0; self attach( "com_flashlight_on", "tag_inhand", 1 ); self.have_flashlight = 1; flashlight_light( var_0, var_1, var_2 ); thread detach_flashlight_on_death(); } detach_flashlight_on_death() { self waittill( "death" ); if ( isdefined( self ) ) { detach_flashlight(); wait 0.25; } } detach_flashlight() { if ( !isdefined( self.have_flashlight ) ) return; self detach( "com_flashlight_on", "tag_inhand" ); flashlight_light( 0 ); self.have_flashlight = undefined; } flashlight_light( var_0, var_1, var_2 ) { var_3 = "tag_light"; if ( var_0 ) { var_4 = spawn( "script_model", ( 0, 0, 0 ) ); var_4 setmodel( "tag_origin" ); var_4 hide(); var_4 linkto( self, var_3, ( 0, 0, 0 ), ( 0, 0, 0 ) ); thread flashlight_light_death( var_4 ); if ( var_1 ) { if ( var_2 ) { playfxontag( level._effect["flashlight_spotlight_rain"], var_4, "tag_origin" ); return; } playfxontag( level._effect["flashlight_spotlight_flare"], var_4, "tag_origin" ); return; return; } playfxontag( level._effect["flashlight"], var_4, "tag_origin" ); return; } else if ( isdefined( self.have_flashlight ) ) self notify( "flashlight_off" ); } flashlight_light_death( var_0 ) { common_scripts\utility::waittill_either( "death", "flashlight_off" ); var_0 delete(); self.have_flashlight = undefined; waittillframeend; wait 0.1; if ( !isdefined( self.dontdrop_flashlight ) ) playfxontag( level._effect["dropped_flashlight_spotlight_runner"], self, "tag_inhand" ); } ignore_move_suppression( var_0 ) { self endon( "death" ); if ( isdefined( var_0 ) ) self endon( var_0 ); for (;;) { if ( self ismovesuppressed() ) { maps\_utility::set_ignoresuppression( 1 ); wait 4; } else if ( isdefined( self.ignoresuppression ) && self.ignoresuppression ) maps\_utility::set_ignoresuppression( 0 ); wait 0.25; } } move_warning_light( var_0, var_1, var_2 ) { level endon( "presat_locked" ); var_3 = common_scripts\utility::spawn_tag_origin(); playfxontag( level._effect["glow_red_light_400_strobe"], var_3, "tag_origin" ); var_4 = getent( "reveal_crane_org", "targetname" ); for (;;) { var_3.origin = var_4.origin + ( var_0, var_1, var_2 ); wait 0.05; } } rotate_warning_light() { level endon( "presat_locked" ); for (;;) { self rotateyaw( 360, 2 ); wait 2; } } animate_tank_crane() { var_0 = getentarray( "factory_entrance_tank_loading", "script_noteworthy" ); level.tank_crane_soundorg_loop = spawn( "script_origin", ( 5400, 3044, 478 ) ); level.tank_crane_soundorg_start_stop = spawn( "script_origin", ( 5400, 3044, 478 ) ); thread move_warning_light( -125, 0, -85 ); thread move_warning_light( 65, 0, -85 ); wait 4.0; foreach ( var_2 in var_0 ) var_2 movex( -675, 18, 2, 6 ); level.tank_crane_soundorg_loop movex( -675, 18, 2, 6 ); level.tank_crane_soundorg_start_stop movex( -675, 18, 2, 6 ); thread maps\factory_audio::audio_crane_movement_factory_reveal_01( 18, 2, 6 ); wait 18.0; foreach ( var_2 in var_0 ) var_2 movez( -60, 10, 2, 6 ); level.tank_crane_soundorg_loop movez( -44, 10, 2, 6 ); level.tank_crane_soundorg_start_stop movez( -44, 10, 2, 6 ); } factory_entrance_reveal_animate_pieces() { thread factory_entrance_reveal_animate_crane(); } factory_entrance_reveal_animate_crane() { thread maps\factory_anim::allies_enter_factory_cranes(); } factory_entrance_reveal_animate_loading_crate01a() { var_0 = getent( "loading_container_01a_org", "targetname" ); var_0 thread loading_platform_lights( 95, 70, 40 ); var_0 thread loading_platform_lights( -95, 70, 40 ); var_1 = getent( "loading_crate01a_path02", "targetname" ); var_2 = []; var_2 = getentarray( var_0.target, "targetname" ); foreach ( var_4 in var_2 ) var_4 linkto( var_0 ); wait 0.7; wait 17.0; var_0 moveto( var_1.origin, 45.0, 1.0, 1.0 ); } factory_entrance_reveal_animate_loading_crate02() { var_0 = getent( "loading_crate_02a_origin", "targetname" ); var_1 = getent( "loading_crate02_path01", "targetname" ); var_2 = getent( "loading_crate02a_path02", "targetname" ); var_3 = getent( "loading_crate02a_path03", "targetname" ); var_4 = getent( "loading_crate02a_path04", "targetname" ); var_5 = []; var_5 = getentarray( var_0.target, "targetname" ); foreach ( var_7 in var_5 ) var_7 linkto( var_0 ); var_0 moveto( var_1.origin, 0.7, 0.3, 0.3 ); wait 0.7; var_0 moveto( var_2.origin, 17.0, 1.0, 1.0 ); wait 17.0; var_0 moveto( var_3.origin, 10.0, 0.5, 0.5 ); wait 10.0; var_0 moveto( var_4.origin, 45.0, 1.0, 1.0 ); wait 10.0; wait 17.0; } factory_entrance_reveal_animate_loader01() { var_0 = getent( "loader_platform01_org", "targetname" ); var_0 thread loading_platform_lights( 95, 70, 40 ); var_0 thread loading_platform_lights( -95, 70, 40 ); var_1 = getent( "loading_crate02a_path03", "targetname" ); var_2 = getent( "loading_crate02a_path04", "targetname" ); var_3 = []; var_3 = getentarray( var_0.target, "targetname" ); foreach ( var_5 in var_3 ) var_5 linkto( var_0 ); var_7 = getent( "loading_crate_02a_origin", "targetname" ); var_8 = []; var_8 = getentarray( var_7.target, "targetname" ); foreach ( var_10 in var_8 ) var_10 linkto( var_7 ); var_7.origin = var_0.origin + ( 0, 0, -15 ); var_7 linkto( var_0 ); var_0.origin = var_0.origin + ( 0, 0, 0 ); wait 20.8; var_0 moveto( var_2.origin, 45.0, 1.0, 1.0 ); } loading_platform_lights( var_0, var_1, var_2 ) { var_3 = common_scripts\utility::spawn_tag_origin(); playfxontag( level._effect["factory_moving_piece_light"], var_3, "tag_origin" ); var_3.origin = self.origin + ( var_0, var_1, var_2 ); var_3 linkto( self ); common_scripts\utility::flag_wait( "open_exit_doors" ); stopfxontag( level._effect["factory_moving_piece_light"], var_3, "tag_origin" ); iprintlnbold( "killing platform tag_origin" ); var_3 delete(); } move_crates() { var_0 = getent( "loader_platform01_org", "targetname" ); var_1 = getent( "entrance_crate_01", "targetname" ); var_2 = getent( "entrance_crate_02", "targetname" ); var_3 = getent( "entrance_crate_03", "targetname" ); var_4 = getent( "entrance_crate_04", "targetname" ); var_1 thread loading_platform_lights( 0, 46, 90 ); var_2 thread loading_platform_lights( 0, 46, 90 ); var_3 thread loading_platform_lights( 0, 46, 90 ); var_4 thread loading_platform_lights( 0, 46, 90 ); wait 2; var_1 movex( -440, 13 ); var_2 movex( -440, 13 ); var_3 movex( -900, 20 ); var_4 movex( -900, 20 ); var_1 waittill( "movedone" ); var_1 movex( -130, 4 ); var_2 movey( -200, 5 ); var_2 waittill( "movedone" ); var_1 movey( -200, 5 ); var_2 movex( -130, 4 ); var_3 movex( 900, 20 ); var_4 movex( 900, 20 ); var_2 waittill( "movedone" ); var_3 movex( -900, 20 ); var_4 movex( -900, 20 ); } move_forklifts() { var_0 = getent( "forklift_entrance01", "targetname" ); var_1 = common_scripts\utility::spawn_tag_origin(); var_1.origin = var_0.origin + ( 0, 0, 70 ); var_1 linkto( var_0 ); playfxontag( level._effect["light_blink_forklift"], var_1, "tag_origin" ); common_scripts\utility::flag_wait( "open_exit_doors" ); stopfxontag( level._effect["light_blink_forklift"], var_1, "tag_origin" ); } forkilft_movement() { var_0 = getent( "forklift_entrance01", "targetname" ); var_1 = getent( "forklift_loc_00", "targetname" ); var_2 = getent( "forklift_loc_00a", "targetname" ); var_3 = getent( "forklift_loc_01", "targetname" ); var_4 = getent( "forklift_loc_01a", "targetname" ); var_5 = getent( "forklift_loc_02", "targetname" ); var_6 = getent( "forklift_loc_02a", "targetname" ); var_7 = getent( "forklift_loc_03", "targetname" ); var_8 = getent( "forklift_loc_03a", "targetname" ); var_9 = getent( "forklift_loc_04", "targetname" ); var_10 = getent( "forklift_loc_04a", "targetname" ); for (;;) { forklift_turnandmoveto( var_3 ); forklift_turnandmoveto( var_4 ); forklift_turnandmoveto( var_3 ); forklift_turnandmoveto( var_9 ); forklift_turnandmoveto( var_10 ); forklift_turnandmoveto( var_9 ); forklift_turnandmoveto( var_1 ); forklift_turnandmoveto( var_2 ); forklift_turnandmoveto( var_1 ); forklift_turnandmoveto( var_5 ); forklift_turnandmoveto( var_6 ); forklift_turnandmoveto( var_5 ); forklift_turnandmoveto( var_1 ); forklift_turnandmoveto( var_2 ); forklift_turnandmoveto( var_1 ); forklift_turnandmoveto( var_7 ); forklift_turnandmoveto( var_8 ); forklift_turnandmoveto( var_7 ); } } forklift_turnandmoveto( var_0 ) { var_1 = getent( "forklift_entrance01", "targetname" ); var_1 moveto( var_0.origin, 3 ); var_1 waittill( "movedone" ); }