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

1802 lines
51 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
ark_console_init();
}
ark_console_init()
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
common_scripts\utility::flag_init( "ark_console_cycle_over" );
common_scripts\utility::flag_init( "ark_console_event_done" );
common_scripts\utility::flag_init( "consoles_all_on" );
common_scripts\utility::flag_init( "cortex_pulse" );
common_scripts\utility::flag_init( "start_ark_encounter" );
common_scripts\utility::flag_init( "cortex_carryable" );
common_scripts\utility::flag_init( "everyone_in_ark" );
common_scripts\utility::flag_init( "doors_open" );
common_scripts\utility::flag_init( "start_archer_vignette" );
precachempanim( "alien_descent_vignette_idle_a" );
precachempanim( "alien_descent_vignette_idle_b" );
precachempanim( "alien_descent_vignette_idle_c" );
precachempanim( "alien_descent_vignette_dialogue_1" );
precachempanim( "alien_descent_vignette_dialogue_2" );
precachempanim( "alien_descent_vignette_dialogue_3" );
precachempanim( "alien_descent_vignette_cannister" );
console_threatbias_setup();
level.ark_console_time_paused = 0;
level.total_consoles = 4;
level thread ark_console_encounter();
}
ark_console_encounter()
{
level endon( "end_ark_encounter" );
while ( !isdefined( level.players ) )
wait 0.1;
level thread debug_end_encounter();
if ( isdefined( level.debug_ark_jump ) )
level thread debug_open_ark_doors();
else
level thread open_ark_doors();
common_scripts\utility::flag_wait( "entering_ark_flag" );
level thread initial_outline_for_connecting_player();
var_0 = getent( "ark_fog_01", "targetname" );
var_0 setscriptablepartstate( "base", "default" );
var_1 = getent( "ark_glow_01", "targetname" );
var_1 setscriptablepartstate( "base", "default" );
level.attack_points = [];
level.gas_ents = [];
for ( var_2 = 0; var_2 < level.total_consoles; var_2++ )
{
var_3 = getent( "console_" + ( var_2 + 1 ), "targetname" );
var_3.panels = getscriptablearray( "panels_" + ( var_2 + 1 ), "targetname" )[0];
level.attack_points[var_2] = var_3;
level thread create_on_and_off_states_for_console( level.attack_points[var_2], "console_" + ( var_2 + 1 ) );
}
level thread set_ark_encounter_flag();
common_scripts\utility::flag_wait( "start_ark_encounter" );
create_initial_cortex();
level thread spawn_archer();
level thread disable_cortex_for_ark_encounter();
level thread cortex_pulse_logic();
level thread turn_on_consoles();
level thread make_aliens_ignore_consoles();
common_scripts\utility::flag_wait( "consoles_all_on" );
level thread close_ark_doors();
level thread teleport_players_not_in_ark();
common_scripts\utility::flag_wait( "everyone_in_ark" );
maps\mp\alien\_gamescore::reset_encounter_performance();
var_4 = 1;
foreach ( var_3 in level.attack_points )
{
var_3 thread ark_console_attack_point_logic( var_4 );
var_4++;
}
wait 0.1;
setomnvar( "ui_alien_boss_status", 2 );
setomnvar( "ui_alien_boss_icon", 4 );
setomnvar( "ui_alien_boss_progression", 0 );
level thread spawn_ark_waves_on_progression( "progress_25", "ark_spawn_25" );
level thread spawn_ark_waves_on_progression( "progress_50", "ark_spawn_50" );
level thread spawn_ark_waves_on_progression( "progress_75", "ark_spawn_75" );
level thread ark_console_combat_timer( 240 );
level thread listen_for_all_consoles_down();
level thread multiple_terminals_down_nag();
level thread trigger_ark_defenses();
level thread open_ark_obelisks();
level.should_use_custom_death_func = 1;
spawn_wave( 19 );
common_scripts\utility::flag_wait( "ark_console_cycle_over" );
foreach ( var_8 in level.players )
var_8 thread remove_ark_vo_on_player();
foreach ( var_11 in level.attack_points )
{
maps\mp\alien\_outline_proto::disable_outline_for_players( var_11, level.players );
var_11.ignoreme = 1;
}
foreach ( var_11 in level.gas_ents )
var_11 delete();
setomnvar( "ui_alien_boss_status", 0 );
level notify( "stop_waves" );
level notify( "end_cycle" );
level notify( "alien_cycle_ended" );
maps\mp\alien\_gamescore::calculate_and_show_encounter_scores( level.players, maps\mp\alien\_gamescore_dlc3::get_ark_score_component_list() );
give_players_ark_rewards();
level thread open_ark_doors_end();
wait_until_players_are_not_using_cortex();
common_scripts\utility::flag_set( "ark_console_event_done" );
level.encounter_name = undefined;
}
give_players_ark_rewards()
{
foreach ( var_1 in level.players )
var_1 thread maps\mp\alien\_hive::wait_to_give_rewards();
}
set_ark_encounter_flag()
{
var_0 = 0;
while ( !var_0 )
{
foreach ( var_2 in level.players )
{
if ( distance( var_2.origin, ( 3564, 1887, 976 ) ) < 1800 )
{
var_0 = 1;
break;
}
}
wait 0.1;
}
common_scripts\utility::flag_set( "start_ark_encounter" );
}
wait_until_players_are_not_using_cortex()
{
var_0 = 1;
for (;;)
{
var_0 = 1;
foreach ( var_2 in level.players )
{
if ( isdefined( var_2.cortex_spot ) )
var_0 = 0;
}
if ( var_0 )
break;
wait 0.1;
}
}
debug_end_encounter()
{
level waittill( "debug_beat_ark_interior" );
common_scripts\utility::flag_wait( "consoles_all_on" );
level notify( "end_ark_encounter" );
common_scripts\utility::flag_set( "ark_console_cycle_over" );
common_scripts\utility::flag_set( "ark_console_event_done" );
foreach ( var_1 in level.attack_points )
{
maps\mp\alien\_outline_proto::disable_outline_for_players( var_1, level.players );
var_1.ignoreme = 1;
}
setomnvar( "ui_alien_boss_status", 0 );
level notify( "stop_waves" );
level notify( "alien_cycle_ended" );
common_scripts\utility::flag_set( "ark_console_event_done" );
level thread open_ark_doors_end();
level.encounter_name = undefined;
}
create_on_and_off_states_for_console( var_0, var_1 )
{
make_cable_arrays( var_0, var_1 );
var_0 turn_off_console();
wait 0.1;
var_0.panels setscriptablepartstate( 0, "idle" );
}
create_initial_cortex()
{
var_0 = ( 3832, 1851, 920 );
maps\mp\alien\_cortex::drop_cortex( var_0, ( 0, 0, 0 ) );
}
turn_on_consoles()
{
level endon( "end_ark_encounter" );
wait 1.0;
while ( !isdefined( level.cortex ) )
wait 0.1;
while ( !isdefined( level.cortex_use_trigger ) )
wait 0.1;
level thread start_ark_encounter_nag();
level.cortex_use_trigger makeusable();
level.cortex_use_trigger sethintstring( &"MP_ALIEN_DESCENT_CORTEX_USE" );
maps\mp\alien\_outline_proto::enable_outline_for_players( level.cortex, level.players, 3, 0, "high" );
level.cortex_use_trigger wait_until_player_use_cortex();
playfx( level._effect["cortex_blast"], level.cortex.origin + ( 0, 0, 15 ) );
playsoundatpos( level.cortex.origin, "scn_cortex_activate" );
level thread rumble_players( "heavygun_fire", 0.5 );
common_scripts\utility::flag_set( "ark_encounter_begun" );
level.cortex_use_trigger sethintstring( "" );
maps\mp\alien\_outline_proto::enable_outline_for_players( level.cortex, level.players, 1, 0, "high" );
foreach ( var_1 in level.players )
var_1 remove_ark_vo_on_player();
common_scripts\utility::flag_set( "consoles_all_on" );
}
start_ark_encounter_nag()
{
level endon( "end_ark_encounter" );
level endon( "ark_encounter_begun" );
common_scripts\utility::flag_wait( "ark_intro_vo_done" );
wait 20;
var_0 = [ "descent_crs_getthecortexand" ];
maps\mp\mp_alien_dlc3_vignettes::play_descent_vignette_vo( var_0 );
wait 20;
var_0 = [ "descent_crs_doitnowyoure" ];
maps\mp\mp_alien_dlc3_vignettes::play_descent_vignette_vo( var_0 );
wait 20;
var_1 = 0;
for (;;)
{
if ( common_scripts\utility::flag( "ark_encounter_begun" ) )
break;
level notify( "dlc_vo_notify", "descent_vo", "nag_obelisks" );
wait( 20 + var_1 );
if ( var_1 < 120 )
var_1 = var_1 + 20;
}
}
ark_console_attack_point_logic( var_0 )
{
self makeentitysentient( "allies" );
self.ignoreme = 0;
self setthreatbiasgroup( "consoles" );
self.threatbias = 1000;
self setcandamage( 1 );
if ( maps\mp\alien\_utility::isplayingsolo() )
self.progresshealth = 500;
else
self.progresshealth = 100;
thread ark_console_point_health_monitor( var_0 );
thread prevent_friendly_fire();
}
prevent_friendly_fire()
{
level endon( "end_ark_encounter" );
self endon( "death" );
self endon( "end_cycle" );
self.health = 9999999;
for (;;)
{
var_0 = 0;
self waittill( "damage", var_1, var_2, var_3, var_4, var_5 );
if ( isdefined( var_2.team ) && var_2.team == "allies" )
{
var_0 = 1;
self.health = self.health + var_1;
}
if ( !var_0 && self.progresshealth > 0 )
{
self playsound( "scn_dscnt_alien_pod_hit" );
self.progresshealth = self.progresshealth - var_1;
}
}
}
ark_console_point_health_monitor( var_0 )
{
level endon( "end_ark_encounter" );
level endon( "end_cycle" );
var_1 = self.progresshealth;
self.start_health = var_1;
var_2 = 0;
self.outline_color = 0;
thread turn_on_console();
maps\mp\alien\_outline_proto::enable_outline_for_players( self, level.players, 2, 1, "high" );
self.alarmed = 0;
self makeentitysentient( "allies" );
self.ignoreme = 0;
self.sound_org = spawn( "script_model", self.origin );
self.sound_org setmodel( "tag_origin" );
while ( !common_scripts\utility::flag( "ark_console_cycle_over" ) )
{
while ( self.progresshealth > 0 )
{
if ( self.progresshealth > var_1 * 0.75 )
{
if ( self.outline_color != 2 )
{
self.outline_color = 2;
maps\mp\alien\_outline_proto::enable_outline_for_players( self, level.players, 2, 0, "high" );
}
}
else if ( self.progresshealth > var_1 * 0.5 )
{
if ( self.outline_color != 2 )
{
self.outline_color = 2;
maps\mp\alien\_outline_proto::enable_outline_for_players( self, level.players, 2, 0, "high" );
self.panels setscriptablepartstate( 0, "damaged_1" );
}
}
else if ( self.progresshealth > var_1 * 0.25 )
{
if ( self.outline_color != 5 )
{
self.outline_color = 5;
maps\mp\alien\_outline_proto::enable_outline_for_players( self, level.players, 5, 0, "high" );
self.panels setscriptablepartstate( 0, "damaged_2" );
playsoundatpos( self.sound_org.origin + ( 0, 0, 40 ), "scn_ark_console_alert" );
}
}
else if ( self.outline_color != 5 )
{
self.outline_color = 5;
maps\mp\alien\_outline_proto::enable_outline_for_players( self, level.players, 5, 0, "high" );
if ( self.alarmed == 0 )
self.alarmed = 1;
}
if ( self.progresshealth != self.start_health )
{
var_2 = 0;
self.start_health = self.progresshealth;
}
else
{
var_2 = var_2 + 1;
if ( var_2 >= 50 )
{
if ( self.progresshealth > var_1 * 0.75 )
{
self.progresshealth = var_1;
self.panels setscriptablepartstate( 0, "on" );
var_2 = 0;
}
else if ( self.progresshealth > var_1 * 0.5 )
{
self.progresshealth = int( floor( var_1 * 0.75 ) );
var_2 = 0;
}
else if ( self.progresshealth > var_1 * 0.25 )
{
self.progresshealth = int( floor( var_1 * 0.5 ) );
var_2 = 0;
}
else
{
self.progresshealth = int( floor( var_1 * 0.25 ) );
var_2 = 0;
}
}
}
wait 0.1;
}
thread turn_off_console();
self.ignoreme = 1;
thread terminal_down_vo( var_0 );
self sethintstring( &"MP_ALIEN_DESCENT_TERMINAL_ONLINE" );
maps\mp\alien\_outline_proto::enable_outline_for_players( self, level.players, 1, 0, "high" );
self.outline_color = 0;
self makeusable();
thread play_console_offline_audio();
wait_until_player_repairs_console();
reset_console_health();
thread turn_on_console();
thread make_console_sentient( 5 );
self sethintstring( "" );
self.sound_org stoploopsound( "scn_ark_console_off_lp" );
wait 0.1;
}
maps\mp\alien\_outline_proto::disable_outline_for_players( self, level.players );
self.sound_org stoploopsound( "scn_ark_console_off_lp" );
wait 0.1;
self.sound_org delete();
}
turn_off_console()
{
self.panels setscriptablepartstate( 0, "off" );
if ( isdefined( self.cable_on_array ) )
{
foreach ( var_1 in self.cable_on_array )
var_1 hide();
foreach ( var_1 in self.cable_off_array )
var_1 show();
}
}
initial_outline_for_connecting_player()
{
level endon( "game_ended" );
common_scripts\utility::flag_wait( "everyone_in_ark" );
while ( !common_scripts\utility::flag( "ark_console_cycle_over" ) )
{
level waittill( "connected", var_0 );
level thread init_console_outlines( var_0 );
}
}
init_console_outlines( var_0 )
{
level endon( "game_ended" );
var_0 waittill( "outline_init_done" );
foreach ( var_2 in level.attack_points )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
var_3 = 500;
else
var_3 = 100;
if ( var_2.progresshealth > 0 )
{
if ( var_2.progresshealth > var_3 * 0.75 )
maps\mp\alien\_outline_proto::enable_outline_for_player( var_2, var_0, 2, 0, "high" );
else if ( var_2.progresshealth > var_3 * 0.5 )
maps\mp\alien\_outline_proto::enable_outline_for_player( var_2, var_0, 2, 0, "high" );
else if ( var_2.progresshealth > var_3 * 0.25 )
maps\mp\alien\_outline_proto::enable_outline_for_player( var_2, var_0, 5, 0, "high" );
else
maps\mp\alien\_outline_proto::enable_outline_for_player( var_2, var_0, 5, 0, "high" );
continue;
}
maps\mp\alien\_outline_proto::enable_outline_for_player( var_2, var_0, 1, 0, "high" );
}
}
play_console_offline_audio()
{
playsoundatpos( self.sound_org.origin + ( 0, 0, 40 ), "scn_ark_console_off" );
self.sound_org playloopsound( "scn_ark_console_off_lp" );
}
make_cable_arrays( var_0, var_1 )
{
var_2 = getentarray( var_1 + "_cable", "targetname" );
foreach ( var_4 in var_2 )
{
if ( isdefined( var_4.script_noteworthy ) )
{
if ( var_4.script_noteworthy == "on" )
var_0.cable_on_array = common_scripts\utility::add_to_array( var_0.cable_on_array, var_4 );
if ( var_4.script_noteworthy == "off" )
var_0.cable_off_array = common_scripts\utility::add_to_array( var_0.cable_off_array, var_4 );
}
}
}
turn_on_console()
{
self.panels setscriptablepartstate( 0, "on" );
if ( isdefined( self.cable_on_array ) )
{
foreach ( var_1 in self.cable_on_array )
var_1 show();
foreach ( var_1 in self.cable_off_array )
var_1 hide();
}
}
make_console_sentient( var_0 )
{
level endon( "end_ark_encounter" );
level endon( "end_cycle" );
wait( var_0 );
self makeentitysentient( "allies" );
self.ignoreme = 0;
self setthreatbiasgroup( "consoles" );
self.threatbias = 1000;
self setcandamage( 1 );
}
terminal_down_vo( var_0 )
{
level endon( "end_ark_encounter" );
var_1 = [ var_0, "_single" ];
var_2 = common_scripts\utility::random( var_1 );
level notify( "dlc_vo_notify", "descent_vo", "offline_obelisk" + var_2 );
}
multiple_terminals_down_nag()
{
level endon( "end_ark_encounter" );
level endon( "ark_console_cycle_over" );
common_scripts\utility::flag_wait( "consoles_all_on" );
while ( !common_scripts\utility::flag( "ark_console_cycle_over" ) )
{
while ( get_num_online_consoles() > 3 )
wait 5;
if ( get_num_online_consoles() < 3 )
level notify( "dlc_vo_notify", "descent_vo", "offline_obelisk" );
common_scripts\utility::flag_wait( "cortex_pulse" );
common_scripts\utility::flag_waitopen( "cortex_pulse" );
}
}
reset_console_health()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
self.progresshealth = 500;
else
self.progresshealth = 100;
self.outline_color = 0;
}
ark_console_combat_timer( var_0 )
{
level endon( "end_ark_encounter" );
var_1 = var_0;
level.elapsed_time = 0;
var_2 = 0;
var_3 = 1.0;
var_4 = var_3 / level.total_consoles;
var_5 = var_3 * 100 / var_1;
var_6 = var_5 / level.total_consoles;
var_7 = 0;
level thread fx_ramp_on_progression( var_1 );
while ( !common_scripts\utility::flag( "ark_console_cycle_over" ) )
{
if ( level.elapsed_time > var_1 )
{
common_scripts\utility::flag_set( "ark_console_cycle_over" );
break;
}
else
{
var_8 = get_num_online_consoles();
if ( var_8 == 0 )
{
if ( !var_7 )
{
level notify( "all_consoles_down" );
var_7 = 1;
}
}
if ( var_8 < 4 )
{
wait( var_3 );
continue;
}
if ( var_8 == level.total_consoles )
{
if ( var_7 )
level notify( "all_consoles_up" );
}
level.elapsed_time = level.elapsed_time + var_4 * var_8;
var_2 = var_2 + var_6 * var_8;
setomnvar( "ui_alien_boss_progression", 100 - int( var_2 ) );
}
wait( var_3 );
}
}
fx_ramp_on_progression( var_0 )
{
var_1 = var_0 * 0.25;
var_2 = var_0 * 0.5;
var_3 = var_0 * 0.75;
var_4 = spawn( "script_origin", ( 3390, 1924, 948 ) );
var_5 = getent( "ark_fog_01", "targetname" );
var_6 = getent( "ark_glow_01", "targetname" );
level thread lightning_loop_01();
while ( !isdefined( level.elapsed_time ) )
wait 0.1;
while ( level.elapsed_time < var_1 )
wait 0.1;
level notify( "progress_25" );
maps\mp\mp_alien_dlc3_vignettes::descent_vo_ark_defenses();
var_4 playsound( "scn_descent_end_25per" );
earthquake( 0.1, 3, level.archer.origin, 2000 );
level thread rumble_players( "heavy_3s", 0 );
wait 0.1;
var_5 setscriptablepartstate( "base", "medium" );
var_6 setscriptablepartstate( "base", "medium" );
while ( level.elapsed_time < var_2 )
wait 0.1;
maps\mp\mp_alien_dlc3_vignettes::descent_vo_ark_combat_halfway();
level notify( "progress_50" );
level notify( "ark_stage_3" );
var_4 playsound( "scn_descent_end_50per" );
earthquake( 0.2, 3, level.archer.origin, 2000 );
level thread rumble_players( "heavy_3s", 0 );
wait 0.1;
var_5 setscriptablepartstate( "base", "hot" );
var_6 setscriptablepartstate( "base", "hot" );
level thread lightning_loop_01();
while ( level.elapsed_time < var_3 )
wait 0.1;
level notify( "progress_75" );
maps\mp\mp_alien_dlc3_vignettes::descent_vo_ark_combat_almost_done();
var_4 playsound( "scn_descent_end_75per" );
thread aud_node_cleanup( var_4 );
earthquake( 0.4, 3, level.archer.origin, 2000 );
level thread rumble_players( "heavy_3s", 0 );
}
spawn_ark_waves_on_progression( var_0, var_1 )
{
level waittill( var_0 );
spawn_ark_event_wave( var_1 );
}
spawn_ark_event_wave( var_0 )
{
maps\mp\alien\_spawn_director::activate_spawn_event( var_0, 1 );
}
aud_node_cleanup( var_0 )
{
wait 7.5;
if ( isdefined( var_0 ) )
var_0 delete();
}
lightning_loop_01()
{
level endon( "game_ended" );
level endon( "ark_stage_3" );
var_0 = getent( "ark_lightning_01", "targetname" );
var_1 = [ "default", "bolt_1", "bolt_2", "bolt_3", "bolt_4" ];
for (;;)
{
wait 0.01;
wait( randomfloatrange( 0.8, 2.3 ) );
var_0 setscriptablepartstate( "base", "default" );
wait 0.1;
var_2 = common_scripts\utility::random( var_1 );
var_0 setscriptablepartstate( "base", var_2 );
}
}
lightning_loop_02()
{
level endon( "game_ended" );
var_0 = getent( "ark_lightning_01", "targetname" );
var_1 = [ "default", "bolt_5", "bolt_6", "bolt_7" ];
for (;;)
{
wait 0.01;
wait( randomfloatrange( 0.3, 1.3 ) );
var_0 setscriptablepartstate( "base", "default" );
wait 0.1;
var_2 = common_scripts\utility::random( var_1 );
var_0 setscriptablepartstate( "base", var_2 );
}
}
listen_for_all_consoles_down()
{
level endon( "end_ark_encounter" );
while ( !common_scripts\utility::flag( "ark_console_cycle_over" ) )
{
level waittill( "all_consoles_down" );
if ( !common_scripts\utility::flag( "cortex_pulse" ) )
level thread ark_emp_on_all_consoles_down();
level waittill( "all_consoles_up" );
}
}
ark_emp_on_all_consoles_down()
{
level endon( "end_ark_encounter" );
var_0 = [ "descent_crs_feelthemfocusing", "descent_crs_hibernation", "descent_crs_surgeinenergy" ];
var_1 = common_scripts\utility::random( var_0 );
maps\mp\mp_alien_dlc3::playdescentstoryvo( var_1 );
var_2 = 50;
var_3 = 5;
var_4 = [];
var_4[0] = ( 4147, 2469, 1148 );
var_4[1] = ( 4488, 2145, 1148 );
var_4[2] = ( 4437, 1566, 1148 );
var_4[3] = ( 4164, 1292, 1148 );
var_5 = [];
var_5[0] = anglestoforward( ( 0, 270, 0 ) );
var_5[1] = anglestoforward( ( 0, 225, 0 ) );
var_5[2] = anglestoforward( ( 0, 135, 0 ) );
var_5[3] = anglestoforward( ( 0, 90, 0 ) );
common_scripts\utility::exploder( 2 );
wait 0.12;
common_scripts\utility::exploder( 3 );
common_scripts\utility::exploder( 6 );
wait 1;
var_6 = getscriptablearray( "ark_emp_ent", "targetname" );
foreach ( var_8 in var_6 )
{
var_8 setscriptablepartstate( 0, "idle" );
wait 0.1;
var_8 setscriptablepartstate( 0, "active" );
}
foreach ( var_11 in level.players )
{
if ( !isalive( var_11 ) )
continue;
var_11 dodamage( var_2, var_11.origin, undefined, undefined, "MOD_MELEE" );
var_11 shellshock( "alien_kraken_emp", var_3 );
var_11 playlocalsound( "plr_emp_hit" );
thread doempdisables( var_11 );
earthquake( 0.55, 1.0, var_11.origin, 100 );
playfxontagforclients( level._effect["player_emp_scrn_fx"], var_11, "tag_eye", var_11 );
if ( !isdefined( var_11.crafted_items ) )
continue;
if ( isdefined( var_11.crafted_items["alien_crafting_hypno_trap"] ) )
empattempttodestroydeployable( var_11.crafted_items["alien_crafting_hypno_trap"] );
if ( isdefined( var_11.crafted_items["alien_crafting_tesla_trap"] ) )
empattempttodestroydeployable( var_11.crafted_items["alien_crafting_tesla_trap"] );
}
empprocessdeployablesarray( level.turrets );
empprocessdeployablesarray( level.placedims );
empprocessdeployablesarray( level.balldrones );
}
doempdisables( var_0, var_1, var_2 )
{
var_0 endon( "disconnect" );
if ( isdefined( var_1 ) )
var_3 = var_1;
else
var_3 = 10;
var_0.turn_off_class_skill_activation = 1;
var_0.player_action_disabled = 1;
var_0 setclientomnvar( "ui_alien_quick_shop_disabled", 1 );
wait( var_3 );
if ( !isdefined( var_0 ) )
return;
var_0.turn_off_class_skill_activation = undefined;
var_0.player_action_disabled = undefined;
var_0 setclientomnvar( "ui_alien_quick_shop_disabled", 0 );
}
empprocessdeployablesarray( var_0 )
{
foreach ( var_2 in var_0 )
empattempttodestroydeployable( var_2 );
}
empattempttodestroydeployable( var_0 )
{
if ( isdefined( var_0 ) && !isdefined( var_0.carriedby ) )
var_0 notify( "death" );
}
get_num_online_consoles()
{
var_0 = 0;
foreach ( var_2 in level.attack_points )
{
if ( var_2.progresshealth > 0 )
var_0++;
}
return var_0;
}
cortex_pulse_logic()
{
level endon( "end_ark_encounter" );
while ( !isdefined( level.cortex_use_trigger ) )
wait 0.1;
while ( !common_scripts\utility::flag( "ark_console_cycle_over" ) )
{
wait_until_enough_alien_killed();
level.cortex_use_trigger sethintstring( &"MP_ALIEN_DESCENT_CORTEX_USE" );
maps\mp\alien\_outline_proto::enable_outline_for_players( level.cortex, level.players, 3, 0, "high" );
level thread show_cortex_waypoint();
var_0 = [ "descent_crs_enoughpower", "descent_crs_energylevelsmaxed" ];
var_1 = common_scripts\utility::random( var_0 );
level thread maps\mp\mp_alien_dlc3::playdescentstoryvo( var_1 );
level.cortex_use_trigger wait_until_player_use_cortex();
maps\mp\alien\_gamescore::update_team_encounter_performance( "cortex", "times_cortex_activated" );
level.cortex_use_trigger sethintstring( "" );
maps\mp\alien\_outline_proto::enable_outline_for_players( level.cortex, level.players, 1, 0, "high" );
level thread hide_cortex_waypoint();
if ( isdefined( level.cortex ) )
var_2 = level.cortex;
else if ( isdefined( level.cortex_carrier ) )
var_2 = level.cortex_carrier;
else
var_2 = level.archer;
common_scripts\utility::flag_set( "cortex_pulse" );
foreach ( var_4 in level.players )
var_4 remove_ark_vo_on_player();
playsoundatpos( level.cortex.origin, "scn_cortex_activate" );
level thread rumble_players( "heavygun_fire", 0.5 );
kill_aliens_with_cortex_pulse();
wait 1.0;
common_scripts\utility::flag_clear( "cortex_pulse" );
wait 0.5;
level notify( "dlc_vo_notify", "descent_vo", "complete_obelisks" );
}
}
rumble_players( var_0, var_1 )
{
wait( var_1 );
foreach ( var_3 in level.players )
var_3 playrumbleonentity( var_0 );
}
wait_until_enough_alien_killed()
{
level endon( "end_ark_encounter" );
var_0 = 0;
var_1 = 1;
if ( maps\mp\alien\_utility::isplayingsolo() )
var_2 = 10;
else
var_2 = 20;
while ( var_0 < var_2 )
{
level waittill( "alien_killed", var_3, var_4, var_5 );
if ( var_4 == "MOD_SUICIDE" )
continue;
if ( var_0 > 4 && var_1 )
{
var_1 = 0;
maps\mp\mp_alien_dlc3_vignettes::ark_cortex_help();
}
var_0++;
}
}
kill_aliens_with_cortex_pulse()
{
playfx( level._effect["cortex_blast"], level.cortex.origin + ( 0, 0, 15 ) );
wait 1.5;
var_0 = maps\mp\alien\_spawnlogic::get_alive_agents();
if ( isdefined( level.seeder_active_turrets ) )
var_0 = common_scripts\utility::array_combine( var_0, level.seeder_active_turrets );
foreach ( var_2 in var_0 )
{
if ( !isdefined( var_2 ) )
continue;
var_2 dodamage( var_2.health + 1000, var_2.origin );
playfx( level._effect["alien_gib"], var_2.origin + ( 0, 0, 32 ) );
common_scripts\utility::waitframe();
}
}
show_cortex_waypoint()
{
if ( isdefined( level.cortex_icon ) )
level.cortex_icon.alpha = 0.75;
}
hide_cortex_waypoint()
{
if ( isdefined( level.cortex_icon ) )
level.cortex_icon.alpha = 0;
}
spawn_archer()
{
var_0 = ( 3832, 1871, 917 );
var_1 = spawn( "script_model", var_0 );
var_1 setmodel( "body_archer_wounded_a" );
var_1.angles = ( 0, 180, 0 );
level.archer = var_1;
var_2 = spawn_model( "head_archer_a", var_1, "J_spine4", ( 0, 0, 0 ) );
level thread archer_vignette_anim_sequence( var_1, var_2 );
level thread archer_vignette_end_anim_sequence( var_1, var_2 );
}
archer_vignette_anim_sequence( var_0, var_1 )
{
level endon( "end_ark_encounter" );
var_0 scriptmodelplayanimdeltamotion( "alien_descent_vignette_idle_a" );
var_1 scriptmodelplayanim( "alien_descent_vignette_idle_a" );
wait 5;
common_scripts\utility::flag_wait( "start_archer_vignette" );
maps\mp\mp_alien_dlc3_vignettes::descent_vo_inside_ark( var_0, var_1 );
var_0 scriptmodelplayanimdeltamotion( "alien_descent_vignette_idle_b" );
var_1 scriptmodelplayanim( "alien_descent_vignette_idle_b" );
wait 5;
}
archer_vignette_end_anim_sequence( var_0, var_1 )
{
level waittill( "cortex_pickedup" );
common_scripts\utility::flag_set( "ark_cortex_pickedup" );
var_0 scriptmodelplayanimdeltamotion( "alien_descent_vignette_dialogue_3" );
var_1 scriptmodelplayanim( "alien_descent_vignette_dialogue_3" );
level waittill( "archer_dialogue_3_done" );
var_0 scriptmodelplayanimdeltamotion( "alien_descent_vignette_final_loop" );
var_1 scriptmodelplayanim( "alien_descent_vignette_final_loop" );
}
spawn_model( var_0, var_1, var_2, var_3 )
{
var_4 = spawn( "script_model", ( 0, 0, 0 ) );
var_4 setmodel( var_0 );
var_4.origin = var_1 gettagorigin( var_2 );
var_4.angles = var_1 gettagangles( var_2 ) + var_3;
var_4 linkto( var_1, var_2 );
return var_4;
}
spawn_archer_force_field()
{
wait 2;
while ( !isdefined( level.cortex ) )
wait 0.1;
var_0 = spawnfx( level._effect["archer_shield"], level.cortex.origin + ( 0, 20, 7 ) );
var_1 = spawn( "script_origin", level.cortex.origin );
wait 0.1;
triggerfx( var_0 );
var_1 playloopsound( "archer_shield_sfx_lp" );
common_scripts\utility::flag_wait( "ark_console_event_done" );
var_0 delete();
var_1 stoploopsound( "archer_shield_sfx_lp" );
var_1 delete();
}
reset_consoles()
{
foreach ( var_1 in level.attack_points )
var_1.progresshealth = 200;
}
zap_console( var_0 )
{
playfx( level._effect["cortex_blast"], level.cortex.origin );
}
zap_point_to_point( var_0, var_1 )
{
if ( !isdefined( self.zap_struct ) )
{
self.zap_struct = spawnstruct();
self.zap_struct.attack_bolt = spawn( "script_model", var_0 );
self.zap_struct.attack_bolt setmodel( "tag_origin" );
wait 0.1;
}
self.zap_struct.attack_bolt.origin = var_0;
playfxontag( level._effect["ark_beam_attack"], self.zap_struct.attack_bolt, "TAG_ORIGIN" );
self.zap_struct.attack_bolt moveto( var_1, 0.1 );
wait 0.1;
stopfxontag( level._effect["ark_beam_attack"], self.zap_struct.attack_bolt, "TAG_ORIGIN" );
}
spawn_wave( var_0 )
{
level endon( "end_ark_encounter" );
level endon( "stop_waves" );
maps\mp\alien\_spawn_director::start_cycle( var_0 );
}
use_cortex_to_attack_enemies()
{
level endon( "end_ark_encounter" );
while ( !common_scripts\utility::flag( "ark_console_cycle_over" ) )
{
while ( !isdefined( level.cortex_carrier ) )
wait 0.1;
var_0 = level.cortex_carrier;
level.cortex_carrier notifyonplayercommand( "melee_button_pressed", "+melee" );
level.cortex_carrier notifyonplayercommand( "melee_button_pressed", "+melee_breath" );
level.cortex_carrier notifyonplayercommand( "melee_button_pressed", "+melee_zoom" );
level.cortex_carrier waittill( "melee_button_pressed" );
if ( !( isdefined( level.cortex_carrier ) && level.cortex_carrier == var_0 ) )
continue;
var_1 = maps\mp\alien\_spawnlogic::get_alive_agents();
if ( isdefined( level.seeder_active_turrets ) )
var_1 = common_scripts\utility::array_combine( var_1, level.seeder_active_turrets );
foreach ( var_3 in var_1 )
{
if ( !isdefined( var_3 ) )
continue;
if ( distancesquared( level.cortex_carrier.origin, var_3.origin ) > 40000 )
continue;
if ( isdefined( level.cortex_carrier ) )
{
level.cortex_carrier zap_point_to_point( level.cortex_carrier.origin, var_3.origin );
if ( !isdefined( var_3 ) )
continue;
var_3.cortex_kill = 1;
var_3 dodamage( var_3.health + 1000, var_3.origin, level.cortex_carrier, level.cortex_carrier );
playfx( level._effect["alien_gib"], var_3.origin + ( 0, 0, 32 ) );
}
wait 0.1;
}
wait 1.0;
}
}
disable_cortex_for_ark_encounter()
{
level.archer thread spawn_archer_force_field();
maps\mp\alien\_cortex::turn_off_cortex();
common_scripts\utility::flag_wait( "ark_console_cycle_over" );
wait 0.1;
maps\mp\alien\_cortex::turn_on_cortex();
}
console_threatbias_setup()
{
createthreatbiasgroup( "ignore_consoles" );
createthreatbiasgroup( "consoles" );
setignoremegroup( "consoles", "ignore_consoles" );
}
make_aliens_ignore_consoles()
{
level endon( "end_ark_encounter" );
while ( !common_scripts\utility::flag( "ark_console_cycle_over" ) )
{
level waittill( "spawned_agent", var_0 );
if ( isdefined( var_0.alien_type ) && var_0.alien_type == "elite" )
var_0 setthreatbiasgroup( "ignore_consoles" );
}
}
wait_until_player_use_cortex()
{
level endon( "end_ark_encounter" );
var_0 = 0;
while ( !var_0 )
{
self waittill( "trigger", var_1 );
if ( !isplayer( var_1 ) )
continue;
if ( common_scripts\utility::flag( "cortex_carryable" ) )
break;
if ( useholdthink_cortex( var_1 ) )
var_0 = 1;
}
}
remove_cortex_spot_when_possible()
{
self endon( "disconnect" );
while ( isdefined( self.cortex_spot ) && !self.cortex_spot.done_with_use_bar )
wait 0.1;
if ( isdefined( self.cortex_spot ) )
self.cortex_spot = undefined;
}
useholdthink_cortex( var_0 )
{
var_0 endon( "disconnect" );
var_0.cortex_spot = spawnstruct();
var_0.cortex_spot.curprogress = 0;
var_0.cortex_spot.inuse = 1;
var_0.cortex_spot.userate = 1;
var_0.cortex_spot.usetime = 1000;
var_0.cortex_spot.done_with_use_bar = 0;
var_0.hasprogressbar = 1;
var_1 = useholdthinkloopcortex( var_0, self, 40000, 6 );
var_0.hasprogressbar = 0;
if ( isdefined( var_0.cortex_spot ) )
{
var_0.cortex_spot.inuse = 0;
var_0.cortex_spot.curprogress = 0;
}
var_0.cortex_spot = undefined;
return var_1;
}
wait_until_player_repairs_console()
{
var_0 = 0;
while ( !var_0 )
{
self waittill( "trigger", var_1 );
if ( !isplayer( var_1 ) )
continue;
if ( useholdthink( var_1 ) )
{
var_0 = 1;
var_1 thread remove_repair_spot_when_possible();
}
}
}
remove_repair_spot_when_possible()
{
self endon( "disconnect" );
while ( isdefined( self.repair_spot ) && !self.repair_spot.done_with_use_bar )
wait 0.1;
if ( isdefined( self.repair_spot ) )
self.repair_spot = undefined;
}
useholdthink( var_0 )
{
var_0 endon( "disconnect" );
var_0.repair_spot = spawnstruct();
var_0.repair_spot.curprogress = 0;
var_0.repair_spot.inuse = 1;
var_0.repair_spot.userate = 1;
if ( maps\mp\alien\_utility::isplayingsolo() )
var_0.repair_spot.usetime = 2000;
else
var_0.repair_spot.usetime = 5000;
if ( var_0 maps\mp\alien\_perk_utility::has_perk( "perk_rigger", [ 1, 2, 3, 4 ] ) )
var_0.repair_spot.usetime = var_0.repair_spot.usetime * 0.5;
var_0.repair_spot.done_with_use_bar = 0;
if ( isplayer( var_0 ) )
var_0 thread personalusebar( self );
var_0.hasprogressbar = 1;
var_1 = useholdthinkloop( var_0, self, 40000 );
var_0.hasprogressbar = 0;
if ( isdefined( var_0.repair_spot ) )
{
var_0.repair_spot.inuse = 0;
var_0.repair_spot.curprogress = 0;
}
return var_1;
}
personalusebar( var_0, var_1 )
{
self endon( "disconnect" );
self endon( "game_ended" );
if ( isdefined( var_1 ) )
self setclientomnvar( "ui_securing", var_1 );
else
self setclientomnvar( "ui_securing", 5 );
var_2 = -1;
while ( self.sessionstate == "playing" && isdefined( var_0 ) && isdefined( self.repair_spot ) && self.repair_spot.inuse && !level.gameended )
{
var_2 = self.repair_spot.userate;
self setclientomnvar( "ui_securing_progress", self.repair_spot.curprogress / self.repair_spot.usetime );
wait 0.05;
}
self setclientomnvar( "ui_securing", 0 );
self setclientomnvar( "ui_securing_progress", 0 );
if ( isdefined( self.repair_spot ) )
self.repair_spot.done_with_use_bar = 1;
}
personalusebarcortex( var_0, var_1 )
{
self endon( "disconnect" );
self endon( "game_ended" );
if ( isdefined( var_1 ) )
self setclientomnvar( "ui_securing", var_1 );
else
self setclientomnvar( "ui_securing", 5 );
var_2 = -1;
while ( self.sessionstate == "playing" && isdefined( var_0 ) && isdefined( self.cortex_spot ) && self.cortex_spot.inuse && !level.gameended )
{
var_2 = self.cortex_spot.userate;
self setclientomnvar( "ui_securing_progress", self.cortex_spot.curprogress / self.cortex_spot.usetime );
wait 0.05;
}
self setclientomnvar( "ui_securing", 0 );
self setclientomnvar( "ui_securing_progress", 0 );
if ( isdefined( self.cortex_spot ) )
self.cortex_spot.done_with_use_bar = 1;
}
useholdthinkloop( var_0, var_1, var_2 )
{
while ( !level.gameended && isdefined( self ) && isdefined( var_0 ) && isdefined( var_0.repair_spot ) && var_0.sessionstate == "playing" && var_0 usebuttonpressed() && var_0.repair_spot.curprogress < var_0.repair_spot.usetime )
{
if ( isdefined( var_1 ) && isdefined( var_2 ) )
{
if ( distancesquared( var_0.origin, var_1.origin ) > var_2 )
return 0;
}
var_0.repair_spot.curprogress = var_0.repair_spot.curprogress + 50 * var_0.repair_spot.userate;
var_0.repair_spot.userate = 1;
if ( var_0.repair_spot.curprogress >= var_0.repair_spot.usetime )
return var_0.sessionstate == "playing";
wait 0.05;
}
return 0;
}
useholdthinkloopcortex( var_0, var_1, var_2, var_3 )
{
var_0 endon( "disconnect" );
level endon( "game_ended" );
var_0 setclientomnvar( "ui_securing", var_3 );
var_4 = -1;
var_5 = 0;
while ( !level.gameended && isdefined( self ) && isdefined( var_0 ) && isdefined( var_0.cortex_spot ) && var_0.sessionstate == "playing" && var_0 usebuttonpressed() && var_0.cortex_spot.curprogress < var_0.cortex_spot.usetime )
{
if ( isdefined( var_1 ) && isdefined( var_2 ) )
{
if ( distancesquared( var_0.origin, var_1.origin ) > var_2 )
return 0;
}
var_4 = var_0.cortex_spot.userate;
var_0 setclientomnvar( "ui_securing_progress", var_0.cortex_spot.curprogress / var_0.cortex_spot.usetime );
var_0.cortex_spot.curprogress = var_0.cortex_spot.curprogress + 50 * var_0.cortex_spot.userate;
var_0.cortex_spot.userate = 1;
if ( var_0.cortex_spot.curprogress >= var_0.cortex_spot.usetime )
{
var_5 = 1;
break;
}
wait 0.05;
}
var_0 setclientomnvar( "ui_securing", 0 );
var_0 setclientomnvar( "ui_securing_progress", 0 );
if ( isdefined( var_0.cortex_spot ) )
var_0.cortex_spot.done_with_use_bar = 1;
if ( var_5 && var_0.sessionstate == "playing" )
return 1;
else
return 0;
}
remove_ark_vo_on_player()
{
foreach ( var_2, var_1 in level.alien_vo_priority_level )
maps\mp\alien\_music_and_dialog::remove_vo_data( "obelisk", var_1 );
}
ark_defense_lightning( var_0 )
{
level endon( "end_ark_encounter" );
var_1 = 5;
var_2 = 200;
var_3 = var_2 * var_2;
var_4 = ( 4171, 2469, 1179 );
var_5 = [ 0 ];
var_6 = [];
var_7 = [];
var_7[0] = ( 4171, 2469, 1179 );
var_7[1] = ( 4490, 2149, 1179 );
var_7[2] = ( 4478, 1600, 1179 );
var_7[3] = ( 4181, 1278, 1179 );
foreach ( var_9 in level.players )
{
if ( isdefined( var_9 ) && isalive( var_9 ) && !var_9 maps\mp\alien\_utility::is_in_laststand() )
var_6 = common_scripts\utility::add_to_array( var_6, var_9 );
}
var_9 = common_scripts\utility::random( var_6 );
var_11 = var_9.origin;
if ( var_11[2] < 890 )
var_11 = ( var_11[0], var_11[1], 890 );
if ( var_11[1] > 1900 )
var_5 = [ 0, 1 ];
else if ( var_11[1] < 1830 )
var_5 = [ 2, 3 ];
else
var_5 = [ 0, 3 ];
var_4 = var_7[common_scripts\utility::random( var_5 )];
var_11 = ark_zap_attack( var_4, var_9, var_11, undefined, 1 );
wait 0.5;
var_11 = ark_zap_attack( var_4, var_9, var_11 );
wait 0.5;
var_11 = ark_zap_attack( var_4, var_9, var_11 );
wait 1.0;
var_11 = ark_zap_attack( var_4, undefined, var_11, 1 );
var_12 = 0;
var_13 = 5;
var_14 = 0.25;
while ( var_12 < var_13 )
{
foreach ( var_9 in level.players )
{
if ( distancesquared( var_11, var_9.origin ) < var_3 )
var_9 dodamage( var_1, var_9.origin, undefined, undefined, "MOD_MELEE" );
}
var_12 = var_12 + var_14;
wait( var_14 );
}
}
ark_zap_attack( var_0, var_1, var_2, var_3, var_4 )
{
if ( isdefined( var_1 ) )
{
var_2 = var_1.origin;
if ( var_2[2] < 890 )
var_2 = ( var_2[0], var_2[1], 890 );
}
var_5 = ( randomintrange( -100, 100 ), randomintrange( -100, 100 ), 0 );
var_2 = var_2 + var_5;
zap_point_to_point( var_0, var_2 );
playfx( level._effect["ark_beam_glow"], var_2 );
playsoundatpos( var_2, "turret_shock" );
wait 0.1;
if ( !isdefined( var_3 ) )
var_6 = playfx( level._effect["ark_attack_ball_buildup"], var_2 );
else
var_6 = playfx( level._effect["ark_attack_ball"], var_2 );
if ( isdefined( var_4 ) )
playsoundatpos( var_2, "scn_ark_electric_ball" );
return var_2;
}
activate_ark_defenses()
{
while ( !common_scripts\utility::flag( "ark_console_event_done" ) )
{
ark_defense_lightning();
wait( level.ark_defense_wait );
}
}
trigger_ark_defenses()
{
while ( level.elapsed_time < 60.0 )
wait 0.1;
wait 10;
level.ark_defense_wait = 40;
level thread activate_ark_defenses();
while ( level.elapsed_time < 120.0 )
wait 0.1;
level.ark_defense_wait = 20;
while ( level.elapsed_time < 180.0 )
wait 0.1;
level.ark_defense_wait = 10;
}
debug_open_ark_doors()
{
level thread open_ark_door( "ark_door_01", 0.1 );
level thread open_ark_door( "ark_door_02", 0.1 );
level thread open_ark_door( "ark_door_03", 0.1 );
level thread open_ark_door( "ark_door_04", 0.1 );
}
open_ark_doors()
{
common_scripts\utility::flag_wait( "area_3_done" );
open_ark_door( "ark_door_01", 5 );
wait 5;
open_ark_door( "ark_door_02", 5 );
wait 5;
open_ark_door( "ark_door_03", 5 );
wait 5;
open_ark_door( "ark_door_04", 5 );
wait 5;
}
open_ark_doors_end()
{
open_ark_door( "ark_door_04", 5 );
wait 5;
open_ark_door( "ark_door_03", 5 );
wait 5;
open_ark_door( "ark_door_02", 5 );
wait 5;
open_ark_door( "ark_door_01", 5 );
common_scripts\utility::flag_wait( "players_left_ark" );
close_ark_door( "ark_door_04", 2 );
}
open_ark_door( var_0, var_1 )
{
var_2 = getent( var_0 + "a", "targetname" );
if ( isdefined( var_2 ) )
{
var_3 = anglestoup( var_2.angles );
var_4 = ( var_3[0] * -1, var_3[1] * -1, var_3[2] * -1 );
var_5 = var_2.origin + 300 * var_4;
var_2 moveto( var_5, var_1 );
}
var_6 = getent( var_0 + "b", "targetname" );
if ( isdefined( var_6 ) )
{
var_7 = anglestoright( var_6.angles );
var_8 = var_7;
var_5 = var_6.origin + 300 * var_8;
var_6 moveto( var_5, var_1 );
}
var_9 = getent( var_0 + "c", "targetname" );
if ( isdefined( var_9 ) )
{
var_7 = anglestoright( var_9.angles );
var_5 = var_9.origin + 300 * var_7;
var_9 moveto( var_5, var_1 );
}
switch ( var_0 )
{
case "ark_door_01":
playsoundatpos( ( 621, 1855, 948 ), "scn_ark_door_open" );
break;
case "ark_door_02":
playsoundatpos( ( 1447, 1872, 948 ), "scn_ark_door_open" );
break;
case "ark_door_03":
playsoundatpos( ( 2015, 1868, 948 ), "scn_ark_door_open" );
break;
case "ark_door_04":
playsoundatpos( ( 2807, 1860, 948 ), "scn_ark_door_open" );
break;
}
wait 1.0;
var_10 = getent( var_0 + "_clip", "targetname" );
if ( isdefined( var_10 ) )
{
var_10 notsolid();
var_10 connectpaths();
}
}
close_ark_doors()
{
close_ark_door( "ark_door_04", 5 );
wait 0.1;
close_ark_door( "ark_door_03", 5 );
wait 0.1;
close_ark_door( "ark_door_02", 5 );
wait 0.1;
close_ark_door( "ark_door_01", 5 );
wait 5;
}
close_ark_door( var_0, var_1 )
{
var_1 = 5.0;
var_2 = getent( var_0 + "a", "targetname" );
if ( isdefined( var_2 ) )
{
var_3 = anglestoup( var_2.angles );
var_4 = var_2.origin + 300 * var_3;
var_2 moveto( var_4, var_1 );
}
var_5 = getent( var_0 + "b", "targetname" );
if ( isdefined( var_5 ) )
{
var_6 = anglestoright( var_5.angles );
var_7 = ( var_6[0] * -1, var_6[1] * -1, var_6[2] * -1 );
var_4 = var_5.origin + 300 * var_7;
var_5 moveto( var_4, var_1 );
}
var_8 = getent( var_0 + "c", "targetname" );
if ( isdefined( var_8 ) )
{
var_6 = anglestoright( var_8.angles );
var_6 = ( var_6[0] * -1, var_6[1] * -1, var_6[2] * -1 );
var_4 = var_8.origin + 300 * var_6;
var_8 moveto( var_4, var_1 );
}
switch ( var_0 )
{
case "ark_door_01":
playsoundatpos( ( 621, 1855, 948 ), "scn_ark_door_close" );
break;
case "ark_door_02":
playsoundatpos( ( 1447, 1872, 948 ), "scn_ark_door_close" );
break;
case "ark_door_03":
playsoundatpos( ( 2015, 1868, 948 ), "scn_ark_door_close" );
break;
case "ark_door_04":
playsoundatpos( ( 2807, 1860, 948 ), "scn_ark_door_close" );
break;
}
var_9 = getent( var_0 + "_clip", "targetname" );
if ( isdefined( var_9 ) )
{
var_9 solid();
var_9 disconnectpaths();
}
}
teleport_players_not_in_ark()
{
wait 1.0;
var_0 = getent( "ark_interior_volume", "targetname" );
var_1 = 0;
if ( isdefined( var_0 ) )
{
foreach ( var_3 in level.players )
{
if ( !var_3 istouching( var_0 ) )
{
level thread teleport_player_to_ark( var_3 );
var_1++;
}
}
}
wait 1.0;
common_scripts\utility::flag_set( "everyone_in_ark" );
}
teleport_player_to_ark( var_0 )
{
var_1 = var_0;
if ( isdefined( var_0.reviveent ) )
var_1 = var_0.reviveent;
if ( !isdefined( var_0.forceteleportorigin ) )
var_0 thread find_spot_to_teleport( var_1 );
}
teleport_player_to_spot( var_0, var_1 )
{
self endon( "disconnect" );
self cancelmantle();
self dontinterpolate();
self setorigin( var_0 );
self.forceteleportorigin = var_0;
if ( isdefined( var_1 ) )
{
var_1.origin = var_0;
self.reviveiconent.origin = var_0;
}
self notify( "teleport_finished" );
if ( isdefined( self.teleport_overlay ) )
{
self.teleport_overlay fadeovertime( 0.75 );
self.teleport_overlay.alpha = 0;
wait 1;
if ( isdefined( self.teleport_overlay ) )
self.teleport_overlay destroy();
}
maps\mp\_utility::clearlowermessage( "cargo_teleport" );
if ( isdefined( self.reviveent ) )
thread wait_for_spawn_and_remove_forceteleport();
else
self.forceteleportorigin = undefined;
}
wait_for_spawn_and_remove_forceteleport()
{
for (;;)
{
level waittill( "player_spawned", var_0 );
if ( self == var_0 )
break;
}
self.forceteleportorigin = undefined;
}
teleport_black_screen()
{
self endon( "disconnect" );
maps\mp\_utility::setlowermessage( "cargo_teleport", &"MP_ALIEN_BEACON_CARGO_TELEPORT", 3 );
self.teleport_overlay = newclienthudelem( self );
self.teleport_overlay.x = 0;
self.teleport_overlay.y = 0;
self.teleport_overlay setshader( "black", 640, 480 );
self.teleport_overlay.alignx = "left";
self.teleport_overlay.aligny = "top";
self.teleport_overlay.sort = 1;
self.teleport_overlay.horzalign = "fullscreen";
self.teleport_overlay.vertalign = "fullscreen";
self.teleport_overlay.alpha = 0;
self.teleport_overlay.foreground = 1;
self.teleport_overlay fadeovertime( 0.75 );
self.teleport_overlay.alpha = 1;
}
find_spot_to_teleport( var_0 )
{
var_1 = [];
var_1[0] = ( 3390, 1924, 948 );
var_1[1] = ( 3390, 1799, 948 );
var_1[2] = ( 3246, 1923, 948 );
var_1[3] = ( 3226, 1808, 948 );
var_2 = ( 0, 0, 0 );
var_3 = 0;
while ( !var_3 )
{
foreach ( var_5 in var_1 )
{
if ( canspawn( var_5 ) && !positionwouldtelefrag( var_5 ) )
{
if ( !isdefined( self.teleport_overlay ) )
{
thread teleport_black_screen();
wait 1;
}
if ( canspawn( var_5 ) && !positionwouldtelefrag( var_5 ) )
{
if ( isdefined( var_0 ) && var_0 != self )
teleport_player_to_spot( var_5, var_0 );
else
teleport_player_to_spot( var_5 );
var_3 = 1;
break;
}
else
continue;
}
}
wait 0.1;
}
self notify( "player_teleported" );
}
open_ark_obelisks()
{
maps\mp\mp_alien_dlc3::open_obelisk( "ark_interior_obelisk_l", "on_interior" );
maps\mp\mp_alien_dlc3::open_obelisk( "ark_interior_obelisk_r", "on_interior" );
}