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

2423 lines
79 KiB
Plaintext

// 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" );
}