341 lines
11 KiB
Plaintext
341 lines
11 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
obelisk_init()
|
|
{
|
|
level.scanned_obelisks = [];
|
|
level.drill_tutorial_text = &"MP_ALIEN_DESCENT_DRILL_TUTORIAL_HINT";
|
|
}
|
|
|
|
obelisk()
|
|
{
|
|
var_0 = select_obelisks();
|
|
level thread maps\mp\alien\_spawnlogic::encounter_cycle_spawn( "drill_planted" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 thread obelisk_listener( var_2 );
|
|
|
|
level waittill( "obelisk_destroyed" );
|
|
maps\mp\alien\_spawn_director::end_cycle();
|
|
level thread maps\mp\alien\_spawnlogic::remaining_alien_management();
|
|
}
|
|
|
|
obelisk_listener( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 notify( "stop_listening" );
|
|
var_0 endon( "stop_listening" );
|
|
|
|
if ( isdefined( level.drill ) && !isdefined( level.drill_carrier ) )
|
|
level waittill( "drill_pickedup" );
|
|
|
|
var_1 = maps\mp\alien\_hive::get_hive_waypoint_dist( var_0, 1300 );
|
|
var_0 thread maps\mp\alien\_hive::set_hive_icon( "waypoint_alien_scan", var_1 );
|
|
var_2 = var_0 maps\mp\alien\_drill::wait_for_drill_plant();
|
|
level.current_hive_name = var_0.target;
|
|
level.encounter_name = var_0.target;
|
|
level.drill_carrier = undefined;
|
|
|
|
if ( level.cycle_count == 1 )
|
|
level maps\mp\_utility::delaythread( 1, maps\mp\alien\_music_and_dialog::playvoforwavestart );
|
|
|
|
var_0 thread scanning( var_0, var_0.origin, var_2 );
|
|
var_0 maps\mp\alien\_hive::disable_other_strongholds();
|
|
maps\mp\_utility::delaythread( 2, maps\mp\alien\_challenge::spawn_challenge );
|
|
maps\mp\alien\_gamescore::reset_encounter_performance();
|
|
common_scripts\utility::flag_wait( "drill_detonated" );
|
|
var_0 thread scan_complete_sequence( var_0 );
|
|
add_to_scanned_obelisk_list( var_0 );
|
|
maps\mp\alien\_challenge::end_current_challenge();
|
|
maps\mp\alien\_gamescore::calculate_and_show_encounter_scores( level.players, maps\mp\alien\_hive::get_regular_hive_score_component_name_list() );
|
|
level.stronghold_hive_locs = common_scripts\utility::array_remove( level.stronghold_hive_locs, var_0 );
|
|
level.current_hive_name = level.current_hive_name + "_post";
|
|
level.num_hive_destroyed++;
|
|
|
|
if ( isdefined( var_0.scene_trig ) )
|
|
var_0.scene_trig notify( "trigger", level.players[0] );
|
|
|
|
give_players_rewards();
|
|
level notify( "obelisk_destroyed" );
|
|
var_0 notify( "stop_listening" );
|
|
}
|
|
|
|
give_players_rewards()
|
|
{
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
var_1 maps\mp\alien\_persistence::eog_player_update_stat( "hivesdestroyed", 1 );
|
|
var_1 thread maps\mp\alien\_hive::wait_to_give_rewards();
|
|
}
|
|
}
|
|
|
|
select_obelisks()
|
|
{
|
|
var_0 = [];
|
|
var_1 = maps\mp\alien\_utility::get_current_area_name();
|
|
|
|
foreach ( var_3 in level.stronghold_hive_locs )
|
|
{
|
|
if ( !( var_3.area_name == var_1 ) )
|
|
continue;
|
|
|
|
if ( !var_3 maps\mp\alien\_hive::dependent_hives_removed() )
|
|
continue;
|
|
|
|
var_0 = common_scripts\utility::array_add( var_0, var_3 );
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
scanning( var_0, var_1, var_2 )
|
|
{
|
|
var_0 endon( "stop_listening" );
|
|
var_0 endon( "drill_complete" );
|
|
var_0 thread set_scanner_state_plant( var_0, var_1, var_2 );
|
|
level.drill endon( "death" );
|
|
level.drill.owner = var_2;
|
|
level.drill.stronghold = var_0;
|
|
common_scripts\utility::flag_set( "drill_drilling" );
|
|
level.drill waittill( "drill_finished_plant_anim" );
|
|
var_0 maps\mp\alien\_drill::init_drilling_parameters();
|
|
var_0 thread set_scanner_state_scan( var_0, var_2 );
|
|
level.drill waittill( "offline", var_3, var_4 );
|
|
var_0 thread maps\mp\alien\_drill::set_drill_state_offline();
|
|
wait 2;
|
|
maps\mp\gametypes\aliens::alienendgame( "axis", maps\mp\alien\_hud::get_end_game_string_index( "drill_destroyed" ) );
|
|
}
|
|
|
|
set_scanner_state_plant( var_0, var_1, var_2 )
|
|
{
|
|
if ( isdefined( level.drill ) )
|
|
{
|
|
level.drill delete();
|
|
level.drill = undefined;
|
|
}
|
|
|
|
level.drill = spawn( "script_model", var_1 );
|
|
level.drill setmodel( "mp_laser_drill" );
|
|
level.drill playsound( "alien_drill_scanner_plant" );
|
|
level.drill.state = "planted";
|
|
level.drill.angles = var_0.angles;
|
|
level.drill.maxhealth = 20000 + level.drill_health_hardcore;
|
|
level.drill.health = int( 20000 + level.drill_health_hardcore * var_2 maps\mp\alien\_perk_utility::perk_getdrillhealthscalar() );
|
|
level.drill thread maps\mp\alien\_drill::watch_to_repair( var_0 );
|
|
level.drill thread maps\mp\alien\_drill::watch_drill_health_for_challenge();
|
|
maps\mp\alien\_outline_proto::add_to_outline_drill_watch_list( level.drill, 0 );
|
|
level thread maps\mp\alien\_music_and_dialog::playvoforbombplant( var_2 );
|
|
maps\mp\alien\_drill::destroy_drill_icon();
|
|
level.drill scriptmodelplayanim( "alien_drill_scan_enter" );
|
|
wait 4;
|
|
level.drill notify( "drill_finished_plant_anim" );
|
|
}
|
|
|
|
set_scanner_state_scan( var_0, var_1 )
|
|
{
|
|
var_0 endon( "death" );
|
|
var_0 endon( "stop_listening" );
|
|
level.drill.state = "online";
|
|
level.drill makeentitysentient( "allies" );
|
|
level.drill setthreatbiasgroup( "drill" );
|
|
level.drill setcandamage( 1 );
|
|
level.drill makeunusable();
|
|
level.drill sethintstring( "" );
|
|
level.drill.threatbias = -3000;
|
|
level.drill scriptmodelplayanim( "alien_drill_scan_loop" );
|
|
level.drill thread sfx_scanner_on( level.drill );
|
|
maps\mp\alien\_drill::update_drill_health_hud();
|
|
level thread obelisk_scan_fx( var_0 );
|
|
|
|
foreach ( var_3 in level.agentarray )
|
|
{
|
|
if ( isdefined( var_3.wave_spawned ) && var_3.wave_spawned )
|
|
var_3 getenemyinfo( level.drill );
|
|
}
|
|
|
|
var_0.depth_marker = gettime();
|
|
var_0 thread maps\mp\alien\_drill::handle_bomb_damage();
|
|
var_0 thread maps\mp\alien\_drill::monitor_drill_complete( var_0.depth );
|
|
var_0 thread maps\mp\alien\_hive::set_hive_icon( "waypoint_alien_defend" );
|
|
maps\mp\alien\_drill::destroy_drill_icon();
|
|
maps\mp\alien\_hud::turn_on_drill_meter_hud( var_0.depth );
|
|
level thread maps\mp\alien\_drill::watch_drill_depth_for_vo( var_0.depth );
|
|
}
|
|
|
|
obelisk_scan_fx( var_0 )
|
|
{
|
|
var_0 endon( "death" );
|
|
var_0 endon( "stop_listening" );
|
|
|
|
for (;;)
|
|
{
|
|
playfxontag( level._effect["obelisk_scan_loop"], level.drill, "tag_laser" );
|
|
wait 5;
|
|
}
|
|
}
|
|
|
|
sfx_scanner_on( var_0 )
|
|
{
|
|
level.drill_sfx_lp = spawn_sfx_and_play( var_0.origin, var_0, 0, "alien_drill_scanner_lp" );
|
|
}
|
|
|
|
scan_complete_sequence( var_0 )
|
|
{
|
|
var_0 thread play_obelisk_scan_complete_animations( var_0.scriptables[0] );
|
|
var_0 notify( "hive_dying" );
|
|
var_0 maps\mp\alien\_hive::destroy_hive_icon();
|
|
maps\mp\alien\_outline_proto::remove_from_outline_drill_watch_list( level.drill );
|
|
level.drill scriptmodelplayanim( "alien_drill_scan_exit" );
|
|
level.drill sfx_scanner_off( level.drill );
|
|
stopfxontag( level._effect["obelisk_scan_loop"], level.drill, "tag_laser" );
|
|
wait 3.8;
|
|
|
|
if ( !isdefined( var_0.last_hive ) || !var_0.last_hive )
|
|
{
|
|
var_1 = level.drill.origin + ( 0, 0, 8 );
|
|
maps\mp\alien\_drill::drop_drill( var_1, var_0.angles - ( 0, 90, 0 ) );
|
|
}
|
|
|
|
if ( isdefined( var_0.last_hive ) && var_0.last_hive )
|
|
common_scripts\utility::flag_set( "hives_cleared" );
|
|
|
|
common_scripts\utility::flag_clear( "drill_detonated" );
|
|
|
|
if ( !maps\mp\alien\_utility::is_true( level.no_grab_drill_vo ) )
|
|
level maps\mp\_utility::delaythread( 8, maps\mp\alien\_music_and_dialog::play_vo_for_grab_drill );
|
|
}
|
|
|
|
play_obelisk_scan_complete_animations( var_0 )
|
|
{
|
|
var_1 = 5.0;
|
|
var_0 setscriptablepartstate( 0, 1 );
|
|
wait( var_1 );
|
|
var_0 setscriptablepartstate( 0, 2 );
|
|
}
|
|
|
|
sfx_scanner_off( var_0 )
|
|
{
|
|
var_0 playsound( "alien_drill_scanner_off" );
|
|
safe_delete( level.drill_sfx_lp );
|
|
safe_delete( level.drill_overheat_lp_02 );
|
|
}
|
|
|
|
wait_for_all_scanned_obelisk_destroyed( var_0, var_1, var_2 )
|
|
{
|
|
foreach ( var_4 in level.scanned_obelisks )
|
|
var_4 thread obelisk_damage_listener( var_4, var_0, var_1, "waypoint_alien_destroy" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "scanned_obelisk_destroyed", var_6 );
|
|
level.scanned_obelisks = common_scripts\utility::array_remove( level.scanned_obelisks, var_6 );
|
|
|
|
if ( level.scanned_obelisks.size == 0 )
|
|
return;
|
|
}
|
|
}
|
|
|
|
add_to_scanned_obelisk_list( var_0 )
|
|
{
|
|
level.scanned_obelisks[level.scanned_obelisks.size] = var_0;
|
|
}
|
|
|
|
obelisk_damage_listener( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = get_obelisk_clip( var_0 );
|
|
var_4 setcandamage( 1 );
|
|
var_4 setcanradiusdamage( 1 );
|
|
var_0.health = var_1;
|
|
var_5 = maps\mp\alien\_hud::make_waypoint( var_3, 20, 20, 1, var_4.origin );
|
|
var_6 = spawn( "script_model", var_0.scriptables[0].origin );
|
|
var_6.angles = var_0.scriptables[0].angles;
|
|
var_6 setmodel( "dct_alien_obelisk" );
|
|
maps\mp\alien\_outline_proto::enable_outline_for_players( var_6, level.players, 2, 0, "high" );
|
|
|
|
for (;;)
|
|
{
|
|
var_4 waittill( "damage", var_7, var_8, var_9, var_10, var_11, var_12, var_13, var_14, var_15, var_16 );
|
|
|
|
if ( !isdefined( var_8.team ) || var_8.team != "allies" )
|
|
continue;
|
|
|
|
if ( isdefined( var_2 ) && isdefined( var_16 ) && !common_scripts\utility::array_contains( var_2, var_16 ) )
|
|
var_7 = int( var_7 * 0.1 );
|
|
|
|
if ( isdefined( var_8 ) )
|
|
{
|
|
var_17 = "standard";
|
|
|
|
if ( isdefined( var_16 ) && var_16 == "alienvanguard_projectile_mp" )
|
|
var_17 = "hitaliensoft";
|
|
|
|
if ( !isplayer( var_8 ) && isdefined( var_8.inuseby ) )
|
|
var_8 = var_8.inuseby;
|
|
|
|
var_8 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( var_17 );
|
|
}
|
|
|
|
var_0.health = var_0.health - var_7;
|
|
|
|
if ( var_0.health < 0 )
|
|
break;
|
|
else
|
|
{
|
|
if ( var_0.health < var_1 * 0.33 )
|
|
{
|
|
var_0.scriptables[0] setscriptablepartstate( 0, "damaged_2" );
|
|
maps\mp\alien\_outline_proto::enable_outline_for_players( var_6, level.players, 1, 0, "high" );
|
|
continue;
|
|
}
|
|
|
|
if ( var_0.health < var_1 * 0.66 )
|
|
{
|
|
var_0.scriptables[0] setscriptablepartstate( 0, "damaged_1" );
|
|
maps\mp\alien\_outline_proto::enable_outline_for_players( var_6, level.players, 5, 0, "high" );
|
|
}
|
|
}
|
|
}
|
|
|
|
var_0 thread sfx_obelisk_destroyed();
|
|
maps\mp\alien\_outline_proto::disable_outline_for_players( var_6, level.players );
|
|
var_6 delete();
|
|
var_0.scriptables[0] setscriptablepartstate( 0, "remove" );
|
|
var_4 delete();
|
|
var_5 destroy();
|
|
level notify( "scanned_obelisk_destroyed", var_0 );
|
|
}
|
|
|
|
spawn_sfx_and_play( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = spawn( "script_origin", var_0 );
|
|
var_4 linkto( var_1 );
|
|
var_4 thread play_sfx( var_4, var_2, var_3 );
|
|
return var_4;
|
|
}
|
|
|
|
play_sfx( var_0, var_1, var_2 )
|
|
{
|
|
wait( var_1 );
|
|
var_0 playloopsound( var_2 );
|
|
}
|
|
|
|
safe_delete( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
var_0 delete();
|
|
}
|
|
|
|
get_obelisk_clip( var_0 )
|
|
{
|
|
foreach ( var_2 in self.removeables )
|
|
{
|
|
if ( var_2.classname == "script_brushmodel" )
|
|
return var_2;
|
|
}
|
|
}
|
|
|
|
sfx_obelisk_destroyed()
|
|
{
|
|
playsoundatpos( self.origin, "alien_obelisk_destroyed" );
|
|
}
|