Files
IL-GSC/IW/PC/ALL/scripts/mp/_splashgrenade.gsc
2023-10-27 03:49:01 -04:00

549 lines
11 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: scripts\mp\_splashgrenade.gsc
* Game: Call of Duty: Infinite Warfare
* Platform: PC
* Function Count: 21
* Decompile Time: 841 ms
* Timestamp: 10/27/2023 12:21:40 AM
*******************************************************************/
//Function Number: 1
func_10A34()
{
level._effect["base_plasma_smoke"] = loadfx("vfx/iw7/_requests/mp/vfx_plasma_smoke");
scripts\mp\_powerloot::func_DF06("power_splashGrenade",["passive_smoke","passive_increased_duration","passive_increased_spread","passive_increased_radius","passive_increased_entities"]);
}
//Function Number: 2
func_10A35(param_00)
{
param_00.var_85D5 = [];
var_01 = scripts\mp\_powerloot::func_7FC2("power_splashGrenade",6);
for(var_02 = 0;var_02 < var_01;var_02++)
{
var_03 = scripts\mp\_utility::func_1302("globproj_mp",(0,0,0),(0,0,0));
var_03.var_222 = self;
var_03.team = self.team;
var_03.var_13C2E = "globproj_mp";
var_03.parentinflictor = param_00 getentitynumber();
var_03 linkto(param_00,"",(0,0,0),(0,0,0));
var_03 hide(1);
param_00.var_85D5[param_00.var_85D5.size] = var_03;
var_03 thread func_85B4();
}
thread func_85CE(param_00);
thread func_85CD(param_00);
param_00 thread func_85B4();
}
//Function Number: 3
func_85CD(param_00,param_01)
{
param_00 notify("grenadeOnExplode");
param_00 endon("grenadeOnExplode");
param_00 thread scripts\mp\_utility::func_C15A("death","end_explode");
param_00 endon("end_explode");
var_02 = param_00.var_222;
var_03 = param_00.var_85D5;
var_04 = param_00.var_D719;
param_00 waittill("explode",var_05);
if(!isdefined(var_02))
{
return;
}
func_85B9(var_05,param_01,var_03,var_04);
}
//Function Number: 4
func_85CE(param_00)
{
param_00 endon("death");
param_00 waittill("missile_stuck",var_01);
param_00 setscriptablepartstate("beacon","active",0);
if(isdefined(var_01) && isplayer(var_01))
{
scripts\mp\_weapons::func_85DD(param_00,var_01);
foreach(var_03 in param_00.var_85D5)
{
var_03.var_9F7D = param_00.var_9F7D;
}
thread scripts\mp\_missions::func_D3A8(var_01,self);
return;
}
thread func_85CD(param_00,param_00.angles);
}
//Function Number: 5
func_85B9(param_00,param_01,param_02,param_03)
{
var_04 = 0;
var_05 = 0;
var_06 = undefined;
if(isdefined(param_01))
{
var_06 = anglestoup(param_01);
var_07 = vectordot(var_06,(0,0,1));
var_08 = acos(var_07);
var_04 = var_08 >= 45;
var_05 = var_08 >= 145;
}
var_09 = undefined;
var_0A = [];
if(level.teambased)
{
var_09 = scripts\mp\_utility::func_81A0(scripts\mp\_utility::getotherteam(self.team));
}
else
{
var_09 = level.var_3CB5;
}
var_0B = physics_createcontents(["physicscontents_solid","physicscontents_glass","physicscontents_vehicleclip","physicscontents_missileclip","physicscontents_clipshot"]);
foreach(var_0D in var_09)
{
if(!isdefined(var_0D) || var_0D == self || !scripts\mp\_utility::func_9F19(var_0D))
{
continue;
}
var_0E = distancesquared(param_00,var_0D.origin);
if(var_0E > 13225 || var_0E < 7225)
{
continue;
}
var_0F = function_0287(param_00,var_0D.origin,var_0B,undefined,0,"physicsquery_closest");
if(!isdefined(var_0F) || var_0F.size > 0)
{
continue;
}
var_0A[var_0A.size] = var_0D;
}
if(var_0A.size > 0)
{
var_0A = scripts\common\utility::array_randomize(var_0A);
}
var_11 = 0;
var_12 = 0;
var_13 = scripts\mp\_powerloot::func_7FC1("power_splashGrenade",1.5);
var_14 = (0,0,0);
var_15 = (0,0,0);
if(var_04 || var_05)
{
var_14 = var_06 * 115;
var_15 = var_06 * 3;
}
var_16 = randomint(46);
var_17 = 0;
for(var_18 = 0;var_18 < param_02.size;var_18++)
{
var_19 = undefined;
var_1A = randomint(2);
if(var_1A && var_11 < var_0A.size)
{
var_1B = var_0A[var_11].origin - param_00;
var_1B = (var_1B[0],var_1B[1],0);
var_11++;
}
else if(var_17 < 6)
{
var_1C = var_16 + 72 * var_17;
var_1D = 85 + randomint(31);
if(var_17 == 5)
{
var_1D = 0;
}
var_1B = (cos(var_1C),sin(var_1C),0) * var_1D + var_14;
var_17++;
}
else
{
var_1E = randomint(360);
var_1F = 85 + randomint(31);
var_1B = (cos(var_1E),sin(var_1E),0) * var_1F + var_14;
}
if(!var_05)
{
var_1B = var_1B + (0,0,200 + randomint(200));
}
var_1B = scripts\mp\_powerloot::func_7FC7("power_splashGrenade",var_1B);
var_20 = param_00 + var_15;
var_21 = param_02[var_18];
var_21 show();
var_21 unlink(1);
var_21 = scripts\mp\_utility::func_1302("globproj_mp",var_20,var_1B,undefined,undefined,var_21);
var_21.var_222 = self;
var_21.team = self.team;
var_21.var_13C2E = "globproj_mp";
if(var_18 == 0)
{
var_21 setscriptablepartstate("explosionLarge","active");
}
var_21 setscriptablepartstate("trail","active");
thread func_B79A(var_21,var_13);
}
}
//Function Number: 6
func_B79A(param_00,param_01)
{
param_00 endon("death");
param_00 waittill("missile_stuck",var_02);
var_03 = 3 + randomfloat(0.15);
param_00 thread func_85B4(param_01 + var_03);
param_00 setscriptablepartstate("trail","neutral");
param_00 setscriptablepartstate("explosion","active");
var_04 = scripts\mp\_powerloot::func_7FC4("power_splashGrenade",60);
var_05 = spawn("trigger_rotatable_radius",param_00.origin,0,var_04,60);
var_05.angles = param_00.angles;
var_05.var_222 = self;
var_05 enablelinkto();
var_05 linkto(param_00);
var_05 hide();
var_05.var_B799 = param_00;
var_05 thread func_13B91();
var_06 = vectordot(anglestoup(var_05.angles),(0,0,1));
if(var_06 <= 0)
{
param_00.var_D654 = "poolWall";
param_00 setscriptablepartstate("poolWall","active");
}
else
{
param_00.var_D654 = "poolGround";
param_00 setscriptablepartstate("poolGround","active");
}
wait(param_01);
param_00 notify("extinguish");
param_00 setscriptablepartstate(param_00.var_D654,"activeEnd",0);
}
//Function Number: 7
func_85B4(param_00)
{
self endon("death");
self notify("grenadeCleanup");
self endon("grenadeCleanup");
if(isdefined(param_00))
{
self.var_222 scripts\common\utility::waittill_any_timeout_no_endon_death_2(param_00,"disconnect");
}
else
{
self.var_222 waittill("disconnect");
}
if(isdefined(self))
{
self delete();
}
}
//Function Number: 8
func_B24D(param_00,param_01,param_02)
{
self endon("death");
var_03 = self getentitynumber();
self notify("mainScriptableCleanup" + var_03);
self endon("mainScriptableCleanup" + var_03);
if(isdefined(param_01))
{
wait(param_01);
}
else
{
param_00 waittill("death");
}
if(isdefined(param_02))
{
wait(param_02);
}
if(isdefined(self))
{
self delete();
}
}
//Function Number: 9
func_13B91()
{
self endon("death");
self.var_222 endon("disconnect");
var_00 = self.var_222;
var_01 = var_00.team;
if(!isdefined(self.var_127C0))
{
self.var_127C0 = [];
}
thread func_13B93();
thread func_127B9();
for(;;)
{
self waittill("trigger",var_02);
if(!isplayer(var_02) && !scripts\mp\_utility::func_9F22(var_02))
{
continue;
}
if(!scripts\mp\_utility::func_9F19(var_02))
{
continue;
}
var_03 = scripts\common\utility::func_116D7(isdefined(var_02.var_222),var_02.var_222,var_02);
if(!level.var_740A && var_03 != var_00 && !scripts\mp\_utility::func_9FB3(scripts\mp\_utility::playersareenemies(var_03,var_00)))
{
continue;
}
thread scripts\mp\_missions::func_D3A8(var_02,var_00);
self.var_127C0[var_02 getentitynumber()] = var_02;
var_02 func_17B0(self.var_B799);
}
}
//Function Number: 10
func_13B93()
{
self endon("death");
self.var_222 endon("disconnect");
for(;;)
{
foreach(var_02, var_01 in self.var_127C0)
{
if(!isdefined(var_01))
{
self.var_127C0[var_02] = undefined;
continue;
}
if(!scripts\mp\_utility::func_9F19(var_01) || !var_01 istouching(self))
{
self.var_127C0[var_02] = undefined;
var_01 thread func_E0DC(self.var_B799);
}
}
scripts\common\utility::func_136F7();
}
}
//Function Number: 11
func_127B9()
{
self endon("death");
self.var_B799 endon("death");
self.var_B799 waittill("extinguish");
foreach(var_01 in self.var_127C0)
{
if(isdefined(var_01))
{
var_01 thread func_E0DC(self.var_B799);
}
}
self delete();
}
//Function Number: 12
func_D51E(param_00,param_01)
{
var_02 = spawnfx(scripts\common\utility::getfx("base_plasma_smoke"),param_00);
triggerfx(var_02);
wait(param_01);
var_02 delete();
}
//Function Number: 13
func_10D77()
{
if(isplayer(self))
{
self setscriptablepartstate("burning","active",0);
}
thread func_139C0();
}
//Function Number: 14
func_6312()
{
self notify("endBurning");
self.var_3291 = undefined;
if(isplayer(self))
{
self setscriptablepartstate("burning","neutral",0);
}
}
//Function Number: 15
func_139C0()
{
self endon("death");
self endon("disconnect");
self endon("endBurning");
thread func_40E8();
var_00 = self.var_3291;
var_01 = 0;
for(;;)
{
if(func_9D76())
{
var_00.var_32A1 = var_00.var_32A1 + 0.05;
var_00.var_32A0 = 0;
if(var_01 <= 0 && var_00.var_32A4.size > 0)
{
var_02 = var_00.var_32A4[0];
var_03 = var_02.var_222;
var_04 = var_02.var_13C2E;
var_05 = func_7E11();
self dodamage(var_05,var_02.origin,var_03,var_02,"MOD_EXPLOSIVE",var_04);
var_01 = 0.25;
}
else
{
var_01 = var_01 - 0.05;
}
}
else
{
var_00.var_32A0 = var_00.var_32A0 + 0.05;
if(var_00.var_32A0 > 0.25)
{
thread func_6312();
}
}
wait(0.05);
}
}
//Function Number: 16
func_40E8()
{
self endon("endBurning");
self endon("disconnect");
self waittill("death");
thread func_6312();
}
//Function Number: 17
func_17B0(param_00)
{
var_01 = self.var_3291;
if(!isdefined(var_01))
{
var_01 = spawnstruct();
var_01.var_32A4 = [];
var_01.var_32A1 = 0;
var_01.var_32A0 = 0;
self.var_3291 = var_01;
}
var_02 = var_01.var_32A4.size;
if(!func_8BD9(param_00))
{
var_01.var_32A4[var_02] = param_00;
}
if(var_02 == 0)
{
func_10D77();
}
}
//Function Number: 18
func_E0DC(param_00)
{
if(isdefined(self.var_3291))
{
var_01 = self.var_3291;
var_02 = [];
for(var_03 = 0;var_03 > var_01.var_32A4.size;var_03++)
{
var_04 = var_01.var_32A4[var_03];
if(!isdefined(var_04))
{
continue;
}
if(var_04 == param_00)
{
continue;
}
var_02[var_02.size] = var_04;
}
if(var_02.size > 0)
{
var_01.var_32A4 = var_02;
return;
}
func_6312();
}
}
//Function Number: 19
func_8BD9(param_00)
{
if(isdefined(self.var_3291))
{
var_01 = self.var_3291;
foreach(var_03 in var_01.var_32A4)
{
if(var_03 == param_00)
{
return 1;
}
}
}
return 0;
}
//Function Number: 20
func_9D76()
{
return isdefined(self.var_3291) && isdefined(self.var_3291.var_32A4) && self.var_3291.var_32A4.size > 0;
}
//Function Number: 21
func_7E11()
{
var_00 = self.var_3291.var_32A1;
var_01 = undefined;
if(var_00 > 1)
{
var_01 = 25;
}
else if(var_00 > 0.5)
{
var_01 = 25;
}
else
{
var_01 = 25;
}
return var_01;
}