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

1246 lines
39 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
nonlinear_progression_init()
{
level.num_conduit_completed = 0;
level.num_transition_completed = 0;
level.allow_backtrack_encounters = 1;
level.force_blocker_order = 0;
level.drill_detonate_override = ::encounter_complete;
level.hotjoin_skill_points_fun = ::last_hotjoin_skill_points;
level.automatic_drill = 1;
common_scripts\utility::flag_init( "drill_detonated" );
common_scripts\utility::flag_init( "drill_destroyed" );
common_scripts\utility::flag_init( "drill_drilling" );
level.drill_health_hardcore = 1250;
if ( maps\mp\alien\_utility::isplayingsolo() )
level.drill_health_hardcore = 2000;
level.gas_station_conduits_completed = 0;
level.parking_conduits_completed = 0;
level.rooftop_conduits_completed = 0;
level.skill_points_earned_from_progression = 0;
}
init_fake_drill()
{
common_scripts\utility::flag_init( "drill_detonated" );
common_scripts\utility::flag_init( "drill_destroyed" );
common_scripts\utility::flag_init( "drill_drilling" );
level.drill_id = 0;
level.drill_marker_id = 1;
level.drill = undefined;
level.drill_carrier = undefined;
maps\mp\alien\_drill::init_fx();
maps\mp\alien\_drill::init_drill_drop_loc();
thread maps\mp\alien\_drill::drill_threat_think();
}
register_nonlinear_outpost( var_0, var_1 )
{
var_2 = common_scripts\utility::getstruct( "outpost_" + var_0, "targetname" );
if ( !isdefined( var_2 ) )
return;
var_2.name = var_0;
var_2.opened = common_scripts\utility::ter_op( isdefined( var_1 ), var_1, 0 );
var_2.outpost_encounters = [];
var_3 = common_scripts\utility::getstructarray( var_2.target, "targetname" );
foreach ( var_5 in var_3 )
{
if ( isdefined( var_5.script_parameters ) )
{
if ( var_5.script_parameters == "outpost_transition" )
level setup_transition_encounter( var_5 );
else if ( var_5.script_parameters == "outpost_conduit" )
level setup_conduit_encounter( var_5 );
}
var_2.outpost_encounters[var_5.name] = var_5;
}
if ( !isdefined( level.outposts ) )
level.outposts = [];
level.outposts[var_0] = var_2;
}
register_nonlinear_transition( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
{
if ( !isdefined( level.outposts[var_0] ) )
{
}
if ( !isdefined( level.outposts[var_0].outpost_encounters[var_1] ) )
{
}
var_8 = level.outposts[var_0].outpost_encounters[var_1];
var_8.name = var_1;
var_8.skill_point = var_2;
var_8.hardcore_skill_point = var_3;
var_8.outpost_name = var_0;
var_8.opener_func = var_4;
var_8.open_delta = var_5;
var_8.close_delta = var_6;
var_8.connected_outpost = var_7;
var_8.force_end_func = ::force_end_transition;
var_8.type = "transition";
}
register_nonlinear_conduit( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( level.outposts[var_0] ) )
{
}
if ( !isdefined( level.outposts[var_0].outpost_encounters[var_1] ) )
{
}
var_9 = level.outposts[var_0].outpost_encounters[var_1];
var_9.name = var_1;
var_9.outpost_name = var_0;
var_9.cycle_count = var_2;
var_9.med_cycle = var_3;
var_9.hard_cycle = var_4;
var_9.skill_point = var_5;
var_9.hardcore_skill_point = var_6;
var_9.encounter_func = var_7;
var_9.blocker = common_scripts\utility::ter_op( isdefined( var_8 ), var_8, 0 );
var_9.force_end_func = ::force_end_conduit;
var_9.type = "conduit";
}
run_non_linear_encounters()
{
level endon( "game_ended" );
level endon( "start_cross_vignette" );
level.cycle_count = 1;
level.current_area_name = "main_base";
if ( !handle_non_linear_jump_to_start() )
return;
level waittill( "enable_encounters" );
for (;;)
{
var_0 = level.outposts[level.current_area_name];
if ( !isdefined( var_0 ) )
return;
foreach ( var_2 in var_0.outpost_encounters )
level thread outpost_encounter_enable( var_2 );
if ( level.allow_backtrack_encounters )
{
foreach ( var_5 in level.outposts )
{
if ( var_5.name != level.current_area_name && var_5.opened )
{
foreach ( var_2 in var_5.outpost_encounters )
level thread outpost_encounter_enable( var_2 );
}
}
}
level waittill( "outpost_encounter_started" );
common_scripts\utility::flag_set( "outpost_encounter_running" );
level waittill( "outpost_encounter_completed" );
common_scripts\utility::flag_clear( "outpost_encounter_running" );
wait 5.0;
if ( common_scripts\utility::flag( "start_cross_vignette" ) )
return;
}
}
outpost_encounter_enable( var_0 )
{
level endon( "outpost_encounter_started" );
level endon( "start_cross_vignette" );
if ( !isdefined( var_0 ) )
return;
if ( !isdefined( var_0.use_trigger ) )
return;
if ( isdefined( var_0.use_trigger.marked_for_delete ) || isdefined( var_0.completed ) )
return;
if ( level.force_blocker_order && var_0.type == "conduit" && var_0.blocker )
{
var_1 = level.outposts[var_0.outpost_name].outpost_encounters;
foreach ( var_3 in var_1 )
{
if ( var_3.name != var_0.name && var_3.type == "conduit" )
return;
}
}
level thread encounter_outline_icon_hinttext( var_0 );
var_0.use_trigger makeusable();
var_0.use_trigger waittill( "trigger", var_5 );
if ( var_0.type == "conduit" && !level.force_blocker_order )
var_0 = update_conduit_struct_any_order( var_0 );
level thread [[ var_0.encounter_start_func ]]( var_0, var_5 );
level notify( "outpost_encounter_started" );
}
encounter_outline_icon_hinttext( var_0 )
{
if ( isdefined( var_0.completed ) )
return;
var_1 = "waypoint_alien_conduit";
if ( var_0.type == "transition" )
var_1 = "waypoint_alien_gate";
var_0.use_trigger thread maps\mp\alien\_hive::set_hive_icon( var_1, 1300 );
var_0.use_trigger setcursorhint( "HINT_NOICON" );
var_0.use_trigger common_scripts\utility::trigger_on();
if ( var_0.type == "transition" )
var_0.use_trigger sethintstring( &"MP_ALIEN_LAST_TRANSITION_OPEN_HINT" );
else
var_0.use_trigger sethintstring( &"MP_ALIEN_LAST_CONDUIT_START_HINT" );
var_2 = undefined;
var_3 = undefined;
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) )
{
if ( var_0.type == "transition" )
{
var_2 = var_0.gate_models[0];
if ( isdefined( var_0.gate_model_double ) )
{
var_3 = var_0.gate_model_double;
maps\mp\alien\_outline_proto::add_to_outline_hive_watch_list( var_0.gate_model_double );
}
}
else
var_2 = var_0.conduit;
maps\mp\alien\_outline_proto::add_to_outline_hive_watch_list( var_2 );
}
level common_scripts\utility::waittill_any( "outpost_encounter_started", "game_ended", "start_cross_vignette" );
var_0.use_trigger notify( "stop_listening" );
var_0.use_trigger maps\mp\alien\_hive::destroy_hive_icon();
var_0.use_trigger sethintstring( "" );
var_0.use_trigger common_scripts\utility::trigger_off();
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) && isdefined( var_2 ) )
{
maps\mp\alien\_outline_proto::remove_from_outline_hive_watch_list( var_2 );
if ( isdefined( var_3 ) )
maps\mp\alien\_outline_proto::remove_from_outline_hive_watch_list( var_3 );
}
}
encounter_complete()
{
var_0 = level.current_encounter_info;
if ( var_0.type == "transition" )
thread transition_encounter_complete();
else
thread conduit_encounter_complete();
level thread maps\mp\mp_alien_last::remove_conduit_vo_once_complete();
}
setup_conduit_encounter( var_0 )
{
if ( !isdefined( var_0.script_noteworthy ) )
return;
var_0.name = var_0.script_noteworthy;
var_0.encounter_start_func = ::run_conduit_encounter;
var_1 = getentarray( var_0.target, "targetname" );
foreach ( var_3 in var_1 )
{
if ( isdefined( var_3.script_parameters ) )
{
if ( var_3.script_parameters == "conduit" )
{
var_0.conduit = var_3;
continue;
}
if ( var_3.script_parameters == "use_trigger" )
var_0.use_trigger = var_3;
}
}
var_5 = getent( var_0.name + "_scriptable", "targetname" );
var_0.conduit.scriptable = var_5;
}
run_conduit_encounter( var_0, var_1 )
{
if ( !isdefined( var_0 ) )
return;
level.encounter_type = "conduit";
level.current_encounter_info = var_0;
var_1 maps\mp\alien\_persistence::eog_player_update_stat( "drillplants", 1 );
level.encounter_name = var_0.name;
level.current_hive_name = var_0.name;
level.current_area_name = var_0.outpost_name;
level notify( "drill_planted", var_1, var_0 );
var_2 = 0.4;
var_3 = 1.75;
thread maps\mp\alien\_hive::warn_all_players( var_3, var_2 );
if ( isdefined( var_0.encounter_func ) )
level thread [[ var_0.encounter_func ]]( var_0 );
level thread set_area_index_for_encounter( var_0.name );
maps\mp\_utility::delaythread( 2, maps\mp\alien\_challenge::spawn_challenge );
level thread conduit_running( var_0, var_0.conduit, var_1 );
maps\mp\alien\_gamescore_last::update_generator_score_component_name();
maps\mp\alien\_gamescore::reset_encounter_performance();
var_4 = level.cycle_count;
if ( level.num_conduit_completed < 2 )
level.cycle_count = var_0.cycle_count;
else if ( level.num_conduit_completed < 4 )
level.cycle_count = var_0.med_cycle;
else
level.cycle_count = var_0.hard_cycle;
maps\mp\alien\_spawn_director::start_cycle( level.cycle_count );
level.cycle_count = level.cycle_count + 1;
common_scripts\utility::flag_wait( "drill_detonated" );
common_scripts\utility::flag_clear( "drill_drilling" );
level.drill.inuse = 0;
maps\mp\alien\_spawn_director::end_cycle();
var_0.completed = 1;
level.cycle_count = var_4;
var_0.conduit thread maps\mp\alien\_drill::drill_detonate();
level thread maps\mp\alien\_spawnlogic::remaining_alien_management();
maps\mp\alien\_challenge::end_current_challenge();
maps\mp\alien\_challenge::remove_all_challenge_cases();
maps\mp\alien\_gamescore::calculate_and_show_encounter_scores( level.players, get_conduit_score_component_name_list() );
setomnvar( "ui_alien_drill_state", 0 );
if ( isdefined( var_0.scene_trig ) )
var_0.scene_trig notify( "trigger", level.players[0] );
increment_conduit_progress();
give_players_rewards( var_0 );
level.current_encounter_info = undefined;
level.encounter_type = undefined;
level notify( "outpost_encounter_completed" );
common_scripts\utility::flag_clear( "outpost_encounter_running" );
}
conduit_running( var_0, var_1, var_2 )
{
var_1 endon( "stop_listening" );
var_1 endon( "drill_complete" );
level.drill = var_1;
level.drill.state = "planted";
level.drill endon( "death" );
level.drill.owner = var_2;
level.drill.stronghold = var_1;
level.drill.times_stuck = 0;
level.drill.start_time = gettime();
level.drill.hive_is_really_a_door = 0;
var_1.scriptables = [];
var_1.removeables = [];
var_1.fx_ents = [];
var_3 = level.drill_health_hardcore;
level.drill.maxhealth = 20000 + var_3;
level.drill.health = int( 20000 + var_3 * level.drill.owner maps\mp\alien\_perk_utility::perk_getdrillhealthscalar() );
level.drill thread maps\mp\alien\_drill::watch_to_repair( level.drill );
level.drill thread maps\mp\alien\_drill::watch_drill_health_for_challenge();
level.drill thread watch_drill_health_for_fx();
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) )
maps\mp\alien\_outline_proto::add_to_outline_drill_watch_list( level.drill, 0 );
var_1 playsound( "alien_conduit_on" );
level notify( "dlc_vo_notify", "last_vo", "conduit_start" );
thread maps\mp\alien\_drill::destroy_drill_icon();
common_scripts\utility::flag_set( "drill_drilling" );
wait 2;
var_1 thread init_drilling_parameters( var_0 );
var_1 thread set_conduit_state_run( var_2 );
maps\mp\alien\_hive::hive_play_drill_planted_animations();
level.drill waittill( "offline", var_4, var_5 );
var_1 thread set_conduit_state_offline();
wait 2;
maps\mp\gametypes\aliens::alienendgame( "axis", maps\mp\alien\_hud::get_end_game_string_index( "generator_destroyed" ) );
}
set_conduit_state_run( var_0 )
{
self endon( "death" );
self endon( "stop_listening" );
level.drill.state = "online";
level.drill notify( "online" );
level.drill setcandamage( 1 );
level.drill makeunusable();
level.drill sethintstring( "" );
var_1 = level.drill_health_hardcore;
level.drill.maxhealth = 20000 + var_1;
level.drill.health = int( 20000 + var_1 * level.drill.owner maps\mp\alien\_perk_utility::perk_getdrillhealthscalar() );
level.drill.threatbias = -3000;
level.drill makeentitysentient( "allies" );
level.drill setthreatbiasgroup( "drill" );
maps\mp\alien\_drill::update_drill_health_hud();
foreach ( var_3 in level.agentarray )
{
if ( isdefined( var_3.wave_spawned ) && var_3.wave_spawned )
var_3 getenemyinfo( level.drill );
}
thread sfx_conduit_on();
thread conduit_fx_warm_up();
thread maps\mp\alien\_drill::handle_bomb_damage();
self.depth_marker = gettime();
thread maps\mp\alien\_drill::monitor_drill_complete( self.depth );
thread maps\mp\alien\_hive::hive_pain_monitor();
thread maps\mp\alien\_hive::set_hive_icon( "waypoint_alien_defend" );
thread offset_conduit_icon();
thread maps\mp\alien\_drill::destroy_drill_icon();
thread maps\mp\alien\_hud::turn_on_drill_meter_hud( self.depth );
if ( level.encounter_type == "conduit" )
level thread maps\mp\alien\_drill::watch_drill_depth_for_vo( self.depth );
}
offset_conduit_icon()
{
level endon( "drill_detonated" );
level endon( "game_ended" );
while ( !isdefined( self.icon ) )
wait 0.1;
self.icon.z = self.icon.z + 70;
}
conduit_fx_warm_up()
{
level.drill.scriptable setscriptablepartstate( "base", "warm_up" );
}
conduit_fx_on()
{
level.drill.scriptable setscriptablepartstate( "base", "on" );
}
conduit_fx_damaged()
{
level.drill.scriptable setscriptablepartstate( "base", "damaged" );
}
conduit_encounter_complete()
{
maps\mp\alien\_hive::destroy_hive_icon();
self makeunusable();
self sethintstring( "" );
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) )
maps\mp\alien\_outline_proto::remove_from_outline_drill_watch_list( self );
thread sfx_conduit_off();
thread conduit_fx_on();
if ( isdefined( level.drill ) )
level.drill.ignoreme = 1;
level.num_conduit_completed++;
common_scripts\utility::flag_clear( "drill_detonated" );
wait 4;
level thread maps\mp\mp_alien_last::play_conduit_encounter_complete_vo();
}
set_conduit_state_offline()
{
self endon( "death" );
self endon( "stop_listening" );
self.state = "offline";
thread sfx_conduit_offline();
var_0 = ( gettime() - self.depth_marker ) / 1000;
self.depth = max( 0, self.depth - var_0 );
wait 1.0;
self setcandamage( 0 );
self freeentitysentient();
maps\mp\alien\_hive::destroy_hive_icon();
setomnvar( "ui_alien_drill_state", 2 );
}
force_end_conduit()
{
if ( !common_scripts\utility::flag( "drill_drilling" ) )
common_scripts\utility::waittill_any_timeout( 4, "drill_drilling" );
var_0 = level.current_encounter_info.conduit;
var_0.layers = [];
var_0 notify( "force_drill_complete" );
wait 1.0;
}
update_conduit_struct_any_order( var_0 )
{
var_0 = level.outposts[var_0.outpost_name].outpost_encounters[var_0.name];
if ( var_0.name == "conduit_gas_station_2" && level.gas_station_conduits_completed == 0 )
swap_conduit_cycles_and_encounter( "gas_station", "conduit_gas_station_1", "conduit_gas_station_2" );
else if ( var_0.name == "conduit_parking_2" && level.parking_conduits_completed == 0 )
swap_conduit_cycles_and_encounter( "parking", "conduit_parking_1", "conduit_parking_2" );
else if ( var_0.name == "conduit_rooftop_2" && level.rooftop_conduits_completed == 0 )
swap_conduit_cycles_and_encounter( "rooftop", "conduit_rooftop_1", "conduit_rooftop_2" );
return var_0;
}
swap_conduit_cycles_and_encounter( var_0, var_1, var_2 )
{
var_3 = level.outposts[var_0].outpost_encounters[var_2].cycle_count;
var_4 = level.outposts[var_0].outpost_encounters[var_2].med_cycle;
var_5 = level.outposts[var_0].outpost_encounters[var_2].hard_cycle;
var_6 = level.outposts[var_0].outpost_encounters[var_2].encounter_func;
var_7 = level.outposts[var_0].outpost_encounters[var_2].blocker;
level.outposts[var_0].outpost_encounters[var_2].cycle_count = level.outposts[var_0].outpost_encounters[var_1].cycle_count;
level.outposts[var_0].outpost_encounters[var_2].med_cycle = level.outposts[var_0].outpost_encounters[var_1].med_cycle;
level.outposts[var_0].outpost_encounters[var_2].hard_cycle = level.outposts[var_0].outpost_encounters[var_1].hard_cycle;
level.outposts[var_0].outpost_encounters[var_2].encounter_func = level.outposts[var_0].outpost_encounters[var_1].encounter_func;
level.outposts[var_0].outpost_encounters[var_2].blocker = level.outposts[var_0].outpost_encounters[var_1].blocker;
level.outposts[var_0].outpost_encounters[var_1].cycle_count = var_3;
level.outposts[var_0].outpost_encounters[var_1].med_cycle = var_4;
level.outposts[var_0].outpost_encounters[var_1].hard_cycle = var_5;
level.outposts[var_0].outpost_encounters[var_1].encounter_func = var_6;
level.outposts[var_0].outpost_encounters[var_1].blocker = var_7;
}
increment_conduit_progress()
{
level.num_hive_destroyed++;
foreach ( var_1 in level.players )
var_1 maps\mp\alien\_persistence::eog_player_update_stat( "hivesdestroyed", 1 );
}
watch_drill_health_for_fx()
{
self endon( "drill_complete" );
self endon( "death" );
var_0 = 0;
for (;;)
{
var_1 = ( level.drill.health - 20000 ) / level.drill_health_hardcore;
if ( var_1 <= 0.75 && !var_0 )
{
var_0 = 1;
conduit_fx_damaged();
}
else if ( var_1 > 0.75 && var_0 )
{
var_0 = 0;
conduit_fx_warm_up();
}
wait 1;
}
}
sfx_conduit_on()
{
wait 0.1;
var_0 = level.drill;
level.drill_sfx_lp = spawn( "script_origin", var_0.origin );
level.drill_sfx_lp linkto( var_0 );
if ( !isdefined( level.drill_sfx_dist_lp ) )
{
level.drill_sfx_dist_lp = spawn( "script_origin", var_0.origin );
level.drill_sfx_dist_lp linkto( var_0 );
}
wait 0.1;
if ( isdefined( level.drill_sfx_lp ) )
level.drill_sfx_lp playloopsound( "alien_conduit_on_lp" );
}
sfx_conduit_off()
{
var_0 = level.drill;
var_0 playsound( "alien_conduit_powered_up" );
if ( isdefined( level.drill_sfx_lp ) )
{
level.drill_sfx_lp stoploopsound( "alien_conduit_on_lp" );
level.drill_sfx_lp playloopsound( "alien_conduit_powered_lp" );
}
if ( isdefined( level.drill_sfx_dist_lp ) )
level.drill_sfx_dist_lp delete();
if ( isdefined( level.drill_overheat_lp ) )
level.drill_overheat_lp delete();
if ( isdefined( level.drill_overheat_lp_02 ) )
level.drill_overheat_lp_02 delete();
}
sfx_conduit_offline()
{
var_0 = level.drill;
if ( isdefined( level.drill_sfx_lp ) )
level.drill_sfx_lp delete();
if ( isdefined( level.drill_sfx_dist_lp ) )
level.drill_sfx_dist_lp delete();
if ( isdefined( level.drill_overheat_lp_02 ) )
level.drill_overheat_lp_02 delete();
}
setup_transition_encounter( var_0 )
{
if ( !isdefined( var_0.script_noteworthy ) )
return;
var_0.name = var_0.script_noteworthy;
var_0.encounter_start_func = ::run_transition_encounter;
var_0.gate_models = [];
var_0.gate_clip = undefined;
var_0.gate_pivot = undefined;
var_0.gate_model_double = undefined;
var_0.gate_clip_double = undefined;
var_0.gate_pivot_double = undefined;
var_1 = getentarray( var_0.target, "targetname" );
foreach ( var_3 in var_1 )
{
if ( isdefined( var_3.script_parameters ) )
{
if ( var_3.script_parameters == "use_trigger" )
{
var_0.use_trigger = var_3;
continue;
}
if ( var_3.script_parameters == "outpost_gate_model" )
{
var_0.gate_models[var_0.gate_models.size] = var_3;
continue;
}
if ( var_3.script_parameters == "outpost_gate_clip" )
{
var_0.gate_clip = var_3;
continue;
}
if ( var_3.script_parameters == "outpost_gate_pivot" )
{
var_0.gate_pivot = var_3;
continue;
}
if ( var_3.script_parameters == "objective_marker" )
{
var_0.objective_marker = var_3;
continue;
}
if ( var_3.script_parameters == "outpost_gate_model_double" )
{
var_0.gate_model_double = var_3;
continue;
}
if ( var_3.script_parameters == "outpost_gate_clip_double" )
{
var_0.gate_clip_double = var_3;
continue;
}
if ( var_3.script_parameters == "outpost_gate_pivot_double" )
var_0.gate_pivot_double = var_3;
}
}
if ( isdefined( var_0.gate_pivot ) && isdefined( var_0.gate_clip ) )
var_0.gate_clip linkto( var_0.gate_pivot );
if ( isdefined( var_0.gate_pivot ) )
{
foreach ( var_6 in var_0.gate_models )
var_6 linkto( var_0.gate_pivot );
}
if ( isdefined( var_0.gate_pivot_double ) && isdefined( var_0.gate_clip_double ) )
var_0.gate_clip_double linkto( var_0.gate_pivot_double );
if ( isdefined( var_0.gate_pivot_double ) )
var_0.gate_model_double linkto( var_0.gate_pivot_double );
}
run_transition_encounter( var_0, var_1 )
{
if ( !isdefined( var_0 ) )
return;
level.encounter_type = "transition";
level.current_encounter_info = var_0;
level notify( "dlc_vo_notify", "transition_start" );
[[ var_0.opener_func ]]( var_0, 0 );
var_1 maps\mp\alien\_persistence::eog_player_update_stat( "drillplants", 1 );
level.encounter_name = var_0.name;
level.current_hive_name = var_0.name;
level.current_area_name = var_0.outpost_name;
level notify( "drill_planted", var_1, var_0 );
var_2 = 0.4;
var_3 = 1.75;
thread maps\mp\alien\_hive::warn_all_players( var_3, var_2 );
if ( level.cycle_count == 1 )
level maps\mp\_utility::delaythread( 1, maps\mp\alien\_music_and_dialog::playvoforwavestart );
level thread set_area_index_for_encounter( var_0.name );
maps\mp\_utility::delaythread( 2, maps\mp\alien\_challenge::spawn_challenge );
level thread transition_running( var_0, var_0.use_trigger, var_1 );
maps\mp\alien\_gamescore_last::update_street_score_component_name();
maps\mp\alien\_gamescore::reset_encounter_performance();
maps\mp\alien\_spawn_director::start_cycle( level.cycle_count );
level.cycle_count++;
var_4 = level.cycle_data.cycle_drill_layers[level.cycle_count - 1];
setomnvar( "ui_alien_nuke_timer", gettime() + var_4[0] * 1000 );
thread show_transition_objective( var_0, var_4[0] - 15 );
common_scripts\utility::flag_wait( "drill_detonated" );
common_scripts\utility::flag_clear( "drill_drilling" );
maps\mp\alien\_spawn_director::end_cycle();
var_0.completed = 1;
var_0.use_trigger thread maps\mp\alien\_drill::drill_detonate();
level thread maps\mp\alien\_challenge::end_current_challenge();
level thread maps\mp\alien\_challenge::remove_all_challenge_cases();
level thread maps\mp\alien\_gamescore::calculate_and_show_encounter_scores( level.players, get_transition_score_component_name_list() );
setomnvar( "ui_alien_drill_state", 0 );
setomnvar( "ui_alien_nuke_timer", 0 );
var_5 = var_0.connected_outpost;
var_6 = level.outposts[var_5].outpost_encounters[var_0.name];
[[ var_6.opener_func ]]( var_6, 0 );
var_6.completed = 1;
level.outposts[var_5].opened = 1;
if ( isdefined( var_0.use_trigger ) )
thread wait_and_delete_proxy( var_0.use_trigger );
if ( isdefined( var_6.use_trigger ) )
thread wait_and_delete_proxy( var_6.use_trigger );
if ( var_0.name != "transition_left" && var_0.name != "transition_middle" && var_0.name != "transition_right" )
{
level.outposts[level.current_area_name].outpost_encounters[var_0.name] = undefined;
level.outposts[var_5].outpost_encounters[var_0.name] = undefined;
}
level.num_transition_completed++;
if ( isdefined( var_0.scene_trig ) )
var_0.scene_trig notify( "trigger", level.players[0] );
give_players_rewards( var_0 );
level.current_area_name = var_5;
level.current_encounter_info = undefined;
level.encounter_type = undefined;
level notify( "outpost_encounter_completed" );
common_scripts\utility::flag_clear( "outpost_encounter_running" );
}
wait_and_delete_proxy( var_0 )
{
var_0.marked_for_delete = 1;
var_0 notify( "stop_listening" );
level.next_hive_vo_cycle = 99;
wait 5;
var_0 delete();
}
transition_running( var_0, var_1, var_2 )
{
var_1 endon( "stop_listening" );
var_1 endon( "drill_complete" );
if ( isdefined( level.drill ) )
level.drill = undefined;
var_3 = common_scripts\utility::getstruct( "hidden_drill_pos", "targetname" );
level.drill = spawn( "script_model", var_3.origin );
level.drill.state = "planted";
level thread maps\mp\alien\_music_and_dialog::playvoforbombplant( var_2 );
thread maps\mp\alien\_drill::destroy_drill_icon();
level.drill endon( "death" );
level.drill.owner = var_2;
level.drill.stronghold = var_1;
level.drill.times_stuck = 0;
level.drill.start_time = gettime();
var_1.scriptables = [];
var_1.removeables = [];
var_1.fx_ents = [];
common_scripts\utility::flag_set( "drill_drilling" );
var_1 init_drilling_parameters( var_0 );
var_1 thread set_transition_state_run( var_2 );
maps\mp\alien\_hive::hive_play_drill_planted_animations();
level.drill waittill( "offline", var_4, var_5 );
}
set_transition_state_run( var_0 )
{
self endon( "death" );
self endon( "stop_listening" );
level.drill.state = "online";
level.drill notify( "online" );
level.drill setcandamage( 0 );
level.drill makeunusable();
level.drill sethintstring( "" );
var_1 = level.drill_health_hardcore;
level.drill.maxhealth = 20000 + var_1;
level.drill.health = int( 20000 + var_1 * 1.0 );
level.drill.threatbias = -3000;
level.drill makeentitysentient( "allies" );
thread maps\mp\alien\_drill::monitor_drill_complete( self.depth );
maps\mp\alien\_drill::destroy_drill_icon();
level thread maps\mp\alien\_drill::watch_drill_depth_for_vo( self.depth );
}
transition_encounter_complete()
{
if ( isdefined( level.drill ) )
{
level.drill.ignoreme = 1;
level.drill delete();
}
common_scripts\utility::flag_clear( "drill_detonated" );
level thread maps\mp\mp_alien_last::play_transition_encounter_complete_vo();
}
show_transition_objective( var_0, var_1 )
{
wait( var_1 );
if ( !isdefined( var_0 ) || maps\mp\alien\_utility::is_true( var_0.completed ) || !isdefined( var_0.objective_marker ) )
return;
if ( isdefined( level.waypoint_icon ) )
level.waypoint_icon destroy();
if ( isdefined( level.ring_waypoint_icon ) )
level.ring_waypoint_icon destroy();
var_2 = "waypoint_alien_blocker";
var_3 = 14;
var_4 = 14;
var_5 = 0.75;
var_6 = var_0.objective_marker.origin;
level.waypoint_icon = maps\mp\alien\_hud::make_waypoint( var_2, var_3, var_4, var_5, var_6 );
var_0.use_trigger waittill( "drill_complete" );
level.waypoint_icon destroy();
var_0.objective_marker delete();
}
force_end_transition()
{
if ( !common_scripts\utility::flag( "drill_drilling" ) )
common_scripts\utility::waittill_any_timeout( 4, "drill_drilling" );
var_0 = level.current_encounter_info.use_trigger;
var_0.layers = [];
var_0 notify( "force_drill_complete" );
level notify( "debug_beat_current_encounter" );
wait 1.0;
}
opener_pivot( var_0, var_1 )
{
if ( !isdefined( var_0.gate_pivot ) )
return;
var_2 = common_scripts\utility::ter_op( var_1, var_0.close_delta, var_0.open_delta );
if ( !var_1 )
var_0.gate_clip connectpaths();
level thread play_door_sounds( var_0 );
var_0.gate_pivot rotateby( ( 0, var_2, 0 ), 1.0, 0.2, 0.2 );
wait 1.5;
var_0.gate_clip disconnectpaths();
}
opener_slide( var_0, var_1, var_2 )
{
if ( !isdefined( var_0.gate_pivot ) )
return;
var_3 = common_scripts\utility::ter_op( var_1, var_0.close_delta, var_0.open_delta );
if ( !var_1 )
var_0.gate_clip connectpaths();
level thread play_door_sounds( var_0 );
if ( maps\mp\alien\_utility::is_true( var_2 ) )
var_0.gate_pivot movex( var_3, 1.0, 0.1, 0.1 );
else
var_0.gate_pivot movez( var_3, 1.0, 0.1, 0.1 );
wait 1.5;
var_0.gate_clip disconnectpaths();
}
opener_slide_x( var_0, var_1 )
{
if ( !isdefined( var_0.gate_pivot ) )
return;
var_2 = common_scripts\utility::ter_op( var_1, var_0.close_delta, var_0.open_delta );
if ( !var_1 )
var_0.gate_clip connectpaths();
level thread play_door_sounds( var_0 );
var_0.gate_pivot movex( var_2, 2.0, 0.3, 0.6 );
wait 1.5;
var_0.gate_clip disconnectpaths();
}
opener_doors( var_0, var_1 )
{
if ( !isdefined( var_0.gate_pivot ) )
return;
var_2 = common_scripts\utility::ter_op( var_1, var_0.close_delta, var_0.open_delta );
if ( !var_1 )
{
var_0.gate_clip connectpaths();
var_0.gate_clip_double connectpaths();
}
level thread play_door_sounds( var_0 );
var_0.gate_pivot rotateby( ( 0, var_2, 0 ), 1.0, 0.2, 0.2 );
var_0.gate_pivot_double rotateby( ( 0, var_2 * -1, 0 ), 1.0, 0.2, 0.2 );
wait 1.5;
var_0.gate_clip disconnectpaths();
var_0.gate_clip_double disconnectpaths();
}
play_door_sounds( var_0 )
{
if ( isdefined( var_0.gate_pivot.script_noteworthy ) )
{
switch ( var_0.gate_pivot.script_noteworthy )
{
case "main_gate":
var_0.gate_pivot playsound( "scn_main_gate_open" );
break;
case "fence_gate":
var_0.gate_pivot playsound( "scn_chn_fence_open" );
break;
case "office_door":
var_0.gate_pivot playsound( "scn_office_exit_open" );
break;
case "linked_grate":
var_0.gate_pivot playsound( "scn_grate_lift_open" );
default:
break;
}
}
}
handle_non_linear_jump_to_start()
{
var_0 = maps\mp\gametypes\aliens::is_start_point_enable();
var_1 = maps\mp\gametypes\aliens::get_start_point_index( var_0 );
var_2 = 1;
switch ( var_1 )
{
case 1:
case 0:
break;
case 2:
maps\mp\mp_alien_last_encounters::jump_to_gas_station();
set_debug_startpointlocations();
break;
case 3:
maps\mp\mp_alien_last_encounters::jump_to_parking();
set_debug_startpointlocations();
break;
case 4:
maps\mp\mp_alien_last_encounters::jump_to_rooftop();
set_debug_startpointlocations();
break;
case 5:
level.current_area_name = "parking";
set_debug_startpointlocations();
foreach ( var_4 in level.outposts )
{
foreach ( var_6 in var_4.outpost_encounters )
{
if ( var_6.type == "transition" )
{
var_6.completed = 1;
[[ var_6.opener_func ]]( var_6, 0 );
wait 0.1;
}
}
}
maps\mp\mp_alien_last_final_battle::jump_to_return_to_base();
var_2 = 1;
break;
case 6:
level.current_area_name = "main_base";
set_debug_startpointlocations();
maps\mp\mp_alien_last_final_battle::jump_to_final_left();
var_2 = 0;
break;
case 7:
level.current_area_name = "main_base";
set_debug_startpointlocations();
maps\mp\mp_alien_last_final_battle::jump_to_final_middle();
var_2 = 0;
break;
case 8:
level.current_area_name = "main_base";
set_debug_startpointlocations();
maps\mp\mp_alien_last_final_battle::jump_to_final_right();
var_2 = 0;
break;
case 9:
level.current_area_name = "main_base";
set_debug_startpointlocations();
thread maps\mp\mp_alien_last_final_battle::jump_to_final_battle();
var_2 = 0;
break;
case 10:
level.current_area_name = "main_base";
set_debug_startpointlocations();
thread maps\mp\mp_alien_last_final_battle::jump_to_ending();
var_2 = 0;
break;
default:
break;
}
return var_2;
}
set_debug_startpointlocations()
{
var_0 = 1;
for ( level.debug_startpointlocations = []; var_0 <= 4; var_0++ )
{
var_1 = level.current_area_name + "_spawn_" + var_0;
var_2 = common_scripts\utility::getstruct( var_1, "targetname" );
if ( !isdefined( var_2 ) )
return;
level.debug_startpointlocations[level.debug_startpointlocations.size] = common_scripts\utility::drop_to_ground( var_2.origin, 100, -250 );
}
}
init_drilling_parameters( var_0 )
{
if ( var_0.type == "transition" )
var_1 = level.cycle_count;
else
var_1 = var_0.cycle_count;
var_2 = level.cycle_data.cycle_drill_layers[var_1];
self.depth = var_2[var_2.size - 1];
self.total_depth = self.depth;
self.layer_completed = 0;
self.layers[0] = 0;
for ( var_3 = 0; var_3 <= var_2.size - 2; var_3++ )
self.layers[self.layers.size] = var_2[var_3];
}
give_players_rewards( var_0, var_1, var_2 )
{
foreach ( var_4 in level.players )
var_4 thread maps\mp\alien\_hive::wait_to_give_rewards();
if ( !maps\mp\alien\_utility::is_hardcore_mode() )
{
if ( isdefined( var_0 ) && isdefined( var_0.skill_point ) )
give_players_skill_points( var_0.skill_point );
else
give_players_skill_points( var_1 );
}
else if ( isdefined( var_0 ) && isdefined( var_0.hardcore_skill_point ) )
give_players_skill_points( var_0.hardcore_skill_point );
else
give_players_skill_points( var_2 );
if ( isdefined( var_0 ) && maps\mp\alien\_utility::is_true( var_0.blocker ) )
{
foreach ( var_4 in level.players )
var_4 maps\mp\alien\_persistence::try_award_bonus_pool_token();
}
if ( maps\mp\alien\_utility::isplayingsolo() && !issplitscreen() && isdefined( var_0 ) )
{
if ( var_0.type == "transition" && ( level.num_transition_completed == 3 || level.num_transition_completed == 5 ) )
maps\mp\alien\_laststand::give_laststand( level.players[0], 1 );
}
}
get_transition_score_component_name_list()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return [ "street_personal", "street_challenge" ];
else
return [ "street_team", "street_personal", "street_challenge" ];
}
get_conduit_score_component_name_list()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return [ "generator", "generator_personal", "generator_challenge" ];
else
return [ "generator", "generator_team", "generator_personal", "generator_challenge" ];
}
last_get_current_player_volumes_override_func()
{
var_0 = [];
var_1 = [];
var_2 = level.encounter_name;
foreach ( var_4 in level.cycle_data.spawn_zones )
{
var_0[var_0.size] = var_4.volume;
if ( isdefined( var_2 ) && isdefined( var_4.volume.script_parameters ) && var_4.volume.script_parameters == var_2 )
{
var_5 = var_4.volume.script_linkname;
var_1[var_5] = spawnstruct();
var_1[var_5].players = [];
var_1[var_5].origin = var_4.volume.origin;
var_1[var_5].name = var_5;
}
}
foreach ( var_8 in level.players )
{
var_9 = var_8 getistouchingentities( var_0 );
foreach ( var_11 in var_9 )
{
var_12 = 0;
if ( !isdefined( var_1[var_11.script_linkname] ) )
{
var_5 = var_11.script_linkname;
var_1[var_5] = spawnstruct();
var_1[var_5].players = [];
var_1[var_5].origin = var_11.origin;
var_1[var_5].name = var_5;
}
var_12 = var_1[var_11.script_linkname].players.size;
var_1[var_11.script_linkname].players[var_12] = var_8;
}
}
return var_1;
}
set_area_index_for_encounter( var_0 )
{
var_1 = 0;
switch ( var_0 )
{
case "main_base":
var_1 = 0;
break;
case "conduit_gas_station_1":
case "conduit_gas_station_2":
var_1 = 1;
break;
case "conduit_parking_1":
case "conduit_parking_2":
var_1 = 2;
break;
case "conduit_rooftop_1":
case "conduit_rooftop_2":
var_1 = 3;
break;
case "transition_left":
var_1 = 4;
break;
case "transition_upper_left":
var_1 = 5;
break;
case "transition_middle":
var_1 = 6;
break;
case "transition_upper_right":
var_1 = 7;
break;
case "transition_right":
var_1 = 8;
break;
}
level.current_area_index = var_1;
}
give_players_skill_points( var_0 )
{
level.skill_points_earned_from_progression = level.skill_points_earned_from_progression + var_0;
maps\mp\gametypes\aliens::give_players_points( var_0 );
}
last_hotjoin_skill_points()
{
var_0 = 1;
if ( maps\mp\alien\_utility::is_hardcore_mode() )
var_1 = 0;
else
var_1 = max( 0, level.skill_points_earned_from_progression - var_0 );
var_2 = maps\mp\alien\_challenge::get_num_challenge_completed();
return var_1 + var_2;
}