Files
IL-GSC/GHOSTS/PC/MP/maps/mp/killstreaks/_nuke.gsc
2023-10-27 03:49:01 -04:00

529 lines
12 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\killstreaks\_nuke.gsc
* Game: Call of Duty: Ghosts
* Platform: PC
* Function Count: 29
* Decompile Time: 498 ms
* Timestamp: 10/27/2023 1:21:17 AM
*******************************************************************/
//Function Number: 1
func_44DF()
{
level.nukevisionset = "aftermath_post";
level._effect["nuke_player"] = loadfx("fx/explosions/player_death_nuke");
level._effect["nuke_flash"] = loadfx("fx/explosions/player_death_nuke_flash");
level._effect["nuke_aftermath"] = loadfx("fx/dust/nuke_aftermath_mp");
level.killstreakfuncs["nuke"] = ::func_8442;
setdvarifuninitialized("scr_nukeTimer",10);
setdvarifuninitialized("scr_nukeCancelMode",0);
level.nuketimer = getdvarint("scr_nukeTimer");
level.cancelmode = getdvarint("scr_nukeCancelMode");
if(level.multiteambased)
{
for(var_00 = 0;var_00 < level.teamnamelist.size;var_00++)
{
level.teamnukeemped[level.teamnamelist[var_00]] = 0;
}
}
else
{
level.teamnukeemped["allies"] = 0;
level.teamnukeemped["axis"] = 0;
}
level.nukeemptimeout = 60;
level.nukeemptimeremaining = int(level.nukeemptimeout);
level.nukeinfo = spawnstruct();
level.nukeinfo.xpscalar = 2;
level.nukedetonated = undefined;
level thread func_595D();
}
//Function Number: 2
func_8442(param_00,param_01,param_02)
{
if(isdefined(level.nukeincoming))
{
self iprintlnbold(&"KILLSTREAKS_NUKE_ALREADY_INBOUND");
return 0;
}
if(maps\mp\_utility::func_4995() && !isdefined(level.gtnw) || !level.gtnw)
{
return 0;
}
if(!isdefined(param_02))
{
param_02 = 1;
}
thread func_29B6(param_02);
self notify("used_nuke");
maps\mp\_matchdata::func_4F1D("nuke",self.origin);
return 1;
}
//Function Number: 3
delaythread_nuke(param_00,param_01)
{
level endon("nuke_cancelled");
maps\mp\gametypes\_hostmigration::func_8B0D(param_00);
thread [[ param_01 ]]();
}
//Function Number: 4
func_29B6(param_00)
{
level endon("nuke_cancelled");
level.nukeinfo.player = self;
level.nukeinfo.team = self.pers["team"];
level.nukeincoming = 1;
level.prevuibombtimer = int(getomnvar("ui_bomb_timer"));
setomnvar("ui_bomb_timer",4);
if(level.teambased)
{
thread maps\mp\_utility::func_7FA0("used_nuke",self,self.team);
}
else if(!level.hardcoremode)
{
self iprintlnbold(&"KILLSTREAKS_FRIENDLY_TACTICAL_NUKE");
}
if(!isdefined(level.donuke_fx) || ![[ level.donuke_fx ]]())
{
if(!isdefined(level.nuke_soundobject))
{
level.nuke_soundobject = spawn("script_origin",(0,0,1));
level.nuke_soundobject hide();
}
level thread delaythread_nuke(level.nuketimer - 3.3,::func_5767);
level thread delaythread_nuke(level.nuketimer,::func_5766);
level thread delaythread_nuke(level.nuketimer,::nukeslowmo);
level thread delaythread_nuke(level.nuketimer,::func_575D);
level thread delaythread_nuke(level.nuketimer + 0.25,::func_5769);
level thread delaythread_nuke(level.nuketimer + 1.5,::func_5758);
level thread delaythread_nuke(level.nuketimer + 1.5,::func_575B);
level thread func_5751();
if(level.cancelmode && param_00)
{
level thread cancelnukeondeath(self);
}
}
level thread func_86BA();
if(!isdefined(level.nuke_clockobject))
{
level.nuke_clockobject = spawn("script_origin",(0,0,0));
level.nuke_clockobject hide();
}
for(var_01 = level.nuketimer;var_01 > 0;var_01--)
{
level.nuke_clockobject playsound("ui_mp_kem_timer");
wait(1);
}
}
//Function Number: 5
donukesimple()
{
level.nukeinfo.player = self;
level.nukeinfo.team = self.pers["team"];
level.nukeincoming = 1;
level thread delaythread_nuke(level.nuketimer - 3.3,::func_5767);
level thread delaythread_nuke(level.nuketimer,::func_5766);
level thread delaythread_nuke(level.nuketimer,::nukeslowmo);
level thread delaythread_nuke(level.nuketimer,::func_575D);
level thread delaythread_nuke(level.nuketimer + 0.25,::func_5769);
level thread delaythread_nuke(level.nuketimer + 1.5,::nukedeathsimple);
level thread delaythread_nuke(level.nuketimer + 1.5,::func_575B);
if(!isdefined(level.nuke_soundobject))
{
level.nuke_soundobject = spawn("script_origin",(0,0,1));
level.nuke_soundobject hide();
}
}
//Function Number: 6
nukedeathsimple()
{
level notify("nuke_death");
}
//Function Number: 7
cancelnukeondeath(param_00)
{
param_00 common_scripts\utility::func_8B2A("death","disconnect");
if(isdefined(param_00) && level.cancelmode == 2)
{
param_00 thread maps\mp\killstreaks\_emp::emp_use(0,0);
}
func_5755();
level.nukeincoming = undefined;
level notify("nuke_cancelled");
}
//Function Number: 8
func_5767()
{
level endon("nuke_cancelled");
if(isdefined(level.nuke_soundobject))
{
level.nuke_soundobject playsound("nuke_incoming");
}
}
//Function Number: 9
func_5766()
{
level endon("nuke_cancelled");
if(isdefined(level.nuke_soundobject))
{
level.nuke_soundobject playsound("nuke_explosion");
level.nuke_soundobject playsound("nuke_wave");
}
}
//Function Number: 10
func_5755()
{
var_00 = 0;
if(isdefined(level.prevuibombtimer))
{
var_00 = level.prevuibombtimer;
}
setomnvar("ui_bomb_timer",var_00);
}
//Function Number: 11
func_575D()
{
level endon("nuke_cancelled");
func_5755();
level.nukedetonated = 1;
foreach(var_01 in level.players)
{
level thread func_575C(var_01);
}
}
//Function Number: 12
func_575C(param_00)
{
level endon("nuke_cancelled");
param_00 endon("disconnect");
common_scripts\utility::func_8AFE();
var_01 = undefined;
var_02 = undefined;
if(!isdefined(level.nukeloc))
{
var_03 = (0,param_00.angles[1],0);
var_02 = anglestoforward(var_03);
var_04 = 5000;
var_01 = param_00.origin + var_02 * var_04;
}
else
{
var_01 = level.nukeloc;
}
var_05 = undefined;
var_06 = (0,0,1);
if(!isdefined(level.nukeangles))
{
var_05 = anglestoright((0,param_00.angles[1] + 180,0));
}
else
{
var_05 = anglestoforward(level.nukeangles);
var_06 = anglestoup(level.nukeangles);
}
var_07 = spawnfxforclient(level._effect["nuke_flash"],var_01,param_00,var_06,var_05);
triggerfx(var_07);
param_00 thread cleanupnukeeffect(var_07,30);
}
//Function Number: 13
cleanupnukeeffect(param_00,param_01)
{
maps\mp\_utility::waitfortimeornotify(param_01,"disconnect");
param_00 delete();
}
//Function Number: 14
func_5751()
{
level endon("nuke_cancelled");
level waittill("spawning_intermission");
var_00 = getentarray("mp_global_intermission","classname");
var_00 = var_00[0];
var_01 = anglestoup(var_00.angles);
var_02 = anglestoright(var_00.angles);
playfx(level._effect["nuke_aftermath"],var_00.origin,var_01,var_02);
}
//Function Number: 15
nukeslowmo()
{
level endon("nuke_cancelled");
setslowmotion(1,0.25,0.5);
level waittill("nuke_death");
setslowmotion(0.25,1,2);
}
//Function Number: 16
func_5769()
{
level endon("nuke_cancelled");
level.nukevisioninprogress = 1;
visionsetpostapply("mpnuke",3);
maps\mp\gametypes\_hostmigration::func_8B0D(2);
visionsetpostapply("nuke_global_flash",0.1);
setexpfog(0,956,0.72,0.61,0.39,0.968,0.85,1,0.298,0.273,0.266,0.25,(0,0,-1),84,118,2.75,0.984,124,100);
setdvar("r_materialBloomHQScriptMasterEnable",0);
maps\mp\gametypes\_hostmigration::func_8B0D(0.5);
level notify("nuke_aftermath_post_started");
visionsetpostapply("aftermath_post",0.5);
level waittill("nuke_death");
level thread func_9557();
level func_9453(5);
}
//Function Number: 17
func_5758()
{
level endon("nuke_cancelled");
level endon("game_ended");
level notify("nuke_death");
maps\mp\gametypes\_hostmigration::func_8BBA();
foreach(var_01 in level.characters)
{
if(nukecankill(var_01))
{
if(isplayer(var_01))
{
var_01.nuked = 1;
if(maps\mp\_utility::func_4945(var_01))
{
var_01 thread maps\mp\gametypes\_damage::func_329F(level.nukeinfo.player,level.nukeinfo.player,999999,0,"MOD_EXPLOSIVE","nuke_mp",var_01.origin,(0,0,1),"none",0,0);
}
continue;
}
var_01 maps/mp/agents/_agents::agent_damage_finished(level.nukeinfo.player,level.nukeinfo.player,999999,0,"MOD_EXPLOSIVE","nuke_mp",var_01.origin,(0,0,1),"none",0);
}
}
level thread nuke_empjam();
level.nukeincoming = undefined;
}
//Function Number: 18
nukecankill(param_00)
{
if(!isdefined(level.nukeinfo))
{
return 0;
}
if(level.teambased)
{
if(isdefined(level.nukeinfo.team) && param_00.team == level.nukeinfo.team)
{
return 0;
}
}
else
{
var_01 = isdefined(level.nukeinfo.player) && param_00 == level.nukeinfo.player;
var_02 = isdefined(level.nukeinfo.player) && isdefined(param_00.owner) && param_00.owner == level.nukeinfo.player;
if(var_01 || var_02)
{
return 0;
}
}
return 1;
}
//Function Number: 19
func_575B()
{
level endon("nuke_cancelled");
level waittill("nuke_death");
}
//Function Number: 20
nuke_empjam()
{
level endon("game_ended");
if(level.teambased)
{
level func_575F(maps\mp\_utility::getotherteam(level.nukeinfo.team));
}
level.teamnukeemped[level.nukeinfo.team] = 1;
level.teamnukeemped[maps\mp\_utility::getotherteam(level.nukeinfo.team)] = 1;
func_575E(level.nukeinfo.player);
}
//Function Number: 21
func_575F(param_00)
{
level endon("game_ended");
level notify("nuke_EMPJam");
level endon("nuke_EMPJam");
level.teamnukeemped[param_00] = 1;
foreach(var_02 in level.players)
{
if(var_02 lib_05FE::func_74B9())
{
var_02 lib_05FE::applyperplayerempeffects();
}
}
level notify("nuke_emp_update");
level maps\mp\killstreaks\_jammer::func_2654(level.nukeinfo.player,param_00);
level maps\mp\killstreaks\_air_superiority::func_2640(level.nukeinfo.player,param_00);
level thread keepnukeemptimeremaining();
maps\mp\gametypes\_hostmigration::func_8B0D(level.nukeemptimeout);
level.teamnukeemped[param_00] = 0;
foreach(var_02 in level.players)
{
if(var_02.team == param_00 && !var_02 lib_05FE::func_74B9())
{
var_02 lib_05FE::func_65A7();
var_02.nuked = undefined;
}
}
level notify("nuke_emp_update");
level notify("nuke_emp_ended");
}
//Function Number: 22
func_575E(param_00)
{
level notify("nuke_EMPJam");
level endon("nuke_EMPJam");
if(!isdefined(param_00))
{
}
foreach(var_02 in level.players)
{
if(var_02 lib_05FE::func_74B9())
{
var_02 lib_05FE::applyperplayerempeffects();
}
}
level notify("nuke_emp_update");
level maps\mp\killstreaks\_jammer::func_2654(level.nukeinfo.player);
level maps\mp\killstreaks\_air_superiority::func_2640(level.nukeinfo.player);
level thread keepnukeemptimeremaining();
maps\mp\gametypes\_hostmigration::func_8B0D(level.nukeemptimeout);
level.nukeinfo.player = undefined;
foreach(var_02 in level.players)
{
if((!isdefined(param_00) || var_02 != param_00) && !var_02 lib_05FE::func_74B9())
{
var_02 lib_05FE::func_65A7();
}
}
level notify("nuke_emp_update");
level notify("nuke_emp_ended");
}
//Function Number: 23
keepnukeemptimeremaining()
{
level notify("keepNukeEMPTimeRemaining");
level endon("keepNukeEMPTimeRemaining");
level endon("nuke_emp_ended");
level.nukeemptimeremaining = int(level.nukeemptimeout);
while(level.nukeemptimeremaining)
{
wait(1);
level.nukeemptimeremaining--;
}
}
//Function Number: 24
func_595D()
{
for(;;)
{
level waittill("connected",var_00);
var_00 thread onplayerspawned();
}
}
//Function Number: 25
onplayerspawned()
{
self endon("disconnect");
for(;;)
{
self waittill("spawned_player");
if(isdefined(level.nukedetonated))
{
thread func_7213();
}
}
}
//Function Number: 26
func_7213()
{
wait(0.1);
self visionsetpostapplyforplayer(level.nukevisionset,0);
}
//Function Number: 27
func_86BA()
{
level endon("game_ended");
level endon("disconnect");
level endon("nuke_cancelled");
level endon("nuke_death");
var_00 = level.nuketimer * 1000 + gettime();
setomnvar("ui_nuke_end_milliseconds",var_00);
level waittill("host_migration_begin");
var_01 = maps\mp\gametypes\_hostmigration::func_8BBA();
if(var_01 > 0)
{
setomnvar("ui_nuke_end_milliseconds",var_00 + var_01);
}
}
//Function Number: 28
func_9557()
{
level endon("game_ended");
for(;;)
{
level waittill("host_migration_end");
level func_9453(0);
}
}
//Function Number: 29
func_9453(param_00)
{
if(isdefined(level.nukedeathvisionfunc))
{
level thread [[ level.nukedeathvisionfunc ]]();
}
visionsetpostapply(level.nukevisionset,param_00);
}