IL-GSC/WW2/PC/ALL/1269.gsc
2023-10-27 03:49:01 -04:00

673 lines
15 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: 1269.gsc
* Game: Call of Duty: WWII
* Platform: PC
* Function Count: 32
* Decompile Time: 25 ms
* Timestamp: 10/27/2023 3:24:13 AM
*******************************************************************/
//Function Number: 1
func_533B()
{
func_52FB();
var_00 = lib_0502::func_2548("destructionObjective",::func_2E32);
var_01 = var_00 lib_0502::func_2548("destructionRepairTrigger",::func_2E35);
var_02 = var_00 lib_0502::func_2548("overtime_trigger",::destructionovertimezoneinit);
var_03 = var_01 lib_0502::func_2548("destructionTarget",::func_2E34);
var_04 = var_03 lib_0502::func_2548("destructionNode");
var_05 = var_03 lib_0502::func_2548("ownedByParent",::lib_0502::ces_setownedbyparent);
}
//Function Number: 2
func_2E32(param_00)
{
lib_04FF::func_6934(param_00);
lib_04FF::func_6983(self.var_1A5);
lib_04FF::func_6965("objectHealth",750,[]);
lib_04FF::func_6963("grenadeDamageMult",0.1,[0,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]);
param_00.var_1A7 = game["attackers"];
var_01 = lib_04FF::func_27DE("A",param_00.var_1A7,self.var_116);
var_01 maps\mp\gametypes\_gameobjects::func_8A60("any");
param_00.var_2563 = var_01;
param_00.var_6896 = 0;
param_00.var_294F = 0;
if(isdefined(param_00.numexternaltargets))
{
func_2E33(param_00.numexternaltargets);
}
param_00 thread func_7F99();
}
//Function Number: 3
func_7F99()
{
thread func_2E31(self.var_2563);
if(isdefined(self.overtimezone))
{
thread runovertimezone(self.overtimezone);
}
lib_04FF::func_6982(self.var_1A5);
thread func_2E30();
}
//Function Number: 4
func_2E31(param_00)
{
self endon("death");
level endon("game_ended");
wait 0.05;
var_01 = self.var_6896 * 1000;
param_00.var_A23F = var_01;
var_02 = 110;
if(isdefined(self.iconimageindexoverride))
{
var_02 = self.iconimageindexoverride;
}
if(isdefined(self.externaliconent))
{
param_00 lib_04FF::func_990(self.externaliconent,undefined,(0,0,0),var_01,var_02,0,1,0,1,0,undefined,undefined,undefined,undefined,self.var_6896);
}
else
{
param_00 lib_04FF::func_990(self.var_116,undefined,(0,0,0),var_01,var_02,0,1,0,1,0,undefined,undefined,undefined,undefined,self.var_6896);
}
param_00 lib_04FF::func_860A(var_02);
var_03 = self.var_6896;
for(;;)
{
if(self.var_6896 != var_03)
{
var_04 = var_03 - self.var_6896 * 1000;
param_00 lib_04FF::func_8615(var_04);
}
self waittill("prop_destroyed");
}
}
//Function Number: 5
func_2E30()
{
self endon("death");
level endon("game_ended");
self.var_2563 lib_04FF::func_7CCA();
self.var_2563 maps\mp\gametypes\_gameobjects::func_2D58();
}
//Function Number: 6
destructionobjectoverrideiconimageindex(param_00)
{
self.iconimageindexoverride = param_00;
}
//Function Number: 7
destructionobjectsetexternaliconent(param_00)
{
self.externaliconent = param_00;
}
//Function Number: 8
destructionobjectsetnumexternalobjects(param_00)
{
self.numexternaltargets = param_00;
}
//Function Number: 9
func_2E33(param_00)
{
self.var_6896 = self.var_6896 + param_00;
self notify("prop_destroyed");
if(self.var_6896 <= 0)
{
lib_04FF::func_6935(self.var_1A5);
}
}
//Function Number: 10
func_52FB()
{
level.var_611["destructionExplode"] = loadfx("vfx/map/mp_raid_d_day/r_dday_equipment_damaged_state_2");
level.var_611["engine_smoke"] = loadfx("vfx/fire/fire_licks_small");
level.var_611["engine_damage"] = loadfx("vfx/vehicle/vehicle_tank_engine_damage_3_lightfire");
level.var_611["engine_fire"] = loadfx("vfx/fire/fire_licks_small");
level.var_611["engine_explode"] = loadfx("vfx/explosion/drone_swarm_projectile_explode");
}
//Function Number: 11
func_2E34(param_00)
{
param_00.var_65EA = self;
param_00.var_7D11 = undefined;
if(param_00.var_982E.var_165 != "destructionObjective")
{
param_00.var_982E.var_6DA7 = param_00;
param_00.var_7D11 = param_00.var_982E;
}
lib_04FF::func_6983(param_00.var_65EA.var_1A5);
waittillframeend;
param_00 setdamagecallbackon(1);
param_00.var_29B5 = ::func_2E2C;
param_00 setcandamage(1);
param_00 method_86B7();
param_00 method_80B0(8576);
var_01 = lib_04FF::func_45D0("objectHealth");
param_00.var_BC = var_01;
param_00.var_FB = param_00.var_BC;
param_00.repairdamageto = 0;
param_00.var_6A = 0;
param_00.var_1A7 = game["defenders"];
param_00.var_29D7 = 1;
param_00.var_29DD = [];
param_00.var_3F7C = -1;
param_00.outlinecolor = 0;
param_00 thread updatehudoutline();
param_00.var_6E56 = lib_0502::func_4679(param_00);
if(lib_0502::func_A273(param_00.var_6E56,[],["type","healthMult","damaged","partial_damage"]))
{
destructionpropapplyparamaters(param_00);
}
param_00 initfxnodes(param_00);
param_00 initdamageportions();
thread func_2E2D(param_00);
func_2E33(1);
}
//Function Number: 12
destructionpropapplyparamaters(param_00)
{
var_01 = param_00.var_6E56;
if(isdefined(var_01["healthMult"]))
{
var_01["healthMult"] = float(var_01["healthMult"]);
param_00.var_BC = int(param_00.var_BC * var_01["healthMult"]);
param_00.var_FB = param_00.var_BC;
}
var_02 = lib_0501::func_4647("destroy_objectHealthPercent");
param_00.var_BC = int(int(var_02) / 100 * param_00.var_BC);
param_00.var_FB = param_00.var_BC;
if(isdefined(var_01["damaged"]))
{
param_00.destroyed_model = var_01["damaged"];
}
if(isdefined(var_01["partial_damage"]))
{
param_00.partialdamaged_model = var_01["partial_damage"];
}
}
//Function Number: 13
initfxnodes(param_00)
{
foreach(var_02 in param_00.var_982D)
{
foreach(var_04 in var_02)
{
if(var_04.var_165 == "fxSource")
{
fxstructinit(var_04);
}
}
}
}
//Function Number: 14
initdamageportions()
{
var_00 = 0;
var_01 = int(self.var_FB / self.var_29D7);
foreach(var_03 in self.var_29DD)
{
var_00 = var_00 + var_03.var_6E56["portions"];
var_03.healththreashold = var_00 * var_01;
}
}
//Function Number: 15
func_2E2D(param_00)
{
param_00 endon("death");
lib_04FF::func_6982(self.var_1A5);
param_00 hudoutlinedisable();
param_00 setdamagecallbackon(0);
}
//Function Number: 16
func_2E2E()
{
self setdamagecallbackon(0);
self setcandamage(0);
if(isdefined(self.var_7D11))
{
self.var_7D11.var_7D0D maps\mp\gametypes\_gameobjects::func_2F93();
}
self.var_65EA func_2E33(-1);
self notify("destroyed");
foreach(var_01 in self.var_29DD)
{
var_01 func_36EB();
}
playfx(common_scripts\utility::func_44F5("destructionExplode"),self.var_116);
self method_8617("mp_war_radio_lrg_explo");
if(isdefined(self.destroyed_model))
{
self hudoutlinedisable();
self setmodel(self.destroyed_model);
if(maps\mp\_utility::func_4571() == "mp_raid_dlc3")
{
self.var_1D = self.var_1D + (0,90,0);
}
self hudoutlinedisable();
return;
}
self method_8511();
thread lib_0502::func_2D2D();
}
//Function Number: 17
func_2E2C(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B)
{
if(!isdefined(param_01) || param_01.var_3A == "worldspawn" || !isplayer(param_01) && !lib_0502::func_57F9(param_01))
{
return;
}
if(isdefined(param_01.var_1A7))
{
if(self.var_1A7 == param_01.var_1A7)
{
return;
}
}
else if(isdefined(param_01.var_117) && isdefined(param_01.var_117.var_1A7))
{
if(self.var_1A7 == param_01.var_117.var_1A7)
{
return;
}
}
if(maps\mp\_utility::func_4571() == "mp_raid_dlc3")
{
if(param_05 != "usa_tank_sherman_turret_player_mp" && param_05 != "turretweapon_usa_m1919_tank_sherman_bucket_mp")
{
return;
}
if(param_05 == "usa_tank_sherman_turret_player_mp" && param_04 == "MOD_CRUSH")
{
return;
}
}
param_01 maps\mp\gametypes\_damagefeedback::func_A102("standard_nosound");
if(isplayer(param_01))
{
var_0C = param_01 getcurrentprimaryweapon();
if(var_0C != "flamethrower_mp" && var_0C != "flamethrower_grenadier_mp")
{
self method_8617("mp_war_radio_lrg_hit");
}
}
var_0D = modifydamagefordestructibles(param_04,param_02,self,param_00);
if(maps\mp\_utility::func_4571() == "mp_raid_dlc3" && param_05 == "turretweapon_usa_m1919_tank_sherman_bucket_mp")
{
var_0D = int(var_0D / 3);
}
self.var_6A = self.var_6A + var_0D;
var_0E = var_0D;
var_0F = "aud_stop_radio_fire_lp";
var_10 = "mp_war_radio_lrg_destruct_fire_lp";
if(self.var_6A >= self.var_FB)
{
var_11 = self.var_6A - self.var_FB;
var_0E = var_0E - var_11;
level thread maps\mp\gametypes\_rank::func_1457("raids_destruct_equipment",param_01);
func_2E2E();
level notify(var_0F);
}
else
{
var_12 = func_469D(self);
if(var_12 != self.var_3F7C)
{
func_0A15(var_12);
var_13 = lib_0380::func_2889(var_10,undefined,self.var_116,1);
lib_0380::func_5F2(var_13,1,var_0F);
}
}
lib_04FF::func_6981(self.var_65EA.var_1A5);
}
//Function Number: 18
modifydamagefordestructibles(param_00,param_01,param_02,param_03)
{
if(param_00 == "MOD_RIFLE_BULLET")
{
return param_01;
}
if(maps\mp\_utility::func_5755(param_00))
{
return 0.6 * param_01;
}
if(param_00 == "MOD_GRENADE_SPLASH")
{
var_04 = 0;
if(isdefined(param_03.var_A9E0))
{
var_04 = getweaponexplosionradius(param_03.var_A9E0);
}
if(var_04 != 0)
{
var_05 = distance(self.var_116,param_03.var_116);
var_06 = lerp(0.1,self.var_65EA lib_04FF::func_45D0("grenadeDamageMult"),var_05 / var_04);
}
else
{
var_06 = self.var_65EA lib_04FF::func_45D0("grenadeDamageMult");
}
return max(param_02.var_FB * var_06,param_01);
}
if(isexplosivedamagemod(param_02))
{
return min(int(var_04.var_FB * 0.51),param_03);
}
return param_03;
}
//Function Number: 19
setoutline(param_00,param_01)
{
if(!isdefined(param_01))
{
param_01 = game["attackers"];
}
if(!isdefined(param_00.outlinecolor))
{
param_00.outlinecolor = 1;
}
if(param_01 == game["attackers"])
{
var_02 = 1;
}
else
{
var_02 = 2;
}
param_00 hudoutlinedisableforclient(self);
param_00 hudoutlineenableforclient(self,var_02,1);
}
//Function Number: 20
updatehudoutline()
{
self endon("death");
self endon("destroyed");
for(;;)
{
foreach(var_01 in level.var_744A)
{
var_01 setoutline(self,var_01.var_1A7);
}
wait(3);
}
}
//Function Number: 21
func_469D(param_00)
{
if(param_00.var_29DD.size == 0)
{
return -1;
}
var_01 = param_00.var_6A;
var_02 = -1;
for(var_03 = 0;var_03 < param_00.var_29DD.size;var_03++)
{
var_04 = param_00.var_29DD[var_03];
if(var_01 < var_04.healththreashold)
{
break;
}
var_02 = var_03;
}
return var_02;
}
//Function Number: 22
func_0A15(param_00)
{
var_01 = self.var_3F7C;
if(param_00 > var_01)
{
self.repairdamageto = max(0,self.var_29DD[param_00].healththreashold - 1);
}
if(isdefined(self.var_29DD[var_01]))
{
self.var_29DD[var_01] func_36EB();
}
for(var_02 = -1;var_02 <= param_00;var_02++)
{
if(isdefined(self.var_29DD[var_02]))
{
if(var_02 > var_01)
{
self.var_29DD[var_02] thread func_74E0();
}
}
self.var_3F7C = var_02;
}
}
//Function Number: 23
fxstructinit(param_00)
{
param_00.var_65EB = self;
param_00.var_3F78 = 0;
param_00.var_6E56 = lib_0502::func_4679(param_00);
if(lib_0502::func_A273(param_00.var_6E56,["effect","portions"],[]) == 0)
{
return;
}
fxstructapplyparamaters(param_00);
initfxnodes(param_00);
}
//Function Number: 24
fxstructapplyparamaters(param_00)
{
if(!isdefined(level.var_611[param_00.var_6E56["effect"]]))
{
return;
}
param_00.var_6E56["portions"] = int(param_00.var_6E56["portions"]);
self.var_29DD[self.var_29DD.size] = param_00;
self.var_29D7 = self.var_29D7 + param_00.var_6E56["portions"];
self.var_3F7D = int(self.var_FB / self.var_29D7);
}
//Function Number: 25
func_74E0()
{
self.var_65EB endon("death");
level endon("game_ended");
if(self.var_3F78)
{
return;
}
var_00 = spawn("script_model",self.var_116);
var_00 setmodel("tag_origin");
var_00.var_1D = self.var_1D;
self.var_3F6E = var_00;
self.var_3F73 = common_scripts\utility::func_44F5(self.var_6E56["effect"]);
self.var_3F78 = 1;
playfxontag(self.var_3F73,self.var_3F6E,"tag_origin");
if(isdefined(self.var_65EB) && isdefined(self.var_65EB.partialdamaged_model))
{
self.var_65EB setmodel(self.var_65EB.partialdamaged_model);
}
if(isdefined(self.var_6E56["duration"]))
{
wait(int(self.var_6E56["duration"]));
self.var_3F6E delete();
self.var_3F78 = 0;
}
}
//Function Number: 26
func_36EB()
{
if(self.var_3F78 == 0)
{
return;
}
self.var_3F6E delete();
self.var_3F78 = 0;
}
//Function Number: 27
func_2E35(param_00)
{
param_00.var_65EA = self;
param_00.var_6DA7 = undefined;
lib_04FF::func_6983(self.var_1A5);
if(!isdefined(param_00.var_6DA7))
{
return;
}
var_01 = maps\mp\gametypes\_gameobjects::func_2837(game["defenders"],param_00,[],param_00.var_116,1,1);
var_01 maps\mp\gametypes\_gameobjects::func_C30("friendly");
var_01 maps\mp\gametypes\_gameobjects::func_8A60("any");
var_01 maps\mp\gametypes\_gameobjects::func_8A59(&"RAIDS_RESUPPLY_USING_DEST");
var_01 maps\mp\gametypes\_gameobjects::func_8A57(&"RAIDS_USE_CONSTRUCT");
var_01.var_A23E = 7;
var_01.var_1B9 = "repair_trigger";
var_01.var_695F = 1;
var_01.var_A414 = 1;
var_01 maps\mp\gametypes\_gameobjects::func_8A5A(1);
var_01.var_9D65 = param_00;
var_01.var_6AFA = ::func_2E26;
param_00.var_7D0D = var_01;
var_01 maps\mp\gametypes\_gameobjects::func_2F93();
lib_04FF::func_6982(self.var_1A5);
var_01 maps\mp\gametypes\_gameobjects::func_2D58();
}
//Function Number: 28
func_2E26(param_00,param_01,param_02)
{
if(param_02 == 0)
{
return;
}
if(!isdefined(self.var_9D65.var_6DA7))
{
return;
}
var_03 = self.var_9D65.var_6DA7;
var_03.var_6A = var_03.repairdamageto;
var_04 = func_469D(var_03);
if(var_04 != var_03.var_3F7C)
{
var_03 func_0A15(var_04);
}
self.var_9D65.var_7D0D maps\mp\gametypes\_gameobjects::func_2F93();
}
//Function Number: 29
destructionovertimezoneinit(param_00)
{
self.overtimezone = param_00;
}
//Function Number: 30
runovertimezone(param_00)
{
level endon("game_ended");
var_01 = lib_04FF::func_45CE(self);
var_02 = game["attackers"];
var_03 = [];
var_04 = min(10,self.var_6896) * 1000;
var_05 = maps\mp\gametypes\_gameobjects::func_2837(var_02,param_00,var_03,var_01,0,1);
var_05 thread destructionovertimeupdate(self.var_1A5);
lib_04FF::func_6982(self.var_1A5);
var_05 maps\mp\gametypes\_gameobjects::func_2F93();
var_05 maps\mp\gametypes\_gameobjects::deleteuseobjectobjectives();
waittillframeend;
var_05 maps\mp\gametypes\_gameobjects::func_2D58();
}
//Function Number: 31
destructionobjectiveupdate(param_00)
{
level endon("game_ended");
var_01 = self.var_6896;
while(self.var_6896 > 0)
{
if(self.var_6896 != var_01)
{
lib_04F3::func_79CE(game["music"]["stinger_pos"],game["attackers"]);
lib_04F3::func_79CE(game["music"]["stinger_neg"],game["defenders"]);
var_02 = var_01 - self.var_6896 * 1000;
param_00 lib_04FF::func_8615(var_02);
}
self waittill("prop_destroyed");
}
}
//Function Number: 32
destructionovertimeupdate(param_00)
{
self endon("deleted");
for(;;)
{
if(self.var_9AC3[game["attackers"]].size > 0 && lib_04FF::func_79B8() / 1000 < 120)
{
lib_04FF::func_6981(param_00);
}
wait 0.05;
}
}