This commit is contained in:
2024-02-13 13:20:49 +01:00
commit 872504afef
1761 changed files with 871764 additions and 0 deletions

View File

@ -0,0 +1,278 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_player_achievement()
{
self.achievement_list = [];
if ( isdefined( level.achievement_registration_func ) )
[[ level.achievement_registration_func ]]();
if ( maps\mp\alien\_utility::is_true( level.include_default_achievements ) )
register_default_achievements();
}
register_default_achievements()
{
register_achievement( "KILL_WITH_TRAP", 50, ::default_init, ::should_update_kill_with_trap, ::equal_to_goal );
register_achievement( "ESCAPE_ALL_PLAYERS", 4, ::default_init, ::default_should_update, ::at_least_goal );
register_achievement( "ESCAPE_IN_TIME", 90000, ::default_init, ::default_should_update, ::at_least_goal );
register_achievement( "ESCAPE_1ST_TIME", 1, ::default_init, ::default_should_update, ::at_least_goal );
register_achievement( "ESCAPE_ALL_CHALLENGE", 1, ::default_init, ::should_update_all_challenge, ::at_least_goal );
register_achievement( "ESCAPE_WITH_NERF_ON", 1, ::default_init, ::default_should_update, ::at_least_goal );
register_achievement( "REACH_CITY", 1, ::default_init, ::default_should_update, ::at_least_goal );
register_achievement( "REACH_CABIN", 1, ::default_init, ::default_should_update, ::at_least_goal );
register_achievement( "SCAVENGE_ITEM", 40, ::default_init, ::default_should_update, ::equal_to_goal );
}
register_achievement( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = spawnstruct();
var_6 [[ var_2 ]]( var_1, var_3, var_4, var_5 );
self.achievement_list[var_0] = var_6;
}
default_init( var_0, var_1, var_2, var_3 )
{
self.progress = 0;
self.goal = var_0;
self.should_update_func = var_1;
self.is_goal_reached_func = var_2;
self.achievement_completed = 0;
if ( isdefined( var_3 ) )
self.complete_in_casual = var_3;
}
default_should_update( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
return 1;
}
update_progress( var_0 )
{
self.progress = self.progress + var_0;
}
at_least_goal()
{
return self.progress >= self.goal;
}
equal_to_goal()
{
return self.progress == self.goal;
}
is_completed()
{
return self.achievement_completed;
}
can_complete_in_causal()
{
return maps\mp\alien\_utility::is_true( self.complete_in_casual );
}
mark_completed()
{
self.achievement_completed = 1;
}
is_valid_achievement( var_0 )
{
return isdefined( var_0 );
}
update_achievement( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11 )
{
var_12 = self.achievement_list[var_0];
if ( !is_valid_achievement( var_12 ) )
return;
if ( var_12 is_completed() )
return;
if ( maps\mp\alien\_utility::is_casual_mode() && !var_12 can_complete_in_causal() )
return;
if ( var_12 [[ var_12.should_update_func ]]( var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11 ) )
{
var_12 update_progress( var_1 );
if ( var_12 [[ var_12.is_goal_reached_func ]]() )
{
self giveachievement( var_0 );
var_12 mark_completed();
}
}
}
update_alien_kill_achievements( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( isdefined( level.update_alien_kill_achievements_func ) )
[[ level.update_alien_kill_achievements_func ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 );
if ( !isdefined( var_1 ) || !isplayer( var_1 ) )
return;
var_1 update_achievement( "KILL_WITH_TRAP", 1, var_0 );
}
should_update_kill_with_trap( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( maps\mp\alien\_utility::is_trap( var_0 ) )
return 1;
return 0;
}
update_escape_achievements( var_0, var_1 )
{
var_2 = var_0.size;
foreach ( var_4 in var_0 )
{
var_5 = var_4 maps\mp\alien\_persistence::get_player_escaped();
var_6 = var_4 maps\mp\alien\_prestige::get_num_nerf_selected();
var_4 update_personal_escape_achievements( var_2, var_1, var_5, var_6 );
}
}
update_personal_escape_achievements( var_0, var_1, var_2, var_3 )
{
update_achievement( "ESCAPE_ALL_PLAYERS", var_0 );
update_achievement( "ESCAPE_IN_TIME", var_1 );
update_achievement( "ESCAPE_1ST_TIME", var_2 );
update_achievement( "ESCAPE_ALL_CHALLENGE", 1 );
update_achievement( "ESCAPE_WITH_NERF_ON", var_3 );
}
should_update_all_challenge( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
return level.all_challenge_completed;
}
update_blocker_hive_achievements( var_0 )
{
switch ( var_0 )
{
case "lodge_lung_3":
update_achievement_all_players( "REACH_CITY", 1 );
break;
case "city_lung_5":
update_achievement_all_players( "REACH_CABIN", 1 );
break;
default:
break;
}
}
update_achievement_all_players( var_0, var_1 )
{
foreach ( var_3 in level.players )
var_3 update_achievement( var_0, var_1 );
}
update_scavenge_achievement()
{
update_achievement( "SCAVENGE_ITEM", 1 );
}
update_achievement_damage_weapon( var_0 )
{
if ( isdefined( level.update_achievement_damage_weapon_func ) )
self [[ level.update_achievement_damage_weapon_func ]]( var_0 );
}
eggallfoundforpack( var_0 )
{
self endon( "disconnect" );
level endon( "game_ended" );
level common_scripts\utility::waittill_any( "regular_hive_destroyed", "obelisk_destroyed", "outpost_encounter_completed" );
var_1 = self getcoopplayerdata( "alienPlayerStats", "deaths" );
var_2 = self getcoopplayerdatareservedint( "eggstra_state_flags" );
var_3 = var_2 >> var_0 * 4 & 15;
if ( var_3 == 15 )
{
var_4 = self getcoopplayerdatareservedint( "eggstra_award_flags" );
var_5 = 0;
if ( var_1 == 1015 && ( var_4 & 1 ) != 1 )
{
var_4 = var_4 | 1;
var_5 = 1;
}
if ( ( var_4 & 1 << var_0 ) == 0 )
{
var_4 = var_4 | 1 << var_0;
var_5 = 1;
self setclientomnvar( "ui_alien_eggstra_xp", 1 );
thread maps\mp\alien\_persistence::wait_and_give_player_xp( 10000, 5.0 );
}
if ( var_5 == 1 )
self setcoopplayerdatareservedint( "eggstra_award_flags", var_4 );
update_mp_eggs_achievement( var_0 );
}
}
update_mp_eggs_achievement( var_0 )
{
switch ( var_0 )
{
case 0:
update_achievement( "GOT_THEEGGSTRA_XP", 1 );
break;
case 1:
update_achievement( "GOT_THEEGGSTRA_XP_DLC2", 1 );
break;
case 2:
update_achievement( "GOT_THEEGGSTRA_XP_DLC3", 1 );
break;
case 3:
update_achievement( "GOT_THEEGGSTRA_XP_DLC4", 1 );
break;
default:
break;
}
}
update_intel_achievement( var_0 )
{
var_0 = 0;
var_1 = getdvar( "ui_mapname" );
if ( var_1 == "mp_alien_armory" )
var_0 = 1;
if ( var_1 == "mp_alien_beacon" )
var_0 = 2;
if ( var_1 == "mp_alien_dlc3" )
var_0 = 3;
if ( var_1 == "mp_alien_last" )
var_0 = 4;
switch ( var_0 )
{
case 1:
update_achievement( "FOUND_ALL_INTELS", 1 );
break;
case 2:
update_achievement( "FOUND_ALL_INTELS_MAYDAY", 1 );
break;
case 3:
update_achievement( "AWAKENING_ALL_INTEL", 1 );
break;
case 4:
update_achievement( "LAST_ALL_INTEL", 1 );
default:
break;
}
}

View File

@ -0,0 +1,91 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
register_achievements_dlc()
{
maps\mp\alien\_achievement::register_achievement( "REACH_COMPOUND", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "REACH_FACILITY", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "KILLBOSS_1ST_TIME", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "KILLBOSS_IN_TIME", 300000, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, ::less_than_goal );
maps\mp\alien\_achievement::register_achievement( "KILL_WITH_SWEAPON", 50, maps\mp\alien\_achievement::default_init, ::should_update_kill_with_sweapon, maps\mp\alien\_achievement::equal_to_goal );
maps\mp\alien\_achievement::register_achievement( "COMPLETE_ALL_CHALLENGE", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::should_update_all_challenge, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "KILLBOSS_WITH_RELIC", 1, maps\mp\alien\_achievement::default_init, ::is_using_relic, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "KILL_PHANTOMS", 5, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::equal_to_goal );
maps\mp\alien\_achievement::register_achievement( "KILL_RHINO_PISTOL", 1, maps\mp\alien\_achievement::default_init, ::should_update_kill_rhino_pistol, maps\mp\alien\_achievement::equal_to_goal );
maps\mp\alien\_achievement::register_achievement( "FOUND_ALL_INTELS", 11, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal, 1 );
maps\mp\alien\_achievement::register_achievement( "GOT_THEEGGSTRA_XP", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal, 1 );
thread maps\mp\alien\_pillage_intel::init_player_intel_total();
}
less_than_goal()
{
return self.progress <= self.goal;
}
update_alien_kill_achievements_dlc( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( var_1 ) || !isplayer( var_1 ) )
return;
var_1 maps\mp\alien\_achievement::update_achievement( "KILL_WITH_SWEAPON", 1, var_4 );
if ( isdefined( self.alien_type ) && self.alien_type == "locust" )
var_1 maps\mp\alien\_achievement::update_achievement( "KILL_PHANTOMS", 1 );
if ( isdefined( var_4 ) && maps\mp\_utility::getweaponclass( var_4 ) == "weapon_pistol" && isdefined( self.shot_only_by_pistol ) )
var_1 maps\mp\alien\_achievement::update_achievement( "KILL_RHINO_PISTOL", 1, self.alien_type, self.shot_only_by_pistol );
}
should_update_kill_rhino_pistol( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( isdefined( var_0 ) && var_0 == "elite" && isdefined( var_1 ) && var_1 )
return 1;
return 0;
}
should_update_kill_with_sweapon( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( var_0 == "iw6_aliendlc11_mp" )
return 1;
return 0;
}
is_using_relic( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
return var_0 maps\mp\alien\_prestige::get_num_nerf_selected() != 0;
}
update_boss_achievements( var_0, var_1 )
{
switch ( var_0 )
{
case "compound":
maps\mp\alien\_achievement::update_achievement_all_players( "REACH_COMPOUND", 1 );
break;
case "facility":
maps\mp\alien\_achievement::update_achievement_all_players( "REACH_FACILITY", 1 );
break;
case "final":
maps\mp\alien\_achievement::update_achievement_all_players( "KILLBOSS_1ST_TIME", 1 );
maps\mp\alien\_achievement::update_achievement_all_players( "KILLBOSS_IN_TIME", var_1 );
maps\mp\alien\_achievement::update_achievement_all_players( "COMPLETE_ALL_CHALLENGE", 1 );
foreach ( var_3 in level.players )
var_3 maps\mp\alien\_achievement::update_achievement( "KILLBOSS_WITH_RELIC", 1, var_3 );
break;
default:
break;
}
}
update_achievement_damage_weapon_dlc( var_0 )
{
if ( maps\mp\_utility::getweaponclass( var_0 ) != "weapon_pistol" )
self.shot_only_by_pistol = 0;
if ( ( !isdefined( self.shot_only_by_pistol ) || self.shot_only_by_pistol ) && maps\mp\_utility::getweaponclass( var_0 ) == "weapon_pistol" )
self.shot_only_by_pistol = 1;
}

View File

@ -0,0 +1,97 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
register_achievements_dlc2()
{
maps\mp\alien\_achievement::register_achievement( "REACH_CARGO", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "REACH_DECK", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "KILL_KRAKEN_1ST_TIME", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "KILL_KRAKEN_WITH_RELIC", 1, maps\mp\alien\_achievement::default_init, ::is_using_relic, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "KILL_KRAKEN_AND_ALL_CHALLENGES", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::should_update_all_challenge, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "FOUND_ALL_INTELS_MAYDAY", 9, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal, 1 );
maps\mp\alien\_achievement::register_achievement( "KILL_SEEDER_TURRETS", 15, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::equal_to_goal );
maps\mp\alien\_achievement::register_achievement( "HYPNO_TRAP_RHINO", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::equal_to_goal );
maps\mp\alien\_achievement::register_achievement( "GOT_THEEGGSTRA_XP_DLC2", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal, 1 );
maps\mp\alien\_achievement::register_achievement( "CRAFT_ALL_ITEMS", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::equal_to_goal );
thread maps\mp\alien\_pillage_intel::init_player_intel_total();
thread fixup_crafting_achievement();
}
fixup_crafting_achievement()
{
for (;;)
{
if ( maps\mp\alien\_utility::is_true( level.introscreen_done ) )
break;
wait 1;
}
var_0 = 10;
var_1 = 2;
var_2 = 0;
for (;;)
{
var_3 = tablelookup( "mp/alien/crafting_traps.csv", var_2, var_0, var_1 );
if ( var_3 == "" )
break;
update_craft_all_items_achievement( var_3 );
var_0 = var_0 + 1;
}
}
less_than_goal()
{
return self.progress <= self.goal;
}
update_alien_kill_achievements_dlc2( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( var_1 ) || !isplayer( var_1 ) )
return;
if ( isdefined( self.alien_type ) && self.alien_type == "seeder_spore" )
var_1 maps\mp\alien\_achievement::update_achievement( "KILL_SEEDER_TURRETS", 1 );
}
is_using_relic( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
return var_0 maps\mp\alien\_prestige::get_num_nerf_selected() != 0;
}
update_blocker_achievements( var_0, var_1 )
{
switch ( var_0 )
{
case "tentacle_fight":
maps\mp\alien\_achievement::update_achievement_all_players( "REACH_CARGO", 1 );
break;
case "blocker_cargo":
maps\mp\alien\_achievement::update_achievement_all_players( "REACH_DECK", 1 );
break;
case "kraken":
maps\mp\alien\_achievement::update_achievement_all_players( "KILL_KRAKEN_1ST_TIME", 1 );
maps\mp\alien\_achievement::update_achievement_all_players( "KILL_KRAKEN_AND_ALL_CHALLENGES", 1 );
foreach ( var_3 in level.players )
var_3 maps\mp\alien\_achievement::update_achievement( "KILL_KRAKEN_WITH_RELIC", 1, var_3 );
break;
default:
break;
}
}
update_hypno_trap_rhino()
{
maps\mp\alien\_achievement::update_achievement( "HYPNO_TRAP_RHINO", 1 );
}
update_craft_all_items_achievement( var_0 )
{
if ( self _meth_842A( var_0 ) )
maps\mp\alien\_achievement::update_achievement( "CRAFT_ALL_ITEMS", 1 );
}

View File

@ -0,0 +1,149 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
register_achievements_dlc3()
{
maps\mp\alien\_achievement::register_achievement( "FINISH_GATE", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "EXTEND_THE_BRIDGE", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "AWAKENING_ESCAPE", 1, maps\mp\alien\_achievement::default_init, ::did_player_escape, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "AWAKENING_RELIC_ESCAPE", 1, maps\mp\alien\_achievement::default_init, ::escaped_with_relic, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "AWAKENING_ALL_CHALLENGES_ESCAPE", 1, maps\mp\alien\_achievement::default_init, ::escaped_with_all_challenges, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "AWAKENING_ALL_INTEL", 6, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal, 1 );
maps\mp\alien\_achievement::register_achievement( "KILL_GARG_WITH_VANGUARD", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "GOT_THEEGGSTRA_XP_DLC3", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal, 1 );
maps\mp\alien\_achievement::register_achievement( "LIKE_A_GLOVE", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "AWAKENING_4_CLASS_ESCAPE", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
thread maps\mp\alien\_pillage_intel::init_player_intel_total();
}
init_achievement_weapon_list()
{
var_0 = [];
foreach ( var_2 in level.collectibles )
{
if ( var_2.isweapon )
{
var_3 = var_2.ref;
var_4 = getsubstr( var_3, 7 );
var_5 = getweaponbasename( var_4 );
var_6 = maps\mp\_utility::getweaponclass( var_5 );
var_7 = maps\mp\alien\_pillage::get_possible_attachments_by_weaponclass( var_6, var_5 );
foreach ( var_9 in var_7 )
{
if ( var_9 == "alienmuzzlebrake" || var_9 == "alienmuzzlebrakesg" || var_9 == "alienmuzzlebrakesn" )
var_0[var_5] = 0;
}
}
}
self.pers["kill_tracker"] = var_0;
}
update_alien_kill_achievements_dlc3( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
var_9 = 1;
var_10 = isdefined( var_1 ) && isplayer( var_1 );
if ( var_10 && isdefined( self.alien_type ) && self.alien_type == "gargoyle" )
{
if ( isdefined( var_4 ) && ( var_4 == "alienvanguard_projectile_mp" || var_4 == "alienvanguard_projectile_mini_mp" ) )
var_1 maps\mp\alien\_achievement::update_achievement( "KILL_GARG_WITH_VANGUARD", 1 );
}
if ( var_10 )
{
if ( !isdefined( var_1.pers["kill_tracker"] ) )
var_1 init_achievement_weapon_list();
if ( isdefined( var_4 ) && maps\mp\alien\_utility::weapon_has_alien_attachment( var_4, var_9, var_1 ) && var_3 != "MOD_MELEE" )
{
var_11 = getweaponbasename( var_4 );
var_1.pers["kill_tracker"][var_11]++;
var_12 = 1;
foreach ( var_14 in var_1.pers["kill_tracker"] )
{
if ( var_14 < 5 )
{
var_12 = 0;
break;
}
}
if ( var_12 )
var_1 maps\mp\alien\_achievement::update_achievement( "LIKE_A_GLOVE", 1 );
}
}
}
did_player_escape( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
return maps\mp\alien\_utility::is_true( var_0.dlc3_escaped );
}
escaped_with_relic( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
return did_player_escape( var_0 ) && var_0 maps\mp\alien\_prestige::get_num_nerf_selected() >= 2;
}
escaped_with_all_challenges( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
return did_player_escape( var_0 ) && level.all_challenge_completed;
}
check_escape_all_classes()
{
var_0 = maps\mp\alien\_persistence::get_selected_perk_0();
var_1 = self getcoopplayerdatareservedint( "dlc_3_escape_flags" );
switch ( var_0 )
{
case "perk_health":
var_1 = var_1 | 1;
break;
case "perk_bullet_damage":
var_1 = var_1 | 2;
break;
case "perk_medic":
var_1 = var_1 | 4;
break;
case "perk_rigger":
var_1 = var_1 | 8;
break;
}
self setcoopplayerdatareservedint( "dlc_3_escape_flags", var_1 );
if ( var_1 == 15 )
maps\mp\alien\_achievement::update_achievement( "AWAKENING_4_CLASS_ESCAPE", 1 );
}
update_progression_achievements( var_0, var_1 )
{
switch ( var_0 )
{
case "complete_first_gate":
maps\mp\alien\_achievement::update_achievement_all_players( "FINISH_GATE", 1 );
break;
case "extend_the_bridge":
maps\mp\alien\_achievement::update_achievement_all_players( "EXTEND_THE_BRIDGE", 1 );
break;
case "awakening_escape":
foreach ( var_3 in level.players )
{
var_3 maps\mp\alien\_achievement::update_achievement( "AWAKENING_RELIC_ESCAPE", 1, var_3 );
var_3 maps\mp\alien\_achievement::update_achievement( "AWAKENING_ESCAPE", 1, var_3 );
var_3 maps\mp\alien\_achievement::update_achievement( "AWAKENING_ALL_CHALLENGES_ESCAPE", 1, var_3 );
var_3 check_escape_all_classes();
}
break;
default:
break;
}
}

View File

@ -0,0 +1,139 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
register_achievements_dlc4()
{
maps\mp\alien\_achievement::register_achievement( "LAST_COMPLETED", 1, maps\mp\alien\_achievement::default_init, ::did_player_escape, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "LAST_RELIC_COMPLETED", 1, maps\mp\alien\_achievement::default_init, ::escaped_with_relic, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "LAST_ALL_CHALLENGES_COMPLETED", 1, maps\mp\alien\_achievement::default_init, ::escaped_with_all_challenges, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "LAST_ALL_INTEL", 7, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal, 1 );
maps\mp\alien\_achievement::register_achievement( "LAST_COMPLETE_AN_OUTPOST", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "GOT_THEEGGSTRA_XP_DLC4", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal, 1 );
maps\mp\alien\_achievement::register_achievement( "TIMING_IS_EVERYTHING", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "YOU_WISH", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "ALWAYS_HARD", 1, maps\mp\alien\_achievement::default_init, ::hardcore_escaped_with_relic, maps\mp\alien\_achievement::at_least_goal );
maps\mp\alien\_achievement::register_achievement( "HAT_TRICK", 1, maps\mp\alien\_achievement::default_init, maps\mp\alien\_achievement::default_should_update, maps\mp\alien\_achievement::at_least_goal );
thread init_one_shot_kills();
thread maps\mp\alien\_pillage_intel::init_player_intel_total();
}
did_player_escape( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
return maps\mp\alien\_utility::is_true( var_0.dlc4_escaped );
}
escaped_with_relic( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
return did_player_escape( var_0 ) && var_0 maps\mp\alien\_prestige::get_num_nerf_selected() != 0;
}
escaped_with_all_challenges( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
return did_player_escape( var_0 ) && level.all_challenge_completed;
}
hardcore_escaped_with_relic( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
return escaped_with_relic( var_0 ) && maps\mp\alien\_utility::is_hardcore_mode();
}
update_timing_is_everything()
{
var_0 = common_scripts\utility::flag_exist( "cortex_started" ) && common_scripts\utility::flag( "cortex_started" );
if ( var_0 )
{
if ( !isdefined( level.timing_is_everything_cnt ) )
{
level.timing_is_everything_cnt = 0;
level.timing_is_everything_start_time = gettime();
}
level.timing_is_everything_cnt++;
if ( level.timing_is_everything_cnt == 3 )
{
var_1 = gettime() - level.timing_is_everything_start_time;
if ( var_1 < 10000 )
maps\mp\alien\_achievement::update_achievement_all_players( "TIMING_IS_EVERYTHING", 1 );
}
}
}
award_you_wish()
{
maps\mp\alien\_achievement::update_achievement( "YOU_WISH", 1, self );
}
update_progression_achievements( var_0 )
{
switch ( var_0 )
{
case "outpost_rooftops_done":
case "outpost_garage_done":
case "outpost_gas_station_done":
maps\mp\alien\_achievement::update_achievement_all_players( "LAST_COMPLETE_AN_OUTPOST", 1 );
break;
case "last_completed":
foreach ( var_2 in level.players )
{
var_2 maps\mp\alien\_achievement::update_achievement( "LAST_COMPLETED", 1, var_2 );
var_2 maps\mp\alien\_achievement::update_achievement( "LAST_RELIC_COMPLETED", 1, var_2 );
var_2 maps\mp\alien\_achievement::update_achievement( "LAST_ALL_CHALLENGES_COMPLETED", 1, var_2 );
var_2 maps\mp\alien\_achievement::update_achievement( "ALWAYS_HARD", 1, var_2 );
}
break;
default:
break;
}
}
init_one_shot_kills()
{
level endon( "game_ended" );
self endon( "disconnect" );
while ( !isdefined( self.pers ) )
wait 1;
self.pers["one_shot_kills_tracker"] = spawnstruct();
self.pers["one_shot_kills_tracker"].time = 0;
self.pers["one_shot_kills_tracker"].cnt = 0;
}
update_one_shot_kills()
{
if ( isdefined( self.pers["one_shot_kills_tracker"].time ) )
{
var_0 = gettime();
if ( var_0 == self.pers["one_shot_kills_tracker"].time )
{
self.pers["one_shot_kills_tracker"].cnt++;
if ( self.pers["one_shot_kills_tracker"].cnt >= 3 )
maps\mp\alien\_achievement::update_achievement( "HAT_TRICK", 1, self );
}
else
{
self.pers["one_shot_kills_tracker"].time = var_0;
self.pers["one_shot_kills_tracker"].cnt = 1;
}
}
}
update_alien_kill_achievements_dlc4( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
var_9 = isdefined( var_1 ) && isplayer( var_1 );
if ( var_9 )
{
if ( isdefined( var_4 ) && ( var_4 == "iw6_aliendlc42_mp" || var_4 == "iw6_aliendlc41_mp" ) )
var_1 update_one_shot_kills();
}
}

1559
maps/mp/alien/_airdrop.gsc Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,85 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
init_fx();
}
init_fx()
{
level._effect["vfx_scrnfx_alien_spitter_mist"] = loadfx( "vfx/gameplay/screen_effects/vfx_scrnfx_alien_spitter_mist" );
level._effect["vfx_scrnfx_alien_blood"] = loadfx( "vfx/gameplay/screen_effects/vfx_scrnfx_alien_blood" );
level._effect["vfx_scrnfx_tocam_slidedust_m"] = loadfx( "vfx/gameplay/screen_effects/vfx_scrnfx_tocam_slidedust_m" );
level._effect["vfx_melee_blood_spray"] = loadfx( "vfx/gameplay/screen_effects/vfx_melee_blood_spray" );
level._effect["vfx_blood_hit_left"] = loadfx( "vfx/gameplay/screen_effects/vfx_blood_hit_left" );
level._effect["vfx_blood_hit_right"] = loadfx( "vfx/gameplay/screen_effects/vfx_blood_hit_right" );
level._effect["vfx_alien_spitter_hit_left"] = loadfx( "vfx/gameplay/screen_effects/vfx_alien_spitter_hit_left" );
level._effect["vfx_alien_spitter_hit_right"] = loadfx( "vfx/gameplay/screen_effects/vfx_alien_spitter_hit_right" );
level._effect["vfx_alien_spitter_hit_center"] = loadfx( "vfx/gameplay/screen_effects/vfx_alien_spitter_hit_center" );
}
alien_fire_on()
{
if ( !isdefined( self.is_burning ) )
self.is_burning = 0;
self.is_burning++;
if ( self.is_burning == 1 )
self setscriptablepartstate( "body", "burning" );
}
alien_fire_off()
{
self.is_burning--;
if ( self.is_burning > 0 )
return;
self.is_burning = undefined;
self notify( "fire_off" );
self setscriptablepartstate( "body", "normal" );
}
disable_fx_on_death()
{
self setscriptablepartstate( "body", "normal" );
}
fx_stun_damage()
{
if ( maps\mp\alien\_utility::get_alien_type() == "minion" )
return;
self endon( "death" );
self setscriptablepartstate( "body", "shocked" );
wait 0.5;
if ( isalive( self ) )
self setscriptablepartstate( "body", "normal" );
}
alien_cloak_fx_on()
{
if ( !isdefined( self.is_cloaking ) )
self.is_cloaking = 0;
self playsound( "alien_teleport" );
self.is_cloaking++;
if ( self.is_cloaking == 1 )
self setscriptablepartstate( "body", "normal" );
}
alien_cloak_fx_off()
{
self.is_cloaking--;
if ( self.is_cloaking > 0 )
return;
self playsound( "alien_teleport_appear" );
self.is_cloaking = undefined;
self setscriptablepartstate( "body", "normal" );
}

View File

@ -0,0 +1,546 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
alien_maaws_init()
{
level.alternate_trinity_weapon_try_use = ::tryuse_dpad_maaws;
level.alternate_trinity_weapon_use = ::use_dpad_maaws;
level.alternate_trinity_weapon_cancel_use = ::canceluse_dpad_maaws;
level._effect["maaws_burst"] = loadfx( "vfx/gameplay/alien/vfx_alien_maaws_burst" );
}
tryuse_dpad_maaws( var_0, var_1 )
{
thread tryuse_dpad_maaws_internal( var_0, var_1 );
}
tryuse_dpad_maaws_internal( var_0, var_1 )
{
waittillframeend;
maps\mp\alien\_utility::store_weapons_status();
self.last_weapon = self getcurrentweapon();
var_2 = "iw6_alienmaaws_mp";
if ( !isdefined( level.cosine ) )
{
level.cosine = [];
level.cosine["90"] = cos( 90 );
level.cosine["89"] = cos( 89 );
level.cosine["45"] = cos( 45 );
level.cosine["25"] = cos( 25 );
level.cosine["15"] = cos( 15 );
level.cosine["10"] = cos( 10 );
level.cosine["5"] = cos( 5 );
}
maps\mp\_utility::_giveweapon( var_2 );
wait 0.05;
self switchtoweapon( var_2 );
self disableweaponswitch();
if ( var_1 > 3 )
self setweaponammoclip( var_2, 3 );
else if ( var_1 > 0 )
self setweaponammoclip( var_2, 2 );
thread handle_missile_logic( var_2, var_1 );
}
use_dpad_maaws( var_0, var_1 )
{
if ( maps\mp\alien\_utility::is_in_laststand() )
return;
var_2 = "iw6_alienmaaws_mp";
switch ( var_1 )
{
case 0:
var_2 = "iw6_alienmaaws_mp";
break;
case 1:
var_2 = "iw6_alienmaaws_mp";
break;
case 2:
var_2 = "iw6_alienmaaws_mp";
break;
case 3:
var_2 = "iw6_alienmaaws_mp";
break;
case 4:
var_2 = "iw6_alienmaaws_mp";
break;
}
thread maps\mp\alien\_combat_resources::watch_ammo( var_2 );
wait 0.1;
}
watch_rank_for_fof( var_0, var_1 )
{
level endon( "game_ended" );
self endon( "disconnect" );
self notify( "fof_cancel" );
self endon( "fof_cancel" );
if ( var_1 > 0 )
{
while ( self getcurrentweapon() != var_0 )
wait 0.05;
self thermalvisionfofoverlayon();
while ( self getcurrentweapon() == var_0 )
wait 0.05;
self thermalvisionfofoverlayoff();
}
}
within_fov_set_dot( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = get_alien_origin( var_2 );
if ( !isdefined( var_5 ) )
return 0;
var_6 = vectornormalize( var_5 - var_0 );
if ( !isdefined( var_4 ) || var_4 == "forward" )
var_7 = anglestoforward( var_1 );
else
var_7 = anglestoright( var_1 );
var_8 = vectordot( var_7, var_6 );
var_2.dot = var_8;
return var_8 >= var_3;
}
missile_bullet_trace( var_0, var_1, var_2, var_3 )
{
var_4 = bullettrace( var_0, var_1, 1, level.player, 1, 0, 1 );
if ( !isdefined( var_4["entity"] ) )
return 0;
if ( var_4["entity"] != var_2 )
return 0;
else
return 1;
}
get_forward_point( var_0, var_1 )
{
var_2 = anglestoforward( var_1 );
var_2 = vectornormalize( var_2 );
var_2 = ( var_2[0] * 2, var_2[1] * 2, var_2[2] * 2 );
var_2 = var_2 + var_0;
return var_2;
}
handle_missile_logic( var_0, var_1 )
{
self endon( "cancel_maaws" );
self endon( "death" );
self endon( "disconnect" );
var_2 = "iw6_alienmaawschild_mp";
self.maaws_done = 0;
if ( !isdefined( self.trace_available ) )
thread manage_bullet_trace_queue( var_0 );
while ( self getammocount( var_0 ) )
{
level.alien_on_drill = undefined;
self waittill( "missile_fire", var_3, var_4 );
if ( !isdefined( level.outlined_aliens ) )
level.outlined_aliens = [];
level.outlined_aliens common_scripts\utility::array_removeundefined( level.outlined_aliens );
var_5 = 10000;
var_6 = 0;
var_7 = var_3.origin;
while ( isdefined( var_3 ) && var_6 < var_5 )
{
var_8 = var_3.origin;
var_6 = distancesquared( var_8, var_7 );
wait 0.1;
}
if ( isdefined( var_3 ) )
{
var_3 thread alien_maaws_initial_projectile_death_fx();
var_9 = var_3.origin;
var_10 = var_3.angles;
var_11 = 45;
thread fire_missile_at_angles( var_9, var_10, var_2, 0, ( 1, 0, 0 ) );
common_scripts\utility::waitframe();
var_12 = ( var_10[0] - var_11 / 10, var_10[1] - var_11 / 4, var_10[2] );
if ( isdefined( var_3 ) )
thread fire_missile_at_angles( var_9, var_12, var_2, var_1, ( 0, 1, 0 ) );
common_scripts\utility::waitframe();
var_13 = ( var_10[0] - var_11 / 10, var_10[1] + var_11 / 4, var_10[2] );
if ( isdefined( var_3 ) )
thread fire_missile_at_angles( var_9, var_13, var_2, var_1, ( 0, 0, 1 ) );
common_scripts\utility::waitframe();
if ( var_1 > 2 )
{
var_13 = ( var_10[0], var_10[1] + var_11 / 2, var_10[2] );
if ( isdefined( var_3 ) )
thread fire_missile_at_angles( var_9, var_13, var_2, var_1, ( 1, 1, 0 ) );
common_scripts\utility::waitframe();
var_14 = ( var_10[0], var_10[1] - var_11 / 2, var_10[2] );
if ( isdefined( var_3 ) )
thread fire_missile_at_angles( var_9, var_14, var_2, var_1, ( 1, 0, 1 ) );
common_scripts\utility::waitframe();
}
}
if ( isdefined( var_3 ) )
var_3 delete();
}
self.maaws_done = 1;
}
fire_missile_at_angles( var_0, var_1, var_2, var_3, var_4 )
{
self endon( "death" );
self endon( "disconnect" );
var_5 = get_forward_point( var_0, var_1 );
var_6 = magicbullet( var_2, var_0, var_5, self );
var_6 endon( "death" );
self.player_missiles[self.player_missiles.size] = var_6;
thread damage_alien_on_drill( var_6 );
if ( isdefined( var_3 ) && var_3 > 1 )
{
var_7 = maps\mp\alien\_spawnlogic::get_alive_agents();
if ( level.script == "mp_alien_last" && isdefined( level.active_ancestors ) )
var_7 = common_scripts\utility::array_combine( var_7, level.active_ancestors );
if ( isdefined( level.seeder_active_turrets ) )
var_7 = common_scripts\utility::array_combine( var_7, level.seeder_active_turrets );
var_7 = get_alien_targets_in_fov( self.origin, self.angles, "10" );
var_8 = get_missile_target( var_6, var_7, var_4 );
if ( isdefined( var_8 ) )
{
var_6.target_ent = var_8;
var_9 = ( 0, 0, 10 );
if ( isalive( var_6.target_ent ) && isdefined( var_6.target_ent.alien_type ) && var_6.target_ent.alien_type == "ancestor" )
var_9 = ( 0, 0, 110 );
var_6 missile_settargetent( var_8, var_9 );
}
else
{
wait 0.1;
thread scan_for_targets( var_6, var_4 );
}
}
}
damage_alien_on_drill( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
var_1 = undefined;
var_0 waittill( "death" );
var_1 = var_0.origin;
if ( isdefined( var_1 ) && isdefined( level.alien_on_drill ) && isalive( level.alien_on_drill ) )
{
if ( distancesquared( level.alien_on_drill.origin, var_1 ) < 10000 )
level.alien_on_drill dodamage( 275, var_1, self, var_0, "MOD_PROJECTILE" );
else if ( distancesquared( level.alien_on_drill.origin, var_1 ) < 62500 )
level.alien_on_drill dodamage( 125, var_1, self, var_0, "MOD_PROJECTILE" );
}
}
scan_for_targets( var_0, var_1 )
{
var_0 endon( "death" );
self endon( "death" );
self endon( "disconnect" );
var_2 = undefined;
while ( !isdefined( var_2 ) )
{
var_2 = get_missile_target( var_0, undefined, var_1 );
if ( isdefined( var_2 ) )
{
var_0.target_ent = var_2;
var_3 = ( 0, 0, 10 );
if ( isalive( var_0.target_ent ) && isdefined( var_0.target_ent.alien_type ) && var_0.target_ent.alien_type == "ancestor" )
var_3 = ( 0, 0, 110 );
var_0 missile_settargetent( var_2, var_3 );
break;
}
wait 0.25;
}
}
get_missile_target( var_0, var_1, var_2 )
{
self endon( "death" );
self endon( "disconnect" );
if ( !isdefined( var_0 ) )
return undefined;
var_3 = get_array_of_targets( var_0, "5", var_1, var_2 );
if ( var_3.size == 0 )
{
var_3 = get_array_of_targets( var_0, "45", var_1, var_2 );
if ( var_3.size == 0 )
var_3 = get_array_of_targets( var_0, "89", var_1, var_2 );
}
if ( var_3.size > 0 )
{
var_4 = var_3[0];
foreach ( var_6 in var_3 )
{
if ( isdefined( var_6.alien_type ) && ( var_6.alien_type == "gargoyle" || var_6.alien_type == "bomber" ) )
{
var_4 = var_6;
break;
}
}
if ( !is_in_array( level.outlined_aliens, var_4 ) )
level.outlined_aliens[level.outlined_aliens.size] = var_4;
return var_4;
}
return undefined;
}
get_array_of_targets( var_0, var_1, var_2, var_3 )
{
var_0 endon( "death" );
self endon( "death" );
self endon( "disconnect" );
if ( !isdefined( var_0 ) )
return undefined;
var_4 = 0;
var_5 = [];
var_6 = [];
if ( isdefined( var_2 ) )
var_6 = get_alien_targets_in_fov( self.origin, self.angles, var_1, var_2 );
else
var_6 = get_alien_targets_in_fov( var_0.origin, var_0.angles, var_1 );
if ( var_6.size > 0 )
{
var_6 = common_scripts\utility::get_array_of_closest( var_0.origin, var_6 );
foreach ( var_8 in var_6 )
{
if ( !isdefined( var_0 ) )
break;
if ( !isdefined( var_8 ) )
continue;
var_9 = get_alien_origin( var_8 );
if ( !isdefined( var_9 ) )
continue;
if ( var_8 alien_is_on_drill() )
{
var_5[var_5.size] = var_8;
level.alien_on_drill = var_8;
continue;
}
self.trace_available[self.trace_available.size] = var_0;
var_0 waittill( "my_turn_to_trace" );
if ( !isdefined( var_0 ) )
break;
if ( !isdefined( var_8 ) )
continue;
var_9 = get_alien_origin( var_8 );
if ( !isdefined( var_9 ) )
continue;
if ( isdefined( var_8.coll_model ) )
var_8 = var_8.coll_model;
if ( missile_bullet_trace( var_0.origin, var_9, var_8, var_3 ) )
{
var_5[var_5.size] = var_8;
break;
}
common_scripts\utility::waitframe();
}
}
return var_5;
}
get_alien_targets_in_fov( var_0, var_1, var_2, var_3 )
{
var_4 = [];
if ( !isdefined( var_3 ) )
{
var_5 = maps\mp\alien\_spawnlogic::get_alive_agents();
if ( level.script == "mp_alien_last" && isdefined( level.active_ancestors ) )
var_5 = common_scripts\utility::array_combine( var_5, level.active_ancestors );
if ( isdefined( level.seeder_active_turrets ) )
var_5 = common_scripts\utility::array_combine( var_5, level.seeder_active_turrets );
}
else
var_5 = var_3;
foreach ( var_7 in var_5 )
{
if ( maps\mp\alien\_utility::is_true( var_7.pet ) )
continue;
if ( isdefined( var_7.agent_type ) && ( var_7.agent_type == "kraken" || var_7.agent_type == "kraken_tentacle" ) )
continue;
if ( within_fov_set_dot( var_0, var_1, var_7, level.cosine[var_2] ) )
var_4[var_4.size] = var_7;
}
return var_4;
}
manage_bullet_trace_queue( var_0 )
{
self endon( "death" );
self endon( "disconnect" );
self.trace_available = [];
self.player_missiles = [];
for (;;)
{
self.player_missiles = common_scripts\utility::array_removeundefined( self.player_missiles );
if ( self.maaws_done && self.player_missiles.size == 0 )
break;
if ( self.trace_available.size > 0 )
{
while ( !isdefined( self.trace_available[0] ) )
self.trace_available = common_scripts\utility::array_remove( self.trace_available, self.trace_available[0] );
self.trace_available[0] notify( "my_turn_to_trace" );
self.trace_available = common_scripts\utility::array_remove( self.trace_available, self.trace_available[0] );
}
common_scripts\utility::waitframe();
}
self.trace_available = undefined;
}
get_alien_origin( var_0 )
{
if ( isalive( var_0 ) && isdefined( var_0.alien_type ) && ( var_0.alien_type == "seeder" || var_0.alien_type == "elite" ) )
var_1 = var_0 gettagorigin( "TAG_ORIGIN" );
else if ( isdefined( var_0.alien_type ) && var_0.alien_type == "seeder_spore" )
{
if ( !isdefined( var_0.coll_model ) )
return undefined;
var_1 = var_0 gettagorigin( "J_Spore_46" );
var_0 = var_0.coll_model;
}
else if ( isalive( var_0 ) && isdefined( var_0.alien_type ) && var_0.alien_type == "ancestor" )
var_1 = var_0.origin + ( 0, 0, 110 );
else if ( isalive( var_0 ) && isdefined( var_0.model ) && maps\mp\alien\_utility::has_tag( var_0.model, "J_SpineUpper" ) )
var_1 = var_0 gettagorigin( "J_SpineUpper" );
else
var_1 = var_0.origin + ( 0, 0, 10 );
return var_1;
}
alien_is_on_drill()
{
if ( isdefined( self.melee_type ) && self.melee_type == "synch" && ( isdefined( self.synch_anim_state ) && issubstr( self.synch_anim_state, "attack_drill" ) ) )
return 1;
return 0;
}
alien_maaws_initial_projectile_death_fx()
{
playfx( level._effect["maaws_burst"], self.origin );
}
is_in_array( var_0, var_1 )
{
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
if ( var_0[var_2] == var_1 )
return 1;
}
return 0;
}
canceluse_dpad_maaws( var_0, var_1 )
{
self endon( "disconnect" );
maps\mp\alien\_combat_resources::wait_to_cancel_dpad_weapon();
self notify( "cancel_maaws" );
self takeweapon( "iw6_alienmaaws_mp" );
self.maaws_done = 1;
if ( isdefined( self.last_weapon ) && player_not_carrying_drill_or_cortex() )
{
self switchtoweapon( self.last_weapon );
self enableweaponswitch();
}
return 1;
}
player_not_carrying_drill_or_cortex()
{
if ( !isdefined( level.drill_carrier ) || isdefined( level.drill_carrier ) && self != level.drill_carrier )
return 1;
else if ( !isdefined( level.cortex_carrier ) || isdefined( level.cortex_carrier ) && self != level.cortex_carrier )
return 1;
return 0;
}

View File

@ -0,0 +1,377 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
start_game_type()
{
init();
set_is_private_match();
override_gametype();
register_upgrade_types();
level thread wait_set_initial_player_count();
}
set_is_private_match()
{
setmatchdata( "aliensIsPrivateMatch", getdvarint( "xblive_privatematch" ) );
}
override_gametype()
{
setmatchdata( "gametype", get_alien_game_type() );
}
get_alien_game_type()
{
var_0 = "aliens ch";
var_1 = "aliens hc";
var_2 = "aliens ca";
var_3 = "aliens";
if ( maps\mp\alien\_utility::is_chaos_mode() )
return var_0;
if ( maps\mp\alien\_utility::is_hardcore_mode() )
return var_1;
else if ( maps\mp\alien\_utility::is_casual_mode() )
return var_2;
else
return var_3;
}
init()
{
var_0 = spawnstruct();
var_1 = [];
var_1["aliensTotalDrillDamage"] = get_single_value_struct( 0, "short" );
var_0.single_value_stats = var_1;
var_2 = [];
var_0.challenge_results = var_2;
level.alien_matchdata = var_0;
}
wait_set_initial_player_count()
{
level endon( "gameEnded" );
level waittill( "prematch_over" );
setmatchdata( "aliensInitialPlayerCount", validate_byte( level.players.size ) );
}
on_player_connect()
{
player_init();
set_max_player_count();
set_split_screen();
set_alien_loadout();
set_join_in_progress();
set_relics_selected();
set_upgrades_purchased();
set_upgrades_enabled();
}
player_init()
{
var_0 = spawnstruct();
var_1 = [];
var_1["aliensCashSpentOnWeapon"] = get_single_value_struct( 0, "int" );
var_1["aliensCashSpentOnAbility"] = get_single_value_struct( 0, "int" );
var_1["aliensCashSpentOnTrap"] = get_single_value_struct( 0, "int" );
var_0.single_value_stats = var_1;
var_2 = [];
var_0.perk_upgraded = var_2;
var_3 = [];
var_3["aliensTimesDowned"] = [];
var_3["aliensTimesRevived"] = [];
var_3["aliensTimesBledOut"] = [];
var_0.laststand_record = var_3;
self.alien_matchdata = var_0;
}
set_max_player_count()
{
if ( !isdefined( level.max_player_count ) )
level.max_player_count = 0;
if ( level.players.size + 1 > level.max_player_count )
{
level.max_player_count++;
setmatchdata( "aliensMaxPlayerCount", validate_byte( level.max_player_count ) );
}
}
set_split_screen()
{
setmatchdata( "players", self.clientid, "isSplitscreen", self issplitscreenplayer() );
}
set_join_in_progress()
{
if ( prematch_over() )
setmatchdata( "players", self.clientid, "aliensJIP", 1 );
}
prematch_over()
{
if ( isdefined( level.starttime ) )
return 1;
return 0;
}
set_alien_loadout()
{
setmatchdata( "players", self.clientid, "aliensLoadOut", 0, maps\mp\alien\_persistence::get_selected_perk_0() );
setmatchdata( "players", self.clientid, "aliensLoadOut", 1, maps\mp\alien\_persistence::get_selected_perk_1() );
setmatchdata( "players", self.clientid, "aliensLoadOut", 2, maps\mp\alien\_persistence::get_selected_dpad_up() );
setmatchdata( "players", self.clientid, "aliensLoadOut", 3, maps\mp\alien\_persistence::get_selected_dpad_down() );
setmatchdata( "players", self.clientid, "aliensLoadOut", 4, maps\mp\alien\_persistence::get_selected_dpad_left() );
setmatchdata( "players", self.clientid, "aliensLoadOut", 5, maps\mp\alien\_persistence::get_selected_dpad_right() );
}
set_relics_selected()
{
var_0 = 0;
foreach ( var_2 in level.nerf_list )
{
if ( self _meth_842C( var_2 ) )
{
setmatchdata( "players", self.clientid, "aliensRelics", var_0, var_2 );
var_0++;
}
}
for ( var_4 = var_0; var_4 < level.nerf_list.size; var_4++ )
setmatchdata( "players", self.clientid, "aliensRelics", var_4, "none" );
}
set_upgrades_purchased()
{
var_0 = 0;
foreach ( var_2 in level.alien_upgrades )
{
if ( maps\mp\alien\_persistence::is_upgrade_purchased( var_2 ) )
{
setmatchdata( "players", self.clientid, "aliensUpgradePurchased", var_0, var_2 );
var_0++;
}
}
for ( var_4 = var_0; var_4 < 32; var_4++ )
setmatchdata( "players", self.clientid, "aliensUpgradePurchased", var_4, "none" );
}
set_upgrades_enabled()
{
var_0 = 0;
foreach ( var_2 in level.alien_upgrades )
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( var_2 ) )
{
setmatchdata( "players", self.clientid, "aliensUpgradeEnabled", var_0, var_2 );
var_0++;
}
}
for ( var_4 = var_0; var_4 < 32; var_4++ )
setmatchdata( "players", self.clientid, "aliensUpgradeEnabled", var_4, "none" );
}
inc_drill_heli_damages( var_0 )
{
level.alien_matchdata.single_value_stats["aliensTotalDrillDamage"].value = level.alien_matchdata.single_value_stats["aliensTotalDrillDamage"].value + var_0;
}
set_escape_time_remaining( var_0 )
{
setmatchdata( "aliensEscapeTimeRemaining", validate_int( var_0 ) );
}
update_challenges_status( var_0, var_1 )
{
if ( level.alien_matchdata.challenge_results.size > 25 )
return;
var_2 = spawnstruct();
var_2.challenge_name = var_0;
var_2.result = var_1;
level.alien_matchdata.challenge_results[level.alien_matchdata.challenge_results.size] = var_2;
}
record_perk_upgrade( var_0 )
{
if ( self.alien_matchdata.perk_upgraded.size > 50 )
return;
self.alien_matchdata.perk_upgraded[self.alien_matchdata.perk_upgraded.size] = var_0;
}
inc_downed_counts()
{
inc_laststand_record( "aliensTimesDowned" );
}
inc_revived_counts()
{
inc_laststand_record( "aliensTimesRevived" );
}
inc_bleedout_counts()
{
inc_laststand_record( "aliensTimesBledOut" );
}
inc_laststand_record( var_0 )
{
if ( !isdefined( self.alien_matchdata.laststand_record[var_0][level.num_hive_destroyed] ) )
self.alien_matchdata.laststand_record[var_0][level.num_hive_destroyed] = 0;
self.alien_matchdata.laststand_record[var_0][level.num_hive_destroyed]++;
}
update_spending_type( var_0, var_1 )
{
switch ( var_1 )
{
case "weapon":
self.alien_matchdata.single_value_stats["aliensCashSpentOnWeapon"].value = self.alien_matchdata.single_value_stats["aliensCashSpentOnWeapon"].value + var_0;
break;
case "ability":
self.alien_matchdata.single_value_stats["aliensCashSpentOnAbility"].value = self.alien_matchdata.single_value_stats["aliensCashSpentOnAbility"].value + var_0;
break;
case "trap":
self.alien_matchdata.single_value_stats["aliensCashSpentOnTrap"].value = self.alien_matchdata.single_value_stats["aliensCashSpentOnTrap"].value + var_0;
break;
default:
break;
}
}
endgame( var_0, var_1 )
{
set_game_data( var_0, var_1 );
foreach ( var_3 in level.players )
var_3 set_player_game_data();
sendmatchdata();
}
set_game_data( var_0, var_1 )
{
var_2 = "aliensChallengesCompleted";
setmatchdata( "aliensFinalPlayerCount", validate_byte( level.players.size ) );
setmatchdata( "aliensHivesDestroyed", validate_byte( level.num_hive_destroyed ) );
setmatchdata( "aliensGameOverCondition", var_0 );
setmatchdata( "aliensTotalTimeElapsed", validate_int( var_1 ) );
var_3 = level.alien_matchdata;
foreach ( var_7, var_5 in var_3.single_value_stats )
{
var_6 = validate_value( var_5.value, var_5.value_type );
setmatchdata( var_7, var_6 );
}
foreach ( var_10, var_9 in var_3.challenge_results )
{
setmatchdata( var_2, var_10, "challengeId", var_9.challenge_name );
setmatchdata( var_2, var_10, "success", var_9.result );
}
}
set_player_game_data()
{
copy_from_playerdata();
set_perk_upgraded();
set_laststand_stats();
set_single_value_stats();
}
copy_from_playerdata()
{
setmatchdata( "players", self.clientid, "aliensFinalScore", validate_int( self getcoopplayerdata( "alienSession", "score" ) ) );
setmatchdata( "players", self.clientid, "aliensDrillRepairs", validate_byte( self getcoopplayerdata( "alienSession", "repairs" ) ) );
setmatchdata( "players", self.clientid, "aliensXpEarned", validate_int( self getcoopplayerdata( "alienSession", "experience" ) ) );
}
set_perk_upgraded()
{
foreach ( var_2, var_1 in self.alien_matchdata.perk_upgraded )
setmatchdata( "players", self.clientid, "aliensPerksBought", var_2, var_1 );
}
set_laststand_stats()
{
foreach ( var_5, var_1 in self.alien_matchdata.laststand_record )
{
foreach ( var_4, var_3 in var_1 )
setmatchdata( "players", self.clientid, var_5, var_4, validate_byte( var_3 ) );
}
}
set_single_value_stats()
{
foreach ( var_3, var_1 in self.alien_matchdata.single_value_stats )
{
var_2 = validate_value( var_1.value, var_1.value_type );
setmatchdata( "players", self.clientid, var_3, var_2 );
}
}
validate_value( var_0, var_1 )
{
switch ( var_1 )
{
case "byte":
return validate_byte( var_0 );
case "short":
return validate_short( var_0 );
case "int":
return validate_int( var_0 );
default:
}
}
validate_byte( var_0 )
{
return int( min( var_0, 127 ) );
}
validate_short( var_0 )
{
return int( min( var_0, 32767 ) );
}
validate_int( var_0 )
{
return int( min( var_0, 2147483647 ) );
}
get_single_value_struct( var_0, var_1 )
{
var_2 = spawnstruct();
var_2.value = var_0;
var_2.value_type = var_1;
return var_2;
}
register_upgrade_types()
{
var_0 = "mp/alien/alien_purchasable_items.csv";
var_1 = 0;
var_2 = 1;
var_3 = [];
for ( var_4 = 0; var_4 < 32; var_4++ )
{
var_5 = tablelookup( var_0, var_1, var_4, var_2 );
if ( maps\mp\agents\alien\_alien_agents::is_empty_string( var_5 ) )
break;
var_3[var_3.size] = var_5;
}
level.alien_upgrades = var_3;
}

View File

@ -0,0 +1,319 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
spore_plant_init()
{
level.plant_warning_sent = 0;
level._effect["proj_spit_AOE"] = loadfx( "vfx/gameplay/alien/vfx_alien_fauna_gas" );
level._effect["spore_death_fx"] = loadfx( "vfx/gameplay/alien/vfx_alien_fauna_death" );
level._effect["spore_birth_fx"] = loadfx( "vfx/gameplay/alien/vfx_alien_seeder_spore_birth" );
scriptable_init();
}
scriptable_init()
{
level.alive_plants = [];
level.plants = getscriptablearray( "spore_plant_spawn", "targetname" );
foreach ( var_1 in level.plants )
var_1 thread scriptable_crate_spore_plant();
level thread run_plant_state_logic();
}
scriptable_crate_spore_plant()
{
self.plant_attacking = 0;
self setscriptablepartstate( 0, "inactive" );
self waittill( "grow_plant" );
self.trigger = spawn( "trigger_radius", self.origin, 0, 128, 128 );
wait 0.1;
self.elapsed_time = -1;
thread grow_then_idle();
thread run_plant_attack_on_damage_logic();
thread plant_radius_attack();
self.team = "axis";
self.alien_type = "spore_plant";
self.coll_model = spawn( "script_model", self.origin );
self.coll_model setmodel( "alien_spore_hitbox" );
self.coll_model.origin = self gettagorigin( "J_Spore_hitbox" );
self.coll_model.angles = self.angles;
self.coll_model.parent = self;
self.coll_model.team = self.team;
self.coll_model linkto( self, "J_Spore_hitbox" );
self.coll_model setcandamage( 1 );
self.coll_model setcanradiusdamage( 1 );
self.coll_model.alien_type = "seeder_spore";
level.alive_plants[level.alive_plants.size] = self;
level notify( "added_plant" );
}
remove_old_plants()
{
var_0 = 4;
if ( level.alive_plants.size > 8 )
{
var_1 = level.alive_plants.size - 8;
for ( var_2 = 0; var_2 < var_1; var_2++ )
{
var_3 = level.alive_plants[var_2];
if ( isdefined( var_3 ) )
{
level.alive_plants = common_scripts\utility::array_remove( level.alive_plants, var_3 );
var_3.plant_health = 0;
if ( isdefined( var_3.coll_model ) )
var_3.coll_model dodamage( 1, ( 0, 0, 0 ) );
}
wait 0.1;
}
}
}
run_plant_state_logic()
{
for (;;)
{
var_0 = 0;
level waittill( "drill_planted" );
var_1 = common_scripts\utility::get_array_of_closest( level.drill.origin, level.plants );
foreach ( var_3 in var_1 )
{
if ( distance2d( var_3.origin, level.drill.origin ) < 1024 )
{
if ( var_3 far_enough_from_players( 300 ) )
{
var_3 notify( "grow_plant" );
var_0++;
wait 1.25;
}
if ( var_0 >= get_num_to_spawn() )
break;
}
}
level thread remove_old_plants();
wait 0.1;
}
}
get_num_to_spawn()
{
var_0 = level.players.size;
switch ( var_0 )
{
case 1:
return 4;
case 2:
return 6;
case 3:
return 7;
case 4:
return 8;
default:
break;
}
return 0;
}
far_enough_from_players( var_0 )
{
var_1 = var_0 * var_0;
foreach ( var_3 in level.players )
{
if ( distance2dsquared( self.origin, var_3.origin ) < var_1 )
return 0;
}
return 1;
}
grow_then_idle()
{
self.plant_health = 100;
self setscriptablepartstate( 0, "grow" );
playfx( level._effect["spore_birth_fx"], self.origin, ( 0, 0, 1 ), ( 1, 0, 0 ) );
wait 3.0;
if ( self.plant_attacking != 1 && self.plant_health > 0 )
self setscriptablepartstate( 0, "idle" );
}
run_plant_attack_on_damage_logic()
{
while ( !isdefined( self.coll_model ) )
wait 0.1;
while ( self.plant_health > 0 )
{
self.coll_model waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
if ( self.plant_health <= 0 )
continue;
if ( isdefined( var_1 ) && isdefined( var_1.team ) && var_1.team != self.team )
{
if ( isdefined( var_1 ) && isdefined( var_9 ) )
{
var_10 = var_1;
var_11 = "none";
var_12 = 0;
level thread maps\mp\alien\_challenge_function::update_alien_damage_challenge( var_10, var_1, var_0, var_8, var_4, var_9, var_3, var_2, var_11, var_12, self );
if ( weaponclass( var_9 ) == "spread" )
var_0 = var_0 * 4.0;
if ( var_9 == "aliensemtex_mp" && var_4 == "MOD_IMPACT" )
var_0 = 0;
}
self.plant_health = self.plant_health - var_0;
if ( self.gas_fx_playing == 0 )
thread plant_gas_fx();
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
var_1 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "standard" );
if ( self.plant_health <= 0 )
{
var_13 = 25;
maps\mp\alien\_gamescore::givekillreward( var_1, var_13, undefined, undefined );
}
}
}
wait 0.1;
}
thread stop_trigger_after_time( 3.0 );
self notify( "die" );
level.alive_plants = common_scripts\utility::array_remove( level.alive_plants, self );
playfx( level._effect["spore_death_fx"], self.origin, ( 1, 0, 0 ), ( 0, 0, 1 ) );
wait 0.1;
self setscriptablepartstate( 0, "remove" );
wait 0.1;
self.coll_model delete();
}
stop_trigger_after_time( var_0 )
{
self.gas_fx_playing = 1;
wait( var_0 );
self notify( "stop_trigger_logic" );
wait 0.1;
self.trigger delete();
}
plant_radius_attack()
{
self endon( "stop_trigger_logic" );
self.gassed_players = [];
self.gas_fx_playing = 0;
wait 1.0;
for (;;)
{
self.trigger waittill( "trigger", var_0 );
if ( !isplayer( var_0 ) )
continue;
if ( self.gas_fx_playing == 0 )
thread plant_gas_fx();
self.gassed_players = common_scripts\utility::array_removeundefined( self.gassed_players );
if ( is_in_array( self.gassed_players, var_0 ) )
continue;
thread gas_player( var_0 );
}
}
plant_gas_fx()
{
if ( self.plant_attacking == 0 )
thread plant_attack_anim();
self.gas_fx_playing = 1;
wait 3.0;
self.gas_fx_playing = 0;
}
plant_attack_anim()
{
self endon( "die" );
self setscriptablepartstate( 0, "idle_to_attack" );
self.plant_attacking = 1;
wait 1.0;
self setscriptablepartstate( 0, "attacking" );
wait 1.5;
self setscriptablepartstate( 0, "attack_to_idle" );
wait 1.0;
self setscriptablepartstate( 0, "idle" );
wait 2.0;
self.plant_attacking = 0;
}
is_in_array( var_0, var_1 )
{
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
if ( var_0[var_2] == var_1 )
return 1;
}
return 0;
}
gas_player( var_0 )
{
var_0 endon( "disconnect" );
if ( var_0 maps\mp\alien\_perk_utility::has_perk( "perk_medic", [ 3, 4 ] ) )
return;
if ( self.gas_fx_playing == 0 )
wait 2;
if ( isdefined( self.trigger ) && var_0 istouching( self.trigger ) )
{
self.gassed_players[self.gassed_players.size] = var_0;
thread gas_damage_player( var_0 );
var_0 visionsetpostapplyforplayer( "mp_alien_spore_plant", 1.0 );
var_0 playlocalsound( "spore_tinnitus" );
while ( isdefined( self.trigger ) && var_0 istouching( self.trigger ) && self.gas_fx_playing == 1 )
wait 0.1;
self.gassed_players = common_scripts\utility::array_remove( self.gassed_players, var_0 );
var_0 stoplocalsound( "spore_tinnitus" );
var_0 visionsetpostapplyforplayer( "", 1.0 );
}
}
gas_damage_player( var_0 )
{
var_0 endon( "disconnect" );
while ( is_in_array( self.gassed_players, var_0 ) )
{
if ( maps\mp\alien\_utility::is_casual_mode() )
var_0 dodamage( 2, self.origin, self, self );
else
var_0 dodamage( 1, self.origin, self, self );
wait 0.5;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,465 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
init_armory_weapon_fx();
level.get_custom_weapon_outline_func = ::armory_special_gun_outline_func;
level thread show_weapon_waypoint();
}
init_armory_weapon_fx()
{
level._effect["corrosive_blast"] = loadfx( "vfx/gameplay/alien/vfx_alien_arm_gun_gas" );
}
special_gun_watcher()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
self notify( "gun_watcher_logic" );
self endon( "gun_watcher_logic" );
self notifyonplayercommand( "detonate_venom", "+toggleads_throw" );
self notifyonplayercommand( "detonate_venom", "+ads_akimbo_accessible" );
thread special_gun_detonate_hint_watcher();
var_0 = "none";
var_1 = undefined;
for (;;)
{
self waittill( "grenade_fire", var_1, var_0 );
if ( var_0 == "iw6_aliendlc11_mp" )
{
var_1.health = 1;
thread wait_for_detonation( var_1, var_0 );
thread explode_projectile( var_1, var_0 );
}
wait 0.05;
}
}
special_gun_detonate_hint_watcher()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
self endon( "gun_watcher_logic" );
var_0 = 2;
while ( !isdefined( self.no_more_detonate_hint ) )
{
self waittill( "grenade_fire", var_1, var_2 );
if ( var_2 == "iw6_aliendlc11_mp" )
{
if ( !isdefined( self.projectile_time_out_num ) )
self.projectile_time_out_num = 1;
else if ( self.projectile_time_out_num > var_0 )
{
var_0 = 3;
self.projectile_time_out_num = 0;
thread show_specialweapon_hint_repeat();
}
else
self.projectile_time_out_num++;
}
wait 0.1;
}
}
wait_for_detonation( var_0, var_1 )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "detonated" );
level endon( "game_ended" );
self.adspressed = 0;
thread ads_watcher();
thread toggle_ads_watcher();
var_2 = 100;
var_3 = 0;
var_4 = ( 0, 0, 0 );
for ( var_5 = var_4; self adsbuttonpressed() && var_3 < var_2; var_3 = var_3 + 1 )
wait 0.05;
while ( var_3 < var_2 )
{
if ( isdefined( var_0 ) && self.adspressed )
{
self notify( "projectile_detonate" );
self.no_more_detonate_hint = 1;
return;
}
else if ( !isdefined( var_0 ) )
{
thread cloudmonitor( self, var_5, var_1 );
playsoundatpos( var_5, "aliendlc11_explode" );
return;
}
var_4 = var_0.origin;
var_5 = var_4;
wait 0.05;
var_3 = var_3 + 1;
}
self notify( "projectile_detonate" );
}
toggle_ads_watcher()
{
self endon( "disconnect" );
self endon( "death" );
self endon( "projectile_detonate" );
self endon( "ads_pressed" );
self waittill( "detonate_venom" );
self.adspressed = 1;
self notify( "ads_pressed" );
}
ads_watcher()
{
self endon( "disconnect" );
self endon( "death" );
self endon( "projectile_detonate" );
self endon( "ads_pressed" );
for (;;)
{
if ( self adsbuttonpressed() )
{
self.adspressed = 1;
self notify( "ads_pressed" );
}
wait 0.05;
}
}
explode_projectile( var_0, var_1 )
{
self waittill( "projectile_detonate" );
if ( isdefined( var_0 ) )
{
level thread cloudmonitor( self, var_0.origin, var_1 );
playsoundatpos( var_0.origin, "aliendlc11_explode" );
var_0 delete();
}
}
cloudmonitor( var_0, var_1, var_2 )
{
var_3 = undefined;
var_4 = 200;
var_5 = 150;
var_6 = 250;
var_7 = 5;
var_8 = 5;
var_9 = 0.5;
var_10 = 200;
var_11 = 1000;
var_12 = 1500;
switch ( var_2 )
{
case "iw6_aliendlc11_mp":
var_3 = spawnfx( level._effect["corrosive_blast"], var_1 );
var_4 = 200;
var_5 = 150;
var_6 = 250;
var_7 = 5;
var_8 = 5;
break;
}
var_13 = var_1 - ( 0, 0, var_5 );
var_14 = var_5 + var_5;
var_15 = spawn( "trigger_radius", var_13, 1, var_4, var_14 );
var_15.owner = var_0;
radiusdamage( var_1, var_10, var_12, var_11, var_0, "MOD_EXPLOSIVE" );
earthquake( 0.5, 1, var_1, 512 );
playrumbleonposition( "grenade_rumble", var_1 );
triggerfx( var_3 );
if ( var_2 == "iw6_aliendlc11_mp" )
var_16 = missile_createattractorent( var_15, 20000, 8000 );
var_17 = 0.0;
var_18 = 0.25;
var_19 = 1;
var_20 = 0;
wait( var_19 );
for ( var_17 = var_17 + var_19; var_17 < var_7; var_17 = var_17 + var_18 )
{
var_21 = [];
foreach ( var_23 in level.agentarray )
{
if ( isdefined( var_23 ) && isalive( var_23 ) && var_23 istouching( var_15 ) && !isdefined( var_23.melting ) )
var_21[var_21.size] = var_23;
}
foreach ( var_23 in var_21 )
{
if ( isdefined( var_23 ) && isalive( var_23 ) )
{
var_23 thread cloud_melt_alien( var_6, var_0, var_8, var_15, var_9, var_2 );
common_scripts\utility::waitframe();
}
}
wait( var_18 );
}
var_15 delete();
var_3 delete();
}
alien_corrosive_on()
{
if ( !isdefined( self.is_corrosive ) )
self.is_corrosive = 0;
self.is_corrosive++;
if ( self.is_corrosive == 1 )
self setscriptablepartstate( "body", "corrosive" );
}
alien_corrosive_off()
{
self.is_corrosive--;
if ( self.is_corrosive > 0 )
return;
self.is_corrosive = undefined;
self notify( "corrosive_off" );
self setscriptablepartstate( "body", "normal" );
}
cloud_melt_alien( var_0, var_1, var_2, var_3, var_4, var_5 )
{
self notify( "stasis_cloud_burning" );
self endon( "stasis_cloud_burning" );
self endon( "death" );
if ( !isdefined( var_2 ) )
var_2 = 6;
self.melting = 1;
if ( !isdefined( level.spider ) || isdefined( level.spider ) && self != level.spider )
alien_corrosive_on();
var_6 = 0;
while ( var_6 < var_2 )
{
if ( isdefined( var_3 ) )
self dodamage( var_0, self.origin, var_1, var_1, "MOD_UNKNOWN" );
else
self dodamage( var_0, self.origin, var_1 );
var_6 = var_6 + var_4;
wait( var_4 );
}
if ( !isdefined( level.spider ) || isdefined( level.spider ) && self != level.spider )
alien_corrosive_off();
self.melting = undefined;
}
give_special_gun()
{
self makeusable();
self sethintstring( &"MP_ALIEN_ARMORY_SPECIAL_WEAPON_PICKUP" );
maps\mp\alien\_outline_proto::add_to_outline_weapon_watch_list( self, 0 );
for (;;)
{
self waittill( "trigger", var_0 );
if ( var_0.has_special_weapon || var_0.is_holding_deployable )
{
var_0 maps\mp\_utility::setlowermessage( "cant_buy", &"ALIEN_COLLECTIBLES_PLAYER_HOLDING", 3 );
continue;
}
if ( !var_0 hasweapon( "iw6_aliendlc11_mp" ) )
{
if ( var_0 maps\mp\alien\_prestige::prestige_getpistolsonly() == 1 )
{
var_0 maps\mp\_utility::setlowermessage( "cant_buy", &"ALIEN_COLLECTIBLES_PLAYER_NERFED", 3 );
continue;
}
var_0 giveweapon( "iw6_aliendlc11_mp" );
var_1 = 2;
if ( var_0 maps\mp\alien\_prestige::prestige_getminammo() != 1 )
var_1 = 1;
var_0 setweaponammoclip( "iw6_aliendlc11_mp", var_1 );
var_0 setweaponammostock( "iw6_aliendlc11_mp", var_1 );
var_0 switchtoweapon( "iw6_aliendlc11_mp" );
var_0 thread show_specialweapon_hint();
level notify( "scorpion_gun_pickedup" );
var_0 maps\mp\alien\_utility::_enableadditionalprimaryweapon();
var_0 thread disable_special_gun_purchase();
var_0._has_armory_weapon = 1;
}
}
}
disable_special_gun_purchase()
{
var_0 = getentarray( "anti_alien_gun", "targetname" );
foreach ( var_2 in var_0 )
var_2 disableplayeruse( self );
}
show_specialweapon_hint()
{
self endon( "disconnect" );
wait 1;
maps\mp\_utility::setlowermessage( "weapon_hint", &"MP_ALIEN_ARMORY_SPECIAL_WEAPON_HINT", 6 );
}
show_specialweapon_hint_repeat()
{
self endon( "disconnect" );
wait 1;
self iprintlnbold( &"MP_ALIEN_ARMORY_SPECIAL_WEAPON_HINT" );
}
show_weapon_waypoint()
{
level waittill( "scorpion_gun_pickedup" );
level thread spitter_ammo_drop_logic();
}
spitter_ammo_drop_logic()
{
var_0 = 25;
var_1 = 45;
level.spitter_ammo_active = 0;
level endon( "game_ended" );
var_2 = gettime() + var_0 * 1000;
var_3 = gettime() + var_1 * 1000;
for (;;)
{
level waittill( "alien_killed", var_4 );
var_5 = gettime();
var_6 = 0;
if ( var_5 > var_2 && level.spitter_ammo_active < 4 )
{
if ( gettime() < var_3 )
{
if ( randomintrange( 0, 100 ) > 92 )
var_6 = 1;
}
else
var_6 = 1;
}
if ( var_6 && isdefined( var_4 ) )
{
var_2 = gettime() + var_0 * 1000;
var_3 = gettime() + var_1 * 1000;
level thread spitter_ammo_drop( var_4 );
}
wait 0.05;
}
}
spitter_ammo_drop( var_0 )
{
var_1 = getgroundposition( var_0 + ( 0, 0, 10 ), 16 );
var_2 = spawn( "script_model", var_1 );
var_2 setmodel( "alien_spider_egg_ammo" );
wait 1;
playfxontag( level._effect["spitter_ammo"], var_2, "j_egg_center" );
var_2 thread spitter_ammo_think();
var_2 thread spitter_ammo_rotate();
level.spitter_ammo_active++;
}
spitter_ammo_think()
{
level endon( "game_ended" );
self endon( "death" );
var_0 = 30;
self makeusable();
self sethintstring( &"MP_ALIEN_ARMORY_SPITTER_AMMO_PICKUP" );
thread spitter_ammo_delete( var_0 );
for (;;)
{
self waittill( "trigger", var_1 );
if ( var_1 hasweapon( "iw6_aliendlc11_mp" ) )
{
var_2 = var_1 getweaponammoclip( "iw6_aliendlc11_mp" );
var_3 = var_1 getweaponammostock( "iw6_aliendlc11_mp" );
if ( var_2 + var_3 >= weaponmaxammo( "iw6_aliendlc11_mp" ) + weaponclipsize( "iw6_aliendlc11_mp" ) )
{
var_1 maps\mp\_utility::setlowermessage( "ammo_taken", &"ALIEN_COLLECTIBLES_AMMO_MAX", 3 );
continue;
}
var_4 = 2;
if ( var_1 maps\mp\alien\_prestige::prestige_getminammo() != 1 )
var_4 = 1;
var_1 setweaponammoclip( "iw6_aliendlc11_mp", var_2 + var_4 );
var_1 setweaponammostock( "iw6_aliendlc11_mp", var_3 + var_4 );
var_1 playsound( "extinction_item_pickup" );
playfx( level._effect["alien_teleport"], self.origin );
level.spitter_ammo_active--;
self delete();
return;
}
}
}
spitter_ammo_rotate()
{
self endon( "death" );
for (;;)
{
self rotateyaw( 360, 5 );
wait 5;
}
}
spitter_ammo_delete( var_0 )
{
self endon( "death" );
wait( var_0 );
level.spitter_ammo_active--;
self delete();
}
armory_special_gun_outline_func( var_0 )
{
if ( isdefined( var_0.targetname ) && var_0.targetname == "anti_alien_gun" )
return isdefined( self._has_armory_weapon );
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,527 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
init_beacon_weapon_fx();
level thread wait_for_gun_to_be_crafted();
}
init_beacon_weapon_fx()
{
level._effect["fire_blast"] = loadfx( "vfx/gameplay/alien/vfx_alien_arm_gun_fire_cloud" );
level._effect["electric_blast"] = loadfx( "vfx/gameplay/alien/vfx_alien_arm_gun_li_cloud" );
level._effect["spore_blast"] = loadfx( "vfx/gameplay/alien/vfx_alien_arm_gun_sp_gas" );
level._effect["corrosive_blast"] = loadfx( "vfx/gameplay/alien/vfx_alien_arm_gun_gas" );
level._effect["spitter_ammo"] = loadfx( "vfx/_requests/mp_alien_armory/spitter_ammo" );
}
special_gun_watcher()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
self notify( "gun_watcher_logic" );
self endon( "gun_watcher_logic" );
self notifyonplayercommand( "detonate_venom", "+toggleads_throw" );
self notifyonplayercommand( "detonate_venom", "+ads_akimbo_accessible" );
thread special_gun_detonate_hint_watcher();
var_0 = "none";
var_1 = undefined;
for (;;)
{
self waittill( "grenade_fire", var_1, var_0 );
if ( is_venom_weapon( var_0 ) )
{
var_1.health = 1;
thread wait_for_detonation( var_1, var_0 );
thread explode_projectile( var_1, var_0 );
}
else if ( is_venom_spore_weapon( var_0 ) )
{
var_1.health = 1;
thread do_spore_gun_projectile( var_1, var_0 );
}
wait 0.05;
}
}
special_gun_detonate_hint_watcher()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
self endon( "gun_watcher_logic" );
var_0 = 2;
while ( !isdefined( self.no_more_detonate_hint ) )
{
self waittill( "grenade_fire", var_1, var_2 );
if ( is_venom_weapon( var_2 ) )
{
if ( !isdefined( self.projectile_time_out_num ) )
self.projectile_time_out_num = 1;
else if ( self.projectile_time_out_num > var_0 )
{
var_0 = 3;
self.projectile_time_out_num = 0;
thread show_specialweapon_hint_repeat();
}
else
self.projectile_time_out_num++;
}
wait 0.1;
}
}
wait_for_detonation( var_0, var_1 )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "detonated" );
level endon( "game_ended" );
self.adspressed = 0;
thread ads_watcher();
thread toggle_ads_watcher();
var_2 = 55;
var_3 = 0;
var_4 = ( 0, 0, 0 );
for ( var_5 = var_4; self adsbuttonpressed() && var_3 < var_2; var_3 = var_3 + 1 )
wait 0.05;
while ( var_3 < var_2 )
{
if ( isdefined( var_0 ) && self.adspressed )
{
self notify( "projectile_detonate" );
self.no_more_detonate_hint = 1;
return;
}
else if ( !isdefined( var_0 ) )
{
thread cloudmonitor( self, var_5, var_1 );
playsoundatpos( var_5, "aliendlc11_explode" );
return;
}
var_4 = var_0.origin;
var_5 = var_4;
wait 0.05;
var_3 = var_3 + 1;
}
self notify( "projectile_detonate" );
}
toggle_ads_watcher()
{
self endon( "disconnect" );
self endon( "death" );
self endon( "projectile_detonate" );
self endon( "ads_pressed" );
self waittill( "detonate_venom" );
self.adspressed = 1;
self notify( "ads_pressed" );
}
ads_watcher()
{
self endon( "disconnect" );
self endon( "death" );
self endon( "projectile_detonate" );
self endon( "ads_pressed" );
for (;;)
{
if ( self adsbuttonpressed() )
{
self.adspressed = 1;
self notify( "ads_pressed" );
}
wait 0.05;
}
}
explode_projectile( var_0, var_1 )
{
self waittill( "projectile_detonate" );
if ( isdefined( var_0 ) )
{
switch ( var_1 )
{
case "iw6_aliendlc11sp_mp":
thread maps\mp\agents\alien\_alien_seeder::seeder_spawn_turret( self, var_0.origin, 1, 1 );
break;
default:
level thread cloudmonitor( self, var_0.origin, var_1 );
}
playsoundatpos( var_0.origin, "aliendlc11_explode" );
var_0 delete();
}
}
cloudmonitor( var_0, var_1, var_2 )
{
var_3 = undefined;
var_4 = 200;
var_5 = 150;
var_6 = 250;
var_7 = 5;
var_8 = 5;
var_9 = 0.5;
var_10 = 200;
var_11 = 1000;
var_12 = 1500;
switch ( var_2 )
{
case "iw6_aliendlc11li_mp":
var_3 = spawnfx( level._effect["electric_blast"], var_1 );
var_4 = 200;
var_5 = 150;
var_6 = 250;
var_7 = 5;
var_8 = 5;
break;
case "iw6_aliendlc11sp_mp":
var_3 = spawnfx( level._effect["spore_blast"], var_1 );
var_4 = 200;
var_5 = 150;
var_6 = 250;
var_7 = 5;
var_8 = 5;
break;
case "iw6_aliendlc11fi_mp":
var_3 = spawnfx( level._effect["fire_blast"], var_1 );
var_4 = 200;
var_5 = 150;
var_6 = 250;
var_7 = 5;
var_8 = 5;
break;
case "iw6_aliendlc11_mp":
var_3 = spawnfx( level._effect["corrosive_blast"], var_1 );
var_4 = 200;
var_5 = 150;
var_6 = 250;
var_7 = 5;
var_8 = 5;
break;
}
var_13 = var_1 - ( 0, 0, var_5 );
var_14 = var_5 + var_5;
var_15 = spawn( "trigger_radius", var_13, 1, var_4, var_14 );
var_15.owner = var_0;
radiusdamage( var_1, var_10, var_12, var_11, var_0, "MOD_EXPLOSIVE" );
earthquake( 0.5, 1, var_1, 512 );
playrumbleonposition( "grenade_rumble", var_1 );
triggerfx( var_3 );
if ( var_2 == "iw6_aliendlc11_mp" )
var_16 = missile_createattractorent( var_15, 20000, 8000 );
if ( var_2 == "iw6_aliendlc11li_mp" )
playsoundatpos( var_1, "venom_lightning_expl" );
if ( var_2 == "iw6_aliendlc11fi_mp" )
playsoundatpos( var_1, "venom_fire_expl" );
if ( var_2 == "iw6_aliendlc11sp_mp" )
playsoundatpos( var_1, "venom_spore" );
var_17 = 0.0;
var_18 = 0.25;
var_19 = 1;
var_20 = 0;
wait( var_19 );
for ( var_17 = var_17 + var_19; var_17 < var_7; var_17 = var_17 + var_18 )
{
var_21 = [];
foreach ( var_23 in level.agentarray )
{
if ( isdefined( var_23 ) && isalive( var_23 ) && var_23 istouching( var_15 ) && !isdefined( var_23.melting ) )
var_21[var_21.size] = var_23;
}
if ( isdefined( level.seeder_active_turrets ) )
{
foreach ( var_26 in level.seeder_active_turrets )
{
if ( isdefined( var_26 ) && isdefined( var_26.coll_model ) && var_26.coll_model istouching( var_15 ) )
var_26.coll_model dodamage( var_6, var_26.origin, var_0, var_0 );
}
}
foreach ( var_23 in var_21 )
{
if ( isdefined( var_23 ) && isalive( var_23 ) )
{
var_23 thread cloud_melt_alien( var_6, var_0, var_8, var_15, var_9, var_2 );
common_scripts\utility::waitframe();
}
}
wait( var_18 );
}
var_15 delete();
var_3 delete();
}
alien_corrosive_on()
{
if ( !isdefined( self.is_corrosive ) )
self.is_corrosive = 0;
self.is_corrosive++;
if ( self.is_corrosive == 1 )
self setscriptablepartstate( "body", "corrosive" );
}
alien_corrosive_off()
{
self.is_corrosive--;
if ( self.is_corrosive > 0 )
return;
self.is_corrosive = undefined;
self notify( "corrosive_off" );
self setscriptablepartstate( "body", "normal" );
}
cloud_melt_alien( var_0, var_1, var_2, var_3, var_4, var_5 )
{
self notify( "stasis_cloud_burning" );
self endon( "stasis_cloud_burning" );
self endon( "death" );
if ( !isdefined( var_2 ) )
var_2 = 6;
self.melting = 1;
switch ( var_5 )
{
case "iw6_aliendlc11_mp":
if ( !isdefined( level.spider ) || isdefined( level.spider ) && self != level.spider )
alien_corrosive_on();
break;
case "iw6_aliendlc11fi_mp":
thread maps\mp\alien\_damage::catch_alien_on_fire( var_1 );
break;
case "iw6_aliendlc11li_mp":
thread maps\mp\alien\_alien_fx::fx_stun_damage();
break;
}
var_6 = 0;
while ( var_6 < var_2 )
{
if ( isdefined( var_3 ) )
self dodamage( var_0, self.origin, var_1, var_1, "MOD_UNKNOWN" );
else
self dodamage( var_0, self.origin, var_1 );
var_6 = var_6 + var_4;
wait( var_4 );
}
if ( isdefined( self.is_corrosive ) )
alien_corrosive_off();
self.melting = undefined;
}
wait_for_gun_to_be_crafted()
{
level waittill( "venom_crafted" );
level thread venom_ammo_drop_logic();
}
venom_ammo_drop_logic()
{
var_0 = 25;
var_1 = 45;
level.spitter_ammo_active = 0;
level endon( "game_ended" );
var_2 = gettime() + var_0 * 1000;
var_3 = gettime() + var_1 * 1000;
for (;;)
{
level waittill( "alien_killed", var_4 );
var_5 = gettime();
var_6 = 0;
if ( var_5 > var_2 && level.spitter_ammo_active < 4 )
{
if ( gettime() < var_3 )
{
if ( randomintrange( 0, 100 ) > 92 )
var_6 = 1;
}
else
var_6 = 1;
}
if ( var_6 && isdefined( var_4 ) )
{
var_2 = gettime() + var_0 * 1000;
var_3 = gettime() + var_1 * 1000;
level thread spitter_ammo_drop( var_4 );
}
wait 0.05;
}
}
spitter_ammo_drop( var_0 )
{
var_1 = getgroundposition( var_0 + ( 0, 0, 10 ), 16 );
var_2 = spawn( "script_model", var_1 );
var_2 setmodel( "alien_spider_egg_ammo" );
wait 1;
playfxontag( level._effect["spitter_ammo"], var_2, "j_egg_center" );
var_2 thread spitter_ammo_think();
var_2 thread spitter_ammo_rotate();
level.spitter_ammo_active++;
}
spitter_ammo_think()
{
level endon( "game_ended" );
self endon( "death" );
var_0 = 30;
self makeusable();
self sethintstring( &"MP_ALIEN_BEACON_VENOM_AMMO_PICKUP" );
thread spitter_ammo_delete( var_0 );
for (;;)
{
self waittill( "trigger", var_1 );
var_2 = var_1 get_venom_weapon();
if ( isdefined( var_2 ) )
{
var_3 = var_1 getweaponammoclip( var_2 );
var_4 = var_1 getweaponammostock( var_2 );
if ( var_3 + var_4 >= weaponmaxammo( var_2 ) + weaponclipsize( var_2 ) )
{
var_1 maps\mp\_utility::setlowermessage( "ammo_taken", &"ALIEN_COLLECTIBLES_AMMO_MAX", 3 );
continue;
}
var_5 = 2;
if ( var_1 maps\mp\alien\_prestige::prestige_getminammo() != 1 )
var_5 = 1;
var_1 setweaponammoclip( var_2, var_3 + var_5 );
var_1 setweaponammostock( var_2, var_4 + var_5 );
var_1 playsound( "extinction_item_pickup" );
playfx( level._effect["alien_teleport"], self.origin );
level.spitter_ammo_active--;
self delete();
return;
}
}
}
get_venom_weapon()
{
if ( self hasweapon( "iw6_aliendlc11_mp" ) )
return "iw6_aliendlc11_mp";
else if ( self hasweapon( "iw6_aliendlc11li_mp" ) )
return "iw6_aliendlc11li_mp";
else if ( self hasweapon( "iw6_aliendlc11fi_mp" ) )
return "iw6_aliendlc11fi_mp";
else if ( self hasweapon( "iw6_aliendlc11sp_mp" ) )
return "iw6_aliendlc11sp_mp";
return undefined;
}
spitter_ammo_rotate()
{
self endon( "death" );
for (;;)
{
self rotateyaw( 360, 5 );
wait 5;
}
}
spitter_ammo_delete( var_0 )
{
self endon( "death" );
wait( var_0 );
level.spitter_ammo_active--;
self delete();
}
show_specialweapon_hint_repeat()
{
self endon( "disconnect" );
wait 1;
self iprintlnbold( &"MP_ALIEN_BEACON_VENOM_HINT" );
}
is_venom_weapon( var_0 )
{
switch ( var_0 )
{
case "iw6_aliendlc11fi_mp":
case "iw6_aliendlc11li_mp":
case "iw6_aliendlc11_mp":
return 1;
}
return 0;
}
is_venom_spore_weapon( var_0 )
{
if ( var_0 == "iw6_aliendlc11sp_mp" )
return 1;
return 0;
}
do_spore_gun_projectile( var_0, var_1 )
{
var_0 endon( "death" );
var_2 = ( 0, 0, 0 );
var_3 = 144;
for (;;)
{
if ( distancesquared( var_2, var_0.origin ) < var_3 )
{
thread maps\mp\agents\alien\_alien_seeder::seeder_spawn_turret( self, var_0.origin, 1, 1 );
if ( isdefined( var_0 ) )
var_0 delete();
}
var_2 = var_0.origin;
wait 0.1;
}
}

View File

@ -0,0 +1,381 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_challenge()
{
var_0 = getdvar( "ui_mapname" );
level.alien_challenge_table = "mp/alien/" + var_0 + "_challenges.csv";
if ( maps\mp\alien\_utility::is_hardcore_mode() )
{
level.alien_challenge_table = "mp/alien/" + var_0 + "_hardcore_challenges.csv";
if ( !tableexists( level.alien_challenge_table ) )
level.alien_challenge_table = "mp/alien/" + var_0 + "_challenges.csv";
}
maps\mp\alien\_challenge_function::init_challenge_type();
}
spawn_challenge()
{
if ( !maps\mp\alien\_utility::alien_mode_has( "challenge" ) )
return;
level.current_challenge_index = undefined;
level thread spawn_challenge_internal();
}
spawn_challenge_internal()
{
var_0 = get_valid_challenge();
if ( !isdefined( var_0 ) )
return;
activate_new_challenge( var_0 );
}
update_challenge( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( !current_challenge_is( var_0 ) || !maps\mp\alien\_utility::alien_mode_has( "challenge" ) )
return;
if ( level.pre_challenge_active )
return;
var_10 = level.challenge_data[level.current_challenge];
var_10 [[ var_10.updatefunc ]]( var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
}
end_current_challenge()
{
if ( current_challenge_exist() && maps\mp\alien\_utility::alien_mode_has( "challenge" ) )
deactivate_current_challenge();
}
remove_all_challenge_cases()
{
level notify( "remove_all_challenge_case" );
}
get_valid_challenge()
{
var_0 = [];
foreach ( var_2 in level.challenge_data )
{
if ( isdefined( var_2.already_issued ) )
continue;
if ( level.players.size == 1 && !maps\mp\alien\_utility::is_true( var_2.allowedinsolo ) )
continue;
if ( !isdefined( var_2.allowed_cycles ) )
continue;
var_3 = strtok( var_2.allowed_cycles, " " );
foreach ( var_5 in var_3 )
{
if ( level.cycle_count - 1 == int( var_5 ) )
{
var_6 = maps\mp\alien\_spawn_director::get_current_encounter();
if ( !isdefined( var_6 ) )
continue;
if ( should_skip_challenge( var_2 ) )
continue;
var_7 = strtok( var_2.allowed_hives, " " );
foreach ( var_9 in var_7 )
{
if ( var_9 == var_6 )
{
var_0[var_0.size] = var_2;
break;
}
}
break;
}
}
}
if ( var_0.size > 0 )
{
var_13 = var_0[randomint( var_0.size )];
var_13.already_issued = 1;
return var_13.ref;
}
return undefined;
}
should_skip_challenge( var_0 )
{
var_1 = var_0.ref == "ar_only" || var_0.ref == "smg_only" || var_0.ref == "lmgs_only" || var_0.ref == "shotguns_only" || var_0.ref == "2_weapons_only" || var_0.ref == "semi_autos_only" || var_0.ref == "new_weapon" || var_0.ref == "snipers_only";
if ( !var_1 )
return 0;
var_2 = 0;
foreach ( var_4 in level.players )
{
if ( var_4 maps\mp\alien\_prestige::prestige_getpistolsonly() == 1 )
var_2++;
}
if ( var_0.ref == "new_weapon" && var_2 > 0 )
return 1;
if ( var_2 >= level.players.size - 1 )
return 1;
else
return 0;
}
deactivate_current_challenge()
{
if ( !current_challenge_exist() )
return;
var_0 = level.challenge_data[level.current_challenge];
unset_current_challenge();
if ( var_0 [[ var_0.issuccessfunc ]]() )
{
display_challenge_message( "challenge_success", 0 );
var_0 [[ var_0.rewardfunc ]]();
maps\mp\alien\_gamescore::update_players_encounter_performance( maps\mp\alien\_gamescore::get_challenge_score_component_name(), "challenge_complete" );
maps\mp\alien\_persistence::update_lb_aliensession_challenge( 1 );
maps\mp\alien\_alien_matchdata::update_challenges_status( var_0.ref, 1 );
level.num_challenge_completed++;
if ( !maps\mp\alien\_utility::is_casual_mode() )
{
if ( level.num_challenge_completed == 10 )
{
foreach ( var_2 in level.players )
var_2 maps\mp\alien\_persistence::give_player_tokens( 2, 1 );
}
}
}
else
{
display_challenge_message( "challenge_failed", 0 );
var_0 [[ var_0.failfunc ]]();
level.all_challenge_completed = 0;
maps\mp\alien\_persistence::update_lb_aliensession_challenge( 0 );
maps\mp\alien\_alien_matchdata::update_challenges_status( var_0.ref, 0 );
}
var_0 [[ var_0.deactivatefunc ]]();
}
activate_new_challenge( var_0 )
{
var_1 = level.challenge_data[var_0];
if ( var_1 [[ var_1.canactivatefunc ]]() )
{
var_2 = maps\mp\alien\_challenge_function::get_challenge_scalar( var_0 );
if ( isdefined( var_2 ) )
{
level.challenge_data[var_0].goal = var_2;
level.current_challenge_scalar = var_2;
}
else
level.current_challenge_scalar = -1;
display_challenge_message( var_0, 1, var_2 );
set_current_challenge( var_0 );
level.pre_challenge_active = 1;
challenge_countdown();
level.pre_challenge_active = 0;
foreach ( var_4 in level.players )
var_4 setclientomnvar( "ui_intel_prechallenge", 0 );
level.current_challenge_pre_challenge = 0;
var_1 [[ var_1.activatefunc ]]();
}
else
var_1 [[ var_1.failactivatefunc ]]();
}
challenge_countdown()
{
level endon( "game_ended" );
var_0 = int( gettime() + 5000 );
foreach ( var_2 in level.players )
{
var_2 setclientomnvar( "ui_intel_timer", var_0 );
var_2 setclientomnvar( "ui_intel_title", 1 );
}
level.current_challenge_title = 1;
wait 5;
foreach ( var_2 in level.players )
{
var_2 setclientomnvar( "ui_intel_timer", -1 );
var_2 setclientomnvar( "ui_intel_title", -1 );
}
level.current_challenge_title = -1;
wait 0.5;
}
can_pick_up_challenge( var_0 )
{
if ( !isplayer( var_0 ) )
return 0;
if ( isai( var_0 ) )
return 0;
if ( !isalive( var_0 ) || isdefined( var_0.fauxdead ) && var_0.fauxdead )
return 0;
return 1;
}
display_challenge_message( var_0, var_1, var_2 )
{
var_3 = tablelookup( level.alien_challenge_table, 1, var_0, 0 );
foreach ( var_5 in level.players )
{
if ( var_1 )
{
if ( isdefined( var_2 ) )
var_5 setclientomnvar( "ui_intel_challenge_scalar", var_2 );
else
var_5 setclientomnvar( "ui_intel_challenge_scalar", -1 );
var_5 setclientomnvar( "ui_intel_prechallenge", 1 );
var_5 setclientomnvar( "ui_intel_active_index", int( var_3 ) );
level.current_challenge_index = int( var_3 );
level.current_challenge_pre_challenge = 1;
var_5 playlocalsound( "mp_intel_received" );
continue;
}
var_5 setclientomnvar( "ui_intel_active_index", -1 );
var_5 setclientomnvar( "ui_intel_progress_current", -1 );
var_5 setclientomnvar( "ui_intel_progress_max", -1 );
var_5 setclientomnvar( "ui_intel_percent", -1 );
var_5 setclientomnvar( "ui_intel_target_player", -1 );
var_5 setclientomnvar( "ui_intel_prechallenge", 0 );
var_5 setclientomnvar( "ui_intel_timer", -1 );
var_5 setclientomnvar( "ui_intel_challenge_scalar", -1 );
level.current_challenge_index = -1;
level.current_challenge_progress_max = -1;
level.current_challenge_progress_current = -1;
level.current_challenge_percent = -1;
level.current_challenge_target_player = -1;
level.current_challenge_timer = -1;
level.current_challenge_scalar = -1;
level.current_challenge_pre_challenge = 0;
}
if ( var_1 )
return;
level thread show_challenge_outcome( var_0, var_3 );
}
show_challenge_outcome( var_0, var_1 )
{
level endon( "game_ended" );
wait 1;
foreach ( var_3 in level.players )
{
if ( var_0 == "challenge_failed" )
{
var_3 setclientomnvar( "ui_intel_active_index", int( var_1 ) );
var_3 playlocalsound( "mp_intel_fail" );
continue;
}
var_3 setclientomnvar( "ui_intel_active_index", int( var_1 ) );
var_3 playlocalsound( "mp_intel_success" );
}
wait 4;
foreach ( var_3 in level.players )
var_3 setclientomnvar( "ui_intel_active_index", -1 );
}
current_challenge_exist()
{
return isdefined( level.current_challenge );
}
current_challenge_is( var_0 )
{
return current_challenge_exist() && level.current_challenge == var_0;
}
unset_current_challenge()
{
level.current_challenge = undefined;
}
set_current_challenge( var_0 )
{
level.current_challenge = var_0;
}
handle_challenge_hotjoin()
{
self endon( "disconnect" );
self setclientomnvar( "ui_intel_prechallenge", level.current_challenge_pre_challenge );
if ( current_challenge_exist() )
{
self setclientomnvar( "ui_intel_active_index", int( level.current_challenge_index ) );
self setclientomnvar( "ui_intel_progress_current", int( level.current_challenge_progress_current ) );
self setclientomnvar( "ui_intel_progress_max", int( level.current_challenge_progress_max ) );
self setclientomnvar( "ui_intel_percent", int( level.current_challenge_percent ) );
self setclientomnvar( "ui_intel_target_player", int( level.current_challenge_target_player ) );
self setclientomnvar( "ui_intel_title", int( level.current_challenge_title ) );
if ( level.current_challenge_timer > 0 )
self setclientomnvar( "ui_intel_timer", int( gettime() + level.current_challenge_timer * 1000 ) );
self setclientomnvar( "ui_intel_challenge_scalar", level.current_challenge_scalar );
}
if ( level.current_challenge == "50_percent_accuracy" || level.current_challenge == "75_percent_accuracy" )
{
var_0 = level.challenge_data[level.current_challenge];
thread maps\mp\alien\_challenge_function::track_percent_accuracy_shots_fired_internal( var_0 );
}
else if ( level.current_challenge == "no_reloads" )
thread maps\mp\alien\_challenge_function::wait_for_reload();
else if ( level.current_challenge == "no_abilities" )
thread maps\mp\alien\_challenge_function::wait_for_ability_use();
if ( isdefined( level.current_drill_health ) )
setomnvar( "ui_alien_drill_health_text", int( level.current_drill_health ) );
if ( isdefined( level.current_drill_time ) )
setomnvar( "ui_alien_drill_end_milliseconds", int( level.current_drill_time ) );
}
get_num_challenge_completed()
{
if ( !isdefined( level.num_challenge_completed ) )
return 0;
else
return level.num_challenge_completed;
}

File diff suppressed because it is too large Load Diff

1372
maps/mp/alien/_chaos.gsc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,130 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
chaos_playerlaststand( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
{
var_8 = chaos_gameshouldend( self );
if ( var_8 )
maps\mp\alien\_chaos_utility::chaos_end_game();
if ( maps\mp\alien\_laststand::is_killed_by_kill_trigger( var_7 ) )
return process_killed_by_kill_trigger( var_7 );
chaos_dropintolaststand( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 );
}
process_killed_by_kill_trigger( var_0 )
{
self setorigin( var_0.origin );
maps\mp\alien\_death::set_kill_trigger_event_processed( self, 0 );
if ( !self.inlaststand )
self dodamage( 1000, self.origin );
return;
}
chaos_dropintolaststand( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self endon( "disconnect" );
level endon( "game_ended" );
self notify( "last_stand" );
maps\mp\alien\_laststand::enter_gamemodespecificaction();
maps\mp\alien\_laststand::enter_laststand();
if ( maps\mp\alien\_laststand::get_last_stand_count() > 0 )
chaos_self_revive( var_8 );
else
maps\mp\alien\_laststand::wait_to_be_revived( self, self.origin, undefined, undefined, 1, 3000, ( 0.33, 0.75, 0.24 ), undefined, 0, var_8, 1 );
self notify( "revive" );
maps\mp\alien\_laststand::exit_laststand();
maps\mp\alien\_laststand::exit_gamemodespecificaction();
}
chaos_self_revive( var_0 )
{
self endon( "disconnect" );
self endon( "revive" );
level endon( "game_ended" );
set_in_chaos_self_revive( self, 1 );
maps\mp\alien\_laststand::take_laststand( self, 1 );
maps\mp\alien\_laststand::register_laststand_ammo();
return wait_for_chaos_self_revive( var_0, 15 );
}
wait_for_chaos_self_revive( var_0, var_1 )
{
if ( var_0 )
{
level waittill( "forever" );
return 0;
}
maps\mp\alien\_hud::set_last_stand_timer( self, var_1 );
common_scripts\utility::waittill_any_timeout( var_1, "revive_success" );
maps\mp\alien\_hud::clear_last_stand_timer( self );
return 1;
}
chaos_gameshouldend( var_0 )
{
return get_team_self_revive_count() == 0 && maps\mp\alien\_laststand::everyone_else_all_in_laststand( var_0 ) && no_one_else_in_chaos_self_revive( var_0 );
}
no_one_else_in_chaos_self_revive( var_0 )
{
foreach ( var_2 in level.players )
{
if ( var_2 == var_0 )
continue;
if ( is_in_chaos_self_revive( var_2 ) )
return 0;
}
return 1;
}
get_team_self_revive_count()
{
var_0 = 0;
foreach ( var_2 in level.players )
var_0 = var_0 + var_2 maps\mp\alien\_laststand::get_last_stand_count();
return var_0;
}
chaos_player_init_laststand()
{
if ( common_scripts\utility::flag( "chaos_pre_game_is_over" ) )
return;
maps\mp\alien\_laststand::set_last_stand_count( self, 3 );
thread maps\mp\alien\_laststand::init_selfrevive_icon( 3 );
}
chaos_exit_gamemodespecificaction( var_0 )
{
var_0 maps\mp\alien\_damage::setbodyarmor( level.deployablebox_vest_max );
var_0 notify( "enable_armor" );
var_0 set_in_chaos_self_revive( self, 0 );
maps\mp\alien\_chaos::process_chaos_event( "refill_combo_meter" );
}
set_in_chaos_self_revive( var_0, var_1 )
{
var_0.in_chaos_self_revive = var_1;
}
should_instant_revive( var_0 )
{
return isdefined( var_0 ) && is_in_chaos_self_revive( var_0 );
}
is_in_chaos_self_revive( var_0 )
{
return maps\mp\alien\_utility::is_true( var_0.in_chaos_self_revive );
}

View File

@ -0,0 +1,559 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_chaos_score_components()
{
level.combo_counter = 0;
level.score_streak = 0;
level.running_score_base = 0;
level.total_score = 0;
}
calculate_total_score()
{
level.total_score = level.running_score_base + level.combo_counter * level.score_streak;
maps\mp\alien\_hud::set_total_score( level.total_score );
return level.total_score;
}
keep_running_score()
{
level.running_score_base = level.running_score_base + get_combo_counter() * get_score_streak();
}
reset_combo_counter()
{
level.combo_counter = 0;
}
add_combo_counter( var_0 )
{
level.combo_counter = level.combo_counter + var_0;
}
add_score_streak( var_0 )
{
level.score_streak = level.score_streak + var_0;
}
get_combo_counter()
{
return level.combo_counter;
}
get_score_streak()
{
return level.score_streak;
}
get_total_score()
{
return level.total_score;
}
register_chaos_events()
{
level.chaos_events = [];
for ( var_0 = 1; var_0 <= 100; var_0++ )
{
var_1 = table_look_up( "mp/alien/chaos_events.csv", var_0, 1 );
if ( maps\mp\agents\alien\_alien_agents::is_empty_string( var_1 ) )
break;
var_2 = [];
var_2["LUA_event_ID"] = int( table_look_up( "mp/alien/chaos_events.csv", var_0, 2 ) );
var_2["combo_inc"] = int( table_look_up( "mp/alien/chaos_events.csv", var_0, 4 ) );
var_2["score_inc"] = int( table_look_up( "mp/alien/chaos_events.csv", var_0, 5 ) );
level.chaos_events[var_1] = var_2;
}
}
add_chaos_weapon( var_0 )
{
for ( var_1 = 1000; var_1 <= 1099; var_1++ )
{
if ( is_empty_value( var_1 ) )
break;
var_2 = make_weapon_struct( var_1 );
var_0[var_0.size] = var_2;
}
return var_0;
}
make_weapon_struct( var_0 )
{
var_1 = spawnstruct();
var_1.script_noteworthy = get_weapon_ref( var_0 );
var_1.origin = get_weapon_origin( var_0 );
var_1.angles = get_weapon_angles( var_0 );
return var_1;
}
is_empty_value( var_0 )
{
return table_look_up( level.alien_cycle_table, var_0, 1 ) == "";
}
get_weapon_ref( var_0 )
{
return get_weapon_info( var_0, 1 );
}
get_weapon_origin( var_0 )
{
return transform_to_coordinate( get_weapon_info( var_0, 2 ) );
}
get_weapon_angles( var_0 )
{
return transform_to_coordinate( get_weapon_info( var_0, 3 ) );
}
get_weapon_info( var_0, var_1 )
{
return table_look_up( level.alien_cycle_table, var_0, var_1 );
}
register_perk( var_0, var_1, var_2 )
{
var_3 = [];
var_3["perk_ref"] = var_0;
var_3["activate_func"] = var_1;
var_3["deactivate_func"] = var_2;
var_3["LUA_perk_ID"] = get_lua_perk_id( var_0 );
var_3["is_activated"] = 0;
level.perk_progression[get_activation_level( var_0 )] = var_3;
}
get_lua_perk_id( var_0 )
{
return int( table_look_up( "mp/alien/chaos_perks.csv", var_0, 2 ) );
}
get_activation_level( var_0 )
{
return int( table_look_up( "mp/alien/chaos_perks.csv", var_0, 1 ) );
}
register_drop_locations()
{
level.chaos_bonus_loc = [];
level.chaos_bonus_loc_used = [];
for ( var_0 = 4000; var_0 <= 4099; var_0++ )
{
var_1 = table_look_up( level.alien_cycle_table, var_0, 1 );
if ( maps\mp\agents\alien\_alien_agents::is_empty_string( var_1 ) )
break;
level.chaos_bonus_loc[level.chaos_bonus_loc.size] = transform_to_coordinate( var_1 );
}
}
register_bonus_progression()
{
level.chaos_bonus_progression = [];
var_0 = 0;
for ( var_1 = 5000; var_1 <= 5099; var_1++ )
{
var_2 = table_look_up( level.alien_cycle_table, var_1, 1 );
if ( maps\mp\agents\alien\_alien_agents::is_empty_string( var_2 ) )
break;
var_3 = [];
var_3["wait_duration"] = int( var_2 );
var_3["num_of_drops"] = int( table_look_up( level.alien_cycle_table, var_1, 2 ) );
var_3["package_group_type"] = strtok( table_look_up( level.alien_cycle_table, var_1, 3 ), " " );
var_3["package_group_chance"] = convert_array_to_int( strtok( table_look_up( level.alien_cycle_table, var_1, 4 ), " " ) );
var_3["item_chance"] = strtok( table_look_up( level.alien_cycle_table, var_1, 5 ), " " );
if ( var_3["num_of_drops"] > var_0 )
var_0 = var_3["num_of_drops"];
level.chaos_bonus_progression[level.chaos_bonus_progression.size] = var_3;
}
level.chaos_max_used_loc_stored = level.chaos_bonus_loc.size - var_0;
}
convert_array_to_int( var_0 )
{
var_1 = [];
foreach ( var_3 in var_0 )
var_1[var_1.size] = int( var_3 );
return var_1;
}
transform_to_coordinate( var_0 )
{
var_1 = strtok( var_0, "," );
return ( int( var_1[0] ), int( var_1[1] ), int( var_1[2] ) );
}
init_chaos_deployable( var_0, var_1, var_2 )
{
var_3 = spawnstruct();
var_3.modelbase = "mp_weapon_alien_crate";
var_3.hintstring = &"ALIEN_CHAOS_BONUS_PICKUP";
var_3.capturingstring = &"ALIEN_CHAOS_BONUS_TAKING";
var_3.headiconoffset = 25;
var_3.lifespan = 90.0;
var_3.usexp = 0;
var_3.vodestroyed = "ballistic_vest_destroyed";
var_3.onusesfx = "ammo_crate_use";
var_3.onusecallback = var_2;
var_3.canusecallback = maps\mp\alien\_deployablebox::default_canusedeployable;
var_3.usetime = 500;
var_3.maxhealth = 150;
var_3.damagefeedback = "deployable_bag";
var_3.maxuses = 1;
var_3.icon_name = var_1;
add_to_chaos_bonus_package_type( var_0 );
maps\mp\alien\_deployablebox::init_deployable( var_0, var_3 );
}
get_random_player()
{
return level.players[randomint( level.players.size )];
}
table_look_up( var_0, var_1, var_2 )
{
return tablelookup( var_0, 0, var_1, var_2 );
}
get_drop_location_rated( var_0, var_1 )
{
var_2 = 22500;
var_3 = 90000;
var_4 = 1.0;
var_5 = 1.0;
var_6 = 2.0;
var_7 = -1000.0;
var_8 = ( 0, 0, 0 );
foreach ( var_10 in level.chaos_bonus_loc )
{
if ( location_recently_used( var_10 ) )
continue;
var_11 = 0.0;
foreach ( var_13 in level.players )
{
var_14 = distancesquared( var_13.origin, var_10 );
if ( var_14 > var_2 )
var_11 = var_11 + var_4;
if ( var_14 < var_3 )
var_11 = var_11 + var_4;
}
var_16 = vectornormalize( ( 0, vectortoyaw( var_10 - var_1 ), 0 ) );
var_11 = var_11 + vectordot( var_16, var_0 ) * var_5;
var_11 = var_11 + randomfloat( var_6 );
if ( var_11 > var_7 )
{
var_7 = var_11;
var_8 = var_10;
}
}
register_location( var_8 );
return var_8;
}
register_location( var_0 )
{
if ( level.chaos_bonus_loc_used.size == level.chaos_max_used_loc_stored )
{
for ( var_1 = 0; var_1 < level.chaos_max_used_loc_stored - 1; var_1++ )
level.chaos_bonus_loc_used[var_1] = level.chaos_bonus_loc_used[var_1 + 1];
level.chaos_bonus_loc_used[level.chaos_max_used_loc_stored - 1] = var_0;
}
else
level.chaos_bonus_loc_used[level.chaos_bonus_loc_used.size] = var_0;
}
location_recently_used( var_0 )
{
return common_scripts\utility::array_contains( level.chaos_bonus_loc_used, var_0 );
}
reset_alien_kill_streak()
{
level.current_alien_kill_streak = 0;
}
inc_alien_kill_streak()
{
level.current_alien_kill_streak++;
}
get_alien_kill_streak()
{
return level.current_alien_kill_streak;
}
play_fx_on_package( var_0, var_1 )
{
var_2 = ( -0.5, 5.6, 0 );
var_3 = ( 0, 0, 5 );
var_4 = rotatevector( var_2, var_1 );
var_5 = var_0 + var_4;
var_5 = var_5 + var_3;
var_6 = spawnfx( common_scripts\utility::getfx( "chaos_pre_bonus_drop" ), var_5 );
triggerfx( var_6 );
return var_6;
}
clean_up_monitor( var_0, var_1 )
{
var_1 waittill( "death" );
var_0 delete();
}
init_highest_combo()
{
level.highest_combo = 0;
}
record_highest_combo( var_0 )
{
if ( var_0 <= level.highest_combo )
return;
level.highest_combo = var_0;
foreach ( var_2 in level.players )
var_2 maps\mp\alien\_persistence::lb_player_update_stat( "hits", var_0, 1 );
}
register_cycle_duration()
{
level.chaos_cycle_duration = [];
for ( var_0 = 500; var_0 <= 599; var_0++ )
{
var_1 = table_look_up( level.alien_cycle_table, var_0, 1 );
if ( maps\mp\agents\alien\_alien_agents::is_empty_string( var_1 ) )
break;
level.chaos_cycle_duration[level.chaos_cycle_duration.size] = int( table_look_up( level.alien_cycle_table, var_0, 6 ) );
}
}
add_extra_spawn_locations()
{
var_0 = [];
for ( var_1 = 6000; var_1 <= 6099; var_1++ )
{
var_2 = table_look_up( level.alien_cycle_table, var_1, 1 );
if ( maps\mp\agents\alien\_alien_agents::is_empty_string( var_2 ) )
break;
var_3 = spawnstruct();
var_3.origin = transform_to_coordinate( var_2 );
var_3.angles = transform_to_coordinate( table_look_up( level.alien_cycle_table, var_1, 2 ) );
var_3.script_linkto = translate_to_actual_zone_name( table_look_up( level.alien_cycle_table, var_1, 3 ) );
var_3.script_noteworthy = table_look_up( level.alien_cycle_table, var_1, 4 );
var_0[var_0.size] = var_3;
}
maps\mp\alien\_spawn_director::put_spawnlocations_into_cycle_data( var_0, level.cycle_data );
}
init_combo_duration()
{
if ( !isdefined( level.combo_duration ) )
level.combo_duration = 4.0;
}
get_combo_duration()
{
return level.combo_duration;
}
adjust_combo_duration( var_0 )
{
level.combo_duration = level.combo_duration + var_0;
}
register_combo_duration_schedule()
{
level.combo_duration_schedule = [];
for ( var_0 = 7000; var_0 <= 7099; var_0++ )
{
var_1 = table_look_up( level.alien_cycle_table, var_0, 1 );
if ( maps\mp\agents\alien\_alien_agents::is_empty_string( var_1 ) )
break;
var_2 = [];
var_2["pre_delta_interval"] = float( var_1 );
var_2["delta"] = float( table_look_up( level.alien_cycle_table, var_0, 2 ) );
level.combo_duration_schedule[level.combo_duration_schedule.size] = var_2;
}
}
init_bonus_package_cap()
{
if ( !isdefined( level.chaos_bonus_package_cap ) )
level.chaos_bonus_package_cap = 3;
}
get_bonus_package_cap()
{
return level.chaos_bonus_package_cap;
}
init_chaos_bonus_package_type()
{
level.chaos_bonus_package_type = [];
}
add_to_chaos_bonus_package_type( var_0 )
{
level.chaos_bonus_package_type[level.chaos_bonus_package_type.size] = var_0;
}
get_current_num_bonus_package()
{
var_0 = 0;
foreach ( var_2 in level.chaos_bonus_package_type )
var_0 = var_0 + level.deployable_box[var_2].size;
return var_0;
}
chaos_end_game()
{
if ( chaos_should_end() )
level thread maps\mp\gametypes\aliens::alienendgame( "axis", maps\mp\alien\_hud::get_end_game_string_index( "kia" ) );
}
chaos_should_end()
{
if ( common_scripts\utility::flag( "in_host_migration" ) )
return 0;
return 1;
}
should_process_alien_killed_event( var_0 )
{
return isplayer( var_0 ) || isdefined( var_0.owner ) && isplayer( var_0.owner ) || isdefined( var_0.team ) && var_0.team == "allies";
}
should_process_alien_damaged_event( var_0 )
{
if ( isdefined( var_0 ) && var_0 == "alien_minion_explosion" )
return 0;
return 1;
}
unset_player_perks( var_0 )
{
foreach ( var_2 in level.perk_progression )
{
if ( var_2["is_activated"] )
[[ var_2["deactivate_func"] ]]( var_0, var_2["perk_ref"] );
}
var_0 playlocalsound( "mp_splash_screen_default" );
}
give_activated_perks( var_0 )
{
foreach ( var_2 in level.perk_progression )
{
if ( var_2["is_activated"] )
[[ var_2["activate_func"] ]]( var_0, var_2["perk_ref"] );
}
}
set_all_perks_inactivated()
{
foreach ( var_1 in level.perk_progression )
var_1["is_activated"] = 0;
}
get_attacker_as_player( var_0 )
{
if ( isplayer( var_0 ) )
return var_0;
if ( isdefined( var_0.owner ) && isplayer( var_0.owner ) )
return var_0.owner;
return undefined;
}
init_event_counts()
{
level.chaos_event_counts = [];
for ( var_0 = 1; var_0 <= 18; var_0++ )
level.chaos_event_counts[var_0] = 0;
}
update_hud_event_counts()
{
for ( var_0 = 1; var_0 <= 18; var_0++ )
maps\mp\alien\_hud::set_event_count( var_0, level.chaos_event_counts[var_0] );
}
inc_event_count( var_0 )
{
level.chaos_event_counts[var_0]++;
}
register_pre_end_game_display_func()
{
level.pre_end_game_display_func = ::update_hud_event_counts;
}
translate_to_actual_zone_name( var_0 )
{
var_1 = [];
var_0 = strtok( var_0, " " );
foreach ( var_3 in var_0 )
{
foreach ( var_6, var_5 in level.cycle_data.spawn_zones )
{
if ( issubstr( var_6, var_3 ) )
var_1[var_1.size] = var_6;
}
}
if ( var_1.size == 0 )
var_8 = "";
else
{
var_8 = var_1[0];
for ( var_9 = 1; var_9 < var_1.size; var_9++ )
var_8 = var_8 + " " + var_1[var_9];
}
return var_8;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,556 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_container_spawn()
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
if ( !isdefined( level.container_spawn_table ) )
return;
if ( !isdefined( level.max_damage_based_container ) )
level.max_damage_based_container = 3;
level.num_damage_based_container = 0;
init_warning_sounds();
}
activate_container_spawners_in_area( var_0 )
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
var_1 = select_container_structs_in_area( var_0 );
foreach ( var_3 in var_1 )
{
var_4 = var_3.script_noteworthy;
if ( should_activate_container_in_area( var_3, var_4 ) )
var_3 thread activate_container( var_3, var_4 );
}
}
activate_container_spawner_by_id( var_0 )
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
var_1 = common_scripts\utility::getstructarray( "container_spawn", "targetname" );
foreach ( var_3 in var_1 )
{
if ( already_activated( var_3 ) )
continue;
var_4 = var_3.script_noteworthy;
if ( var_4 == var_0 )
var_3 thread activate_container( var_3, var_4 );
}
}
activate_container( var_0, var_1 )
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
var_0 endon( "death" );
level endon( "game_ended" );
var_0.activated = 1;
var_2 = get_activation_method( var_1 );
switch ( var_2 )
{
case "proximity":
wait_trigger_activate( var_0, var_1 );
break;
case "damage":
wait_damage_activate( var_0, var_1 );
break;
case "notify":
wait_notify_activate( var_1 );
break;
}
spawn_alien_from_container( var_0, var_1 );
deactivate_container( var_0 );
}
spawn_alien_from_container( var_0, var_1 )
{
var_2 = 0.2;
var_3 = 10;
var_4 = common_scripts\utility::getstructarray( var_0.target, "targetname" );
var_4 = sort_based_on_priority( var_4, var_1 );
var_5 = get_spawn_info( var_1, var_4.size );
var_6 = get_should_force_spawn( var_1 );
var_7 = var_5.size;
if ( var_6 )
{
for ( var_7 = maps\mp\alien\_spawn_director::reserve_custom_spawn_space( var_7, 0 ); var_7 <= 0; var_7 = maps\mp\alien\_spawn_director::reserve_custom_spawn_space( var_7, 0 ) )
common_scripts\utility::waitframe();
}
else
var_7 = maps\mp\alien\_spawn_director::reserve_custom_spawn_space( var_7, 1 );
if ( var_7 > 0 )
{
maps\mp\alien\_spawn_director::pause_cycle( var_3 );
play_warning_sfx( var_4, var_5, var_1 );
}
for ( var_8 = 0; var_8 < var_7; var_8++ )
{
var_9 = var_4[var_8];
var_10 = var_5[var_8];
var_11 = maps\mp\alien\_spawn_director::process_intro_vignette_ai_type( var_10 );
var_12 = level.cycle_data.spawn_node_info[var_9.script_noteworthy].vignetteinfo[var_11];
var_13 = maps\mp\alien\_spawn_director::process_custom_spawn( var_10, var_9, var_12 );
if ( isdefined( var_13 ) )
mark_spawn_clips_on( var_13, var_0 );
wait( var_2 );
}
}
play_warning_sfx( var_0, var_1, var_2 )
{
var_3 = var_0[0].origin;
var_4 = spawn( "script_origin", var_3 );
var_5 = level.container_warning_sounds[var_1[0]];
var_6 = "emt_aln_arm_crate_alarm_lp";
if ( isdefined( var_5 ) && get_should_play_warning_spawn( var_2 ) )
{
var_7 = lookupsoundlength( var_5 ) / 1000;
var_4 playsound( var_5 );
wait( var_7 );
var_4 stopsounds();
}
var_7 = 5;
var_4 common_scripts\utility::delaycall( var_7 + 1, ::delete );
if ( isdefined( var_6 ) && get_should_play_alarm_spawn( var_2 ) )
{
var_4 common_scripts\utility::delaycall( var_7, ::stoploopsound );
var_4 playloopsound( var_6 );
}
}
init_warning_sounds()
{
if ( !isdefined( level.container_warning_sounds ) )
{
level.container_warning_sounds["elite"] = "scn_arm_crate_queen";
level.container_warning_sounds["spitter"] = "scn_arm_crate_spitter";
level.container_warning_sounds["brute"] = "scn_arm_crate_brute";
level.container_warning_sounds["locust"] = "scn_arm_crate_brute";
}
}
wait_trigger_activate( var_0, var_1 )
{
var_2 = 1.0;
var_3 = get_activation_trigger( var_0 );
var_3 endon( "death" );
var_3 endon( "timed_out" );
var_4 = get_trigger_chance( var_1 );
var_5 = get_time_before_auto_trigger_array( var_1 );
var_3 thread notify_on_timeout( "timed_out", var_5 );
for (;;)
{
var_3 waittill( "trigger", var_6 );
if ( !isplayer( var_6 ) )
{
common_scripts\utility::waitframe();
continue;
}
if ( randomintrange( 0, 100 ) <= var_4 )
return;
else
wait( var_2 );
}
}
notify_on_timeout( var_0, var_1 )
{
if ( var_1[0] >= 0 )
{
var_2 = randomintrange( var_1[0], var_1[1] );
wait( var_2 );
self notify( var_0 );
}
}
wait_damage_activate( var_0, var_1 )
{
var_2 = get_attackable_ent( var_0, var_1 );
var_2 endon( "death" );
for (;;)
{
var_2 waittill( "damage", var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12 );
if ( isagent( var_4 ) )
{
var_2.fake_health = var_2.fake_health - var_3;
if ( var_2.fake_health <= 0 )
break;
}
}
}
wait_notify_activate( var_0 )
{
var_1 = get_notify_message( var_0 );
level waittill( var_1 );
}
get_attackable_ent( var_0, var_1 )
{
level.num_damage_based_container++;
var_2 = spawn( "script_model", var_0.origin );
var_2.health = 999999;
var_2.fake_health = get_container_health( var_1 );
var_2 setcandamage( 1 );
var_2 setcanradiusdamage( 1 );
var_2 makeentitysentient( "allies", 1 );
var_2.threatbias = get_threat_bias( var_1 );
var_0.attackable_ent = var_2;
return var_2;
}
deactivate_container_spawners_in_area( var_0 )
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
var_1 = select_container_structs_in_area( var_0 );
foreach ( var_3 in var_1 )
deactivate_container( var_3 );
}
deactivate_container( var_0 )
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
var_1 = getentarray( var_0.target, "targetname" );
foreach ( var_3 in var_1 )
{
if ( is_clip( var_3 ) )
continue;
var_3 delete();
}
if ( isdefined( var_0.attackable_ent ) )
{
var_0.attackable_ent freeentitysentient();
var_0.attackable_ent delete();
level.num_damage_based_container--;
}
var_0 notify( "death" );
}
get_activation_method( var_0 )
{
var_1 = [ "damage", "proximity", "notify" ];
var_2 = get_proximity_weight( var_0 );
var_3 = get_notify_weight( var_0 );
if ( at_max_damage_based_container() )
var_4 = 0;
else
var_4 = get_damage_weight( var_0 );
var_5 = [ var_4, var_2, var_3 ];
var_6 = maps\mp\alien\_utility::getrandomindex( var_5 );
return var_1[var_6];
}
select_container_structs_in_area( var_0 )
{
var_1 = getent( var_0, "targetname" );
var_2 = [];
var_3 = common_scripts\utility::getstructarray( "container_spawn", "targetname" );
foreach ( var_5 in var_3 )
{
if ( ispointinvolume( var_5.origin, var_1 ) )
var_2[var_2.size] = var_5;
}
return var_2;
}
get_activation_trigger( var_0 )
{
var_1 = getentarray( var_0.target, "targetname" );
foreach ( var_3 in var_1 )
{
if ( var_3.classname == "trigger_multiple" )
return var_3;
}
}
should_activate_container_in_area( var_0, var_1 )
{
if ( should_skip_area_activation( var_1 ) || already_activated( var_0 ) )
return 0;
return should_activated_by_chance( var_1 );
}
should_skip_area_activation( var_0 )
{
if ( !isdefined( level.should_skip_area_activation_func ) )
return 0;
return [[ level.should_skip_area_activation_func ]]( var_0 );
}
already_activated( var_0 )
{
return maps\mp\alien\_utility::is_true( var_0.activated );
}
should_activated_by_chance( var_0 )
{
var_1 = get_activate_chance( var_0 );
var_2 = randomintrange( 0, 100 );
return var_2 < var_1;
}
get_spawn_info( var_0, var_1 )
{
var_2 = get_spawn_types( var_0 );
var_3 = get_spawn_type_weights( var_0 );
var_4 = get_spawn_quantity( var_0 );
var_5 = maps\mp\alien\_utility::getrandomindex( var_3 );
var_2 = strtok( var_2[var_5], "-" );
var_4 = strtok( var_4[var_5], "-" );
var_6 = [];
for ( var_7 = 0; var_7 < var_2.size; var_7++ )
{
var_8 = int( var_4[var_7] );
if ( var_8 > 1 )
var_8 = 1 + randomintrange( 0, var_8 );
for ( var_9 = 0; var_9 < var_8; var_9++ )
var_6[var_6.size] = var_2[var_7];
}
return var_6;
}
sort_based_on_priority( var_0, var_1 )
{
var_2 = get_spawner_id_array( var_1 );
var_3 = get_spawner_priority_array( var_1 );
var_0 = assign_spawn_priority( var_0, var_2, var_3 );
var_0 = common_scripts\utility::array_sort_with_func( var_0, ::is_higher_priority );
return var_0;
}
is_higher_priority( var_0, var_1 )
{
return var_0.priority > var_1.priority;
}
assign_spawn_priority( var_0, var_1, var_2 )
{
foreach ( var_4 in var_0 )
var_4.priority = get_spawn_priority( var_4, var_1, var_2 );
return var_0;
}
get_spawn_priority( var_0, var_1, var_2 )
{
foreach ( var_5, var_4 in var_1 )
{
if ( var_0.script_noteworthy == var_4 )
return var_2[var_5];
}
}
at_max_damage_based_container()
{
return level.num_damage_based_container >= level.max_damage_based_container;
}
get_activate_chance( var_0 )
{
return get_container_info( var_0, 1, 1 );
}
get_proximity_weight( var_0 )
{
return get_container_info( var_0, 2, 1 );
}
get_damage_weight( var_0 )
{
return get_container_info( var_0, 3, 1 );
}
get_notify_weight( var_0 )
{
return get_container_info( var_0, 4, 1 );
}
get_trigger_chance( var_0 )
{
return get_container_info( var_0, 5, 1 );
}
get_container_health( var_0 )
{
return get_container_info( var_0, 6, 1 );
}
get_threat_bias( var_0 )
{
return get_container_info( var_0, 7, 1 );
}
get_notify_message( var_0 )
{
return get_container_info( var_0, 8, 0 );
}
get_spawn_types( var_0 )
{
return get_container_info_array( var_0, 9, 0 );
}
get_spawn_type_weights( var_0 )
{
return get_container_info_array( var_0, 10, 1 );
}
get_spawn_quantity( var_0 )
{
return get_container_info_array( var_0, 11, 0 );
}
get_should_force_spawn( var_0 )
{
return get_container_info( var_0, 12, 0 ) == "true";
}
get_spawner_id_array( var_0 )
{
return get_container_info_array( var_0, 13, 0 );
}
get_spawner_priority_array( var_0 )
{
return get_container_info_array( var_0, 14, 1 );
}
get_should_play_alarm_spawn( var_0 )
{
return get_container_info( var_0, 15, 0 ) == "true";
}
get_should_play_warning_spawn( var_0 )
{
return get_container_info( var_0, 16, 0 ) == "true";
}
get_time_before_auto_trigger_array( var_0 )
{
return get_container_info_array( var_0, 17, 1 );
}
get_container_info( var_0, var_1, var_2 )
{
var_3 = tablelookup( level.container_spawn_table, 0, var_0, var_1 );
if ( var_2 )
var_3 = int( var_3 );
return var_3;
}
get_container_info_array( var_0, var_1, var_2 )
{
var_3 = tablelookup( level.container_spawn_table, 0, var_0, var_1 );
var_3 = strtok( var_3, " " );
if ( var_2 )
{
foreach ( var_6, var_5 in var_3 )
var_3[var_6] = int( var_5 );
}
return var_3;
}
mark_spawn_clips_on( var_0, var_1 )
{
var_2 = getentarray( var_1.target, "targetname" );
var_3 = [];
foreach ( var_5 in var_2 )
{
if ( is_clip( var_5 ) )
var_3[var_3.size] = var_5;
}
var_0.intro_clips = var_3;
}
is_clip( var_0 )
{
return var_0.classname == "script_brushmodel";
}
container_spawn_hive_monitor( var_0 )
{
level endon( "game_ended" );
for (;;)
{
level waittill( "drill_planted" );
activate_container_spawn_for_hive( level.current_hive_name, var_0 );
}
}
activate_container_spawn_for_hive( var_0, var_1 )
{
var_2 = get_container_id_list_for_hive( var_0, var_1 );
foreach ( var_4 in var_2 )
activate_container_spawner_by_id( var_4 );
}
get_container_id_list_for_hive( var_0, var_1 )
{
var_2 = [];
foreach ( var_5, var_4 in var_1 )
{
if ( common_scripts\utility::array_contains( var_4, var_0 ) )
var_2[var_2.size] = var_5;
}
return var_2;
}

452
maps/mp/alien/_cortex.gsc Normal file
View File

@ -0,0 +1,452 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
monitor_cortex_fired()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
while ( !common_scripts\utility::flag_exist( "start_ark_encounter" ) || !common_scripts\utility::flag( "start_ark_encounter" ) )
wait 1;
if ( self hasweapon( "aliencortex_mp" ) )
{
self takeweapon( "aliencortex_mp" );
self enableweaponswitch();
}
for (;;)
{
self waittill( "grenade_fire", var_0, var_1 );
if ( var_1 != "aliencortex_mp" )
continue;
if ( !maps\mp\alien\_utility::is_true( level.cortex_fire_allowed ) )
{
var_0 delete();
self setweaponammoclip( "aliencortex_mp", 2 );
continue;
}
level.cortex_fire_allowed = 0;
level thread cortex_fire_allowed();
var_2 = self.angles;
var_3 = anglestoforward( var_2 );
var_4 = vector_multiply( var_3, 20 );
var_5 = anglestoup( var_2 );
self playfx( level._effect["cortex_blast_sm"], self.origin + ( 0, 0, 40 ) + var_4, var_5 );
self playsound( "scn_cortex_use_runout" );
level thread cortex_blast();
var_0 delete();
self setweaponammoclip( "aliencortex_mp", 2 );
}
}
cortex_fire_allowed()
{
wait 5;
level.cortex_fire_allowed = 1;
}
vector_multiply( var_0, var_1 )
{
return ( var_0[0] * var_1, var_0[1] * var_1, var_0[2] * var_1 );
}
wait_for_player_to_place_cortex()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "last_stand" );
self endon( "disconnect" );
level endon( "cortex_dropped" );
level endon( "cortex_planted" );
while ( self usebuttonpressed() )
wait 1;
var_0 = 6400;
for (;;)
{
if ( self usebuttonpressed() && isdefined( level.cortex_carrier ) && level.cortex_carrier == self && self hasweapon( "aliencortex_mp" ) && self isonground() )
{
if ( isdefined( level.current_cortex_spot ) && distancesquared( self.origin, level.current_cortex_spot.origin ) <= var_0 )
{
self setweaponammoclip( "aliencortex_mp", 0 );
self setweaponammostock( "aliencortex_mp", 0 );
drop_cortex( self.origin + ( 0, 0, 6 ), ( 0, 0, 0 ) );
earthquake( 0.15, 0.15, self.origin, 128 );
self setclientomnvar( "ui_alien_unlimited_ammo", 0 );
if ( !maps\mp\alien\_utility::has_special_weapon() )
self enableweaponswitch();
restore_last_weapon();
common_scripts\utility::_enableoffhandweapons();
turn_off_cortex();
self forceusehintoff();
level notify( "cortex_plant" );
level thread remove_cortex_from_player( self );
}
else
{
place_cortex( self );
self.player_action_disabled = undefined;
turn_on_cortex();
self forceusehintoff();
level.cortex_use_trigger sethintstring( &"MP_ALIEN_DESCENT_PICKUP_CORTEX" );
level notify( "cortex_dropped" );
}
}
wait 0.05;
}
}
remove_cortex_from_player( var_0 )
{
self endon( "disconnect" );
wait 1;
var_0 takeweapon( "aliencortex_mp" );
var_0.player_action_disabled = undefined;
}
cortex_blast( var_0 )
{
wait 0.5;
var_1 = maps\mp\alien\_spawnlogic::get_alive_agents();
var_2 = 250000;
if ( var_1.size == 0 )
return;
var_3 = undefined;
if ( isdefined( level.cortex_carrier ) )
var_3 = level.cortex_carrier;
else if ( isdefined( level.cortex ) )
var_3 = level.cortex;
else if ( isdefined( var_0 ) )
var_3 = var_0;
var_1 = common_scripts\utility::get_array_of_closest( var_3.origin, var_1 );
foreach ( var_5 in var_1 )
{
if ( !isdefined( var_5 ) )
continue;
if ( distancesquared( var_3.origin, var_5.origin ) > var_2 )
continue;
if ( isdefined( level.cortex_carrier ) )
{
if ( !isdefined( var_5 ) )
continue;
var_5.cortex_kill = 1;
var_5 dodamage( var_5.health + 10000, var_5.origin, var_3, var_3 );
playfx( level._effect["alien_gib"], var_5.origin + ( 0, 0, 32 ) );
}
wait 0.1;
}
}
place_cortex( var_0 )
{
level endon( "game_ended" );
var_0 endon( "disconnect" );
var_0 endon( "death" );
var_1 = undefined;
var_2 = var_0 aiphysicstrace( var_0.origin + ( 0, 0, 8 ), var_0.origin - ( 0, 0, 12 ), undefined, undefined, 1, 1 );
if ( var_2["fraction"] == 1 )
return;
else
var_1 = var_2["position"];
if ( !var_0 maps\mp\alien\_utility::has_special_weapon() )
var_0 enableweaponswitch();
var_0.is_holding_deployable = 0;
var_0 restore_last_weapon();
var_0 common_scripts\utility::_enableoffhandweapons();
var_0 setweaponammoclip( "aliencortex_mp", 0 );
var_0 setweaponammostock( "aliencortex_mp", 0 );
wait 1;
var_0 takeweapon( "aliencortex_mp" );
drop_cortex( var_1, ( 0, 0, 0 ) );
earthquake( 0.15, 0.15, var_0.origin, 128 );
var_0 setclientomnvar( "ui_alien_unlimited_ammo", 0 );
}
restore_last_weapon()
{
if ( self.lastweapon != "aliendeployable_crate_marker_mp" )
self switchtoweapon( self.lastweapon );
else
self switchtoweapon( self getweaponslistprimaries()[0] );
}
create_cortex( var_0, var_1 )
{
var_2 = 1;
level.cortex_carrier = undefined;
if ( isdefined( level.cortex ) )
level.cortex delete();
level.cortex = spawn( "script_model", var_0 + ( 0, 0, 5 ) );
level.cortex setmodel( "dct_alien_container" );
if ( var_2 )
level.cortex thread maps\mp\alien\_drill::angles_to_ground( var_0, var_1, ( 0, 0, 0 ) );
else
level.cortex.angles = var_1;
level notify( "cortex_spawned" );
}
drop_cortex( var_0, var_1 )
{
create_cortex( var_0, var_1 );
if ( !isdefined( level.cortex_icon ) )
create_cortex_icon();
level.cortex_icon.x = level.cortex.origin[0];
level.cortex_icon.y = level.cortex.origin[1];
level.cortex_icon.z = level.cortex.origin[2] + 52;
level.cortex_icon.alpha = 0.75;
create_cortex_use_trigger();
level.cortex_use_trigger makeunusable();
level.cortex thread cortex_pickup_listener();
level thread remove_cortex_player_icon();
level.cortex_use_trigger.origin = level.cortex.origin + ( 0, 0, 40 );
}
create_cortex_use_trigger()
{
wait 0.5;
while ( !isdefined( level.cortex ) )
wait 0.1;
if ( !isdefined( level.cortex_use_trigger ) )
{
level.cortex_use_trigger = spawn( "script_model", level.cortex.origin + ( 0, 0, 40 ) );
level.cortex_use_trigger setmodel( "tag_origin" );
}
}
create_cortex_icon()
{
level.cortex_icon = newhudelem();
level.cortex_icon setshader( "waypoint_alien_cortex", 14, 14 );
level.cortex_icon.color = ( 1, 1, 1 );
level.cortex_icon setwaypoint( 1, 1 );
level.cortex_icon.sort = 1;
level.cortex_icon.foreground = 1;
level.cortex_icon.alpha = 0.75;
level.cortex_icon.x = level.cortex.origin[0];
level.cortex_icon.y = level.cortex.origin[1];
level.cortex_icon.z = level.cortex.origin[2] + 52;
}
set_cortex_player_icon( var_0 )
{
var_0 maps\mp\_entityheadicons::setheadicon( var_0.team, "waypoint_alien_cortex", ( 0, 0, 72 ), 4, 4, undefined, undefined, undefined, 1, undefined, 0 );
}
remove_cortex_player_icon()
{
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();
}
}
}
}
destroy_cortex_icon()
{
if ( isdefined( level.cortex_icon ) )
level.cortex_icon destroy();
level thread remove_cortex_player_icon();
}
turn_off_cortex()
{
maps\mp\alien\_outline_proto::remove_from_drill_preplant_watch_list( level.cortex );
if ( isdefined( level.cortex_use_trigger ) )
level.cortex_use_trigger makeunusable();
else
level.cortex makeunusable();
if ( isdefined( level.cortex_icon ) )
level.cortex_icon.alpha = 0.0;
level thread remove_cortex_player_icon();
}
turn_on_cortex()
{
maps\mp\alien\_outline_proto::add_to_drill_preplant_watch_list( level.cortex );
if ( isdefined( level.cortex_use_trigger ) )
level.cortex_use_trigger makeusable();
else
level.cortex makeusable();
if ( isdefined( level.cortex_icon ) )
level.cortex_icon.alpha = 0.75;
}
cortex_pickup_listener( var_0 )
{
self endon( "death" );
level endon( "game_ended" );
level endon( "cortex_spawned" );
var_1 = level.cortex_use_trigger;
for (;;)
{
var_1 waittill( "trigger", var_2 );
if ( !common_scripts\utility::flag( "ark_console_event_done" ) )
continue;
if ( !common_scripts\utility::flag( "cortex_carryable" ) )
continue;
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.is_holding_deployable = 1;
var_2 common_scripts\utility::_disableusability();
var_2 thread maps\mp\alien\_drill::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.cortex );
level.cortex_use_trigger makeunusable();
if ( isdefined( level.cortex_icon ) )
level.cortex_icon.alpha = 0;
var_2 setclientomnvar( "ui_alien_unlimited_ammo", 1 );
level.cortex = undefined;
level notify( "cortex_pickedup", var_2 );
self playsound( "extinction_item_pickup" );
level.cortex_carrier = var_2;
var_2.player_action_disabled = 1;
level.last_cortex_pickup_origin = common_scripts\utility::drop_to_ground( self.origin, 16, -32 );
level.last_cortex_pickup_angles = self.angles;
level.cortex_carrier set_cortex_player_icon( level.cortex_carrier );
var_2 forceusehinton( &"MP_ALIEN_DESCENT_CORTEX_CARRY_HINT" );
var_2 thread drop_cortex_on_death();
var_2 thread drop_cortex_on_disconnect();
var_2.lastweapon = var_2 getcurrentweapon();
var_2 maps\mp\_utility::_giveweapon( "aliencortex_mp" );
var_2 switchtoweapon( "aliencortex_mp" );
var_2 disableweaponswitch();
var_2 common_scripts\utility::_disableoffhandweapons();
var_2 thread wait_for_player_to_place_cortex();
var_2 notify( "kill_spendhint" );
var_2 notify( "dpad_cancel" );
self delete();
}
drop_cortex_on_death()
{
level endon( "cortex_dropped" );
level endon( "cortex_planted" );
level notify( "cortex_player_monitor" );
level endon( "cortex_player_monitor" );
common_scripts\utility::waittill_either( "death", "last_stand" );
self setclientomnvar( "ui_alien_unlimited_ammo", 0 );
self takeweapon( "aliencortex_mp" );
self enableweaponswitch();
self switchtoweapon( self.lastweapon );
self.is_holding_deployable = 0;
if ( isdefined( self.disabledoffhandweapons ) && self.disabledoffhandweapons > 0 )
common_scripts\utility::_enableoffhandweapons();
self forceusehintoff();
level.cortex_carrier = undefined;
self.player_action_disabled = undefined;
level thread remove_cortex_player_icon();
if ( maps\mp\alien\_utility::is_true( self.kill_trigger_event_processed ) )
{
var_0 = common_scripts\utility::getclosest( self.origin, common_scripts\utility::getstructarray( "respawn_cortex", "targetname" ) );
if ( !isdefined( var_0.angles ) )
var_0.angles = ( 0, 0, 0 );
drop_cortex( var_0.origin, var_0.angles );
}
else
drop_cortex( self.origin, ( 0, 0, 0 ) );
level.cortex_use_trigger makeusable();
level.cortex_use_trigger sethintstring( &"MP_ALIEN_DESCENT_PICKUP_CORTEX" );
maps\mp\alien\_outline_proto::add_to_drill_preplant_watch_list( level.cortex );
}
drop_cortex_on_disconnect()
{
level endon( "cortex_dropped" );
level endon( "cortex_planted" );
level notify( "cortex_disconnect_monitor" );
level endon( "cortex_disconnect_monitor" );
level endon( "game_ended" );
self endon( "death" );
self endon( "last_stand" );
self waittill( "disconnect" );
var_0 = level.last_cortex_pickup_origin;
var_1 = common_scripts\utility::getclosest( var_0, common_scripts\utility::getstructarray( "respawn_cortex", "targetname" ) );
if ( !isdefined( var_1.angles ) )
var_1.angles = ( 0, 0, 0 );
playfx( level._effect["alien_teleport"], var_1.origin );
playfx( level._effect["alien_teleport_dist"], var_1.origin );
drop_cortex( var_1.origin, var_1.angles );
maps\mp\alien\_outline_proto::add_to_drill_preplant_watch_list( level.cortex );
level.cortex_use_trigger makeusable();
level.cortex_use_trigger sethintstring( &"MP_ALIEN_DESCENT_PICKUP_CORTEX" );
}

1266
maps/mp/alien/_crafting.gsc Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1090
maps/mp/alien/_damage.gsc Normal file

File diff suppressed because it is too large Load Diff

582
maps/mp/alien/_death.gsc Normal file
View File

@ -0,0 +1,582 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
onplayerkilled( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( level.gameended == 1 )
return;
if ( kill_trigger_event_was_processed() )
return;
set_kill_trigger_event_processed( self, 1 );
maps\mp\alien\_laststand::callback_playerlaststandalien( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, getkilltriggerspawnloc() );
}
kill_trigger_event_was_processed()
{
return maps\mp\alien\_utility::is_true( self.kill_trigger_event_processed );
}
set_kill_trigger_event_processed( var_0, var_1 )
{
self.kill_trigger_event_processed = var_1;
}
onnormaldeath( var_0, var_1, var_2 )
{
if ( game["state"] == "postgame" && game["teamScores"][var_1.team] > game["teamScores"][level.otherteam[var_1.team]] )
var_1.finalkill = 1;
}
onalienagentkilled( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( isdefined( var_3 ) && var_3 == "MOD_SUICIDE" && isdefined( self.scene ) && self.scene )
return;
self.isactive = 0;
self.hasdied = 0;
self.owner = undefined;
var_9 = self.alien_type;
var_10 = 0;
if ( !isdefined( var_5 ) )
var_5 = anglestoforward( self.angles );
maps\mp\alien\_alien_fx::disable_fx_on_death();
if ( var_3 == "MOD_TRIGGER_HURT" )
return;
var_11 = 10;
if ( maps\mp\alien\_utility::is_trap( var_0 ) )
var_11 = 3;
level thread maps\mp\alien\_utility::mark_dangerous_nodes( self.origin, 256, var_11 );
var_12 = is_pettrap_kill( var_0 );
if ( var_4 == "alienthrowingknife_mp" && var_3 == "MOD_IMPACT" || var_12 || maps\mp\alien\_utility::is_true( self.hypnoknifed ) )
{
if ( maps\mp\alien\_utility::can_hypno( var_1, var_12 ) )
{
thread maps\mp\gametypes\aliens::spawnallypet( var_9, 1, self.origin, var_1, self.angles, var_12 );
var_10 = 1;
if ( var_9 == "elite" && var_12 && isdefined( level.update_achievement_hypno_trap_func ) )
var_1 [[ level.update_achievement_hypno_trap_func ]]();
}
if ( !var_12 )
var_0 delete();
}
var_13 = 0;
if ( isdefined( level.custom_alien_death_func ) )
var_13 = self [[ level.custom_alien_death_func ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6 );
if ( should_do_pipebomb_death( var_4 ) )
thread do_pipebomb_death();
else if ( should_play_death() && var_3 != "MOD_SUICIDE" && !var_10 && !var_13 )
play_death_anim_and_ragdoll( var_0, var_2, var_3, var_4, var_5, var_6 );
on_alien_type_killed( var_10 );
maps\mp\agents\alien\_alien_think::onenteranimstate( self.currentanimstate, "death" );
var_1 notify( "dlc_vo_notify", maps\mp\alien\_utility::get_alien_type() + "_killed", var_1 );
switch ( maps\mp\alien\_utility::get_alien_type() )
{
case "mammoth":
self playsoundonmovingent( "queen_death" );
break;
case "elite":
self playsoundonmovingent( "queen_death" );
break;
case "minion":
self playsoundonmovingent( "alien_minion_explode" );
break;
case "spitter":
self playsoundonmovingent( "spitter_death" );
break;
default:
self playsoundonmovingent( "alien_death" );
break;
}
if ( isdefined( level.attack_heli ) && var_1 == level.attack_heli )
{
var_14 = maps\mp\alien\_gamescore::get_reward_point_for_kill();
var_15 = var_14 / var_1.reward_pool.size;
foreach ( var_17 in var_1.reward_pool )
{
if ( isdefined( var_17 ) )
var_17.chopper_reward = 0;
}
foreach ( var_17 in var_1.reward_pool )
{
if ( isdefined( var_17 ) )
var_17.chopper_reward = var_17.chopper_reward + var_15;
}
foreach ( var_17 in level.players )
{
if ( isdefined( var_17 ) && isdefined( var_17.chopper_reward ) )
maps\mp\alien\_gamescore::givekillreward( var_17, int( var_17.chopper_reward ), "large" );
}
}
else
{
if ( isdefined( var_1.pet ) && var_1.pet == 1 )
maps\mp\alien\_gamescore::give_attacker_kill_rewards( var_1.owner );
else
maps\mp\alien\_gamescore::give_attacker_kill_rewards( var_1, var_6 );
var_1 thread maps\mp\alien\_persistence::update_weaponstats_kills( var_4, 1 );
}
maps\mp\alien\_challenge_function::update_alien_death_challenges( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 );
maps\mp\alien\_achievement::update_alien_kill_achievements( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 );
maps\mp\alien\_persistence::update_alien_kill_sessionstats( var_0, var_1 );
if ( maps\mp\alien\_utility::is_chaos_mode() )
maps\mp\alien\_chaos::update_alien_killed_event( maps\mp\alien\_utility::get_alien_type(), self.origin, var_1 );
blackbox_alienkilled( var_1 );
var_23 = get_attacker_as_player( var_1 );
if ( isdefined( var_23 ) )
{
record_player_kills( var_23 );
check_award_token_for_kill( var_23 );
}
level notify( "alien_killed", self.origin, var_3, var_1 );
}
get_attacker_as_player( var_0 )
{
if ( isplayer( var_0 ) )
return var_0;
if ( isdefined( var_0.owner ) && isplayer( var_0.owner ) )
return var_0.owner;
return undefined;
}
record_player_kills( var_0 )
{
var_0 maps\mp\alien\_persistence::set_player_kills();
var_0 maps\mp\alien\_persistence::eog_player_update_stat( "kills", 1 );
}
check_award_token_for_kill( var_0 )
{
var_1 = var_0 maps\mp\alien\_persistence::get_player_kills();
if ( var_1 % 300 == 0 )
var_0 maps\mp\alien\_persistence::give_player_tokens( 1, 1 );
}
on_alien_type_killed( var_0 )
{
switch ( maps\mp\alien\_utility::get_alien_type() )
{
case "minion":
level thread maps\mp\agents\alien\_alien_minion::minion_explode_on_death( self.origin );
break;
case "spitter":
maps\mp\agents\alien\_alien_spitter::spitter_death();
break;
default:
if ( isdefined( level.dlc_alien_death_override_func ) )
self [[ level.dlc_alien_death_override_func ]]( var_0 );
break;
}
}
should_play_death()
{
switch ( maps\mp\alien\_utility::get_alien_type() )
{
case "bomber":
case "seeder":
case "minion":
return 0;
default:
return 1;
}
}
play_death_anim_and_ragdoll( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = 24;
var_7 = 30;
if ( getdvarint( "alien_easter_egg" ) > 0 || isdefined( level.easter_egg_lodge_sign_active ) && level.easter_egg_lodge_sign_active )
playfx( level._effect["arcade_death"], self.origin );
else
{
var_8 = get_primary_death_anim_state();
if ( !maps\mp\alien\_utility::is_normal_upright( anglestoup( self.angles ) ) )
move_away_from_surface( anglestoup( self.angles ), var_6 );
if ( isdefined( self.apextraversaldeathvector ) )
move_away_from_surface( self.apextraversaldeathvector, var_7 );
play_death_anim_and_ragdoll_internal( var_8, var_0, var_1, var_2, var_3, var_4, var_5 );
}
}
should_do_immediate_ragdoll( var_0 )
{
if ( isdefined( level.dlc_alien_should_immediate_ragdoll_on_death_override_func ) )
{
var_1 = [[ level.dlc_alien_should_immediate_ragdoll_on_death_override_func ]]( var_0 );
if ( isdefined( var_1 ) )
return var_1;
}
switch ( var_0 )
{
case "jump":
case "traverse":
return 1;
default:
return 0;
}
}
play_death_anim_and_ragdoll_internal( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
if ( is_special_death( var_0 ) )
{
var_7 = "special_death";
var_8 = maps\mp\agents\alien\_alien_anim_utils::getspecialdeathanimindex( var_0 );
}
else
{
var_7 = maps\mp\agents\alien\_alien_anim_utils::getdeathanimstate( var_0 + "_death", var_2 );
var_8 = maps\mp\agents\alien\_alien_anim_utils::getdeathanimindex( var_0, var_5, var_6 );
}
var_9 = should_do_immediate_ragdoll( var_0 );
self scragentsetphysicsmode( get_death_anim_physics_mode( var_7 ) );
self setanimstate( var_7, var_8 );
self.body = get_clone_agent( var_7, var_8 );
thread handle_ragdoll( self.body, var_7, var_9 );
}
move_away_from_surface( var_0, var_1 )
{
var_2 = self.origin + var_0 * var_1;
self setorigin( var_2 );
}
get_primary_death_anim_state()
{
if ( isdefined( self.shocked ) && self.shocked )
return "electric_shock_death";
switch ( self.currentanimstate )
{
case "scripted":
return "idle";
case "move":
if ( self.trajectoryactive )
return "jump";
else
return "run";
case "idle":
return "idle";
case "melee":
if ( self.trajectoryactive )
return "jump";
if ( self.melee_in_move_back || self.melee_in_posture )
return "idle";
else
return "run";
case "traverse":
if ( self.trajectoryactive )
return "jump";
else
{
return "traverse";
default:
}
}
}
is_special_death( var_0 )
{
switch ( var_0 )
{
case "electric_shock_death":
case "traverse":
return 1;
default:
return 0;
}
}
get_death_anim_physics_mode( var_0 )
{
switch ( var_0 )
{
case "electric_shock":
return "noclip";
default:
return "gravity";
}
}
get_clone_agent( var_0, var_1 )
{
var_2 = self getanimentry( var_0, var_1 );
var_3 = getanimlength( var_2 );
if ( animhasnotetrack( var_2, "start_ragdoll" ) )
{
var_4 = getnotetracktimes( var_2, "start_ragdoll" );
var_3 = var_3 * var_4[0];
}
var_5 = int( var_3 * 1000 );
return self cloneagent( var_5 );
}
handle_ragdoll( var_0, var_1, var_2 )
{
var_3 = var_0 getcorpseanim();
if ( !should_do_ragdoll( var_0, var_3 ) )
return;
if ( var_2 )
{
var_0 startragdoll();
if ( var_0 isragdoll() )
return;
}
delaystartragdoll( var_0, var_3 );
if ( !isdefined( var_0 ) )
return;
if ( var_1 == "shock_death" )
self notify( "in_ragdoll", var_0.origin );
}
delaystartragdoll( var_0, var_1 )
{
var_2 = getanimlength( var_1 );
if ( animhasnotetrack( var_1, "start_ragdoll" ) )
{
var_3 = getnotetracktimes( var_1, "start_ragdoll" );
var_4 = var_3[0];
var_5 = var_4 * var_2;
}
else
var_5 = 0.2;
wait( var_5 );
if ( !isdefined( var_0 ) )
return;
else
{
var_0 startragdoll();
if ( var_0 isragdoll() )
return;
}
if ( var_5 < var_2 )
{
wait( var_2 - var_5 );
if ( !isdefined( var_0 ) )
return;
else
{
var_0 startragdoll();
if ( var_0 isragdoll() )
return;
}
}
if ( isdefined( var_0 ) )
var_0 delete();
}
should_do_ragdoll( var_0, var_1 )
{
if ( var_0 isragdoll() )
return 0;
if ( animhasnotetrack( var_1, "ignore_ragdoll" ) )
return 0;
if ( isdefined( level.noragdollents ) && level.noragdollents.size )
{
foreach ( var_3 in level.noragdollents )
{
if ( distancesquared( var_0.origin, var_3.origin ) < 65536 )
return 0;
}
}
return 1;
}
blackbox_alienkilled( var_0 )
{
if ( isplayer( var_0 ) || isdefined( var_0.pet ) && var_0.pet == 1 && isplayer( var_0.petowner ) || isdefined( var_0.owner ) && isplayer( var_0.owner ) )
level.alienbbdata["aliens_killed"]++;
self notify( "alien_killed" );
var_1 = isagent( var_0 );
if ( var_1 )
{
var_2 = ( gettime() - var_0.birthtime ) / 1000;
var_3 = "unknown agent";
var_4 = "none";
if ( isdefined( var_0.agent_type ) )
{
var_3 = var_0.agent_type;
if ( isdefined( var_0.alien_type ) )
var_3 = var_0.alien_type;
}
}
else
{
var_2 = 0;
var_4 = "none";
if ( isplayer( var_0 ) )
{
var_3 = "player";
if ( isdefined( var_0.name ) )
var_4 = var_0.name;
}
else
var_3 = "nonagent";
}
var_5 = 0.0;
var_6 = 0.0;
var_7 = 0.0;
if ( isdefined( var_0 ) && ( isagent( var_0 ) || isplayer( var_0 ) ) )
{
var_5 = var_0.origin[0];
var_6 = var_0.origin[1];
var_7 = var_0.origin[2];
}
var_8 = 0;
if ( isdefined( self.birthtime ) )
var_8 = ( gettime() - self.birthtime ) / 1000;
var_9 = ( 0, 0, 0 );
if ( isdefined( self.spawnorigin ) )
var_9 = self.spawnorigin;
var_10 = 0;
if ( isdefined( self.spawnorigin ) )
var_10 = distance( self.origin, self.spawnorigin );
var_11 = 0;
if ( isdefined( self.damage_done ) )
var_11 = self.damage_done;
var_12 = "unknown agent";
if ( isdefined( self.agent_type ) )
{
var_12 = self.agent_type;
if ( isdefined( self.alien_type ) )
var_12 = self.alien_type;
}
var_13 = 0;
foreach ( var_15 in level.agentarray )
{
if ( !isdefined( var_15.isactive ) || !var_15.isactive )
continue;
if ( isdefined( var_15.team ) && var_15.team == "axis" )
var_13++;
}
var_17 = 0;
if ( isdefined( level.players ) )
var_17 = level.players.size;
bbprint( "alienkilled", "attackerisagent %i attackeralivetime %f attackeragenttype %s attackername %s attackerx %f attackery %f attackerz %f victimalivetime %f victimspawnoriginx %f victimspawnoriginy %f victimspawnoriginz %f victimdistfromspawn %i victimdamagedone %i victimagenttype %s currentenemypopulation %i currentplayerpopulation %i ", var_1, var_2, var_3, var_4, var_0.origin[0], var_0.origin[1], var_0.origin[2], var_8, var_9[0], var_9[1], var_9[2], var_10, var_11, var_12, var_13, var_17 );
}
kill_trigger_spawn_init()
{
level.killtriggerspawnlocs = common_scripts\utility::getstructarray( "respawn_edge", "targetname" );
}
getkilltriggerspawnloc()
{
return common_scripts\utility::getclosest( self.origin, level.killtriggerspawnlocs );
}
should_do_pipebomb_death( var_0 )
{
var_1 = maps\mp\alien\_utility::get_alien_type();
if ( var_1 == "minion" || var_1 == "elite" || var_1 == "mammoth" )
return 0;
return isdefined( var_0 ) && var_0 == "iw6_aliendlc22_mp";
}
do_pipebomb_death()
{
playfx( level._effect["alien_gib"], self.origin + ( 0, 0, 32 ) );
}
is_pettrap_kill( var_0 )
{
return isdefined( var_0 ) && isdefined( var_0.is_pet_trap );
}
general_alien_custom_death( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
var_7 = isdefined( var_1 ) && isplayer( var_1 );
if ( var_7 && isdefined( var_4 ) && maps\mp\alien\_utility::weapon_has_alien_attachment( var_4 ) && var_3 != "MOD_MELEE" && !maps\mp\alien\_utility::is_true( level.easter_egg_lodge_sign_active ) )
{
playfx( level._effect["alien_ark_gib"], self.origin + ( 0, 0, 32 ) );
return 1;
}
else
return 0;
}

2
maps/mp/alien/_debug.gsc Normal file
View File

@ -0,0 +1,2 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool

View File

@ -0,0 +1,813 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
if ( !isdefined( level.boxsettings ) )
level.boxsettings = [];
}
begindeployableviamarker( var_0, var_1 )
{
thread watchdeployablemarkercancel( var_1 );
thread watchdeployablemarkerplacement( var_1, var_0 );
for (;;)
{
var_2 = common_scripts\utility::waittill_any_return( "deployable_canceled", "deployable_deployed", "death", "disconnect" );
return var_2 == "deployable_deployed";
}
}
tryusedeployable( var_0, var_1 )
{
thread watchdeployablemarkercancel( var_1 );
thread watchdeployablemarkerplacement( var_1, var_0 );
for (;;)
{
var_2 = common_scripts\utility::waittill_any_return( "deployable_canceled", "deployable_deployed", "death", "disconnect" );
return var_2 == "deployable_deployed";
}
}
watchdeployablemarkercancel( var_0 )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "deployable_deployed" );
var_1 = level.boxsettings[var_0];
var_2 = self getcurrentweapon();
while ( var_2 == var_1.weaponinfo )
self waittill( "weapon_change", var_2 );
self notify( "deployable_canceled" );
}
watchdeployablemarkerplacement( var_0, var_1 )
{
self endon( "spawned_player" );
self endon( "disconnect" );
self endon( "deployable_canceled" );
for (;;)
{
self waittill( "grenade_fire", var_2, var_3 );
if ( maps\mp\_utility::isreallyalive( self ) )
break;
else
var_2 delete();
}
self notify( "deployable_deployed" );
var_2.owner = self;
var_2.weaponname = var_3;
self.marker = var_2;
var_2 playsoundtoplayer( level.boxsettings[var_0].deployedsfx, self );
var_2 thread markeractivate( var_1, var_0, ::box_setactive );
}
override_box_moving_platform_death( var_0 )
{
self notify( "death" );
}
markeractivate( var_0, var_1, var_2 )
{
self notify( "markerActivate" );
self endon( "markerActivate" );
self waittill( "missile_stuck" );
var_3 = self.owner;
var_4 = self.origin;
if ( !isdefined( var_3 ) )
return;
var_5 = createboxforplayer( var_1, var_4, var_3 );
var_6 = spawnstruct();
var_6.linkparent = self getlinkedparent();
if ( isdefined( var_6.linkparent ) && isdefined( var_6.linkparent.model ) && deployableexclusion( var_6.linkparent.model ) )
{
var_5.origin = var_6.linkparent.origin;
var_7 = var_6.linkparent getlinkedparent();
if ( isdefined( var_7 ) )
var_6.linkparent = var_7;
else
var_6.linkparent = undefined;
}
var_6.deathoverridecallback = ::override_box_moving_platform_death;
var_5 thread maps\mp\_movers::handle_moving_platforms( var_6 );
var_5.moving_platform = var_6.linkparent;
var_5 setotherent( var_3 );
wait 0.05;
var_5 thread [[ var_2 ]]();
self delete();
if ( isdefined( var_5 ) && var_5 maps\mp\_utility::touchingbadtrigger() )
var_5 notify( "death" );
}
deployableexclusion( var_0 )
{
if ( var_0 == "weapon_alien_laser_drill" )
return 1;
else if ( issubstr( var_0, "crafting" ) )
return 1;
else if ( issubstr( var_0, "scorpion_body" ) )
return 1;
return 0;
}
isholdingdeployablebox()
{
var_0 = self getcurrentweapon();
if ( isdefined( var_0 ) )
{
foreach ( var_2 in level.boxsettings )
{
if ( var_0 == var_2.weaponinfo )
return 1;
}
}
return 0;
}
get_box_icon( var_0, var_1, var_2 )
{
return level.alien_combat_resources[var_0][var_1].upgrades[var_2].dpad_icon;
}
get_resource_type( var_0 )
{
if ( !isdefined( var_0 ) )
return undefined;
foreach ( var_3, var_2 in level.alien_combat_resources )
{
if ( isdefined( var_2[var_0] ) )
return var_3;
}
return undefined;
}
createboxforplayer( var_0, var_1, var_2 )
{
var_3 = level.boxsettings[var_0];
var_4 = spawn( "script_model", var_1 );
var_4 setmodel( var_3.modelbase );
var_4.health = 999999;
var_4.maxhealth = var_3.maxhealth;
var_4.angles = var_2.angles;
var_4.boxtype = var_0;
var_4.owner = var_2;
var_4.team = var_2.team;
if ( isdefined( var_3.dpadname ) )
var_4.dpadname = var_3.dpadname;
if ( isdefined( var_3.maxuses ) )
var_4.usesremaining = var_3.maxuses;
var_5 = var_4.owner;
var_6 = get_resource_type( var_4.dpadname );
if ( is_combat_resource( var_6 ) )
{
var_4.upgrade_rank = var_5 maps\mp\alien\_persistence::get_upgrade_level( var_6 );
var_4.icon_name = get_box_icon( var_6, var_4.dpadname, var_4.upgrade_rank );
}
else
{
var_4.upgrade_rank = 0;
var_4.icon_name = var_3.icon_name;
}
level.alienbbdata["team_item_deployed"]++;
var_5 maps\mp\alien\_persistence::eog_player_update_stat( "deployables", 1 );
var_4 box_setinactive();
var_4 thread box_handleownerdisconnect();
var_4 addboxtolevelarray();
return var_4;
}
is_combat_resource( var_0 )
{
return isdefined( var_0 );
}
box_setactive( var_0 )
{
self setcursorhint( "HINT_NOICON" );
var_1 = level.boxsettings[self.boxtype];
self sethintstring( var_1.hintstring );
self.inuse = 0;
var_2 = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add( var_2, "invisible", ( 0, 0, 0 ) );
objective_position( var_2, self.origin );
objective_state( var_2, "active" );
if ( isdefined( var_1.shadername ) )
objective_icon( var_2, var_1.shadername );
self.objidfriendly = var_2;
if ( ( !isdefined( var_0 ) || !var_0 ) && isdefined( var_1.onusecallback ) && ( !isdefined( var_1.canusecallback ) || self.owner [[ var_1.canusecallback ]]() ) )
{
if ( maps\mp\_utility::isreallyalive( self.owner ) )
self.owner [[ var_1.onusecallback ]]( self );
}
if ( level.teambased )
{
objective_team( var_2, self.team );
foreach ( var_4 in level.players )
{
if ( self.team == var_4.team && ( !isdefined( var_1.canusecallback ) || var_4 [[ var_1.canusecallback ]]( self ) ) )
box_seticon( var_4, var_1.streakname, var_1.headiconoffset );
}
}
else
{
objective_player( var_2, self.owner getentitynumber() );
if ( !isdefined( var_1.canusecallback ) || self.owner [[ var_1.canusecallback ]]( self ) )
box_seticon( self.owner, var_1.streakname, var_1.headiconoffset );
}
self makeusable();
self.isusable = 1;
self setcandamage( 1 );
thread box_handledamage();
thread box_handledeath();
thread box_timeout();
common_scripts\utility::make_entity_sentient_mp( self.team, 1 );
if ( isdefined( self.owner ) )
self.owner notify( "new_deployable_box", self );
if ( level.teambased )
{
foreach ( var_4 in level.participants )
_box_setactivehelper( var_4, self.team == var_4.team, var_1.canusecallback );
}
else
{
foreach ( var_4 in level.participants )
_box_setactivehelper( var_4, isdefined( self.owner ) && self.owner == var_4, var_1.canusecallback );
}
if ( ( !isdefined( self.air_dropped ) || !self.air_dropped ) && !maps\mp\alien\_utility::isplayingsolo() )
level thread maps\mp\_utility::teamplayercardsplash( var_1.splashname, self.owner, self.team );
thread box_playerconnected();
thread box_agentconnected();
}
_box_setactivehelper( var_0, var_1, var_2 )
{
if ( var_1 )
{
if ( !isdefined( var_2 ) || var_0 [[ var_2 ]]( self ) )
box_enableplayeruse( var_0 );
else
{
box_disableplayeruse( var_0 );
thread doubledip( var_0 );
}
thread boxthink( var_0 );
}
else
box_disableplayeruse( var_0 );
}
box_playerconnected()
{
self endon( "death" );
for (;;)
{
level waittill( "connected", var_0 );
childthread box_waittill_player_spawn_and_add_box( var_0 );
}
}
box_agentconnected()
{
self endon( "death" );
for (;;)
{
level waittill( "spawned_agent_player", var_0 );
box_addboxforplayer( var_0 );
}
}
box_waittill_player_spawn_and_add_box( var_0 )
{
var_0 waittill( "spawned_player" );
if ( level.teambased )
box_addboxforplayer( var_0 );
}
box_playerjoinedteam( var_0 )
{
self endon( "death" );
var_0 endon( "disconnect" );
for (;;)
{
var_0 waittill( "joined_team" );
if ( level.teambased )
box_addboxforplayer( var_0 );
}
}
box_addboxforplayer( var_0 )
{
if ( self.team == var_0.team )
{
box_enableplayeruse( var_0 );
thread boxthink( var_0 );
box_seticon( var_0, level.boxsettings[self.boxtype].streakname, level.boxsettings[self.boxtype].headiconoffset );
}
else
{
box_disableplayeruse( var_0 );
maps\mp\_entityheadicons::setheadicon( var_0, "", ( 0, 0, 0 ) );
}
}
box_seticon( var_0, var_1, var_2 )
{
maps\mp\_entityheadicons::setheadicon( var_0, self.icon_name, ( 0, 0, var_2 ), 14, 14, undefined, undefined, undefined, undefined, undefined, 0 );
}
box_enableplayeruse( var_0 )
{
if ( isplayer( var_0 ) )
self enableplayeruse( var_0 );
self.disabled_use_for[var_0 getentitynumber()] = 0;
}
box_disableplayeruse( var_0 )
{
if ( isplayer( var_0 ) )
self disableplayeruse( var_0 );
self.disabled_use_for[var_0 getentitynumber()] = 1;
}
box_setinactive()
{
self makeunusable();
self.isusable = 0;
maps\mp\_entityheadicons::setheadicon( "none", "", ( 0, 0, 0 ) );
if ( isdefined( self.objidfriendly ) )
maps\mp\_utility::_objective_delete( self.objidfriendly );
}
box_handledamage()
{
var_0 = level.boxsettings[self.boxtype];
maps\mp\gametypes\_damage::monitordamage( var_0.maxhealth, var_0.damagefeedback, ::boxmodifydamage, ::boxhandledeathdamage, 1 );
}
boxmodifydamage( var_0, var_1, var_2, var_3 )
{
var_4 = var_3;
if ( isexplosivedamagemod( var_2 ) )
var_4 = var_3 * 1.5;
var_4 = maps\mp\gametypes\_damage::handlemeleedamage( var_1, var_2, var_4 );
var_4 = maps\mp\gametypes\_damage::handlemissiledamage( var_1, var_2, var_4 );
var_4 = maps\mp\gametypes\_damage::handleapdamage( var_1, var_2, var_4, var_0 );
return var_4;
}
boxhandledeathdamage( var_0, var_1, var_2, var_3 )
{
var_4 = level.boxsettings[self.boxtype];
maps\mp\gametypes\_damage::onkillstreakkilled( var_0, var_1, var_2, var_3, var_4.xppopup, var_4.vodestroyed );
}
box_handledeath()
{
self waittill( "death" );
if ( !isdefined( self ) )
return;
box_setinactive();
removeboxfromlevelarray();
var_0 = level.boxsettings[self.boxtype];
playfx( common_scripts\utility::getfx( "deployablebox_crate_destroy" ), self.origin );
if ( isdefined( var_0.deathdamagemax ) )
{
var_1 = undefined;
if ( isdefined( self.owner ) )
var_1 = self.owner;
radiusdamage( self.origin + ( 0, 0, var_0.headiconoffset ), var_0.deathdamageradius, var_0.deathdamagemax, var_0.deathdamagemin, var_1, "MOD_EXPLOSIVE", var_0.deathweaponinfo );
}
wait 0.1;
self notify( "deleting" );
self delete();
}
box_handleownerdisconnect()
{
self endon( "death" );
level endon( "game_ended" );
self notify( "box_handleOwner" );
self endon( "box_handleOwner" );
var_0 = self.owner;
self.owner waittill( "killstreak_disowned" );
if ( isdefined( self.air_dropped ) && self.air_dropped )
{
foreach ( var_2 in level.players )
{
if ( !isdefined( var_2 ) || isdefined( var_0 ) && var_0 == var_2 )
continue;
self.owner = var_2;
thread box_handleownerdisconnect();
return;
}
}
self notify( "death" );
}
boxthink( var_0 )
{
self endon( "death" );
thread boxcapturethink( var_0 );
if ( !isdefined( var_0.boxes ) )
var_0.boxes = [];
var_0.boxes[var_0.boxes.size] = self;
var_1 = level.boxsettings[self.boxtype];
for (;;)
{
self waittill( "captured", var_2 );
if ( var_2 == var_0 )
{
var_0 playlocalsound( var_1.onusesfx );
if ( isdefined( var_1.onusecallback ) )
{
var_0 [[ var_1.onusecallback ]]( self );
if ( maps\mp\alien\_utility::is_chaos_mode() )
maps\mp\alien\_chaos::update_pickup_deployable_box_event();
}
if ( isdefined( self.owner ) && var_0 != self.owner )
{
self.owner thread maps\mp\gametypes\_rank::xpeventpopup( var_1.event );
self.owner thread maps\mp\gametypes\_rank::giverankxp( "support", var_1.usexp );
}
if ( isdefined( self.usesremaining ) )
{
self.usesremaining--;
if ( self.usesremaining == 0 )
{
box_leave();
break;
}
}
maps\mp\_entityheadicons::setheadicon( var_0, "", ( 0, 0, 0 ) );
box_disableplayeruse( var_0 );
thread doubledip( var_0 );
}
}
}
doubledip( var_0 )
{
self endon( "death" );
var_0 endon( "disconnect" );
if ( isdefined( self.air_dropped ) && self.air_dropped )
return;
var_0 waittill( "death" );
if ( level.teambased )
{
if ( self.team == var_0.team )
{
box_seticon( var_0, level.boxsettings[self.boxtype].streakname, level.boxsettings[self.boxtype].headiconoffset );
box_enableplayeruse( var_0 );
}
}
else if ( isdefined( self.owner ) && self.owner == var_0 )
{
box_seticon( var_0, level.boxsettings[self.boxtype].streakname, level.boxsettings[self.boxtype].headiconoffset );
box_enableplayeruse( var_0 );
}
}
boxcapturethink( var_0 )
{
while ( isdefined( self ) )
{
self waittill( "trigger", var_1 );
if ( maps\mp\_utility::is_aliens() )
{
if ( [[ level.boxcapturethink_alien_func ]]( var_1 ) )
continue;
}
if ( maps\mp\alien\_utility::is_chaos_mode() )
{
switch ( self.boxtype )
{
case "medic_skill":
case "engineer_skill":
case "tank_skill":
case "specialist_skill":
if ( maps\mp\alien\_utility::is_true( var_1.haschaosclassskill ) )
{
var_1 maps\mp\_utility::setlowermessage( "cant_use", &"ALIEN_CHAOS_CANT_PICKUP_BONUS", 3 );
continue;
}
else if ( maps\mp\alien\_utility::is_true( var_1.chaosclassskillinuse ) )
{
var_1 maps\mp\_utility::setlowermessage( "skill_in_use", &"ALIEN_CHAOS_SKILL_IN_USE", 3 );
continue;
}
break;
case "combo_freeze":
if ( maps\mp\alien\_utility::is_true( var_1.hascombofreeze ) )
{
var_1 maps\mp\_utility::setlowermessage( "cant_use", &"ALIEN_CHAOS_CANT_PICKUP_BONUS", 3 );
continue;
}
break;
default:
break;
}
}
if ( var_1 == var_0 && useholdthink( var_0, level.boxsettings[self.boxtype].usetime ) )
self notify( "captured", var_0 );
}
}
isfriendlytobox( var_0 )
{
return level.teambased && self.team == var_0.team;
}
box_timeout()
{
self endon( "death" );
level endon( "game_ended" );
if ( box_should_leave_immediately() )
wait 0.05;
else
{
var_0 = level.boxsettings[self.boxtype].lifespan;
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_0 );
}
box_leave();
}
box_should_leave_immediately()
{
if ( self.boxtype == "deployable_ammo" && self.upgrade_rank == 4 || self.boxtype == "deployable_specialammo_comb" && self.upgrade_rank == 4 )
return 0;
if ( maps\mp\alien\_utility::isplayingsolo() && ( !isdefined( self.air_dropped ) || !self.air_dropped ) )
return 1;
return 0;
}
box_leave()
{
playfx( common_scripts\utility::getfx( "deployablebox_crate_destroy" ), self.origin );
wait 0.05;
self notify( "death" );
}
deleteonownerdeath( var_0 )
{
wait 0.25;
self linkto( var_0, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
var_0 waittill( "death" );
box_leave();
}
box_modelteamupdater( var_0 )
{
self endon( "death" );
self hide();
foreach ( var_2 in level.players )
{
if ( var_2.team == var_0 )
self showtoplayer( var_2 );
}
for (;;)
{
level waittill( "joined_team" );
self hide();
foreach ( var_2 in level.players )
{
if ( var_2.team == var_0 )
self showtoplayer( var_2 );
}
}
}
useholdthink( var_0, var_1 )
{
if ( isplayer( var_0 ) )
var_0 playerlinkto( self );
else
var_0 linkto( self );
var_0 playerlinkedoffsetenable();
var_0.boxparams = spawnstruct();
var_0.boxparams.curprogress = 0;
var_0.boxparams.inuse = 1;
var_0.boxparams.userate = 0;
if ( isdefined( var_1 ) )
var_0.boxparams.usetime = var_1;
else
var_0.boxparams.usetime = 3000;
var_0 maps\mp\alien\_utility::disable_weapon_timeout( var_1 + 0.05, "deployable_weapon_management" );
if ( isplayer( var_0 ) )
var_0 thread personalusebar( self );
var_2 = useholdthinkloop( var_0 );
if ( isalive( var_0 ) )
{
var_0 maps\mp\alien\_utility::enable_weapon_wrapper( "deployable_weapon_management" );
var_0 unlink();
}
if ( !isdefined( self ) )
return 0;
var_0.boxparams.inuse = 0;
var_0.boxparams.curprogress = 0;
return var_2;
}
personalusebar( var_0 )
{
self endon( "disconnect" );
var_1 = maps\mp\gametypes\_hud_util::createprimaryprogressbar( 0, 25 );
var_2 = maps\mp\gametypes\_hud_util::createprimaryprogressbartext( 0, 25 );
var_2 settext( level.boxsettings[var_0.boxtype].capturingstring );
var_3 = -1;
while ( maps\mp\_utility::isreallyalive( self ) && isdefined( var_0 ) && self.boxparams.inuse && var_0.isusable && !level.gameended )
{
if ( var_3 != self.boxparams.userate )
{
if ( self.boxparams.curprogress > self.boxparams.usetime )
self.boxparams.curprogress = self.boxparams.usetime;
var_1 maps\mp\gametypes\_hud_util::updatebar( self.boxparams.curprogress / self.boxparams.usetime, 1000 / self.boxparams.usetime * self.boxparams.userate );
if ( !self.boxparams.userate )
{
var_1 maps\mp\gametypes\_hud_util::hideelem();
var_2 maps\mp\gametypes\_hud_util::hideelem();
}
else
{
var_1 maps\mp\gametypes\_hud_util::showelem();
var_2 maps\mp\gametypes\_hud_util::showelem();
}
}
var_3 = self.boxparams.userate;
wait 0.05;
}
var_1 maps\mp\gametypes\_hud_util::destroyelem();
var_2 maps\mp\gametypes\_hud_util::destroyelem();
}
useholdthinkloop( var_0 )
{
while ( !level.gameended && isdefined( self ) && maps\mp\_utility::isreallyalive( var_0 ) && var_0 usebuttonpressed() && var_0.boxparams.curprogress < var_0.boxparams.usetime )
{
var_0.boxparams.curprogress = var_0.boxparams.curprogress + 50 * var_0.boxparams.userate;
if ( isdefined( var_0.objectivescaler ) )
var_0.boxparams.userate = 1 * var_0.objectivescaler;
else
var_0.boxparams.userate = 1;
if ( var_0.boxparams.curprogress >= var_0.boxparams.usetime )
return maps\mp\_utility::isreallyalive( var_0 );
wait 0.05;
}
return 0;
}
disablewhenjuggernaut()
{
level endon( "game_ended" );
self endon( "death" );
for (;;)
{
level waittill( "juggernaut_equipped", var_0 );
maps\mp\_entityheadicons::setheadicon( var_0, "", ( 0, 0, 0 ) );
box_disableplayeruse( var_0 );
thread doubledip( var_0 );
}
}
addboxtolevelarray()
{
level.deployable_box[self.boxtype][self getentitynumber()] = self;
}
removeboxfromlevelarray()
{
level.deployable_box[self.boxtype][self getentitynumber()] = undefined;
}
default_canusedeployable( var_0 )
{
if ( ( isdefined( var_0 ) && var_0.owner == self || maps\mp\alien\_prestige::prestige_getnodeployables() == 1.0 ) && !isdefined( var_0.air_dropped ) )
return 0;
return 1;
}
default_onusedeployable( var_0 )
{
thread maps\mp\alien\_persistence::deployablebox_used_track( var_0 );
maps\mp\alien\_utility::deployable_box_onuse_message( var_0 );
}
default_tryusedeployable( var_0, var_1 )
{
var_2 = maps\mp\alien\_combat_resources::alien_begindeployableviamarker( var_0, var_1 );
if ( !isdefined( var_2 ) || !var_2 )
return 0;
return 1;
}
init_deployable( var_0, var_1 )
{
if ( !isdefined( level.boxsettings ) )
level.boxsettings = [];
level.boxsettings[var_0] = var_1;
if ( !isdefined( level.killstreakfuncs ) )
level.killstreakfuncs = [];
level.deployable_box[var_0] = [];
}

File diff suppressed because it is too large Load Diff

2
maps/mp/alien/_dev.gsc Normal file
View File

@ -0,0 +1,2 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool

161
maps/mp/alien/_director.gsc Normal file
View File

@ -0,0 +1,161 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
alien_attribute_table_init()
{
if ( !isdefined( level.default_alien_definition ) )
level.default_alien_definition = "mp/alien/default_alien_definition.csv";
var_0 = [];
var_0["ref"] = "0";
var_0["name"] = "1";
var_0["model"] = "2";
var_0["desc"] = "3";
var_0["boss"] = 4;
var_0["animclass"] = "5";
var_0["health"] = 10;
var_0["min_cumulative_pain_threshold"] = 11;
var_0["min_cumulative_pain_buffer_time"] = 12.0;
var_0["accuracy"] = 13.0;
var_0["speed"] = 14.0;
var_0["scale"] = 15.0;
var_0["xp"] = 16;
var_0["attacker_difficulty"] = 17.0;
var_0["attacker_priority"] = 18;
var_0["jump_cost"] = 19.0;
var_0["traverse_cost"] = 20.0;
var_0["run_cost"] = 21.0;
var_0["wall_run_cost"] = 29.0;
var_0["heavy_damage_threshold"] = 22.0;
var_0["pain_interval"] = 23.0;
var_0["emissive_default"] = 24.0;
var_0["emissive_max"] = 25.0;
var_0["weight_scale"] = 26.0;
var_0["reward"] = 27.0;
var_0["view_height"] = 28.0;
var_0["behavior_cloak"] = 100;
var_0["behavior_spit"] = 101;
var_0["behavior_lead"] = 102;
var_0["behavior_hives"] = 103;
var_0["swipe_min_damage"] = 2000;
var_0["swipe_max_damage"] = 2001;
var_0["leap_min_damage"] = 2002;
var_0["leap_max_damage"] = 2003;
var_0["wall_min_damage"] = 2004;
var_0["wall_max_damage"] = 2005;
var_0["charge_min_damage"] = 2006;
var_0["charge_max_damage"] = 2007;
var_0["explode_min_damage"] = 2008;
var_0["explode_max_damage"] = 2009;
var_0["slam_min_damage"] = 2010;
var_0["slam_max_damage"] = 2011;
var_0["synch_min_damage_per_second"] = 2012;
var_0["synch_max_damage_per_second"] = 2013;
var_1 = 1000;
var_2 = 1100;
for ( var_3 = var_1; var_3 < var_2; var_3++ )
{
var_4 = tablelookup( level.default_alien_definition, 0, var_3, 1 );
if ( var_4 == "" )
break;
var_0[var_4] = var_3 * 1.0;
}
level.alien_types = [];
var_5 = 18;
for ( var_6 = 2; var_6 < var_5; var_6++ )
setup_alien_type( var_0, var_6 );
if ( isdefined( level.custom_alien_attribute_table_init ) )
[[ level.custom_alien_attribute_table_init ]]();
}
setup_alien_type( var_0, var_1 )
{
var_2 = tablelookup( level.default_alien_definition, 0, var_0["ref"], var_1 );
if ( var_2 == "" )
return;
level.alien_types[var_2] = spawnstruct();
level.alien_types[var_2].attributes = [];
level.alien_types[var_2].loots = [];
foreach ( var_6, var_4 in var_0 )
{
var_5 = tablelookup( level.default_alien_definition, 0, var_4, var_1 );
if ( !isstring( var_4 ) )
{
if ( !issubstr( var_5, "." ) )
var_5 = int( var_5 );
else
var_5 = float( var_5 );
}
level.alien_types[var_2].attributes[var_6] = var_5;
if ( issubstr( var_6, "loot_" ) && var_5 > 0.0 )
level.alien_types[var_2].loots[var_6] = var_5;
}
}
alien_cloak()
{
self endon( "death" );
thread near_player_notify();
for (;;)
{
if ( maps\mp\alien\_utility::any_player_nearby( self.origin, 800 ) )
{
wait 0.05;
continue;
}
self waittill( "jump_launching" );
wait 0.2;
var_0 = self.model;
maps\mp\alien\_alien_fx::alien_cloak_fx_on();
cloak_fx();
self setmodel( var_0 + "_cloak" );
common_scripts\utility::waittill_any_timeout( 1, "jump_finished", "damage" );
wait 0.2;
maps\mp\alien\_alien_fx::alien_cloak_fx_off();
uncloak_fx();
self setmodel( var_0 );
}
}
near_player_notify()
{
self endon( "death" );
for (;;)
{
if ( maps\mp\alien\_utility::any_player_nearby( self.origin, 800 ) )
self notify( "near_player" );
wait 0.05;
}
}
cloak_fx()
{
playfxontag( level._effect["alien_cloaking"], self, "j_neck" );
}
uncloak_fx()
{
playfxontag( level._effect["alien_uncloaking"], self, "j_neck" );
}
smoke_puff()
{
playfxontag( level._effect["alien_teleport"], self, "tag_origin" );
playfxontag( level._effect["alien_teleport_dist"], self, "tag_origin" );
}

View File

@ -0,0 +1,511 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
init_beacon_weapon_fx();
level thread wait_for_gun_to_be_crafted();
}
init_beacon_weapon_fx()
{
level._effect["fire_blast"] = loadfx( "vfx/gameplay/alien/vfx_alien_arm_gun_fire_cloud" );
level._effect["electric_blast"] = loadfx( "vfx/gameplay/alien/vfx_alien_arm_gun_li_cloud" );
level._effect["spore_blast"] = loadfx( "vfx/gameplay/alien/vfx_alien_arm_gun_sp_gas" );
level._effect["corrosive_blast"] = loadfx( "vfx/gameplay/alien/vfx_alien_arm_gun_gas" );
level._effect["spitter_ammo"] = loadfx( "vfx/_requests/mp_alien_armory/spitter_ammo" );
}
dlc3_weapon_watcher()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
self notify( "gun_watcher_logic" );
self endon( "gun_watcher_logic" );
self notifyonplayercommand( "detonate_venom", "+toggleads_throw" );
self notifyonplayercommand( "detonate_venom", "+ads_akimbo_accessible" );
thread special_gun_detonate_hint_watcher();
var_0 = "none";
var_1 = undefined;
for (;;)
{
self waittill( "grenade_fire", var_1, var_0 );
if ( is_venom_weapon( var_0 ) )
{
var_1.health = 1;
thread wait_for_detonation( var_1, var_0 );
thread explode_projectile( var_1, var_0 );
}
else if ( is_venom_grenade( var_0 ) )
thread grenade_explosion_monitor( var_1, var_0 );
wait 0.05;
}
}
special_gun_detonate_hint_watcher()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
self endon( "gun_watcher_logic" );
var_0 = 2;
while ( !isdefined( self.no_more_detonate_hint ) )
{
self waittill( "grenade_fire", var_1, var_2 );
if ( is_venom_weapon( var_2 ) )
{
if ( !isdefined( self.projectile_time_out_num ) )
self.projectile_time_out_num = 1;
else if ( self.projectile_time_out_num > var_0 )
{
var_0 = 3;
self.projectile_time_out_num = 0;
thread show_specialweapon_hint_repeat();
}
else
self.projectile_time_out_num++;
}
wait 0.1;
}
}
wait_for_detonation( var_0, var_1 )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "detonated" );
level endon( "game_ended" );
self.adspressed = 0;
thread ads_watcher();
thread toggle_ads_watcher();
var_2 = 55;
var_3 = 0;
var_4 = ( 0, 0, 0 );
for ( var_5 = var_4; self adsbuttonpressed() && var_3 < var_2; var_3 = var_3 + 1 )
wait 0.05;
while ( var_3 < var_2 )
{
if ( isdefined( var_0 ) && self.adspressed )
{
self notify( "projectile_detonate" );
self.no_more_detonate_hint = 1;
return;
}
else if ( !isdefined( var_0 ) )
{
thread cloudmonitor( self, var_5, var_1 );
playsoundatpos( var_5, "aliendlc11_explode" );
return;
}
var_4 = var_0.origin;
var_5 = var_4;
wait 0.05;
var_3 = var_3 + 1;
}
self notify( "projectile_detonate" );
}
toggle_ads_watcher()
{
self endon( "disconnect" );
self endon( "death" );
self endon( "projectile_detonate" );
self endon( "ads_pressed" );
self waittill( "detonate_venom" );
self.adspressed = 1;
self notify( "ads_pressed" );
}
ads_watcher()
{
self endon( "disconnect" );
self endon( "death" );
self endon( "projectile_detonate" );
self endon( "ads_pressed" );
for (;;)
{
if ( self adsbuttonpressed() )
{
self.adspressed = 1;
self notify( "ads_pressed" );
}
wait 0.05;
}
}
grenade_explosion_monitor( var_0, var_1 )
{
self endon( "disconnect" );
var_0 waittill( "death" );
level thread cloudmonitor( self, var_0.origin, var_1 );
}
explode_projectile( var_0, var_1 )
{
self waittill( "projectile_detonate" );
if ( isdefined( var_0 ) )
{
level thread cloudmonitor( self, var_0.origin, var_1 );
playsoundatpos( var_0.origin, "aliendlc11_explode" );
var_0 delete();
}
}
cloudmonitor( var_0, var_1, var_2 )
{
if ( !isdefined( var_1 ) )
return;
var_3 = undefined;
var_4 = 200;
var_5 = 150;
var_6 = 250;
var_7 = 5;
var_8 = 5;
var_9 = 0.5;
var_10 = 200;
var_11 = 1000;
var_12 = 1500;
switch ( var_2 )
{
case "iw6_aliendlc11li_mp":
var_3 = spawnfx( level._effect["electric_blast"], var_1 );
break;
case "iw6_aliendlc32_mp":
var_4 = 200;
var_5 = 150;
var_6 = 250;
var_7 = 5;
var_8 = 5;
var_3 = spawnfx( level._effect["electric_blast"], var_1 );
break;
case "iw6_aliendlc11fi_mp":
var_3 = spawnfx( level._effect["fire_blast"], var_1 );
break;
case "iw6_aliendlc33_mp":
var_4 = 200;
var_5 = 150;
var_6 = 250;
var_7 = 5;
var_8 = 5;
var_3 = spawnfx( level._effect["fire_blast"], var_1 );
break;
case "iw6_aliendlc11_mp":
var_3 = spawnfx( level._effect["corrosive_blast"], var_1 );
break;
case "iw6_aliendlc31_mp":
var_4 = 200;
var_5 = 150;
var_6 = 250;
var_7 = 5;
var_8 = 5;
break;
}
var_13 = var_1 - ( 0, 0, var_5 );
var_14 = var_5 + var_5;
var_15 = spawn( "trigger_radius", var_13, 1, var_4, var_14 );
var_15.owner = var_0;
radiusdamage( var_1, var_10, var_12, var_11, var_0, "MOD_EXPLOSIVE" );
earthquake( 0.5, 1, var_1, 512 );
playrumbleonposition( "grenade_rumble", var_1 );
if ( isdefined( var_3 ) )
triggerfx( var_3 );
if ( var_2 == "iw6_aliendlc11li_mp" )
playsoundatpos( var_1, "venom_lightning_expl" );
if ( var_2 == "iw6_aliendlc11fi_mp" )
playsoundatpos( var_1, "venom_fire_expl" );
var_16 = 0.0;
var_17 = 0.25;
var_18 = 1;
var_19 = 0;
wait( var_18 );
for ( var_16 = var_16 + var_18; var_16 < var_7; var_16 = var_16 + var_17 )
{
var_20 = [];
foreach ( var_22 in level.agentarray )
{
if ( isdefined( var_22 ) && isalive( var_22 ) && var_22 istouching( var_15 ) && !isdefined( var_22.melting ) )
var_20[var_20.size] = var_22;
}
if ( isdefined( level.alive_plants ) )
{
foreach ( var_25 in level.alive_plants )
{
if ( isdefined( var_25 ) && isdefined( var_25.coll_model ) && var_25.coll_model istouching( var_15 ) )
var_25.coll_model dodamage( var_6, var_25.origin, var_0, var_0 );
}
}
foreach ( var_22 in var_20 )
{
if ( isdefined( var_22 ) && isalive( var_22 ) )
{
var_22 thread cloud_melt_alien( var_6, var_0, var_8, var_15, var_9, var_2 );
common_scripts\utility::waitframe();
}
}
wait( var_17 );
}
var_15 delete();
if ( isdefined( var_3 ) )
var_3 delete();
}
alien_corrosive_on()
{
if ( !isdefined( self.is_corrosive ) )
self.is_corrosive = 0;
self.is_corrosive++;
if ( self.is_corrosive == 1 )
self setscriptablepartstate( "body", "corrosive" );
}
alien_corrosive_off()
{
self.is_corrosive--;
if ( self.is_corrosive > 0 )
return;
self.is_corrosive = undefined;
self notify( "corrosive_off" );
self setscriptablepartstate( "body", "normal" );
}
cloud_melt_alien( var_0, var_1, var_2, var_3, var_4, var_5 )
{
self notify( "stasis_cloud_burning" );
self endon( "stasis_cloud_burning" );
self endon( "death" );
if ( !isdefined( var_2 ) )
var_2 = 6;
self.melting = 1;
switch ( var_5 )
{
case "iw6_aliendlc11_mp":
case "iw6_aliendlc31_mp":
if ( !isdefined( level.spider ) || isdefined( level.spider ) && self != level.spider )
alien_corrosive_on();
break;
case "iw6_aliendlc11fi_mp":
case "iw6_aliendlc33_mp":
thread maps\mp\alien\_damage::catch_alien_on_fire( var_1 );
break;
case "iw6_aliendlc11li_mp":
case "iw6_aliendlc32_mp":
thread maps\mp\alien\_alien_fx::fx_stun_damage();
break;
}
var_6 = 0;
while ( var_6 < var_2 )
{
if ( isdefined( var_3 ) )
self dodamage( var_0, self.origin, var_1, var_1, "MOD_UNKNOWN" );
else
self dodamage( var_0, self.origin, var_1 );
var_6 = var_6 + var_4;
wait( var_4 );
}
if ( isdefined( self.is_corrosive ) )
alien_corrosive_off();
self.melting = undefined;
}
wait_for_gun_to_be_crafted()
{
level waittill( "venom_crafted" );
level thread venom_ammo_drop_logic();
}
venom_ammo_drop_logic()
{
var_0 = 45;
var_1 = 90;
level.spitter_ammo_active = 0;
level endon( "game_ended" );
var_2 = gettime() + var_0 * 1000;
var_3 = gettime() + var_1 * 1000;
for (;;)
{
level waittill( "alien_killed", var_4 );
var_5 = gettime();
var_6 = 0;
if ( var_5 > var_2 && level.spitter_ammo_active < 4 )
{
if ( gettime() < var_3 )
{
if ( randomintrange( 0, 100 ) > 92 )
var_6 = 1;
}
else
var_6 = 1;
}
if ( var_6 && isdefined( var_4 ) )
{
var_2 = gettime() + var_0 * 1000;
var_3 = gettime() + var_1 * 1000;
level thread spitter_ammo_drop( var_4 );
}
wait 0.05;
}
}
spitter_ammo_drop( var_0 )
{
var_1 = getgroundposition( var_0 + ( 0, 0, 10 ), 16 );
var_2 = spawn( "script_model", var_1 );
var_2 setmodel( "alien_spider_egg_ammo" );
wait 1;
playfxontag( level._effect["spitter_ammo"], var_2, "j_egg_center" );
var_2 thread spitter_ammo_think();
var_2 thread spitter_ammo_rotate();
level.spitter_ammo_active++;
}
spitter_ammo_think()
{
level endon( "game_ended" );
self endon( "death" );
var_0 = 30;
self makeusable();
self sethintstring( &"MP_ALIEN_DESCENT_SPITTER_AMMO_PICKUP" );
thread spitter_ammo_delete( var_0 );
for (;;)
{
self waittill( "trigger", var_1 );
var_2 = var_1 get_venom_weapon();
if ( isdefined( var_2 ) )
{
var_3 = var_1 getweaponammoclip( var_2 );
var_4 = var_1 getweaponammostock( var_2 );
if ( var_3 + var_4 >= weaponmaxammo( var_2 ) + weaponclipsize( var_2 ) )
{
var_1 maps\mp\_utility::setlowermessage( "ammo_taken", &"ALIEN_COLLECTIBLES_AMMO_MAX", 3 );
continue;
}
var_5 = 2;
if ( var_1 maps\mp\alien\_prestige::prestige_getminammo() != 1 )
var_5 = 1;
var_1 setweaponammoclip( var_2, var_3 + var_5 );
var_1 setweaponammostock( var_2, var_4 + var_5 );
var_1 playsound( "extinction_item_pickup" );
playfx( level._effect["alien_teleport"], self.origin );
level.spitter_ammo_active--;
self delete();
return;
}
}
}
get_venom_weapon()
{
if ( self hasweapon( "iw6_aliendlc11_mp" ) )
return "iw6_aliendlc11_mp";
else if ( self hasweapon( "iw6_aliendlc11li_mp" ) )
return "iw6_aliendlc11li_mp";
else if ( self hasweapon( "iw6_aliendlc11fi_mp" ) )
return "iw6_aliendlc11fi_mp";
else if ( self hasweapon( "iw6_aliendlc11sp_mp" ) )
return "iw6_aliendlc11sp_mp";
return undefined;
}
spitter_ammo_rotate()
{
self endon( "death" );
for (;;)
{
self rotateyaw( 360, 5 );
wait 5;
}
}
spitter_ammo_delete( var_0 )
{
self endon( "death" );
wait( var_0 );
level.spitter_ammo_active--;
self delete();
}
show_specialweapon_hint_repeat()
{
self endon( "disconnect" );
wait 1;
self iprintlnbold( &"MP_ALIEN_DESCENT_VENOM_HINT" );
}
is_venom_weapon( var_0 )
{
switch ( var_0 )
{
case "iw6_aliendlc11fi_mp":
case "iw6_aliendlc11li_mp":
case "iw6_aliendlc11_mp":
return 1;
}
return 0;
}
is_venom_grenade( var_0 )
{
switch ( var_0 )
{
case "iw6_aliendlc33_mp":
case "iw6_aliendlc32_mp":
case "iw6_aliendlc31_mp":
return 1;
}
return 0;
}

1721
maps/mp/alien/_drill.gsc Normal file

File diff suppressed because it is too large Load Diff

27
maps/mp/alien/_ffotd.gsc Normal file
View File

@ -0,0 +1,27 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
}
onstartgametype()
{
}
onplayerconnect()
{
}
onspawnplayer()
{
}
onspawnalien()
{
}

View File

@ -0,0 +1,716 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_gamescore()
{
register_scoring_mode();
}
init_eog_score_components( var_0 )
{
level.eog_score_components = [];
foreach ( var_2 in var_0 )
{
switch ( var_2 )
{
case "hive":
register_eog_score_component( "hive", 8 );
break;
case "escape":
register_eog_score_component( "escape", 9 );
break;
case "relics":
register_eog_score_component( "relics", 5 );
break;
default:
}
}
}
init_encounter_score_components( var_0 )
{
level.encounter_score_components = [];
foreach ( var_2 in var_0 )
{
switch ( var_2 )
{
case "challenge":
init_challenge_score_component();
break;
case "drill":
init_drill_score_component();
break;
case "team":
init_teamwork_score_component();
break;
case "team_blocker":
init_blocker_hive_teamwork_score_component();
break;
case "personal":
init_personal_score_component();
break;
case "personal_blocker":
init_blocker_hive_personal_score_component();
break;
case "escape":
init_escape_score_component();
break;
default:
}
}
}
init_player_score()
{
if ( is_scoring_disabled() )
return;
self.encounter_performance = [];
self.end_game_score = [];
component_specific_init( self );
reset_player_encounter_performance( self );
reset_end_game_score();
}
reset_encounter_performance()
{
foreach ( var_2, var_1 in level.encounter_score_components )
{
if ( isdefined( var_1.reset_team_performance_func ) )
[[ var_1.reset_team_performance_func ]]( var_1 );
}
reset_players_encounter_performance_and_lua();
}
reset_players_encounter_performance_and_lua()
{
foreach ( var_1 in level.players )
{
reset_player_encounter_performance( var_1 );
maps\mp\alien\_hud::reset_player_encounter_lua_omnvars( var_1 );
}
}
component_specific_init( var_0 )
{
foreach ( var_3, var_2 in level.encounter_score_components )
{
if ( isdefined( var_2.player_init_func ) )
[[ var_2.player_init_func ]]( var_0 );
}
}
reset_player_encounter_performance( var_0 )
{
foreach ( var_3, var_2 in level.encounter_score_components )
{
if ( isdefined( var_2.reset_player_performance_func ) )
[[ var_2.reset_player_performance_func ]]( var_0 );
}
}
reset_end_game_score()
{
foreach ( var_2, var_1 in level.eog_score_components )
self.end_game_score[var_2] = 0;
}
calculate_total_end_game_score( var_0 )
{
var_1 = 1;
var_2 = 0;
foreach ( var_6, var_4 in level.eog_score_components )
{
var_5 = var_0.end_game_score[var_6];
maps\mp\alien\_hud::set_lua_eog_score_row( var_0, var_1, var_4.lua_string_index, var_5 );
var_1++;
var_2 = var_2 + var_5;
}
maps\mp\alien\_hud::set_lua_eog_score_row( var_0, var_1, 10, var_2 );
}
calculate_players_total_end_game_score()
{
if ( is_scoring_disabled() )
return;
if ( common_scripts\utility::flag_exist( "drill_drilling" ) && common_scripts\utility::flag( "drill_drilling" ) )
calculate_encounter_scores( level.players, get_partial_hive_score_component_list() );
foreach ( var_1 in level.players )
calculate_total_end_game_score( var_1 );
}
get_partial_hive_score_component_list()
{
if ( isdefined( level.partial_hive_score_component_list_func ) )
return [[ level.partial_hive_score_component_list_func ]]();
return [ "challenge", "team" ];
}
update_players_encounter_performance( var_0, var_1, var_2 )
{
foreach ( var_4 in level.players )
var_4 update_personal_encounter_performance( var_0, var_1, var_2 );
}
calculate_and_show_encounter_scores( var_0, var_1 )
{
calculate_encounter_scores( var_0, var_1 );
maps\mp\alien\_hud::show_encounter_scores();
}
calculate_encounter_scores( var_0, var_1 )
{
foreach ( var_3 in var_0 )
calculate_player_encounter_scores( var_3, var_1 );
}
calculate_player_encounter_scores( var_0, var_1 )
{
var_2 = 1;
var_3 = 0;
foreach ( var_5 in var_1 )
{
var_6 = level.encounter_score_components[var_5];
var_7 = [[ var_6.calculate_func ]]( var_0, var_6 );
var_7 = var_7 * level.cycle_score_scalar;
var_7 = int( var_7 );
var_0.end_game_score[var_6.end_game_score_component_ref] = var_0.end_game_score[var_6.end_game_score_component_ref] + var_7;
maps\mp\alien\_hud::set_lua_encounter_score_row( var_0, var_2, var_6.lua_string_index, var_7 );
var_3 = var_3 + var_7;
var_2++;
}
var_9 = var_0 maps\mp\alien\_prestige::get_num_nerf_selected();
var_10 = int( var_3 * var_9 * 0.2 );
var_0.end_game_score["relics"] = var_0.end_game_score["relics"] + var_10;
maps\mp\alien\_hud::set_lua_encounter_score_row( var_0, var_2, 5, var_10 );
var_2++;
var_3 = var_3 + var_10;
var_0 maps\mp\alien\_persistence::eog_player_update_stat( "score", var_3 );
maps\mp\alien\_hud::set_lua_encounter_score_row( var_0, var_2, 6, var_3 );
var_2++;
var_11 = var_0 maps\mp\alien\_perk_utility::perk_getcurrencyscaleperhive();
var_12 = var_0 maps\mp\alien\_prestige::prestige_getmoneyearnedscalar();
var_13 = int( var_3 * var_11 * var_12 * 0.1 / level.cycle_score_scalar );
var_13 = round_up_to_nearest( var_13, 10 );
maps\mp\alien\_hud::set_lua_encounter_score_row( var_0, var_2, 7, var_13 );
var_0.encounter_score_earned = var_3;
var_0.encounter_cash_earned = var_13;
}
init_challenge_score_component()
{
register_encounter_score_component( "challenge", ::init_challenge_score, undefined, ::reset_player_challenge_performance, ::calculate_challenge_score, 4, "hive" );
}
init_challenge_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
var_0.max_score = 1500;
else
var_0.max_score = 1000;
return var_0;
}
reset_player_challenge_performance( var_0 )
{
var_0.encounter_performance["challenge_complete"] = 0;
}
calculate_challenge_score( var_0, var_1 )
{
return int( var_0.encounter_performance["challenge_complete"] * var_1.max_score );
}
get_challenge_score_component_name()
{
return common_scripts\utility::ter_op( isdefined( level.challenge_score_component_name ), level.challenge_score_component_name, "challenge" );
}
set_challenge_score_component_name( var_0 )
{
level.challenge_score_component_name = var_0;
}
init_drill_score_component()
{
register_encounter_score_component( "drill", ::init_drill_score, ::reset_team_drill_performance, undefined, ::calculate_drill_protection_score, 1, "hive" );
}
init_drill_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
{
var_0.max_score_damage_damage = 4500;
var_0.max_drill_damage_limit = 1200;
}
else
{
var_0.max_score_damage_damage = 3500;
var_0.max_drill_damage_limit = 750;
}
return var_0;
}
reset_team_drill_performance( var_0 )
{
var_0.team_encounter_performance["drill_damage_taken"] = 0;
return var_0;
}
calculate_drill_protection_score( var_0, var_1 )
{
var_2 = get_team_encounter_performance( var_1, "drill_damage_taken" ) / var_1.max_drill_damage_limit;
var_3 = max( 0, 1 - var_2 );
var_4 = var_1.max_score_damage_damage;
var_5 = var_4 * var_3;
return int( var_5 );
}
get_drill_score_component_name()
{
return common_scripts\utility::ter_op( isdefined( level.drill_score_component_name ), level.drill_score_component_name, "drill" );
}
set_drill_score_component_name( var_0 )
{
level.drill_score_component_name = var_0;
}
init_teamwork_score_component()
{
register_encounter_score_component( "team", ::init_teamwork_score, ::reset_team_score_performance, ::reset_player_teamwork_score_performance, ::calculate_teamwork_score, 2, "hive" );
}
init_teamwork_score( var_0 )
{
var_0.max_score_deploy = 1000;
var_0.max_score_revive = 1000;
var_0.max_score_damage = 1000;
reset_team_score_performance( var_0 );
return var_0;
}
reset_team_score_performance( var_0 )
{
var_0.team_encounter_performance["damage_done_on_alien"] = 0;
var_0.team_encounter_performance["num_players_enter_laststand"] = 0;
var_0.team_encounter_performance["num_players_bleed_out"] = 0;
return var_0;
}
reset_player_teamwork_score_performance( var_0 )
{
var_0.encounter_performance["damage_done_on_alien"] = 0;
var_0.encounter_performance["team_support_deploy"] = 0;
}
calculate_teamwork_score( var_0, var_1 )
{
var_2 = var_1.max_score_deploy;
var_3 = min( var_2, get_player_encounter_performance( var_0, "team_support_deploy" ) * 100 );
if ( get_team_encounter_performance( var_1, "num_players_bleed_out" ) )
var_4 = 0;
else
{
var_5 = var_1.max_score_revive;
var_6 = get_team_encounter_performance( var_1, "num_players_enter_laststand" ) * 200;
var_4 = max( 0, var_5 - var_6 );
}
var_7 = get_team_encounter_performance( var_1, "damage_done_on_alien" );
if ( var_7 == 0 )
var_7 = 1;
var_8 = get_player_encounter_performance( var_0, "damage_done_on_alien" ) / var_7;
var_9 = var_1.max_score_damage;
var_10 = var_9 * level.players.size;
var_11 = min( var_9, var_8 * var_10 );
return int( var_3 + var_4 + var_11 );
}
get_team_score_component_name()
{
return common_scripts\utility::ter_op( isdefined( level.team_score_component_name ), level.team_score_component_name, "team" );
}
set_team_score_component_name( var_0 )
{
level.team_score_component_name = var_0;
}
init_blocker_hive_teamwork_score_component()
{
register_encounter_score_component( "team_blocker", ::init_blocker_teamwork_score, ::reset_team_score_performance, ::reset_player_teamwork_score_performance, ::calculate_teamwork_score, 2, "hive" );
}
init_blocker_teamwork_score( var_0 )
{
var_0.max_score_deploy = 2000;
var_0.max_score_revive = 1000;
var_0.max_score_damage = 2500;
reset_team_score_performance( var_0 );
return var_0;
}
init_personal_score_component()
{
register_encounter_score_component( "personal", ::init_personal_score, undefined, ::reset_player_personal_score_performance, ::calculate_personal_skill_score, 3, "hive" );
}
init_personal_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
{
var_0.max_score_damage_taken = 2500;
var_0.max_score_accuracy = 1500;
}
else
{
var_0.max_score_damage_taken = 1500;
var_0.max_score_accuracy = 1000;
}
return var_0;
}
reset_player_personal_score_performance( var_0 )
{
var_0.encounter_performance["damage_taken"] = 0;
var_0.encounter_performance["shots_hit"] = 0;
var_0.encounter_performance["shots_fired"] = 0;
}
calculate_personal_skill_score( var_0, var_1 )
{
var_2 = get_player_encounter_performance( var_0, "damage_taken" ) / 500;
var_3 = max( 0, 1 - var_2 );
var_4 = var_1.max_score_damage_taken;
var_5 = var_4 * var_3;
if ( get_player_encounter_performance( var_0, "shots_fired" ) == 0 )
var_6 = 1.0;
else
var_6 = get_player_encounter_performance( var_0, "shots_hit" ) / get_player_encounter_performance( var_0, "shots_fired" );
var_6 = min( 1.0, var_6 );
var_7 = var_1.max_score_accuracy;
var_8 = var_7 * var_6;
return int( var_5 + var_8 );
}
get_personal_score_component_name()
{
return common_scripts\utility::ter_op( isdefined( level.personal_score_component_name ), level.personal_score_component_name, "personal" );
}
set_personal_score_component_name( var_0 )
{
level.personal_score_component_name = var_0;
}
init_blocker_hive_personal_score_component()
{
register_encounter_score_component( "personal_blocker", ::init_blocker_personal_score, undefined, ::reset_player_personal_score_performance, ::calculate_personal_skill_score, 3, "hive" );
}
init_blocker_personal_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
{
var_0.max_score_damage_taken = 5500;
var_0.max_score_accuracy = 4500;
}
else
{
var_0.max_score_damage_taken = 2500;
var_0.max_score_accuracy = 2000;
}
return var_0;
}
init_escape_score_component()
{
register_encounter_score_component( "escape", ::init_escape_score, undefined, undefined, ::calculate_escape_score, 9, "escape" );
}
init_escape_score( var_0 )
{
var_0.team_encounter_performance["time_remain_ms"] = 0;
var_0.team_encounter_performance["escape_player_ratio"] = 0;
return var_0;
}
calculate_escape_score( var_0, var_1 )
{
var_2 = get_team_encounter_performance( var_1, "time_remain_ms" ) / 240000;
var_3 = 1 + ( var_0 maps\mp\alien\_prestige::get_num_nerf_selected() + 1 ) * 0.2;
var_4 = int( 15000 + 15000 * var_2 * get_team_encounter_performance( var_1, "escape_player_ratio" ) * var_3 );
return var_4;
}
process_end_game_score_escaped( var_0, var_1 )
{
var_2 = var_1.size / level.players.size;
update_team_encounter_performance( "escape", "time_remain_ms", var_0 );
update_team_encounter_performance( "escape", "escape_player_ratio", var_2 );
calculate_encounter_scores( var_1, [ "escape" ] );
}
update_personal_encounter_performance( var_0, var_1, var_2 )
{
if ( !has_encounter_score_component( var_0 ) )
return;
if ( !isplayer( self ) )
return;
self.encounter_performance = update_encounter_performance_internal( self.encounter_performance, var_1, var_2 );
}
update_team_encounter_performance( var_0, var_1, var_2 )
{
if ( !has_encounter_score_component( var_0 ) )
return;
if ( !isdefined( var_2 ) )
var_2 = 1;
level.encounter_score_components[var_0].team_encounter_performance[var_1] = level.encounter_score_components[var_0].team_encounter_performance[var_1] + var_2;
}
update_encounter_performance_internal( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
var_2 = 1;
var_0[var_1] = var_0[var_1] + var_2;
return var_0;
}
register_scoring_mode()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
setomnvar( "ui_alien_is_solo", 1 );
else
setomnvar( "ui_alien_is_solo", 0 );
}
get_team_encounter_performance( var_0, var_1 )
{
return var_0.team_encounter_performance[var_1];
}
get_player_encounter_performance( var_0, var_1 )
{
return var_0.encounter_performance[var_1];
}
has_encounter_score_component( var_0 )
{
return has_score_component_internal( level.encounter_score_components, var_0 );
}
has_eog_score_component( var_0 )
{
return has_score_component_internal( level.eog_score_components, var_0 );
}
has_score_component_internal( var_0, var_1 )
{
if ( is_scoring_disabled() )
return 0;
return isdefined( var_0[var_1] );
}
register_eog_score_component( var_0, var_1 )
{
var_2 = spawnstruct();
var_2.lua_string_index = var_1;
level.eog_score_components[var_0] = var_2;
}
register_encounter_score_component( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
{
var_8 = spawnstruct();
var_8 = [[ var_1 ]]( var_8 );
var_8.reset_team_performance_func = var_2;
var_8.reset_player_performance_func = var_3;
var_8.calculate_func = var_4;
var_8.lua_string_index = var_5;
var_8.end_game_score_component_ref = var_6;
if ( isdefined( var_7 ) )
var_8.player_init_func = var_7;
level.encounter_score_components[var_0] = var_8;
}
update_performance_alien_damage( var_0, var_1, var_2 )
{
if ( !isdefined( var_0 ) )
return;
if ( isdefined( var_0.classname ) && var_0.classname == "script_vehicle" )
return;
if ( var_2 == "MOD_TRIGGER_HURT" )
return;
update_team_encounter_performance( get_team_score_component_name(), "damage_done_on_alien", var_1 );
var_3 = get_personal_score_component_name();
if ( isplayer( var_0 ) )
var_0 update_personal_encounter_performance( var_3, "damage_done_on_alien", var_1 );
else if ( isdefined( var_0.owner ) )
var_0.owner update_personal_encounter_performance( var_3, "damage_done_on_alien", var_1 );
}
give_attacker_kill_rewards( var_0, var_1 )
{
if ( self.agentteam == "allies" )
return;
if ( maps\mp\alien\_utility::get_alien_type() == "elite" || maps\mp\alien\_utility::get_alien_type() == "mammoth" )
{
var_2 = get_reward_point_for_kill();
foreach ( var_4 in level.players )
givekillreward( var_4, var_2, "large" );
return;
}
if ( isdefined( self.attacker_damage ) )
{
var_6 = 0.1;
var_7 = self.max_health * var_6;
var_8 = getassistbonusamount();
foreach ( var_10 in self.attacker_damage )
{
if ( var_10.player == var_0 || isdefined( var_0.owner ) && var_10.player == var_0.owner )
continue;
if ( var_10.damage >= var_7 )
{
if ( isdefined( var_10.player ) && var_10.player != var_0 )
{
var_10.player maps\mp\alien\_persistence::eog_player_update_stat( "assists", 1 );
givekillreward( var_10.player, var_8 );
}
}
}
}
if ( !isdefined( var_0 ) )
return;
if ( !isplayer( var_0 ) && ( !isdefined( var_0.owner ) || !isplayer( var_0.owner ) ) )
return;
var_12 = 0;
if ( isdefined( var_0.owner ) )
{
var_0 = var_0.owner;
var_12 = 1;
}
var_2 = get_reward_point_for_kill();
if ( isdefined( var_1 ) && var_1 == "soft" && !var_12 )
var_2 = int( var_2 * 1.5 );
givekillreward( var_0, var_2, "large", var_1 );
}
givekillreward( var_0, var_1, var_2, var_3 )
{
var_4 = var_1 * level.cycle_reward_scalar;
var_0 maps\mp\alien\_persistence::give_player_currency( var_4, var_2, var_3 );
if ( isdefined( level.alien_xp ) )
var_0 maps\mp\alien\_persistence::give_player_xp( int( var_4 ) );
if ( common_scripts\utility::flag_exist( "cortex_started" ) && common_scripts\utility::flag( "cortex_started" ) )
{
if ( isdefined( level.add_cortex_charge_func ) )
[[ level.add_cortex_charge_func ]]( var_1 );
}
}
giveassistbonus( var_0, var_1 )
{
if ( !isdefined( var_0 ) )
return;
if ( !isplayer( var_0 ) && ( !isdefined( var_0.owner ) || !isplayer( var_0.owner ) ) )
return;
if ( isdefined( var_0.owner ) )
var_0 = var_0.owner;
if ( !isdefined( self.attacker_damage ) )
self.attacker_damage = [];
foreach ( var_3 in self.attacker_damage )
{
if ( var_3.player == var_0 )
{
var_3.damage = var_3.damage + var_1;
return;
}
}
var_5 = spawnstruct();
var_5.player = var_0;
var_5.damage = var_1;
self.attacker_damage[self.attacker_damage.size] = var_5;
}
getassistbonusamount()
{
return level.alien_types[maps\mp\alien\_utility::get_alien_type()].attributes["reward"] * 0.5;
}
get_reward_point_for_kill()
{
return level.alien_types[maps\mp\alien\_utility::get_alien_type()].attributes["reward"];
}
round_up_to_nearest( var_0, var_1 )
{
var_2 = var_0 / var_1;
var_2 = ceil( var_2 );
return int( var_2 * var_1 );
}
is_scoring_disabled()
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return 1;
return 0;
}
calculate_under_max_score( var_0, var_1, var_2 )
{
var_3 = clamp( var_1 - var_0, 0, var_1 );
return int( var_3 / var_1 * var_2 );
}

View File

@ -0,0 +1,163 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_armory_eog_score_components( var_0 )
{
foreach ( var_2 in var_0 )
{
switch ( var_2 )
{
case "spider":
maps\mp\alien\_gamescore::register_eog_score_component( "spider", 12 );
break;
case "relics":
maps\mp\alien\_gamescore::register_eog_score_component( "relics", 5 );
break;
default:
}
}
}
init_armory_encounter_score_components( var_0 )
{
foreach ( var_2 in var_0 )
{
switch ( var_2 )
{
case "first_spider":
init_first_spider_score_component();
break;
case "final_spider":
init_final_spider_score_component();
break;
case "spider_challenge":
init_spider_challenge_score_component();
break;
case "spider_team":
init_spider_teamwork_score_component();
break;
case "spider_personal":
init_spider_personal_score_component();
break;
default:
}
}
}
init_first_spider_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "first_spider", ::init_first_spider_score, ::reset_team_spider_performance, undefined, ::calculate_spider_score, 12, "spider" );
}
init_first_spider_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
var_0.max_score_spider = 4500;
else
var_0.max_score_spider = 3500;
var_0.battle_time_limit = 600000;
return var_0;
}
reset_team_spider_performance( var_0 )
{
var_0.team_encounter_performance["spider_battle_time"] = 0;
return var_0;
}
calculate_spider_score( var_0, var_1 )
{
var_2 = maps\mp\alien\_gamescore::get_team_encounter_performance( var_1, "spider_battle_time" );
var_3 = max( 0, var_1.battle_time_limit - var_2 );
var_4 = var_1.max_score_spider * ( var_3 / var_1.battle_time_limit );
return int( var_4 );
}
calculate_and_show_first_spider_score()
{
var_0 = get_first_spider_score_component_name_list();
maps\mp\alien\_gamescore::calculate_and_show_encounter_scores( level.players, var_0 );
foreach ( var_2 in level.players )
var_2 thread maps\mp\alien\_hive::wait_to_give_rewards();
}
get_first_spider_score_component_name_list()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return [ "first_spider", "spider_personal", "spider_challenge" ];
else
return [ "first_spider", "spider_team", "spider_personal", "spider_challenge" ];
}
init_final_spider_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "final_spider", ::init_final_spider_score, ::reset_team_spider_performance, undefined, ::calculate_spider_score, 12, "spider" );
}
init_final_spider_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
var_0.max_score_spider = 4500;
else
var_0.max_score_spider = 3500;
var_0.battle_time_limit = 900000;
return var_0;
}
calculate_final_spider_score()
{
var_0 = get_final_spider_score_component_name_list();
maps\mp\alien\_gamescore::calculate_encounter_scores( level.players, var_0 );
}
get_final_spider_score_component_name_list()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return [ "first_spider", "spider_personal" ];
else
return [ "first_spider", "spider_team", "spider_personal" ];
}
init_spider_challenge_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "spider_challenge", ::init_spider_challenge_score, undefined, maps\mp\alien\_gamescore::reset_player_challenge_performance, maps\mp\alien\_gamescore::calculate_challenge_score, 4, "spider" );
}
init_spider_challenge_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
var_0.max_score = 1500;
else
var_0.max_score = 1000;
return var_0;
}
init_spider_teamwork_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "spider_team", maps\mp\alien\_gamescore::init_teamwork_score, maps\mp\alien\_gamescore::reset_team_score_performance, maps\mp\alien\_gamescore::reset_player_teamwork_score_performance, maps\mp\alien\_gamescore::calculate_teamwork_score, 2, "spider" );
}
init_spider_personal_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "spider_personal", ::init_spider_personal_score, undefined, maps\mp\alien\_gamescore::reset_player_personal_score_performance, maps\mp\alien\_gamescore::calculate_personal_skill_score, 3, "spider" );
}
init_spider_personal_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
{
var_0.max_score_damage_taken = 2500;
var_0.max_score_accuracy = 1500;
}
else
{
var_0.max_score_damage_taken = 1500;
var_0.max_score_accuracy = 1000;
}
return var_0;
}

View File

@ -0,0 +1,211 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_beacon_eog_score_components( var_0 )
{
foreach ( var_2 in var_0 )
{
switch ( var_2 )
{
case "kraken":
maps\mp\alien\_gamescore::register_eog_score_component( "kraken", 17 );
break;
case "item_crafting":
maps\mp\alien\_gamescore::register_eog_score_component( "item_crafting", 14 );
break;
case "side_area":
maps\mp\alien\_gamescore::register_eog_score_component( "side_area", 15 );
break;
case "relics":
maps\mp\alien\_gamescore::register_eog_score_component( "relics", 5 );
break;
default:
}
}
}
init_beacon_encounter_score_components( var_0 )
{
foreach ( var_2 in var_0 )
{
switch ( var_2 )
{
case "kraken":
init_kraken_score_component();
break;
case "kraken_personal":
init_kraken_personal_score_component();
break;
case "kraken_team":
init_kraken_team_score_component();
break;
case "tentacle_bonus":
init_tentacle_score_component();
break;
case "item_crafting":
init_item_crafting_score_component();
break;
case "side_area":
init_side_area_score_component();
break;
case "gas":
init_gas_protection_score_component();
break;
case "progression_door":
init_progression_door_score_component();
break;
default:
}
}
}
init_kraken_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "kraken", ::init_kraken_score, maps\mp\alien\_globallogic::blank, undefined, ::calculate_kraken_score_component, 17, "kraken" );
}
init_kraken_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
var_0.max_score_kraken = 6000;
else
var_0.max_score_kraken = 4500;
var_0.team_encounter_performance["kraken_battle_time"] = 0;
return var_0;
}
calculate_kraken_score_component( var_0, var_1 )
{
var_2 = maps\mp\alien\_gamescore::get_team_encounter_performance( var_1, "kraken_battle_time" );
var_3 = max( 0, 750000 - var_2 );
var_4 = var_1.max_score_kraken * ( var_3 / 750000 );
return int( var_4 );
}
init_kraken_personal_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "kraken_personal", ::init_kraken_personal_score, undefined, maps\mp\alien\_gamescore::reset_player_personal_score_performance, maps\mp\alien\_gamescore::calculate_personal_skill_score, 17, "kraken" );
}
init_kraken_personal_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
{
var_0.max_score_damage_taken = 2500;
var_0.max_score_accuracy = 1500;
}
else
{
var_0.max_score_damage_taken = 1500;
var_0.max_score_accuracy = 1000;
}
return var_0;
}
init_kraken_team_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "kraken_team", maps\mp\alien\_gamescore::init_teamwork_score, maps\mp\alien\_gamescore::reset_team_score_performance, maps\mp\alien\_gamescore::reset_player_teamwork_score_performance, maps\mp\alien\_gamescore::calculate_teamwork_score, 17, "kraken" );
}
calculate_kraken_score( var_0 )
{
maps\mp\alien\_gamescore::update_team_encounter_performance( "kraken", "kraken_battle_time", var_0 );
var_1 = get_kraken_score_component_name_list();
maps\mp\alien\_gamescore::calculate_encounter_scores( level.players, var_1 );
}
get_kraken_score_component_name_list()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return [ "kraken", "kraken_personal" ];
else
return [ "kraken", "kraken_team", "kraken_personal" ];
}
init_tentacle_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "tentacle_bonus", ::init_tentacle_score, maps\mp\alien\_globallogic::blank, undefined, ::calculate_tentacle_score, 18, "hive" );
}
init_tentacle_score( var_0 )
{
var_0.team_encounter_performance["tentacle_start_HP"] = 0;
return var_0;
}
calculate_tentacle_score( var_0, var_1 )
{
var_2 = maps\mp\alien\_gamescore::get_team_encounter_performance( var_1, "tentacle_start_HP" );
var_3 = get_tentacle_end_hp();
var_4 = min( var_2, var_2 - var_3 );
return int( 2500 * var_4 / var_2 );
}
get_tentacle_end_hp()
{
if ( !isdefined( level.miniboss.hp ) )
return 0;
return max( 0, level.miniboss.hp );
}
init_item_crafting_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "item_crafting", ::blank_score_component_init, maps\mp\alien\_globallogic::blank, undefined, ::calculate_item_crafting_score, 14, "item_crafting" );
}
calculate_item_crafting_score( var_0, var_1 )
{
var_2 = int( 500 / level.cycle_score_scalar );
var_3 = get_total_item_crafting_score( var_0, var_1 );
return min( var_2, 5000 - var_3 );
}
get_total_item_crafting_score( var_0, var_1 )
{
return var_0.end_game_score[var_1.end_game_score_component_ref];
}
init_side_area_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "side_area", ::blank_score_component_init, maps\mp\alien\_globallogic::blank, undefined, ::calculate_side_area_score, 15, "side_area" );
}
calculate_side_area_score( var_0, var_1 )
{
return 2000;
}
init_progression_door_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "progression_door", ::blank_score_component_init, maps\mp\alien\_globallogic::blank, undefined, ::calculate_progression_door_score, 15, "hive" );
}
calculate_progression_door_score( var_0, var_1 )
{
return 2000;
}
init_gas_protection_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "gas", ::blank_score_component_init, ::reset_team_gas_protection_score, undefined, ::calculate_gas_protection_score, 16, "hive" );
}
reset_team_gas_protection_score( var_0 )
{
var_0.team_encounter_performance["num_valve_destroyed"] = 0;
}
calculate_gas_protection_score( var_0, var_1 )
{
var_2 = maps\mp\alien\_gamescore::get_team_encounter_performance( var_1, "num_valve_destroyed" );
var_3 = max( 0, 4 - var_2 );
return int( var_3 * 500 );
}
blank_score_component_init( var_0 )
{
return var_0;
}

View File

@ -0,0 +1,223 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_descent_eog_score_components( var_0 )
{
foreach ( var_2 in var_0 )
{
switch ( var_2 )
{
case "hive":
maps\mp\alien\_gamescore::register_eog_score_component( "hive", 19 );
break;
case "gryphon":
maps\mp\alien\_gamescore::register_eog_score_component( "gryphon", 20 );
break;
case "ark":
maps\mp\alien\_gamescore::register_eog_score_component( "ark", 22 );
break;
case "escape":
maps\mp\alien\_gamescore::register_eog_score_component( "escape", 9 );
break;
case "relics":
maps\mp\alien\_gamescore::register_eog_score_component( "relics", 5 );
break;
default:
}
}
}
init_encounter_score_components( var_0 )
{
foreach ( var_2 in var_0 )
{
switch ( var_2 )
{
case "gryphon":
init_gryphon_score_component();
break;
case "gryphon_team":
init_gryphon_team_score_component();
break;
case "gryphon_personal":
init_gryphon_personal_score_component();
break;
case "cortex":
init_cortex_score_component();
break;
case "cortex_team":
init_cortex_team_component();
break;
case "cortex_personal":
init_cortex_personal_component();
break;
case "escape":
init_escape_component();
break;
case "escape_team":
init_escape_team_component();
break;
case "escape_personal":
init_escape_personal_component();
break;
default:
}
}
}
init_gryphon_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "gryphon", ::reset_gryphon_score, ::reset_gryphon_score, undefined, ::calculate_gryphon_score, 21, "gryphon" );
}
reset_gryphon_score( var_0 )
{
var_0.team_encounter_performance["damage_on_gryphon"] = 0;
var_0.team_encounter_performance["gryphon_encounter_duration"] = 0;
return var_0;
}
calculate_gryphon_score( var_0, var_1 )
{
var_2 = maps\mp\alien\_gamescore::get_team_encounter_performance( var_1, "damage_on_gryphon" );
var_3 = maps\mp\alien\_gamescore::calculate_under_max_score( var_2, 150, 3000 );
var_4 = maps\mp\alien\_gamescore::get_team_encounter_performance( var_1, "gryphon_encounter_duration" );
var_5 = maps\mp\alien\_gamescore::calculate_under_max_score( var_4, 300000, 3000 );
return var_5 + var_3;
}
init_gryphon_team_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "gryphon_team", maps\mp\alien\_gamescore::init_teamwork_score, maps\mp\alien\_gamescore::reset_team_score_performance, maps\mp\alien\_gamescore::reset_player_teamwork_score_performance, maps\mp\alien\_gamescore::calculate_teamwork_score, 2, "gryphon" );
}
init_gryphon_personal_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "gryphon_personal", ::init_gryphon_personal_score, undefined, ::reset_player_gryphon_personal_score_performance, ::calculate_rgyphon_personal_skill_score, 3, "gryphon" );
}
init_gryphon_personal_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
var_0.max_score_damage_taken = 4000;
else
var_0.max_score_damage_taken = 1000;
return var_0;
}
reset_player_gryphon_personal_score_performance( var_0 )
{
var_0.encounter_performance["damage_taken"] = 0;
}
calculate_rgyphon_personal_skill_score( var_0, var_1 )
{
var_2 = maps\mp\alien\_gamescore::get_player_encounter_performance( var_0, "damage_taken" );
return maps\mp\alien\_gamescore::calculate_under_max_score( var_2, 500, var_1.max_score_damage_taken );
}
get_gryphon_score_component_list()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return [ "gryphon", "gryphon_personal" ];
else
return [ "gryphon", "gryphon_team", "gryphon_personal" ];
}
init_cortex_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "cortex", ::inti_cortex_score, ::reset_cortex_score, undefined, ::calculate_cortex_score, 23, "ark" );
}
inti_cortex_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
var_0.max_cortex_score = 6000;
else
var_0.max_cortex_score = 4500;
reset_cortex_score( var_0 );
return var_0;
}
reset_cortex_score( var_0 )
{
var_0.team_encounter_performance["times_cortex_activated"] = 0;
return var_0;
}
calculate_cortex_score( var_0, var_1 )
{
var_2 = maps\mp\alien\_gamescore::get_team_encounter_performance( var_1, "times_cortex_activated" );
return int( clamp( var_2 * 500, 0, var_1.max_cortex_score ) );
}
init_cortex_team_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "cortex_team", maps\mp\alien\_gamescore::init_teamwork_score, maps\mp\alien\_gamescore::reset_team_score_performance, maps\mp\alien\_gamescore::reset_player_teamwork_score_performance, maps\mp\alien\_gamescore::calculate_teamwork_score, 2, "ark" );
}
init_cortex_personal_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "cortex_personal", maps\mp\alien\_gamescore::init_personal_score, undefined, maps\mp\alien\_gamescore::reset_player_personal_score_performance, maps\mp\alien\_gamescore::calculate_personal_skill_score, 3, "ark" );
}
get_ark_score_component_list()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return [ "cortex", "cortex_personal" ];
else
return [ "cortex", "cortex_team", "cortex_personal" ];
}
init_escape_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "escape", ::init_escape_score, ::reset_escape_score, undefined, ::calculate_escape_score, 9, "escape" );
}
init_escape_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
var_0.max_escape_score = 6000;
else
var_0.max_escape_score = 4500;
return var_0;
}
reset_escape_score( var_0 )
{
var_0.team_encounter_performance["escape_blocker_duration"] = 0;
return var_0;
}
calculate_escape_score( var_0, var_1 )
{
var_2 = maps\mp\alien\_gamescore::get_team_encounter_performance( var_1, "escape_blocker_duration" );
return maps\mp\alien\_gamescore::calculate_under_max_score( var_2, var_1.max_escape_score, 120000 );
}
calculate_escape_blocker_score( var_0 )
{
maps\mp\alien\_gamescore::update_team_encounter_performance( "escape", "escape_blocker_duration", var_0 );
maps\mp\alien\_gamescore::calculate_encounter_scores( level.players, get_escape_blocker_score_component_list() );
}
init_escape_team_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "escape_team", maps\mp\alien\_gamescore::init_teamwork_score, maps\mp\alien\_gamescore::reset_team_score_performance, maps\mp\alien\_gamescore::reset_player_teamwork_score_performance, maps\mp\alien\_gamescore::calculate_teamwork_score, 2, "escape" );
}
init_escape_personal_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "escape_personal", maps\mp\alien\_gamescore::init_personal_score, undefined, maps\mp\alien\_gamescore::reset_player_personal_score_performance, maps\mp\alien\_gamescore::calculate_personal_skill_score, 3, "escape" );
}
get_escape_blocker_score_component_list()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return [ "escape", "escape_personal" ];
else
return [ "escape", "escape_team", "escape_personal" ];
}

View File

@ -0,0 +1,237 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_last_eog_score_components( var_0 )
{
foreach ( var_2 in var_0 )
{
switch ( var_2 )
{
case "street":
maps\mp\alien\_gamescore::register_eog_score_component( "street", 24 );
break;
case "relics":
maps\mp\alien\_gamescore::register_eog_score_component( "relics", 5 );
break;
case "generator":
maps\mp\alien\_gamescore::register_eog_score_component( "generator", 25 );
break;
case "cortex":
maps\mp\alien\_gamescore::register_eog_score_component( "cortex", 29 );
break;
case "item_crafting":
maps\mp\alien\_gamescore::register_eog_score_component( "item_crafting", 27 );
break;
case "ancestor_bonus":
maps\mp\alien\_gamescore::register_eog_score_component( "ancestor_bonus", 28 );
break;
default:
}
}
}
init_last_encounter_score_components( var_0 )
{
foreach ( var_2 in var_0 )
{
switch ( var_2 )
{
case "street_personal":
init_street_personal_score_component();
break;
case "street_team":
init_street_team_score_component();
break;
case "street_challenge":
init_street_challenge_score_component();
break;
case "generator":
init_generator_score_component();
break;
case "generator_personal":
init_generator_personal_score_component();
break;
case "generator_team":
init_generator_team_score_component();
break;
case "generator_challenge":
init_generator_challenge_score_component();
break;
case "item_crafting":
init_item_crafting_score_component();
break;
case "ancestor_bonus":
init_ancestor_bonus_score_component();
break;
case "cortex":
init_cortex_score_component();
break;
default:
}
}
}
init_street_personal_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "street_personal", ::init_street_personal_score, undefined, maps\mp\alien\_gamescore::reset_player_personal_score_performance, maps\mp\alien\_gamescore::calculate_personal_skill_score, 3, "street" );
}
init_street_personal_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
{
var_0.max_score_damage_taken = 5000;
var_0.max_score_accuracy = 3500;
}
else
{
var_0.max_score_damage_taken = 2200;
var_0.max_score_accuracy = 1700;
}
return var_0;
}
init_street_team_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "street_team", ::init_street_teamwork_score, maps\mp\alien\_gamescore::reset_team_score_performance, maps\mp\alien\_gamescore::reset_player_teamwork_score_performance, maps\mp\alien\_gamescore::calculate_teamwork_score, 2, "street" );
}
init_street_teamwork_score( var_0 )
{
var_0.max_score_deploy = 1700;
var_0.max_score_revive = 1700;
var_0.max_score_damage = 1700;
maps\mp\alien\_gamescore::reset_team_score_performance( var_0 );
return var_0;
}
init_street_challenge_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "street_challenge", maps\mp\alien\_gamescore::init_challenge_score, undefined, maps\mp\alien\_gamescore::reset_player_challenge_performance, maps\mp\alien\_gamescore::calculate_challenge_score, 4, "street" );
}
init_generator_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "generator", maps\mp\alien\_gamescore::init_drill_score, maps\mp\alien\_gamescore::reset_team_drill_performance, undefined, maps\mp\alien\_gamescore::calculate_drill_protection_score, 26, "generator" );
}
init_generator_personal_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "generator_personal", maps\mp\alien\_gamescore::init_personal_score, undefined, maps\mp\alien\_gamescore::reset_player_personal_score_performance, maps\mp\alien\_gamescore::calculate_personal_skill_score, 3, "generator" );
}
init_generator_team_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "generator_team", maps\mp\alien\_gamescore::init_teamwork_score, maps\mp\alien\_gamescore::reset_team_score_performance, maps\mp\alien\_gamescore::reset_player_teamwork_score_performance, maps\mp\alien\_gamescore::calculate_teamwork_score, 2, "generator" );
}
init_generator_challenge_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "generator_challenge", maps\mp\alien\_gamescore::init_challenge_score, undefined, maps\mp\alien\_gamescore::reset_player_challenge_performance, maps\mp\alien\_gamescore::calculate_challenge_score, 4, "generator" );
}
init_item_crafting_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "item_crafting", ::blank_score_component_init, maps\mp\alien\_globallogic::blank, undefined, ::calculate_item_crafting_score, 27, "item_crafting" );
}
calculate_item_crafting_score( var_0, var_1 )
{
var_2 = int( 500 / level.cycle_score_scalar );
var_3 = get_total_item_crafting_score( var_0, var_1 );
return min( var_2, 5000 - var_3 );
}
get_total_item_crafting_score( var_0, var_1 )
{
return var_0.end_game_score[var_1.end_game_score_component_ref];
}
init_ancestor_bonus_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "ancestor_bonus", ::blank_score_component_init, ::reset_team_ancestor_bonus_performance, undefined, ::calculate_ancestor_bonus_score, 28, "ancestor_bonus" );
}
reset_team_ancestor_bonus_performance( var_0 )
{
var_0.team_encounter_performance["num_ancestor_killed"] = 0;
var_0.team_encounter_performance["encounter_start_time"] = gettime();
return var_0;
}
calculate_ancestor_bonus_score( var_0, var_1 )
{
var_2 = gettime() - var_1.team_encounter_performance["encounter_start_time"];
return maps\mp\alien\_gamescore::calculate_under_max_score( var_2, 300000, 10000 );
}
init_cortex_score_component()
{
maps\mp\alien\_gamescore::register_encounter_score_component( "cortex", ::init_cortex_score, ::reset_team_cortex_performance, undefined, ::calculate_cortex_score, 29, "cortex" );
}
init_cortex_score( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
var_0.max_cortex_damage_limit = 1200;
else
var_0.max_cortex_damage_limit = 750;
return var_0;
}
reset_team_cortex_performance( var_0 )
{
var_0.team_encounter_performance["damage_done_on_cortex"] = 0;
var_0.team_encounter_performance["reach_charge_goal"] = 0;
return var_0;
}
calculate_cortex_score( var_0, var_1 )
{
var_2 = maps\mp\alien\_gamescore::get_team_encounter_performance( var_1, "damage_done_on_cortex" );
var_3 = maps\mp\alien\_gamescore::calculate_under_max_score( var_2, var_1.max_cortex_damage_limit, 8000 );
var_4 = maps\mp\alien\_gamescore::get_team_encounter_performance( var_1, "reach_charge_goal" ) * 2000;
return int( var_3 + var_4 );
}
update_cortex_charge_bonus( var_0 )
{
if ( !isdefined( var_0 ) )
return;
var_1 = var_0 * 25;
if ( maps\mp\mp_alien_last_final_battle::get_cortex_charge_percent() >= var_1 )
maps\mp\alien\_gamescore::update_team_encounter_performance( "cortex", "reach_charge_goal" );
}
init_partial_hive_score_component_list_func()
{
level.partial_hive_score_component_list_func = ::last_partial_hive_score_component_list;
}
last_partial_hive_score_component_list()
{
return [ "street_challenge", "street_team" ];
}
update_generator_score_component_name()
{
maps\mp\alien\_gamescore::set_challenge_score_component_name( "generator_challenge" );
maps\mp\alien\_gamescore::set_personal_score_component_name( "generator_personal" );
maps\mp\alien\_gamescore::set_team_score_component_name( "generator_team" );
}
update_street_score_component_name()
{
maps\mp\alien\_gamescore::set_challenge_score_component_name( "street_challenge" );
maps\mp\alien\_gamescore::set_personal_score_component_name( "street_personal" );
maps\mp\alien\_gamescore::set_team_score_component_name( "street_team" );
}
blank_score_component_init( var_0 )
{
return var_0;
}

View File

@ -0,0 +1,175 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.splitscreen = issplitscreen();
maps\mp\_utility::set_console_status();
level.onlinegame = getdvarint( "onlinegame" );
level.rankedmatch = level.onlinegame && !getdvarint( "xblive_privatematch" ) || getdvarint( "force_ranking" );
level.script = tolower( getdvar( "mapname" ) );
level.gametype = tolower( getdvar( "g_gametype" ) );
level.teamnamelist = [ "axis", "allies" ];
level.otherteam["allies"] = "axis";
level.otherteam["axis"] = "allies";
level.multiteambased = 0;
level.teambased = 0;
level.objectivebased = 0;
level.endgameontimelimit = 1;
level.showingfinalkillcam = 0;
level.tispawndelay = getdvarint( "scr_tispawndelay" );
if ( !isdefined( level.tweakablesinitialized ) )
maps\mp\gametypes\_tweakables::init();
level.halftimetype = "halftime";
level.halftimesubcaption = &"MP_SWITCHING_SIDES";
level.laststatustime = 0;
level.waswinning = "none";
level.lastslowprocessframe = 0;
level.placement["allies"] = [];
level.placement["axis"] = [];
level.placement["all"] = [];
level.postroundtime = 5.0;
level.playerslookingforsafespawn = [];
registerdvars();
var_0 = " LB_" + getdvar( "ui_mapname" );
if ( getdvarint( "scr_chaos_mode" ) == 1 )
var_0 = var_0 + "_CHAOS";
if ( getdvarint( "sv_maxclients" ) == 1 )
var_0 = var_0 + "_SOLO";
else
var_0 = var_0 + "_COOP";
var_1 = " LB_" + getdvar( "ui_mapname" ) + "_ESCAPES";
if ( getdvarint( "scr_aliens_hardcore" ) )
var_0 = var_0 + "_HC";
if ( getdvarint( "scr_chaos_mode" ) == 1 )
{
var_2 = "LB_GB_ALIEN_CHAOS";
if ( getdvarint( "sv_maxclients" ) == 1 )
var_2 = var_2 + "_SOLO";
else
var_2 = var_2 + "_COOP";
precacheleaderboards( var_2 + var_0 );
}
else
precacheleaderboards( "LB_GB_ALIEN_HIVES LB_GB_ALIEN_KILLS LB_GB_ALIEN_REVIVES LB_GB_ALIEN_DOWNED LB_GB_ALIEN_XP LB_GB_ALIEN_SCORE LB_GB_ALIEN_CHALLENGES LB_GB_ALIEN_CASHFLOW" + var_0 + var_1 );
level.teamcount["allies"] = 0;
level.teamcount["axis"] = 0;
level.teamcount["spectator"] = 0;
level.alivecount["allies"] = 0;
level.alivecount["axis"] = 0;
level.alivecount["spectator"] = 0;
level.livescount["allies"] = 0;
level.livescount["axis"] = 0;
level.onelefttime = [];
level.hasspawned["allies"] = 0;
level.hasspawned["axis"] = 0;
var_3 = 9;
init_multiteamdata( var_3 );
}
init_multiteamdata( var_0 )
{
for ( var_1 = 0; var_1 < var_0; var_1++ )
{
var_2 = "team_" + var_1;
level.placement[var_2] = [];
level.teamcount[var_2] = 0;
level.alivecount[var_2] = 0;
level.livescount[var_2] = 0;
level.hasspawned[var_2] = 0;
}
}
registerdvars()
{
setomnvar( "ui_bomb_timer", 0 );
if ( getdvar( "r_reflectionProbeGenerate" ) != "1" )
setomnvar( "ui_nuke_end_milliseconds", 0 );
setdvar( "ui_danger_team", "" );
setdvar( "ui_inhostmigration", 0 );
setdvar( "ui_inprematch", 0 );
setdvar( "ui_override_halftime", 0 );
setdvar( "camera_thirdPerson", getdvarint( "scr_thirdPerson" ) );
setdvar( "scr_alien_intel_pillage", 0 );
}
setupcallbacks()
{
level.onxpevent = ::onxpevent;
level.getspawnpoint = ::blank;
level.onspawnplayer = ::blank;
level.onrespawndelay = ::blank;
level.ontimelimit = maps\mp\gametypes\_gamelogic::default_ontimelimit;
level.onhalftime = maps\mp\gametypes\_gamelogic::default_onhalftime;
level.ondeadevent = maps\mp\gametypes\_gamelogic::default_ondeadevent;
level.ononeleftevent = maps\mp\gametypes\_gamelogic::default_ononeleftevent;
level.onprecachegametype = ::blank;
level.onstartgametype = ::blank;
level.onplayerkilled = ::blank;
level.killstreakinit = ::blank;
level.matcheventsinit = ::blank;
level.intelinit = ::blank;
}
blank( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
}
testmenu()
{
self endon( "death" );
self endon( "disconnect" );
for (;;)
{
wait 10.0;
var_0 = spawnstruct();
var_0.titletext = &"MP_CHALLENGE_COMPLETED";
var_0.notifytext = "wheee";
var_0.sound = "mp_challenge_complete";
thread maps\mp\gametypes\_hud_message::notifymessage( var_0 );
}
}
testshock()
{
self endon( "death" );
self endon( "disconnect" );
for (;;)
{
wait 3.0;
var_0 = randomint( 6 );
for ( var_1 = 0; var_1 < var_0; var_1++ )
{
iprintlnbold( var_0 );
self shellshock( "frag_grenade_mp", 0.2 );
wait 0.1;
}
}
}
onxpevent( var_0 )
{
thread maps\mp\gametypes\_rank::giverankxp( var_0 );
}
debugline( var_0, var_1 )
{
for ( var_2 = 0; var_2 < 50; var_2++ )
wait 0.05;
}

885
maps/mp/alien/_hive.gsc Normal file
View File

@ -0,0 +1,885 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_hives()
{
if ( !common_scripts\utility::flag_exist( "hives_cleared" ) )
common_scripts\utility::flag_init( "hives_cleared" );
if ( !common_scripts\utility::flag_exist( "blocker_hive_destroyed" ) )
common_scripts\utility::flag_init( "blocker_hive_destroyed" );
init_hive_locs();
}
regular_hive( var_0 )
{
for (;;)
{
var_1 = select_hives( 0 );
level thread maps\mp\alien\_spawnlogic::encounter_cycle_spawn( "drill_planted", "door_planted" );
foreach ( var_3 in var_1 )
var_3 thread regular_hive_listener( get_hive_score_component_list_func( var_0 ) );
var_5 = level common_scripts\utility::waittill_any_return( "regular_hive_destroyed", "regular_door_destroyed" );
if ( var_5 == "regular_hive_destroyed" )
{
maps\mp\alien\_spawn_director::end_cycle();
level thread maps\mp\alien\_spawnlogic::remaining_alien_management();
return;
}
}
}
regular_hive_listener( var_0 )
{
level endon( "game_ended" );
self notify( "stop_listening" );
self endon( "stop_listening" );
if ( isdefined( level.drill ) && !isdefined( level.drill_carrier ) && !maps\mp\alien\_utility::is_true( level.automatic_drill ) )
level waittill( "drill_pickedup", var_1 );
var_2 = "waypoint_alien_destroy";
var_3 = get_hive_waypoint_dist( self, 1300 );
if ( maps\mp\alien\_utility::is_door() || isdefined( level.hive_icon_override ) && self [[ level.hive_icon_override ]]() )
{
var_3 = 1000;
var_2 = "waypoint_alien_door";
}
thread set_hive_icon( var_2, var_3 );
var_4 = maps\mp\alien\_drill::wait_for_drill_plant();
level.current_hive_name = self.target;
if ( !maps\mp\alien\_utility::is_true( level.automatic_drill ) )
thread maps\mp\alien\_drill::drill_plant_bbprint( var_4 );
if ( level.cycle_count == 1 )
level maps\mp\_utility::delaythread( 1, maps\mp\alien\_music_and_dialog::playvoforwavestart );
if ( maps\mp\alien\_utility::is_door() )
{
level notify( "door_planted" );
level notify( "start_spawn_event", self.target );
if ( maps\mp\alien\_utility::is_true( level.current_cycle_started_by_timeout ) )
level.cycle_count--;
}
if ( !maps\mp\alien\_utility::is_door() )
maps\mp\_utility::delaythread( 2, maps\mp\alien\_challenge::spawn_challenge );
level.drill_carrier = undefined;
thread maps\mp\alien\_drill::drilling( self.origin, var_4 );
disable_other_strongholds();
maps\mp\alien\_gamescore::reset_encounter_performance();
level notify( "force_cycle_start" );
common_scripts\utility::flag_wait( "drill_detonated" );
hive_play_death_animations();
maps\mp\alien\_challenge::end_current_challenge();
maps\mp\alien\_challenge::remove_all_challenge_cases();
level.stronghold_hive_locs = common_scripts\utility::array_remove( level.stronghold_hive_locs, self );
self notify( "hive_dying" );
thread maps\mp\alien\_drill::drill_detonate();
if ( isdefined( self.scene_trig ) )
self.scene_trig notify( "trigger", level.players[0] );
level.current_hive_name = level.current_hive_name + "_post";
if ( maps\mp\alien\_utility::is_door() )
{
give_door_score();
level notify( "regular_door_destroyed" );
}
else
{
level.num_hive_destroyed++;
give_players_rewards( 0, var_0 );
level notify( "regular_hive_destroyed" );
}
self notify( "stop_listening" );
}
blocker_hive_explode_sequence( var_0, var_1 )
{
var_0 delete();
if ( isdefined( level.hive_heli ) )
{
level.hive_heli notify( "new_flight_path" );
level.hive_heli notify( "blocker_hive_destroyed" );
}
common_scripts\utility::flag_set( "blocker_hive_destroyed" );
var_1 hive_play_death_animations();
var_1 delete_removables();
var_1 maps\mp\alien\_drill::remove_spawner();
var_1 maps\mp\alien\_drill::fx_ents_playfx();
var_1 show_dead_hive_model();
var_1 destroy_hive_icon();
var_1 thread blocker_kill_sequence();
var_1 thread maps\mp\alien\_drill::do_radius_damage();
level thread maps\mp\alien\_music_and_dialog::playvoforblockerhive();
level thread maps\mp\alien\_spawnlogic::remaining_alien_management();
level.current_blocker_hive = undefined;
level.blocker_hive_active = undefined;
level.stronghold_hive_locs = common_scripts\utility::array_remove( level.stronghold_hive_locs, var_1 );
level.current_hive_name = level.current_hive_name + "_post";
level.num_hive_destroyed++;
if ( maps\mp\alien\_utility::isplayingsolo() && !issplitscreen() )
maps\mp\alien\_laststand::give_laststand( level.players[0], 1 );
if ( isdefined( var_1.drill_teleport_structs ) && !maps\mp\alien\_utility::is_true( level.automatic_drill ) )
level thread maps\mp\alien\_drill::teleport_drill( var_1.drill_teleport_structs[randomint( var_1.drill_teleport_structs.size )].origin );
if ( isdefined( var_1.scene_trig ) )
var_1.scene_trig notify( "trigger", level.players[0] );
maps\mp\alien\_achievement::update_blocker_hive_achievements( var_1.target );
level maps\mp\alien\_challenge_function::hide_barrier_hive_intel();
common_scripts\utility::flag_clear( "blocker_hive_destroyed" );
var_1 notify( "hive_dying" );
var_1 notify( "stop_listening" );
}
blocker_kill_sequence()
{
playfx( level._effect["stronghold_explode_large"], self.origin );
thread sfx_destroy_hive();
foreach ( var_1 in self.scriptables )
{
var_1 thread hive_explode( 1 );
common_scripts\utility::waitframe();
}
}
create_attackable_ent( var_0 )
{
var_1 = spawn( "script_model", var_0.origin );
var_1 setmodel( "mp_ext_alien_hive03_collision" );
var_1 hide();
var_1.hive_target = var_0.target;
if ( get_blocker_hive_index() == 1 )
{
var_1.health = 100000;
var_1.maxhealth = 100000;
}
else
{
var_1.health = 150000;
var_1.maxhealth = 150000;
}
if ( maps\mp\alien\_utility::isplayingsolo() )
{
var_1.health = int( 0.66 * var_1.health );
var_1.maxhealth = int( 0.66 * var_1.maxhealth );
}
if ( isdefined( level.create_attackable_ent_override_func ) )
var_1 = [[ level.create_attackable_ent_override_func ]]( var_1 );
return var_1;
}
hive_explode( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = 2;
for ( var_1 = 0; var_1 < var_0; var_1++ )
{
wait( randomfloatrange( 0.5, 1 ) );
var_2 = 8;
var_3 = var_2 - randomintrange( 0, var_2 * 2 );
var_4 = var_2 - randomintrange( 0, var_2 * 2 );
var_5 = anglestoforward( self.angles );
var_6 = anglestoup( self.angles );
playfx( level._effect["alien_hive_explode"], self.origin + ( var_3, var_4, 0 ), var_5, var_6 );
}
}
sfx_destroy_hive()
{
wait 0.1;
self playsound( "alien_hive_destroyed" );
}
monitor_attackable_ent_damage( var_0 )
{
level endon( "blocker_hive_destroyed" );
level endon( "game_ended" );
level._effect["Fire_Cloud_Blocker_Hive"] = loadfx( "vfx/gameplay/alien/vfx_alien_gas_fire" );
var_1 = 0.75 * self.maxhealth;
var_2 = 0.5 * self.maxhealth;
var_3 = 0.25 * self.maxhealth;
var_4 = 0;
var_5 = 0;
var_6 = 0;
for (;;)
{
self 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_16 ) && var_16 == "alienmortar_strike_mp" )
{
var_7 = int( var_7 / 3 );
self.health = self.health + var_7;
}
if ( isdefined( var_16 ) && var_16 == "iw6_alienpanzerfaust3_mp" )
self dodamage( var_7, self.origin, var_8, var_8, "MOD_PROJECTILE_SPLASH" );
if ( isdefined( var_8 ) && isalive( var_8 ) && isplayer( var_8 ) )
{
if ( !isdefined( var_8.hive_damage ) )
var_8.hive_damage = 0;
var_8.hive_damage = var_8.hive_damage + var_7;
if ( var_8.hive_damage > 400 )
{
var_8.hive_damage = 0;
var_8.threatbias = var_8.threatbias + 100;
var_8 thread cool_down_threat( 10 );
}
}
if ( !( isdefined( var_11 ) && var_11 == "MOD_UNKNOWN" ) && !( isdefined( self.is_burning ) && self.is_burning ) )
{
if ( isdefined( var_8.has_incendiary_ammo ) && var_8.has_incendiary_ammo || isdefined( var_16 ) && ( var_16 == "iw6_alienmk324_mp" || var_16 == "iw6_alienminigun4_mp" || var_16 == "iw6_alienmk323_mp" ) )
thread blocker_hive_burn( var_8 );
}
if ( isdefined( var_8.owner ) && isalive( var_8.owner ) && isplayer( var_8.owner ) )
var_8 = var_8.owner;
if ( isdefined( var_8 ) && isalive( var_8 ) && isplayer( var_8 ) )
var_8 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "standard" );
if ( !var_4 && self.health < var_1 )
{
thread warn_all_players( 0.1, 0.4 );
var_4 = 1;
}
if ( !var_5 && self.health < var_2 )
{
thread warn_all_players( 0.1, 0.4 );
var_0 hive_play_first_pain_animations();
if ( isdefined( level.hive_heli ) )
level.hive_heli maps\mp\alien\_music_and_dialog::play_pilot_vo( "so_alien_plt_hivehalfdead" );
var_5 = 1;
}
if ( !var_6 && self.health < var_3 )
{
var_0 hive_play_second_pain_animations();
if ( isdefined( level.hive_heli ) )
level.hive_heli maps\mp\alien\_music_and_dialog::play_pilot_vo( "so_alien_plt_hivealmostdead" );
var_6 = 1;
}
}
}
blocker_hive_burn( var_0 )
{
self endon( "death" );
self.is_burning = 1;
var_1 = 3;
var_2 = 1200;
var_2 = var_2 * level.alien_health_per_player_scalar[level.players.size];
var_3 = 0;
var_4 = 6;
var_5 = var_1 / var_4;
var_6 = var_2 / var_4;
var_7 = self.origin + vectornormalize( anglestoforward( self.angles ) ) * 60 - ( 0, 0, 20 );
self.gasfire = spawnfx( level._effect["Fire_Cloud_Blocker_Hive"], var_7 );
triggerfx( self.gasfire );
thread kill_hive_burning_on_death();
for ( var_8 = 0; var_8 < var_4; var_8++ )
{
wait( var_5 );
self dodamage( var_6, self.origin, var_0, var_0, "MOD_UNKNOWN" );
}
self.is_burning = 0;
self.gasfire delete();
}
kill_hive_burning_on_death()
{
self notify( "kill_hive_burning_on_death" );
self endon( "kill_hive_burning_on_death" );
self waittill( "death" );
if ( isdefined( self.gasfire ) )
self.gasfire delete();
}
cool_down_threat( var_0 )
{
level endon( "blocker_hive_destroyed" );
level endon( "game_ended" );
self endon( "death" );
thread reset_threat_on_death();
thread reset_threat_on_blocker_destroyed();
wait( var_0 );
self.threatbias = int( max( 0, self.threatbias - 100 ) );
}
reset_threat_on_death()
{
self notify( "monitor_threat_on_death" );
self endon( "monitor_threat_on_death" );
self waittill( "death" );
self.threatbias = 0;
}
reset_threat_on_blocker_destroyed()
{
self notify( "monitor_threat_on_blocker_destroyed" );
self endon( "monitor_threat_on_blocker_destroyed" );
level waittill( "blocker_hive_destroyed" );
self.threatbias = 0;
}
give_door_score()
{
var_0 = get_door_score_component_list();
maps\mp\alien\_gamescore::calculate_encounter_scores( level.players, var_0 );
}
get_door_score_component_list()
{
if ( is_progression_door( self ) )
return [ "progression_door" ];
else
return [ "side_area" ];
}
is_progression_door( var_0 )
{
if ( !isdefined( level.progression_doors ) || !isdefined( var_0.target ) )
return 0;
return common_scripts\utility::array_contains( level.progression_doors, var_0.target );
}
give_players_rewards( var_0, var_1 )
{
calculate_and_show_hive_scores( var_1 );
foreach ( var_3 in level.players )
{
var_3 maps\mp\alien\_persistence::eog_player_update_stat( "hivesdestroyed", 1 );
var_3 thread wait_to_give_rewards();
if ( var_0 )
var_3 maps\mp\alien\_persistence::try_award_bonus_pool_token();
}
}
calculate_and_show_hive_scores( var_0 )
{
var_1 = [[ var_0 ]]();
maps\mp\alien\_gamescore::calculate_and_show_encounter_scores( level.players, var_1 );
}
get_blocker_hive_score_component_name_list()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return [ "personal_blocker" ];
else
return [ "team_blocker", "personal_blocker" ];
}
get_regular_hive_score_component_name_list()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return [ "drill", "personal", "challenge" ];
else
return [ "drill", "team", "personal", "challenge" ];
}
wait_to_give_rewards()
{
self endon( "disconnect" );
level endon( "game_ended" );
var_0 = 4.0;
wait( var_0 );
var_1 = int( self.encounter_score_earned );
maps\mp\alien\_persistence::give_player_xp( var_1 );
maps\mp\alien\_persistence::give_player_currency( self.encounter_cash_earned, undefined, undefined, 1 );
}
disable_other_strongholds()
{
foreach ( var_1 in level.stronghold_hive_locs )
{
if ( self != var_1 )
{
if ( isdefined( var_1.icon ) )
var_1.icon destroy();
var_1 makeunusable();
var_1 sethintstring( "" );
var_1 notify( "stop_listening" );
}
}
}
set_hive_icon( var_0, var_1, var_2, var_3 )
{
level endon( "game_ended" );
self endon( "stop_listening" );
if ( !isdefined( var_1 ) )
var_1 = 1000;
if ( isdefined( level.drill_icon_draw_dist_override ) )
var_1 = level.drill_icon_draw_dist_override;
if ( !isdefined( var_2 ) )
var_2 = 14;
if ( !isdefined( var_3 ) )
var_3 = 14;
var_4 = 0;
while ( !var_4 )
{
var_4 = 0;
foreach ( var_6 in level.players )
{
if ( isalive( var_6 ) && distance( var_6.origin, self.origin ) <= var_1 )
var_4 = 1;
}
wait 0.05;
}
destroy_hive_icon();
self.icon = newhudelem();
self.icon setshader( var_0, var_2, var_3 );
self.icon.alpha = 0;
self.icon.color = ( 1, 1, 1 );
self.icon setwaypoint( 1, 1 );
self.icon.x = self.origin[0];
self.icon.y = self.origin[1];
self.icon.z = self.origin[2];
if ( !isdefined( var_1 ) )
{
self.icon.alpha = 0.5;
return;
}
self.icon endon( "death" );
while ( isdefined( self.icon ) )
{
var_4 = 0;
foreach ( var_6 in level.players )
{
if ( isalive( var_6 ) && distance( var_6.origin, self.origin ) <= var_1 )
var_4 = 1;
}
if ( var_4 )
icon_fade_in( self.icon );
else
icon_fade_out( self.icon );
wait 0.05;
}
}
icon_fade_in( var_0 )
{
if ( var_0.alpha != 0 )
return;
var_0 fadeovertime( 1 );
var_0.alpha = 0.5;
wait 1;
}
icon_fade_out( var_0 )
{
if ( var_0.alpha == 0 )
return;
var_0 fadeovertime( 1 );
var_0.alpha = 0;
wait 1;
}
destroy_hive_icon()
{
if ( isdefined( self.icon ) )
self.icon destroy();
}
hive_pain_monitor()
{
self endon( "death" );
self endon( "stop_listening" );
maps\mp\alien\_drill::get_drill_entity() endon( "offline" );
if ( !isdefined( self.scriptables ) )
return;
var_0 = 0.5 * self.total_depth;
var_1 = 0.25 * self.total_depth;
var_2 = self.depth;
if ( var_2 > var_0 )
{
wait( self.depth - var_0 );
hive_play_first_pain_animations();
var_2 = var_0;
}
if ( var_2 > var_1 )
{
wait( var_2 - var_1 );
hive_play_second_pain_animations();
}
}
get_hive_score_component_list_func( var_0 )
{
if ( isdefined( var_0 ) )
return var_0;
return ::get_regular_hive_score_component_name_list;
}
hive_play_first_pain_animations()
{
var_0 = 3;
thread play_hive_scriptable_animations( undefined, undefined, var_0, 1 );
}
hive_play_second_pain_animations()
{
var_0 = 0.4;
thread play_hive_scriptable_animations( "start_near_death", var_0, "loop_near_death", 1 );
}
hive_play_drill_planted_animations( var_0 )
{
var_1 = 0.2;
if ( isdefined( var_0 ) )
var_1 = var_0;
thread play_hive_scriptable_animations( "start_pain", var_1, "loop_pain1", 1 );
}
hive_play_death_animations()
{
var_0 = 1.5;
thread play_hive_scriptable_animations( "death", var_0, "remove", 1 );
}
play_hive_scriptable_animations( var_0, var_1, var_2, var_3 )
{
var_4 = 0.15;
var_5 = 0.25;
if ( !isdefined( self.scriptables ) )
return;
foreach ( var_7 in self.scriptables )
{
var_7 thread play_hive_anim( var_0, var_1, var_2 );
if ( var_3 )
wait( randomfloatrange( var_4, var_5 ) );
}
}
play_hive_anim( var_0, var_1, var_2 )
{
if ( isdefined( var_0 ) )
self setscriptablepartstate( 0, var_0 );
if ( isdefined( var_1 ) )
wait( var_1 );
if ( isdefined( var_2 ) )
self setscriptablepartstate( 0, var_2 );
}
dependent_hives_removed()
{
if ( !isdefined( self.target ) || !isdefined( level.hive_dependencies ) || !isdefined( level.hive_dependencies[self.target] ) )
return 1;
var_0 = level.hive_dependencies[self.target];
foreach ( var_2 in level.stronghold_hive_locs )
{
if ( isdefined( var_2.target ) )
{
if ( common_scripts\utility::array_contains( var_0, var_2.target ) )
return 0;
}
}
return 1;
}
select_hives( var_0 )
{
var_1 = [];
var_2 = maps\mp\alien\_utility::get_current_area_name();
foreach ( var_4 in level.stronghold_hive_locs )
{
var_5 = var_4 is_blocker_hive();
if ( var_0 && !var_5 )
continue;
if ( !var_0 && var_5 )
continue;
if ( !( var_4.area_name == var_2 ) && !var_4 maps\mp\alien\_utility::is_door() )
continue;
if ( !var_4 dependent_hives_removed() )
continue;
var_1[var_1.size] = var_4;
}
return var_1;
}
remove_unused_hives( var_0 )
{
foreach ( var_2 in var_0 )
{
var_3 = getent( var_2, "target" );
var_3 notify( "stop_listening" );
var_3 thread play_hive_scriptable_animations( "remove", undefined, undefined, 0 );
var_3 thread delete_removables();
var_3 destroy_hive_icon();
foreach ( var_5 in var_3.fx_ents )
var_5 delete();
if ( isdefined( var_3.dead_hive_model ) )
var_3 show_dead_hive_model();
var_3 delete();
}
}
delete_removables()
{
foreach ( var_1 in self.removeables )
{
if ( isdefined( var_1 ) )
var_1 delete();
}
}
show_dead_hive_model()
{
foreach ( var_1 in self.dead_hive_model )
var_1 show();
}
is_blocker_hive()
{
if ( !isdefined( level.blocker_hives ) || !isdefined( self.target ) )
return 0;
foreach ( var_1 in level.blocker_hives )
{
if ( var_1 == self.target )
return 1;
}
return 0;
}
warn_all_players( var_0, var_1 )
{
level endon( "game_ended" );
wait( var_0 );
foreach ( var_3 in level.players )
var_3 thread warn_player( var_1 );
}
warn_player( var_0 )
{
earthquake( var_0, 3, self.origin, 300 );
self playlocalsound( "pre_quake_mtl_groan" );
self playrumbleonentity( "heavygun_fire" );
}
init_hive_locs()
{
level.stronghold_hive_locs = [];
level.current_hive_name = "before_first_hive";
var_0 = getentarray( "stronghold_bomb_loc", "targetname" );
var_1 = getentarray( "stronghold_door_loc", "targetname" );
if ( isdefined( var_1 ) && var_1.size > 0 )
var_0 = common_scripts\utility::array_combine( var_0, var_1 );
foreach ( var_3 in var_0 )
{
if ( isdefined( var_3.target ) )
{
var_4 = getentarray( var_3.target, "targetname" );
var_3.scriptables = getscriptablearray( var_3.target, "targetname" );
foreach ( var_6 in var_3.scriptables )
var_6.is_hive = 1;
var_8 = [];
var_9 = [];
foreach ( var_11 in var_4 )
{
if ( isdefined( var_11.script_noteworthy ) && var_11.script_noteworthy == "fx_ent" )
{
var_9[var_9.size] = var_11;
continue;
}
if ( isdefined( var_11.script_noteworthy ) && issubstr( var_11.script_noteworthy, "waypointdist" ) )
{
var_12 = strtok( var_11.script_noteworthy, " " );
if ( isdefined( var_12 ) && var_12.size && var_12[0] == "waypointdist" )
var_3.waypoint_dist = int( var_12[1] );
continue;
}
var_8[var_8.size] = var_11;
}
if ( isdefined( level.scene_trigs ) )
{
foreach ( var_15 in level.scene_trigs )
{
if ( isdefined( var_15.script_noteworthy ) && var_15.script_noteworthy == var_3.target )
{
var_3.scene_trig = var_15;
break;
}
}
}
var_17 = var_3.target + "_drill_teleport_loc";
var_3.drill_teleport_structs = common_scripts\utility::getstructarray( var_17, "targetname" );
var_3.removeables = var_8;
var_3.fx_ents = var_9;
if ( var_3.target == level.last_hive )
var_3.last_hive = 1;
var_18 = var_3.target + "_dead";
var_3.dead_hive_model = getentarray( var_18, "targetname" );
if ( isdefined( var_3.dead_hive_model ) )
{
foreach ( var_20 in var_3.dead_hive_model )
var_20 hide();
}
if ( var_3 is_blocker_hive() )
{
var_3 thread init_blocker_hive_animation_state();
var_3 makeunusable();
var_3 sethintstring( "" );
}
}
if ( !common_scripts\utility::array_contains( level.removed_hives, var_3.target ) )
{
var_3.area_name = var_3 maps\mp\alien\_utility::get_in_world_area();
level.stronghold_hive_locs[level.stronghold_hive_locs.size] = var_3;
}
}
}
init_blocker_hive_animation_state()
{
level endon( "game_ended" );
self endon( "death" );
if ( !isdefined( self.scriptables ) )
return;
wait 5;
foreach ( var_1 in self.scriptables )
{
wait( randomfloatrange( 0.15, 0.25 ) );
var_1 setscriptablepartstate( 0, "loop_pain1" );
}
}
get_hive_waypoint_dist( var_0, var_1 )
{
if ( isdefined( var_0.waypoint_dist ) )
return var_0.waypoint_dist;
if ( isdefined( level.waypoint_dist_override ) )
return level.waypoint_dist_override;
return var_1;
}
get_blocker_hive_index()
{
var_0 = level.cycle_end_area_list[0];
var_1 = level.cycle_end_area_list[1];
if ( level.cycle_count == var_0 - 1 || level.cycle_count == var_0 )
return 1;
else
return 2;
}
skip_hive()
{
}
beat_regular_hive()
{
}
beat_blocker_hive()
{
}

530
maps/mp/alien/_hud.gsc Normal file
View File

@ -0,0 +1,530 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
register_end_game_string_index();
}
playpainoverlay( var_0, var_1, var_2 )
{
if ( maps\mp\_utility::isusingremote() && maps\mp\alien\_utility::is_true( self.vanguard_num ) )
return;
var_3 = get_damage_direction( var_2 );
if ( is_spitter_spit( var_1 ) )
play_spitter_pain_overlay( var_3 );
else if ( is_spitter_gas( var_1 ) )
play_spitter_pain_overlay( "center" );
else if ( is_elite_attack( var_0 ) )
playfxontagforclients( level._effect["vfx_melee_blood_spray"], self, "tag_eye", self );
else
play_basic_pain_overlay( var_3 );
}
get_damage_direction( var_0 )
{
var_1 = 0.965;
var_2 = [ "left", "center", "right" ];
if ( !isdefined( var_0 ) )
return var_2[randomint( var_2.size )];
var_0 = var_0 * -1;
var_3 = anglestoforward( self.angles );
var_4 = vectordot( var_0, var_3 );
if ( var_4 > var_1 )
return "center";
var_5 = anglestoright( self.angles );
var_6 = vectordot( var_0, var_5 );
if ( var_6 > 0 )
return "right";
else
return "left";
}
play_basic_pain_overlay( var_0 )
{
if ( var_0 == "left" )
playfxontagforclients( level._effect["vfx_blood_hit_left"], self, "tag_eye", self );
else if ( var_0 == "center" )
playfxontagforclients( level._effect["vfx_melee_blood_spray"], self, "tag_eye", self );
else if ( var_0 == "right" )
playfxontagforclients( level._effect["vfx_blood_hit_right"], self, "tag_eye", self );
else
{
}
}
play_spitter_pain_overlay( var_0 )
{
if ( var_0 == "left" )
playfxontagforclients( level._effect["vfx_alien_spitter_hit_left"], self, "tag_eye", self );
else if ( var_0 == "center" )
playfxontagforclients( level._effect["vfx_alien_spitter_hit_center"], self, "tag_eye", self );
else if ( var_0 == "right" )
playfxontagforclients( level._effect["vfx_alien_spitter_hit_right"], self, "tag_eye", self );
else
{
}
}
play_slash_pain_overlay( var_0 )
{
if ( var_0 == "center" )
var_0 = random_pick_r_or_l();
if ( var_0 == "left" )
playfxontagforclients( level._effect["vfx_blood_hit_left"], self, "tag_eye", self );
else if ( var_0 == "right" )
playfxontagforclients( level._effect["vfx_blood_hit_right"], self, "tag_eye", self );
else
{
}
}
play_goo_pain_overlay( var_0 )
{
if ( var_0 == "left" )
playfxontagforclients( level._effect["vfx_alien_spitter_hit_left"], self, "tag_eye", self );
else if ( var_0 == "center" )
playfxontagforclients( level._effect["vfx_alien_spitter_hit_center"], self, "tag_eye", self );
else if ( var_0 == "right" )
playfxontagforclients( level._effect["vfx_alien_spitter_hit_right"], self, "tag_eye", self );
else
{
}
}
random_pick_r_or_l()
{
if ( common_scripts\utility::cointoss() )
return "right";
else
return "left";
}
is_spitter_spit( var_0 )
{
if ( !isdefined( var_0 ) )
return 0;
return var_0 == "alienspit_mp";
}
is_spitter_gas( var_0 )
{
if ( !isdefined( var_0 ) )
return 0;
return var_0 == "alienspit_gas_mp";
}
is_elite_attack( var_0 )
{
if ( !isdefined( var_0 ) || !var_0 maps\mp\alien\_utility::is_alien_agent() )
return 0;
return var_0 maps\mp\alien\_utility::get_alien_type() == "elite";
}
laststandupdatereviveiconcoloralien( var_0 )
{
self endon( "death" );
level endon( "game_ended" );
wait( var_0 / 3 );
self.color = ( 1, 0.64, 0 );
wait( var_0 / 3 );
self.color = ( 1, 0, 0 );
}
makereviveicon( var_0, var_1, var_2 )
{
var_3 = newteamhudelem( var_0.team );
var_3 setshader( "waypoint_alien_revive", 8, 8 );
var_3 setwaypoint( 1, 1 );
var_3 settargetent( self );
var_3.color = var_1;
var_3 thread deletereviveicon( var_0 );
if ( isdefined( var_2 ) )
var_3 thread laststandupdatereviveiconcoloralien( var_2 );
return var_3;
}
deletereviveicon( var_0 )
{
self endon( "death" );
var_0 common_scripts\utility::waittill_any( "disconnect", "revive", "death" );
self destroy();
}
hidehudelementongameend( var_0 )
{
level waittill( "game_ended" );
if ( isdefined( var_0 ) )
var_0.alpha = 0;
}
blocker_hive_hp_bar()
{
var_0 = 100000;
while ( isdefined( self ) && self.health > 0 )
{
common_scripts\utility::waittill_notify_or_timeout( "damage", 2 );
if ( !isdefined( self ) || self.health <= 0 )
break;
var_1 = max( 0.005, self.health / self.maxhealth );
var_2 = 100 - var_1 * 100;
var_3 = 0.5;
if ( abs( abs( var_0 ) - abs( var_2 ) ) > var_3 )
{
setomnvar( "ui_alien_boss_progression", var_2 );
var_0 = var_2;
}
}
setomnvar( "ui_alien_boss_status", 0 );
}
blocker_hive_chopper_hp_bar()
{
while ( isdefined( self ) && self.health > 0 )
{
common_scripts\utility::waittill_notify_or_timeout( "damage", 2 );
if ( !isdefined( self ) || self.health <= 0 )
break;
var_0 = self.health / self.maxhealth;
var_1 = var_0 * 100;
}
}
init_player_hud_onconnect()
{
visionsetpain( "near_death_mp" );
}
createspendhinthud( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
maps\mp\_utility::setlowermessage( "spend_hint", &"ALIEN_COLLECTIBLES_PULL_TO_SPEND" );
else
maps\mp\_utility::setlowermessage( "spend_hint", var_2 );
thread hidespendhinticon();
}
hidespendhinticon()
{
self endon( "death" );
self endon( "disconnect" );
common_scripts\utility::waittill_any_timeout( 3, "action_finish_used", "player_action_slot_restart", "kill_spendhint" );
maps\mp\_utility::clearlowermessage( "spend_hint" );
}
intro_black_screen()
{
self endon( "disconnect" );
self endon( "stop_intro" );
self.introscreen_overlay = newclienthudelem( self );
self.introscreen_overlay.x = 0;
self.introscreen_overlay.y = 0;
self.introscreen_overlay setshader( "black", 640, 480 );
self.introscreen_overlay.alignx = "left";
self.introscreen_overlay.aligny = "top";
self.introscreen_overlay.sort = 1;
self.introscreen_overlay.horzalign = "fullscreen";
self.introscreen_overlay.vertalign = "fullscreen";
self.introscreen_overlay.alpha = 1;
self.introscreen_overlay.foreground = 1;
level waittill( "introscreen_over" );
self.introscreen_overlay fadeovertime( 3 );
self.introscreen_overlay.alpha = 0;
wait 3.5;
self.introscreen_overlay destroy();
}
introscreen_corner_line( var_0, var_1 )
{
if ( !isdefined( level.intro_offset ) )
level.intro_offset = 0;
else
level.intro_offset++;
var_2 = cornerline_height();
var_3 = 1.6;
if ( level.splitscreen )
var_3 = 2;
var_4 = newhudelem();
var_4.x = 20;
var_4.y = var_2;
var_4.alignx = "left";
var_4.aligny = "bottom";
var_4.horzalign = "left";
var_4.vertalign = "bottom";
var_4.sort = 3;
var_4.foreground = 1;
var_4 settext( var_0 );
var_4.alpha = 1;
var_4.hidewheninmenu = 1;
var_4.fontscale = var_3;
var_4.color = ( 0.8, 1, 0.8 );
var_4.font = "default";
var_4.glowcolor = ( 0.3, 0.6, 0.3 );
var_4.glowalpha = 1;
var_4 setpulsefx( 35, 4000, 1000 );
return var_4;
}
cornerline_height()
{
var_0 = -92;
if ( level.splitscreen )
var_0 = -110;
return level.intro_offset * 20 - 92;
}
displayaliengameend( var_0, var_1 )
{
foreach ( var_3 in level.players )
{
if ( isdefined( var_3.connectedpostgame ) || var_3.pers["team"] == "spectator" )
continue;
var_3 thread alienoutcomenotify( var_0, var_1 );
var_3 thread maps\mp\_utility::freezecontrolswrapper( 1 );
}
level notify( "game_win", var_0 );
maps\mp\gametypes\_gamelogic::roundendwait( level.postroundtime, 1 );
}
alienoutcomenotify( var_0, var_1 )
{
self endon( "disconnect" );
self notify( "reset_outcome" );
wait 0.5;
var_2 = self.pers["team"];
if ( !isdefined( var_2 ) || var_2 != "allies" && var_2 != "axis" )
var_2 = "allies";
while ( maps\mp\gametypes\_hud_message::isdoingsplash() )
wait 0.05;
self endon( "reset_outcome" );
if ( isdefined( self.pers["team"] ) && var_0 == var_2 )
var_3 = get_end_game_string_index( "win" );
else
var_3 = get_end_game_string_index( "fail" );
self setclientomnvar( "ui_round_end_title", var_3 );
self setclientomnvar( "ui_round_end_reason", var_1 );
self setclientomnvar( "ui_alien_show_eog_score", 1 );
}
register_end_game_string_index()
{
if ( isdefined( level.end_game_string_override ) )
[[ level.end_game_string_override ]]();
else
register_default_end_game_string_index();
}
register_default_end_game_string_index()
{
level.end_game_string_index = [];
level.end_game_string_index["win"] = 1;
level.end_game_string_index["fail"] = 2;
level.end_game_string_index["all_escape"] = 1;
level.end_game_string_index["some_escape"] = 2;
level.end_game_string_index["fail_escape"] = 3;
level.end_game_string_index["drill_destroyed"] = 4;
level.end_game_string_index["kia"] = 5;
level.end_game_string_index["host_end"] = 6;
level.end_game_string_index["gas_fail"] = 7;
level.end_game_string_index["generator_destroyed"] = 8;
}
get_end_game_string_index( var_0 )
{
return level.end_game_string_index[var_0];
}
show_encounter_scores()
{
level endon( "game_ended " );
setomnvar( "ui_alien_show_encounter_score", 1 );
wait 1.0;
setomnvar( "ui_alien_show_encounter_score", 0 );
}
reset_player_encounter_lua_omnvars( var_0 )
{
var_1 = 8;
for ( var_2 = 1; var_2 <= var_1; var_2++ )
{
var_3 = "ui_alien_encounter_title_row_" + var_2;
var_4 = "ui_alien_encounter_score_row_" + var_2;
var_0 setclientomnvar( var_3, 0 );
var_0 setclientomnvar( var_4, 0 );
}
}
set_lua_encounter_score_row( var_0, var_1, var_2, var_3 )
{
var_4 = "ui_alien_encounter_title_row_" + var_1;
var_5 = "ui_alien_encounter_score_row_" + var_1;
var_0 setclientomnvar( var_4, var_2 );
var_0 setclientomnvar( var_5, var_3 );
}
set_lua_eog_score_row( var_0, var_1, var_2, var_3 )
{
var_4 = "ui_alien_eog_title_row_" + var_1;
var_5 = "ui_alien_eog_score_row_" + var_1;
var_0 setclientomnvar( var_4, var_2 );
var_0 setclientomnvar( var_5, var_3 );
}
make_waypoint( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = newhudelem();
var_5 setshader( var_0, var_1, var_2 );
var_5.alpha = var_3;
var_5 setwaypoint( 1, 1 );
var_5.x = var_4[0];
var_5.y = var_4[1];
var_5.z = var_4[2];
return var_5;
}
chaos_hud_init()
{
level.last_combo_meter_reset_time = 0;
}
set_combo_counter( var_0 )
{
setomnvar( "ui_alien_chaos_combo_counter", var_0 );
}
set_score_streak( var_0 )
{
setomnvar( "ui_alien_chaos_score_streak", var_0 );
}
set_total_score( var_0 )
{
setomnvar( "ui_alien_chaos_total_score", var_0 );
}
reset_combo_meter( var_0 )
{
if ( is_combo_meter_reset_this_frame() )
return;
foreach ( var_2 in level.players )
{
var_3 = gettime();
var_2 setclientomnvar( "ui_alien_chaos_combo_meter_start", var_3 );
var_2 setclientomnvar( "ui_alien_chaos_combo_meter_end", var_3 + int( var_0 * 1000 ) );
}
}
is_combo_meter_reset_this_frame()
{
var_0 = gettime();
var_1 = level.last_combo_meter_reset_time;
level.last_combo_meter_reset_time = var_0;
return var_0 == var_1;
}
set_grace_period_clock( var_0 )
{
setomnvar( "ui_alien_chaos_grace_period", var_0 );
}
unset_grace_period_clock()
{
setomnvar( "ui_alien_chaos_grace_period", 0 );
}
set_has_combo_freeze( var_0, var_1 )
{
var_0 setclientomnvar( "ui_alien_chaos_has_meter_freeze", var_1 );
}
freeze_combo_meter( var_0 )
{
var_1 = gettime();
setomnvar( "ui_alien_chaos_meter_freeze_start", var_1 );
setomnvar( "ui_alien_chaos_meter_freeze_end", var_1 + var_0 * 1000 );
}
unfreeze_combo_meter()
{
setomnvar( "ui_alien_chaos_meter_freeze_start", 0 );
setomnvar( "ui_alien_chaos_meter_freeze_end", 0 );
}
set_event_count( var_0, var_1 )
{
foreach ( var_3 in level.players )
var_3 setclientomnvar( "ui_alien_eog_score_row_" + var_0, var_1 );
}
set_has_chaos_class_skill_bonus( var_0, var_1 )
{
var_0 setclientomnvar( "ui_alien_chaos_class_skill_bonus", var_1 );
}
unset_has_chaos_class_skill_bonus( var_0 )
{
var_0 setclientomnvar( "ui_alien_chaos_class_skill_bonus", 0 );
}
set_last_stand_timer( var_0, var_1 )
{
var_0 setclientomnvar( "ui_laststand_end_milliseconds", gettime() + var_1 * 1000 );
}
clear_last_stand_timer( var_0 )
{
var_0 setclientomnvar( "ui_laststand_end_milliseconds", 0 );
}
turn_on_drill_meter_hud( var_0 )
{
setomnvar( "ui_alien_drill_state", 1 );
var_1 = int( gettime() + var_0 * 1000 );
setomnvar( "ui_alien_drill_start_milliseconds", gettime() );
setomnvar( "ui_alien_drill_end_milliseconds", var_1 );
}
update_drill_health( var_0 )
{
setomnvar( "ui_alien_drill_health_text", var_0 );
}

View File

@ -0,0 +1,155 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
intro_sequence_precache()
{
common_scripts\utility::flag_init( "intro_sequence_complete" );
switch ( level.script )
{
case "mp_alien_town":
town_intro_precache();
break;
default:
break;
}
}
play_intro_sequence( var_0 )
{
switch ( level.script )
{
case "mp_alien_town":
level thread alien_town_intro( var_0 );
break;
default:
break;
}
}
town_intro_precache()
{
alien_town_intro_precache_props();
alien_town_intro_precache_characters();
}
alien_town_intro_precache_characters()
{
precachempanim( "alien_town_intro_boss" );
precachempanim( "alien_town_intro_pilot" );
}
alien_town_intro_precache_props()
{
precachempanim( "alien_town_intro_chopper" );
precachempanim( "alien_town_intro_drill" );
}
#using_animtree("animated_props");
alien_town_intro( var_0 )
{
level waittill( "introscreen_over" );
var_1 = ( 2830.46, -398.027, 707.026 );
var_2 = getent( "helicoptercoll", "targetname" );
var_3 = spawnhelicopter( var_0, var_1, var_2.angles + ( 0, 180, 0 ), "nh90_alien_intro", "tag_origin_vehicle" );
var_4 = spawn( "script_model", var_1 );
var_4.angles = var_2.angles;
var_4 setmodel( "vehicle_nh90_interior2" );
thread sfx_intro_heli_takeoff( var_3 );
var_3 setmodel( "tag_origin_vehicle" );
level.intro_heli = var_4;
var_5 = spawn_model( "mp_body_us_rangers_assault_a_urban", var_4, "TAG_GUY1", ( 0, 0, 0 ) );
var_5 setmodel( "mp_body_us_rangers_assault_a_urban" );
var_6 = spawn_model( "head_mp_head_a", var_5, "J_spine4", ( 0, 0, 0 ) );
var_7 = spawn_model( "mp_body_us_rangers_assault_a_urban", var_4, "tag_driver", ( 0, 0, 0 ) );
var_8 = spawn_model( "head_mp_head_a", var_7, "J_spine4", ( 0, 0, 0 ) );
var_9 = spawn_model( "mp_laser_drill", var_4, "TAG_GUY1", ( 0, 0, 0 ) );
thread sfx_intro_npc_foley( var_5 );
var_4 scriptmodelplayanimdeltamotion( "alien_town_intro_chopper" );
var_7 scriptmodelplayanim( "alien_town_intro_pilot" );
var_8 scriptmodelplayanim( "alien_town_intro_pilot" );
var_5 scriptmodelplayanim( "alien_town_intro_boss" );
var_6 scriptmodelplayanim( "alien_town_intro_boss" );
var_9 scriptmodelplayanim( "alien_town_intro_drill" );
thread sfx_intro_heli_drop_drill( var_9 );
var_2 thread wait_to_delete();
wait( getanimlength( %alien_town_intro_drill ) );
var_9 scriptmodelclearanim();
var_9 delete();
level thread mp_alien_town_intro_drill_setup();
level thread kill_heli( var_3 );
wait( getanimlength( %alien_town_intro_chopper ) );
var_7 scriptmodelclearanim();
var_8 scriptmodelclearanim();
var_5 scriptmodelclearanim();
var_6 scriptmodelclearanim();
var_4 scriptmodelclearanim();
var_5 delete();
var_6 delete();
var_7 delete();
var_8 delete();
var_4 delete();
}
wait_to_delete()
{
level endon( "game_ended" );
var_0 = 16.5;
wait( var_0 );
self delete();
}
kill_heli( var_0 )
{
wait 10;
var_0 vehicle_setspeed( 50, 10 );
var_0 setvehgoalpos( var_0.origin + ( 0, 0, 1600 ) );
wait 10;
var_0 delete();
}
spawn_model( var_0, var_1, var_2, var_3 )
{
var_4 = spawn( "script_model", ( 0, 0, 0 ) );
var_4 setmodel( var_0 );
var_4.origin = var_1 gettagorigin( var_2 );
var_4.angles = var_1 gettagangles( var_2 ) + var_3;
var_4 linkto( var_1, var_2 );
return var_4;
}
intro_sequence_enabled()
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return 0;
return getdvarint( "scr_alien_intro", 1 ) == 1;
}
mp_alien_town_intro_drill_setup()
{
level.initial_drill_origin = ( 2834.27, -243.002, 524.068 );
level.initial_drill_angles = ( 0.995, -103.877, 1.287 );
level notify( "spawn_intro_drill" );
wait 8;
common_scripts\utility::flag_set( "intro_sequence_complete" );
}
sfx_intro_heli_takeoff( var_0 )
{
var_0 vehicle_turnengineoff();
var_0 playsound( "alien_heli_intro_takeoff" );
}
sfx_intro_heli_drop_drill( var_0 )
{
wait( getanimlength( %alien_town_intro_drill ) - 0.5 );
var_0 playsound( "alien_heli_drill_drop" );
}
sfx_intro_npc_foley( var_0 )
{
wait 2.53;
var_0 playsound( "alien_heli_npc_foley" );
}

View File

@ -0,0 +1,317 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.lasedstrikeglow = loadfx( "fx/misc/laser_glow" );
level.lasedstrikeexplode = loadfx( "fx/explosions/uav_advanced_death" );
thread onplayerconnect();
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread onplayerspawned();
var_0.soflamammoused = 0;
}
}
onplayerspawned()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
thread watch_alien_soflam_usage();
thread watch_alien_soflam_weaponswitch();
}
}
watch_alien_soflam_weaponswitch()
{
self endon( "disconnect" );
self endon( "death" );
for (;;)
{
self waittill( "weapon_change", var_0 );
if ( var_0 == "aliensoflam_mp" )
self setweaponammoclip( "aliensoflam_mp", 3 - self.soflamammoused );
}
}
watch_alien_soflam_usage()
{
self notify( "watchaliensoflamusage" );
self endon( "watchaliensoflamusage" );
level endon( "game_ended" );
self endon( "disconnect" );
while ( maps\mp\_utility::ischangingweapon() )
wait 0.05;
for (;;)
{
if ( self attackbuttonpressed() && self getcurrentweapon() == "aliensoflam_mp" && self adsbuttonpressed() && !self isusingturret() )
{
self weaponlocktargettooclose( 0 );
self weaponlockfree();
var_0 = gettargetpoint();
if ( !isdefined( var_0 ) )
{
wait 0.05;
continue;
}
if ( !isdefined( var_0[0] ) )
{
wait 0.05;
continue;
}
var_1 = var_0[0];
attacklasedtarget( var_1 );
}
wait 0.05;
}
}
playlocksound()
{
if ( isdefined( self.playinglocksound ) && self.playinglocksound )
return;
self playlocalsound( "javelin_clu_lock" );
self.playinglocksound = 1;
wait 0.75;
self stoplocalsound( "javelin_clu_lock" );
self.playinglocksound = 0;
}
playlockerrorsound()
{
if ( isdefined( self.playinglocksound ) && self.playinglocksound )
return;
self playlocalsound( "javelin_clu_aquiring_lock" );
self.playinglocksound = 1;
wait 0.75;
self stoplocalsound( "javelin_clu_aquiring_lock" );
self.playinglocksound = 0;
}
attacklasedtarget( var_0 )
{
var_1 = undefined;
var_2 = undefined;
var_3 = 6000;
var_4 = ( 0, 0, var_3 );
var_5 = 3000;
var_6 = anglestoforward( self.angles );
var_7 = self.origin;
var_8 = var_7 + var_4 + var_6 * var_5 * -1;
var_9 = 0;
var_10 = bullettrace( var_0 + ( 0, 0, var_3 ), var_0, 0 );
if ( var_10["fraction"] > 0.99 )
{
var_9 = 1;
var_8 = var_0 + ( 0, 0, var_3 );
}
if ( !var_9 )
{
var_10 = bullettrace( var_0 + ( 300, 0, var_3 ), var_0, 0 );
if ( var_10["fraction"] > 0.99 )
{
var_9 = 1;
var_8 = var_0 + ( 300, 0, var_3 );
}
}
if ( !var_9 )
{
var_10 = bullettrace( var_0 + ( 0, 300, var_3 ), var_0, 0 );
if ( var_10["fraction"] > 0.99 )
{
var_9 = 1;
var_8 = var_0 + ( 0, 300, var_3 );
}
}
if ( !var_9 )
{
var_10 = bullettrace( var_0 + ( 0, -300, var_3 ), var_0, 0 );
if ( var_10["fraction"] > 0.99 )
{
var_9 = 1;
var_8 = var_0 + ( 0, -300, var_3 );
}
}
if ( !var_9 )
{
var_10 = bullettrace( var_0 + ( 300, 300, var_3 ), var_0, 0 );
if ( var_10["fraction"] > 0.99 )
{
var_9 = 1;
var_8 = var_0 + ( 300, 300, var_3 );
}
}
if ( !var_9 )
{
var_10 = bullettrace( var_0 + ( -300, 0, var_3 ), var_0, 0 );
if ( var_10["fraction"] > 0.99 )
{
var_9 = 1;
var_8 = var_0 + ( -300, 0, var_3 );
}
}
if ( !var_9 )
{
var_10 = bullettrace( var_0 + ( -300, -300, var_3 ), var_0, 0 );
if ( var_10["fraction"] > 0.99 )
{
var_9 = 1;
var_8 = var_0 + ( -300, -300, var_3 );
}
}
if ( !var_9 )
{
var_10 = bullettrace( var_0 + ( 300, -300, var_3 ), var_0, 0 );
if ( var_10["fraction"] > 0.99 )
{
var_9 = 1;
var_8 = var_0 + ( 300, -300, var_3 );
}
}
if ( !var_9 )
{
for ( var_11 = 0; var_11 < 5; var_11++ )
{
var_3 = var_3 / 2;
var_4 = ( 0, 0, var_3 );
var_8 = self.origin + var_4 + var_6 * var_5 * -1;
var_12 = bullettrace( var_0, var_8, 0 );
if ( var_12["fraction"] > 0.99 )
{
var_9 = 1;
break;
}
wait 0.05;
}
}
if ( !var_9 )
{
for ( var_11 = 0; var_11 < 5; var_11++ )
{
var_3 = var_3 * 2.5;
var_4 = ( 0, 0, var_3 );
var_8 = self.origin + var_4 + var_6 * var_5 * -1;
var_12 = bullettrace( var_0, var_8, 0 );
if ( var_12["fraction"] > 0.99 )
{
var_9 = 1;
break;
}
wait 0.05;
}
}
if ( !var_9 )
{
thread canthittarget();
return 0;
}
var_1 = spawnfx( level.lasedstrikeglow, var_0 );
thread playlocksound();
self weaponlockfinalize( var_0, ( 0, 0, 0 ), 0 );
thread update_soflam_ammocount();
var_13 = magicbullet( "aliensoflam_missle_mp", var_8, var_0, self );
var_13 missile_settargetent( var_1 );
thread looptriggeredeffect( var_1, var_13 );
self weaponlockfree();
var_13 waittill( "death" );
if ( isdefined( var_1 ) )
var_1 delete();
earthquake( 0.4, 1, var_0, 850 );
return 1;
}
looptriggeredeffect( var_0, var_1 )
{
var_1 endon( "death" );
level endon( "game_ended" );
for (;;)
{
triggerfx( var_0 );
wait 0.5;
}
}
canthittarget()
{
thread playlockerrorsound();
self weaponlocktargettooclose( 1 );
}
gettargetpoint()
{
var_0 = self geteye();
var_1 = self getplayerangles();
var_2 = anglestoforward( var_1 );
var_3 = var_0 + var_2 * 15000;
var_4 = bullettrace( var_0, var_3, 0, undefined );
if ( var_4["surfacetype"] == "none" )
return undefined;
if ( var_4["surfacetype"] == "default" )
return undefined;
var_5 = [];
var_5[0] = var_4["position"];
var_5[1] = var_4["normal"];
return var_5;
}
update_soflam_ammocount()
{
self.soflamammoused++;
self setweaponammoclip( "aliensoflam_mp", 3 - self.soflamammoused );
if ( self.soflamammoused >= 3 )
{
self.soflamammoused = 0;
self takeweapon( "aliensoflam_mp" );
if ( !maps\mp\alien\_utility::is_true( self.has_special_weapon ) && !maps\mp\alien\_utility::is_true( self.is_holding_deployable ) )
self switchtoweapon( self getweaponslistprimaries()[0] );
}
}

View File

@ -0,0 +1,816 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
callback_playerlaststandalien( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
blackbox_laststand( var_1, var_2 );
if ( maps\mp\alien\_utility::is_chaos_mode() )
maps\mp\alien\_chaos_laststand::chaos_playerlaststand( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_9 );
else
regularextinction_playerlaststand( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_9 );
}
regularextinction_playerlaststand( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
{
var_8 = gameshouldend( self );
if ( var_8 )
level thread maps\mp\gametypes\aliens::alienendgame( "axis", maps\mp\alien\_hud::get_end_game_string_index( "kia" ) );
if ( self.inlaststand )
forcebleedout( var_7 );
else
dropintolaststand( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 );
}
forcebleedout( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
self setorigin( var_0.origin );
self.bleedoutspawnentityoverride = var_0;
self notify( "force_bleed_out" );
}
dropintolaststand( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self endon( "disconnect" );
level endon( "game_ended" );
self notify( "last_stand" );
enter_gamemodespecificaction();
enter_laststand();
if ( maydolaststandalien( self, var_8, var_7 ) )
{
var_9 = waitinlaststand( var_7, var_8 );
if ( !var_9 )
waitinspecator( var_7, var_8 );
}
else
waitinspecator( var_7, var_8 );
self notify( "revive" );
exit_laststand();
exit_gamemodespecificaction();
}
enter_laststand()
{
self.inlaststand = 1;
self.laststand = 1;
self.ignoreme = 1;
self.health = 1;
common_scripts\utility::_disableusability();
}
exit_laststand()
{
self laststandrevive();
self setstance( "stand" );
self.inlaststand = 0;
self.laststand = undefined;
self.ignoreme = 0;
self.health = maps\mp\gametypes\aliens::gethealthcap();
common_scripts\utility::_enableusability();
}
enter_gamemodespecificaction_getcurrentweapon( var_0 )
{
var_1 = self getcurrentweapon();
if ( var_1 == "none" )
return self.copy_fullweaponlist[0];
foreach ( var_3 in var_0 )
{
if ( var_1 == var_3 )
return self.copy_fullweaponlist[0];
}
return var_1;
}
enter_gamemodespecificaction()
{
level thread maps\mp\alien\_music_and_dialog::playvofordowned( self );
maps\mp\alien\_gamescore::update_team_encounter_performance( maps\mp\alien\_gamescore::get_team_score_component_name(), "num_players_enter_laststand" );
var_0 = [ "alienbomb_mp", "killstreak_remote_uav_mp", "mortar_detonator_mp", "switchblade_laptop_mp", "aliendeployable_crate_marker_mp", "iw6_alienminigun_mp", "iw6_alienminigun1_mp", "iw6_alienminigun2_mp", "iw6_alienminigun3_mp", "iw6_alienminigun4_mp", "iw6_alienmk32_mp", "iw6_alienmk321_mp", "iw6_alienmk322_mp", "iw6_alienmk323_mp", "iw6_alienmk324_mp", "alienflare_mp", "aliensemtex_mp", "alienclaymore_mp", "alientrophy_mp", "alienbetty_mp", "alienthrowingknife_mp", "iw6_alienmaaws_mp", "alienmortar_shell_mp", "iw6_aliendlc21_mp", "iw6_aliendlc22_mp", "iw6_aliendlc31_mp", "iw6_aliendlc32_mp", "iw6_aliendlc33_mp", "iw6_aliendlc43_mp", "aliencortex_mp" ];
maps\mp\alien\_utility::store_weapons_status( var_0 );
self.lastweapon = enter_gamemodespecificaction_getcurrentweapon( var_0 );
self.bleedoutspawnentityoverride = undefined;
self.laststand_pistol = self getweaponslistprimaries()[0];
self.being_revived = 0;
thread only_use_weapon();
maps\mp\alien\_persistence::take_player_currency( 500, 1 );
maps\mp\alien\_persistence::eog_player_update_stat( "downs", 1 );
maps\mp\alien\_alien_matchdata::inc_downed_counts();
maps\mp\alien\_challenge::update_challenge( "no_laststand" );
self setclientomnvar( "ui_alien_player_in_laststand", 1 );
}
exit_gamemodespecificaction()
{
thread maps\mp\alien\_music_and_dialog::ext_last_stand_sfx();
self.haveinvulnerabilityavailable = 1;
self.damageshieldexpiretime = gettime() + 3000;
self visionsetnakedforplayer( "", 0 );
maps\mp\alien\_utility::restore_client_fog( 0 );
maps\mp\alien\_progression::restore_all_perks();
self setweaponammostock( self.laststand_pistol, self.laststand_ammo );
self setweaponammoclip( self.laststand_pistol, self.laststand_clip_ammo );
var_0 = [ "alienflare_mp", "aliensemtex_mp", "alienclaymore_mp", "alientrophy_mp", "alienbetty_mp", "alienthrowingknife_mp", "alienmortar_shell_mp", "iw6_aliendlc21_mp", "iw6_aliendlc22_mp", "iw6_aliendlc31_mp", "iw6_aliendlc32_mp", "iw6_aliendlc43_mp", "iw6_aliendlc33_mp" ];
maps\mp\alien\_utility::restore_weapons_status( var_0 );
self setclientomnvar( "ui_alien_player_in_laststand", 0 );
self.laststand_ammo = undefined;
self.bleedoutspawnentityoverride = undefined;
maps\mp\alien\_alien_matchdata::inc_revived_counts();
self setspawnweapon( self.lastweapon );
maps\mp\alien\_death::set_kill_trigger_event_processed( self, 0 );
if ( maps\mp\alien\_utility::is_chaos_mode() )
maps\mp\alien\_chaos_laststand::chaos_exit_gamemodespecificaction( self );
}
waitinlaststand( var_0, var_1 )
{
self endon( "disconnect" );
self endon( "revive" );
level endon( "game_ended" );
if ( !var_1 )
{
visionfadetoblack( 35 );
thread playdeathsoundinlaststand( 35 );
if ( maps\mp\alien\_utility::isplayingsolo() )
{
take_laststand( self, 1 );
self setclientomnvar( "ui_laststand_end_milliseconds", gettime() + 5000 );
register_laststand_ammo();
}
else
self setclientomnvar( "ui_laststand_end_milliseconds", gettime() + 35000 );
}
if ( maps\mp\alien\_utility::isplayingsolo() )
return wait_for_self_revive( var_0, var_1 );
else
return wait_to_be_revived( self, self.origin, undefined, undefined, 1, 5000, ( 0.33, 0.75, 0.24 ), 35, 0, var_1 );
}
waitinspecator( var_0, var_1 )
{
self endon( "disconnect" );
level endon( "game_ended" );
self notify( "death" );
register_laststand_ammo();
common_scripts\utility::waitframe();
level.alienbbdata["times_died"]++;
maps\mp\alien\_persistence::eog_player_update_stat( "deaths", 1 );
if ( isdefined( self.bleedoutspawnentityoverride ) )
{
var_0 = self.bleedoutspawnentityoverride;
self.bleedoutspawnentityoverride = undefined;
}
if ( is_killed_by_kill_trigger( var_0 ) )
{
var_2 = common_scripts\utility::drop_to_ground( var_0.origin, 32, -64 );
var_3 = var_0.angles;
}
else
{
maps\mp\alien\_gamescore::update_team_encounter_performance( maps\mp\alien\_gamescore::get_team_score_component_name(), "num_players_bleed_out" );
maps\mp\alien\_alien_matchdata::inc_bleedout_counts();
var_2 = self.origin;
var_3 = self.angles;
}
maps\mp\alien\_challenge::update_challenge( "no_bleedout" );
self setclientomnvar( "ui_laststand_end_milliseconds", 0 );
var_4 = wait_to_be_revived( self, var_2, "prop_dogtags_friend_iw6", "mp_dogtag_spin", 0, 6000, ( 1, 0, 0 ), undefined, 1, var_1 );
maps\mp\_utility::updatesessionstate( "playing" );
self.forcespawnorigin = var_2;
self.forcespawnangles = var_3;
if ( isdefined( self.forceteleportorigin ) )
self.forcespawnorigin = self.forceteleportorigin;
if ( isdefined( self.forceteleportangles ) )
self.forcespawnangles = self.forceteleportangles;
maps\mp\gametypes\_playerlogic::spawnplayer( 1 );
}
wait_for_self_revive( var_0, var_1 )
{
if ( var_1 )
{
level waittill( "forever" );
self setclientomnvar( "ui_laststand_end_milliseconds", 0 );
return 0;
}
if ( is_killed_by_kill_trigger( var_0 ) )
self setorigin( var_0.origin );
else
wait 5;
self setclientomnvar( "ui_laststand_end_milliseconds", 0 );
return 1;
}
wait_to_be_revived( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 )
{
register_laststand_ammo();
var_11 = makereviveentity( var_0, var_1, var_2, var_3, var_4 );
var_11 thread cleanupreviveent( var_0 );
if ( maps\mp\alien\_utility::is_true( var_10 ) )
common_scripts\utility::_disableweapon();
if ( var_8 )
thread enter_spectate( var_0, var_1, var_11 );
if ( var_9 )
{
level waittill( "forever" );
return 0;
}
else
{
var_12 = var_11;
if ( var_8 )
var_12 = makereviveiconentity( var_0, var_11 );
var_12 maps\mp\alien\_hud::makereviveicon( var_0, var_6, var_7 );
var_0.reviveent = var_11;
var_0.reviveiconent = var_12;
var_11 thread laststandwaittilllifereceived( var_0, var_5 );
if ( isdefined( var_7 ) )
var_13 = var_11 waittill_any_ents_or_timeout_return( var_7, var_11, "revive_success", var_0, "force_bleed_out", var_0, "revive_success" );
else if ( !isdefined( var_7 ) && maps\mp\alien\_utility::is_true( var_10 ) )
var_13 = var_11 waittill_any_ents_return( var_11, "revive_success", var_0, "force_bleed_out", var_0, "revive_success" );
else
var_13 = var_11 common_scripts\utility::waittill_any_return( "revive_success" );
if ( var_13 == "timeout" && is_being_revived( var_0 ) )
var_13 = var_11 common_scripts\utility::waittill_any_return( "revive_success", "revive_fail" );
if ( var_13 == "revive_success" )
{
if ( maps\mp\alien\_utility::is_true( var_10 ) )
common_scripts\utility::_enableweapon();
return 1;
}
else
return 0;
}
}
laststandwaittilllifereceived( var_0, var_1 )
{
self endon( "death" );
level endon( "game_ended" );
for (;;)
{
self makeusable();
self waittill( "trigger", var_2 );
self makeunusable();
if ( !isplayer( var_2 ) || !var_2 isonground() )
continue;
var_3 = var_2 maps\mp\alien\_perk_utility::perk_getrevivetimescalar();
if ( var_0 maps\mp\alien\_persistence::is_upgrade_enabled( "faster_revive_upgrade" ) )
var_3 = var_3 * 1.2;
var_4 = int( var_1 / var_3 );
var_5 = get_revive_result( var_0, var_2, self.origin, var_4 );
if ( var_5 )
{
record_revive_success( var_2, var_0 );
break;
}
else
{
self notify( "revive_fail" );
continue;
}
}
var_0 setclientomnvar( "ui_laststand_end_milliseconds", 0 );
self notify( "revive_success" );
}
medic_revive( var_0, var_1 )
{
instant_revive( var_1 );
record_revive_success( var_0, var_1 );
}
record_revive_success( var_0, var_1 )
{
level thread maps\mp\alien\_music_and_dialog::playvoforrevived( var_0 );
var_0 maps\mp\alien\_persistence::set_player_revives();
var_0 maps\mp\alien\_persistence::eog_player_update_stat( "revives", 1 );
var_1 thread maps\mp\gametypes\_hud_message::playercardsplashnotify( "revived", var_0 );
}
makereviveentity( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = ( 0, 0, 20 );
var_1 = common_scripts\utility::drop_to_ground( var_1 + var_5, 32, -64 );
var_6 = spawn( "script_model", var_1 );
var_6 setcursorhint( "HINT_NOICON" );
var_6 sethintstring( &"PLATFORM_REVIVE" );
var_6.owner = var_0;
var_6.inuse = 0;
var_6.targetname = "revive_trigger";
if ( isdefined( var_2 ) )
var_6 setmodel( var_2 );
if ( isdefined( var_3 ) )
var_6 scriptmodelplayanim( var_3 );
if ( var_4 )
var_6 linkto( var_0, "tag_origin", var_5, ( 0, 0, 0 ) );
return var_6;
}
makereviveiconentity( var_0, var_1 )
{
var_2 = ( 0, 0, 30 );
var_3 = spawn( "script_model", var_1.origin + var_2 );
var_3 thread cleanupreviveent( var_0 );
return var_3;
}
maydolaststandalien( var_0, var_1, var_2 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return solo_maydolaststand( var_1, var_2 );
else
return coop_maydolaststand( var_2 );
}
solo_maydolaststand( var_0, var_1 )
{
if ( var_0 && is_killed_by_kill_trigger( var_1 ) )
return 0;
return 1;
}
coop_maydolaststand( var_0 )
{
if ( is_killed_by_kill_trigger( var_0 ) )
return 0;
return 1;
}
only_use_weapon( var_0 )
{
if ( isdefined( self.iscarrying ) && self.iscarrying )
wait 0.5;
var_1 = self getweaponslistprimaries()[0];
var_2 = [ "alienflare_mp", "aliensemtex_mp", "alienclaymore_mp", "alientrophy_mp", "alienbetty_mp", "iw6_aliendlc43_mp", "alienthrowingknife_mp", "alienmortar_shell_mp", "iw6_aliendlc21_mp", "iw6_aliendlc22_mp", "iw6_aliendlc31_mp", "iw6_aliendlc32_mp", "iw6_aliendlc33_mp" ];
var_3 = can_use_pistol_during_last_stand( self );
if ( var_3 )
var_2[var_2.size] = var_1;
_takeweaponsexceptlist( var_2 );
if ( var_3 )
{
var_4 = self getammocount( var_1 );
var_5 = weaponclipsize( var_1 );
if ( var_4 < var_5 )
self setweaponammoclip( var_1, var_5 );
self switchtoweapon( var_1 );
}
}
can_use_pistol_during_last_stand( var_0 )
{
if ( maps\mp\alien\_utility::is_chaos_mode() && var_0 get_last_stand_count() == 0 )
return 0;
return 1;
}
cleanupreviveent( var_0 )
{
self endon( "death" );
var_0 common_scripts\utility::waittill_any( "death", "disconnect", "revive" );
self delete();
}
player_init_laststand()
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
maps\mp\alien\_chaos_laststand::chaos_player_init_laststand();
else
regularextinction_player_init_laststand();
}
regularextinction_player_init_laststand()
{
if ( maps\mp\alien\_utility::isplayingsolo() && !issplitscreen() )
{
set_last_stand_count( self, 1 );
thread init_selfrevive_icon( 1 );
}
}
init_selfrevive_icon( var_0 )
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
wait 5.0;
var_1 = get_last_stand_count();
self setclientomnvar( "ui_alien_selfrevive", var_1 );
}
give_laststand( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = 1;
var_2 = var_0 get_last_stand_count() + var_1;
set_last_stand_count( var_0, var_2 );
}
take_laststand( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = 1;
var_2 = var_0 get_last_stand_count() - var_1;
set_last_stand_count( var_0, max( var_2, 0 ) );
}
gameshouldend( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return solo_gameshouldend( var_0 );
else
return coop_gameshouldend( var_0 );
}
solo_gameshouldend( var_0 )
{
if ( var_0.inlaststand )
return 0;
return var_0 get_last_stand_count() == 0;
}
coop_gameshouldend( var_0 )
{
return everyone_else_all_in_laststand( var_0 );
}
everyone_else_all_in_laststand( var_0 )
{
foreach ( var_2 in level.players )
{
if ( var_2 == var_0 )
continue;
if ( !player_in_laststand( var_2 ) )
return 0;
}
return 1;
}
get_revive_result( var_0, var_1, var_2, var_3 )
{
var_1.iscapturingcrate = 1;
var_4 = createuseent( var_2 );
var_4 thread cleanupreviveent( var_0 );
var_5 = revive_use_hold_think( var_0, var_1, var_4, var_3 );
var_1.iscapturingcrate = 0;
return var_5;
}
createuseent( var_0 )
{
var_1 = spawn( "script_origin", var_0 );
var_1.curprogress = 0;
var_1.usetime = 0;
var_1.userate = 8000;
var_1.inuse = 0;
return var_1;
}
playdeathsoundinlaststand( var_0 )
{
self endon( "disconnect" );
self endon( "revive" );
level endon( "game_ended" );
maps\mp\_utility::playdeathsound();
wait( var_0 / 3 );
maps\mp\_utility::playdeathsound();
wait( var_0 / 3 );
maps\mp\_utility::playdeathsound();
}
visionfadetoblack( var_0 )
{
var_1 = 2.4;
self visionsetnakedforplayer( "black_bw", var_0 * var_1 );
maps\mp\alien\_utility::restore_client_fog( 0 );
}
enter_spectate( var_0, var_1, var_2 )
{
var_0 endon( "disconnect" );
level endon( "game_ended" );
enter_camera_zoomout();
camera_zoomout( var_0, var_1, var_2 );
exit_camera_zoomout();
}
camera_zoomout( var_0, var_1, var_2 )
{
var_2 endon( "revive_success" );
var_3 = ( 0, 0, 30 );
var_4 = ( 0, 0, 100 );
var_5 = ( 0, 0, 400 );
var_6 = 2.0;
var_7 = 0.6;
var_8 = 0.6;
var_9 = var_1 + var_3;
var_10 = bullettrace( var_9, var_9 + var_4, 0, var_0 );
var_11 = var_10["position"];
var_10 = bullettrace( var_11, var_11 + var_5, 0, var_0 );
var_12 = var_10["position"];
var_13 = spawn( "script_model", var_11 );
var_13 setmodel( "tag_origin" );
var_13.angles = vectortoangles( ( 0, 0, -1 ) );
var_13 thread cleanupreviveent( var_0 );
var_0 cameralinkto( var_13, "tag_origin" );
var_13 moveto( var_12, var_6, var_7, var_8 );
var_13 waittill( "movedone" );
var_13 delete();
var_0 maps\mp\gametypes\_playerlogic::respawn_asspectator();
}
enter_camera_zoomout()
{
self playerhide();
self freezecontrols( 1 );
self visionsetnakedforplayer( "cheat_bw", 0 );
maps\mp\alien\_utility::restore_client_fog( 0 );
}
exit_camera_zoomout()
{
self cameraunlink();
self freezecontrols( 0 );
}
revive_use_hold_think( var_0, var_1, var_2, var_3 )
{
enter_revive_use_hold_think( var_0, var_1, var_2, var_3 );
thread wait_for_exit_revive_use_hold_think( var_0, var_1, var_2 );
var_4 = 0;
var_5 = 0;
while ( should_revive_continue( var_1 ) )
{
if ( var_4 >= var_3 )
{
var_5 = 1;
break;
}
var_0 setclientomnvar( "ui_securing_progress", var_4 / var_3 );
var_1 setclientomnvar( "ui_securing_progress", var_4 / var_3 );
var_4 = var_4 + 50;
common_scripts\utility::waitframe();
}
var_2 notify( "use_hold_think_complete" );
var_2 waittill( "exit_use_hold_think_complete" );
return var_5;
}
enter_revive_use_hold_think( var_0, var_1, var_2, var_3 )
{
var_0 setclientomnvar( "ui_securing", 4 );
var_1 setclientomnvar( "ui_securing", 3 );
var_0.being_revived = 1;
var_1 playerlinkto( var_2 );
var_1 playerlinkedoffsetenable();
var_1 maps\mp\alien\_utility::disable_weapon_timeout( var_3 + 0.05, "revive_weapon_management" );
var_1.isreviving = 1;
}
wait_for_exit_revive_use_hold_think( var_0, var_1, var_2 )
{
common_scripts\utility::waittill_any_ents( var_2, "use_hold_think_complete", var_0, "disconnect", var_0, "revive_success", var_0, "force_bleed_out" );
if ( maps\mp\_utility::isreallyalive( var_0 ) )
{
var_0.being_revived = 0;
var_0 setclientomnvar( "ui_securing", 0 );
}
var_1 unlink();
var_1 maps\mp\alien\_utility::enable_weapon_wrapper( "revive_weapon_management" );
var_1 setclientomnvar( "ui_securing", 0 );
var_1.isreviving = 0;
var_2 notify( "exit_use_hold_think_complete" );
}
should_revive_continue( var_0 )
{
return !level.gameended && maps\mp\_utility::isreallyalive( var_0 ) && var_0 usebuttonpressed() && !var_0.inlaststand;
}
register_laststand_ammo()
{
self.laststand_ammo = self getweaponammostock( self.laststand_pistol );
self.laststand_clip_ammo = self getweaponammoclip( self.laststand_pistol );
}
_takeweaponsexceptlist( var_0 )
{
var_1 = self getweaponslistall();
foreach ( var_3 in var_1 )
{
if ( common_scripts\utility::array_contains( var_0, var_3 ) )
continue;
else
self takeweapon( var_3 );
}
}
blackbox_laststand( var_0, var_1 )
{
level.alienbbdata["times_downed"]++;
var_2 = isagent( var_0 );
if ( var_2 )
{
var_3 = ( gettime() - var_0.birthtime ) / 1000;
var_4 = "unknown agent";
if ( isdefined( var_0.agent_type ) )
{
var_4 = var_0.agent_type;
if ( isdefined( var_0.alien_type ) )
var_4 = var_0.alien_type;
}
}
else
{
var_3 = 0;
if ( isplayer( var_0 ) )
var_4 = "player";
else
var_4 = "nonagent";
}
var_5 = 0.0;
var_6 = 0.0;
var_7 = 0.0;
if ( isdefined( var_0 ) && isagent( var_0 ) )
{
var_5 = var_0.origin[0];
var_6 = var_0.origin[1];
var_7 = var_0.origin[2];
}
var_8 = "";
if ( isdefined( self.name ) )
var_8 = self.name;
var_9 = -1;
if ( isdefined( level.current_cycle_num ) )
var_9 = level.current_cycle_num;
var_10 = "unknown";
if ( isdefined( level.current_hive_name ) )
var_10 = level.current_hive_name;
bbprint( "alienplayerlaststand", "cyclenum %i hivename %s attackerisagent %i attackeragenttype %s attackeralivetime %f attackerx %f attackery %f attackerz %f victimx %f victimy %f victimz %f victimname %s damage %i", var_9, var_10, var_2, var_4, var_3, var_5, var_6, var_7, self.origin[0], self.origin[1], self.origin[2], var_8, var_1 );
}
waittill_any_ents_or_timeout_return( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12, var_13, var_14 )
{
self endon( "death" );
var_15 = spawnstruct();
var_1 childthread common_scripts\utility::waittill_string( var_2, var_15 );
if ( isdefined( var_3 ) && isdefined( var_4 ) )
var_3 childthread common_scripts\utility::waittill_string( var_4, var_15 );
if ( isdefined( var_5 ) && isdefined( var_6 ) )
var_5 childthread common_scripts\utility::waittill_string( var_6, var_15 );
if ( isdefined( var_7 ) && isdefined( var_8 ) )
var_7 childthread common_scripts\utility::waittill_string( var_8, var_15 );
if ( isdefined( var_9 ) && isdefined( var_10 ) )
var_9 childthread common_scripts\utility::waittill_string( var_10, var_15 );
if ( isdefined( var_11 ) && isdefined( var_12 ) )
var_11 childthread common_scripts\utility::waittill_string( var_12, var_15 );
if ( isdefined( var_13 ) && isdefined( var_14 ) )
var_13 childthread common_scripts\utility::waittill_string( var_14, var_15 );
var_15 childthread common_scripts\utility::_timeout( var_0 );
var_15 waittill( "returned", var_16 );
var_15 notify( "die" );
return var_16;
}
waittill_any_ents_return( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12, var_13 )
{
self endon( "death" );
var_14 = spawnstruct();
var_0 childthread common_scripts\utility::waittill_string( var_1, var_14 );
if ( isdefined( var_2 ) && isdefined( var_3 ) )
var_2 childthread common_scripts\utility::waittill_string( var_3, var_14 );
if ( isdefined( var_4 ) && isdefined( var_5 ) )
var_4 childthread common_scripts\utility::waittill_string( var_5, var_14 );
if ( isdefined( var_6 ) && isdefined( var_7 ) )
var_6 childthread common_scripts\utility::waittill_string( var_7, var_14 );
if ( isdefined( var_8 ) && isdefined( var_9 ) )
var_8 childthread common_scripts\utility::waittill_string( var_9, var_14 );
if ( isdefined( var_10 ) && isdefined( var_11 ) )
var_10 childthread common_scripts\utility::waittill_string( var_11, var_14 );
if ( isdefined( var_12 ) && isdefined( var_13 ) )
var_12 childthread common_scripts\utility::waittill_string( var_13, var_14 );
var_14 waittill( "returned", var_15 );
var_14 notify( "die" );
return var_15;
}
is_killed_by_kill_trigger( var_0 )
{
return isdefined( var_0 );
}
set_last_stand_count( var_0, var_1 )
{
var_1 = int( var_1 );
var_0 setcoopplayerdata( "alienSession", "last_stand_count", var_1 );
var_0 setclientomnvar( "ui_alien_selfrevive", var_1 );
}
get_last_stand_count()
{
return self getcoopplayerdata( "alienSession", "last_stand_count" );
}
is_being_revived( var_0 )
{
return var_0.being_revived;
}
player_in_laststand( var_0 )
{
return var_0.inlaststand;
}
instant_revive( var_0 )
{
var_0 notify( "revive_success" );
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,970 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
dlc_vo_init_on_player_spawn()
{
if ( !isdefined( level.use_dlc_vo ) )
{
level.use_dlc_vo = 1;
level thread vo_listener_init();
level thread check_for_drill_planted();
level thread check_for_direction_vo();
}
thread vo_listener_player_init();
thread check_for_reloading();
thread check_for_last_stand();
thread check_for_grenade_throw();
}
vo_listener_init()
{
var_0 = [];
var_0["drill_repair"] = ::playvofordrillrepair;
var_0["drill_repaired"] = ::playvofordrillrepaircomplete;
var_0["drill_planted"] = ::playvofordrillonline;
var_0["inform_explosives"] = ::playvoforexplosives;
var_0["inform_reloading_generic"] = ::playvoforreloading;
var_0["inform_shield"] = ::playvoforriotshield;
var_0["online_mk32"] = ::playvoformk32;
var_0["online_vulture"] = ::playvoforvulture;
var_0["ready_incendiaryrounds"] = ::playvoforincendiaryammo;
var_0["ready_explosiverounds"] = ::playvoforexplosiveammo;
var_0["inbound_brute"] = ::playvoforbrutespawn;
var_0["reaction_casualty_generic"] = ::player_casualty_vo;
var_0["direction_vo"] = ::playdirectionvo;
var_0["to_gate"] = ::playtogatevo;
var_0["tesla_generator_basic"] = ::playvofortesla;
var_0["tesla_generator_med"] = ::playvofortesla;
var_0["tesla_generator_adv"] = ::playvofortesla;
var_0["pipe_bomb"] = ::playvoforpipebomb;
var_0["sticky_flare"] = ::playvoforstickyflare;
var_0["pet_trap"] = ::playvoforhypnotrap;
var_0["venom_basic"] = ::playvoforvenom;
var_0["venom_basic_alt"] = ::playvoforvenom;
var_0["venom_lightning"] = ::playvoforvenom;
var_0["venom_fire"] = ::playvoforvenom;
var_0["venom_turret"] = ::playvoforvenom;
if ( level.script == "mp_alien_armory" )
{
var_0["spider_vo"] = ::playspidervo;
var_0["spider_retreat"] = ::playspiderretreatvo;
}
if ( level.script == "mp_alien_beacon" )
{
var_0["open_door_move"] = ::playvofordooropen;
var_0["inbound_seeder"] = ::playvoforseederspawn;
}
if ( level.script == "mp_alien_dlc3" )
{
var_0["inbound_mammoth"] = ::playvoformammothspawn;
var_0["phantom_backup"] = ::playvoformammothpound;
var_0["warn_dig"] = ::playvoformammothburrow;
var_0["warn_underground"] = ::playvoformammothunderground;
var_0["warn_emerge"] = ::playvoformammothemerge;
var_0["inbound_gargoyle"] = ::playvoforgargoylespawn;
var_0["inbound_bomber"] = ::playvoforbomberspawn;
var_0["bomber_attack"] = ::playvoforbomberattack;
}
if ( level.script == "mp_alien_last" )
{
var_0["inbound_mammoth"] = ::playvoformammothspawn;
var_0["phantom_backup"] = ::playvoformammothpound;
var_0["warn_dig"] = ::playvoformammothburrow;
var_0["warn_underground"] = ::playvoformammothunderground;
var_0["warn_emerge"] = ::playvoformammothemerge;
var_0["inbound_gargoyle"] = ::playvoforgargoylespawn;
var_0["inbound_bomber"] = ::playvoforbomberspawn;
var_0["bomber_attack"] = ::playvoforbomberattack;
}
if ( isdefined( level.level_specific_vo_callouts ) )
var_0 = [[ level.level_specific_vo_callouts ]]( var_0 );
for (;;)
{
level waittill( "dlc_vo_notify", var_1, var_2 );
if ( isdefined( var_0[var_1] ) )
{
if ( isdefined( var_2 ) )
{
level thread [[ var_0[var_1] ]]( var_2 );
continue;
}
level thread [[ var_0[var_1] ]]();
}
}
}
vo_listener_player_init()
{
self endon( "disconnect" );
self endon( "death" );
var_0 = [];
var_0["intel_recovered"] = ::playvoforintelrecovered;
var_0["elite_killed"] = ::playvoforneutralizedalien;
var_0["spitter_killed"] = ::playvoforneutralizedalien;
var_0["locust_killed"] = ::playvoforneutralizedalien;
var_0["gargoyle_killed"] = ::playvoforkilledgargoyle;
var_0["pain"] = ::player_dlc_pain_vo;
var_0["bleeding_out"] = ::playvoforlaststand;
var_0["weapon"] = ::playvoforweaponcraftingpiece;
var_0["grenade"] = ::playvoforcraftingpiece;
var_0["tesla"] = ::playvoforcraftingpiece;
var_0["trap"] = ::playvoforcraftingpiece;
for (;;)
{
self waittill( "dlc_vo_notify", var_1, var_2 );
if ( isdefined( var_0[var_1] ) )
{
if ( isdefined( var_2 ) )
{
level thread [[ var_0[var_1] ]]( var_2 );
continue;
}
level thread [[ var_0[var_1] ]]();
}
}
}
playvofordrillrepair( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return;
if ( !isdefined( var_0 ) || !isalive( var_0 ) || var_0 maps\mp\alien\_utility::is_in_laststand() )
return;
if ( level.script == "mp_alien_last" )
{
level notify( "dlc_vo_notify", "last_vo", "conduit_repairing" );
return;
}
var_1 = var_0.vo_prefix + "drill_repair";
var_0 play_vo_on_player( var_1, undefined, 2 );
}
playvofordrillrepaircomplete( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return;
if ( !isdefined( var_0 ) || !isalive( var_0 ) || var_0 maps\mp\alien\_utility::is_in_laststand() )
return;
if ( level.script == "mp_alien_last" )
{
level notify( "dlc_vo_notify", "last_vo", "conduit_repaired" );
return;
}
var_1 = var_0.vo_prefix + "drill_repaired";
var_0 play_vo_on_player( var_1, undefined, 2 );
}
playvofordrillonline( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return;
if ( !isdefined( var_0 ) || !isalive( var_0 ) || var_0 maps\mp\alien\_utility::is_in_laststand() )
return;
if ( level.script == "mp_alien_last" )
{
level notify( "dlc_vo_notify", "last_vo", "conduit_start" );
return;
}
var_1 = var_0.vo_prefix + "online_drill";
var_0 play_vo_on_player( var_1, undefined, 5 );
}
playvoforexplosives( var_0 )
{
var_1 = var_0.vo_prefix + "inform_explosives";
if ( maps\mp\alien\_utility::isplayingsolo() )
{
if ( randomint( 100 ) > 50 )
return;
var_1 = var_0.vo_prefix + "equip_ammo_solo";
}
var_0 thread play_vo_on_player( var_1 );
}
playvoforreloading( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return;
var_1 = 60000;
var_2 = gettime();
if ( !isdefined( var_0.next_reload_vo_time ) )
var_0.next_reload_vo_time = var_2 + randomintrange( var_1, var_1 + 2000 );
else if ( var_2 < var_0.next_reload_vo_time )
return;
var_3 = var_0.vo_prefix + "inform_reloading_generic";
var_0 thread play_vo_on_player( var_3, undefined, 1 );
var_0.next_reload_vo_time = var_2 + randomintrange( var_1, var_1 + 1500 );
}
check_for_reloading()
{
self endon( "disconnect" );
self endon( "death" );
for (;;)
{
self waittill( "reload_start" );
var_0 = self getcurrentweapon();
var_1 = weaponclipsize( var_0 );
var_2 = self getcurrentweaponclipammo();
if ( var_2 < var_1 / 3 )
level notify( "dlc_vo_notify", "inform_reloading_generic", self );
}
}
check_for_grenade_throw()
{
self endon( "disconnect" );
self endon( "death" );
for (;;)
{
self waittill( "grenade_fire", var_0, var_1 );
if ( var_1 == "iw6_aliendlc21_mp" )
level notify( "dlc_vo_notify", "sticky_flare", self );
if ( var_1 == "iw6_aliendlc22_mp" )
level notify( "dlc_vo_notify", "pipe_bomb", self );
}
}
playvoforriotshield( var_0 )
{
var_1 = var_0.vo_prefix + "inform_shield";
if ( maps\mp\alien\_utility::isplayingsolo() )
{
if ( randomint( 100 ) > 50 )
return;
var_1 = var_0.vo_prefix + "equip_ammo_solo";
}
var_0 thread play_vo_on_player( var_1 );
}
playvofortesla( var_0 )
{
var_1 = var_0.vo_prefix + "tesla_live";
var_0 thread play_vo_on_player( var_1 );
}
playvoforpipebomb( var_0 )
{
var_1 = var_0.vo_prefix + "pipebomb_live";
if ( randomint( 100 ) > 20 )
return;
var_0 thread play_vo_on_player( var_1 );
}
playvoforstickyflare( var_0 )
{
var_1 = var_0.vo_prefix + "sticky_live";
if ( maps\mp\alien\_utility::isplayingsolo() )
{
if ( randomint( 100 ) > 50 )
return;
}
var_0 thread play_vo_on_player( var_1 );
}
playvoforhypnotrap( var_0 )
{
var_1 = var_0.vo_prefix + "hypno_live";
var_0 thread play_vo_on_player( var_1 );
}
playvoforvenom( var_0 )
{
var_1 = var_0.vo_prefix + "venom_live";
if ( maps\mp\alien\_utility::isplayingsolo() )
{
if ( randomint( 100 ) > 50 )
return;
}
var_0 thread play_vo_on_player( var_1 );
}
playvoforcraftingpiece( var_0 )
{
var_1 = var_0.vo_prefix + "pickup_crafting";
var_2 = 30000;
var_3 = gettime();
if ( !isdefined( var_0.next_crafting_vo_time ) )
var_0.next_crafting_vo_time = var_3 + randomintrange( var_2, var_2 + 2000 );
else if ( var_3 < var_0.next_crafting_vo_time )
return;
var_0 play_vo_on_player( var_1, undefined, undefined, undefined, undefined, 1 );
var_0.next_crafting_vo_time = var_3 + randomintrange( var_2, var_2 + 1500 );
}
playvoforweaponcraftingpiece( var_0 )
{
var_1 = var_0.vo_prefix + "pickup_weapon";
var_2 = 30000;
var_3 = gettime();
if ( !isdefined( var_0.next_crafting_vo_time ) )
var_0.next_crafting_vo_time = var_3 + randomintrange( var_2, var_2 + 2000 );
else if ( var_3 < var_0.next_crafting_vo_time )
return;
var_0 play_vo_on_player( var_1, undefined, undefined, undefined, undefined, 1 );
var_0.next_crafting_vo_time = var_3 + randomintrange( var_2, var_2 + 1500 );
}
playvoforintelrecovered( var_0 )
{
wait 0.25;
if ( maps\mp\alien\_utility::isplayingsolo() )
return;
if ( !isdefined( var_0 ) || !isalive( var_0 ) )
return;
var_1 = var_0.vo_prefix + "intel_recovered";
var_0 play_vo_on_player( var_1 );
}
playvoformk32( var_0 )
{
var_1 = var_0.vo_prefix + "online_mk32";
var_0 play_vo_on_player( var_1 );
}
playvoforvulture( var_0 )
{
var_1 = var_0.vo_prefix + "online_vulture";
var_0 play_vo_on_player( var_1 );
}
playvoforincendiaryammo( var_0 )
{
var_1 = var_0.vo_prefix + "ready_incendiaryrounds";
if ( maps\mp\alien\_utility::isplayingsolo() )
{
if ( randomint( 100 ) > 50 )
return;
var_1 = var_0.vo_prefix + "equip_ammo_solo";
}
var_0 thread play_vo_on_player( var_1 );
}
playvoforexplosiveammo( var_0 )
{
var_1 = var_0.vo_prefix + "ready_explosiverounds";
if ( maps\mp\alien\_utility::isplayingsolo() )
{
if ( randomint( 100 ) > 50 )
return;
var_1 = var_0.vo_prefix + "equip_ammo_solo";
}
var_0 thread play_vo_on_player( var_1 );
}
playvoforbrutespawn( var_0 )
{
wait 3;
if ( !isdefined( var_0 ) )
return;
if ( randomint( 100 ) > 10 )
return;
var_1 = maps\mp\alien\_utility::get_array_of_valid_players( 1, var_0.origin );
if ( var_1.size < 1 )
return;
var_2 = var_1[0];
var_3 = var_2.vo_prefix + "inbound_brute";
var_2 play_vo_on_player( var_3 );
}
playvoforseederspawn( var_0 )
{
wait 3;
if ( !isdefined( var_0 ) )
return;
if ( randomint( 100 ) > 50 )
return;
var_1 = maps\mp\alien\_utility::get_array_of_valid_players( 1, var_0.origin );
if ( var_1.size < 1 )
return;
var_2 = var_1[0];
var_3 = var_2.vo_prefix + "warn_seeder";
var_2 play_vo_on_player( var_3 );
}
playvoformammothspawn( var_0 )
{
wait 3;
if ( !isdefined( var_0 ) )
return;
var_1 = maps\mp\alien\_utility::get_array_of_valid_players( 1, var_0.origin );
if ( var_1.size < 1 )
return;
var_2 = var_1[0];
var_3 = var_2.vo_prefix + "warn_mammoth";
var_2 play_vo_on_player( var_3, undefined, 5 );
}
playvoformammothpound( var_0 )
{
playvoformammoth( "phantom_backup", var_0 );
}
playvoformammothburrow( var_0 )
{
playvoformammoth( "warn_dig", var_0 );
}
playvoformammothunderground( var_0 )
{
playvoformammoth( "warn_underground", var_0 );
}
playvoformammothemerge( var_0 )
{
playvoformammoth( "warn_emerge", var_0 );
}
playvoformammoth( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
return;
if ( !isdefined( var_0 ) )
return;
var_2 = 15000;
var_3 = gettime();
if ( !isdefined( level.next_mammoth_vo_time ) )
level.next_mammoth_vo_time = var_3 + randomintrange( var_2, var_2 + 2000 );
else if ( var_3 < level.next_mammoth_vo_time )
return;
if ( var_0 == "warn_dig" && randomint( 2 ) == 0 )
return;
var_4 = maps\mp\alien\_utility::get_array_of_valid_players();
if ( var_4.size < 1 )
return;
var_5 = var_4[0];
if ( !soundexists( var_5.vo_prefix + var_0 ) )
{
iprintln( "mammoth vo: " + var_5.vo_prefix + var_0 );
return;
}
var_6 = var_5.vo_prefix + var_0;
level.next_mammoth_vo_time = var_3 + randomintrange( var_2, var_2 + 1500 );
var_5 play_vo_on_player( var_6, undefined, 3 );
}
playvoforgargoylespawn( var_0 )
{
wait 3;
if ( !isdefined( var_0 ) )
return;
if ( randomint( 100 ) > 50 )
return;
var_1 = maps\mp\alien\_utility::get_array_of_valid_players( 1, var_0.origin );
if ( var_1.size < 1 )
return;
var_2 = var_1[0];
var_3 = var_2.vo_prefix + "spawn_gargoyle";
var_2 play_vo_on_player( var_3 );
}
playvoforbomberspawn( var_0 )
{
wait 3;
if ( !isdefined( var_0 ) )
return;
var_1 = 5000;
var_2 = gettime();
if ( !isdefined( level.next_bomber_spawn_vo_time ) )
level.next_bomber_spawn_vo_time = var_2 + randomintrange( var_1, var_1 + 2000 );
else if ( var_2 < level.next_bomber_spawn_vo_time )
return;
var_3 = maps\mp\alien\_utility::get_array_of_valid_players( 1, var_0.origin );
if ( var_3.size < 1 )
return;
var_4 = var_3[0];
var_5 = [ "spotted_bats", "spawn_bats" ];
var_6 = var_4.vo_prefix + common_scripts\utility::random( var_5 );
level.next_bomber_spawn_vo_time = var_2 + randomintrange( var_1, var_1 + 1500 );
var_4 play_vo_on_player( var_6 );
}
playvoforbomberattack( var_0 )
{
if ( !isdefined( var_0 ) )
return;
var_1 = 15000;
var_2 = gettime();
if ( !isdefined( level.next_bomber_vo_time ) )
level.next_bomber_vo_time = var_2 + randomintrange( var_1, var_1 + 2000 );
else if ( var_2 < level.next_bomber_vo_time )
return;
if ( randomint( 100 ) > 50 )
return;
var_3 = maps\mp\alien\_utility::get_array_of_valid_players( 1, var_0.origin );
if ( var_3.size < 1 )
return;
var_4 = var_3[0];
var_5 = var_4.vo_prefix + "warn_bats";
level.next_bomber_vo_time = var_2 + randomintrange( var_1, var_1 + 1500 );
var_4 play_vo_on_player( var_5, undefined, 1 );
}
playvoforneutralizedalien( var_0 )
{
var_1 = var_0.vo_prefix + "neutralized_alien";
if ( maps\mp\alien\_utility::isplayingsolo() )
{
if ( randomint( 100 ) > 50 )
return;
}
var_0 thread play_vo_on_player( var_1, undefined, 3 );
}
playvoforkilledgargoyle( var_0 )
{
var_1 = var_0.vo_prefix + "defeat_gargoyle";
if ( maps\mp\alien\_utility::isplayingsolo() )
{
if ( randomint( 100 ) > 50 )
return;
}
var_0 thread play_vo_on_player( var_1, undefined, 3 );
}
playvofordooropen( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return;
if ( randomint( 100 ) > 50 )
return;
var_1 = 0;
var_2 = 10;
while ( maps\mp\agents\_agent_utility::getactiveagentsoftype( "alien" ).size > 0 )
{
wait 1;
var_1++;
if ( var_1 > var_2 )
return;
}
var_3 = maps\mp\alien\_utility::get_array_of_valid_players( 1, var_0.origin );
if ( var_3.size < 1 )
return;
var_4 = var_3[0];
var_5 = var_4.vo_prefix + "open_door_move";
var_4 play_vo_on_player( var_5, undefined, 5 );
}
player_dlc_pain_vo( var_0 )
{
var_1 = 1500;
var_2 = gettime();
if ( level.script == "mp_alien_last" && maps\mp\alien\_utility::is_true( var_0.vo_system_playing_vo ) )
return;
if ( !isdefined( var_0.next_pain_vo_time ) )
var_0.next_pain_vo_time = var_2 + randomintrange( var_1, var_1 + 2000 );
else if ( var_2 < var_0.next_pain_vo_time )
return;
var_3 = var_0.vo_prefix + "pain";
if ( soundexists( var_0.vo_prefix + "plr_" + "pain" ) )
var_0 playlocalsound( var_0.vo_prefix + "plr_" + "pain" );
else
var_0 playlocalsound( var_3 );
var_0.next_pain_vo_time = var_2 + randomintrange( var_1, var_1 + 1500 );
}
is_vo_system_playing()
{
foreach ( var_1 in level.players )
{
if ( maps\mp\alien\_utility::is_true( var_1.vo_system_playing_vo ) )
return 1;
}
return 0;
}
remove_drill_vo_once_repaired()
{
for (;;)
{
while ( !isdefined( level.drill ) )
wait 0.1;
level.drill waittill( "drill_repaired" );
foreach ( var_1 in level.players )
{
var_1 thread remove_drill_vo_on_player( "drill_hot" );
var_1 thread remove_drill_vo_on_player( "drill_repair" );
}
}
}
remove_drill_vo_once_complete()
{
for (;;)
{
level waittill( "drill_planted" );
level.drill waittill( "drill_complete" );
foreach ( var_1 in level.players )
{
var_1 thread remove_drill_vo_on_player( "drill_attacked" );
var_1 thread remove_drill_vo_on_player( "drill_repaired" );
var_1 thread remove_drill_vo_on_player( "drill_halfway" );
}
}
}
remove_drill_vo_on_player( var_0 )
{
foreach ( var_3, var_2 in level.alien_vo_priority_level )
maps\mp\alien\_music_and_dialog::remove_vo_data( var_0, var_2 );
}
player_casualty_vo( var_0 )
{
var_1 = maps\mp\alien\_utility::get_array_of_valid_players();
var_1 = common_scripts\utility::array_remove( var_1, var_0 );
if ( var_1.size < 1 )
return;
var_0 = var_1[0];
var_2 = var_0.vo_prefix + "reaction_casualty_generic";
var_0 play_vo_on_player( var_2, undefined, 1 );
}
playtogatevo()
{
level endon( "stop_dlc_vo_notify_to_gate" );
wait 20;
var_0 = maps\mp\alien\_utility::get_array_of_valid_players();
if ( var_0.size < 1 )
return;
var_1 = var_0[0];
var_2 = var_1.vo_prefix + "to_gate";
var_1 play_vo_on_player( var_2 );
}
playvoforlaststand( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return;
var_1 = var_0.vo_prefix + "last_stand";
var_0 thread play_vo_on_player( var_1, undefined, 1 );
}
play_vo_on_player( var_0, var_1, var_2, var_3, var_4, var_5 )
{
maps\mp\alien\_music_and_dialog::play_vo_on_player( var_0, var_1, var_2, var_3, var_4, var_5 );
}
check_for_last_stand()
{
self endon( "disconnect" );
self endon( "death" );
for (;;)
{
self waittill( "last_stand" );
downed_sequence_vo_handler();
}
}
check_for_drill_planted()
{
for (;;)
{
level waittill( "drill_planted", var_0 );
level notify( "dlc_vo_notify", "drill_planted", var_0 );
}
}
downed_sequence_vo_handler()
{
self endon( "disconnect" );
self endon( "death" );
self endon( "revive" );
wait 4.0;
level notify( "dlc_vo_notify", "reaction_casualty_generic", self );
wait 10.0;
while ( self.being_revived )
wait 0.1;
self notify( "dlc_vo_notify", "bleeding_out", self );
wait 8.0;
while ( self.being_revived )
wait 0.1;
self notify( "dlc_vo_notify", "bleeding_out", self );
}
playdirectionvo( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return;
if ( !isdefined( var_0 ) )
return;
var_1 = maps\mp\alien\_utility::get_array_of_valid_players();
if ( var_1.size < 1 )
return;
var_2 = var_1[0];
var_3 = 10000;
var_4 = gettime();
var_5 = 0;
if ( !isdefined( level.next_direction_vo_time ) )
level.next_direction_vo_time = var_4 + randomintrange( var_3, var_3 + 2000 );
else if ( var_4 < level.next_direction_vo_time )
return;
if ( !isdefined( level.last_direction_vo ) || level.last_direction_vo != var_0 )
{
level.last_direction_vo = var_0;
var_5 = 0;
}
else if ( level.last_direction_vo == var_0 )
{
level.next_direction_vo_time = var_4 + randomintrange( var_3, var_3 + 1500 );
var_5++;
if ( var_5 > 5 )
level.last_direction_vo = undefined;
return;
}
level.next_direction_vo_time = var_4 + randomintrange( var_3, var_3 + 1500 );
if ( var_0 == "rooftop" )
var_0 = "roof";
if ( var_0 == "security_gate" )
var_0 = "gate";
var_6 = var_2.vo_prefix + "from_" + var_0;
if ( var_0 == "spawn_vent" || var_0 == "spawn_grate" )
var_6 = var_2.vo_prefix + var_0;
if ( var_0 == "above" || var_0 == "walls" || var_0 == "spores" )
var_6 = var_2.vo_prefix + "spawn_" + var_0;
var_2 play_vo_on_player( var_6, undefined, 1 );
}
check_for_direction_vo()
{
var_0 = getentarray( "vo_direction_trigger", "targetname" );
foreach ( var_2 in var_0 )
var_2 thread notify_when_triggered( var_2.script_noteworthy );
}
notify_when_triggered( var_0 )
{
self endon( "death" );
for (;;)
{
self waittill( "trigger", var_1 );
if ( isagent( var_1 ) && isdefined( var_1.team ) && var_1.team == "axis" && isdefined( var_1.alien_type ) && var_1.alien_type != "spider" )
{
if ( isdefined( level.current_direction_triggers ) )
{
if ( !is_in_array( level.current_direction_triggers, var_0 ) )
continue;
}
level notify( "dlc_vo_notify", "direction_vo", var_0 );
}
wait 0.25;
}
}
playspidervo( var_0 )
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return;
if ( !isdefined( var_0 ) )
return;
var_1 = maps\mp\alien\_utility::get_array_of_valid_players();
if ( var_1.size < 1 )
return;
var_2 = var_1[0];
if ( !soundexists( var_2.vo_prefix + var_0 ) )
return;
var_3 = 10000;
var_4 = gettime();
var_5 = 0;
if ( !isdefined( level.next_spider_vo_time ) )
level.next_spider_vo_time = var_4 + randomintrange( var_3, var_3 + 2000 );
else if ( var_4 < level.next_spider_vo_time )
return;
if ( !isdefined( level.last_spider_vo ) || level.last_spider_vo != var_0 )
{
level.last_spider_vo = var_0;
var_5 = 0;
}
else if ( level.last_spider_vo == var_0 )
{
level.next_spider_vo_time = var_4 + randomintrange( var_3, var_3 + 1500 );
var_5++;
if ( var_5 > 5 )
level.last_spider_vo = undefined;
return;
}
level.next_direction_vo_time = var_4 + randomintrange( var_3, var_3 + 1500 );
var_6 = var_2.vo_prefix + var_0;
var_2 play_vo_on_player( var_6 );
}
playspiderretreatvo()
{
if ( maps\mp\alien\_utility::isplayingsolo() )
return;
var_0 = maps\mp\alien\_utility::get_array_of_valid_players();
if ( var_0.size < 1 )
return;
var_1 = var_0[0];
var_2 = var_1.vo_prefix + "spider_retreat";
var_1 play_vo_on_player( var_2 );
}
is_in_array( var_0, var_1 )
{
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
if ( var_0[var_2] == var_1 )
return 1;
}
return 0;
}

212
maps/mp/alien/_nuke.gsc Normal file
View File

@ -0,0 +1,212 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.nukevisionset = "alien_nuke";
level.nukevisionsetfailed = "alien_nuke_blast";
if ( level.script == "mp_alien_last" )
level._effect["nuke_flash"] = loadfx( "vfx/moments/alien/player_nuke_flash_alien_last" );
else
level._effect["nuke_flash"] = loadfx( "fx/explosions/player_death_nuke_flash_alien" );
setdvarifuninitialized( "scr_nukeTimer", 10 );
setdvarifuninitialized( "scr_nukeCancelMode", 0 );
level.nuketimer = getdvarint( "scr_nukeTimer" );
level.cancelmode = getdvarint( "scr_nukeCancelMode" );
level.nukeinfo = spawnstruct();
level.nukeinfo.xpscalar = 2;
level.nukedetonated = undefined;
level thread onplayerconnect();
}
delaythread_nuke( var_0, var_1 )
{
level endon( "nuke_cancelled" );
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_0 );
thread [[ var_1 ]]();
}
donukesimple()
{
level.nukeinfo.player = self;
level.nukeinfo.team = self.pers["team"];
level.nukeincoming = 1;
level thread delaythread_nuke( level.nuketimer - 3.3, ::nukesoundincoming );
level thread delaythread_nuke( level.nuketimer, ::nukesoundexplosion );
level thread delaythread_nuke( level.nuketimer, ::nukeslowmo );
level thread delaythread_nuke( level.nuketimer, ::nukeeffects );
level thread delaythread_nuke( level.nuketimer + 0.25, ::nukevision );
level thread delaythread_nuke( level.nuketimer + 1.5, ::nukedeath );
if ( !isdefined( level.nuke_soundobject ) )
{
level.nuke_soundobject = spawn( "script_origin", ( 0, 0, 1 ) );
level.nuke_soundobject hide();
}
}
nukedeath()
{
level notify( "nuke_death" );
}
nukesoundincoming()
{
level endon( "nuke_cancelled" );
if ( isdefined( level.nuke_soundobject ) )
level.nuke_soundobject playsound( "nuke_incoming" );
}
nukesoundexplosion()
{
level endon( "nuke_cancelled" );
if ( isdefined( level.nuke_soundobject ) )
{
level.nuke_soundobject playsound( "nuke_explosion" );
level.nuke_soundobject playsound( "nuke_wave" );
}
}
nukeeffects()
{
level endon( "nuke_cancelled" );
level.nukedetonated = 1;
foreach ( var_1 in level.players )
{
var_2 = anglestoforward( var_1.angles );
var_2 = ( var_2[0], var_2[1], 0 );
var_2 = vectornormalize( var_2 );
var_3 = 5000;
var_4 = var_1.origin + var_2 * var_3;
if ( isdefined( level.nukeloc ) )
var_4 = level.nukeloc;
var_5 = ( 0, var_1.angles[1] + 180, 90 );
if ( isdefined( level.nukeangles ) )
var_5 = level.nukeangles;
var_6 = spawn( "script_model", var_4 );
var_6 setmodel( "tag_origin" );
var_6.angles = var_5;
var_6 thread nukeeffect( var_1 );
}
}
nukeeffect( var_0 )
{
level endon( "nuke_cancelled" );
var_0 endon( "disconnect" );
common_scripts\utility::waitframe();
playfxontagforclients( level._effect["nuke_flash"], self, "tag_origin", var_0 );
}
nukeslowmo()
{
level endon( "nuke_cancelled" );
setslowmotion( 1.0, 0.25, 0.5 );
level waittill( "nuke_death" );
setslowmotion( 0.25, 1, 2.0 );
}
nukevision()
{
level endon( "nuke_cancelled" );
level.nukevisioninprogress = 1;
var_0 = 0.75;
foreach ( var_2 in level.players )
{
if ( isdefined( var_2.sessionstate ) && var_2.sessionstate == "spectator" )
{
var_3 = var_2 getspectatingplayer();
if ( isdefined( var_3 ) )
{
if ( isdefined( var_3.nuke_escaped ) && var_3.nuke_escaped )
var_2 set_vision_for_nuke_escaped( var_0 );
else
var_2 set_vision_for_nuke_failed( var_0 );
}
else
var_2 set_vision_for_nuke_failed( var_0 );
continue;
}
if ( isdefined( var_2.nuke_escaped ) && var_2.nuke_escaped )
{
var_2 set_vision_for_nuke_escaped( var_0 );
continue;
}
var_2 set_vision_for_nuke_failed( var_0 );
}
fog_nuke( var_0 );
}
set_vision_for_nuke_escaped( var_0 )
{
self visionsetnakedforplayer( level.nukevisionset, var_0 );
self visionsetpainforplayer( level.nukevisionset );
}
set_vision_for_nuke_failed( var_0 )
{
playfxontagforclients( level._effect["vfx/moments/alien/nuke_fail_screen_flash"], self, "tag_eye", self );
self visionsetnakedforplayer( level.nukevisionsetfailed, var_0 );
self visionsetpainforplayer( level.nukevisionsetfailed );
}
fog_nuke( var_0 )
{
if ( !isdefined( level.nuke_fog_setting ) )
return;
var_1 = level.nuke_fog_setting;
setexpfog( var_1.startdist, var_1.halfwaydist, var_1.red, var_1.green, var_1.blue, var_1.hdrcolorintensity, var_1.maxopacity, var_0, var_1.sunred, var_1.sungreen, var_1.sunblue, var_1.hdrsuncolorintensity, var_1.sundir, var_1.sunbeginfadeangle, var_1.sunendfadeangle, var_1.normalfogscale, var_1.skyfogintensity, var_1.skyfogminangle, var_1.skyfogmaxangle );
}
restore_fog( var_0 )
{
if ( !isdefined( level.restore_fog_setting ) )
return;
var_1 = level.restore_fog_setting;
setexpfog( var_1.startdist, var_1.halfwaydist, var_1.red, var_1.green, var_1.blue, var_1.hdrcolorintensity, var_1.maxopacity, var_0, var_1.sunred, var_1.sungreen, var_1.sunblue, var_1.hdrsuncolorintensity, var_1.sundir, var_1.sunbeginfadeangle, var_1.sunendfadeangle, var_1.normalfogscale, var_1.skyfogintensity, var_1.skyfogminangle, var_1.skyfogmaxangle );
}
nukeearthquake()
{
level endon( "nuke_cancelled" );
level waittill( "nuke_death" );
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread onplayerspawned();
}
}
onplayerspawned()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
if ( isdefined( level.nukedetonated ) )
self visionsetnakedforplayer( level.nukevisionset, 0 );
}
}

View File

@ -0,0 +1,549 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
outline_init()
{
level.outline_watch_list = [];
level.outline_pillage_watch_list = [];
level.outline_weapon_watch_list = [];
level.outline_drill_watch_list = [];
level.outline_hive_watch_list = [];
level.outline_drill_preplant_watch_list = [];
}
outline_monitor()
{
self endon( "disconnect" );
level endon( "game_ended" );
self waittill( "spawned" );
childthread outline_monitor_think();
}
outline_monitor_think()
{
for (;;)
{
player_outline();
common_scripts\utility::waitframe();
item_outline();
common_scripts\utility::waitframe();
item_outline_pillage();
common_scripts\utility::waitframe();
intel_outline();
common_scripts\utility::waitframe();
item_outline_weapon_monitor();
common_scripts\utility::waitframe();
item_outline_drill_monitor();
common_scripts\utility::waitframe();
hive_outline_monitor();
common_scripts\utility::waitframe();
drill_preplant_outline_monitor();
common_scripts\utility::waitframe();
}
}
update_drill_outline()
{
level common_scripts\utility::waittill_any_timeout( 1, "drill_spawned" );
foreach ( var_1 in level.players )
{
var_2 = var_1 get_item_outline_color( level.drill );
if ( var_2 == 3 || var_2 == 4 )
{
enable_outline_for_player( level.drill, var_1, var_2, 0, "high" );
continue;
}
disable_outline_for_player( level.drill, var_1 );
}
}
player_outline()
{
self endon( "refresh_outline" );
foreach ( var_1 in level.players )
{
if ( self == var_1 )
continue;
if ( should_put_player_outline_on( var_1 ) )
{
enable_outline_for_player( var_1, self, get_color_index_player( var_1 ), 0, "high" );
continue;
}
disable_outline_for_player( var_1, self );
}
}
set_alien_outline()
{
self endon( "unset_adrenaline" );
self endon( "switchblade_over" );
self endon( "disconnect" );
self endon( "death" );
level endon( "game_ended" );
for (;;)
{
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_enemies() )
{
if ( isdefined( level.kraken ) && var_1 == level.kraken )
continue;
if ( isdefined( var_1.agent_type ) && var_1.agent_type == "kraken_tentacle" )
continue;
if ( isdefined( var_1.damaged_by_players ) )
continue;
if ( isdefined( var_1.marked_for_challenge ) )
continue;
if ( isdefined( var_1.pet ) )
continue;
else if ( !isdefined( var_1.no_outline_on_alien ) )
{
if ( isdefined( var_1.feral_occludes ) )
{
enable_outline_for_player( var_1, self, 4, 1, "high" );
continue;
}
enable_outline_for_player( var_1, self, 4, 0, "high" );
}
}
wait 0.5;
}
}
unset_alien_outline()
{
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_enemies() )
{
if ( isdefined( var_1.damaged_by_players ) )
continue;
if ( isdefined( var_1.marked_for_challenge ) )
continue;
if ( !isdefined( var_1.pet ) )
disable_outline_for_player( var_1, self );
}
}
hive_outline_monitor()
{
self endon( "refresh_outline" );
foreach ( var_2, var_1 in level.outline_hive_watch_list )
{
enable_outline_for_player( var_1, self, 4, 1, "medium" );
if ( var_2 % 10 == 0 )
common_scripts\utility::waitframe();
}
}
drill_preplant_outline_monitor()
{
self endon( "refresh_outline" );
foreach ( var_2, var_1 in level.outline_drill_preplant_watch_list )
{
if ( !isdefined( var_1 ) )
continue;
if ( should_put_drill_outline_on( var_1 ) )
enable_outline_for_player( var_1, self, 3, 0, "high" );
else
disable_outline_for_player( var_1, self );
if ( var_2 % 6 == 0 )
common_scripts\utility::waitframe();
}
}
item_outline()
{
self endon( "refresh_outline" );
foreach ( var_3, var_1 in level.outline_watch_list )
{
if ( !isdefined( var_1 ) )
continue;
var_2 = get_item_outline_color( var_1 );
if ( var_2 == 3 )
enable_outline_for_player( var_1, self, get_color_index_item( var_1 ), 1, "low" );
else if ( var_2 == 4 )
enable_outline_for_player( var_1, self, 4, 1, "low" );
else
disable_outline_for_player( var_1, self );
if ( var_3 % 6 == 0 )
common_scripts\utility::waitframe();
}
}
item_outline_pillage()
{
self endon( "refresh_outline" );
foreach ( var_3, var_1 in level.outline_pillage_watch_list )
{
if ( !isdefined( var_1 ) )
continue;
var_2 = get_pillage_item_outline_color( var_1 );
if ( var_2 == 3 )
enable_outline_for_player( var_1, self, 3, 0, "low" );
else if ( var_2 == 4 )
enable_outline_for_player( var_1, self, 4, 0, "low" );
else
disable_outline_for_player( var_1, self );
if ( var_3 % 10 == 0 )
common_scripts\utility::waitframe();
}
}
intel_outline()
{
if ( isdefined( level.intel_outline_func ) )
[[ level.intel_outline_func ]]();
}
item_outline_weapon_monitor()
{
self endon( "refresh_outline" );
foreach ( var_4, var_1 in level.outline_weapon_watch_list )
{
if ( !isdefined( var_1 ) )
continue;
var_2 = 1;
var_3 = get_weapon_outline_color( var_1 );
if ( var_3 == 3 )
enable_outline_for_player( var_1, self, get_color_index_item( var_1, var_2 ), 1, "low" );
else if ( var_3 == 4 )
enable_outline_for_player( var_1, self, 4, 1, "low" );
else
disable_outline_for_player( var_1, self );
if ( var_4 % 6 == 0 )
common_scripts\utility::waitframe();
}
}
item_outline_drill_monitor()
{
if ( isdefined( level.item_outline_drill_monitor_override ) )
{
[[ level.item_outline_drill_monitor_override ]]();
return;
}
self endon( "refresh_outline" );
var_0 = undefined;
foreach ( var_2 in level.outline_drill_watch_list )
{
var_3 = ( level.drill.health - 20000 ) / ( level.drill.maxhealth - 20000 );
if ( var_3 < 0.75 )
{
if ( should_put_drill_outline_on( var_2 ) )
enable_outline_for_player( var_2, self, get_drill_widget_color( var_2 ), 0, "high" );
else
disable_outline_for_player( var_2, self );
}
else
disable_outline_for_player( var_2, self );
if ( isdefined( level.drill ) && var_2 == level.drill )
{
var_4 = get_drill_widget_color( var_2 );
if ( isdefined( var_0 ) && var_0 == var_4 )
continue;
var_0 = var_4;
}
}
}
get_drill_widget_color( var_0 )
{
var_1 = ( level.drill.health - 20000 ) / ( level.drill.maxhealth - 20000 );
if ( var_1 <= 0.3 )
return 4;
else if ( var_1 <= 0.75 )
return 5;
else if ( var_1 <= 1 )
return 3;
else
return 0;
}
get_color_index_item( var_0, var_1 )
{
if ( maps\mp\alien\_utility::has_pistols_only_relic_and_no_deployables() && maps\mp\alien\_utility::is_true( var_1 ) )
var_2 = level.pistol_ammo_cost;
else
var_2 = var_0.cost;
if ( maps\mp\alien\_persistence::player_has_enough_currency( var_2 ) || maps\mp\alien\_utility::is_true( var_0.enabled ) )
return 3;
else
return 4;
}
get_color_index_player( var_0 )
{
var_1 = var_0.health / 100;
if ( var_1 <= 0.33 || var_0.inlaststand )
return 4;
else if ( var_1 <= 0.66 )
return 5;
else if ( var_1 <= 1.0 )
return 3;
else
return 0;
}
get_item_outline_color( var_0 )
{
if ( isdefined( var_0.classname ) && var_0.classname == "misc_turret" && isdefined( var_0.owner ) )
return 0;
var_1 = distancesquared( self.origin, var_0.origin ) < 122500;
if ( !var_1 )
return 0;
if ( maps\mp\alien\_utility::has_special_weapon() )
{
if ( isdefined( var_0.targetname ) && ( var_0.targetname == "fire_trap_barrel" || var_0.targetname == "puddle_generator" || var_0.targetname == "fence_generator" ) )
return 3;
else if ( isdefined( var_0.classname ) && var_0.classname == "misc_turret" )
return 3;
else
return 4;
}
else if ( maps\mp\alien\_utility::is_holding_deployable() )
return 4;
return 3;
}
get_pillage_item_outline_color( var_0 )
{
if ( !isdefined( var_0 ) )
return 0;
var_1 = distancesquared( self.origin, var_0.origin ) < 27225;
if ( !var_1 )
return 0;
if ( isdefined( var_0.is_locker ) && var_0.is_locker && !isdefined( self.locker_key ) )
return 0;
if ( maps\mp\alien\_utility::is_holding_deployable() || maps\mp\alien\_utility::has_special_weapon() )
return 4;
return 3;
}
get_weapon_outline_color( var_0 )
{
var_1 = distancesquared( self.origin, var_0.origin ) < 1000000;
if ( !var_1 )
return 0;
if ( maps\mp\alien\_utility::is_chaos_mode() && maps\mp\alien\_chaos::is_weapon_recently_picked_up( self, var_0.weapon_ref ) )
return 4;
if ( maps\mp\alien\_utility::is_holding_deployable() )
return 4;
if ( !maps\mp\alien\_utility::is_true( var_0.is_recipe_table ) && maps\mp\alien\_prestige::prestige_getpistolsonly() == 1 && !maps\mp\alien\_prestige::prestige_getnodeployables() == 1 )
return 4;
if ( isdefined( level.get_custom_weapon_outline_func ) && [[ level.get_custom_weapon_outline_func ]]( var_0 ) )
return 4;
if ( maps\mp\alien\_utility::has_special_weapon() && !maps\mp\alien\_utility::is_true( var_0.is_recipe_table ) )
{
if ( isdefined( level.drill ) && var_0 == level.drill )
return 3;
else
return 4;
}
return 3;
}
should_put_drill_outline_on( var_0 )
{
var_1 = distancesquared( self.origin, var_0.origin ) < 1000000;
if ( !var_1 )
return 0;
return 1;
}
should_put_player_outline_on( var_0 )
{
if ( !isalive( var_0 ) || !isdefined( var_0.maxhealth ) || !var_0.maxhealth )
return 0;
var_1 = distancesquared( self.origin, var_0.origin ) > 2250000;
if ( var_1 )
return 1;
var_2 = !bullettracepassed( self geteye(), var_0 geteye(), 0, self );
return var_2;
}
add_to_outline_watch_list( var_0, var_1 )
{
var_0.cost = var_1;
level.outline_watch_list[level.outline_watch_list.size] = var_0;
}
remove_from_outline_watch_list( var_0 )
{
level.outline_watch_list = common_scripts\utility::array_remove( level.outline_watch_list, var_0 );
thread remove_outline( var_0 );
}
add_to_drill_preplant_watch_list( var_0 )
{
level.outline_drill_preplant_watch_list[level.outline_drill_preplant_watch_list.size] = var_0;
}
remove_from_drill_preplant_watch_list( var_0 )
{
level.outline_drill_preplant_watch_list = common_scripts\utility::array_remove( level.outline_drill_preplant_watch_list, var_0 );
thread remove_outline( var_0 );
}
add_to_outline_hive_watch_list( var_0 )
{
level.outline_hive_watch_list[level.outline_hive_watch_list.size] = var_0;
}
remove_from_outline_hive_watch_list( var_0 )
{
level.outline_hive_watch_list = common_scripts\utility::array_remove( level.outline_hive_watch_list, var_0 );
thread remove_outline( var_0 );
}
add_to_outline_pillage_watch_list( var_0, var_1 )
{
if ( !common_scripts\utility::array_contains( level.outline_pillage_watch_list, var_0 ) )
{
var_0.cost = var_1;
level.outline_pillage_watch_list[level.outline_pillage_watch_list.size] = var_0;
}
}
remove_from_outline_pillage_watch_list( var_0 )
{
level.outline_pillage_watch_list = common_scripts\utility::array_remove( level.outline_pillage_watch_list, var_0 );
thread remove_outline( var_0 );
}
add_to_outline_weapon_watch_list( var_0, var_1 )
{
var_0.cost = var_1;
level.outline_weapon_watch_list[level.outline_weapon_watch_list.size] = var_0;
}
remove_from_outline_weapon_watch_list( var_0 )
{
level.outline_weapon_watch_list = common_scripts\utility::array_remove( level.outline_weapon_watch_list, var_0 );
thread remove_outline( var_0 );
}
add_to_outline_drill_watch_list( var_0, var_1 )
{
var_0.cost = var_1;
level.outline_drill_watch_list[level.outline_drill_watch_list.size] = var_0;
}
remove_from_outline_drill_watch_list( var_0 )
{
level.outline_drill_watch_list = common_scripts\utility::array_remove( level.outline_drill_watch_list, var_0 );
thread remove_outline( var_0 );
}
remove_outline( var_0 )
{
if ( !isdefined( var_0 ) )
return;
foreach ( var_2 in level.players )
{
if ( isdefined( var_2 ) )
{
var_2 notify( "refresh_outline" );
disable_outline_for_player( var_0, var_2 );
}
}
}
enable_outline_for_players( var_0, var_1, var_2, var_3, var_4 )
{
var_0 hudoutlineenableforclients( var_1, var_2, var_3 );
}
enable_outline_for_player( var_0, var_1, var_2, var_3, var_4 )
{
var_0 hudoutlineenableforclient( var_1, var_2, var_3 );
}
disable_outline_for_players( var_0, var_1 )
{
var_0 hudoutlinedisableforclients( var_1 );
}
disable_outline_for_player( var_0, var_1 )
{
var_0 hudoutlinedisableforclient( var_1 );
}
enable_outline( var_0, var_1, var_2 )
{
var_0 hudoutlineenable( var_1, var_2 );
}
disable_outline( var_0 )
{
var_0 hudoutlinedisable();
}
outline_proto_enabled()
{
return getdvarint( "enable_outline_proto" ) == 1;
}
is_host( var_0 )
{
return var_0 ishost();
}

View File

@ -0,0 +1,131 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_each_perk()
{
self.perk_data = [];
self.perk_data["health"] = maps\mp\alien\_perkfunctions::init_perk_health();
self.perk_data["damagemod"] = maps\mp\alien\_perkfunctions::init_perk_bullet_damage();
self.perk_data["medic"] = maps\mp\alien\_perkfunctions::init_perk_medic();
self.perk_data["rigger"] = maps\mp\alien\_perkfunctions::init_perk_rigger();
self.perk_data["pistol"] = maps\mp\alien\_perkfunctions::init_perk_pistol();
self.perk_data["none"] = maps\mp\alien\_perkfunctions::init_perk_none();
}
perk_getmeleescalar()
{
return self.perk_data["health"].melee_scalar;
}
perk_getmaxhealth()
{
return self.perk_data["health"].max_health;
}
perk_getbulletdamagescalar()
{
return self.perk_data["damagemod"].bullet_damage_scalar;
}
perk_getrevivetimescalar()
{
return self.perk_data["medic"].revive_time_scalar;
}
perk_getgasdamagescalar()
{
return self.perk_data["medic"].gas_damage_scalar;
}
perk_getmovespeedscalar()
{
return self.perk_data["medic"].move_speed_scalar;
}
perk_getrevivedamagescalar()
{
return self.perk_data["medic"].revive_damage_scalar;
}
perk_getdrillhealthscalar()
{
return self.perk_data["rigger"].drill_health_scalar;
}
perk_getdrilltimescalar()
{
return self.perk_data["rigger"].drill_time_scalar;
}
perk_gettrapcostscalar()
{
return self.perk_data["rigger"].trap_cost_scalar;
}
perk_gettrapdamagescalar()
{
return self.perk_data["rigger"].trap_damage_scalar;
}
perk_gettrapdurationscalar()
{
return self.perk_data["rigger"].trap_duration_scalar;
}
perk_getcurrencyscaleperhive()
{
return self.perk_data["rigger"].currency_scale_per_hive;
}
perk_getexplosivedamagescalar()
{
return self.perk_data["rigger"].explosive_damage_scalar;
}
perk_getrepairdamagescalar()
{
return self.perk_data["rigger"].repair_damage_scalar;
}
perk_getpistolregen()
{
return self.perk_data["pistol"].pistol_regen;
}
perk_getpistoloverkill()
{
return self.perk_data["pistol"].pistol_overkill;
}
has_perk( var_0, var_1 )
{
var_2 = maps\mp\alien\_persistence::get_selected_perk_0();
var_3 = maps\mp\alien\_persistence::get_perk_0_level();
var_4 = maps\mp\alien\_persistence::get_selected_perk_1();
var_5 = maps\mp\alien\_persistence::get_perk_1_level();
var_6 = "perk_none";
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "multi_class" ) )
var_6 = maps\mp\alien\_persistence::get_selected_perk_0_secondary();
if ( !isdefined( var_1 ) )
return var_0 == var_2 || var_0 == var_4 || var_0 == var_6;
else
{
var_7 = var_0 == var_2 && common_scripts\utility::array_contains( var_1, var_3 );
var_8 = var_0 == var_4 && common_scripts\utility::array_contains( var_1, var_5 );
var_9 = var_0 == var_6 && common_scripts\utility::array_contains( var_1, var_3 );
return var_7 || var_8 || var_9;
}
}
is_valid_perk( var_0 )
{
var_1 = getarraykeys( level.alien_perks["perk_0"] );
if ( common_scripts\utility::array_contains( var_1, var_0 ) )
return 1;
var_2 = getarraykeys( level.alien_perks["perk_1"] );
return common_scripts\utility::array_contains( var_2, var_0 );
}

View File

@ -0,0 +1,819 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_perk_none()
{
var_0 = spawnstruct();
return var_0;
}
set_perk_none()
{
}
unset_perk_none()
{
}
init_perk_health()
{
var_0 = spawnstruct();
var_0.melee_scalar = 1.0;
return var_0;
}
set_perk_health_level_0()
{
self.perk_data["health"].max_health = 125;
self.perk_data["health"].melee_scalar = 1.0;
}
unset_perk_health_level_0()
{
self.perk_data["health"].melee_scalar = 1.0;
}
set_perk_health_level_1()
{
self.perk_data["health"].max_health = 125;
self.maxhealth = self.perk_data["health"].max_health;
self notify( "health_perk_upgrade" );
self.perk_data["health"].melee_scalar = 1.25;
}
unset_perk_health_level_1()
{
self.perk_data["health"].melee_scalar = 1.0;
}
set_perk_health_level_2()
{
self.perk_data["health"].max_health = 150;
self.maxhealth = self.perk_data["health"].max_health;
self notify( "health_perk_upgrade" );
self.perk_data["health"].melee_scalar = 1.25;
}
unset_perk_health_level_2()
{
self.perk_data["health"].melee_scalar = 1.0;
}
set_perk_health_level_3()
{
self.perk_data["health"].max_health = 175;
self.maxhealth = self.perk_data["health"].max_health;
self notify( "health_perk_upgrade" );
self.perk_data["health"].melee_scalar = 1.5;
}
unset_perk_health_level_3()
{
self.perk_data["health"].melee_scalar = 1.0;
}
set_perk_health_level_4()
{
self.perk_data["health"].max_health = 200;
self.maxhealth = self.perk_data["health"].max_health;
self notify( "health_perk_upgrade" );
self.perk_data["health"].melee_scalar = 2.0;
}
unset_perk_health_level_4()
{
self.perk_data["health"].melee_scalar = 1.0;
}
init_perk_bullet_damage()
{
var_0 = spawnstruct();
var_0.bullet_damage_scalar = 1.0;
return var_0;
}
set_perk_bullet_damage_0()
{
self.perk_data["damagemod"].bullet_damage_scalar = 1.2;
}
unset_perk_bullet_damage_0()
{
self.perk_data["damagemod"].bullet_damage_scalar = 1.0;
}
set_perk_bullet_damage_1()
{
self.perk_data["damagemod"].bullet_damage_scalar = 1.2;
maps\mp\_utility::giveperk( "specialty_quickswap", 0 );
maps\mp\_utility::giveperk( "specialty_stalker", 0 );
maps\mp\_utility::giveperk( "specialty_fastoffhand", 0 );
}
unset_perk_bullet_damage_1()
{
self.perk_data["damagemod"].bullet_damage_scalar = 1.0;
maps\mp\_utility::_unsetperk( "specialty_quickswap" );
maps\mp\_utility::_unsetperk( "specialty_stalker" );
maps\mp\_utility::_unsetperk( "specialty_fastoffhand" );
}
set_perk_bullet_damage_2()
{
self.perk_data["damagemod"].bullet_damage_scalar = 1.2;
maps\mp\_utility::giveperk( "specialty_quickswap", 0 );
maps\mp\_utility::giveperk( "specialty_stalker", 0 );
maps\mp\_utility::giveperk( "specialty_fastoffhand", 0 );
maps\mp\_utility::giveperk( "specialty_quickdraw", 0 );
}
unset_perk_bullet_damage_2()
{
self.perk_data["damagemod"].bullet_damage_scalar = 1.0;
maps\mp\_utility::_unsetperk( "specialty_quickswap" );
maps\mp\_utility::_unsetperk( "specialty_stalker" );
maps\mp\_utility::_unsetperk( "specialty_fastoffhand" );
maps\mp\_utility::_unsetperk( "specialty_quickdraw" );
}
set_perk_bullet_damage_3()
{
self.perk_data["damagemod"].bullet_damage_scalar = 1.2;
maps\mp\_utility::giveperk( "specialty_quickswap", 0 );
maps\mp\_utility::giveperk( "specialty_stalker", 0 );
maps\mp\_utility::giveperk( "specialty_fastoffhand", 0 );
maps\mp\_utility::giveperk( "specialty_quickdraw", 0 );
maps\mp\_utility::giveperk( "specialty_fastreload", 0 );
}
unset_perk_bullet_damage_3()
{
self.perk_data["damagemod"].bullet_damage_scalar = 1.0;
maps\mp\_utility::_unsetperk( "specialty_quickswap" );
maps\mp\_utility::_unsetperk( "specialty_stalker" );
maps\mp\_utility::_unsetperk( "specialty_fastoffhand" );
maps\mp\_utility::_unsetperk( "specialty_quickdraw" );
maps\mp\_utility::giveperk( "specialty_fastreload", 0 );
}
set_perk_bullet_damage_4()
{
self.perk_data["damagemod"].bullet_damage_scalar = 1.5;
maps\mp\_utility::giveperk( "specialty_quickswap", 0 );
maps\mp\_utility::giveperk( "specialty_stalker", 0 );
maps\mp\_utility::giveperk( "specialty_fastoffhand", 0 );
maps\mp\_utility::giveperk( "specialty_quickdraw", 0 );
self setaimspreadmovementscale( 0.5 );
maps\mp\_utility::giveperk( "specialty_fastreload", 0 );
}
unset_perk_bullet_damage_4()
{
self.perk_data["damagemod"].bullet_damage_scalar = 1.0;
maps\mp\_utility::_unsetperk( "specialty_quickswap" );
maps\mp\_utility::_unsetperk( "specialty_stalker" );
maps\mp\_utility::_unsetperk( "specialty_fastoffhand" );
maps\mp\_utility::_unsetperk( "specialty_quickdraw" );
self setaimspreadmovementscale( 1.0 );
maps\mp\_utility::_unsetperk( "specialty_fastreload" );
}
init_perk_medic()
{
var_0 = spawnstruct();
var_0.revive_time_scalar = 1.0;
var_0.gas_damage_scalar = 1.0;
var_0.move_speed_scalar = 1.0;
var_0.revive_damage_scalar = 1.0;
return var_0;
}
set_perk_medic_0()
{
self.perk_data["medic"].revive_time_scalar = 1.5;
self.movespeedscaler = maps\mp\alien\_prestige::prestige_getmoveslowscalar();
self.perk_data["medic"].move_speed_scalar = self.movespeedscaler;
}
unset_perk_medic_0()
{
self.perk_data["medic"].revive_time_scalar = 1.0;
self.movespeedscaler = 1.0 * maps\mp\alien\_prestige::prestige_getmoveslowscalar();
self.perk_data["medic"].move_speed_scalar = self.movespeedscaler;
}
set_perk_medic_1()
{
self.perk_data["medic"].revive_time_scalar = 1.5;
self.movespeedscaler = 1.06 * maps\mp\alien\_prestige::prestige_getmoveslowscalar();
self.perk_data["medic"].move_speed_scalar = self.movespeedscaler;
self.perk_data["medic"].revive_damage_scalar = 0.75;
}
unset_perk_medic_1()
{
self.perk_data["medic"].revive_time_scalar = 1.0;
self.movespeedscaler = 1.0 * maps\mp\alien\_prestige::prestige_getmoveslowscalar();
self.perk_data["medic"].move_speed_scalar = self.movespeedscaler;
self.perk_data["medic"].revive_damage_scalar = 1.0;
}
set_perk_medic_2()
{
maps\mp\_utility::giveperk( "specialty_longersprint", 0 );
thread medic_health_regen( 65536.0 );
self.perk_data["medic"].revive_time_scalar = 1.5;
self.movespeedscaler = 1.06 * maps\mp\alien\_prestige::prestige_getmoveslowscalar();
self.perk_data["medic"].move_speed_scalar = self.movespeedscaler;
self.perk_data["medic"].revive_damage_scalar = 0.75;
}
unset_perk_medic_2()
{
maps\mp\_utility::_unsetperk( "specialty_longersprint" );
self notify( "end_medic_health_regen" );
self.perk_data["medic"].revive_time_scalar = 1.0;
self.movespeedscaler = 1.0 * maps\mp\alien\_prestige::prestige_getmoveslowscalar();
self.perk_data["medic"].move_speed_scalar = self.movespeedscaler;
self.perk_data["medic"].revive_damage_scalar = 1.0;
}
set_perk_medic_3()
{
self.perk_data["medic"].gas_damage_scalar = 0.0;
maps\mp\_utility::giveperk( "specialty_longersprint", 0 );
thread medic_health_regen( 65536.0 );
self.perk_data["medic"].revive_time_scalar = 1.5;
self.movespeedscaler = 1.06 * maps\mp\alien\_prestige::prestige_getmoveslowscalar();
self.perk_data["medic"].move_speed_scalar = self.movespeedscaler;
self.perk_data["medic"].revive_damage_scalar = 0.75;
}
unset_perk_medic_3()
{
self.perk_data["medic"].gas_damage_scalar = 1.0;
maps\mp\_utility::_unsetperk( "specialty_longersprint" );
self notify( "end_medic_health_regen" );
self.perk_data["medic"].revive_time_scalar = 1.0;
self.movespeedscaler = 1.0 * maps\mp\alien\_prestige::prestige_getmoveslowscalar();
self.perk_data["medic"].move_speed_scalar = self.movespeedscaler;
self.perk_data["medic"].revive_damage_scalar = 1.0;
}
set_perk_medic_4()
{
self.perk_data["medic"].revive_time_scalar = 1.5;
self.perk_data["medic"].gas_damage_scalar = 0.0;
thread medic_health_regen( 0.0 );
self.movespeedscaler = 1.12 * maps\mp\alien\_prestige::prestige_getmoveslowscalar();
self.perk_data["medic"].move_speed_scalar = self.movespeedscaler;
maps\mp\_utility::giveperk( "specialty_longersprint", 0 );
maps\mp\_utility::giveperk( "specialty_fastsprintrecovery", 0 );
self.perk_data["medic"].revive_damage_scalar = 0.75;
}
unset_perk_medic_4()
{
self.perk_data["medic"].revive_time_scalar = 1.0;
self.perk_data["medic"].gas_damage_scalar = 1.0;
self notify( "end_medic_health_regen" );
self.movespeedscaler = 1.0 * maps\mp\alien\_prestige::prestige_getmoveslowscalar();
self.perk_data["medic"].move_speed_scalar = self.movespeedscaler;
maps\mp\_utility::_unsetperk( "specialty_longersprint" );
maps\mp\_utility::_unsetperk( "specialty_fastsprintrecovery" );
self.perk_data["medic"].revive_damage_scalar = 1.0;
}
medic_health_regen( var_0 )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "end_medic_health_regen" );
var_1 = var_0 > 0.0;
for (;;)
{
foreach ( var_3 in level.players )
{
if ( maps\mp\_utility::isreallyalive( var_3 ) && !isdefined( var_3.medic_regeneration ) )
{
if ( var_1 && distancesquared( self.origin, var_3.origin ) > var_0 )
continue;
var_3 thread medic_regenerate_health_once();
}
}
wait 1.0;
}
}
medic_regenerate_health_once()
{
self endon( "death" );
self endon( "disconnect" );
if ( !maps\mp\alien\_utility::has_fragile_relic_and_is_sprinting() )
{
self.medic_regeneration = 1;
wait 1.0;
self.health = int( min( self.maxhealth, self.health + 5.0 ) );
self.medic_regeneration = undefined;
}
}
init_perk_rigger()
{
var_0 = spawnstruct();
var_0.drill_health_scalar = 1.0;
var_0.drill_time_scalar = 1.0;
var_0.trap_cost_scalar = 1;
var_0.trap_duration_scalar = 1;
var_0.trap_damage_scalar = 1;
var_0.currency_scale_per_hive = 1.0;
var_0.explosive_damage_scalar = 1.0;
var_0.repair_damage_scalar = 1.0;
return var_0;
}
set_perk_rigger_0()
{
self.perk_data["rigger"].drill_health_scalar = 1.256;
self.perk_data["rigger"].currency_scale_per_hive = 1.2;
}
unset_perk_rigger_0()
{
self.perk_data["rigger"].drill_health_scalar = 1.0;
self.perk_data["rigger"].currency_scale_per_hive = 1.0;
}
set_perk_rigger_1()
{
self.perk_data["rigger"].drill_health_scalar = 1.256;
self.perk_data["rigger"].currency_scale_per_hive = 1.2;
self.perk_data["rigger"].drill_time_scalar = 0.5;
}
unset_perk_rigger_1()
{
self.perk_data["rigger"].drill_health_scalar = 1.0;
self.perk_data["rigger"].drill_time_scalar = 1.0;
self.perk_data["rigger"].currency_scale_per_hive = 1.0;
}
set_perk_rigger_2()
{
self.perk_data["rigger"].drill_health_scalar = 1.256;
self.perk_data["rigger"].currency_scale_per_hive = 1.2;
self.perk_data["rigger"].drill_time_scalar = 0.5;
self.perk_data["rigger"].trap_cost_scalar = 0.8;
}
unset_perk_rigger_2()
{
self.perk_data["rigger"].drill_health_scalar = 1.0;
self.perk_data["rigger"].drill_time_scalar = 1;
self.perk_data["rigger"].trap_cost_scalar = 1.0;
self.perk_data["rigger"].currency_scale_per_hive = 1.0;
}
set_perk_rigger_3()
{
self.perk_data["rigger"].drill_health_scalar = 1.256;
self.perk_data["rigger"].currency_scale_per_hive = 1.2;
self.perk_data["rigger"].drill_time_scalar = 0.5;
self.perk_data["rigger"].trap_cost_scalar = 0.8;
self.perk_data["rigger"].trap_duration_scalar = 1.5;
self.perk_data["rigger"].repair_damage_scalar = 0.75;
}
unset_perk_rigger_3()
{
self.perk_data["rigger"].drill_health_scalar = 1.0;
self.perk_data["rigger"].drill_time_scalar = 1;
self.perk_data["rigger"].trap_cost_scalar = 1.0;
self.perk_data["rigger"].trap_duration_scalar = 1;
self.perk_data["rigger"].currency_scale_per_hive = 1.0;
self.perk_data["rigger"].repair_damage_scalar = 1.0;
}
set_perk_rigger_4()
{
self.perk_data["rigger"].drill_health_scalar = 1.256;
self.perk_data["rigger"].currency_scale_per_hive = 1.2;
self.perk_data["rigger"].drill_time_scalar = 0.5;
self.perk_data["rigger"].trap_cost_scalar = 0.8;
self.perk_data["rigger"].trap_duration_scalar = 1.5;
self.perk_data["rigger"].trap_damage_scalar = 2;
maps\mp\alien\_persistence::set_player_max_currency( 8000 * maps\mp\alien\_prestige::prestige_getwalletsizescalar() );
self.perk_data["rigger"].repair_damage_scalar = 0.75;
self.perk_data["rigger"].explosive_damage_scalar = 1.5;
}
unset_perk_rigger_4()
{
self.perk_data["rigger"].drill_health_scalar = 1.0;
self.perk_data["rigger"].drill_time_scalar = 1;
self.perk_data["rigger"].trap_cost_scalar = 1.0;
self.perk_data["rigger"].trap_duration_scalar = 1;
self.perk_data["rigger"].trap_damage_scalar = 1;
self.perk_data["rigger"].currency_scale_per_hive = 1.0;
maps\mp\alien\_persistence::set_player_max_currency( 6000 * maps\mp\alien\_prestige::prestige_getwalletsizescalar() );
self.perk_data["rigger"].repair_damage_scalar = 1.0;
self.perk_data["rigger"].explosive_damage_scalar = 1.0;
}
init_perk_pistol()
{
var_0 = spawnstruct();
var_0.pistol_overkill = 0;
var_0.pistol_regen = 0;
return var_0;
}
check_for_pistol_ammo( var_0, var_1 )
{
self.lastweapon = self getcurrentweapon();
self.pistol_clip_ammo_right = self getweaponammoclip( var_1, "right" );
self.pistol_ammo_remaining = self getweaponammostock( var_1 );
}
give_new_pistol( var_0 )
{
var_1 = var_0;
maps\mp\_utility::_giveweapon( var_1 );
self setweaponammoclip( var_1, self.pistol_clip_ammo_right, "right" );
self setweaponammostock( var_1, self.pistol_ammo_remaining );
var_2 = self getweaponslistprimaries();
if ( !self hasweapon( self.lastweapon ) && !maps\mp\alien\_utility::has_special_weapon() && !maps\mp\alien\_utility::is_holding_deployable() )
self switchtoweapon( var_1 );
}
set_perk_pistol_p226_0()
{
}
unset_perk_pistol_p226_0()
{
store_ammo_and_take_pistol( "iw6_alienp226_mp" );
}
set_perk_pistol_p226_1()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienp226_mp_alienmuzzlebrakepi" );
else
give_new_pistol( "iw6_alienp226_mp_barrelrange02" );
}
unset_perk_pistol_p226_1()
{
store_ammo_and_take_pistol( "iw6_alienp226_mp" );
}
set_perk_pistol_p226_2()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienp226_mp_alienmuzzlebrakepi_xmags" );
else
give_new_pistol( "iw6_alienp226_mp_barrelrange02_xmags" );
}
unset_perk_pistol_p226_2()
{
store_ammo_and_take_pistol( "iw6_alienp226_mp" );
}
set_perk_pistol_p226_3()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienp226_mp_alienmuzzlebrakepi_xmags" );
else
give_new_pistol( "iw6_alienp226_mp_barrelrange02_xmags" );
self.perk_data["pistol"].pistol_overkill = 1;
}
unset_perk_pistol_p226_3()
{
store_ammo_and_take_pistol( "iw6_alienp226_mp" );
self.perk_data["pistol"].pistol_overkill = 0;
}
set_perk_pistol_p226_4()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw5_alienp226_mp_akimbo_alienmuzzlebrakepi_xmags" );
else
give_new_pistol( "iw5_alienp226_mp_akimbo_barrelrange02_xmags" );
self.perk_data["pistol"].pistol_overkill = 1;
}
unset_perk_pistol_p226_4()
{
store_ammo_and_take_pistol( "iw5_alienp226_mp" );
self.perk_data["pistol"].pistol_overkill = 0;
}
set_perk_pistol_magnum_0()
{
}
unset_perk_pistol_magnum_0()
{
store_ammo_and_take_pistol( "iw6_alienmagnum_mp" );
}
set_perk_pistol_magnum_1()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "magnum_acog_upgrade" ) && !maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienmagnum_mp_acogpistol_barrelrange02_scope5" );
else if ( !maps\mp\alien\_persistence::is_upgrade_enabled( "magnum_acog_upgrade" ) && maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienmagnum_mp_alienmuzzlebrakepi" );
else if ( maps\mp\alien\_persistence::is_upgrade_enabled( "magnum_acog_upgrade" ) && maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienmagnum_mp_acogpistol_alienmuzzlebrakepi_scope5" );
else
give_new_pistol( "iw6_alienmagnum_mp_barrelrange02" );
}
unset_perk_pistol_magnum_1()
{
store_ammo_and_take_pistol( "iw6_alienmagnum_mp" );
}
set_perk_pistol_magnum_2()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "magnum_acog_upgrade" ) && !maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienmagnum_mp_acogpistol_barrelrange02_xmags_scope5" );
else if ( !maps\mp\alien\_persistence::is_upgrade_enabled( "magnum_acog_upgrade" ) && maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienmagnum_mp_alienmuzzlebrakepi_xmags" );
else if ( maps\mp\alien\_persistence::is_upgrade_enabled( "magnum_acog_upgrade" ) && maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienmagnum_mp_acogpistol_alienmuzzlebrakepi_xmags_scope5" );
else
give_new_pistol( "iw6_alienmagnum_mp_barrelrange02_xmags" );
}
unset_perk_pistol_magnum_2()
{
store_ammo_and_take_pistol( "iw6_alienmagnum_mp" );
}
set_perk_pistol_magnum_3()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "magnum_acog_upgrade" ) && !maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienmagnum_mp_acogpistol_barrelrange02_xmags_scope5" );
else if ( !maps\mp\alien\_persistence::is_upgrade_enabled( "magnum_acog_upgrade" ) && maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienmagnum_mp_alienmuzzlebrakepi_xmags" );
else if ( maps\mp\alien\_persistence::is_upgrade_enabled( "magnum_acog_upgrade" ) && maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienmagnum_mp_acogpistol_alienmuzzlebrakepi_xmags_scope5" );
else
give_new_pistol( "iw6_alienmagnum_mp_barrelrange02_xmags" );
self.perk_data["pistol"].pistol_overkill = 1;
}
unset_perk_pistol_magnum_3()
{
store_ammo_and_take_pistol( "iw6_alienmagnum_mp" );
self.perk_data["pistol"].pistol_overkill = 0;
}
set_perk_pistol_magnum_4()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "magnum_acog_upgrade" ) && !maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw5_alienmagnum_mp_acogpistol_akimbo_barrelrange02_xmags_scope5" );
else if ( !maps\mp\alien\_persistence::is_upgrade_enabled( "magnum_acog_upgrade" ) && maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw5_alienmagnum_mp_akimbo_alienmuzzlebrakepi_xmags" );
else if ( maps\mp\alien\_persistence::is_upgrade_enabled( "magnum_acog_upgrade" ) && maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw5_alienmagnum_mp_acogpistol_akimbo_alienmuzzlebrakepi_xmags_scope5" );
else
give_new_pistol( "iw5_alienmagnum_mp_akimbo_barrelrange02_xmags" );
self.perk_data["pistol"].pistol_overkill = 1;
}
unset_perk_pistol_magnum_4()
{
store_ammo_and_take_pistol( "iw5_alienmagnum_mp" );
self.perk_data["pistol"].pistol_overkill = 0;
}
set_perk_pistol_m9a1_0()
{
}
unset_perk_pistol_m9a1_0()
{
store_ammo_and_take_pistol( "iw6_alienm9a1_mp" );
}
set_perk_pistol_m9a1_1()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienm9a1_mp_alienmuzzlebrakep3" );
else
give_new_pistol( "iw6_alienm9a1_mp_barrelrange02" );
}
unset_perk_pistol_m9a1_1()
{
store_ammo_and_take_pistol( "iw6_alienm9a1_mp" );
}
set_perk_pistol_m9a1_2()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienm9a1_mp_alienmuzzlebrakep3_xmags" );
else
give_new_pistol( "iw6_alienm9a1_mp_barrelrange02_xmags" );
}
unset_perk_pistol_m9a1_2()
{
store_ammo_and_take_pistol( "iw6_alienm9a1_mp" );
}
set_perk_pistol_m9a1_3()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienm9a1_mp_alienmuzzlebrakep3_xmags" );
else
give_new_pistol( "iw6_alienm9a1_mp_barrelrange02_xmags" );
self.perk_data["pistol"].pistol_overkill = 1;
}
unset_perk_pistol_m9a1_3()
{
store_ammo_and_take_pistol( "iw6_alienm9a1_mp" );
self.perk_data["pistol"].pistol_overkill = 0;
}
set_perk_pistol_m9a1_4()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw5_alienm9a1_mp_akimbo_alienmuzzlebrakep3_xmags" );
else
give_new_pistol( "iw5_alienm9a1_mp_akimbo_barrelrange02_xmags" );
self.perk_data["pistol"].pistol_overkill = 1;
}
unset_perk_pistol_m9a1_4()
{
store_ammo_and_take_pistol( "iw5_alienm9a1_mp" );
self.perk_data["pistol"].pistol_overkill = 0;
}
store_ammo_and_take_pistol( var_0 )
{
var_1 = maps\mp\alien\_utility::get_current_pistol();
check_for_pistol_ammo( var_0, var_1 );
self takeweapon( var_1 );
}
set_perk_pistol_mp443_0()
{
}
unset_perk_pistol_mp443_0()
{
store_ammo_and_take_pistol( "iw6_alienmp443_mp" );
}
set_perk_pistol_mp443_1()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienmp443_mp_alienmuzzlebrakepa" );
else
give_new_pistol( "iw6_alienmp443_mp_barrelrange02" );
}
unset_perk_pistol_mp443_1()
{
store_ammo_and_take_pistol( "iw6_alienmp443_mp" );
}
set_perk_pistol_mp443_2()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienmp443_mp_alienmuzzlebrakepa_xmags" );
else
give_new_pistol( "iw6_alienmp443_mp_barrelrange02_xmags" );
}
unset_perk_pistol_mp443_2()
{
store_ammo_and_take_pistol( "iw6_alienmp443_mp" );
}
set_perk_pistol_mp443_3()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw6_alienmp443_mp_alienmuzzlebrakepa_xmags" );
else
give_new_pistol( "iw6_alienmp443_mp_barrelrange02_xmags" );
self.perk_data["pistol"].pistol_overkill = 1;
}
unset_perk_pistol_mp443_3()
{
store_ammo_and_take_pistol( "iw6_alienmp443_mp" );
self.perk_data["pistol"].pistol_overkill = 0;
}
set_perk_pistol_mp443_4()
{
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "ark_pistol_upgrade" ) )
give_new_pistol( "iw5_alienmp443_mp_akimbo_alienmuzzlebrakepa_xmags" );
else
give_new_pistol( "iw5_alienmp443_mp_akimbo_barrelrange02_xmags" );
self.perk_data["pistol"].pistol_overkill = 1;
}
unset_perk_pistol_mp443_4()
{
store_ammo_and_take_pistol( "iw5_alienmp443_mp" );
self.perk_data["pistol"].pistol_overkill = 0;
}
watchcombatspeedscaler()
{
self endon( "death" );
self endon( "disconnect" );
self.pistolcombatspeedscalar = 1.0;
self.aliensnarespeedscalar = 1.0;
self.aliensnarecount = 0;
self.combatspeedscalar = getcombatspeedscalar();
maps\mp\gametypes\_weapons::updatemovespeedscale();
for (;;)
{
self waittill( "weapon_change", var_0 );
if ( maps\mp\alien\_perk_utility::has_perk( "perk_pistol_p226", [ 1, 2, 3, 4 ] ) || maps\mp\alien\_perk_utility::has_perk( "perk_pistol_magnum", [ 1, 2, 3, 4 ] ) || maps\mp\alien\_perk_utility::has_perk( "perk_pistol_m9a1", [ 1, 2, 3, 4 ] ) || maps\mp\alien\_perk_utility::has_perk( "perk_pistol_mp443", [ 1, 2, 3, 4 ] ) )
{
var_1 = self getcurrentweapon();
var_2 = maps\mp\alien\_utility::getrawbaseweaponname( var_1 );
if ( isdefined( var_2 ) )
{
if ( var_2 == "alienp226" || var_2 == "alienmagnum" || var_2 == "alienm9a1" || var_2 == "alienmp443" )
self.pistolcombatspeedscalar = 1.1;
else
self.pistolcombatspeedscalar = 1.0;
wait 0.05;
updatecombatspeedscalar();
}
}
wait 0.05;
}
}
updatecombatspeedscalar()
{
self.combatspeedscalar = getcombatspeedscalar();
maps\mp\gametypes\_weapons::updatemovespeedscale();
}
getcombatspeedscalar()
{
return self.pistolcombatspeedscalar * self.aliensnarespeedscalar;
}
watchflamingriotshield()
{
self endon( "death" );
self endon( "disconnect" );
for (;;)
{
var_0 = self getcurrentweapon();
if ( isdefined( var_0 ) )
{
if ( var_0 == "iw5_alienriotshield4_mp_camo05" && self.fireshield == 1.0 )
{
playfxontag( level._effect["Riotshield_fire"], self, "TAG_origin" );
continue;
}
stopfxontag( level._effect["Riotshield_fire"], self, "TAG_origin" );
}
}
wait 0.05;
}

183
maps/mp/alien/_perks.gsc Normal file
View File

@ -0,0 +1,183 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_perks()
{
init_perks_callback();
init_perks_from_table();
}
init_perks_from_table()
{
if ( !isdefined( level.alien_perks_table ) )
level.alien_perks_table = "mp/alien/perks_tree.csv";
level.alien_perks = [];
update_perks_from_table( 0, "perk_0" );
update_perks_from_table( 100, "perk_1" );
}
init_perks_callback()
{
level.alien_perk_callbacks = [];
register_perk_callback( "perk_health", maps\mp\alien\_perkfunctions::set_perk_health_level_0, maps\mp\alien\_perkfunctions::unset_perk_health_level_0 );
register_perk_callback( "perk_health_1", maps\mp\alien\_perkfunctions::set_perk_health_level_1, maps\mp\alien\_perkfunctions::unset_perk_health_level_1 );
register_perk_callback( "perk_health_2", maps\mp\alien\_perkfunctions::set_perk_health_level_2, maps\mp\alien\_perkfunctions::unset_perk_health_level_2 );
register_perk_callback( "perk_health_3", maps\mp\alien\_perkfunctions::set_perk_health_level_3, maps\mp\alien\_perkfunctions::unset_perk_health_level_3 );
register_perk_callback( "perk_health_4", maps\mp\alien\_perkfunctions::set_perk_health_level_4, maps\mp\alien\_perkfunctions::unset_perk_health_level_4 );
register_perk_callback( "perk_pistol_p226", maps\mp\alien\_perkfunctions::set_perk_pistol_p226_0, maps\mp\alien\_perkfunctions::unset_perk_pistol_p226_0 );
register_perk_callback( "perk_pistol_p226_1", maps\mp\alien\_perkfunctions::set_perk_pistol_p226_1, maps\mp\alien\_perkfunctions::unset_perk_pistol_p226_1 );
register_perk_callback( "perk_pistol_p226_2", maps\mp\alien\_perkfunctions::set_perk_pistol_p226_2, maps\mp\alien\_perkfunctions::unset_perk_pistol_p226_2 );
register_perk_callback( "perk_pistol_p226_3", maps\mp\alien\_perkfunctions::set_perk_pistol_p226_3, maps\mp\alien\_perkfunctions::unset_perk_pistol_p226_3 );
register_perk_callback( "perk_pistol_p226_4", maps\mp\alien\_perkfunctions::set_perk_pistol_p226_4, maps\mp\alien\_perkfunctions::unset_perk_pistol_p226_4 );
register_perk_callback( "perk_pistol_magnum", maps\mp\alien\_perkfunctions::set_perk_pistol_magnum_0, maps\mp\alien\_perkfunctions::unset_perk_pistol_magnum_0 );
register_perk_callback( "perk_pistol_magnum_1", maps\mp\alien\_perkfunctions::set_perk_pistol_magnum_1, maps\mp\alien\_perkfunctions::unset_perk_pistol_magnum_1 );
register_perk_callback( "perk_pistol_magnum_2", maps\mp\alien\_perkfunctions::set_perk_pistol_magnum_2, maps\mp\alien\_perkfunctions::unset_perk_pistol_magnum_2 );
register_perk_callback( "perk_pistol_magnum_3", maps\mp\alien\_perkfunctions::set_perk_pistol_magnum_3, maps\mp\alien\_perkfunctions::unset_perk_pistol_magnum_3 );
register_perk_callback( "perk_pistol_magnum_4", maps\mp\alien\_perkfunctions::set_perk_pistol_magnum_4, maps\mp\alien\_perkfunctions::unset_perk_pistol_magnum_4 );
register_perk_callback( "perk_pistol_m9a1", maps\mp\alien\_perkfunctions::set_perk_pistol_m9a1_0, maps\mp\alien\_perkfunctions::unset_perk_pistol_m9a1_0 );
register_perk_callback( "perk_pistol_m9a1_1", maps\mp\alien\_perkfunctions::set_perk_pistol_m9a1_1, maps\mp\alien\_perkfunctions::unset_perk_pistol_m9a1_1 );
register_perk_callback( "perk_pistol_m9a1_2", maps\mp\alien\_perkfunctions::set_perk_pistol_m9a1_2, maps\mp\alien\_perkfunctions::unset_perk_pistol_m9a1_2 );
register_perk_callback( "perk_pistol_m9a1_3", maps\mp\alien\_perkfunctions::set_perk_pistol_m9a1_3, maps\mp\alien\_perkfunctions::unset_perk_pistol_m9a1_3 );
register_perk_callback( "perk_pistol_m9a1_4", maps\mp\alien\_perkfunctions::set_perk_pistol_m9a1_4, maps\mp\alien\_perkfunctions::unset_perk_pistol_m9a1_4 );
register_perk_callback( "perk_pistol_mp443", maps\mp\alien\_perkfunctions::set_perk_pistol_mp443_0, maps\mp\alien\_perkfunctions::unset_perk_pistol_mp443_0 );
register_perk_callback( "perk_pistol_mp443_1", maps\mp\alien\_perkfunctions::set_perk_pistol_mp443_1, maps\mp\alien\_perkfunctions::unset_perk_pistol_mp443_1 );
register_perk_callback( "perk_pistol_mp443_2", maps\mp\alien\_perkfunctions::set_perk_pistol_mp443_2, maps\mp\alien\_perkfunctions::unset_perk_pistol_mp443_2 );
register_perk_callback( "perk_pistol_mp443_3", maps\mp\alien\_perkfunctions::set_perk_pistol_mp443_3, maps\mp\alien\_perkfunctions::unset_perk_pistol_mp443_3 );
register_perk_callback( "perk_pistol_mp443_4", maps\mp\alien\_perkfunctions::set_perk_pistol_mp443_4, maps\mp\alien\_perkfunctions::unset_perk_pistol_mp443_4 );
register_perk_callback( "perk_bullet_damage", maps\mp\alien\_perkfunctions::set_perk_bullet_damage_0, maps\mp\alien\_perkfunctions::unset_perk_bullet_damage_0 );
register_perk_callback( "perk_bullet_damage_1", maps\mp\alien\_perkfunctions::set_perk_bullet_damage_1, maps\mp\alien\_perkfunctions::unset_perk_bullet_damage_1 );
register_perk_callback( "perk_bullet_damage_2", maps\mp\alien\_perkfunctions::set_perk_bullet_damage_2, maps\mp\alien\_perkfunctions::unset_perk_bullet_damage_2 );
register_perk_callback( "perk_bullet_damage_3", maps\mp\alien\_perkfunctions::set_perk_bullet_damage_3, maps\mp\alien\_perkfunctions::unset_perk_bullet_damage_3 );
register_perk_callback( "perk_bullet_damage_4", maps\mp\alien\_perkfunctions::set_perk_bullet_damage_4, maps\mp\alien\_perkfunctions::unset_perk_bullet_damage_4 );
register_perk_callback( "perk_medic", maps\mp\alien\_perkfunctions::set_perk_medic_0, maps\mp\alien\_perkfunctions::unset_perk_medic_0 );
register_perk_callback( "perk_medic_1", maps\mp\alien\_perkfunctions::set_perk_medic_1, maps\mp\alien\_perkfunctions::unset_perk_medic_1 );
register_perk_callback( "perk_medic_2", maps\mp\alien\_perkfunctions::set_perk_medic_2, maps\mp\alien\_perkfunctions::unset_perk_medic_2 );
register_perk_callback( "perk_medic_3", maps\mp\alien\_perkfunctions::set_perk_medic_3, maps\mp\alien\_perkfunctions::unset_perk_medic_3 );
register_perk_callback( "perk_medic_4", maps\mp\alien\_perkfunctions::set_perk_medic_4, maps\mp\alien\_perkfunctions::unset_perk_medic_4 );
register_perk_callback( "perk_rigger", maps\mp\alien\_perkfunctions::set_perk_rigger_0, maps\mp\alien\_perkfunctions::unset_perk_rigger_0 );
register_perk_callback( "perk_rigger_1", maps\mp\alien\_perkfunctions::set_perk_rigger_1, maps\mp\alien\_perkfunctions::unset_perk_rigger_1 );
register_perk_callback( "perk_rigger_2", maps\mp\alien\_perkfunctions::set_perk_rigger_2, maps\mp\alien\_perkfunctions::unset_perk_rigger_2 );
register_perk_callback( "perk_rigger_3", maps\mp\alien\_perkfunctions::set_perk_rigger_3, maps\mp\alien\_perkfunctions::unset_perk_rigger_3 );
register_perk_callback( "perk_rigger_4", maps\mp\alien\_perkfunctions::set_perk_rigger_4, maps\mp\alien\_perkfunctions::unset_perk_rigger_4 );
register_perk_callback( "perk_none", maps\mp\alien\_perkfunctions::set_perk_none, maps\mp\alien\_perkfunctions::unset_perk_none );
register_perk_callback( "perk_none_1", maps\mp\alien\_perkfunctions::set_perk_none, maps\mp\alien\_perkfunctions::unset_perk_none );
register_perk_callback( "perk_none_2", maps\mp\alien\_perkfunctions::set_perk_none, maps\mp\alien\_perkfunctions::unset_perk_none );
register_perk_callback( "perk_none_3", maps\mp\alien\_perkfunctions::set_perk_none, maps\mp\alien\_perkfunctions::unset_perk_none );
register_perk_callback( "perk_none_4", maps\mp\alien\_perkfunctions::set_perk_none, maps\mp\alien\_perkfunctions::unset_perk_none );
}
register_perk_callback( var_0, var_1, var_2 )
{
var_3 = spawnstruct();
var_3.set = var_1;
var_3.unset = var_2;
level.alien_perk_callbacks[var_0] = var_3;
}
update_perks_from_table( var_0, var_1 )
{
level.alien_perks[var_1] = [];
for ( var_2 = var_0; var_2 <= var_0 + 100; var_2++ )
{
var_3 = get_perk_ref_by_index( var_2 );
if ( var_3 == "" )
break;
if ( !isdefined( level.alien_perks[var_3] ) )
{
var_4 = spawnstruct();
var_4.upgrades = [];
var_4.unlock = get_unlock_by_ref( var_3 );
var_4.name = get_name_by_ref( var_3 );
var_4.icon = get_icon_by_ref( var_3 );
var_4.ref = var_3;
var_4.type = var_1;
var_4.callbacks = level.alien_perk_callbacks[var_3];
var_4.baseidx = var_2;
level.alien_perks[var_1][var_3] = var_4;
}
for ( var_5 = var_2; var_5 <= var_0 + 100; var_5++ )
{
var_6 = get_perk_ref_by_index( var_5 );
if ( var_6 == "" )
break;
if ( var_6 == var_3 || is_perk_set( var_3, var_6 ) )
{
var_7 = spawnstruct();
var_7.ref = var_6;
var_7.desc = get_desc_by_ref( var_6 );
var_7.point_cost = get_point_cost_by_ref( var_6 );
level.alien_perks[var_1][var_3].upgrades[var_5 - var_2] = var_7;
continue;
}
break;
}
var_2 = var_5 - 1;
}
}
is_perk_set( var_0, var_1 )
{
if ( var_0 == var_1 )
return 0;
if ( !issubstr( var_1, var_0 ) )
return 0;
var_2 = strtok( var_0, "_" );
var_3 = strtok( var_1, "_" );
if ( var_3.size - var_2.size != 1 )
return 0;
for ( var_4 = 0; var_4 < var_3.size - 1; var_4++ )
{
if ( var_3[var_4] != var_2[var_4] )
return 0;
}
return 1;
}
get_perk_ref_by_index( var_0 )
{
return tablelookup( level.alien_perks_table, 0, var_0, 1 );
}
get_name_by_ref( var_0 )
{
return tablelookup( level.alien_perks_table, 1, var_0, 4 );
}
get_icon_by_ref( var_0 )
{
return tablelookup( level.alien_perks_table, 1, var_0, 6 );
}
get_desc_by_ref( var_0 )
{
return tablelookup( level.alien_perks_table, 1, var_0, 5 );
}
get_point_cost_by_ref( var_0 )
{
return int( tablelookup( level.alien_perks_table, 1, var_0, 3 ) );
}
get_unlock_by_ref( var_0 )
{
return int( tablelookup( level.alien_perks_table, 1, var_0, 2 ) );
}
get_is_upgrade_by_ref( var_0 )
{
return int( tablelookup( level.alien_perks_table, 1, var_0, 7 ) );
}

File diff suppressed because it is too large Load Diff

2282
maps/mp/alien/_pillage.gsc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,661 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
create_intel_spots()
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
setdvar( "scr_alien_intel_pillage", 1 );
level.intel_outline_func = ::intel_pillage_outline;
level.intel_pillage_show_func = ::create_intel_from_pillage_spot;
level.intel_pillage_allowed_func = ::intel_pillage_allowed_func;
level.outline_intel_watch_list = [];
level.intel_type_1 = [];
level.intel_type_2 = [];
create_intel_by_section( "pillage_intel_section_hard" );
}
create_intel_by_section( var_0 )
{
var_1 = common_scripts\utility::getstructarray( var_0, "targetname" );
foreach ( var_3 in var_1 )
{
var_4 = common_scripts\utility::getstructarray( var_3.target, "targetname" );
var_3 create_intel_section( var_4 );
}
}
create_intel_section( var_0 )
{
var_1 = 0;
foreach ( var_3 in var_0 )
{
if ( isdefined( var_3.script_noteworthy ) )
{
var_4 = strtok( var_3.script_noteworthy, " " );
if ( isdefined( var_4 ) && var_4.size > 1 )
{
var_5 = "";
foreach ( var_7 in var_4 )
var_5 = var_5 + var_7;
iprintln( var_5 );
var_4 = strtok( var_5, "," );
}
else
var_4 = strtok( var_3.script_noteworthy, "," );
var_3.intel_type = var_4[0];
if ( isdefined( var_4[1] ) )
var_3.script_model = var_4[1];
if ( isdefined( var_4[2] ) )
var_3.location = var_4[2];
var_3.is_intel = 1;
switch ( var_3.intel_type )
{
case "intel_easy":
var_3.type = 1;
level.intel_type_1[level.intel_type_1.size] = var_3;
break;
case "intel_hard":
var_3.type = 2;
level.intel_type_2[level.intel_type_2.size] = var_3;
break;
}
add_to_outline_intel_watch_list( var_3 );
var_3 thread intel_listener();
}
}
}
create_intel_from_pillage_spot( var_0 )
{
var_1 = self;
if ( isdefined( self.pillageinfo ) )
self.pillageinfo = undefined;
var_1.script_model = "cnd_cellphone_01_on";
var_1.intel_type = "intel_easy";
var_1.is_intel = 1;
var_1.type = 1;
level.intel_type_1[level.intel_type_1.size] = var_1;
var_1.drop_override_func = ::drop_pillage_intel_on_ground;
add_to_outline_intel_watch_list( var_1 );
var_1 thread intel_listener();
}
intel_pillage_allowed_func()
{
var_0 = 6;
switch ( level.script )
{
case "mp_alien_armory":
var_0 = 6;
break;
case "mp_alien_beacon":
var_0 = 4;
break;
case "mp_alien_dlc3":
var_0 = 3;
break;
case "mp_alien_last":
var_0 = 4;
break;
default:
break;
}
var_1 = "intel_episode_" + level.extinction_episode + "_sequenced_count";
if ( self getcoopplayerdatareservedint( var_1 ) < var_0 )
return 1;
else
return 0;
}
init_player_intel_total()
{
var_0 = "NO_INTEL_ACHIEVEMENT";
var_1 = 0;
var_2 = getdvar( "ui_mapname" );
switch ( var_2 )
{
case "mp_alien_armory":
var_0 = "FOUND_ALL_INTELS";
var_1 = 2;
break;
case "mp_alien_beacon":
var_0 = "FOUND_ALL_INTELS_MAYDAY";
break;
case "mp_alien_dlc3":
var_0 = "AWAKENING_ALL_INTEL";
break;
case "mp_alien_last":
var_0 = "LAST_ALL_INTEL";
break;
default:
break;
}
var_3 = self.achievement_list[var_0];
if ( isdefined( var_3 ) )
{
var_3.progress = aliens_get_intel_num_collected( self ) - var_1;
var_4 = self getcoopplayerdatareservedint( "intel_episode_4_location_4" );
if ( var_4 && var_2 == "mp_alien_last" )
var_3.progress = var_3.progress - 1;
maps\mp\alien\_achievement::update_achievement( var_0, 0 );
}
}
intel_on_player_connect()
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
thread init_player_intel_total();
wait 1.0;
foreach ( var_1 in level.intel_type_2 )
{
if ( has_player_found( var_1.location ) )
turn_off_intel_for_player( var_1 );
}
}
build_intel_pillageitem_arrays( var_0 )
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
while ( !isdefined( level.pillageinfo ) )
wait 0.1;
switch ( var_0 )
{
case "easy":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "intel", level.pillageinfo.easy_intel );
break;
case "medium":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "intel", level.pillageinfo.medium_intel );
break;
case "hard":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "intel", level.pillageinfo.hard_intel );
break;
}
}
has_player_found( var_0 )
{
if ( isdefined( var_0 ) )
{
var_1 = "intel_episode_" + level.extinction_episode + "_location_" + var_0;
if ( self getcoopplayerdatareservedint( var_1 ) )
return 1;
}
return 0;
}
turn_off_intel_for_player( var_0 )
{
var_0.pillage_trigger disableplayeruse( self );
if ( var_0.type == 2 )
{
if ( !isdefined( self.outline_player_intel_found_list ) )
self.outline_player_intel_found_list = [];
if ( !common_scripts\utility::array_contains( self.outline_player_intel_found_list, var_0 ) )
{
self.outline_player_intel_found_list[self.outline_player_intel_found_list.size] = var_0;
var_0 thread wait_then_add_player_to_intel_array( self, 3.0 );
}
}
remove_from_outline_intel_watch_list( var_0 );
}
wait_then_add_player_to_intel_array( var_0, var_1 )
{
var_2 = var_0.name;
wait( var_1 );
if ( !isdefined( self.player_has_found_me ) )
self.player_has_found_me = [];
self.player_has_found_me[var_2] = 1;
}
intel_listener()
{
self.pillage_trigger = spawn( "script_model", self.origin );
if ( isdefined( self.script_model ) )
{
self.pillage_trigger setmodel( self.script_model );
if ( isdefined( self.angles ) )
self.pillage_trigger.angles = self.angles;
}
else
self.pillage_trigger setmodel( "tag_origin" );
thread toggle_usablity_on_distance();
self.pillage_trigger setcursorhint( "HINT_NOICON" );
self.pillage_trigger makeusable();
if ( self.type == 1 )
self.pillage_trigger sethintstring( &"ALIEN_PILLAGE_INTEL_PICKUP_INTEL" );
else
self.pillage_trigger sethintstring( &"ALIEN_PILLAGE_INTEL_PICKUP_INTEL" );
for (;;)
{
self.pillage_trigger waittill( "trigger", var_0 );
if ( self.type == 1 && var_0 intel_pillage_allowed_func() )
give_player_intel( var_0 );
if ( self.type == 2 && !var_0 has_player_found( self.location ) )
give_player_intel( var_0 );
}
}
aliens_get_intel_num_possible()
{
var_0 = 0;
var_1 = 0;
var_2 = 0;
var_3 = getdvar( "ui_mapname" );
switch ( var_3 )
{
case "mp_alien_armory":
var_0 = 2;
var_1 = 6;
var_2 = 5;
break;
case "mp_alien_beacon":
var_0 = 0;
var_1 = 4;
var_2 = 5;
break;
case "mp_alien_dlc3":
var_0 = 0;
var_1 = 3;
var_2 = 3;
break;
case "mp_alien_last":
var_0 = 0;
var_1 = 4;
var_2 = 4;
break;
}
return var_0 + var_1 + var_2;
}
aliens_get_intel_num_collected( var_0 )
{
var_1 = 0;
var_2 = 5;
var_3 = getdvar( "ui_mapname" );
switch ( var_3 )
{
case "mp_alien_armory":
var_1 = 2;
var_2 = 5;
break;
case "mp_alien_beacon":
var_1 = 0;
var_2 = 5;
break;
case "mp_alien_dlc3":
var_1 = 0;
var_2 = 3;
break;
case "mp_alien_last":
var_1 = 0;
var_2 = 4;
break;
}
var_4 = "intel_episode_" + level.extinction_episode + "_sequenced_count";
var_5 = var_0 getcoopplayerdatareservedint( var_4 );
var_6 = 0;
for ( var_7 = 0; var_7 < var_2; var_7++ )
{
var_8 = "intel_episode_" + level.extinction_episode + "_location_" + ( var_7 + 1 );
if ( var_0 getcoopplayerdatareservedint( var_8 ) )
var_6++;
}
return var_1 + var_5 + var_6;
}
give_player_easter_egg_intel( var_0 )
{
var_1 = "intel_episode_" + level.extinction_episode + "_location_4";
if ( var_0 getcoopplayerdatareservedint( var_1 ) )
return;
var_0 setclientomnvar( "ui_alien_intel_num_collected", aliens_get_intel_num_collected( var_0 ) + 1 );
wait 0.5;
var_0 notify( "dlc_vo_notify", "intel_recovered", var_0 );
var_2 = 8;
var_3 = get_vo_to_play( var_2 );
var_0 thread play_intel_pickup_vo( var_3 );
var_0 setclientomnvar( "ui_alien_intercept_pickup", var_2 );
var_0 setcoopplayerdatareservedint( var_1, 1 );
}
give_player_intel( var_0 )
{
var_0 setclientomnvar( "ui_alien_intel_num_collected", aliens_get_intel_num_collected( var_0 ) + 1 );
wait 0.5;
var_1 = getdvar( "ui_mapname" );
var_0 notify( "dlc_vo_notify", "intel_recovered", var_0 );
if ( isdefined( self.location ) && self.type == 2 )
{
var_2 = 0;
switch ( var_1 )
{
case "mp_alien_armory":
var_2 = 8;
break;
case "mp_alien_beacon":
var_2 = 4;
break;
case "mp_alien_dlc3":
var_2 = 3;
break;
case "mp_alien_last":
var_2 = 4;
break;
}
var_3 = int( self.location ) + var_2;
var_4 = get_vo_to_play( var_3 );
var_0 thread play_intel_pickup_vo( var_4 );
var_0 setclientomnvar( "ui_alien_intercept_pickup", var_3 );
var_5 = "intel_episode_" + level.extinction_episode + "_location_" + self.location;
var_0 setcoopplayerdatareservedint( var_5, 1 );
var_0 turn_off_intel_for_player( self );
var_0 maps\mp\alien\_persistence::give_player_currency( 500 );
var_0 maps\mp\alien\_persistence::give_player_xp( 2500 );
var_0 maps\mp\alien\_achievement::update_intel_achievement();
}
else if ( self.type == 1 )
{
var_6 = 0;
switch ( var_1 )
{
case "mp_alien_armory":
var_6 = 3;
break;
case "mp_alien_beacon":
var_6 = 1;
break;
case "mp_alien_dlc3":
var_6 = 1;
break;
case "mp_alien_last":
var_6 = 1;
break;
}
var_7 = "intel_episode_" + level.extinction_episode + "_sequenced_count";
var_8 = var_0 getcoopplayerdatareservedint( var_7 );
var_9 = var_8 + var_6;
var_4 = get_vo_to_play( var_9 );
var_0 thread play_intel_pickup_vo( var_4 );
var_0 setclientomnvar( "ui_alien_nightfall_pickup", var_9 );
var_0 setcoopplayerdatareservedint( var_7, var_8 + 1 );
var_0 maps\mp\alien\_achievement::update_intel_achievement();
maps\mp\alien\_outline_proto::remove_outline( self.pillage_trigger );
self.pillageinfo = spawnstruct();
self.pillageinfo.type = undefined;
maps\mp\alien\_pillage::delete_pillage_trigger();
var_0 maps\mp\alien\_persistence::give_player_currency( 500 );
var_0 maps\mp\alien\_persistence::give_player_xp( 2500 );
}
}
play_intel_pickup_vo( var_0 )
{
wait 1.0;
if ( soundexists( var_0 ) )
self playsoundtoplayer( var_0, self );
}
get_vo_to_play( var_0 )
{
if ( !isdefined( level.intel_table ) )
{
var_1 = getdvar( "ui_mapname" );
switch ( var_1 )
{
case "mp_alien_armory":
level.intel_table = "mp/alien/alien_armory_intel.csv";
break;
case "mp_alien_beacon":
level.intel_table = "mp/alien/alien_beacon_intel.csv";
break;
case "mp_alien_dlc3":
level.intel_table = "mp/alien/alien_dlc3_intel.csv";
break;
case "mp_alien_last":
level.intel_table = "mp/alien/alien_last_intel.csv";
break;
}
}
var_2 = tablelookup( level.intel_table, 0, var_0, 15 );
return var_2;
}
drop_pillage_intel_on_ground( var_0 )
{
if ( self.pillage_trigger.model != "tag_origin" )
{
var_1 = ( 0, 0, 20 );
var_2 = ( 0, 0, 1 );
var_3 = ( 0, 0, 0 );
var_4 = ( 0, 0, 6 );
var_5 = ( 0, 0, 0 );
var_6 = getgroundposition( self.pillage_trigger.origin + var_1, 2 );
switch ( self.pillage_trigger.model )
{
case "cnd_cellphone_01_on":
var_4 = var_2;
var_5 = ( 0, 0, -90 );
break;
}
self.pillage_trigger.origin = var_6 + var_4;
self.pillage_trigger.angles = var_5;
}
thread turn_off_pillage_intel_for_players();
}
turn_off_pillage_intel_for_players()
{
foreach ( var_1 in level.players )
{
if ( !var_1 intel_pillage_allowed_func() )
var_1 thread turn_off_intel_for_player( self );
}
}
toggle_usablity_on_distance()
{
self endon( "death" );
self.pillage_trigger endon( "death" );
var_0 = 1;
var_1 = 2;
var_2 = 1024;
var_3 = 4900;
if ( self.type == var_0 )
var_3 = 27225;
while ( !isdefined( level.players ) )
wait 0.1;
for (;;)
{
foreach ( var_5 in level.players )
{
if ( !isdefined( var_5 ) || !isalive( var_5 ) )
continue;
var_6 = 1;
if ( distancesquared( var_5.origin, self.pillage_trigger.origin ) > var_3 )
var_6 = 0;
if ( distancesquared( var_5.origin, self.pillage_trigger.origin ) < var_2 && should_display_already_found_message( var_5 ) )
{
var_5 maps\mp\_utility::setlowermessage( "already_have_intel", &"ALIEN_PILLAGE_INTEL_ALREADY_HAVE_INTEL", 2 );
common_scripts\utility::waitframe();
continue;
}
if ( self.type == var_1 && var_5 has_player_found( self.location ) )
{
var_5 turn_off_intel_for_player( self );
var_6 = 0;
}
else if ( self.type == var_0 && !var_5 intel_pillage_allowed_func() )
{
var_5 turn_off_intel_for_player( self );
var_6 = 0;
}
if ( isdefined( var_5.outline_player_intel_found_list ) && common_scripts\utility::array_contains( var_5.outline_player_intel_found_list, self ) )
var_6 = 0;
if ( var_6 )
enable_usability( var_5 );
else
disable_usability( var_5 );
common_scripts\utility::waitframe();
}
wait 0.1;
}
}
should_display_already_found_message( var_0 )
{
if ( isdefined( self.player_has_found_me ) && isdefined( self.player_has_found_me[var_0.name] ) && self.player_has_found_me[var_0.name] )
return 1;
return 0;
}
enable_usability( var_0 )
{
self.pillage_trigger enableplayeruse( var_0 );
}
disable_usability( var_0 )
{
self.pillage_trigger disableplayeruse( var_0 );
}
intel_pillage_outline()
{
self endon( "refresh_outline" );
foreach ( var_3, var_1 in level.outline_intel_watch_list )
{
if ( !isdefined( var_1 ) || !isdefined( var_1.pillage_trigger ) )
continue;
var_2 = get_intel_item_outline_color( var_1 );
if ( var_2 == 3 )
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1.pillage_trigger, self, 3, 0, "high" );
else if ( var_2 == 4 )
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1.pillage_trigger, self, 1, 0, "high" );
else
maps\mp\alien\_outline_proto::disable_outline_for_player( var_1.pillage_trigger, self );
if ( var_3 % 10 == 0 )
common_scripts\utility::waitframe();
}
}
get_intel_item_outline_color( var_0 )
{
if ( !isdefined( var_0 ) || !isdefined( var_0.pillage_trigger ) )
return 0;
if ( isdefined( self.outline_player_intel_found_list ) && common_scripts\utility::array_contains( self.outline_player_intel_found_list, var_0 ) )
return 0;
if ( var_0.type == 1 )
var_1 = 27225;
else
var_1 = 4900;
var_2 = distancesquared( self.origin, var_0.origin ) < var_1;
if ( !var_2 )
return 0;
if ( maps\mp\alien\_utility::is_holding_deployable() || maps\mp\alien\_utility::has_special_weapon() )
return 4;
return 3;
}
add_to_outline_intel_watch_list( var_0 )
{
if ( !common_scripts\utility::array_contains( level.outline_intel_watch_list, var_0 ) )
level.outline_intel_watch_list[level.outline_intel_watch_list.size] = var_0;
}
remove_from_outline_intel_watch_list( var_0 )
{
remove_outline_for_player( self, var_0.pillage_trigger );
}
remove_outline_for_player( var_0, var_1 )
{
if ( !isdefined( var_1 ) || !isdefined( var_0 ) )
return;
maps\mp\alien\_outline_proto::disable_outline_for_player( var_1, var_0 );
}

View File

@ -0,0 +1,651 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
locker_pillage_functions_init()
{
setdvar( "scr_alien_locker_pillage", 1 );
level.locker_build_pillageitem_array_func = ::build_locker_pillageitem_arrays;
level.get_hintstring_for_item_pickup_func = ::get_hintstring_for_locker_item_pickup;
level.get_hintstring_for_pillaged_item_func = ::get_locker_hintstring_for_pillaged_item;
level.locker_drop_item_on_ground_func = ::drop_locker_pillage_item_on_ground;
if ( !isdefined( level.custom_lockerpillageinitfunc ) )
level.custom_lockerpillageinitfunc = ::locker_pillage_init;
if ( !isdefined( level.level_specific_pillage_show_func ) )
level.level_specific_pillage_show_func = ::default_level_specific_pillage_show_func;
level.locker_key_check_func = ::locker_key_check;
}
locker_pillage_init()
{
level.pillageinfo.locker_key_model = "vehicle_pickup_keys";
level.pillageinfo.locker_attachment = 0;
level.pillageinfo.locker_explosive = 0;
level.pillageinfo.locker_leash = 0;
level.pillageinfo.locker_maxammo = 0;
level.pillageinfo.locker_specialammo = 0;
level.pillageinfo.locker_money = 0;
level.pillageinfo.locker_soflam = 0;
level.pillageinfo.locker_trophy = 0;
level.pillageinfo.locker_locker_weapon = 100;
var_0 = common_scripts\utility::getstructarray( "pillage_area", "targetname" );
foreach ( var_8, var_2 in var_0 )
{
if ( !isdefined( level.pillage_areas[var_8] ) )
level.pillage_areas[var_8] = [];
level.pillage_areas[var_8]["locker"] = [];
var_3 = common_scripts\utility::getstructarray( var_2.target, "targetname" );
foreach ( var_5 in var_3 )
{
if ( isdefined( var_5.script_noteworthy ) )
{
var_6 = strtok( var_5.script_noteworthy, "," );
var_5.pillage_type = var_6[0];
if ( isdefined( var_6[1] ) )
var_5.script_model = var_6[1];
switch ( var_5.pillage_type )
{
case "locker":
level.pillage_areas[var_8]["locker"][level.pillage_areas[var_8]["locker"].size] = var_5;
var_5.is_locker = 1;
var_5.drop_override_func = ::drop_locker_pillage_item_on_ground;
break;
}
}
}
}
foreach ( var_8, var_2 in level.pillage_areas )
{
level maps\mp\alien\_pillage::create_pillage_spots( level.pillage_areas[var_8]["locker"] );
level set_locker_hint_strings( level.pillage_areas[var_8]["locker"] );
}
maps\mp\alien\_pillage::build_pillageitem_arrays( "locker" );
create_gun_with_max_attachments_list();
}
debug_locker_weapons()
{
wait 10;
foreach ( var_1 in level.max_weapon_list )
{
}
foreach ( var_1 in level.max_weapon_list_xmags )
{
}
}
set_locker_hint_strings( var_0 )
{
foreach ( var_3, var_2 in var_0 )
var_2.pillage_trigger sethintstring( &"ALIEN_PILLAGE_LOCKER_OPEN_LOCKER" );
}
default_level_specific_pillage_show_func( var_0, var_1, var_2 )
{
switch ( var_1 )
{
case "searched":
if ( isdefined( var_2 ) )
{
switch ( var_2.type )
{
case "locker_key":
var_3 = maps\mp\alien\_pillage::get_hintstring_for_pillaged_item( var_2.type );
var_0 thread maps\mp\alien\_pillage::show_pillage_text( var_3 );
self.pillage_trigger setmodel( level.pillageinfo.locker_key_model );
var_3 = maps\mp\alien\_pillage::get_hintstring_for_item_pickup( var_2.type );
self.pillage_trigger sethintstring( var_3 );
self.pillage_trigger makeusable();
self.pillageinfo.type = "locker_key";
self.pillageinfo.ammo = 1;
level thread maps\mp\alien\_music_and_dialog::playvoforpillage( var_0 );
break;
case "locker_weapon":
var_3 = maps\mp\alien\_pillage::get_hintstring_for_pillaged_item( var_2.type );
var_0 thread maps\mp\alien\_pillage::show_pillage_text( var_3 );
if ( var_0 maps\mp\alien\_persistence::is_upgrade_enabled( "master_scavenger_upgrade" ) )
var_4 = common_scripts\utility::array_combine( level.max_weapon_list, level.max_weapon_list_xmags );
else
var_4 = level.max_weapon_list;
var_5 = common_scripts\utility::random( var_4 );
var_6 = 0;
while ( isdefined( var_0.last_locker_weapon ) && var_0.last_locker_weapon == var_5.model )
{
var_5 = common_scripts\utility::random( var_4 );
var_6++;
if ( var_6 % 10 == 0 )
break;
}
var_0.last_locker_weapon = var_5.model;
self.pillage_trigger setmodel( var_5.model );
var_3 = maps\mp\alien\_pillage::get_hintstring_for_item_pickup( var_5.model );
self.pillage_trigger sethintstring( var_3 );
self.pillage_trigger makeusable();
self.pillageinfo.type = "locker_weapon";
self.pillageinfo.ammo = 1;
self.pillageinfo.weapon_item = var_5;
self.pillageinfo.weapon_string = var_5.weapon_string;
maps\mp\_utility::delaythread( 1.0, maps\mp\alien\_music_and_dialog::playvoforpillage, var_0 );
break;
}
}
break;
case "pick_up":
if ( isdefined( self.pillageinfo ) )
{
switch ( self.pillageinfo.type )
{
case "locker_key":
var_0 try_to_give_player_the_locker_key( self.pillage_trigger );
break;
case "locker_weapon":
var_7 = var_0 try_to_give_player_locker_weapon( self );
if ( var_7 )
maps\mp\alien\_pillage::delete_pillage_trigger();
break;
}
}
break;
}
}
try_to_give_player_locker_weapon( var_0 )
{
var_1 = var_0.pillageinfo.weapon_string;
var_2 = spawnstruct();
var_2.data["cost"] = 0;
var_2.item_ref = "weapon_" + var_1;
if ( maps\mp\alien\_collectibles::cangive_weapon( var_2 ) )
{
var_3 = 0;
var_4 = 0;
var_5 = 0;
if ( maps\mp\alien\_collectibles::has_weapon_variation( var_1 ) )
{
var_6 = maps\mp\alien\_collectibles::get_weapon_ref( var_1 );
if ( isdefined( var_6 ) )
{
if ( isdefined( level.locker_ark_check_func ) )
var_2.item_ref = [[ level.locker_ark_check_func ]]( var_6, var_1 );
var_4 = self getweaponammoclip( var_6 );
var_5 = self getweaponammostock( var_6 );
self takeweapon( var_6 );
var_7 = maps\mp\alien\_utility::getrawbaseweaponname( var_6 );
if ( maps\mp\alien\_utility::player_has_specialized_ammo( var_7 ) )
{
if ( isdefined( self.stored_ammo[var_7] ) )
var_3 = 1;
}
}
}
self.locker_weapon = undefined;
maps\mp\alien\_collectibles::give_weapon( var_2, 1 );
thread give_player_max_ammo( var_3, var_4, var_5 );
return 1;
}
return 0;
}
give_player_max_ammo( var_0, var_1, var_2 )
{
self waittill( "weapon_change" );
var_3 = self.locker_weapon;
var_4 = weaponclipsize( var_3 );
var_5 = maps\mp\alien\_utility::return_nerf_scaled_ammo( var_3 );
if ( isdefined( var_3 ) && var_0 )
{
var_6 = maps\mp\alien\_utility::getrawbaseweaponname( var_3 );
self.stored_ammo[var_6].ammostock = var_5;
self.stored_ammo[var_6].clipammo = var_4;
self setweaponammoclip( var_3, var_1 );
self setweaponammostock( var_3, var_2 );
}
else
{
self setweaponammoclip( var_3, var_4 );
self setweaponammostock( var_3, var_5 );
}
}
try_to_give_player_the_locker_key( var_0 )
{
if ( isdefined( self.locker_key ) )
maps\mp\_utility::setlowermessage( "max_leash", &"ALIEN_PILLAGE_LOCKER_LOCKER_KEY_MAX", 3 );
else
{
self.locker_key = 1;
self playlocalsound( "plr_keys_pckup" );
self setclientomnvar( "ui_alien_locker_key", 1 );
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) )
maps\mp\alien\_outline_proto::remove_from_outline_pillage_watch_list( var_0 );
var_0 delete();
}
}
build_locker_pillageitem_arrays( var_0 )
{
if ( !isdefined( level.pillageitems ) )
level.pillageitems = [];
if ( !isdefined( level.pillageitems[var_0] ) )
level.pillageitems[var_0] = [];
switch ( var_0 )
{
case "easy":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "locker_key", level.pillageinfo.easy_locker_key );
break;
case "medium":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "locker_key", level.pillageinfo.medium_locker_key );
break;
case "hard":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "locker_key", level.pillageinfo.hard_locker_key );
break;
case "locker":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "crafting", level.pillageinfo.crafting_hard );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "attachment", level.pillageinfo.locker_attachment );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "soflam", level.pillageinfo.locker_soflam );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "explosive", level.pillageinfo.locker_explosive );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "maxammo", level.pillageinfo.locker_maxammo );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "money", level.pillageinfo.locker_money );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "pet_leash", level.pillageinfo.locker_leash );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "trophy", level.pillageinfo.locker_trophy );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "specialammo", level.pillageinfo.locker_specialammo );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "locker_weapon", level.pillageinfo.locker_locker_weapon );
break;
}
}
locker_key_check( var_0 )
{
if ( isdefined( self.is_locker ) && self.is_locker && ( !isdefined( var_0.locker_key ) || !var_0.locker_key ) )
{
var_0 maps\mp\_utility::setlowermessage( "need_key", &"ALIEN_PILLAGE_LOCKER_NEED_LOCKER_KEY", 3 );
return 1;
}
return 0;
}
get_locker_hintstring_for_pillaged_item( var_0 )
{
var_0 = "" + var_0;
switch ( var_0 )
{
case "locker_key":
return &"ALIEN_PILLAGE_LOCKER_FOUND_LOCKER_KEY";
case "locker_weapon":
return &"ALIEN_PILLAGE_LOCKER_FOUND_LOCKER_WEAPON";
}
}
get_hintstring_for_locker_item_pickup( var_0 )
{
var_0 = "" + var_0;
switch ( var_0 )
{
case "locker_key":
return &"ALIEN_PILLAGE_LOCKER_PICKUP_LOCKER_KEY";
case "locker_weapon":
return &"ALIEN_PILLAGE_LOCKER_PICKUP_LOCKER_WEAPON";
}
if ( isdefined( level.level_locker_weapon_pickup_string_func ) )
return [[ level.level_locker_weapon_pickup_string_func ]]( var_0 );
}
drop_locker_pillage_item_on_ground( var_0 )
{
if ( !isdefined( self.open_locker_model ) )
{
var_1 = spawn( "script_model", self.origin );
var_1.angles = self.angles;
if ( level.script == "mp_alien_dlc3" )
{
var_1 setmodel( "com_plasticcase_bomb_open" );
var_0 playlocalsound( "ammo_crate_use" );
}
else if ( level.script == "mp_alien_last" )
{
var_1 setmodel( "dct_crate_locker_open" );
var_0 playlocalsound( "ammo_crate_use" );
}
else
{
var_1 setmodel( "armory_weapon_chest_open" );
var_0 playlocalsound( "plr_locker_open" );
}
self.open_locker_model = var_1;
self.locker_origin = self.pillage_trigger.origin;
self.locker_angles = self.pillage_trigger.angles;
}
if ( self.pillage_trigger.model != "tag_origin" )
{
if ( isdefined( level.pillage_locker_offset_override_func ) )
self [[ level.pillage_locker_offset_override_func ]]();
else
offset_locker_trigger_model();
}
var_0.locker_key = undefined;
self.pillage_trigger.is_locker = undefined;
var_0 setclientomnvar( "ui_alien_locker_key", 0 );
}
offset_locker_trigger_model()
{
if ( isdefined( self.locker_origin ) )
self.pillage_trigger.origin = self.locker_origin;
if ( isdefined( self.locker_angles ) )
self.pillage_trigger.angles = self.locker_angles;
var_0 = ( 0, 0, 20 );
var_1 = ( 0, 0, 6 );
var_2 = ( 0, 0, 0 );
var_3 = ( 0, 0, 6 );
var_4 = ( 0, 0, 0 );
var_5 = getgroundposition( self.pillage_trigger.origin + var_0, 2 );
switch ( self.pillage_trigger.model )
{
case "weapon_baseweapon_clip":
var_3 = ( 0, 0, 4 );
break;
case "mp_trophy_system_folded_iw6":
var_3 = ( 3, -21, 38 );
var_4 = ( 277.5, 180, -144 );
break;
case "weapon_scavenger_grenadebag":
var_3 = ( 0, 0, 6 );
break;
case "weapon_soflam":
var_3 = ( 8, -6, 8 );
break;
case "mil_ammo_case_1_open":
var_3 = ( 0, -16, 0 );
break;
case "weapon_rm_22":
self.pillage_trigger hidepart( "tag_barrel_sniper", "weapon_rm_22" );
case "weapon_pp19_bizon_iw6":
case "weapon_fabarm_fp6":
case "weapon_world_axe":
case "weapon_imbel_ia2":
case "weapon_cz_805_bren":
case "weapon_m27":
case "weapon_l115a3":
case "weapon_usr":
case "weapon_vks":
case "weapon_mts_255":
case "weapon_vepr":
case "weapon_kriss_v":
case "weapon_ak12":
case "weapon_g28":
case "weapon_dragunov_svu":
case "weapon_tar21":
case "weapon_kac_chainsaw":
var_3 = ( -5, 0, 24 );
var_4 = ( 277.5, 180, -144 );
break;
case "weapon_maul":
var_3 = ( -5, 0, 25 );
var_4 = ( 277.5, 180, -144 );
break;
case "weapon_honeybadger":
var_3 = ( -5, 0, 21 );
var_4 = ( 277.5, 180, -144 );
break;
case "weapon_evopro":
case "weapon_cbj_ms_iw6":
case "weapon_lsat_iw6":
case "weapon_arx_160":
var_3 = ( -5, 0, 22 );
var_4 = ( 277.5, 180, -144 );
break;
case "weapon_knife_iw6":
case "weapon_canister_bomb":
case "mil_emergency_flare_mp":
var_3 = var_1;
var_4 = var_2;
break;
}
var_6 = self.pillage_trigger.origin;
var_7 = self.pillage_trigger.angles;
var_8 = self.pillage_trigger.origin;
var_9 = ( 0, 0, 0 );
var_10 = self.pillage_trigger.origin + var_3;
var_11 = var_4;
var_12 = transformmove( var_6, var_7, var_8, var_9, var_10, var_11 );
var_13 = var_12["origin"] - var_5;
var_4 = var_12["angles"];
self.pillage_trigger.origin = var_5 + var_13;
self.pillage_trigger.angles = var_4;
}
create_gun_with_max_attachments_list()
{
level.max_weapon_list = [];
level.max_weapon_list_xmags = [];
var_0 = [];
var_1 = level.collectibles;
foreach ( var_4, var_3 in var_1 )
{
if ( var_3.isweapon )
var_0[var_4] = var_3;
}
var_5 = [];
foreach ( var_3 in var_0 )
{
var_7 = var_3.ref;
if ( issubstr( var_3.ref, "honey" ) )
continue;
if ( level.script == "mp_alien_beacon" )
{
if ( issubstr( var_3.ref, "g28" ) || issubstr( var_3.ref, "svu" ) )
continue;
}
var_7 = getsubstr( var_7, 7 );
if ( is_dlc_weapon( var_3.ref ) )
var_8 = var_7;
else
var_8 = getweaponbasename( var_7 );
var_9 = maps\mp\_utility::getweaponclass( var_8 );
var_10 = [];
var_11 = [];
var_12 = [];
var_13 = [];
var_14 = maps\mp\alien\_pillage::get_possible_attachments_by_weaponclass( var_9, var_8 );
if ( !isdefined( var_14 ) || var_14.size < 3 )
continue;
if ( issubstr( var_3.ref, "aliendlc23" ) )
{
if ( level.script == "mp_alien_dlc3" || level.script == "mp_alien_last" )
var_8 = "iw6_arkaliendlc23_mp";
else
var_8 = "iw6_aliendlc23_mp";
var_14 = common_scripts\utility::add_to_array( var_14, "dlcweap02scope" );
}
foreach ( var_16 in var_14 )
{
switch ( var_16 )
{
case "reflex":
case "eotech":
case "acog":
case "dlcweap02scope":
var_10[var_10.size] = var_16;
break;
case "grip":
var_11[var_11.size] = var_16;
break;
case "barrelrange":
var_12[var_12.size] = var_16;
break;
case "xmags":
case "rof":
var_13[var_13.size] = var_16;
break;
default:
break;
}
}
var_18 = [];
if ( var_10.size > 0 )
var_18[0] = var_10;
else
var_18[var_18.size] = [ "none" ];
if ( var_11.size > 0 )
var_18[1] = var_11;
else
var_18[var_18.size] = [ "none" ];
if ( var_12.size > 0 )
var_18[2] = var_12;
else
var_18[var_18.size] = [ "none" ];
if ( var_13.size > 0 )
var_18[3] = var_13;
else
var_18[var_18.size] = [ "none" ];
var_3 get_rest_of_attachments_brute_force( var_8, var_18 );
}
}
make_weapon_string_and_add_to_array( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = self;
var_6 = maps\mp\_utility::strip_suffix( var_0, "_mp" );
var_7 = maps\mp\alien\_utility::buildalienweaponname( var_6, var_1, var_2, var_3, var_4 );
if ( isdefined( var_7 ) )
{
var_8 = spawnstruct();
var_8.weapon_string = var_7;
var_8.model = var_5.model;
if ( !isdefined( var_4 ) || var_4 != "xmags" )
level.max_weapon_list[level.max_weapon_list.size] = var_8;
else
level.max_weapon_list_xmags[level.max_weapon_list_xmags.size] = var_8;
}
}
get_rest_of_attachments_brute_force( var_0, var_1 )
{
var_2 = [];
foreach ( var_4 in var_1[0] )
{
var_2[0] = var_4;
foreach ( var_4 in var_1[1] )
{
var_2[1] = var_4;
foreach ( var_4 in var_1[2] )
{
var_2[2] = var_4;
foreach ( var_4 in var_1[3] )
{
var_2[3] = var_4;
make_weapon_string_and_add_to_array( var_0, var_2[0], var_2[1], var_2[2], var_2[3] );
}
}
}
}
}
get_locker_weapon_from_list()
{
var_0 = common_scripts\utility::random( level.max_weapon_list );
return var_0;
}
is_dlc_weapon( var_0 )
{
if ( issubstr( var_0, "aliendlc" ) )
return 1;
if ( issubstr( var_0, "alienDLC" ) )
return 1;
return 0;
}
is_axe( var_0 )
{
switch ( var_0 )
{
case "iw6_alienDLC13_mp":
case "weapon_iw6_alienDLC13_mp":
case "iw6_aliendlc13_mp":
case "weapon_iw6_aliendlc13_mp":
case "alienaxe_mp":
case "weapon_alienaxe_mp":
case "iw6_alienDLC12_mp":
case "weapon_iw6_alienDLC12_mp":
case "iw6_aliendlc12_mp":
case "weapon_iw6_aliendlc12_mp":
return 1;
default:
break;
}
return 0;
}

249
maps/mp/alien/_prestige.gsc Normal file
View File

@ -0,0 +1,249 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_prestige()
{
var_0 = [];
var_0["none"] = ::empty;
var_0["nerf_take_more_damage"] = ::increase_damage_scalar;
var_0["nerf_higher_threatbias"] = ::increase_threatbias;
var_0["nerf_smaller_wallet"] = ::reduce_wallet_size_and_money_earned;
var_0["nerf_lower_weapon_damage"] = ::lower_weapon_damage;
var_0["nerf_no_class"] = ::no_class;
var_0["nerf_pistols_only"] = ::pistols_only;
var_0["nerf_fragile"] = ::slow_health_regen;
var_0["nerf_move_slower"] = ::move_slower;
var_0["nerf_no_abilities"] = ::no_abilities;
var_0["nerf_min_ammo"] = ::min_ammo;
var_0["nerf_no_deployables"] = ::no_deployables;
level.prestige_nerf_func = var_0;
var_1 = [];
for ( var_2 = 0; var_2 < 32; var_2++ )
{
var_3 = tablelookupbyrow( "mp/alien/prestige_nerf.csv", var_2, 1 );
if ( !isdefined( var_3 ) || var_3 == "" )
break;
var_1[var_1.size] = var_3;
}
level.nerf_list = var_1;
}
init_player_prestige()
{
init_nerf_scalar();
if ( is_relics_enabled() )
nerf_based_on_selection();
}
init_nerf_scalar()
{
var_0 = [];
var_0["nerf_take_more_damage"] = 1.0;
var_0["nerf_higher_threatbias"] = 0;
var_0["nerf_smaller_wallet"] = 1.0;
var_0["nerf_earn_less_money"] = 1.0;
var_0["nerf_lower_weapon_damage"] = 1.0;
var_0["nerf_no_class"] = 0;
var_0["nerf_pistols_only"] = 0;
var_0["nerf_fragile"] = 1.0;
var_0["nerf_move_slower"] = 1.0;
var_0["nerf_no_abilities"] = 0;
var_0["nerf_min_ammo"] = 1.0;
var_0["nerf_no_deployables"] = 0;
self.nerf_scalars = var_0;
self.activated_nerfs = [];
}
nerf_based_on_selection()
{
foreach ( var_1 in level.nerf_list )
{
if ( self _meth_842C( var_1 ) )
activate_nerf( var_1 );
}
}
activate_nerf( var_0 )
{
register_nerf_activated( var_0 );
[[ level.prestige_nerf_func[var_0] ]]();
}
nerf_already_activated( var_0 )
{
return common_scripts\utility::array_contains( self.activated_nerfs, var_0 );
}
register_nerf_activated( var_0 )
{
self.activated_nerfs[self.activated_nerfs.size] = var_0;
}
reduce_wallet_size_and_money_earned()
{
reduce_wallet_size();
reduce_money_earned();
}
is_relics_enabled()
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return 0;
return 1;
}
is_no_nerf( var_0 )
{
return var_0 == "none";
}
get_num_nerf_selected()
{
return self.activated_nerfs.size;
}
empty()
{
}
increase_damage_scalar()
{
set_nerf_scalar( "nerf_take_more_damage", 1.33 );
}
increase_threatbias()
{
set_nerf_scalar( "nerf_higher_threatbias", 500 );
}
reduce_wallet_size()
{
set_nerf_scalar( "nerf_smaller_wallet", 0.5 );
}
reduce_money_earned()
{
set_nerf_scalar( "nerf_earn_less_money", 0.75 );
}
lower_weapon_damage()
{
set_nerf_scalar( "nerf_lower_weapon_damage", 0.66 );
}
no_class()
{
set_nerf_scalar( "nerf_no_class", 1.0 );
}
pistols_only()
{
set_nerf_scalar( "nerf_pistols_only", 1.0 );
}
slow_health_regen()
{
set_nerf_scalar( "nerf_fragile", 1.5 );
}
move_slower()
{
set_nerf_scalar( "nerf_move_slower", 0.7 );
}
no_abilities()
{
set_nerf_scalar( "nerf_no_abilities", 1.0 );
}
min_ammo()
{
set_nerf_scalar( "nerf_min_ammo", 0.25 );
}
no_deployables()
{
set_nerf_scalar( "nerf_no_deployables", 1.0 );
}
set_nerf_scalar( var_0, var_1 )
{
self.nerf_scalars[var_0] = var_1;
}
get_nerf_scalar( var_0 )
{
return self.nerf_scalars[var_0];
}
get_selected_nerf( var_0 )
{
return self getcoopplayerdata( "alienPlayerLoadout", "nerfs", var_0 );
}
prestige_getdamagetakenscalar()
{
return get_nerf_scalar( "nerf_take_more_damage" );
}
prestige_getthreatbiasscalar()
{
return get_nerf_scalar( "nerf_higher_threatbias" );
}
prestige_getwalletsizescalar()
{
return get_nerf_scalar( "nerf_smaller_wallet" );
}
prestige_getmoneyearnedscalar()
{
return get_nerf_scalar( "nerf_earn_less_money" );
}
prestige_getweapondamagescalar()
{
return get_nerf_scalar( "nerf_lower_weapon_damage" );
}
prestige_getnoclassallowed()
{
return get_nerf_scalar( "nerf_no_class" );
}
prestige_getpistolsonly()
{
return get_nerf_scalar( "nerf_pistols_only" );
}
prestige_getslowhealthregenscalar()
{
return get_nerf_scalar( "nerf_fragile" );
}
prestige_getmoveslowscalar()
{
return get_nerf_scalar( "nerf_move_slower" );
}
prestige_getnoabilities()
{
return get_nerf_scalar( "nerf_no_abilities" );
}
prestige_getminammo()
{
return get_nerf_scalar( "nerf_min_ammo" );
}
prestige_getnodeployables()
{
return get_nerf_scalar( "nerf_no_deployables" );
}

View File

@ -0,0 +1,559 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
maps\mp\alien\_perks::init_perks();
maps\mp\alien\_combat_resources::init_combat_resources();
}
player_setup()
{
self setactionslot( 1, "" );
self setactionslot( 2, "" );
self setactionslot( 3, "" );
self setactionslot( 4, "" );
self notifyonplayercommand( "action_slot_1", "+actionslot 1" );
self notifyonplayercommand( "action_slot_2", "+actionslot 2" );
self notifyonplayercommand( "action_slot_3", "+actionslot 3" );
self notifyonplayercommand( "action_slot_4", "+actionslot 4" );
self notifyonplayercommand( "action_slot_1", "+actionslot 5" );
self notifyonplayercommand( "action_slot_2", "+actionslot 6" );
self notifyonplayercommand( "action_slot_3", "+actionslot 7" );
self notifyonplayercommand( "action_use", "+attack" );
self notifyonplayercommand( "action_use", "+attack_akimbo_accessible" );
self notifyonplayercommand( "change_weapon", "weapnext" );
thread player_watcher();
}
player_watcher()
{
if ( can_use_munition() )
{
thread player_action_slot( level.alien_combat_resources["munition"][maps\mp\alien\_persistence::get_selected_dpad_up()], maps\mp\alien\_persistence::get_dpad_up_level, "action_slot_1" );
thread player_action_slot( level.alien_combat_resources["support"][maps\mp\alien\_persistence::get_selected_dpad_down()], maps\mp\alien\_persistence::get_dpad_down_level, "action_slot_2" );
}
if ( can_use_ability() )
{
thread player_action_slot( level.alien_combat_resources["defense"][maps\mp\alien\_persistence::get_selected_dpad_left()], maps\mp\alien\_persistence::get_dpad_left_level, "action_slot_3" );
thread player_action_slot( level.alien_combat_resources["offense"][maps\mp\alien\_persistence::get_selected_dpad_right()], maps\mp\alien\_persistence::get_dpad_right_level, "action_slot_4" );
}
thread player_watch_upgrade();
if ( !maps\mp\alien\_utility::is_chaos_mode() )
thread player_watch_currency_transfer();
}
can_use_munition()
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return 0;
if ( maps\mp\alien\_prestige::prestige_getnodeployables() == 1.0 )
return 0;
return 1;
}
can_use_ability()
{
if ( maps\mp\alien\_prestige::prestige_getnoabilities() == 1.0 )
return 0;
return 1;
}
player_watch_upgrade()
{
thread player_watch_dpad_upgrade( level.alien_combat_resources["munition"][maps\mp\alien\_persistence::get_selected_dpad_up()] );
thread player_watch_dpad_upgrade( level.alien_combat_resources["support"][maps\mp\alien\_persistence::get_selected_dpad_down()] );
thread player_watch_dpad_upgrade( level.alien_combat_resources["defense"][maps\mp\alien\_persistence::get_selected_dpad_left()] );
thread player_watch_dpad_upgrade( level.alien_combat_resources["offense"][maps\mp\alien\_persistence::get_selected_dpad_right()] );
thread player_watch_perk_upgrade( level.alien_perks["perk_0"][maps\mp\alien\_persistence::get_selected_perk_0()], "perk_0" );
thread player_watch_perk_upgrade( level.alien_perks["perk_1"][maps\mp\alien\_persistence::get_selected_perk_1()], "perk_1" );
}
player_watch_dpad_upgrade( var_0 )
{
player_watch_upgrade_internal( var_0, var_0.type );
}
player_watch_perk_upgrade( var_0, var_1 )
{
thread player_watch_upgrade_internal( var_0, var_1 );
thread player_handle_perk_upgrades( var_0, var_1 );
}
player_watch_upgrade_internal( var_0, var_1 )
{
self endon( "disconnect" );
level endon( "game_ended" );
var_2 = var_1 + "_try_upgrade";
for (;;)
{
self waittillmatch( "luinotifyserver", var_2 );
var_3 = maps\mp\alien\_persistence::get_upgrade_level( var_1 );
if ( var_3 + 1 < var_0.upgrades.size && maps\mp\alien\_persistence::try_take_player_points( var_0.upgrades[var_3 + 1].point_cost ) )
{
var_3 = var_3 + 1;
maps\mp\alien\_persistence::set_upgrade_level( var_1, var_3 );
self notify( "upgrade_" + var_1 );
thread maps\mp\alien\_persistence::update_resource_stats( "upgrade", var_0.ref, 1 );
maps\mp\alien\_alien_matchdata::record_perk_upgrade( var_0.ref );
var_4 = -1;
if ( isdefined( level.current_cycle_num ) )
var_4 = level.current_cycle_num;
var_5 = "unknown";
if ( isdefined( self.name ) )
var_5 = self.name;
var_6 = "unknown";
if ( isdefined( level.current_hive_name ) )
var_6 = level.current_hive_name;
bbprint( "aliencombatresourceupgraded", "cyclenum %i hivename %s resource %s resourcelevel %s ownername %s ", var_4, var_6, var_0.ref, var_3, var_5 );
}
}
}
get_perk_ref_at_upgrade_level( var_0, var_1, var_2 )
{
return level.alien_perks[var_0][var_1].upgrades[var_2].ref;
}
player_handle_perk_upgrades( var_0, var_1 )
{
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
self waittill( "upgrade_" + var_1 );
var_2 = maps\mp\alien\_persistence::get_upgrade_level( var_1 );
maps\mp\alien\_persistence::unset_perk( get_perk_ref_at_upgrade_level( var_1, var_0.ref, var_2 - 1 ) );
maps\mp\alien\_persistence::set_perk( get_perk_ref_at_upgrade_level( var_1, var_0.ref, var_2 ) );
var_3 = maps\mp\alien\_persistence::get_selected_perk_0_secondary();
if ( var_1 == "perk_0" && var_3 != "perk_none" )
{
var_4 = level.alien_perks["perk_0"][var_3];
maps\mp\alien\_persistence::unset_perk( get_perk_ref_at_upgrade_level( var_1, var_4.ref, var_2 - 1 ) );
maps\mp\alien\_persistence::set_perk( get_perk_ref_at_upgrade_level( var_1, var_4.ref, var_2 ) );
}
}
}
restore_all_perks()
{
var_0 = maps\mp\alien\_persistence::get_selected_perk_0();
var_1 = maps\mp\alien\_persistence::get_perk_0_level();
maps\mp\alien\_persistence::set_perk( get_perk_ref_at_upgrade_level( "perk_0", var_0, var_1 ) );
var_2 = maps\mp\alien\_persistence::get_selected_perk_0_secondary();
if ( var_2 != "perk_none" )
{
var_3 = level.alien_perks["perk_0"][var_2];
maps\mp\alien\_persistence::set_perk( get_perk_ref_at_upgrade_level( "perk_0", var_3.ref, var_1 ) );
}
}
player_cancel()
{
player_cancel_internal();
self enableweapons();
self.alien_used_resource = undefined;
}
player_cancel_internal()
{
self endon( "player_action_slot_restart" );
self endon( "fired_ability_gun" );
common_scripts\utility::waittill_any( "change_weapon", "action_slot_1", "action_slot_2", "action_slot_3", "action_slot_4", "last_stand", "dpad_cancel" );
if ( maps\mp\alien\_utility::is_holding_deployable() && !self.is_holding_crate_marker )
{
if ( !isdefined( self.playerlinkedtochopper ) || !self.playerlinkedtochopper )
{
self.deployable = 0;
self notify( "cancel_deployable_via_marker" );
if ( !self hasweapon( "mortar_detonator_mp" ) && !self hasweapon( "switchblade_laptop_mp" ) )
self notify( "player_action_slot_restart" );
}
}
var_0 = self.alien_used_resource;
var_1 = self.alien_used_resource_rank;
self [[ var_0.callbacks.canceluse ]]( var_0, var_1 );
self notify( "player_action_slot_restart" );
}
player_watch_use()
{
self endon( "cancel_watch" );
self waittill( "action_use" );
return 1;
}
player_watch_riotshield_use( var_0, var_1 )
{
self endon( "cancel_watch" );
common_scripts\utility::_disableusability();
thread reenable_usability( 3.1 );
common_scripts\utility::waittill_any_timeout( 3, "action_use", "riotshield_block", "riotshield_melee" );
if ( maps\mp\alien\_persistence::player_has_enough_currency( ceil( var_0.upgrades[var_1].cost ) ) )
return 1;
else
{
self [[ var_0.callbacks.canceluse ]]( var_0, var_1 );
self notify( "action_finish_used" );
self notify( "player_action_slot_restart" );
return 0;
}
}
player_watch_equalizer_use( var_0, var_1 )
{
self endon( "cancel_watch" );
common_scripts\utility::waittill_any_timeout( 3, "action_use" );
if ( maps\mp\alien\_persistence::player_has_enough_currency( ceil( var_0.upgrades[var_1].cost ) ) )
return 1;
else
{
self [[ var_0.callbacks.canceluse ]]( var_0, var_1 );
self notify( "action_finish_used" );
self notify( "player_action_slot_restart" );
return 0;
}
}
player_watch_use_manned_turret()
{
self endon( "cancel_watch" );
for (;;)
{
self waittill( "action_use" );
if ( isdefined( self.carriedsentry ) )
{
if ( maps\mp\alien\_utility::is_true( self.carriedsentry.canbeplaced ) )
return 1;
}
}
}
player_watch_use_ims()
{
self endon( "disconnect" );
self endon( "cancel_watch" );
self waittill( "IMS_placed" );
return 1;
}
player_watch_use_sentry()
{
self endon( "disconnect" );
self endon( "cancel_watch" );
for (;;)
{
self waittill( "action_use" );
if ( isdefined( self.current_sentry ) )
{
var_0 = maps\mp\alien\_autosentry_alien::can_place_sentry( self.current_sentry );
if ( var_0 )
return 1;
}
wait 0.05;
}
}
player_use( var_0, var_1 )
{
self endon( "player_action_slot_restart" );
self endon( "disconnect" );
level endon( "game_ended" );
thread player_cancel();
self [[ var_0.callbacks.tryuse ]]( var_0, var_1 );
if ( self [[ var_0.callbacks.canuse ]]( var_0 ) )
{
if ( !show_alternate_spend_hint( var_0 ) )
thread maps\mp\alien\_hud::createspendhinthud( var_0, var_1 );
else
thread maps\mp\alien\_hud::createspendhinthud( var_0, var_1, &"ALIENS_PATCH_CANCEL_USE" );
var_2 = wait_for_use( var_0, var_1 );
if ( !isdefined( var_2 ) || !var_2 )
return;
if ( !maps\mp\alien\_persistence::player_has_enough_currency( ceil( var_0.upgrades[var_1].cost ) ) )
{
self notify( "dpad_cancel" );
return;
}
self playlocalsound( "alien_killstreak_equip" );
self thread [[ var_0.callbacks.use ]]( var_0, var_1 );
thread maps\mp\alien\_persistence::update_resource_stats( "purchase", var_0.ref, 1 );
maps\mp\alien\_persistence::take_player_currency( ceil( var_0.upgrades[var_1].cost ), 0, "ability" );
self.alien_used_resource = undefined;
var_3 = -1;
if ( isdefined( level.current_cycle_num ) )
var_3 = level.current_cycle_num;
var_4 = "unknown";
if ( isdefined( self.name ) )
var_4 = self.name;
var_5 = "unknown";
if ( isdefined( level.current_hive_name ) )
var_5 = level.current_hive_name;
bbprint( "aliencombatresourceused", "cyclenum %i hivename %s resource %s resourcelevel %s ownername %s ", var_3, var_5, var_0.ref, var_1, var_4 );
self notify( "action_finish_used" );
self notify( "player_action_slot_restart" );
}
}
show_alternate_spend_hint( var_0 )
{
if ( maps\mp\alien\_utility::level_uses_maaws() && issubstr( var_0.ref, "predator" ) )
return 1;
return issubstr( var_0.ref, "turret" ) || issubstr( var_0.ref, "_ims" );
}
wait_for_use( var_0, var_1 )
{
switch ( var_0.ref )
{
case "dpad_sentry":
return player_watch_use_sentry();
case "dpad_gl_sentry":
case "dpad_minigun_turret":
return player_watch_use_manned_turret();
case "dpad_ims":
return player_watch_use_ims();
case "dpad_placeholder_ammo_2":
case "dpad_team_ammo_ap":
case "dpad_team_ammo_stun":
case "dpad_team_ammo_explo":
case "dpad_team_ammo_in":
case "dpad_team_boost":
case "dpad_team_adrenaline":
case "dpad_team_randombox":
case "dpad_team_ammo_reg":
case "dpad_team_armor":
case "dpad_team_explosives":
return player_watch_box_thrown();
case "dpad_riotshield":
return player_watch_riotshield_use( var_0, var_1 );
case "dpad_death_machine":
case "dpad_war_machine":
return player_watch_equalizer_use( var_0, var_1 );
case "dpad_predator":
if ( maps\mp\alien\_utility::level_uses_maaws() )
return player_watch_equalizer_use( var_0, var_1 );
default:
return player_watch_use();
}
}
player_watch_box_thrown()
{
self endon( "cancel_watch" );
for (;;)
{
self waittill( "grenade_fire", var_0, var_1 );
if ( var_1 == "aliendeployable_crate_marker_mp" )
return 1;
}
}
player_action_slot_internal( var_0, var_1, var_2 )
{
self endon( "player_action_slot_block" );
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
self waittill( var_2 );
if ( maps\mp\alien\_utility::is_true( self.player_action_disabled ) )
continue;
if ( self usebuttonpressed() )
continue;
if ( self isonladder() )
continue;
if ( maps\mp\alien\_utility::has_special_weapon() )
{
maps\mp\_utility::setlowermessage( "cant_buy", &"ALIEN_COLLECTIBLES_PLAYER_HAS_SPECIALWEAPON", 3 );
continue;
}
if ( maps\mp\alien\_utility::is_true( self.picking_up_item ) )
continue;
if ( self isusingturret() )
continue;
if ( maps\mp\alien\_utility::is_true( self.hasprogressbar ) )
continue;
if ( maps\mp\alien\_utility::is_true( self.iscarrying ) )
continue;
if ( isdefined( self.throwinggrenade ) )
continue;
if ( common_scripts\utility::flag_exist( "escape_conditions_met" ) && common_scripts\utility::flag( "escape_conditions_met" ) )
continue;
var_3 = self [[ var_1 ]]();
if ( !maps\mp\alien\_persistence::player_has_enough_currency( ceil( var_0.upgrades[var_3].cost ) ) )
continue;
common_scripts\utility::_disableusability();
thread reenable_usability();
if ( !isdefined( self.alien_used_resource ) )
{
if ( self [[ var_0.callbacks.canpurchase ]]( var_0, var_3 ) )
{
self.alien_used_resource = var_0;
self.alien_used_resource_rank = var_3;
thread player_use( var_0, var_3 );
self notify( "player_action_slot_block" );
}
}
}
}
reenable_usability( var_0 )
{
self endon( "disconnect" );
if ( !isdefined( var_0 ) )
var_0 = 1;
wait( var_0 );
common_scripts\utility::_enableusability();
}
player_action_slot( var_0, var_1, var_2 )
{
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
thread player_action_slot_internal( var_0, var_1, var_2 );
self waittill( "player_action_slot_restart" );
wait 0.2;
}
}
player_watch_currency_transfer()
{
self endon( "disconnect" );
level endon( "game_ended" );
wait 0.05;
if ( maps\mp\alien\_utility::isplayingsolo() )
return;
var_0 = 0;
for (;;)
{
if ( is_drop_button_pressed() )
{
for ( var_1 = 2; is_drop_button_pressed() && var_1 >= 0; var_1 = var_1 - 0.05 )
wait 0.05;
if ( var_1 > 0 )
{
wait 0.05;
continue;
}
if ( maps\mp\alien\_persistence::player_has_enough_currency( level.deployable_currency_ranks[var_0] ) )
{
deploy_currency( var_0 );
level notify( "currency_dropped", self );
}
while ( is_drop_button_pressed() )
wait 0.05;
}
wait 0.5;
}
}
is_drop_button_pressed()
{
if ( !isdefined( self ) || !isalive( self ) )
return 0;
if ( isdefined( self.laststand ) && self.laststand )
return 0;
var_0 = self adsbuttonpressed();
var_1 = self jumpbuttonpressed();
return var_0 && var_1;
}
deploy_currency( var_0 )
{
self endon( "disconnect" );
self notify( "deploying_currency" );
maps\mp\alien\_persistence::take_player_currency( level.deployable_currency_ranks[var_0], 1 );
var_1 = "deployable_currency";
self.team_currency_rank = var_0;
var_2 = level.boxsettings[var_1].maxuses;
level.boxsettings[var_1].maxuses = 1;
var_3 = maps\mp\alien\_deployablebox::createboxforplayer( var_1, self.origin, self );
level.boxsettings[var_1].maxuses = var_2;
var_3.upgrade_rank = var_0;
var_3 playsoundtoplayer( level.boxsettings[var_1].deployedsfx, self );
thread currency_box_think( var_3 );
}
currency_box_think( var_0 )
{
self endon( "disconnect" );
var_0 endon( "death" );
wait 0.05;
var_0 thread maps\mp\alien\_deployablebox::box_setactive( 1 );
self waittill( "deploying_currency" );
if ( isdefined( var_0 ) )
var_0 maps\mp\alien\_deployablebox::box_leave();
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,241 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.killstreakfuncs["drone_hive"] = ::tryusedronehive;
level.dronemissilespawnarray = getentarray( "remoteMissileSpawn", "targetname" );
foreach ( var_1 in level.dronemissilespawnarray )
var_1.targetent = getent( var_1.target, "targetname" );
}
tryusedronehive( var_0, var_1, var_2, var_3, var_4 )
{
self notify( "action_use" );
level thread maps\mp\alien\_music_and_dialog::playvoforpredator( self );
return usedronehive( self, var_0, var_1, var_2, var_3, var_4 );
}
usedronehive( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_0 maps\mp\_utility::setusingremote( "remotemissile" );
self visionsetnakedforplayer( "black_bw", 0.75 );
maps\mp\alien\_utility::restore_client_fog( 0 );
thread maps\mp\_utility::set_visionset_for_watching_players( "black_bw", 0.75, 1.0 );
level thread rundronehive( var_0, var_1, var_2, var_3, var_4, var_5 );
level thread monitorgameend( var_0, var_1 );
return 1;
}
rundronehive( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_0 endon( "killstreak_disowned" );
level endon( "game_ended" );
if ( !isdefined( var_3 ) )
var_3 = "switchblade_rocket_mp";
if ( !isdefined( var_2 ) )
var_2 = 0;
var_0 notifyonplayercommand( "missileTargetSet", "+attack" );
var_6 = common_scripts\utility::getclosest( var_0.origin, level.dronemissilespawnarray );
var_7 = var_6.origin;
var_8 = var_0.origin;
var_9 = vectornormalize( var_7 - var_8 );
var_7 = var_9 * var_4 + var_8;
var_10 = magicbullet( var_3, var_7, var_8, var_0 );
var_10 setcandamage( 1 );
if ( var_2 != 0 )
var_10 disablemissileboosting();
var_10.team = var_0.team;
var_10.type = "remote";
var_10.owner = var_0;
var_10.entitynumber = var_10 getentitynumber();
level.rockets[var_10.entitynumber] = var_10;
level.remotemissileinprogress = 1;
level thread monitordeath( var_10 );
level thread monitorboost( var_10 );
missileeyes( var_0, var_10, var_1 );
var_0 notify( "action_use" );
var_0 setclientomnvar( "ui_predator_missile", 1 );
var_11 = 0;
for (;;)
{
var_12 = var_10 common_scripts\utility::waittill_any_return( "death", "missileTargetSet" );
if ( var_12 == "death" )
break;
if ( var_11 < var_2 )
{
level thread spawnswitchblade( var_10, var_11, var_5 );
var_11++;
}
if ( var_11 == var_2 )
var_10 enablemissileboosting();
}
var_0.turn_off_class_skill_activation = undefined;
returnplayer( var_0, var_1 );
}
getenemytargets( var_0 )
{
var_1 = [];
foreach ( var_3 in level.agentarray )
{
if ( !isdefined( var_3.isactive ) || !var_3.isactive )
continue;
var_1[var_1.size] = var_3;
}
return var_1;
}
spawnswitchblade( var_0, var_1, var_2 )
{
var_0.owner playlocalsound( "ammo_crate_use" );
var_3 = anglestoforward( var_0.angles );
var_4 = anglestoright( var_0.angles );
var_5 = ( 35, 35, 35 );
var_6 = ( 15000, 15000, 15000 );
if ( var_1 )
var_5 = var_5 * -1;
var_7 = bullettrace( var_0.origin, var_0.origin + var_3 * var_6, 0, var_0 );
var_6 = var_6 * var_7["fraction"];
var_8 = var_0.origin + var_4 * var_5;
var_9 = var_8 + var_3 * var_6;
var_10 = var_0.owner getenemytargets( var_0.owner );
var_11 = magicbullet( var_2, var_8, var_9, var_0.owner );
var_12 = 262144;
foreach ( var_14 in var_10 )
{
if ( distance2dsquared( var_14.origin, var_9 ) < var_12 )
{
var_11 missile_settargetent( var_14 );
break;
}
}
var_11 setcandamage( 1 );
var_11.team = var_0.team;
var_11.owner = var_0.owner;
var_11.entitynumber = var_11 getentitynumber();
level.rockets[var_11.entitynumber] = var_11;
level thread monitordeath( var_0 );
}
getnextmissilespawnindex( var_0 )
{
var_1 = var_0 + 1;
if ( var_1 == level.dronemissilespawnarray.size )
var_1 = 0;
return var_1;
}
monitorboost( var_0 )
{
var_0 endon( "death" );
for (;;)
{
var_0.owner waittill( "missileTargetSet" );
var_0 notify( "missileTargetSet" );
}
}
missileeyes( var_0, var_1, var_2 )
{
var_3 = 1.0;
var_0 maps\mp\_utility::freezecontrolswrapper( 1 );
if ( var_2 >= 1 )
var_0 thread delayedfofoverlay();
var_0 cameralinkto( var_1, "tag_origin" );
var_0 controlslinkto( var_1 );
var_0 visionsetmissilecamforplayer( "default", var_3 );
var_0 maps\mp\_utility::set_visionset_for_watching_players( "default", var_3, undefined, 1 );
var_0 visionsetmissilecamforplayer( game["thermal_vision_trinity"], 0.0 );
level thread unfreezecontrols( var_0, var_3 );
}
delayedfofoverlay()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 0.25 );
self thermalvisionfofoverlayon();
}
unfreezecontrols( var_0, var_1, var_2 )
{
var_0 endon( "disconnect" );
wait( var_1 - 0.35 );
var_0 maps\mp\_utility::freezecontrolswrapper( 0 );
}
monitordisownkillstreaks( var_0, var_1 )
{
var_0 endon( "end_kill_streak" );
var_0 waittill( "killstreak_disowned" );
level thread returnplayer( var_0, var_1 );
}
monitorgameend( var_0, var_1 )
{
var_0 endon( "end_kill_streak" );
level waittill( "game_ended" );
level thread returnplayer( var_0, var_1 );
}
monitordeath( var_0 )
{
var_0 waittill( "death" );
level.rockets[var_0.entitynumber] = undefined;
level.remotemissileinprogress = undefined;
}
returnplayer( var_0, var_1 )
{
if ( !isdefined( var_0 ) )
return;
var_0 setclientomnvar( "ui_predator_missile", 2 );
var_0 notify( "end_kill_streak" );
var_0 maps\mp\_utility::freezecontrolswrapper( 1 );
if ( var_1 >= 1 )
var_0 thermalvisionfofoverlayoff();
var_0 controlsunlink();
var_0 setexitpredatorvisionset();
wait 0.95;
var_0 cameraunlink();
var_0 setclientomnvar( "ui_predator_missile", 0 );
var_0 maps\mp\_utility::clearusingremote();
if ( isdefined( var_0.last_weapon ) )
var_0 switchtoweapon( var_0.last_weapon );
}
setexitpredatorvisionset()
{
var_0 = 0.5;
self visionsetnakedforplayer( "", var_0 );
self visionsetstage( 0, var_0 );
}

1746
maps/mp/alien/_trap.gsc Normal file

File diff suppressed because it is too large Load Diff

114
maps/mp/alien/_unlock.gsc Normal file
View File

@ -0,0 +1,114 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_unlock()
{
load_unlock_from_table();
}
init_player_unlock()
{
self.unlock_list = [];
if ( isdefined( level.unlock_registration_func ) )
[[ level.unlock_registration_func ]]();
if ( maps\mp\alien\_utility::is_true( level.include_default_unlocks ) )
register_default_unlocks();
}
register_default_unlocks()
{
register_unlock( "UNLOCK_ESCAPE", 1, 1, ::default_init );
register_unlock( "UNLOCK_ESCAPE_10_TIMES", 2, 10, ::default_init );
register_unlock( "UNLOCK_ESCAPE_20_TIMES", 3, 20, ::default_init );
register_unlock( "UNLOCK_ESCAPE_50_TIMES", 4, 50, ::default_init );
}
register_unlock( var_0, var_1, var_2, var_3 )
{
var_4 = spawnstruct();
var_4 [[ var_3 ]]( var_1, var_2 );
self.unlock_list[var_0] = var_4;
}
default_init( var_0, var_1 )
{
self.progress = 0;
self.index_map = var_0;
self.goal = var_1;
}
update_progress( var_0 )
{
self.progress = self.progress + var_0;
}
is_goal_achieved()
{
return self.progress >= self.goal;
}
is_valid_unlock( var_0 )
{
return isdefined( var_0 );
}
update_unlock( var_0, var_1 )
{
var_2 = self.unlock_list[var_0];
if ( !is_valid_unlock( var_2 ) )
return;
var_2 update_progress( var_1 );
if ( var_2 is_goal_achieved() )
var_3 = level.alien_unlock_data[var_2.index_map];
}
update_escape_item_unlock( var_0 )
{
foreach ( var_2 in var_0 )
{
var_3 = var_2 maps\mp\alien\_persistence::get_player_escaped();
var_2 update_personal_escape_item_unlock( var_3 );
var_4 = var_2 maps\mp\alien\_prestige::get_num_nerf_selected();
var_5 = var_2 maps\mp\alien\_persistence::get_player_highest_nerf_escape_count();
if ( var_4 > var_5 )
var_2 setcoopplayerdata( "alienPlayerStats", "headShots", var_4 );
}
}
update_personal_escape_item_unlock( var_0 )
{
update_unlock( "UNLOCK_ESCAPE", 1 );
update_unlock( "UNLOCK_ESCAPE_10_TIMES", var_0 );
update_unlock( "UNLOCK_ESCAPE_20_TIMES", var_0 );
update_unlock( "UNLOCK_ESCAPE_50_TIMES", var_0 );
}
load_unlock_from_table()
{
level.alien_unlock_data = [];
if ( isdefined( level.alien_unlock_table ) )
var_0 = level.alien_unlock_table;
else
var_0 = "mp/alien/unlocktable.csv";
for ( var_1 = 100; var_1 <= 110; var_1++ )
{
var_2 = tablelookup( var_0, 0, var_1, 1 );
if ( var_2 == "" )
break;
var_3 = tablelookup( var_0, 0, var_1, 3 );
var_4 = spawnstruct();
var_4.item = var_2;
var_4.type = var_3;
level.alien_unlock_data[level.alien_unlock_data.size] = var_4;
}
}

2497
maps/mp/alien/_utility.gsc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,580 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
register_armory_challenges()
{
level.custom_onalienagentdamaged_func = ::armory_custom_onalienagentdamaged_func;
level.challenge_ring_location_func = ::challenge_ring_locations;
maps\mp\alien\_challenge_function::register_challenge( "long_shot", undefined, 0, undefined, undefined, ::activate_long_shot, ::deactivate_long_shot, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "leaning_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "sliding_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "jump_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "focus_fire", undefined, 0, undefined, undefined, ::generic_activate_challenge, ::deactivate_focus_fire, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_marked", undefined, 0, undefined, undefined, ::activate_kill_marked, ::deactivate_kill_marked, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "barrel_kills", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "healthy_kills", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "minion_preexplode", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_nodamage", undefined, 0, undefined, undefined, ::activate_kill_nodamage, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::update_kill_nodamage );
maps\mp\alien\_challenge_function::register_challenge( "kill_phantom", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_eggs", undefined, 0, undefined, undefined, ::activate_shoot_spider_eggs, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_spider", undefined, 0, undefined, undefined, ::activate_kill_spider, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
}
generic_activate_challenge()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
self.current_progress = 0;
maps\mp\alien\_challenge_function::update_challenge_progress( 0, self.goal );
}
generic_update_challenge( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
{
level notify( "current_challenge_ended" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
else if ( maps\mp\alien\_utility::is_true( var_1 ) )
{
level notify( "current_challenge_ended" );
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
activate_long_shot()
{
generic_activate_challenge();
level thread long_shot_logic();
}
long_shot_logic()
{
level endon( "stop_longshot_logic" );
for (;;)
{
foreach ( var_6, var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( !isalive( var_1 ) )
continue;
if ( isdefined( var_1.pet ) )
continue;
var_2 = undefined;
foreach ( var_4 in level.players )
{
if ( is_long_shot( var_4, undefined, var_1 ) )
{
var_2 = 1;
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1, var_4, 0, 1, "high" );
continue;
}
if ( isdefined( var_4.isferal ) && var_4.isferal )
{
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1, var_4, 4, 0, "high" );
continue;
}
maps\mp\alien\_outline_proto::disable_outline_for_player( var_1, var_4 );
}
var_1.marked_for_challenge = var_2;
if ( var_6 % 2 == 0 )
wait 0.05;
}
wait 0.05;
}
}
deactivate_long_shot()
{
level notify( "stop_longshot_logic" );
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( isdefined( var_1.marked_for_challenge ) )
{
var_1.marked_for_challenge = undefined;
maps\mp\alien\_outline_proto::disable_outline( var_1 );
}
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_marked()
{
generic_activate_challenge();
level thread wait_for_marked_aliens( self );
}
wait_for_marked_aliens( var_0 )
{
level endon( "current_challenge_ended" );
var_1 = 0;
while ( var_1 < var_0.goal )
{
var_2 = maps\mp\alien\_spawnlogic::get_alive_agents();
foreach ( var_4 in var_2 )
{
if ( !isalive( var_4 ) || isdefined( var_4.pet ) )
continue;
if ( var_4.alien_type == "spider" || maps\mp\alien\_utility::is_true( var_4.marked_for_challenge ) )
continue;
var_4.marked_for_challenge = 1;
maps\mp\alien\_outline_proto::enable_outline( var_4, 0, 1 );
var_4 thread remove_outline_on_death();
var_1++;
if ( var_1 >= var_0.goal )
return;
}
wait 0.05;
}
}
deactivate_kill_marked()
{
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( isdefined( var_1.marked_for_challenge ) )
{
var_1.marked_for_challenge = undefined;
maps\mp\alien\_outline_proto::disable_outline( var_1 );
}
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_nodamage()
{
generic_activate_challenge();
level thread fail_kill_nodamage( self );
foreach ( var_1 in level.players )
var_1 thread kill_nodamage_monitor();
}
fail_kill_nodamage( var_0 )
{
level endon( "kill_nodamage_complete" );
level waittill( "kill_nodamage_failed" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "kill_nodamage_complete" );
}
kill_nodamage_monitor()
{
level endon( "kill_nodamage_complete" );
for (;;)
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
if ( maps\mp\alien\_utility::is_true( self.ability_invulnerable ) )
continue;
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::is_hardcore_mode() )
{
level notify( "kill_nodamage_failed" );
return;
}
else if ( isdefined( var_1 ) && isagent( var_1 ) )
{
level notify( "kill_nodamage_failed" );
return;
}
}
}
update_kill_nodamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
{
level notify( "kill_nodamage_complete" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
deactivate_focus_fire()
{
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( isdefined( var_1.damaged_by_players ) )
{
maps\mp\alien\_outline_proto::disable_outline( var_1 );
var_1.damaged_by_players = [];
}
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_spider()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
var_0 = int( gettime() + self.goal * 1000 );
foreach ( var_2 in level.players )
var_2 setclientomnvar( "ui_intel_timer", var_0 );
level.current_challenge_timer = self.goal;
level thread maps\mp\alien\_challenge_function::update_current_challenge_timer();
level thread kill_spider_timer( self );
thread update_kill_spider();
}
kill_spider_timer( var_0 )
{
level endon( "game_ended" );
level endon( "spider_battle_end" );
wait( var_0.goal );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "spider_challenge_failed" );
}
update_kill_spider()
{
level endon( "spider_challenge_failed" );
level waittill( "spider_battle_end" );
self.success = 1;
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_shoot_spider_eggs()
{
generic_activate_challenge();
level thread fail_spider_egg_challenge( self );
level thread beat_spider_egg_challenge( self );
}
beat_spider_egg_challenge( var_0 )
{
level endon( "spider_battle_end" );
for (;;)
{
level waittill( "egg_destroyed" );
maps\mp\alien\_challenge::update_challenge( "kill_eggs", 1 );
}
}
fail_spider_egg_challenge( var_0 )
{
level endon( "current_challenge_ended" );
level waittill( "spider_battle_end" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
armory_challenge_scalar_func( var_0 )
{
var_1 = maps\mp\alien\_challenge_function::default_challenge_scalar_func( var_0 );
if ( !isdefined( var_1 ) )
var_1 = get_scalar_from_table( var_0 );
if ( isdefined( var_1 ) )
{
}
return var_1;
}
get_scalar_from_table( var_0 )
{
var_1 = level.alien_challenge_table;
var_2 = 0;
var_3 = 1;
var_4 = 99;
var_5 = 1;
var_6 = 9;
for ( var_7 = var_3; var_7 <= var_4; var_7++ )
{
var_8 = tablelookup( var_1, var_2, var_7, var_5 );
if ( var_8 == "" )
return undefined;
if ( var_8 != var_0 )
continue;
var_9 = tablelookup( var_1, var_2, var_7, var_6 );
if ( isdefined( var_9 ) )
{
var_9 = strtok( var_9, " " );
if ( var_9.size > 0 )
return int( var_9[level.players.size - 1] );
}
}
}
armory_damage_challenge_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( level.current_challenge ) )
return;
switch ( level.current_challenge )
{
case "focus_fire":
if ( !isdefined( var_8 ) )
return 0;
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( !isdefined( var_8.damaged_by_players ) )
var_8.damaged_by_players = [];
if ( !common_scripts\utility::array_contains( var_8.damaged_by_players, var_1 ) )
{
var_8.damaged_by_players[var_8.damaged_by_players.size] = var_1;
var_8 maps\mp\alien\_challenge_function::focus_fire_update_alien_outline( var_1 );
}
}
return 0;
}
return 1;
}
armory_death_challenge_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( level.current_challenge ) )
return 0;
switch ( level.current_challenge )
{
case "long_shot":
if ( is_long_shot( var_1, var_4, self ) )
maps\mp\alien\_challenge::update_challenge( "long_shot", 1 );
return 0;
case "leaning_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() && var_1 isleaning() )
maps\mp\alien\_challenge::update_challenge( "leaning_shot", 1 );
return 0;
case "jump_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() && !var_1 isonground() )
maps\mp\alien\_challenge::update_challenge( "air_shot", 1 );
return 0;
case "sliding_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_3 == "MOD_MELEE" && var_1 is_sliding() )
maps\mp\alien\_challenge::update_challenge( "sliding_shot", 1 );
return 0;
case "focus_fire":
if ( isdefined( self.damaged_by_players ) && self.damaged_by_players.size >= level.players.size )
{
maps\mp\alien\_challenge::update_challenge( "focus_fire", 1 );
maps\mp\alien\_outline_proto::disable_outline_for_players( self, level.players );
}
return 0;
case "kill_marked":
if ( isdefined( self.marked_for_challenge ) )
maps\mp\alien\_challenge::update_challenge( "kill_marked", 1 );
else if ( var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "kill_marked", 0, 1 );
return 0;
case "barrel_kills":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_0 ) && isdefined( var_0.targetname ) && var_0.targetname == "scriptable_destructible_barrel" )
maps\mp\alien\_challenge::update_challenge( "barrel_kills", 1 );
return 0;
case "healthy_kills":
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_1.health >= var_1.maxhealth )
maps\mp\alien\_challenge::update_challenge( "healthy_kills", 1 );
return 0;
case "minion_preexplode":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "minion" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "minion_preexplode", 1 );
return 0;
case "kill_phantom":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "locust" && maps\mp\alien\_utility::is_true( self.is_cloaking ) )
maps\mp\alien\_challenge::update_challenge( "kill_phantom", 1 );
return 0;
case "kill_nodamage":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
maps\mp\alien\_challenge::update_challenge( "kill_nodamage", 1 );
return 0;
}
return 1;
}
is_long_shot( var_0, var_1, var_2 )
{
if ( isplayer( var_0 ) && isalive( var_0 ) && !var_0 maps\mp\_utility::isusingremote() )
{
if ( distancesquared( var_0.origin, var_2.origin ) >= 608400 )
return 1;
}
return 0;
}
is_sliding()
{
return isdefined( self.issliding ) || isdefined( self.isslidinggraceperiod ) && gettime() <= self.isslidinggraceperiod;
}
remove_outline_on_death()
{
level endon( "game_ended" );
self waittill( "death" );
if ( isdefined( self.challenge_headicon ) )
maps\mp\alien\_outline_proto::disable_outline( self );
}
armory_custom_onalienagentdamaged_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( isdefined( var_0 ) && isdefined( var_0.targetname ) && var_0.targetname == "scriptable_destructible_barrel" )
var_2 = var_2 + 750;
return var_2;
}
challenge_ring_locations( var_0 )
{
var_1 = [];
if ( isdefined( level.drill ) )
var_1[var_1.size] = level.drill.origin + ( 0, 0, 15 );
switch ( var_0 )
{
case "checkpoint_hive_01":
var_1[var_1.size] = ( -3904, -6944, 656 );
var_1[var_1.size] = ( -3296, -6688, 800 );
break;
case "checkpoint_hive_02":
var_1[var_1.size] = ( -2304, -6848, 620 );
var_1[var_1.size] = ( -2384, -5472, 620 );
var_1[var_1.size] = ( -1824, -6592, 796 );
break;
case "checkpoint_hive_03":
var_1[var_1.size] = ( -2656, -6336, 796 );
break;
case "checkpoint_hive_04":
var_1[var_1.size] = ( -2754.5, -5745.5, 818.545 );
var_1[var_1.size] = ( -1775.5, -6317, 818.545 );
break;
case "checkpoint_hive_05":
var_1[var_1.size] = ( -3619.5, -5835.5, 598.5 );
var_1[var_1.size] = ( -3907, -6235.5, 636.956 );
var_1[var_1.size] = ( -3088.5, -5738, 804.456 );
break;
case "compound_hive_01":
var_1[var_1.size] = ( -2716, -5047, 847.545 );
var_1[var_1.size] = ( -2716, -4492.5, 847.545 );
var_1[var_1.size] = ( -3600.5, -4886.5, 755.545 );
break;
case "compound_hive_02":
var_1[var_1.size] = ( -3875.5, -4079, 721.045 );
var_1[var_1.size] = ( -3025.5, -3949.5, 645.545 );
var_1[var_1.size] = ( -3180, -4674.5, 607.545 );
break;
case "compound_hive_03":
var_1[var_1.size] = ( -3872, -3136, 877.045 );
var_1[var_1.size] = ( -3962.5, -3717, 639.045 );
var_1[var_1.size] = ( -5127, -2992, 619.045 );
var_1[var_1.size] = ( -4479.5, -3756, 844.545 );
break;
case "compound_hive_04":
var_1[var_1.size] = ( -2954.78, -3323.5, 677.996 );
var_1[var_1.size] = ( -2287.28, -3195, 677.996 );
break;
case "compound_hive_05":
var_1[var_1.size] = ( -1269.28, -3383, 693.996 );
var_1[var_1.size] = ( -1965.28, -3104, 711.996 );
break;
case "compound_hive_06":
var_1[var_1.size] = ( -2138.28, -3246.5, 684.811 );
var_1[var_1.size] = ( -1927.78, -3632, 817.811 );
var_1[var_1.size] = ( -1770.78, -3315, 688.199 );
break;
case "compound_hive_07":
var_1[var_1.size] = ( -3056.78, -2784, 851.996 );
var_1[var_1.size] = ( -3381.28, -3157.5, 681.496 );
var_1[var_1.size] = ( -3601.28, -3111.5, 878.496 );
break;
case "compound_hive_08":
var_1[var_1.size] = ( -4069, -3665, 607.545 );
var_1[var_1.size] = ( -3875.5, -4079, 721.045 );
var_1[var_1.size] = ( -3180, -4674.5, 607.545 );
break;
case "facility_hive_01":
var_1[var_1.size] = ( -2039.78, -1898, 684 );
var_1[var_1.size] = ( -1550.78, -1185, 865.5 );
var_1[var_1.size] = ( -2227.28, -1288, 684 );
break;
case "facility_hive_02":
var_1[var_1.size] = ( -2927.28, -912.495, 681 );
var_1[var_1.size] = ( -2816.78, -235.995, 818.5 );
var_1[var_1.size] = ( -1671.78, -589.495, 862.5 );
break;
case "facility_hive_03":
var_1[var_1.size] = ( -2852.78, -222.495, 845.5 );
var_1[var_1.size] = ( -3284.28, -237.495, 812 );
var_1[var_1.size] = ( -2559.28, -843.495, 1023 );
var_1[var_1.size] = ( -3191.78, -1478, 812 );
break;
case "facility_hive_04":
var_1[var_1.size] = ( -2527.28, -1754.5, 688.199 );
var_1[var_1.size] = ( -3186.28, -1577.5, 810.699 );
case "facility_hive_05":
var_1[var_1.size] = ( -1666.28, -897.995, 860 );
var_1[var_1.size] = ( -1322.28, -856.995, 1006 );
var_1[var_1.size] = ( -2249.28, -1273.5, 1005.5 );
case "facility_hive_07":
var_1[var_1.size] = ( -1332.78, -871.995, 996.5 );
var_1[var_1.size] = ( -2225.78, -1288, 990.5 );
var_1[var_1.size] = ( -2631.28, -861.995, 990.5 );
break;
}
return common_scripts\utility::random( var_1 );
}

View File

@ -0,0 +1,600 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
register_beacon_challenges()
{
level.custom_onalienagentdamaged_func = ::beacon_custom_onalienagentdamaged_func;
level.challenge_ring_location_func = ::challenge_ring_locations;
maps\mp\alien\_challenge_function::register_challenge( "long_shot", undefined, 0, undefined, undefined, ::activate_long_shot, ::deactivate_long_shot, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "leaning_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "sliding_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "jump_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "focus_fire", undefined, 0, undefined, undefined, ::generic_activate_challenge, ::deactivate_focus_fire, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_marked", undefined, 0, undefined, undefined, ::activate_kill_marked, ::deactivate_kill_marked, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "barrel_kills", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "healthy_kills", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "minion_preexplode", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_nodamage", undefined, 0, undefined, undefined, ::activate_kill_nodamage, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::update_kill_nodamage );
maps\mp\alien\_challenge_function::register_challenge( "kill_phantom", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_eggs", undefined, 0, undefined, undefined, ::activate_shoot_spider_eggs, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_tentacle", undefined, 0, undefined, undefined, ::activate_kill_tentacle, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
}
generic_activate_challenge()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
self.current_progress = 0;
maps\mp\alien\_challenge_function::update_challenge_progress( 0, self.goal );
}
generic_update_challenge( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
{
level notify( "current_challenge_ended" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
else if ( maps\mp\alien\_utility::is_true( var_1 ) )
{
level notify( "current_challenge_ended" );
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
activate_long_shot()
{
generic_activate_challenge();
level thread long_shot_logic();
}
long_shot_logic()
{
level endon( "stop_longshot_logic" );
for (;;)
{
foreach ( var_6, var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( !isalive( var_1 ) )
continue;
if ( isdefined( var_1.pet ) )
continue;
var_2 = undefined;
foreach ( var_4 in level.players )
{
if ( is_long_shot( var_4, undefined, var_1 ) )
{
var_2 = 1;
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1, var_4, 0, 1, "high" );
continue;
}
if ( isdefined( var_4.isferal ) && var_4.isferal )
{
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1, var_4, 4, 0, "high" );
continue;
}
maps\mp\alien\_outline_proto::disable_outline_for_player( var_1, var_4 );
}
var_1.marked_for_challenge = var_2;
if ( var_6 % 2 == 0 )
wait 0.05;
}
wait 0.05;
}
}
deactivate_long_shot()
{
level notify( "stop_longshot_logic" );
wait 1;
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
foreach ( var_3 in level.players )
{
if ( isdefined( var_1.marked_for_challenge ) )
maps\mp\alien\_outline_proto::disable_outline_for_player( var_1, var_3 );
}
var_1.marked_for_challenge = undefined;
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_marked()
{
generic_activate_challenge();
level thread wait_for_marked_aliens( self );
}
wait_for_marked_aliens( var_0 )
{
level endon( "current_challenge_ended" );
var_1 = 0;
while ( var_1 < var_0.goal )
{
var_2 = maps\mp\alien\_spawnlogic::get_alive_agents();
foreach ( var_4 in var_2 )
{
if ( !isalive( var_4 ) || isdefined( var_4.pet ) )
continue;
if ( var_4.alien_type == "spider" || maps\mp\alien\_utility::is_true( var_4.marked_for_challenge ) )
continue;
var_4.marked_for_challenge = 1;
maps\mp\alien\_outline_proto::enable_outline( var_4, 0, 1 );
var_4 thread remove_outline_on_death();
var_1++;
if ( var_1 >= var_0.goal )
return;
}
wait 0.05;
}
}
deactivate_kill_marked()
{
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( isdefined( var_1.marked_for_challenge ) )
{
var_1.marked_for_challenge = undefined;
maps\mp\alien\_outline_proto::disable_outline( var_1 );
}
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_nodamage()
{
generic_activate_challenge();
level thread fail_kill_nodamage( self );
foreach ( var_1 in level.players )
var_1 thread kill_nodamage_monitor();
}
fail_kill_nodamage( var_0 )
{
level endon( "kill_nodamage_complete" );
level waittill( "kill_nodamage_failed" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "kill_nodamage_complete" );
}
kill_nodamage_monitor()
{
level endon( "kill_nodamage_complete" );
for (;;)
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
if ( maps\mp\alien\_utility::is_true( self.ability_invulnerable ) )
continue;
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::is_hardcore_mode() )
{
level notify( "kill_nodamage_failed" );
return;
}
else if ( isdefined( var_1 ) && isagent( var_1 ) )
{
level notify( "kill_nodamage_failed" );
return;
}
}
}
update_kill_nodamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
{
level notify( "kill_nodamage_complete" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
deactivate_focus_fire()
{
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( isdefined( var_1.damaged_by_players ) )
{
maps\mp\alien\_outline_proto::disable_outline( var_1 );
var_1.damaged_by_players = [];
}
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_spider()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
var_0 = int( gettime() + self.goal * 1000 );
foreach ( var_2 in level.players )
var_2 setclientomnvar( "ui_intel_timer", var_0 );
level.current_challenge_timer = self.goal;
level thread maps\mp\alien\_challenge_function::update_current_challenge_timer();
level thread kill_spider_timer( self );
thread update_kill_spider();
}
kill_spider_timer( var_0 )
{
level endon( "game_ended" );
level endon( "spider_battle_end" );
wait( var_0.goal );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "spider_challenge_failed" );
}
update_kill_spider()
{
level endon( "spider_challenge_failed" );
level waittill( "spider_battle_end" );
self.success = 1;
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_shoot_spider_eggs()
{
generic_activate_challenge();
level thread fail_spider_egg_challenge( self );
level thread beat_spider_egg_challenge( self );
}
beat_spider_egg_challenge( var_0 )
{
level endon( "spider_battle_end" );
for (;;)
{
level waittill( "egg_destroyed" );
maps\mp\alien\_challenge::update_challenge( "kill_eggs", 1 );
}
}
fail_spider_egg_challenge( var_0 )
{
level endon( "current_challenge_ended" );
level waittill( "spider_battle_end" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_kill_tentacle()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
level thread fail_tentacle_challenge( self );
level thread beat_tentacle_challenge( self );
}
beat_tentacle_challenge( var_0 )
{
level endon( "drill_detonated" );
level waittill( "miniboss_beaten" );
var_0.success = 1;
if ( var_0.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
fail_tentacle_challenge( var_0 )
{
level endon( "miniboss_beaten" );
level waittill( "drill_detonated" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
beacon_challenge_scalar_func( var_0 )
{
var_1 = maps\mp\alien\_challenge_function::default_challenge_scalar_func( var_0 );
if ( !isdefined( var_1 ) )
var_1 = get_scalar_from_table( var_0 );
if ( isdefined( var_1 ) )
{
}
return var_1;
}
get_scalar_from_table( var_0 )
{
var_1 = level.alien_challenge_table;
var_2 = 0;
var_3 = 1;
var_4 = 99;
var_5 = 1;
var_6 = 9;
for ( var_7 = var_3; var_7 <= var_4; var_7++ )
{
var_8 = tablelookup( var_1, var_2, var_7, var_5 );
if ( var_8 == "" )
return undefined;
if ( var_8 != var_0 )
continue;
var_9 = tablelookup( var_1, var_2, var_7, var_6 );
if ( isdefined( var_9 ) )
{
var_9 = strtok( var_9, " " );
if ( var_9.size > 0 )
return int( var_9[level.players.size - 1] );
}
}
}
beacon_damage_challenge_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( level.current_challenge ) )
return;
switch ( level.current_challenge )
{
case "focus_fire":
if ( !isdefined( var_8 ) )
return 0;
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( !isdefined( var_8.damaged_by_players ) )
var_8.damaged_by_players = [];
if ( !common_scripts\utility::array_contains( var_8.damaged_by_players, var_1 ) )
{
var_8.damaged_by_players[var_8.damaged_by_players.size] = var_1;
var_8 maps\mp\alien\_challenge_function::focus_fire_update_alien_outline( var_1 );
}
}
return 0;
}
return 1;
}
beacon_death_challenge_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( level.current_challenge ) )
return 0;
switch ( level.current_challenge )
{
case "long_shot":
if ( is_long_shot( var_1, var_4, self ) )
maps\mp\alien\_challenge::update_challenge( "long_shot", 1 );
return 0;
case "leaning_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() && var_1 isleaning() )
maps\mp\alien\_challenge::update_challenge( "leaning_shot", 1 );
return 0;
case "jump_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() && !var_1 isonground() )
maps\mp\alien\_challenge::update_challenge( "air_shot", 1 );
return 0;
case "sliding_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_3 == "MOD_MELEE" && var_1 is_sliding() )
maps\mp\alien\_challenge::update_challenge( "sliding_shot", 1 );
return 0;
case "focus_fire":
if ( isdefined( self.damaged_by_players ) && self.damaged_by_players.size >= level.players.size )
{
maps\mp\alien\_challenge::update_challenge( "focus_fire", 1 );
maps\mp\alien\_outline_proto::disable_outline_for_players( self, level.players );
}
return 0;
case "kill_marked":
if ( isdefined( self.marked_for_challenge ) )
maps\mp\alien\_challenge::update_challenge( "kill_marked", 1 );
else if ( var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "kill_marked", 0, 1 );
return 0;
case "barrel_kills":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_0 ) && isdefined( var_0.targetname ) && var_0.targetname == "scriptable_destructible_barrel" )
maps\mp\alien\_challenge::update_challenge( "barrel_kills", 1 );
return 0;
case "healthy_kills":
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_1.health >= var_1.maxhealth )
maps\mp\alien\_challenge::update_challenge( "healthy_kills", 1 );
return 0;
case "minion_preexplode":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "minion" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "minion_preexplode", 1 );
return 0;
case "kill_phantom":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "locust" && maps\mp\alien\_utility::is_true( self.is_cloaking ) )
maps\mp\alien\_challenge::update_challenge( "kill_phantom", 1 );
return 0;
case "kill_nodamage":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
maps\mp\alien\_challenge::update_challenge( "kill_nodamage", 1 );
return 0;
}
return 1;
}
is_long_shot( var_0, var_1, var_2 )
{
if ( isplayer( var_0 ) && isalive( var_0 ) && !var_0 maps\mp\_utility::isusingremote() )
{
if ( distancesquared( var_0.origin, var_2.origin ) >= 608400 )
return 1;
}
return 0;
}
is_sliding()
{
return isdefined( self.issliding ) || isdefined( self.isslidinggraceperiod ) && gettime() <= self.isslidinggraceperiod;
}
remove_outline_on_death()
{
level endon( "game_ended" );
self waittill( "death" );
if ( isdefined( self.challenge_headicon ) )
maps\mp\alien\_outline_proto::disable_outline( self );
}
beacon_custom_onalienagentdamaged_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( isdefined( var_5 ) && var_5 == "turret_minigun_alien_shock" )
{
beacon_shock_turret_hit_marker_override( var_1, "standard" );
if ( isdefined( level.shock_turret_bullet_damage_scalar ) )
var_2 = var_2 * level.shock_turret_bullet_damage_scalar;
}
if ( isdefined( var_0 ) && isdefined( var_0.targetname ) && var_0.targetname == "scriptable_destructible_barrel" )
var_2 = var_2 + 750;
return var_2;
}
beacon_shock_turret_hit_marker_override( var_0, var_1 )
{
if ( isdefined( var_0.owner ) )
var_0.owner thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( var_1 );
else
var_0 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( var_1 );
}
challenge_ring_locations( var_0 )
{
var_1 = [];
if ( isdefined( level.drill ) )
var_1[var_1.size] = level.drill.origin + ( 0, 0, 15 );
switch ( var_0 )
{
case "mini_lung_00":
var_1[var_1.size] = ( -673, -697, 196 );
var_1[var_1.size] = ( 220, -2735, 188 );
var_1[var_1.size] = ( -620, -2940, 60 );
break;
case "well_deck_2":
var_1[var_1.size] = ( -186, -1823, 60 );
var_1[var_1.size] = ( 197, -1936, 188 );
break;
case "well_deck_3":
var_1[var_1.size] = ( -1092, 87, -68 );
break;
case "cargo_area_mini_1":
var_1[var_1.size] = ( 521, 3238, 388 );
break;
case "cargo_area_mini_2":
var_1[var_1.size] = ( 40, 2564, 304 );
var_1[var_1.size] = ( -577, 2159, 196 );
break;
case "cargo_area_mini_3":
break;
case "cargo_area_mini_4":
var_1[var_1.size] = ( 843, 2369, 244 );
var_1[var_1.size] = ( -577, 2159, 196 );
break;
case "cargo_area_main":
break;
case "top_deck_mini_1":
var_1[var_1.size] = ( -146, 3486, 1212 );
var_1[var_1.size] = ( -46, 2461, 1212 );
break;
case "top_deck_mini_2":
var_1[var_1.size] = ( 218, 2991, 1348 );
var_1[var_1.size] = ( -440, 3379, 1212 );
var_1[var_1.size] = ( 697, 2224, 1212 );
break;
case "top_deck_mini_3":
var_1[var_1.size] = ( -10, 2756, 1348 );
var_1[var_1.size] = ( -436, 2915, 1212 );
break;
case "lab_mini_1":
var_1[var_1.size] = ( 229, 5094, 1338 );
var_1[var_1.size] = ( -768, 5276, 1338 );
var_1[var_1.size] = ( 159, 5307, 1468 );
break;
case "lab_mini_2":
var_1[var_1.size] = ( -911, 5707, 1216 );
var_1[var_1.size] = ( -277, 4604, 1468 );
var_1[var_1.size] = ( -565, 5674, 1468 );
var_1[var_1.size] = ( 188, 5720, 1212 );
break;
case "lab_mini_3":
var_1[var_1.size] = ( 98, 4543, 1468 );
var_1[var_1.size] = ( -741, 4914, 1468 );
var_1[var_1.size] = ( -365, 4865, 1380 );
var_1[var_1.size] = ( -909, 5309, 1216 );
break;
case "lab_mini_4":
var_1[var_1.size] = ( -762, 4181, 1340 );
var_1[var_1.size] = ( -210, 4854, 1380 );
var_1[var_1.size] = ( 224, 4710, 1338 );
break;
case "lab_area_main":
break;
}
return common_scripts\utility::random( var_1 );
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,777 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
register_dlc3_challenges()
{
level.custom_onalienagentdamaged_func = ::dlc3_custom_onalienagentdamaged_func;
level.challenge_ring_location_func = ::challenge_ring_locations;
maps\mp\alien\_challenge_function::register_challenge( "long_shot", undefined, 0, undefined, undefined, ::activate_long_shot, ::deactivate_long_shot, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "leaning_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "sliding_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "jump_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "focus_fire", undefined, 0, undefined, undefined, ::generic_activate_challenge, ::deactivate_focus_fire, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_marked", undefined, 0, undefined, undefined, ::activate_kill_marked, ::deactivate_kill_marked, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "barrel_kills", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "healthy_kills", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "minion_preexplode", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_nodamage", undefined, 0, undefined, undefined, ::activate_kill_nodamage, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::update_kill_nodamage );
maps\mp\alien\_challenge_function::register_challenge( "kill_phantom", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "bomber_preexplode", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "flying_aliens", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "melee_gargoyles", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "melee_mammoth", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "higher_ground", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_rhinos", undefined, 0, undefined, undefined, ::activate_kill_rhinos, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "lower_ground", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "new_weapon", undefined, 0, undefined, undefined, ::activate_new_weapons, ::deactivate_new_weapons, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "team_prone", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "semi_autos_only", undefined, 0, undefined, undefined, maps\mp\alien\_challenge_function::activate_use_weapon_challenge, maps\mp\alien\_challenge_function::deactivate_weapon_challenge_waypoints, undefined, ::update_semi_autos_only );
maps\mp\alien\_challenge_function::register_challenge( "2_weapons_only", undefined, 0, undefined, undefined, ::activate_2_weapons_only_challenge, ::deactivate_2_weapons_only, undefined, ::update_2_weapons_only );
maps\mp\alien\_challenge_function::register_challenge( "melee_5_goons_dlc3", undefined, 0, undefined, undefined, maps\mp\alien\_challenge_function::activate_melee_goons, maps\mp\alien\_challenge_function::deactivate_melee_goons, undefined, maps\mp\alien\_challenge_function::update_melee_goons );
}
generic_activate_challenge()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
self.current_progress = 0;
maps\mp\alien\_challenge_function::update_challenge_progress( 0, self.goal );
}
generic_update_challenge( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
{
level notify( "current_challenge_ended" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
else if ( maps\mp\alien\_utility::is_true( var_1 ) )
{
level notify( "current_challenge_ended" );
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
activate_long_shot()
{
generic_activate_challenge();
level thread long_shot_logic();
}
long_shot_logic()
{
level endon( "stop_longshot_logic" );
for (;;)
{
foreach ( var_5, var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
foreach ( var_3 in level.players )
{
if ( is_long_shot( var_3, undefined, var_1 ) )
{
var_1.marked_for_challenge = 1;
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1, var_3, 0, 1, "high" );
continue;
}
var_1.marked_for_challenge = undefined;
if ( isdefined( var_3.isferal ) && var_3.isferal )
{
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1, var_3, 4, 0, "high" );
continue;
}
maps\mp\alien\_outline_proto::disable_outline_for_player( var_1, var_3 );
}
if ( var_5 % 2 == 0 )
wait 0.05;
}
wait 0.05;
}
}
deactivate_long_shot()
{
level notify( "stop_longshot_logic" );
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( isdefined( var_1.marked_for_challenge ) )
{
var_1.marked_for_challenge = undefined;
maps\mp\alien\_outline_proto::disable_outline( var_1 );
}
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_marked()
{
generic_activate_challenge();
level thread wait_for_marked_aliens( self );
}
wait_for_marked_aliens( var_0 )
{
level endon( "current_challenge_ended" );
var_1 = 0;
while ( var_1 < var_0.goal )
{
var_2 = maps\mp\alien\_spawnlogic::get_alive_agents();
foreach ( var_4 in var_2 )
{
if ( !isalive( var_4 ) || maps\mp\alien\_utility::is_true( var_4.pet ) )
continue;
if ( var_4.alien_type == "bomber" || maps\mp\alien\_utility::is_true( var_4.marked_for_challenge ) )
continue;
var_4.marked_for_challenge = 1;
maps\mp\alien\_outline_proto::enable_outline( var_4, 0, 1 );
var_4 thread remove_outline_on_death();
var_1++;
if ( var_1 >= var_0.goal )
return;
}
wait 0.05;
}
}
deactivate_kill_marked()
{
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( isdefined( var_1.marked_for_challenge ) )
{
var_1.marked_for_challenge = undefined;
maps\mp\alien\_outline_proto::disable_outline( var_1 );
}
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_nodamage()
{
generic_activate_challenge();
level thread fail_kill_nodamage( self );
foreach ( var_1 in level.players )
var_1 thread kill_nodamage_monitor();
}
fail_kill_nodamage( var_0 )
{
level endon( "kill_nodamage_complete" );
level waittill( "kill_nodamage_failed" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "kill_nodamage_complete" );
}
kill_nodamage_monitor()
{
level endon( "kill_nodamage_complete" );
for (;;)
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
if ( maps\mp\alien\_utility::is_true( self.ability_invulnerable ) )
continue;
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::is_hardcore_mode() )
{
level notify( "kill_nodamage_failed" );
return;
}
else if ( isdefined( var_1 ) && isagent( var_1 ) || var_5 == "alien_minion_explosion" )
{
level notify( "kill_nodamage_failed" );
return;
}
}
}
update_kill_nodamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
{
level notify( "kill_nodamage_complete" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
deactivate_focus_fire()
{
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( isdefined( var_1.damaged_by_players ) )
{
maps\mp\alien\_outline_proto::disable_outline( var_1 );
var_1.damaged_by_players = [];
}
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_rhinos()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
level thread watch_rhino_deaths( self );
}
watch_rhino_deaths( var_0 )
{
level endon( "rhino_challenge_complete" );
level endon( "end_cycle" );
level.current_challenge_timer = 0;
level thread fail_rhino_challenge();
for (;;)
{
level waittill( "rhino_killed" );
if ( level.current_challenge_timer <= 0 )
{
var_1 = int( gettime() + 20000 );
foreach ( var_3 in level.players )
var_3 setclientomnvar( "ui_intel_timer", var_1 );
level.current_challenge_timer = 20;
level thread maps\mp\alien\_challenge_function::update_current_challenge_timer();
continue;
}
level notify( "rhinos_killed" );
var_0.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
return;
}
}
fail_rhino_challenge( var_0 )
{
level endon( "game_ended" );
level endon( "rhinos_killed" );
level waittill( "current_challenge_ended" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "rhino_challenge_complete" );
}
activate_new_weapons()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
level thread watch_players_new_weapons( self );
}
watch_players_new_weapons( var_0 )
{
level endon( "stop_newweapon_challenge_monitor" );
for (;;)
{
level waittill( "new_weapon_purchased", var_1 );
var_1.new_weapon_purchased = 1;
level thread check_for_new_weapon_complete( var_0 );
}
}
check_for_new_weapon_complete( var_0 )
{
var_1 = 1;
foreach ( var_3 in level.players )
{
if ( !maps\mp\alien\_utility::is_true( var_3.new_weapon_purchased ) )
var_1 = 0;
}
if ( var_1 )
{
var_0.success = 1;
level notify( "stop_newweapon_challenge_monitor" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
deactivate_new_weapons()
{
level notify( "stop_newweapon_challenge_monitor" );
maps\mp\alien\_challenge_function::default_resetsuccess();
}
dlc3_challenge_scalar_func( var_0 )
{
var_1 = maps\mp\alien\_challenge_function::default_challenge_scalar_func( var_0 );
if ( !isdefined( var_1 ) )
var_1 = get_scalar_from_table( var_0 );
if ( isdefined( var_1 ) )
{
}
return var_1;
}
get_scalar_from_table( var_0 )
{
var_1 = level.alien_challenge_table;
var_2 = 0;
var_3 = 1;
var_4 = 99;
var_5 = 1;
var_6 = 9;
for ( var_7 = var_3; var_7 <= var_4; var_7++ )
{
var_8 = tablelookup( var_1, var_2, var_7, var_5 );
if ( var_8 == "" )
return undefined;
if ( var_8 != var_0 )
continue;
var_9 = tablelookup( var_1, var_2, var_7, var_6 );
if ( isdefined( var_9 ) )
{
var_9 = strtok( var_9, " " );
if ( var_9.size > 0 )
return int( var_9[level.players.size - 1] );
}
}
}
dlc3_damage_challenge_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( level.current_challenge ) )
return;
switch ( level.current_challenge )
{
case "focus_fire":
if ( !isdefined( var_8 ) )
return 0;
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( !isdefined( var_8.damaged_by_players ) )
var_8.damaged_by_players = [];
if ( !common_scripts\utility::array_contains( var_8.damaged_by_players, var_1 ) )
{
var_8.damaged_by_players[var_8.damaged_by_players.size] = var_1;
var_8 maps\mp\alien\_challenge_function::focus_fire_update_alien_outline( var_1 );
}
}
return 0;
}
return 1;
}
dlc3_death_challenge_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( level.current_challenge ) )
return 0;
if ( level.current_challenge == "kill_marked" && !isdefined( self.marked_for_challenge ) && var_3 == "MOD_SUICIDE" )
return 0;
switch ( level.current_challenge )
{
case "long_shot":
if ( is_long_shot( var_1, var_4, self ) )
maps\mp\alien\_challenge::update_challenge( "long_shot", 1 );
return 0;
case "leaning_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() && var_1 isleaning() )
maps\mp\alien\_challenge::update_challenge( "leaning_shot", 1 );
return 0;
case "jump_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() && !var_1 isonground() )
maps\mp\alien\_challenge::update_challenge( "jump_shot", 1 );
return 0;
case "sliding_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_3 == "MOD_MELEE" && var_1 is_sliding() )
maps\mp\alien\_challenge::update_challenge( "sliding_shot", 1 );
return 0;
case "focus_fire":
if ( isdefined( self.damaged_by_players ) && self.damaged_by_players.size >= level.players.size )
{
maps\mp\alien\_challenge::update_challenge( "focus_fire", 1 );
maps\mp\alien\_outline_proto::disable_outline_for_players( self, level.players );
}
return 0;
case "kill_marked":
if ( isdefined( self.marked_for_challenge ) )
maps\mp\alien\_challenge::update_challenge( "kill_marked", 1 );
else
maps\mp\alien\_challenge::update_challenge( "kill_marked", 0, 1 );
return 0;
case "barrel_kills":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_0 ) && isdefined( var_0.targetname ) && var_0.targetname == "scriptable_destructible_barrel" )
maps\mp\alien\_challenge::update_challenge( "barrel_kills", 1 );
return 0;
case "healthy_kills":
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_1.health >= var_1.maxhealth )
maps\mp\alien\_challenge::update_challenge( "healthy_kills", 1 );
return 0;
case "minion_preexplode":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "minion" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "minion_preexplode", 1 );
return 0;
case "bomber_preexplode":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "bomber" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "bomber_preexplode", 1 );
return 0;
case "kill_phantom":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "locust" && maps\mp\alien\_utility::is_true( self.is_cloaking ) )
maps\mp\alien\_challenge::update_challenge( "kill_phantom", 1 );
return 0;
case "kill_nodamage":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
maps\mp\alien\_challenge::update_challenge( "kill_nodamage", 1 );
return 0;
case "flying_aliens":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( maps\mp\alien\_utility::get_alien_type() == "bomber" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "flying_aliens", 1 );
else if ( maps\mp\alien\_utility::get_alien_type() == "gargoyle" && maps\mp\alien\_utility::is_true( self.in_air ) )
maps\mp\alien\_challenge::update_challenge( "flying_aliens", 1 );
}
return 0;
case "melee_gargoyles":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "gargoyle" && var_3 == "MOD_MELEE" )
maps\mp\alien\_challenge::update_challenge( "melee_gargoyles", 1 );
return 0;
case "melee_mammoth":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "mammoth" && var_3 == "MOD_MELEE" )
maps\mp\alien\_challenge::update_challenge( "melee_mammoth", 1 );
return 0;
case "higher_ground":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( !isdefined( var_0 ) || isdefined( var_0 ) && !maps\mp\alien\_utility::is_trap( var_0 ) )
{
if ( var_1.origin[2] - self.origin[2] > 100 )
maps\mp\alien\_challenge::update_challenge( "higher_ground", 1 );
}
}
return 0;
case "lower_ground":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( !isdefined( var_0 ) || isdefined( var_0 ) && !maps\mp\alien\_utility::is_trap( var_0 ) )
{
if ( self.origin[2] - var_1.origin[2] > 100 )
maps\mp\alien\_challenge::update_challenge( "lower_ground", 1 );
}
}
return 0;
case "kill_rhinos":
if ( isdefined( self.alien_type ) && self.alien_type == "elite" )
level notify( "rhino_killed" );
return 0;
case "team_prone":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() )
{
var_9 = 1;
foreach ( var_11 in level.players )
{
if ( var_11 getstance() != "prone" )
var_9 = 0;
}
if ( var_9 )
maps\mp\alien\_challenge::update_challenge( "team_prone", 1 );
}
return 0;
case "semi_autos_only":
case "2_weapons_only":
maps\mp\alien\_challenge::update_challenge( level.current_challenge, var_4, var_3 );
return 0;
case "melee_5_goons_dlc3":
if ( isdefined( self.alien_type ) && self.alien_type == "goon" && isdefined( var_1 ) && isplayer( var_1 ) && var_3 == "MOD_MELEE" )
maps\mp\alien\_challenge::update_challenge( "melee_5_goons_dlc3", 1 );
return 0;
}
return 1;
}
is_long_shot( var_0, var_1, var_2 )
{
if ( isplayer( var_0 ) && isalive( var_0 ) && !var_0 maps\mp\_utility::isusingremote() )
{
if ( distancesquared( var_0.origin, var_2.origin ) >= 608400 )
return 1;
}
return 0;
}
is_sliding()
{
return isdefined( self.issliding ) || isdefined( self.isslidinggraceperiod ) && gettime() <= self.isslidinggraceperiod;
}
update_semi_autos_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
var_9 = maps\mp\_utility::getweaponclass( var_0 );
if ( var_9 == "weapon_sniper" || var_9 == "weapon_dmr" )
self.current_progress++;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.current_progress >= self.goal )
{
self.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
update_2_weapons_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
var_9 = maps\mp\_utility::getbaseweaponname( var_0 );
if ( issubstr( self.weapon1choice, var_9 ) || issubstr( self.weapon2choice, var_9 ) )
self.current_progress++;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.current_progress >= self.goal )
{
self.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
activate_2_weapons_only_challenge()
{
descent_activate_use_weapon_challenge();
var_0 = maps\mp\alien\_utility::get_current_area_name();
var_1 = [];
var_2 = [];
var_3 = 0;
var_4 = common_scripts\utility::array_randomize( level.world_items );
foreach ( var_6 in var_4 )
{
if ( isdefined( var_6.areas ) && var_6.areas[0] == var_0 )
{
if ( !isdefined( var_6.script_noteworthy ) )
continue;
if ( common_scripts\utility::array_contains( var_1, var_6.script_noteworthy ) )
continue;
var_1[var_1.size] = var_6.script_noteworthy;
var_7 = maps\mp\alien\_challenge_function::create_challenge_waypoints( var_6 );
var_2[var_2.size] = var_7;
var_3++;
if ( var_3 >= 2 )
break;
}
}
self.weapon1choice = maps\mp\_utility::getbaseweaponname( var_1[0] );
self.weapon2choice = maps\mp\_utility::getbaseweaponname( var_1[1] );
self.waypoints = var_2;
}
deactivate_2_weapons_only()
{
if ( isdefined( self ) && isdefined( self.waypoints ) )
{
foreach ( var_1 in self.waypoints )
var_1 destroy();
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
descent_activate_use_weapon_challenge()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
self.current_progress = 0;
maps\mp\alien\_challenge_function::update_challenge_progress( 0, self.goal );
}
remove_outline_on_death()
{
level endon( "game_ended" );
self waittill( "death" );
if ( isdefined( self.challenge_headicon ) )
maps\mp\alien\_outline_proto::disable_outline( self );
}
dlc3_custom_onalienagentdamaged_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( isdefined( var_0 ) && isdefined( var_0.targetname ) && var_0.targetname == "scriptable_destructible_barrel" )
var_2 = var_2 + 750;
return var_2;
}
challenge_ring_locations( var_0 )
{
var_1 = [];
if ( isdefined( level.drill ) )
var_1[var_1.size] = level.drill.origin + ( 0, 0, 20 );
switch ( var_0 )
{
case "area_01_hive_00":
var_1[var_1.size] = ( 1539, -4996, 1260 );
var_1[var_1.size] = ( 315, -5325, 1013 );
break;
case "area_01_hive_01":
var_1[var_1.size] = ( 497, -4222, 1304 );
var_1[var_1.size] = ( 321, -4348, 1146 );
break;
case "area_01_hive_02":
var_1[var_1.size] = ( 1095, -4661, 957 );
var_1[var_1.size] = ( 1098, -4100, 1190 );
var_1[var_1.size] = ( 1539, -4996, 1260 );
break;
case "area_01_hive_03":
var_1[var_1.size] = ( 418, -3938, 1094 );
var_1[var_1.size] = ( 1372, -4020, 992 );
var_1[var_1.size] = ( 497, -4222, 1304 );
break;
case "area_01_hive_04":
var_1[var_1.size] = ( 1372, -4020, 992 );
var_1[var_1.size] = ( 1015, -4168, 1194 );
break;
case "area_01_hive_05":
var_1[var_1.size] = ( 754, -5036, 1389 );
var_1[var_1.size] = ( 1481, -4999, 1445 );
break;
case "area_01_hive_06":
var_1[var_1.size] = ( 882, -3373, 1500 );
var_1[var_1.size] = ( 497, -4222, 1304 );
break;
case "area_01_hive_07":
var_1[var_1.size] = ( 1450, -3124, 1404 );
var_1[var_1.size] = ( 865, -3329, 1524 );
break;
case "area_01_hive_08":
var_1[var_1.size] = ( 679, -2343, 1247 );
var_1[var_1.size] = ( 678, -3088, 1339 );
var_1[var_1.size] = ( 1074, -3053, 1147 );
break;
case "area_01_hive_09":
var_1[var_1.size] = ( 1450, -3124, 1404 );
var_1[var_1.size] = ( 1074, -3053, 1147 );
var_1[var_1.size] = ( 709, -2164, 1314 );
break;
case "area_02_hive_01":
var_1[var_1.size] = ( -877, -1258, 1106 );
var_1[var_1.size] = ( -922, -1395, 1259 );
var_1[var_1.size] = ( -1227, -1813, 974 );
break;
case "area_02_hive_02":
var_1[var_1.size] = ( -1227, -1813, 974 );
var_1[var_1.size] = ( -2101, -1632, 1171 );
var_1[var_1.size] = ( -1784, -1552, 1351 );
var_1[var_1.size] = ( -2128, -1834, 1474 );
break;
case "area_02_hive_03":
var_1[var_1.size] = ( -1579, -1258, 1277 );
var_1[var_1.size] = ( -750, -213, 1299 );
break;
case "area_02_hive_04":
var_1[var_1.size] = ( -2923, -2251, 956 );
break;
case "area_02_hive_05":
var_1[var_1.size] = ( -3681, -2756, 1110 );
var_1[var_1.size] = ( -3161, -2351, 1258 );
break;
case "area_02_hive_06":
var_1[var_1.size] = ( -3758, -1862, 936 );
var_1[var_1.size] = ( -2743, -2226, 1305 );
break;
case "area_02_hive_07":
var_1[var_1.size] = ( -2640, -544, 1402 );
break;
case "area_03_hive_01":
var_1[var_1.size] = ( -1433, 1450, 1158 );
var_1[var_1.size] = ( -1654, 808, 1105 );
var_1[var_1.size] = ( -1477, 1491, 951 );
var_1[var_1.size] = ( -909, 827, 934 );
break;
case "area_03_hive_02":
var_1[var_1.size] = ( -1433, 1450, 1158 );
var_1[var_1.size] = ( -1477, 1491, 951 );
var_1[var_1.size] = ( -2193, 1388, 998 );
var_1[var_1.size] = ( -1759, 2007, 985 );
break;
case "area_03_hive_03":
var_1[var_1.size] = ( -1580, 2449, 659 );
var_1[var_1.size] = ( -1893, 3418, 719 );
var_1[var_1.size] = ( -2525, 2805, 713 );
var_1[var_1.size] = ( -1445, 2042, 941 );
break;
}
return common_scripts\utility::random( var_1 );
}

View File

@ -0,0 +1,948 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
register_last_challenges()
{
level.custom_onalienagentdamaged_func = ::last_custom_onalienagentdamaged_func;
level.challenge_ring_location_func = ::challenge_ring_locations;
maps\mp\alien\_challenge_function::register_challenge( "long_shot", undefined, 0, undefined, undefined, ::activate_long_shot, ::deactivate_long_shot, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "leaning_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "sliding_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "jump_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "focus_fire", undefined, 0, undefined, undefined, ::generic_activate_challenge, ::deactivate_focus_fire, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_marked", undefined, 0, undefined, undefined, ::activate_kill_marked, ::deactivate_kill_marked, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "barrel_kills", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "healthy_kills", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "minion_preexplode", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_nodamage", undefined, 0, undefined, undefined, ::activate_kill_nodamage, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::update_kill_nodamage );
maps\mp\alien\_challenge_function::register_challenge( "kill_phantom", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "bomber_preexplode", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "flying_aliens", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "melee_gargoyles", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "melee_mammoth", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "higher_ground", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_rhinos", undefined, 0, undefined, undefined, ::activate_kill_rhinos, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "lower_ground", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "new_weapon", undefined, 0, undefined, undefined, ::activate_new_weapons, ::deactivate_new_weapons, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "team_prone", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "semi_autos_only", undefined, 0, undefined, undefined, maps\mp\alien\_challenge_function::activate_use_weapon_challenge, maps\mp\alien\_challenge_function::deactivate_weapon_challenge_waypoints, undefined, ::update_semi_autos_only );
maps\mp\alien\_challenge_function::register_challenge( "2_weapons_only", undefined, 0, undefined, undefined, ::activate_2_weapons_only_challenge, ::deactivate_2_weapons_only, undefined, ::update_2_weapons_only );
maps\mp\alien\_challenge_function::register_challenge( "melee_5_goons_last", undefined, 0, undefined, undefined, maps\mp\alien\_challenge_function::activate_melee_goons, maps\mp\alien\_challenge_function::deactivate_melee_goons, undefined, maps\mp\alien\_challenge_function::update_melee_goons );
maps\mp\alien\_challenge_function::register_challenge( "stay_within_area_1", 10, 0, undefined, ::last_pre_activate_stay_within_area, maps\mp\alien\_challenge_function::activate_stay_within_area, maps\mp\alien\_challenge_function::deactivate_stay_within_area, undefined, ::last_update_stay_within_area );
maps\mp\alien\_challenge_function::register_challenge( "stay_within_area_2", 10, 0, undefined, ::last_pre_activate_stay_within_area, maps\mp\alien\_challenge_function::activate_stay_within_area, maps\mp\alien\_challenge_function::deactivate_stay_within_area, undefined, ::last_update_stay_within_area );
maps\mp\alien\_challenge_function::register_challenge( "stay_within_area_3", 10, 0, undefined, ::last_pre_activate_stay_within_area, maps\mp\alien\_challenge_function::activate_stay_within_area, maps\mp\alien\_challenge_function::deactivate_stay_within_area, undefined, ::last_update_stay_within_area );
maps\mp\alien\_challenge_function::register_challenge( "stay_within_area_4", 10, 0, undefined, ::last_pre_activate_stay_within_area, maps\mp\alien\_challenge_function::activate_stay_within_area, maps\mp\alien\_challenge_function::deactivate_stay_within_area, undefined, ::last_update_stay_within_area );
maps\mp\alien\_challenge_function::register_challenge( "stay_within_area_5", 10, 0, undefined, ::last_pre_activate_stay_within_area, maps\mp\alien\_challenge_function::activate_stay_within_area, maps\mp\alien\_challenge_function::deactivate_stay_within_area, undefined, ::last_update_stay_within_area );
maps\mp\alien\_challenge_function::register_challenge( "kill_ancestor", undefined, 0, undefined, undefined, ::activate_kill_ancestor, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "weakpoint_damage", undefined, 0, undefined, undefined, ::activate_weakpoint_damage, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "no_ancestor_damage", undefined, 0, undefined, undefined, ::activate_no_ancestor_damage, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
}
generic_activate_challenge()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
self.current_progress = 0;
maps\mp\alien\_challenge_function::update_challenge_progress( 0, self.goal );
}
generic_update_challenge( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
{
level notify( "current_challenge_ended" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
else if ( maps\mp\alien\_utility::is_true( var_1 ) )
{
level notify( "current_challenge_ended" );
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
activate_long_shot()
{
generic_activate_challenge();
level thread long_shot_logic();
}
long_shot_logic()
{
level endon( "stop_longshot_logic" );
for (;;)
{
foreach ( var_6, var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( !isalive( var_1 ) )
continue;
if ( isdefined( var_1.pet ) )
continue;
var_2 = undefined;
foreach ( var_4 in level.players )
{
if ( is_long_shot( var_4, undefined, var_1 ) )
{
var_2 = 1;
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1, var_4, 0, 1, "high" );
continue;
}
if ( isdefined( var_4.isferal ) && var_4.isferal )
{
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1, var_4, 4, 0, "high" );
continue;
}
maps\mp\alien\_outline_proto::disable_outline_for_player( var_1, var_4 );
}
var_1.marked_for_challenge = var_2;
if ( var_6 % 2 == 0 )
wait 0.05;
}
wait 0.05;
}
}
deactivate_long_shot()
{
level notify( "stop_longshot_logic" );
wait 1;
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
foreach ( var_3 in level.players )
{
if ( isdefined( var_1.marked_for_challenge ) )
maps\mp\alien\_outline_proto::disable_outline_for_player( var_1, var_3 );
}
var_1.marked_for_challenge = undefined;
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_marked()
{
generic_activate_challenge();
level thread wait_for_marked_aliens( self );
}
wait_for_marked_aliens( var_0 )
{
level endon( "current_challenge_ended" );
var_1 = 0;
while ( var_1 < var_0.goal )
{
var_2 = maps\mp\alien\_spawnlogic::get_alive_agents();
foreach ( var_4 in var_2 )
{
if ( !isalive( var_4 ) || isdefined( var_4.pet ) )
continue;
if ( var_4.alien_type == "bomber" || maps\mp\alien\_utility::is_true( var_4.marked_for_challenge ) || var_4.alien_type == "ancestor" )
continue;
var_4.marked_for_challenge = 1;
maps\mp\alien\_outline_proto::enable_outline( var_4, 0, 1 );
var_4 thread remove_outline_on_death();
var_1++;
if ( var_1 >= var_0.goal )
return;
}
wait 0.05;
}
}
deactivate_kill_marked()
{
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( isdefined( var_1.marked_for_challenge ) )
{
var_1.marked_for_challenge = undefined;
maps\mp\alien\_outline_proto::disable_outline( var_1 );
}
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_nodamage()
{
generic_activate_challenge();
level thread fail_kill_nodamage( self );
foreach ( var_1 in level.players )
var_1 thread kill_nodamage_monitor();
}
fail_kill_nodamage( var_0 )
{
level endon( "kill_nodamage_complete" );
level waittill( "kill_nodamage_failed" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "kill_nodamage_complete" );
}
kill_nodamage_monitor()
{
level endon( "kill_nodamage_complete" );
for (;;)
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
if ( maps\mp\alien\_utility::is_true( self.ability_invulnerable ) )
continue;
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::is_hardcore_mode() )
{
level notify( "kill_nodamage_failed" );
return;
}
else if ( isdefined( var_1 ) && isagent( var_1 ) )
{
level notify( "kill_nodamage_failed" );
return;
}
}
}
update_kill_nodamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
{
level notify( "kill_nodamage_complete" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
deactivate_focus_fire()
{
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( isdefined( var_1.damaged_by_players ) )
{
maps\mp\alien\_outline_proto::disable_outline( var_1 );
var_1.damaged_by_players = [];
}
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_rhinos()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
level thread watch_rhino_deaths( self );
}
watch_rhino_deaths( var_0 )
{
level endon( "rhino_challenge_complete" );
level endon( "end_cycle" );
level.current_challenge_timer = 0;
level thread fail_rhino_challenge();
for (;;)
{
level waittill( "rhino_killed" );
if ( level.current_challenge_timer <= 0 )
{
var_1 = int( gettime() + 20000 );
foreach ( var_3 in level.players )
var_3 setclientomnvar( "ui_intel_timer", var_1 );
level.current_challenge_timer = 20;
level thread maps\mp\alien\_challenge_function::update_current_challenge_timer();
continue;
}
level notify( "rhinos_killed" );
var_0.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
return;
}
}
fail_rhino_challenge( var_0 )
{
level endon( "game_ended" );
level endon( "rhinos_killed" );
level waittill( "current_challenge_ended" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "rhino_challenge_complete" );
}
activate_new_weapons()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
level thread watch_players_new_weapons( self );
}
watch_players_new_weapons( var_0 )
{
level endon( "stop_newweapon_challenge_monitor" );
for (;;)
{
level waittill( "new_weapon_purchased", var_1 );
var_1.new_weapon_purchased = 1;
level thread check_for_new_weapon_complete( var_0 );
}
}
check_for_new_weapon_complete( var_0 )
{
var_1 = 1;
foreach ( var_3 in level.players )
{
if ( !maps\mp\alien\_utility::is_true( var_3.new_weapon_purchased ) )
var_1 = 0;
}
if ( var_1 )
{
var_0.success = 1;
level notify( "stop_newweapon_challenge_monitor" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
deactivate_new_weapons()
{
level notify( "stop_newweapon_challenge_monitor" );
maps\mp\alien\_challenge_function::default_resetsuccess();
}
last_challenge_scalar_func( var_0 )
{
var_1 = maps\mp\alien\_challenge_function::default_challenge_scalar_func( var_0 );
if ( !isdefined( var_1 ) )
var_1 = get_scalar_from_table( var_0 );
if ( isdefined( var_1 ) )
{
}
return var_1;
}
get_scalar_from_table( var_0 )
{
var_1 = level.alien_challenge_table;
var_2 = 0;
var_3 = 1;
var_4 = 99;
var_5 = 1;
var_6 = 9;
for ( var_7 = var_3; var_7 <= var_4; var_7++ )
{
var_8 = tablelookup( var_1, var_2, var_7, var_5 );
if ( var_8 == "" )
return undefined;
if ( var_8 != var_0 )
continue;
var_9 = tablelookup( var_1, var_2, var_7, var_6 );
if ( isdefined( var_9 ) )
{
var_9 = strtok( var_9, " " );
if ( var_9.size > 0 )
return int( var_9[level.players.size - 1] );
}
}
}
last_damage_challenge_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( level.current_challenge ) )
return;
switch ( level.current_challenge )
{
case "weakpoint_damage":
if ( !isdefined( var_8 ) )
return 0;
if ( isdefined( var_6 ) && ( var_6 == "head" || var_6 == "neck" ) && var_2 > 0 && isdefined( var_8.alien_type ) && var_8.alien_type == "ancestor" )
maps\mp\alien\_challenge::update_challenge( "weakpoint_damage", var_2 );
return 0;
case "focus_fire":
if ( !isdefined( var_8 ) )
return 0;
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( !isdefined( var_8.damaged_by_players ) )
var_8.damaged_by_players = [];
if ( !common_scripts\utility::array_contains( var_8.damaged_by_players, var_1 ) )
{
var_8.damaged_by_players[var_8.damaged_by_players.size] = var_1;
var_8 maps\mp\alien\_challenge_function::focus_fire_update_alien_outline( var_1 );
}
}
return 0;
}
return 1;
}
last_death_challenge_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( level.current_challenge ) )
return 0;
if ( level.current_challenge == "kill_marked" && !isdefined( self.marked_for_challenge ) && var_3 == "MOD_SUICIDE" )
return 0;
switch ( level.current_challenge )
{
case "long_shot":
if ( is_long_shot( var_1, var_4, self ) )
maps\mp\alien\_challenge::update_challenge( "long_shot", 1 );
return 0;
case "leaning_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() && var_1 isleaning() )
maps\mp\alien\_challenge::update_challenge( "leaning_shot", 1 );
return 0;
case "jump_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() && !var_1 isonground() )
maps\mp\alien\_challenge::update_challenge( "jump_shot", 1 );
return 0;
case "sliding_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_3 == "MOD_MELEE" && var_1 is_sliding() )
maps\mp\alien\_challenge::update_challenge( "sliding_shot", 1 );
return 0;
case "focus_fire":
if ( isdefined( self.damaged_by_players ) && self.damaged_by_players.size >= level.players.size )
{
maps\mp\alien\_challenge::update_challenge( "focus_fire", 1 );
maps\mp\alien\_outline_proto::disable_outline_for_players( self, level.players );
}
return 0;
case "kill_marked":
if ( isdefined( self.marked_for_challenge ) )
maps\mp\alien\_challenge::update_challenge( "kill_marked", 1 );
else
maps\mp\alien\_challenge::update_challenge( "kill_marked", 0, 1 );
return 0;
case "barrel_kills":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_0 ) && isdefined( var_0.targetname ) && var_0.targetname == "scriptable_destructible_barrel" )
maps\mp\alien\_challenge::update_challenge( "barrel_kills", 1 );
return 0;
case "healthy_kills":
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_1.health >= var_1.maxhealth )
maps\mp\alien\_challenge::update_challenge( "healthy_kills", 1 );
return 0;
case "minion_preexplode":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "minion" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "minion_preexplode", 1 );
return 0;
case "bomber_preexplode":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "bomber" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "bomber_preexplode", 1 );
return 0;
case "kill_phantom":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "locust" && maps\mp\alien\_utility::is_true( self.is_cloaking ) )
maps\mp\alien\_challenge::update_challenge( "kill_phantom", 1 );
return 0;
case "kill_nodamage":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
maps\mp\alien\_challenge::update_challenge( "kill_nodamage", 1 );
return 0;
case "flying_aliens":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( maps\mp\alien\_utility::get_alien_type() == "bomber" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "flying_aliens", 1 );
else if ( maps\mp\alien\_utility::get_alien_type() == "gargoyle" && maps\mp\alien\_utility::is_true( self.in_air ) )
maps\mp\alien\_challenge::update_challenge( "flying_aliens", 1 );
else if ( maps\mp\alien\_utility::get_alien_type() == "ancestor" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "flying_aliens", 1 );
}
return 0;
case "melee_gargoyles":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "gargoyle" && var_3 == "MOD_MELEE" )
maps\mp\alien\_challenge::update_challenge( "melee_gargoyles", 1 );
return 0;
case "melee_mammoth":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "mammoth" && var_3 == "MOD_MELEE" )
maps\mp\alien\_challenge::update_challenge( "melee_mammoth", 1 );
return 0;
case "higher_ground":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( !isdefined( var_0 ) || isdefined( var_0 ) && !maps\mp\alien\_utility::is_trap( var_0 ) )
{
if ( var_1.origin[2] - self.origin[2] > 55 )
maps\mp\alien\_challenge::update_challenge( "higher_ground", 1 );
}
}
return 0;
case "lower_ground":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( !isdefined( var_0 ) || isdefined( var_0 ) && !maps\mp\alien\_utility::is_trap( var_0 ) )
{
if ( self.origin[2] - var_1.origin[2] > 55 )
maps\mp\alien\_challenge::update_challenge( "lower_ground", 1 );
}
}
return 0;
case "kill_rhinos":
if ( isdefined( self.alien_type ) && self.alien_type == "elite" )
level notify( "rhino_killed" );
return 0;
case "team_prone":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() )
{
var_9 = 1;
foreach ( var_11 in level.players )
{
if ( var_11 getstance() != "prone" )
var_9 = 0;
}
if ( var_9 )
maps\mp\alien\_challenge::update_challenge( "team_prone", 1 );
}
return 0;
case "2_weapons_only":
case "semi_autos_only":
maps\mp\alien\_challenge::update_challenge( level.current_challenge, var_4, var_3 );
return 0;
case "melee_5_goons_last":
if ( isdefined( self.alien_type ) && self.alien_type == "goon" && isdefined( var_1 ) && isplayer( var_1 ) && var_3 == "MOD_MELEE" )
maps\mp\alien\_challenge::update_challenge( "melee_5_goons_last", 1 );
return 0;
case "stay_within_area_5":
case "stay_within_area_4":
case "stay_within_area_3":
case "stay_within_area_2":
case "stay_within_area_1":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
maps\mp\alien\_challenge::update_challenge( level.current_challenge, self.origin, var_1.origin );
break;
}
return 1;
}
is_long_shot( var_0, var_1, var_2 )
{
if ( isplayer( var_0 ) && isalive( var_0 ) && !var_0 maps\mp\_utility::isusingremote() )
{
if ( distancesquared( var_0.origin, var_2.origin ) >= 608400 )
return 1;
}
return 0;
}
is_sliding()
{
return isdefined( self.issliding ) || isdefined( self.isslidinggraceperiod ) && gettime() <= self.isslidinggraceperiod;
}
update_semi_autos_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
var_9 = maps\mp\_utility::getweaponclass( var_0 );
if ( var_9 == "weapon_sniper" || var_9 == "weapon_dmr" )
self.current_progress++;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.current_progress >= self.goal )
{
self.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
activate_weakpoint_damage()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
self.current_progress = 0;
self.goal = self.goal * 1000;
maps\mp\alien\_challenge_function::update_challenge_progress( 0, self.goal );
}
activate_no_ancestor_damage()
{
self.current_progress = 0;
var_0 = int( gettime() + self.goal * 1000 );
foreach ( var_2 in level.players )
var_2 setclientomnvar( "ui_intel_timer", var_0 );
level.current_challenge_timer = self.goal;
level thread maps\mp\alien\_challenge_function::update_current_challenge_timer();
level thread wait_for_ancestor_player_damage( self );
level thread complete_ancestor_damage_challenge( self );
}
wait_for_ancestor_player_damage( var_0 )
{
level endon( "game_ended" );
var_0 endon( "success" );
level endon( "ancestor_damage_challenge_complete" );
level waittill( "ancestor_damage_taken" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
complete_ancestor_damage_challenge( var_0 )
{
level endon( "game_ended" );
level endon( "ancestor_damage_taken" );
wait( var_0.goal );
var_0.success = 1;
level notify( "ancestor_damage_challenge_complete" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_kill_ancestor()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
self.current_progress = 0;
var_0 = int( gettime() + self.goal * 1000 );
foreach ( var_2 in level.players )
var_2 setclientomnvar( "ui_intel_timer", var_0 );
level.current_challenge_timer = self.goal;
level thread maps\mp\alien\_challenge_function::update_current_challenge_timer();
level thread wait_for_ancestor_death( self );
level thread fail_ancestor_challenge( self );
}
wait_for_ancestor_death( var_0 )
{
level endon( "game_ended" );
var_0 endon( "success" );
level endon( "ancestor_challenge_failed" );
level waittill( "ancestor_died" );
var_0.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
fail_ancestor_challenge( var_0 )
{
level endon( "game_ended" );
var_0 endon( "success" );
level endon( "ancestor_died" );
wait( var_0.goal );
level notify( "ancestor_challenge_failed" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
update_2_weapons_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
var_9 = maps\mp\_utility::getbaseweaponname( var_0 );
if ( issubstr( self.weapon1choice, var_9 ) || issubstr( self.weapon2choice, var_9 ) )
self.current_progress++;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.current_progress >= self.goal )
{
self.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
activate_2_weapons_only_challenge()
{
descent_activate_use_weapon_challenge();
var_0 = maps\mp\alien\_utility::get_current_area_name();
var_1 = [];
var_2 = [];
var_3 = 0;
var_4 = common_scripts\utility::array_randomize( level.world_items );
foreach ( var_6 in var_4 )
{
if ( isdefined( var_6.areas ) && var_6.areas[0] == var_0 )
{
if ( !isdefined( var_6.script_noteworthy ) )
continue;
if ( common_scripts\utility::array_contains( var_1, var_6.script_noteworthy ) )
continue;
var_1[var_1.size] = var_6.script_noteworthy;
var_7 = maps\mp\alien\_challenge_function::create_challenge_waypoints( var_6 );
var_2[var_2.size] = var_7;
var_3++;
if ( var_3 >= 2 )
break;
}
}
self.weapon1choice = maps\mp\_utility::getbaseweaponname( var_1[0] );
self.weapon2choice = maps\mp\_utility::getbaseweaponname( var_1[1] );
self.waypoints = var_2;
}
deactivate_2_weapons_only()
{
if ( isdefined( self ) && isdefined( self.waypoints ) )
{
foreach ( var_1 in self.waypoints )
var_1 destroy();
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
descent_activate_use_weapon_challenge()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
self.current_progress = 0;
maps\mp\alien\_challenge_function::update_challenge_progress( 0, self.goal );
}
remove_outline_on_death()
{
level endon( "game_ended" );
self waittill( "death" );
if ( isdefined( self.challenge_headicon ) )
maps\mp\alien\_outline_proto::disable_outline( self );
}
last_custom_onalienagentdamaged_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( isdefined( var_5 ) && var_5 == "turret_dlc4_alien_shock" )
{
last_shock_turret_hit_marker_override( var_1, "standard" );
if ( isdefined( level.shock_turret_bullet_damage_scalar ) )
var_2 = var_2 * level.shock_turret_bullet_damage_scalar;
}
if ( isdefined( var_0 ) && isdefined( var_0.targetname ) && var_0.targetname == "scriptable_destructible_barrel" )
var_2 = var_2 + 750;
return var_2;
}
last_shock_turret_hit_marker_override( var_0, var_1 )
{
if ( isdefined( var_0.owner ) )
var_0.owner thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( var_1 );
else
var_0 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( var_1 );
}
challenge_ring_locations( var_0, var_1 )
{
var_2 = [];
switch ( var_0 )
{
case "transition_middle":
var_2[var_2.size] = ( 1772, 1335, 25 );
var_2[var_2.size] = ( 973, 1414, 19 );
var_2[var_2.size] = ( 525, 1991, 15 );
break;
case "transition_right":
var_2[var_2.size] = ( 1897, 775, 11 );
var_2[var_2.size] = ( 2068, 253, 23 );
var_2[var_2.size] = ( 2547, 1524, 19 );
break;
case "transition_left":
var_2[var_2.size] = ( -886, 933, 11 );
var_2[var_2.size] = ( -1442, 994, 19 );
var_2[var_2.size] = ( -2130, 1786, 203 );
break;
case "transition_upper_left":
var_2[var_2.size] = ( -996, 3690, 11 );
break;
case "transition_upper_right":
var_2[var_2.size] = ( 1771, 3236, 11 );
break;
}
if ( maps\mp\alien\_utility::is_true( var_1 ) )
return var_2;
else
return common_scripts\utility::random( var_2 );
}
last_pre_activate_stay_within_area()
{
var_0 = get_all_ring_locations( level.current_hive_name );
if ( isdefined( level.current_encounter_info ) && isdefined( level.current_encounter_info.use_trigger ) && isdefined( level.current_encounter_info.use_trigger.script_noteworthy ) && level.current_encounter_info.use_trigger.script_noteworthy == "reverse_open" )
var_0 = common_scripts\utility::array_reverse( var_0 );
var_1 = var_0[0];
var_2 = bullettrace( var_1 + ( 0, 0, 20 ), var_1 - ( 0, 0, 20 ), 0, undefined, 1, 0, 1, 1 );
self.ring_ent = spawn( "script_model", var_2["position"] );
self.ring_ent setmodel( "tag_origin" );
wait 0.1;
self.ring_fx = playfxontag( level._effect["challenge_ring"], self.ring_ent, "tag_origin" );
playsoundatpos( self.ring_ent.origin, "plr_challenge_ring" );
if ( !isdefined( level.waypoint_icon ) )
{
if ( isdefined( level.ring_waypoint_icon ) )
level.ring_waypoint_icon destroy();
var_3 = "waypoint_alien_blocker";
var_4 = 14;
var_5 = 14;
var_6 = 0.75;
var_7 = self.ring_ent.origin + ( 0, 0, 32 );
level.ring_waypoint_icon = maps\mp\alien\_hud::make_waypoint( var_3, var_4, var_5, var_6, var_7 );
}
level thread move_challenge_ring( var_0, var_1, self, 0 );
return 1;
}
get_all_ring_locations( var_0 )
{
return challenge_ring_locations( var_0, 1 );
}
move_challenge_ring( var_0, var_1, var_2, var_3 )
{
level endon( "ring_challenge_ended" );
var_4 = 0;
while ( !isdefined( var_2.current_progress ) )
wait 0.05;
var_5 = var_2.current_progress;
for (;;)
{
while ( var_5 == var_2.current_progress )
wait 0.05;
common_scripts\utility::waitframe();
var_6 = var_2.current_progress - var_5;
var_5 = var_2.current_progress;
var_4 = var_4 + var_6;
if ( var_4 < 5 )
continue;
else
var_4 = 0;
var_3++;
if ( var_3 >= var_0.size )
var_3 = 0;
var_7 = var_0[var_3];
var_8 = bullettrace( var_7 + ( 0, 0, 20 ), var_7 - ( 0, 0, 20 ), 0, undefined, 1, 0, 1, 1 );
if ( isdefined( level.ring_waypoint_icon ) )
level.ring_waypoint_icon.alpha = 0;
var_2.ring_ent moveto( var_8["position"], 2 );
playsoundatpos( var_2.ring_ent.origin, "plr_challenge_ring" );
wait 2.0;
if ( isdefined( level.ring_waypoint_icon ) )
{
level.ring_waypoint_icon.alpha = 1.0;
level.ring_waypoint_icon.x = var_8["position"][0];
level.ring_waypoint_icon.y = var_8["position"][1];
level.ring_waypoint_icon.z = var_8["position"][2] + 32;
}
}
}
last_update_stay_within_area( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( abs( var_1[2] - self.ring_ent.origin[2] ) > 75 )
return;
var_9 = distancesquared( var_1, self.ring_ent.origin );
if ( var_9 > self.distance_check )
return;
self.current_progress++;
if ( self.current_progress >= self.goal )
self.success = 1;
var_10 = self.goal - self.current_progress;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}

File diff suppressed because it is too large Load Diff