1802 lines
51 KiB
Plaintext
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" );
|
|
}
|