iw6-mod/data/maps/mp/alien/_drill.gsc
2024-02-27 01:39:05 -05:00

1728 lines
51 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_drill()
{
common_scripts\utility::flag_init( "drill_detonated" );
common_scripts\utility::flag_init( "drill_destroyed" );
common_scripts\utility::flag_init( "drill_drilling" );
level.drill_use_trig = getent( "drill_pickup_trig", "targetname" );
if ( isdefined( level.drill_use_trig ) )
level.drill_use_trig.original_origin = level.drill_use_trig.origin;
level.drill_id = 0;
level.drill_marker_id = 1;
level.drill = undefined;
level.drill_carrier = undefined;
init_fx();
init_drill_drop_loc();
thread drill_think();
level thread drill_out_of_playable();
}
drill_out_of_playable()
{
level endon( "game_ended" );
var_0 = getentarray( "trigger_hurt", "classname" );
for (;;)
{
if ( !isdefined( level.drill ) )
{
wait 0.5;
continue;
}
foreach ( var_2 in var_0 )
{
if ( !isdefined( var_2.script_noteworthy ) || var_2.script_noteworthy != "out_of_playable" )
continue;
if ( level.drill istouching( var_2 ) )
{
level.drill delete();
assertex( isdefined( level.last_drill_pickup_origin ) && isdefined( level.last_drill_pickup_angles ), "Last drill pickup spot was not defined" );
playfx( level._effect["alien_teleport"], level.last_drill_pickup_origin );
playfx( level._effect["alien_teleport_dist"], level.last_drill_pickup_origin );
drop_drill( level.last_drill_pickup_origin, level.last_drill_pickup_angles );
foreach ( var_4 in level.players )
var_4 maps\mp\_utility::setlowermessage( "drill_overboard", &"ALIEN_COLLECTIBLES_DRILL_OUTOFPLAY", 4 );
}
}
wait 0.1;
}
}
init_drill_drop_loc()
{
level.drill_locs = [];
level.drill_locs = common_scripts\utility::getstructarray( "bomb_drop_loc", "targetname" );
}
init_fx()
{
level._effect["drill_laser_contact"] = loadfx( "vfx/gameplay/alien/vfx_alien_drill_laser_contact" );
level._effect["drill_laser"] = loadfx( "vfx/gameplay/alien/vfx_alien_drill_laser" );
level._effect["stronghold_explode_med"] = loadfx( "vfx/gameplay/mp/killstreaks/vfx_sentry_gun_explosion" );
level._effect["stronghold_explode_large"] = loadfx( "fx/explosions/aerial_explosion" );
level._effect["alien_hive_explode"] = loadfx( "fx/explosions/alien_hive_explosion" );
level.spawnglowmodel["friendly"] = "mil_emergency_flare_mp";
level.spawnglow["friendly"] = loadfx( "fx/misc/flare_ambient_green" );
}
drill_think()
{
level endon( "game_ended" );
while ( !isdefined( level.players ) || level.players.size < 1 )
wait 0.05;
level.drill_health_hardcore = 1250;
if ( maps\mp\alien\_utility::isplayingsolo() )
level.drill_health_hardcore = 2000;
level thread drill_threat_think();
var_0 = ( 2822.27, -196, 524.068 );
var_1 = common_scripts\utility::getstruct( "drill_loc", "targetname" );
if ( isdefined( var_1 ) )
var_0 = var_1.origin;
var_2 = ( 1.287, 0.995, -103.877 );
if ( isdefined( var_1 ) && isdefined( var_1.angles ) )
var_2 = var_1.angles;
level waittill( "spawn_intro_drill", var_3, var_4 );
var_5 = 1;
if ( isdefined( level.initial_drill_origin ) && isdefined( level.initial_drill_angles ) )
{
var_0 = level.initial_drill_origin;
var_2 = level.initial_drill_angles;
var_5 = 0;
}
if ( isdefined( var_3 ) && isdefined( var_4 ) )
{
var_0 = var_3;
var_2 = var_4;
var_5 = 0;
}
var_6 = undefined;
for (;;)
{
spawn_drill_raw( "mp_laser_drill", var_0, var_2, var_6, var_5 );
var_5 = 1;
level waittill( "new_drill", var_0, var_2, var_6 );
assertex( isdefined( drop_loc ), "Drill dropped at invalid position" );
wait 0.05;
}
}
drop_drill( var_0, var_1, var_2 )
{
level notify( "new_drill", var_0, var_1, var_2 );
}
spawn_drill_raw( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( var_4 ) )
var_4 = 1;
level.drill_carrier = undefined;
if ( isdefined( level.drill ) )
{
level.drill delete();
level.drill = undefined;
}
level.drill = spawn( "script_model", var_1 );
level.drill setmodel( var_0 );
level.drill set_drill_icon();
level.drill.state = "idle";
if ( var_4 )
level.drill thread angles_to_ground( var_1, var_2, ( 0, 0, -4 ) );
else
level.drill.angles = var_2;
if ( common_scripts\utility::flag_exist( "intro_sequence_complete" ) && !common_scripts\utility::flag( "intro_sequence_complete" ) )
common_scripts\utility::flag_wait( "intro_sequence_complete" );
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) )
maps\mp\alien\_outline_proto::add_to_drill_preplant_watch_list( level.drill );
if ( !maps\mp\alien\_utility::is_true( level.automatic_drill ) )
level.drill thread drill_pickup_listener( var_3 );
level notify( "drill_spawned" );
}
enable_alt_drill_pickup( var_0 )
{
assert( isdefined( level.drill_use_trig ) );
level.drill_use_trig.origin = var_0.origin + ( 0, 0, 24 );
}
disable_alt_drill_pickup()
{
assert( isdefined( level.drill_use_trig ) );
level.drill_use_trig.origin = level.drill_use_trig.original_origin;
}
drill_pickup_listener( var_0 )
{
self endon( "death" );
level endon( "game_ended" );
level endon( "new_drill" );
if ( isdefined( level.drill_use_trig ) )
var_1 = level.drill_use_trig;
else
var_1 = self;
if ( !maps\mp\alien\_utility::is_true( level.prevent_drill_pickup ) )
{
if ( isdefined( level.drill_use_trig ) )
level.drill_use_trig enable_alt_drill_pickup( self );
else
var_1 makeusable();
}
var_1 setcursorhint( "HINT_ACTIVATE" );
var_1 sethintstring( &"ALIEN_COLLECTIBLES_PICKUP_BOMB" );
for (;;)
{
var_1 waittill( "trigger", var_2 );
if ( var_2 maps\mp\alien\_utility::is_holding_deployable() )
{
var_2 maps\mp\_utility::setlowermessage( "cant_buy", &"ALIEN_COLLECTIBLES_PLAYER_HOLDING", 3 );
continue;
}
if ( var_2 getstance() == "prone" || var_2 getstance() == "crouch" )
{
var_2 maps\mp\_utility::setlowermessage( "change_stance", &"ALIENS_PATCH_CHANGE_STANCE", 3 );
continue;
}
if ( maps\mp\alien\_utility::is_true( var_2.picking_up_item ) )
continue;
if ( maps\mp\alien\_utility::is_true( var_2.iscarrying ) )
continue;
var_2.has_special_weapon = 1;
var_2 common_scripts\utility::_disableusability();
var_2 thread delayed_enable_usability();
if ( isplayer( var_2 ) )
break;
}
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) )
maps\mp\alien\_outline_proto::remove_from_drill_preplant_watch_list( level.drill );
if ( isdefined( level.drill_use_trig ) )
level.drill_use_trig disable_alt_drill_pickup();
level notify( "drill_pickedup", var_2 );
self playsound( "extinction_item_pickup" );
level.drill_carrier = var_2;
level.last_drill_pickup_origin = common_scripts\utility::drop_to_ground( self.origin, 16, -32 );
level.last_drill_pickup_angles = self.angles;
level.drill_carrier set_drill_icon( 1 );
self.state = "carried";
var_2 thread drop_drill_on_death();
var_2 thread drop_drill_on_disconnect();
var_2.lastweapon = var_2 getcurrentweapon();
var_2 maps\mp\_utility::_giveweapon( "alienbomb_mp" );
var_2 switchtoweapon( "alienbomb_mp" );
var_2 disableweaponswitch();
var_2 common_scripts\utility::_disableoffhandweapons();
if ( isdefined( var_0 ) )
var_0 delete();
var_2 notify( "kill_spendhint" );
var_2 notify( "dpad_cancel" );
self delete();
}
delayed_enable_usability()
{
self endon( "death" );
self endon( "disconnect" );
wait 1;
common_scripts\utility::_enableusability();
}
drop_drill_on_death()
{
level endon( "game_ended" );
level endon( "new_drill" );
level endon( "drill_planted" );
level endon( "drill_dropping" );
self notify( "watching_drop_drill_on_death" );
self endon( "watching_drop_drill_on_death" );
common_scripts\utility::waittill_either( "death", "last_stand" );
self takeweapon( "alienbomb_mp" );
self enableweaponswitch();
self switchtoweapon( self.lastweapon );
common_scripts\utility::_enableoffhandweapons();
level.drill_carrier = undefined;
var_0 = getgroundposition( self.last_death_pos + ( 0, 0, 4 ), 8 );
var_1 = self.angles;
if ( maps\mp\alien\_utility::is_true( self.kill_trigger_event_processed ) )
{
var_2 = common_scripts\utility::getclosest( self.origin, level.killtriggerspawnlocs );
var_0 = getgroundposition( var_2.origin + ( 0, 0, 4 ), 8 );
if ( !isdefined( var_2.angles ) )
var_2.angles = ( 0, 0, 0 );
var_1 = var_2.angles;
}
drop_drill( var_0, var_1 );
}
drop_drill_on_disconnect()
{
level endon( "drill_dropping" );
level endon( "game_ended" );
self endon( "death" );
self endon( "last_stand" );
self waittill( "disconnect" );
playfx( level._effect["alien_teleport"], level.last_drill_pickup_origin );
playfx( level._effect["alien_teleport_dist"], level.last_drill_pickup_origin );
drop_drill( level.last_drill_pickup_origin, level.last_drill_pickup_angles );
foreach ( var_1 in level.players )
{
if ( !isalive( var_1 ) )
continue;
if ( var_1 == self )
continue;
var_1 maps\mp\_utility::setlowermessage( "drill_overboard", &"ALIEN_COLLECTIBLES_DRILL_OUTOFPLAY", 4 );
}
}
teleport_drill( var_0 )
{
wait 5;
if ( isdefined( level.drill ) && !isdefined( level.drill_carrier ) && distance( var_0, level.drill.origin ) > 1250 )
{
var_0 = common_scripts\utility::drop_to_ground( var_0, 16, -64 );
level.drill angles_to_ground( var_0, level.drill.angles, ( 0, 0, -4 ) );
level.drill set_drill_icon();
enable_alt_drill_pickup( level.drill );
}
}
drilling( var_0, var_1 )
{
if ( isdefined( level.set_drill_state_drilling_override ) )
self thread [[ level.set_drill_state_drilling_override ]]( var_0, var_1 );
else
{
self endon( "stop_listening" );
self endon( "drill_complete" );
thread set_drill_state_plant( var_0, var_1 );
level.drill endon( "death" );
level.drill.owner = var_1;
level.encounter_name = self.target;
level.drill.start_time = gettime();
common_scripts\utility::flag_set( "drill_drilling" );
level.drill common_scripts\utility::waittill_any_timeout( 5, "drill_finished_plant_anim" );
init_drilling_parameters();
level.drill.start_time = gettime();
thread set_drill_state_run( var_1 );
maps\mp\alien\_hive::hive_play_drill_planted_animations();
level.drill waittill( "offline", var_2, var_3 );
thread set_drill_state_offline();
common_scripts\utility::flag_set( "drill_destroyed" );
wait 2;
maps\mp\gametypes\aliens::alienendgame( "axis", maps\mp\alien\_hud::get_end_game_string_index( "drill_destroyed" ) );
}
}
set_drill_attack_setup()
{
var_0 = [];
var_0["brute"][0] = maps\mp\alien\_utility::set_attack_sync_direction( ( 0, 1, 0 ), "alien_drill_attack_drill_F_enter", "alien_drill_attack_drill_F_loop", "alien_drill_attack_drill_F_exit", "attack_drill_front", "attack_drill" );
var_0["brute"][1] = maps\mp\alien\_utility::set_attack_sync_direction( ( -1, 0, 0 ), "alien_drill_attack_drill_R_enter", "alien_drill_attack_drill_R_loop", "alien_drill_attack_drill_R_exit", "attack_drill_right", "attack_drill" );
var_0["brute"][2] = maps\mp\alien\_utility::set_attack_sync_direction( ( 1, 0, 0 ), "alien_drill_attack_drill_L_enter", "alien_drill_attack_drill_L_loop", "alien_drill_attack_drill_L_exit", "attack_drill_left", "attack_drill" );
var_0["goon"][0] = maps\mp\alien\_utility::set_attack_sync_direction( ( 0, 1, 0 ), "alien_goon_drill_attack_drill_F_enter", "alien_goon_drill_attack_drill_F_loop", "alien_goon_drill_attack_drill_F_exit", "attack_drill_front", "attack_drill" );
var_0["goon"][1] = maps\mp\alien\_utility::set_attack_sync_direction( ( -1, 0, 0 ), "alien_goon_drill_attack_drill_R_enter", "alien_goon_drill_attack_drill_R_loop", "alien_goon_drill_attack_drill_R_exit", "attack_drill_right", "attack_drill" );
var_0["goon"][2] = maps\mp\alien\_utility::set_attack_sync_direction( ( 1, 0, 0 ), "alien_goon_drill_attack_drill_L_enter", "alien_goon_drill_attack_drill_L_loop", "alien_goon_drill_attack_drill_L_exit", "attack_drill_left", "attack_drill" );
var_1[0] = "offline";
var_1[1] = "death";
var_1[2] = "drill_complete";
var_1[3] = "destroyed";
maps\mp\alien\_utility::set_synch_attack_setup( var_0, 1, var_1, undefined, ::drill_synch_attack_play_anim, ::drill_synch_attack_play_anim, ::drill_synch_attack_exit, "drill" );
}
drill_synch_attack_play_anim( var_0 )
{
level.drill scriptmodelclearanim();
level.drill scriptmodelplayanim( var_0 );
}
drill_synch_attack_exit( var_0, var_1 )
{
if ( isdefined( var_0 ) )
{
level.drill scriptmodelclearanim();
level.drill scriptmodelplayanim( var_0 );
wait( var_1 );
}
if ( isalive( level.drill ) && !common_scripts\utility::flag( "drill_detonated" ) )
{
level.drill scriptmodelclearanim();
level.drill scriptmodelplayanim( "alien_drill_loop" );
}
}
use_alternate_drill()
{
return 1;
}
watch_to_repair( var_0 )
{
self endon( "drill_complete" );
self endon( "death" );
var_0 endon( "hive_dying" );
wait 5.0;
self makeunusable();
var_1 = 100;
var_2 = 1000;
var_3 = 4000;
var_4 = 2000;
for (;;)
{
self makeunusable();
for (;;)
{
var_5 = ( self.health - 20000 ) / level.drill_health_hardcore;
if ( var_5 < 0.75 )
break;
wait 1;
}
self makeusable();
if ( isdefined( level.drill_repair ) )
self sethintstring( level.drill_repair );
else
self sethintstring( &"ALIEN_COLLECTIBLES_DRILL_REPAIR" );
self waittill( "trigger", var_6 );
if ( maps\mp\alien\_utility::is_true( var_6.iscarrying ) )
continue;
self sethintstring( "" );
var_7 = level.players.size;
var_6.isrepairing = 1;
level notify( "dlc_vo_notify", "drill_repair", var_6 );
var_8 = int( var_3 * var_6 maps\mp\alien\_perk_utility::perk_getdrilltimescalar() * var_6.drillspeedmodifier );
if ( var_7 > 1 )
var_8 = int( ( var_3 + ( var_7 - 1 ) * var_4 ) * var_6 maps\mp\alien\_perk_utility::perk_getdrilltimescalar() * var_6.drillspeedmodifier );
var_9 = useholdthink( var_6, var_8 );
if ( !var_9 )
{
var_6.isrepairing = 0;
continue;
}
if ( isdefined( level.drill_sfx_lp ) )
{
if ( isdefined( level.drill_overheat_lp_02 ) )
level.drill_overheat_lp_02 stoploopsound();
if ( !var_0 maps\mp\alien\_utility::is_door() && !var_0 maps\mp\alien\_utility::is_door_hive() && level.script != "mp_alien_dlc3" )
{
if ( level.script == "mp_alien_last" )
level.drill_sfx_lp playloopsound( "alien_conduit_on_lp" );
else
level.drill_sfx_lp playloopsound( "alien_laser_drill_lp" );
}
}
level notify( "dlc_vo_notify", "drill_repaired", var_6 );
level notify( "drill_repaired" );
var_6.isrepairing = 0;
var_0 thread drill_reset_bbprint( var_6 );
var_6 maps\mp\alien\_persistence::give_player_currency( var_1 );
self.health = level.drill_health_hardcore + 20000;
level.drill_last_health = level.drill_health_hardcore + 20000;
update_drill_health_hud();
var_6.isrepairing = 0;
var_6 maps\mp\alien\_persistence::eog_player_update_stat( "drillrestarts", 1 );
wait 1.0;
}
}
set_drill_state_plant( var_0, var_1 )
{
if ( isdefined( level.drill ) )
{
level.drill delete();
level.drill = undefined;
}
level.drill = spawn( "script_model", var_0 );
level.drill setmodel( "mp_laser_drill" );
level.drill.state = "planted";
level.drill.angles = self.angles;
if ( !maps\mp\alien\_utility::is_door() )
level.drill set_drill_attack_setup();
if ( isdefined( level.drill_attack_setup_override ) )
level.drill [[ level.drill_attack_setup_override ]]();
var_2 = 150;
if ( use_alternate_drill() )
{
var_2 = level.drill_health_hardcore;
level.drill thread watch_to_repair( self );
}
level.drill.maxhealth = 20000 + var_2;
level.drill.health = int( 20000 + var_2 * var_1 maps\mp\alien\_perk_utility::perk_getdrillhealthscalar() );
level.drill thread watch_drill_health_for_challenge();
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) )
maps\mp\alien\_outline_proto::add_to_outline_drill_watch_list( level.drill, 0 );
thread sfx_drill_plant();
self.depth_marker = gettime();
level thread maps\mp\alien\_music_and_dialog::playvoforbombplant( var_1 );
destroy_drill_icon();
if ( !maps\mp\alien\_utility::is_door() && !maps\mp\alien\_utility::is_door_hive() )
{
level.drill scriptmodelplayanim( "alien_drill_enter" );
wait 4;
}
else
wait 0.5;
level.drill notify( "drill_finished_plant_anim" );
}
watch_drill_health_for_challenge()
{
self endon( "drill_complete" );
self endon( "death" );
for (;;)
{
var_0 = ( level.drill.health - 20000 ) / level.drill_health_hardcore;
if ( var_0 < 0.5 )
{
maps\mp\alien\_challenge::update_challenge( "no_stuck_drill", 0 );
break;
}
wait 1;
}
}
drill_threat_think()
{
level endon( "game_ended" );
var_0 = 1;
for (;;)
{
if ( !isdefined( level.drill ) || !issentient( level.drill ) || !isalive( level.drill ) )
{
wait( var_0 );
continue;
}
if ( use_alternate_drill() )
{
self.drill.threatbias = -1000;
wait( var_0 );
continue;
}
var_1 = 0;
var_2 = 0;
foreach ( var_4 in level.players )
{
if ( isdefined( var_4 ) && isalive( var_4 ) )
{
var_2++;
var_1 = var_1 + distance2d( var_4.origin, level.drill.origin );
}
}
if ( var_2 == 0 )
{
level.drill.threatbias = int( -3000 );
wait( var_0 );
continue;
}
var_6 = var_1 / max( 1, var_2 );
if ( var_6 < 1000 )
level.drill.threatbias = int( -3000 );
else if ( var_6 > 2500 )
level.drill.threatbias = int( -1000 );
else
{
var_7 = 1500;
var_8 = 2000;
var_9 = ( var_6 - 1000 ) / var_7;
var_10 = var_9 * var_8;
level.drill.threatbias = int( -3000 + var_10 );
}
wait( var_0 );
}
}
set_drill_state_run( var_0 )
{
if ( isdefined( level.set_drill_state_run_override ) )
{
self thread [[ level.set_drill_state_run_override ]]( var_0 );
return;
}
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 = 150;
if ( use_alternate_drill() )
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" );
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 );
}
var_5 = level.drill gettagangles( "tag_laser" );
var_6 = anglestoforward( var_5 );
var_7 = anglestoup( var_5 );
var_8 = vectorcross( var_6, ( 0, 0, 1 ) );
var_9 = level.drill gettagorigin( "tag_laser_end" ) - ( 0, 0, 16 ) + var_8 * 4 * -1 + var_6 * 1.0 * -1;
var_10 = level.drill gettagorigin( "tag_laser" ) - ( 0, 0, 8 );
level.drill.fxent = spawnfx( level._effect["drill_laser_contact"], var_9 );
level.drill.fxlaserent = spawnfx( level._effect["drill_laser"], var_10, var_6, var_7 );
var_11 = maps\mp\alien\_utility::is_door() || maps\mp\alien\_utility::is_door_hive();
thread sfx_drill_on( var_11 );
if ( maps\mp\alien\_utility::is_door() )
{
level notify( "drill_start_door_fx" );
level.drill scriptmodelplayanim( "alien_drill_open_door" );
}
else if ( isdefined( level.custom_hive_logic ) )
level [[ level.custom_hive_logic ]]();
else
{
triggerfx( level.drill.fxent );
triggerfx( level.drill.fxlaserent );
level.drill scriptmodelplayanim( "alien_drill_loop" );
}
thread handle_bomb_damage();
self.depth_marker = gettime();
thread monitor_drill_complete( self.depth );
thread maps\mp\alien\_hive::hive_pain_monitor();
thread maps\mp\alien\_hive::set_hive_icon( "waypoint_alien_defend" );
destroy_drill_icon();
maps\mp\alien\_hud::turn_on_drill_meter_hud( self.depth );
level thread watch_drill_depth_for_vo( self.depth );
}
watch_drill_depth_for_vo( var_0 )
{
level endon( "drill_detonated" );
level endon( "game_ended" );
wait( var_0 / 2 );
level thread maps\mp\alien\_music_and_dialog::playvofordrillhalfway();
}
monitor_drill_complete( var_0 )
{
self endon( "death" );
self endon( "stop_listening" );
level.drill endon( "offline" );
while ( self.layers.size > 0 )
{
var_1 = self.layers[self.layers.size - 1];
var_2 = self.layers.size == 1;
var_3 = var_0 - var_1;
if ( var_2 )
childthread maps\mp\alien\_music_and_dialog::playmusicbeforereachlayer( var_3 );
var_4 = "remaining_depth_to_layer is negative, ";
var_4 = var_4 + "[depth=" + var_0 + "][layer_depth=" + var_1 + "][layer index=" + ( self.layers.size - 1 ) + "]";
var_4 = var_4 + "[hive.origin=" + self.origin + "]";
common_scripts\utility::waittill_any_timeout( var_3, "force_drill_complete" );
self.layer_completed++;
setomnvar( "ui_alien_drill_layer_completed", self.layer_completed );
self.layers = common_scripts\utility::array_remove( self.layers, var_1 );
var_0 = var_1;
reach_layer_earthquake();
if ( !maps\mp\alien\_utility::is_door() )
reach_layer_spawn_event( var_2 );
}
self notify( "drill_complete" );
level.drill notify( "drill_complete" );
level.encounter_name = undefined;
common_scripts\utility::flag_clear( "drill_drilling" );
common_scripts\utility::flag_set( "drill_detonated" );
foreach ( var_6 in level.players )
{
if ( !isalive( var_6 ) || maps\mp\alien\_utility::is_true( var_6.isreviving ) || maps\mp\alien\_utility::is_true( var_6.being_revived ) )
continue;
var_6 setclientomnvar( "ui_securing_progress", 0 );
var_6 setclientomnvar( "ui_securing", 0 );
}
setomnvar( "ui_alien_drill_state", 0 );
}
reach_layer_earthquake()
{
var_0 = 0.4;
var_1 = 1.75;
if ( maps\mp\alien\_utility::is_door() )
var_0 = 0.15;
thread maps\mp\alien\_hive::warn_all_players( var_1, var_0 );
}
reach_layer_spawn_event( var_0 )
{
if ( var_0 )
return;
var_1 = "reached_layer_" + self.layer_completed;
maps\mp\alien\_spawn_director::activate_spawn_event( var_1 );
}
init_drilling_parameters()
{
if ( maps\mp\alien\_utility::is_door() )
{
self.depth = 30;
self.total_depth = self.depth;
self.layer_completed = 0;
self.layers[0] = 0;
setomnvar( "ui_alien_drill_layers_table_line", 599 + level.current_cycle_num + 1 );
setomnvar( "ui_alien_drill_layer_completed", self.layer_completed );
}
else
{
var_0 = level.cycle_data.cycle_drill_layers[level.current_cycle_num + 1];
self.depth = var_0[var_0.size - 1];
self.total_depth = self.depth;
self.layer_completed = 0;
self.layers[0] = 0;
for ( var_1 = 0; var_1 <= var_0.size - 2; var_1++ )
self.layers[self.layers.size] = var_0[var_1];
setomnvar( "ui_alien_drill_layers_table_line", 599 + level.current_cycle_num + 1 );
setomnvar( "ui_alien_drill_layer_completed", self.layer_completed );
}
}
set_drill_state_offline()
{
self endon( "death" );
self endon( "stop_listening" );
level.drill.state = "offline";
if ( isdefined( level.drill.fxent ) )
level.drill.fxent delete();
if ( isdefined( level.drill.fxlaserent ) )
level.drill.fxlaserent delete();
if ( maps\mp\alien\_utility::is_door() )
level notify( "drill_stop_door_fx" );
thread sfx_drill_offline();
var_0 = ( gettime() - self.depth_marker ) / 1000;
self.depth = max( 0, self.depth - var_0 );
level.drill scriptmodelplayanim( "alien_drill_operate_end" );
wait 1.4;
level.drill scriptmodelplayanim( "alien_drill_nonoperate" );
level.drill makeusable();
level.drill setcursorhint( "HINT_ACTIVATE" );
level.drill sethintstring( &"ALIEN_COLLECTIBLES_PLANT_BOMB" );
level.drill setcandamage( 0 );
level.drill freeentitysentient();
maps\mp\alien\_hive::destroy_hive_icon();
level.drill set_drill_icon();
setomnvar( "ui_alien_drill_state", 2 );
}
handle_bomb_damage()
{
self endon( "death" );
self endon( "stop_listening" );
level endon( "hives_cleared" );
level.drill endon( "death" );
level.drill endon( "offline" );
var_0 = 0;
var_1 = gettime();
level.drill_last_health = level.drill.health;
var_2 = 0;
var_3 = 0;
var_4 = 0;
for (;;)
{
level.drill waittill( "damage", var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12, var_13, var_14 );
if ( isdefined( var_6 ) && isai( var_6 ) )
level.drill_last_health = level.drill_last_health - var_5;
else if ( isdefined( var_14 ) && var_14 == "alien_minion_explosion" )
level.drill_last_health = level.drill_last_health - var_5;
else
{
level.drill.health = level.drill_last_health;
continue;
}
if ( isdefined( level.level_drill_damage_adjust_function ) )
[[ level.level_drill_damage_adjust_function ]]( var_5, var_6, var_14 );
level.drill.health = level.drill_last_health;
maps\mp\alien\_gamescore::update_team_encounter_performance( maps\mp\alien\_gamescore::get_drill_score_component_name(), "drill_damage_taken", var_5 );
maps\mp\alien\_alien_matchdata::inc_drill_heli_damages( var_5 );
if ( level.script == "mp_alien_last" )
{
if ( isdefined( var_6 ) && ( !isdefined( var_6.team ) || var_6.team == "axis" ) )
self playsound( "scn_dscnt_alien_pod_hit" );
}
if ( level.drill.health < 20000 )
{
maps\mp\alien\_hud::update_drill_health( 0 );
level.drill notify( "offline", var_6, var_5 );
continue;
}
if ( !isdefined( self.icon ) )
continue;
var_16 = ( level.drill.health - 20000 ) / 150;
var_16 = max( 0, min( 1, var_16 ) );
var_17 = var_16 * var_16;
var_18 = var_17;
var_19 = var_18;
self.icon.color = ( 1, var_18, var_19 );
if ( use_alternate_drill() )
{
var_20 = ( level.drill.health - 20000 ) / level.drill_health_hardcore;
update_drill_health_hud();
if ( var_20 <= 0.75 && !var_2 )
{
if ( isdefined( level.drill_repair_hint ) )
iprintlnbold( level.drill_repair_hint );
else
iprintlnbold( &"ALIEN_COLLECTIBLES_DRILL_REPAIR_HINT" );
var_2 = 1;
}
else if ( var_20 <= 0.5 && !var_3 )
{
if ( isdefined( level.drill_repair_hint ) )
iprintlnbold( level.drill_repair_hint );
else
iprintlnbold( &"ALIEN_COLLECTIBLES_DRILL_REPAIR_HINT" );
var_3 = 1;
}
else if ( var_20 <= 0.25 && !var_4 )
{
if ( isdefined( level.drill_repair_hint_urgent ) )
iprintlnbold( level.drill_repair_hint_urgent );
else
iprintlnbold( &"ALIEN_COLLECTIBLES_REACT_DRILL" );
var_4 = 1;
}
if ( var_20 <= 0.25 )
thread sfx_overheat();
if ( var_20 < 0.5 && gettime() - var_1 > var_0 )
level thread maps\mp\alien\_music_and_dialog::playvofordrillhot();
else if ( gettime() - var_1 > var_0 )
level thread maps\mp\alien\_music_and_dialog::playvofordrilldamaged();
var_1 = gettime();
}
}
}
sfx_overheat()
{
if ( !maps\mp\alien\_utility::is_door() && !maps\mp\alien\_utility::is_door_hive() && level.script != "mp_alien_dlc3" )
level.drill_sfx_lp stoploopsound( "alien_laser_drill_lp" );
if ( !isdefined( level.drill_overheat_lp_02 ) )
{
level.drill_overheat_lp_02 = spawn( "script_origin", level.drill.origin );
level.drill_overheat_lp_02 linkto( level.drill );
if ( level.script == "mp_alien_last" )
{
level.drill_sfx_lp stoploopsound( "alien_conduit_on_lp" );
level.drill_overheat_lp_02 playloopsound( "alien_conduit_damaged_lp" );
return;
}
}
if ( level.script == "mp_alien_dlc3" )
level.drill_overheat_lp_02 playloopsound( "alien_drill_scanner_overheat_lp" );
else
level.drill_overheat_lp_02 playloopsound( "alien_laser_drill_overheat_lp" );
}
drill_detonate()
{
if ( isdefined( level.drill_detonate_override ) )
{
self thread [[ level.drill_detonate_override ]]();
return;
}
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( level.drill );
if ( !maps\mp\alien\_utility::is_door() && !maps\mp\alien\_utility::is_door_hive() )
{
thread sfx_drill_off( 0 );
thread kill_sequence();
}
if ( isdefined( level.drill.fxent ) )
level.drill.fxent delete();
if ( isdefined( level.drill.fxlaserent ) )
level.drill.fxlaserent delete();
if ( maps\mp\alien\_utility::is_door() )
level notify( "drill_stop_door_fx" );
level.drill scriptmodelclearanim();
if ( !maps\mp\alien\_utility::is_door() )
{
level.drill scriptmodelplayanim( "alien_drill_end" );
wait 3.8;
}
if ( !isdefined( self.last_hive ) || !self.last_hive )
{
var_0 = level.drill.origin + ( 0, 0, 8 );
drop_drill( var_0, self.angles - ( 0, 90, 0 ) );
}
if ( maps\mp\alien\_utility::is_door() || maps\mp\alien\_utility::is_door_hive() )
maps\mp\_utility::delaythread( 3, ::open_door );
else
thread maps\mp\alien\_hive::delete_removables();
thread remove_spawner();
thread fx_ents_playfx();
maps\mp\alien\_hive::show_dead_hive_model();
thread do_radius_damage();
if ( isdefined( self.last_hive ) && self.last_hive )
{
common_scripts\utility::flag_set( "hives_cleared" );
level thread detonate_drill_when_nuke_goes_off( self );
}
common_scripts\utility::flag_clear( "drill_detonated" );
wait 8;
level thread maps\mp\alien\_music_and_dialog::playvoforbombdetonate( self );
}
do_radius_damage()
{
var_0 = 300;
foreach ( var_2 in self.scriptables )
{
radiusdamage( var_2.origin, var_0, 0, 0, var_2 );
common_scripts\utility::waitframe();
}
}
detonate_drill_when_nuke_goes_off( var_0 )
{
if ( isdefined( level.drill ) )
{
level.drill setcandamage( 0 );
level.drill freeentitysentient();
level.drill makeunusable();
}
level waittill( "nuke_went_off" );
wait 1.5;
var_1 = level._effect["stronghold_explode_med"];
var_2 = var_0.origin;
if ( isdefined( level.drill ) )
var_2 = level.drill.origin;
playfx( var_1, var_2 );
if ( isdefined( level.drill ) )
{
level.drill_carrier = undefined;
level.drill delete();
}
}
kill_sequence()
{
playfx( level._effect["stronghold_explode_large"], self.origin );
if ( !maps\mp\alien\_utility::is_door() )
thread maps\mp\alien\_hive::sfx_destroy_hive();
if ( isalive( level.drill ) )
{
foreach ( var_1 in self.scriptables )
{
var_1 thread maps\mp\alien\_hive::hive_explode( 1 );
common_scripts\utility::waitframe();
}
}
}
createuseent()
{
var_0 = spawn( "script_origin", self.origin );
var_0.curprogress = 0;
var_0.usetime = 0;
var_0.userate = 1;
var_0.inuse = 0;
var_0 thread deleteuseent( self );
return var_0;
}
deleteuseent( var_0 )
{
self endon( "death" );
var_0 waittill( "death" );
self delete();
}
cancel_repair_on_hive_death( var_0 )
{
var_0 endon( "disconnect" );
self notify( "cancel_repair_on_hive_death" );
self endon( "cancel_repair_on_hive_death" );
level endon( "drill_repaired" );
self waittill( "drill_complete" );
if ( isalive( var_0 ) )
{
var_0 notify( "drill_repair_weapon_management" );
if ( var_0.disabledweapon > 0 )
var_0 common_scripts\utility::_enableweapon();
if ( maps\mp\alien\_utility::is_true( var_0.hasprogressbar ) )
var_0.hasprogressbar = 0;
var_0.isrepairing = 0;
}
}
useholdthink( var_0, var_1 )
{
thread cancel_repair_on_hive_death( var_0 );
self.curprogress = 0;
self.inuse = 1;
self.userate = 1;
if ( isdefined( var_1 ) )
self.usetime = var_1;
else
self.usetime = 3000;
if ( !var_0 maps\mp\alien\_perk_utility::has_perk( "perk_rigger", [ 0, 1, 2, 3, 4 ] ) )
var_0 maps\mp\alien\_utility::disable_weapon_timeout( var_1 + 0.05, "drill_repair_weapon_management" );
var_0 thread personalusebar( self );
var_0.hasprogressbar = 1;
var_2 = useholdthinkloop( var_0, self, 18496 );
if ( isalive( var_0 ) )
{
var_0.hasprogressbar = 0;
if ( !var_0 maps\mp\alien\_perk_utility::has_perk( "perk_rigger", [ 0, 1, 2, 3, 4 ] ) )
var_0 maps\mp\alien\_utility::enable_weapon_wrapper( "drill_repair_weapon_management" );
}
if ( !isdefined( self ) )
return 0;
self.inuse = 0;
self.curprogress = 0;
return var_2;
}
personalusebar( var_0 )
{
var_1 = 2;
if ( level.script == "mp_alien_last" )
var_1 = 7;
self endon( "disconnect" );
self setclientomnvar( "ui_securing", var_1 );
var_2 = -1;
while ( maps\mp\_utility::isreallyalive( self ) && isdefined( var_0 ) && var_0.inuse && !level.gameended )
{
if ( var_2 != var_0.userate )
{
if ( var_0.curprogress > var_0.usetime )
var_0.curprogress = var_0.usetime;
}
var_2 = var_0.userate;
self setclientomnvar( "ui_securing_progress", var_0.curprogress / var_0.usetime );
wait 0.05;
}
self setclientomnvar( "ui_securing_progress", 0 );
self setclientomnvar( "ui_securing", 0 );
}
useholdthinkloop( var_0, var_1, var_2 )
{
while ( !level.gameended && isdefined( self ) && maps\mp\_utility::isreallyalive( var_0 ) && var_0 usebuttonpressed() && ( !isdefined( var_0.laststand ) || !var_0.laststand ) && self.curprogress < self.usetime )
{
var_3 = ( self.health - 20000 ) / level.drill_health_hardcore;
if ( var_3 <= 0 )
return 0;
if ( isdefined( var_1 ) && isdefined( var_2 ) )
{
if ( distancesquared( var_0.origin, var_1.origin ) > var_2 )
return 0;
}
self.curprogress = self.curprogress + 50 * self.userate;
self.userate = 1;
if ( self.curprogress >= self.usetime )
return maps\mp\_utility::isreallyalive( var_0 );
wait 0.05;
}
return 0;
}
draw_line( var_0, var_1, var_2, var_3 )
{
if ( isdefined( var_3 ) )
{
for ( var_4 = 0; var_4 < var_3; var_4++ )
wait 0.05;
}
else
{
for (;;)
wait 0.05;
}
}
angles_to_ground( var_0, var_1, var_2 )
{
var_3 = var_0 + ( 0, 0, 16 );
var_4 = var_0 - ( 0, 0, 64 );
var_5 = bullettrace( var_3, var_4, 0, self );
var_6 = var_5["normal"] * -1;
var_7 = vectortoangles( var_6 );
var_8 = vectortoangles( anglestoup( var_7 ) )[1] - vectortoangles( anglestoforward( var_1 ) )[1];
var_9 = vectornormalize( var_6 );
var_10 = vectornormalize( anglestoup( vectortoangles( var_6 ) ) );
var_11 = vectornormalize( anglestoright( vectortoangles( var_6 ) ) );
var_10 = rotatepointaroundvector( var_9, var_10, var_8 - 90 );
var_11 = rotatepointaroundvector( var_9, var_11, var_8 - 90 );
self.angles = axistoangles( var_10, var_11, var_9 );
if ( abs( self.angles[2] ) > 45 )
self.angles = ( self.angles[0], self.angles[1], 0 );
if ( abs( self.angles[0] ) > 45 )
self.angles = ( 0, self.angles[1], self.angles[2] );
self.origin = var_0 + var_2;
}
watchbomb()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
if ( self hasweapon( "alienbomb_mp" ) )
{
self takeweapon( "alienbomb_mp" );
self enableweaponswitch();
}
for (;;)
{
self waittill( "grenade_fire", var_0, var_1 );
if ( var_1 == "alienbomb" || var_1 == "alienbomb_mp" )
{
var_0.owner = self;
var_0 setotherent( self );
var_0.team = self.team;
var_0 thread watchbombstuck( self );
}
}
}
watchbombstuck( var_0 )
{
level endon( "game_ended" );
var_0 endon( "death" );
var_0 endon( "disconnect" );
self hide();
common_scripts\utility::waittill_any_timeout( 0.05, "missile_stuck" );
var_1 = self aiphysicstrace( var_0.origin + ( 0, 0, 8 ), var_0.origin - ( 0, 0, 12 ), undefined, undefined, 1, 1 );
if ( var_1["fraction"] == 1 )
{
var_0 takeweapon( "alienbomb_mp" );
var_0 giveweapon( "alienbomb_mp" );
var_0 setweaponammostock( "alienbomb_mp", var_0 getweaponammostock( "alienbomb_mp" ) + 1 );
var_0 switchtoweapon( "alienbomb_mp" );
self delete();
return;
}
else
{
self.origin = var_1["position"];
var_2 = var_1["entity"];
}
self.angles = self.angles * ( 0, 1, 1 );
level notify( "drill_dropping" );
foreach ( var_4 in level.stronghold_hive_locs )
{
if ( var_4 maps\mp\alien\_hive::is_blocker_hive() )
continue;
if ( !var_4 maps\mp\alien\_hive::dependent_hives_removed() )
continue;
if ( distance( var_4.origin, self.origin ) < 80 )
{
var_4 notify( "trigger", var_0 );
earthquake( 0.25, 0.5, self.origin, 128 );
var_0 takeweapon( "alienbomb_mp" );
if ( !var_0 maps\mp\alien\_utility::has_special_weapon() )
var_0 enableweaponswitch();
var_0 restore_last_weapon();
var_0 common_scripts\utility::_enableoffhandweapons();
self delete();
return;
}
}
if ( isdefined( level.watch_bomb_stuck_override ) )
{
if ( [[ level.watch_bomb_stuck_override ]]( var_0 ) )
return;
}
drop_drill( self.origin, self.angles, self );
earthquake( 0.25, 0.5, self.origin, 128 );
var_0 takeweapon( "alienbomb_mp" );
if ( !var_0 maps\mp\alien\_utility::has_special_weapon() )
var_0 enableweaponswitch();
var_0 restore_last_weapon();
var_0 common_scripts\utility::_enableoffhandweapons();
level thread maps\mp\alien\_outline_proto::update_drill_outline();
self delete();
}
restore_last_weapon()
{
if ( self.lastweapon != "aliendeployable_crate_marker_mp" )
self switchtoweapon( self.lastweapon );
else
self switchtoweapon( self getweaponslistprimaries()[0] );
}
player_carry_bomb_init()
{
if ( !isdefined( self.carryicon ) )
{
if ( level.splitscreen )
{
self.carryicon = maps\mp\gametypes\_hud_util::createicon( "hud_suitcase_bomb", 33, 33 );
self.carryicon maps\mp\gametypes\_hud_util::setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", -50, -78 );
}
else
{
self.carryicon = maps\mp\gametypes\_hud_util::createicon( "hud_suitcase_bomb", 50, 50 );
self.carryicon maps\mp\gametypes\_hud_util::setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", -50, -65 );
}
self.carryicon.hidewheninmenu = 1;
thread hidecarryiconongameend();
}
self.carryicon.alpha = 0;
}
hidecarryiconongameend()
{
self endon( "disconnect" );
level waittill( "game_ended" );
if ( isdefined( self.carryicon ) )
self.carryicon.alpha = 0;
}
set_drill_icon( var_0 )
{
level notify( "new_bomb_icon" );
destroy_drill_icon( self );
if ( !isdefined( var_0 ) || !var_0 )
{
level.drill_icon = newhudelem();
level.drill_icon setshader( "waypoint_alien_drill", 14, 14 );
level.drill_icon.color = ( 1, 1, 1 );
level.drill_icon setwaypoint( 1, 1 );
level.drill_icon.sort = 1;
level.drill_icon.foreground = 1;
level.drill_icon.alpha = 0.5;
level.drill_icon.x = self.origin[0];
level.drill_icon.y = self.origin[1];
level.drill_icon.z = self.origin[2] + 72;
}
else
maps\mp\_entityheadicons::setheadicon( self.team, "waypoint_alien_drill", ( 0, 0, 72 ), 4, 4, undefined, undefined, undefined, 1, undefined, 0 );
}
destroy_drill_icon( var_0 )
{
if ( isdefined( level.drill_icon ) )
level.drill_icon destroy();
if ( !isdefined( var_0 ) )
return;
remove_headicons_from_players();
}
remove_headicons_from_players()
{
foreach ( var_1 in level.players )
{
if ( isdefined( var_1.entityheadicons ) )
{
foreach ( var_4, var_3 in var_1.entityheadicons )
{
if ( !isdefined( var_3 ) )
continue;
var_3 destroy();
}
}
}
}
remove_spawner()
{
if ( isdefined( self.script_linkto ) )
maps\mp\alien\_spawn_director::remove_spawn_location( self.script_linkto );
}
fx_ents_playfx()
{
foreach ( var_1 in self.fx_ents )
{
playfx( level._effect["stronghold_explode_med"], var_1.origin );
var_1 delete();
}
}
sfx_drill_plant()
{
var_0 = get_drill_entity();
var_0 playsound( "alien_laser_drill_plant" );
}
sfx_drill_on( var_0 )
{
wait 0.1;
var_1 = get_drill_entity();
if ( !isdefined( level.drill_sfx_lp ) )
{
level.drill_sfx_lp = spawn( "script_origin", var_1.origin );
level.drill_sfx_lp linkto( var_1 );
}
if ( !isdefined( level.drill_sfx_dist_lp ) )
{
level.drill_sfx_dist_lp = spawn( "script_origin", var_1.origin );
level.drill_sfx_dist_lp linkto( var_1 );
}
wait 0.1;
if ( var_0 )
{
wait 3.76;
if ( isdefined( level.drill_sfx_lp ) )
level.drill_sfx_lp playloopsound( "alien_laser_drill_door_lp" );
if ( isdefined( level.drill_sfx_dist_lp ) )
level.drill_sfx_dist_lp playloopsound( "alien_laser_drill_door_dist_lp" );
}
else
{
if ( isdefined( level.drill_sfx_lp ) )
level.drill_sfx_lp playloopsound( "alien_laser_drill_lp" );
if ( isdefined( level.drill_sfx_dist_lp ) )
level.drill_sfx_dist_lp playloopsound( "alien_laser_drill_dist_lp" );
}
}
sfx_drill_off( var_0 )
{
var_1 = get_drill_entity();
var_2 = var_1.origin;
if ( !var_0 )
var_1 playsound( "alien_laser_drill_stop" );
else
playsoundatpos( var_2, "alien_laser_drill_stop" );
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 ) )
level.drill_overheat_lp delete();
if ( isdefined( level.drill_overheat_lp_02 ) )
level.drill_overheat_lp_02 delete();
if ( var_0 )
{
wait 2.7;
playsoundatpos( var_2, "alien_laser_drill_door_open" );
}
}
sfx_drill_offline()
{
var_0 = get_drill_entity();
if ( level.script == "mp_alien_dlc3" )
level.drill playsound( "alien_drill_scanner_shutdown" );
else
var_0 playsound( "alien_laser_drill_shutdown" );
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();
}
drill_plant_bbprint( var_0 )
{
drill_generic_bbprint( "aliendrillplant", var_0 );
}
drill_reset_bbprint( var_0 )
{
drill_generic_bbprint( "aliendrillreset", var_0 );
}
drill_generic_bbprint( var_0, var_1 )
{
var_2 = level.current_cycle_num;
var_3 = "unknown hive";
if ( isdefined( self.target ) )
var_3 = self.target;
var_4 = gettime() - level.starttime;
var_5 = "unknown player";
if ( isdefined( var_1.name ) )
var_5 = var_1.name;
var_6 = level.players.size;
var_7 = var_1 maps\mp\alien\_persistence::get_selected_perk_0();
var_8 = var_1 maps\mp\alien\_persistence::get_perk_0_level();
var_9 = var_1 maps\mp\alien\_persistence::get_selected_perk_1();
var_10 = var_1 maps\mp\alien\_persistence::get_perk_1_level();
var_11 = -1;
if ( isdefined( level.drill ) && isdefined( level.drill.health ) && isdefined( level.drill_health_hardcore ) )
var_11 = ( level.drill.health - 20000 ) / level.drill_health_hardcore;
bbprint( var_0, "cyclenum %i hivename %s playtime %f drillhealth %f repairer %s repairerperk0 %s repairerperk1 %s repairerperk0level %s repairerperk1level %s playernum %i ", var_2, var_3, var_4, var_11, var_5, var_7, var_9, var_8, var_10, var_6 );
}
check_for_player_near_hive_with_drill()
{
if ( maps\mp\alien\_utility::is_true( level.automatic_drill ) )
return;
self endon( "disconnect" );
var_0 = 6400;
for (;;)
{
while ( !common_scripts\utility::flag( "drill_drilling" ) )
{
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;
}
foreach ( var_2 in level.stronghold_hive_locs )
{
if ( var_2 maps\mp\alien\_hive::is_blocker_hive() )
continue;
if ( !var_2 maps\mp\alien\_hive::dependent_hives_removed() )
continue;
if ( distancesquared( var_2.origin, self.origin ) < var_0 )
{
if ( !isdefined( level.drill_carrier ) || isdefined( level.drill_carrier ) && level.drill_carrier != self )
{
maps\mp\_utility::setlowermessage( "need_drill", &"ALIEN_COLLECTIBLES_NEED_DRILL", undefined, 10 );
while ( player_should_see_drill_hint( var_2, var_0, 1 ) )
wait 0.05;
maps\mp\_utility::clearlowermessage( "need_drill" );
continue;
}
maps\mp\_utility::setlowermessage( "plant_drill", &"ALIEN_COLLECTIBLES_PLANT_BOMB", undefined, 10 );
while ( player_should_see_drill_hint( var_2, var_0, 0 ) )
wait 0.05;
maps\mp\_utility::clearlowermessage( "plant_drill" );
}
}
wait 0.05;
}
common_scripts\utility::flag_waitopen( "drill_drilling" );
}
}
player_should_see_drill_hint( var_0, var_1, var_2 )
{
if ( distancesquared( var_0.origin, self.origin ) > var_1 )
return 0;
if ( common_scripts\utility::flag( "drill_drilling" ) )
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;
}
get_drill_entity()
{
if ( isdefined( level.drill.vehicle ) )
return level.drill.vehicle;
else
return level.drill;
}
open_door()
{
level notify( "door_opening", self.target );
foreach ( var_1 in self.removeables )
{
if ( isdefined( var_1 ) )
{
if ( var_1.classname == "script_model" )
{
var_1 thread slide_open();
continue;
}
if ( var_1.classname == "script_brushmodel" )
var_1 connectpaths();
var_1 delete();
}
}
}
slide_open()
{
if ( !isdefined( self.script_angles ) )
self delete();
else
self moveto( self.origin + self.script_angles, 1 );
}
wait_for_drill_plant()
{
self endon( "stop_listening" );
for (;;)
{
self waittill( "trigger", var_0 );
if ( !maps\mp\alien\_utility::is_true( level.automatic_drill ) && ( !isdefined( level.drill_carrier ) || level.drill_carrier != var_0 ) )
{
var_0 maps\mp\_utility::setlowermessage( "no_bomb", &"ALIEN_COLLECTIBLES_NO_BOMB", 5 );
wait 0.05;
continue;
}
if ( isplayer( var_0 ) )
{
if ( !maps\mp\alien\_utility::is_true( level.automatic_drill ) )
{
var_0 maps\mp\_utility::clearlowermessage( "go_plant" );
var_0 takeweapon( "alienbomb_mp" );
if ( !var_0 maps\mp\alien\_utility::has_special_weapon() )
var_0 enableweaponswitch();
if ( !isdefined( level.non_player_drill_plant_check ) || ![[ level.non_player_drill_plant_check ]]() )
var_0 switchtoweapon( var_0.lastweapon );
self makeunusable();
self sethintstring( "" );
remove_headicons_from_players();
}
var_1 = 0.4;
var_2 = 1.75;
thread maps\mp\alien\_hive::warn_all_players( var_2, var_1 );
var_0 maps\mp\alien\_persistence::eog_player_update_stat( "drillplants", 1 );
level notify( "drill_planted", var_0, self );
return var_0;
}
}
}
update_drill_health_hud()
{
var_0 = int( ( level.drill.health - 20000 ) / level.drill_health_hardcore * 100 );
maps\mp\alien\_hud::update_drill_health( var_0 );
}