736 lines
22 KiB
Plaintext
736 lines
22 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
hide_escape_geo( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
var_1 connectpaths();
|
|
var_1 notsolid();
|
|
var_1 hide();
|
|
var_2 = undefined;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "escape_blocker_1_forcefield":
|
|
var_2 = "escape_blocker_1";
|
|
break;
|
|
case "escape_blocker_2_forcefield":
|
|
var_2 = "escape_blocker_2";
|
|
break;
|
|
case "escape_blocker_3_forcefield":
|
|
var_2 = "escape_blocker_3";
|
|
break;
|
|
}
|
|
|
|
var_3 = getent( var_2, "targetname" );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_3 setscriptablepartstate( 0, "ff_down" );
|
|
}
|
|
|
|
show_escape_geo( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
var_1 disconnectpaths();
|
|
var_1 solid();
|
|
var_1 show();
|
|
var_2 = undefined;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "escape_blocker_1_forcefield":
|
|
var_2 = "escape_blocker_3";
|
|
break;
|
|
case "escape_blocker_2_forcefield":
|
|
var_2 = "escape_blocker_2";
|
|
break;
|
|
case "escape_blocker_3_forcefield":
|
|
var_2 = "escape_blocker_1";
|
|
break;
|
|
}
|
|
|
|
var_3 = getent( var_2, "targetname" );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_3 setscriptablepartstate( 0, "open" );
|
|
}
|
|
|
|
escape_timer()
|
|
{
|
|
level endon( "game_ended" );
|
|
common_scripts\utility::exploder( 102 );
|
|
set_escape_earthquake_values( 0.12, 0.18, 3, 5 );
|
|
level thread escape_earthquakes();
|
|
|
|
foreach ( var_1 in level.players )
|
|
var_1 thread escape_timer_fx();
|
|
|
|
wait 300;
|
|
level.escape_timer_expired = 1;
|
|
|
|
if ( !maps\mp\alien\_utility::is_true( level.final_blocker_finished ) )
|
|
level thread maps\mp\gametypes\aliens::alienendgame( "axis", 3 );
|
|
}
|
|
|
|
aud_loop_starts()
|
|
{
|
|
wait 10.5;
|
|
level.aud_shake = spawn( "script_origin", ( 3877, 1877, 1108 ) );
|
|
level.aud_shake playloopsound( "scn_descent_end_shake_lp" );
|
|
|
|
for (;;)
|
|
{
|
|
wait( randomfloatrange( 4.0, 6.0 ) );
|
|
level.player playsound( "scn_descent_end_debris" );
|
|
}
|
|
}
|
|
|
|
run_out_music()
|
|
{
|
|
wait 12;
|
|
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
if ( common_scripts\utility::flag( "alien_music_playing" ) )
|
|
{
|
|
var_1 stoplocalsound( "mp_suspense_01" );
|
|
var_1 stoplocalsound( "mp_suspense_02" );
|
|
var_1 stoplocalsound( "mp_suspense_03" );
|
|
var_1 stoplocalsound( "mp_suspense_04" );
|
|
var_1 stoplocalsound( "mp_suspense_05" );
|
|
var_1 stoplocalsound( "mp_suspense_06" );
|
|
var_1 stoplocalsound( "mus_alien_newwave" );
|
|
common_scripts\utility::flag_clear( "alien_music_playing" );
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "alien_music_playing" );
|
|
|
|
if ( maps\mp\_utility::isreallyalive( var_1 ) )
|
|
var_1 playlocalsound( "mus_alien_dlc3_ark_runout" );
|
|
}
|
|
}
|
|
|
|
aud_end_logic()
|
|
{
|
|
level.aud_alarm = spawn( "script_origin", ( 3631, 1779, 2106 ) );
|
|
level.aud_alarm playloopsound( "scn_descent_end_steam" );
|
|
level.aud_gen = spawn( "script_origin", ( 3631, 1779, 2106 ) );
|
|
level.aud_gen playsound( "scn_descent_end_gener" );
|
|
level.aud_loop = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
level.aud_loop playloopsound( "scn_descent_end_int_lp" );
|
|
thread aud_loop_starts();
|
|
level thread quake_and_rumble( 10 );
|
|
}
|
|
|
|
quake_and_rumble( var_0 )
|
|
{
|
|
wait( var_0 );
|
|
earthquake( 0.4, 3, level.archer.origin, 2000 );
|
|
level thread maps\mp\alien\mp_alien_dlc3_ark::rumble_players( "heavy_3s", 0 );
|
|
}
|
|
|
|
escape_global_logic()
|
|
{
|
|
level endon( "game_ended" );
|
|
maps\mp\alien\_utility::update_player_initial_spawn_info( ( 2692, 1863, 899 ), ( 0, 0, 0 ) );
|
|
common_scripts\utility::flag_wait( "ark_console_event_done" );
|
|
thread run_out_music();
|
|
thread aud_end_logic();
|
|
common_scripts\utility::flag_set( "cortex_carryable" );
|
|
level.cortex_use_trigger sethintstring( &"MP_ALIEN_DESCENT_PICKUP_CORTEX" );
|
|
var_0 = gettime();
|
|
setomnvar( "ui_alien_nuke_timer", gettime() + 300000 );
|
|
level thread escape_timer();
|
|
level thread nag_players_to_place_cortex();
|
|
level thread nag_players_who_leave_the_drill_behind();
|
|
level.should_use_custom_death_func = 1;
|
|
level notify( "dlc_vo_notify", "descent_vo", "escape_level" );
|
|
maps\mp\alien\_utility::update_player_initial_spawn_info( ( 2692, 1863, 899 ), ( 0, 180, 0 ) );
|
|
escape_blocker_gate( "escape_blocker_1_forcefield", 1, 18 );
|
|
maps\mp\alien\_utility::update_player_initial_spawn_info( ( -2167, 616, 1203 ), ( 0, -158, 0 ) );
|
|
escape_blocker_gate( "escape_blocker_2_forcefield", 2, 18 );
|
|
maps\mp\alien\_utility::update_player_initial_spawn_info( ( -1385, -2506, 918 ), ( 0, -57, 0 ) );
|
|
escape_blocker_gate( "escape_blocker_3_forcefield", 3, 18 );
|
|
level.should_use_custom_death_func = 0;
|
|
level.final_blocker_finished = 1;
|
|
level.current_cortex_spot = undefined;
|
|
common_scripts\utility::flag_set( "cortex_carryable" );
|
|
level.cortex_use_trigger makeusable();
|
|
level.cortex_use_trigger sethintstring( &"MP_ALIEN_DESCENT_PICKUP_CORTEX" );
|
|
maps\mp\alien\_outline_proto::enable_outline_for_players( level.cortex, level.players, 3, 0, "high" );
|
|
var_1 = playfx( level._effect["escape_area"], ( 2368, -7056, 1151.22 ) );
|
|
var_2 = wait_for_players_to_escape();
|
|
|
|
if ( var_2.size == 0 )
|
|
{
|
|
iprintlnbold( &"ALIEN_COLLECTIBLES_YOU_DIDNT_MAKE_IT" );
|
|
var_3 = maps\mp\alien\_hud::get_end_game_string_index( "fail_escape" );
|
|
level thread maps\mp\gametypes\aliens::alienendgame( "axis", var_3 );
|
|
return;
|
|
}
|
|
|
|
maps\mp\alien\_unlock::update_escape_item_unlock( var_2 );
|
|
|
|
foreach ( var_5 in level.players )
|
|
{
|
|
if ( common_scripts\utility::array_contains( var_2, var_5 ) )
|
|
{
|
|
var_5.dlc3_escaped = 1;
|
|
var_5 maps\mp\alien\_persistence::set_player_escaped();
|
|
continue;
|
|
}
|
|
|
|
var_5 iprintlnbold( &"ALIEN_COLLECTIBLES_YOU_DIDNT_MAKE_IT" );
|
|
var_5.dlc3_escaped = 0;
|
|
}
|
|
|
|
foreach ( var_5 in level.players )
|
|
{
|
|
if ( maps\mp\alien\_utility::is_true( var_5.dlc3_escaped ) )
|
|
var_5 maps\mp\alien\_persistence::award_completion_tokens();
|
|
}
|
|
|
|
thread descent_win_music();
|
|
maps\mp\alien\_achievement_dlc3::update_progression_achievements( "awakening_escape" );
|
|
var_9 = "all_escape";
|
|
|
|
if ( var_2.size != level.players.size )
|
|
var_9 = "some_escape";
|
|
|
|
var_10 = gettime() - var_0;
|
|
update_lb_aliensession_dlc3_escape( var_10 );
|
|
var_11 = maps\mp\alien\_hud::get_end_game_string_index( var_9 );
|
|
level thread maps\mp\gametypes\aliens::alienendgame( "allies", var_11 );
|
|
}
|
|
|
|
wait_for_players_to_escape()
|
|
{
|
|
var_0 = 22500;
|
|
var_1 = [];
|
|
var_2 = [];
|
|
|
|
while ( !maps\mp\alien\_utility::is_true( level.escape_timer_expired ) )
|
|
{
|
|
var_1 = [];
|
|
var_2 = [];
|
|
var_3 = 1;
|
|
|
|
foreach ( var_5 in level.players )
|
|
{
|
|
if ( isdefined( var_5.laststand ) && var_5.laststand )
|
|
{
|
|
var_1 = common_scripts\utility::add_to_array( var_1, var_5 );
|
|
continue;
|
|
}
|
|
|
|
if ( distancesquared( var_5.origin, ( 2368, -7056, 1151.22 ) ) <= var_0 && isalive( var_5 ) )
|
|
{
|
|
var_2 = common_scripts\utility::add_to_array( var_2, var_5 );
|
|
continue;
|
|
}
|
|
|
|
var_3 = 0;
|
|
}
|
|
|
|
if ( var_3 && player_has_cortex_or_cortex_in_position() )
|
|
break;
|
|
else if ( var_3 && !player_has_cortex_or_cortex_in_position() )
|
|
level thread display_cortex_warning();
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
display_cortex_warning()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
if ( maps\mp\alien\_utility::is_true( level.cortex_warning_issued ) )
|
|
return;
|
|
|
|
level.cortex_warning_issued = 1;
|
|
iprintlnbold( &"MP_ALIEN_DESCENT_CORTEX_LEFT_BEHIND" );
|
|
var_0 = [ "descent_gdf_retrievethecortex", "descent_gdf_cortexbacktosurface" ];
|
|
maps\mp\_utility::playsoundinspace( common_scripts\utility::random( var_0 ), ( 0, 0, 0 ) );
|
|
wait 5;
|
|
level.cortex_warning_issued = 0;
|
|
}
|
|
|
|
player_has_cortex_or_cortex_in_position()
|
|
{
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
if ( var_1 hasweapon( "aliencortex_mp" ) )
|
|
return 1;
|
|
}
|
|
|
|
if ( isdefined( level.cortex ) && distancesquared( level.cortex.origin, ( 2368, -7056, 1151.22 ) ) <= 10000 )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
update_lb_aliensession_dlc3_escape( var_0 )
|
|
{
|
|
var_1 = get_lb_final_escape_rank( var_0 );
|
|
|
|
foreach ( var_3 in level.players )
|
|
{
|
|
if ( maps\mp\alien\_utility::is_true( var_3.dlc3_escaped ) )
|
|
{
|
|
var_3 maps\mp\alien\_persistence::lb_player_update_stat( "escapedRank" + var_1, 1, 1 );
|
|
var_3 maps\mp\alien\_persistence::lb_player_update_stat( "hits", 1, 1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
get_lb_final_escape_rank( var_0 )
|
|
{
|
|
var_1 = 210000;
|
|
var_2 = 240000;
|
|
var_3 = 270000;
|
|
|
|
if ( var_0 <= var_1 )
|
|
return 0;
|
|
else if ( var_0 <= var_2 )
|
|
return 1;
|
|
else if ( var_0 <= var_3 )
|
|
return 2;
|
|
else
|
|
return 3;
|
|
}
|
|
|
|
descent_win_music()
|
|
{
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
if ( common_scripts\utility::flag( "alien_music_playing" ) )
|
|
{
|
|
var_1 stoplocalsound( "mp_suspense_01" );
|
|
var_1 stoplocalsound( "mp_suspense_02" );
|
|
var_1 stoplocalsound( "mp_suspense_03" );
|
|
var_1 stoplocalsound( "mp_suspense_04" );
|
|
var_1 stoplocalsound( "mp_suspense_05" );
|
|
var_1 stoplocalsound( "mp_suspense_06" );
|
|
var_1 stoplocalsound( "mus_alien_newwave" );
|
|
common_scripts\utility::flag_clear( "alien_music_playing" );
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "alien_music_playing" );
|
|
|
|
if ( maps\mp\_utility::isreallyalive( var_1 ) )
|
|
var_1 playlocalsound( "mus_alien_dlc3_win_screen" );
|
|
}
|
|
}
|
|
|
|
escape_blocker_gate( var_0, var_1, var_2 )
|
|
{
|
|
maps\mp\alien\_gamescore::reset_encounter_performance();
|
|
var_3 = gettime();
|
|
show_escape_geo( var_0 );
|
|
escape_blocker_logic( var_1, var_2, var_0 );
|
|
maps\mp\alien\_gamescore_dlc3::calculate_escape_blocker_score( gettime() - var_3 );
|
|
}
|
|
|
|
get_win_condition()
|
|
{
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
if ( maps\mp\alien\_utility::is_true( var_1.inlaststand ) )
|
|
return "some_escape";
|
|
}
|
|
|
|
return "all_escape";
|
|
}
|
|
|
|
escape_blocker_logic( var_0, var_1, var_2 )
|
|
{
|
|
wait 1;
|
|
iprintlnbold( &"MP_ALIEN_DESCENT_CORTEX_NEXT_AREA" );
|
|
common_scripts\utility::flag_set( "cortex_carryable" );
|
|
level.cortex_use_trigger makeusable();
|
|
level.cortex_use_trigger sethintstring( &"MP_ALIEN_DESCENT_PICKUP_CORTEX" );
|
|
maps\mp\alien\_outline_proto::enable_outline_for_players( level.cortex, level.players, 3, 0, "high" );
|
|
wait_for_player_to_place_cortex( "escape_blocker_" + var_0 + "_cortex" );
|
|
common_scripts\utility::flag_clear( "cortex_carryable" );
|
|
maps\mp\alien\_spawn_director::start_cycle( var_1 );
|
|
clear_cortex_lowermessage();
|
|
setomnvar( "ui_alien_boss_status", 2 );
|
|
setomnvar( "ui_alien_boss_icon", 5 );
|
|
setomnvar( "ui_alien_boss_progression", 100 );
|
|
level.cortex_use_trigger.origin = level.cortex.origin + ( 0, 0, 30 );
|
|
level.cortex_use_trigger sethintstring( "" );
|
|
maps\mp\alien\_outline_proto::enable_outline_for_players( level.cortex, level.players, 1, 0, "high" );
|
|
level thread cortex_charge_monitor( var_0 );
|
|
level waittill( "escape_forcefield_destroyed" );
|
|
wait 1;
|
|
maps\mp\alien\_spawn_director::end_cycle();
|
|
getent( var_2, "targetname" ) delete();
|
|
var_3 = undefined;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case 1:
|
|
var_3 = "escape_blocker_3";
|
|
break;
|
|
case 2:
|
|
var_3 = "escape_blocker_2";
|
|
break;
|
|
case 3:
|
|
var_3 = "escape_blocker_1";
|
|
break;
|
|
}
|
|
|
|
var_4 = getent( var_3, "targetname" );
|
|
var_4 setscriptablepartstate( 0, "ff_down" );
|
|
level thread maps\mp\mp_alien_dlc3_vignettes::descent_vo_escape_barrier_down( var_0 );
|
|
iprintlnbold( &"MP_ALIEN_DESCENT_CORTEX_FF_DOWN" );
|
|
setomnvar( "ui_alien_boss_status", 0 );
|
|
setomnvar( "ui_alien_boss_icon", 5 );
|
|
setomnvar( "ui_alien_boss_progression", 0 );
|
|
}
|
|
|
|
cortex_charge_monitor( var_0 )
|
|
{
|
|
level endon( "escape_forcefield_destroyed" );
|
|
level endon( "game_ended" );
|
|
var_1 = 10;
|
|
var_2 = var_1 / 2;
|
|
var_3 = 100 / var_1;
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "alien_killed", var_4, var_5, var_6 );
|
|
|
|
if ( var_5 == "MOD_SUICIDE" )
|
|
continue;
|
|
|
|
var_1--;
|
|
|
|
if ( var_1 < var_2 )
|
|
{
|
|
level thread maps\mp\mp_alien_dlc3_vignettes::descent_vo_escape_cortex_charge_50( var_0 );
|
|
var_2 = -1;
|
|
}
|
|
|
|
if ( var_1 <= 0 )
|
|
{
|
|
setomnvar( "ui_alien_boss_progression", var_3 * var_1 );
|
|
iprintln( &"MP_ALIEN_DESCENT_USE_THE_CORTEX" );
|
|
level thread maps\mp\mp_alien_dlc3_vignettes::descent_vo_escape_cortex_ready( var_0 );
|
|
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 maps\mp\alien\mp_alien_dlc3_ark::wait_until_player_use_cortex();
|
|
playfx( level._effect["cortex_blast"], level.cortex_use_trigger.origin );
|
|
playsoundatpos( level.cortex_use_trigger.origin, "scn_cortex_activate" );
|
|
level thread maps\mp\alien\mp_alien_dlc3_ark::kill_aliens_with_cortex_pulse();
|
|
setomnvar( "ui_alien_boss_progression", 100 );
|
|
level notify( "escape_forcefield_destroyed" );
|
|
break;
|
|
}
|
|
|
|
setomnvar( "ui_alien_boss_progression", var_3 * var_1 );
|
|
}
|
|
}
|
|
|
|
escape_timer_fx()
|
|
{
|
|
self endon( "disconnect" );
|
|
level endon( "game_ended" );
|
|
level thread escape_falling_boulders_fx();
|
|
thread escape_falling_debris_fx( "escape_falling_debris_pa1", "end_falling_rocks_1" );
|
|
self notify( "end_falling_rocks_1" );
|
|
set_escape_earthquake_values( 0.18, 0.28, 2, 4 );
|
|
thread escape_falling_debris_fx( "escape_falling_debris_pa2", "end_falling_rocks_2" );
|
|
wait 120;
|
|
self notify( "end_falling_rocks_2" );
|
|
set_escape_earthquake_values( 0.32, 0.48, 1, 2 );
|
|
thread escape_falling_debris_fx( "escape_falling_debris_pa3", "end_falling_rocks_3" );
|
|
}
|
|
|
|
escape_falling_debris_fx( var_0, var_1 )
|
|
{
|
|
self endon( "disconnect" );
|
|
level endon( "game_ended" );
|
|
self endon( var_1 );
|
|
|
|
for (;;)
|
|
{
|
|
var_2 = spawnfxforclient( level._effect[var_0], self.origin + ( 0, 0, 750 ), self, anglestoup( self.angles ) );
|
|
triggerfx( var_2 );
|
|
var_2 thread escape_falling_debris_fx_delete();
|
|
wait( randomfloatrange( 2, 3 ) );
|
|
}
|
|
}
|
|
|
|
set_escape_earthquake_values( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level.escape_earthquake_intensity_min = var_0;
|
|
level.escape_earthquake_intensity_max = var_1;
|
|
level.escape_earthquake_len_min = var_2;
|
|
level.escape_earthquake_len_max = var_3;
|
|
level.escape_earthquake_org = ( 28.4, 5.8, 3951.5 );
|
|
}
|
|
|
|
escape_earthquakes()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
earthquake( randomfloatrange( level.escape_earthquake_intensity_min, level.escape_earthquake_intensity_max ), randomfloatrange( level.escape_earthquake_len_min, level.escape_earthquake_len_max ), level.escape_earthquake_org, 20000 );
|
|
wait( randomfloatrange( 2, 3 ) );
|
|
}
|
|
}
|
|
|
|
escape_falling_debris_fx_delete()
|
|
{
|
|
wait 10;
|
|
|
|
if ( isdefined( self ) )
|
|
self delete();
|
|
}
|
|
|
|
escape_falling_boulders_fx()
|
|
{
|
|
self endon( "disconnect" );
|
|
level endon( "game_ended" );
|
|
var_0 = getent( "fx_boulders_01", "targetname" );
|
|
var_1 = getent( "fx_boulders_02", "targetname" );
|
|
var_2 = [ "default", "rock1", "rock2", "rock3", "rock4", "rock5", "rock6", "rock7" ];
|
|
|
|
for (;;)
|
|
{
|
|
wait 0.01;
|
|
wait( randomfloatrange( 1.8, 3.3 ) );
|
|
var_0 setscriptablepartstate( "base", "default" );
|
|
var_1 setscriptablepartstate( "base", "default" );
|
|
wait 0.1;
|
|
var_3 = common_scripts\utility::random( var_2 );
|
|
var_0 setscriptablepartstate( "base", var_3 );
|
|
var_1 setscriptablepartstate( "base", var_3 );
|
|
}
|
|
}
|
|
|
|
wait_for_player_to_place_cortex( var_0 )
|
|
{
|
|
foreach ( var_2 in level.players )
|
|
var_2 thread check_for_player_near_spot_with_cortex( var_0 );
|
|
|
|
var_4 = common_scripts\utility::getstruct( var_0, "targetname" );
|
|
var_5 = "waypoint_alien_blocker";
|
|
var_6 = 14;
|
|
var_7 = 14;
|
|
var_8 = 0.75;
|
|
var_9 = var_4.origin + ( 0, 0, 50 );
|
|
var_10 = maps\mp\alien\_hud::make_waypoint( var_5, var_6, var_7, var_8, var_9 );
|
|
level thread wait_for_cortex_planted( var_0 );
|
|
level waittill( "cortex_planted" );
|
|
var_10 destroy();
|
|
}
|
|
|
|
alien_death_trail( var_0 )
|
|
{
|
|
playfx( level._effect["bio_trail"], var_0 + ( 0, 0, 32 ) );
|
|
wait 0.5;
|
|
var_1 = spawnstruct();
|
|
|
|
while ( !isdefined( level.drill ) && !isdefined( level.drill_carrier ) )
|
|
wait 0.1;
|
|
|
|
if ( isdefined( level.drill ) )
|
|
var_1.origin = level.drill.origin + ( 0, 0, 0 );
|
|
else if ( isdefined( level.drill_carrier ) )
|
|
var_1.origin = level.drill_carrier.origin + ( 0, 0, 0 );
|
|
|
|
playfx( level._effect["bio_trail_cap"], var_1.origin );
|
|
}
|
|
|
|
do_trail_death()
|
|
{
|
|
wait 0.1;
|
|
var_0 = common_scripts\utility::get_array_of_closest( self.origin, common_scripts\utility::getstructarray( "bio_path", "targetname" ) );
|
|
var_1 = distance( self.origin, var_0[0].origin );
|
|
playfxontag( level._effect["bio_trail"], self, "tag_origin" );
|
|
var_2 = 1500;
|
|
var_3 = var_0[0];
|
|
var_4 = 0;
|
|
|
|
if ( var_1 > 1000 )
|
|
{
|
|
var_3 = spawnstruct();
|
|
|
|
while ( !isdefined( level.drill ) && !isdefined( level.drill_carrier ) )
|
|
wait 0.1;
|
|
|
|
if ( isdefined( level.drill ) )
|
|
var_3.origin = level.drill.origin + ( 0, 0, 70 );
|
|
else if ( isdefined( level.drill_carrier ) )
|
|
var_3.origin = level.drill_carrier.origin + ( 0, 0, 70 );
|
|
|
|
var_4 = 1;
|
|
var_1 = distance( self.origin, var_3.origin );
|
|
}
|
|
|
|
var_5 = var_1 / var_2;
|
|
|
|
if ( var_5 < 0.05 )
|
|
var_5 = 0.05;
|
|
|
|
self moveto( var_3.origin, var_5 );
|
|
self waittill( "movedone" );
|
|
|
|
if ( var_4 )
|
|
{
|
|
playfx( level._effect["tesla_shock"], self.origin + ( 0, 0, -50 ) );
|
|
self delete();
|
|
return;
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
var_6 = common_scripts\utility::getstructarray( var_3.target, "targetname" );
|
|
var_7 = common_scripts\utility::random( var_6 );
|
|
var_1 = distance( var_3.origin, var_7.origin );
|
|
var_5 = var_1 / var_2;
|
|
self moveto( var_7.origin, var_5 );
|
|
self waittill( "movedone" );
|
|
|
|
if ( !isdefined( var_7.target ) )
|
|
break;
|
|
|
|
var_3 = var_7;
|
|
}
|
|
|
|
playfx( level._effect["tesla_shock"], self.origin + ( 0, 0, -50 ) );
|
|
self delete();
|
|
}
|
|
|
|
clear_cortex_lowermessage()
|
|
{
|
|
foreach ( var_1 in level.players )
|
|
var_1 maps\mp\_utility::clearlowermessage( "plant_cortex" );
|
|
}
|
|
|
|
wait_for_cortex_planted( var_0 )
|
|
{
|
|
var_1 = common_scripts\utility::getstruct( var_0, "targetname" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "cortex_plant" );
|
|
level.cortex.origin = var_1.origin;
|
|
level.cortex_use_trigger makeunusable();
|
|
level.cortex_use_trigger sethintstring( "" );
|
|
level notify( "cortex_planted" );
|
|
return;
|
|
}
|
|
}
|
|
|
|
check_for_player_near_spot_with_cortex( var_0 )
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "death" );
|
|
level endon( "cortex_planted" );
|
|
var_1 = 6400;
|
|
var_2 = common_scripts\utility::getstruct( var_0, "targetname" );
|
|
level.current_cortex_spot = var_2;
|
|
|
|
for (;;)
|
|
{
|
|
if ( isdefined( self.inlaststand ) && self.inlaststand || common_scripts\utility::flag( "drill_drilling" ) || isdefined( self.usingremote ) || maps\mp\alien\_utility::is_true( self.iscarrying ) )
|
|
{
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
if ( distancesquared( var_2.origin, self.origin ) < var_1 )
|
|
{
|
|
if ( !isdefined( level.cortex_carrier ) || isdefined( level.cortex_carrier ) && level.cortex_carrier != self )
|
|
{
|
|
maps\mp\_utility::setlowermessage( "plant_cortex", &"MP_ALIEN_DESCENT_CORTEX_HINT", undefined, 10 );
|
|
|
|
while ( player_should_see_cortex_hint( var_2, var_1, 1 ) )
|
|
wait 0.05;
|
|
|
|
maps\mp\_utility::clearlowermessage( "plant_cortex" );
|
|
}
|
|
else
|
|
{
|
|
maps\mp\_utility::setlowermessage( "plant_cortex", &"MP_ALIEN_DESCENT_CORTEX_PLANT", undefined, 10 );
|
|
|
|
while ( player_should_see_cortex_hint( var_2, var_1, 0 ) )
|
|
wait 0.05;
|
|
|
|
maps\mp\_utility::clearlowermessage( "plant_cortex" );
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
player_should_see_cortex_hint( var_0, var_1, var_2 )
|
|
{
|
|
if ( distancesquared( var_0.origin, self.origin ) > var_1 )
|
|
return 0;
|
|
|
|
if ( self.inlaststand )
|
|
return 0;
|
|
|
|
if ( isdefined( self.usingremote ) )
|
|
return 0;
|
|
|
|
if ( maps\mp\alien\_utility::is_true( var_2 ) )
|
|
return 1;
|
|
else if ( maps\mp\alien\_utility::is_true( self.iscarrying ) )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
nag_players_to_place_cortex()
|
|
{
|
|
level endon( "cortex_plant" );
|
|
wait 30;
|
|
var_0 = 20;
|
|
|
|
for (;;)
|
|
{
|
|
wait( var_0 );
|
|
level thread maps\mp\mp_alien_dlc3_vignettes::descent_vo_escape_cortex_nag();
|
|
var_0 = var_0 + 20;
|
|
}
|
|
}
|
|
|
|
nag_players_who_leave_the_drill_behind()
|
|
{
|
|
var_0 = 2000;
|
|
var_1 = var_0 * var_0;
|
|
var_2 = 0;
|
|
var_3 = 20;
|
|
|
|
for (;;)
|
|
{
|
|
if ( isdefined( level.cortex ) )
|
|
{
|
|
var_2 = 0;
|
|
|
|
foreach ( var_5 in level.players )
|
|
{
|
|
if ( distancesquared( var_5.origin, level.cortex.origin ) < var_1 )
|
|
var_2 = 1;
|
|
}
|
|
|
|
if ( !var_2 )
|
|
level thread maps\mp\mp_alien_dlc3_vignettes::descent_vo_escape_cortex_left_behind();
|
|
}
|
|
|
|
wait( var_3 );
|
|
var_3 = var_3 + 20;
|
|
}
|
|
}
|