IL-GSC/GHOSTS/PC/SP/animscripts/utility.gsc
2023-10-27 03:49:01 -04:00

2508 lines
40 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: animscripts\utility.gsc
* Game: Call of Duty: Ghosts
* Platform: PC
* Function Count: 147
* Decompile Time: 2420 ms
* Timestamp: 10/27/2023 1:24:44 AM
*******************************************************************/
//Function Number: 1
initanimtree(param_00)
{
self clearanim(%body,0.3);
self setanim(%body,1,0);
if(param_00 != "pain" && param_00 != "death")
{
self.a.var_78D0 = "none";
}
self.a.aimweight = 1;
self.a.aimweight_start = 1;
self.a.aimweight_end = 1;
self.a.aimweight_transframes = 0;
self.a.aimweight_t = 0;
func_86F6();
}
//Function Number: 2
func_86CA()
{
if(isdefined(self.desired_anim_pose) && self.desired_anim_pose != self.a.var_60B1)
{
if(self.a.var_60B1 == "prone")
{
exitpronewrapper(0.5);
}
if(self.desired_anim_pose == "prone")
{
self setproneanimnodes(-45,45,%prone_legs_down,%exposed_aiming,%prone_legs_up);
enterpronewrapper(0.5);
self setanimknoball(lookupanim("default_prone","straight_level"),%body,1,0.1,1);
}
}
self.desired_anim_pose = undefined;
}
//Function Number: 3
func_4622(param_00)
{
if(isdefined(self.var_4F3D))
{
if(param_00 != "pain" && param_00 != "death")
{
self kill(self.origin);
}
if(param_00 != "pain")
{
self.var_4F3D = undefined;
self notify("kill_long_death");
}
}
if(isdefined(self.a.mayonlydie) && param_00 != "death")
{
self kill(self.origin);
}
if(isdefined(self.a.var_60DA))
{
var_01 = self.a.var_60DA;
self.a.var_60DA = undefined;
[[ var_01 ]](param_00);
}
if(param_00 != "combat" && param_00 != "pain" && param_00 != "death" && func_87FE())
{
animscripts/combat::func_7E22(lookupanim("combat","pistol_to_primary"),1);
}
if(param_00 != "combat" && param_00 != "move" && param_00 != "pain")
{
self.a.var_4FDC = undefined;
}
if(param_00 != "death")
{
self.a.var_564F = 0;
}
if(isdefined(self.var_48D8) && param_00 == "pain" || param_00 == "death" || param_00 == "flashed")
{
animscripts/combat_utility::func_2B4E();
}
self.var_48D8 = undefined;
animscripts/squadmanager::aiupdateanimstate(param_00);
self.var_1FCA = undefined;
self.var_7D64 = 0;
self.isreloading = 0;
self.changingcoverpos = 0;
self.a.aimidlethread = undefined;
self.a.var_6D18 = gettime();
self.a.atconcealmentnode = 0;
if(isdefined(self.node) && self.node.type == "Conceal Prone" || self.node.type == "Conceal Crouch" || self.node.type == "Conceal Stand")
{
self.a.atconcealmentnode = 1;
}
initanimtree(param_00);
func_86CA();
}
//Function Number: 4
getpreferredweapon()
{
if(isdefined(self.var_8C03) && self.var_8C03)
{
if(isshotgun(self.primaryweapon))
{
return self.primaryweapon;
}
else if(isshotgun(self.secondaryweapon))
{
return self.secondaryweapon;
}
}
return self.primaryweapon;
}
//Function Number: 5
badplacer(param_00,param_01,param_02)
{
for(var_03 = 0;var_03 < param_00 * 20;var_03++)
{
for(var_04 = 0;var_04 < 10;var_04++)
{
var_05 = (0,randomint(360),0);
var_06 = anglestoforward(var_05);
var_07 = var_06 * param_02;
}
wait(0.05);
}
}
//Function Number: 6
func_61A8()
{
self endon("death");
self notify("displaceprint");
self endon("displaceprint");
wait(0.05);
}
//Function Number: 7
func_48DE(param_00)
{
if((!isdefined(param_00) || param_00) && self.alertlevelint > 1)
{
return 1;
}
if(isdefined(self.enemy))
{
return 1;
}
return self.a.var_1E56 > gettime();
}
//Function Number: 8
func_86F6()
{
if(isdefined(self.enemy))
{
self.a.var_1E56 = gettime() + level.combatmemorytimeconst + randomint(level.var_1E5E);
}
}
//Function Number: 9
getenemyeyepos()
{
if(isdefined(self.enemy))
{
self.a.lastenemypos = self.enemy getshootatpos();
self.a.var_4C60 = gettime();
return self.a.lastenemypos;
}
if(isdefined(self.a.var_4C60) && isdefined(self.a.lastenemypos) && self.a.var_4C60 + 3000 < gettime())
{
return self.a.lastenemypos;
}
var_00 = self getshootatpos();
var_00 = var_00 + (196 * self.lookforward[0],196 * self.lookforward[1],196 * self.lookforward[2]);
return var_00;
}
//Function Number: 10
getnodeforwardyaw(param_00)
{
if(!isdefined(self.heat))
{
if(func_4917(param_00))
{
return param_00.angles[1] + 90;
}
else if(func_491A(param_00))
{
return param_00.angles[1] - 90;
}
else if(param_00.type == "Cover Multi")
{
if(isdefined(self.cover) && isdefined(self.cover.state))
{
if(self.cover.state == "right")
{
return param_00.angles[1] - 90;
}
else if(self.cover.state == "left")
{
return param_00.angles[1] + 90;
}
}
}
}
return param_00.angles[1];
}
//Function Number: 11
getnodeyawtoorigin(param_00)
{
if(isdefined(self.node))
{
var_01 = self.node.angles[1] - func_3C87(param_00);
}
else
{
var_01 = self.angles[1] - func_3C87(var_01);
}
var_01 = angleclamp180(var_01);
return var_01;
}
//Function Number: 12
func_3B53()
{
var_00 = undefined;
if(isdefined(self.enemy))
{
var_00 = self.enemy.origin;
}
else
{
if(isdefined(self.node))
{
var_01 = anglestoforward(self.node.angles);
}
else
{
var_01 = anglestoforward(self.angles);
}
var_01 = var_01 * 150;
var_00 = self.origin + var_01;
}
if(isdefined(self.node))
{
var_02 = self.node.angles[1] - func_3C87(var_00);
}
else
{
var_02 = self.angles[1] - func_3C87(var_02);
}
var_02 = angleclamp180(var_02);
return var_02;
}
//Function Number: 13
getyawtospot(param_00)
{
if(func_4965())
{
var_01 = anglestoforward(self.angles);
var_02 = rotatepointaroundvector(var_01,param_00 - self.origin,self.angles[2] * -1);
param_00 = var_02 + self.origin;
}
var_03 = self.angles[1] - func_3C87(param_00);
var_03 = angleclamp180(var_03);
return var_03;
}
//Function Number: 14
func_3C8B()
{
var_00 = undefined;
if(isdefined(self.enemy))
{
var_00 = self.enemy.origin;
}
else
{
var_01 = anglestoforward(self.angles);
var_01 = var_01 * 150;
var_00 = self.origin + var_01;
}
var_02 = self.angles[1] - func_3C87(var_00);
var_02 = angleclamp180(var_02);
return var_02;
}
//Function Number: 15
func_3C87(param_00)
{
return vectortoyaw(param_00 - self.origin);
}
//Function Number: 16
getyaw2d(param_00)
{
var_01 = vectortoangles((param_00[0],param_00[1],0) - (self.origin[0],self.origin[1],0));
return var_01[1];
}
//Function Number: 17
absyawtoenemy()
{
var_00 = self.angles[1] - func_3C87(self.enemy.origin);
var_00 = angleclamp180(var_00);
if(var_00 < 0)
{
var_00 = -1 * var_00;
}
return var_00;
}
//Function Number: 18
absyawtoenemy2d()
{
var_00 = self.angles[1] - getyaw2d(self.enemy.origin);
var_00 = angleclamp180(var_00);
if(var_00 < 0)
{
var_00 = -1 * var_00;
}
return var_00;
}
//Function Number: 19
func_07C8(param_00)
{
var_01 = self.angles[1] - func_3C87(param_00);
var_01 = angleclamp180(var_01);
if(var_01 < 0)
{
var_01 = -1 * var_01;
}
return var_01;
}
//Function Number: 20
absyawtoangles(param_00)
{
var_01 = self.angles[1] - param_00;
var_01 = angleclamp180(var_01);
if(var_01 < 0)
{
var_01 = -1 * var_01;
}
return var_01;
}
//Function Number: 21
func_3C8A(param_00,param_01)
{
var_02 = vectortoangles(param_00 - param_01);
return var_02[1];
}
//Function Number: 22
getyawtotag(param_00,param_01)
{
var_02 = self gettagangles(param_00)[1] - func_3C8A(param_01,self gettagorigin(param_00));
var_02 = angleclamp180(var_02);
return var_02;
}
//Function Number: 23
getyawtoorigin(param_00)
{
if(isdefined(self.type) && self.type == "Cover Up 3D" || self.type == "Cover Left 3D" || self.type == "Cover Right 3D" || self.type == "Exposed 3D")
{
var_01 = gettruenodeangles(self);
var_02 = anglestoforward(var_01);
var_03 = rotatepointaroundvector(var_02,param_00 - self.origin,var_01[2] * -1);
var_03 = var_03 + self.origin;
var_04 = var_01[1] - func_3C87(var_03);
var_04 = angleclamp180(var_04);
return var_04;
}
var_04 = self.angles[1] - func_3C87(var_04);
var_04 = angleclamp180(var_04);
return var_04;
}
//Function Number: 24
func_3AA6(param_00)
{
var_01 = self gettagangles("TAG_EYE")[1] - func_3C87(param_00);
var_01 = angleclamp180(var_01);
return var_01;
}
//Function Number: 25
func_496E(param_00)
{
if(isdefined(self.var_1FCA))
{
return self.var_1FCA doesnodeallowstance(param_00);
}
return self isstanceallowed(param_00);
}
//Function Number: 26
choosepose(param_00)
{
if(!isdefined(param_00))
{
param_00 = self.a.var_60B1;
}
switch(param_00)
{
case "stand":
if(func_496E("stand"))
{
var_01 = "stand";
}
else if(func_496E("crouch"))
{
var_01 = "crouch";
}
else if(func_496E("prone"))
{
var_01 = "prone";
}
else
{
var_01 = "stand";
}
break;
case "crouch":
if(func_496E("crouch"))
{
var_01 = "crouch";
}
else if(func_496E("stand"))
{
var_01 = "stand";
}
else if(func_496E("prone"))
{
var_01 = "prone";
}
else
{
var_01 = "crouch";
}
break;
case "prone":
if(func_496E("prone"))
{
var_01 = "prone";
}
else if(func_496E("crouch"))
{
var_01 = "crouch";
}
else if(func_496E("stand"))
{
var_01 = "stand";
}
else
{
var_01 = "prone";
}
break;
default:
var_01 = "stand";
break;
}
return var_01;
}
//Function Number: 27
func_3A52()
{
var_00 = self.node;
if(isdefined(var_00) && self nearnode(var_00) || isdefined(self.var_1FCA) && var_00 == self.var_1FCA)
{
return var_00;
}
return undefined;
}
//Function Number: 28
getnodetype()
{
var_00 = func_3A52();
if(isdefined(var_00))
{
return var_00.type;
}
return "none";
}
//Function Number: 29
func_3B4A()
{
var_00 = func_3A52();
if(isdefined(var_00))
{
return var_00.angles[1];
}
return self.desiredangle;
}
//Function Number: 30
func_3B4B()
{
var_00 = func_3A52();
if(isdefined(var_00))
{
return anglestoforward(var_00.angles);
}
return anglestoforward(self.angles);
}
//Function Number: 31
getnodeorigin()
{
var_00 = func_3A52();
if(isdefined(var_00))
{
return var_00.origin;
}
return self.origin;
}
//Function Number: 32
func_69E4(param_00,param_01)
{
var_02 = int(param_00) % param_01;
var_02 = var_02 + param_01;
return var_02 % param_01;
}
//Function Number: 33
absangleclamp180(param_00)
{
return abs(angleclamp180(param_00));
}
//Function Number: 34
quadrantanimweights(param_00)
{
var_01 = cos(param_00);
var_02 = sin(param_00);
var_03["front"] = 0;
var_03["right"] = 0;
var_03["back"] = 0;
var_03["left"] = 0;
if(isdefined(self.alwaysrunforward))
{
var_03["front"] = 1;
return var_03;
}
if(var_01 > 0)
{
if(var_02 > var_01)
{
var_03["left"] = 1;
}
else if(var_02 < -1 * var_01)
{
var_03["right"] = 1;
}
else
{
var_03["front"] = 1;
}
}
else
{
var_04 = -1 * var_01;
if(var_02 > var_04)
{
var_03["left"] = 1;
}
else if(var_02 < var_01)
{
var_03["right"] = 1;
}
else
{
var_03["back"] = 1;
}
}
return var_03;
}
//Function Number: 35
getquadrant(param_00)
{
param_00 = angleclamp(param_00);
if(param_00 < 45 || param_00 > 315)
{
var_01 = "front";
}
else if(var_01 < 135)
{
var_01 = "left";
}
else if(var_01 < 225)
{
var_01 = "back";
}
else
{
var_01 = "right";
}
return var_01;
}
//Function Number: 36
isinset(param_00,param_01)
{
for(var_02 = param_01.size - 1;var_02 >= 0;var_02--)
{
if(param_00 == param_01[var_02])
{
return 1;
}
}
return 0;
}
//Function Number: 37
func_5D42(param_00)
{
if(isdefined(param_00))
{
self setflaggedanimknoballrestart("playAnim",param_00,%root,1,0.1,1);
var_01 = getanimlength(param_00);
var_01 = 3 * var_01 + 1;
thread notifyaftertime("time is up","time is up",var_01);
self waittill("time is up");
self notify("enddrawstring");
}
}
//Function Number: 38
notifyaftertime(param_00,param_01,param_02)
{
self endon("death");
self endon(param_01);
wait(param_02);
self notify(param_00);
}
//Function Number: 39
drawstring(param_00)
{
self endon("killanimscript");
self endon("enddrawstring");
wait(0.05);
}
//Function Number: 40
func_2A8A(param_00,param_01,param_02,param_03)
{
var_04 = param_03 * 20;
for(var_05 = 0;var_05 < var_04;var_05++)
{
wait(0.05);
}
}
//Function Number: 41
showlastenemysightpos(param_00)
{
self notify("got known enemy2");
self endon("got known enemy2");
self endon("death");
if(!isdefined(self.enemy))
{
}
if(self.enemy.team == "allies")
{
var_01 = (0.4,0.7,1);
}
else
{
var_01 = (1,0.7,0.4);
}
for(;;)
{
wait(0.05);
if(!isdefined(self.lastenemysightpos))
{
continue;
}
}
}
//Function Number: 42
hasenemysightpos()
{
if(isdefined(self.node))
{
return canseeenemyfromexposed() || func_1A00();
}
return func_19F6() || cansuppressenemy();
}
//Function Number: 43
func_3A97()
{
return self.goodshootpos;
}
//Function Number: 44
func_8807()
{
if(!hasenemysightpos())
{
}
self.ignoresightpos = func_3A97();
self.ignoreorigin = self.origin;
}
//Function Number: 45
func_8805()
{
if(!hasenemysightpos())
{
return 0;
}
var_00 = self getmuzzlepos();
var_01 = self getshootatpos() - var_00;
if(isdefined(self.ignoresightpos) && isdefined(self.ignoreorigin))
{
if(distance(self.origin,self.ignoreorigin) < 25)
{
return 0;
}
}
self.ignoresightpos = undefined;
var_02 = self canshoot(func_3A97(),var_01);
if(!var_02)
{
self.ignoresightpos = func_3A97();
return 0;
}
return 1;
}
//Function Number: 46
debugtimeout()
{
wait(5);
self notify("timeout");
}
//Function Number: 47
debugposinternal(param_00,param_01,param_02)
{
self endon("death");
self notify("stop debug " + param_00);
self endon("stop debug " + param_00);
var_03 = spawnstruct();
var_03 thread debugtimeout();
var_03 endon("timeout");
if(self.enemy.team == "allies")
{
var_04 = (0.4,0.7,1);
}
else
{
var_04 = (1,0.7,0.4);
}
wait(0.05);
}
//Function Number: 48
debugpos(param_00,param_01)
{
thread debugposinternal(param_00,param_01,2.15);
}
//Function Number: 49
debugpossize(param_00,param_01,param_02)
{
thread debugposinternal(param_00,param_01,param_02);
}
//Function Number: 50
func_2418(param_00,param_01)
{
var_02 = param_00 / param_01;
var_03 = undefined;
if(param_00 == self.bulletsinclip)
{
var_03 = "all rounds";
}
else if(var_02 < 0.25)
{
var_03 = "small burst";
}
else if(var_02 < 0.5)
{
var_03 = "med burst";
}
else
{
var_03 = "long burst";
}
thread debugpossize(self.origin + (0,0,42),var_03,1.5);
thread debugpos(self.origin + (0,0,60),"Suppressing");
}
//Function Number: 51
func_61B0()
{
self endon("death");
self notify("stop shoot " + self.var_30F7);
self endon("stop shoot " + self.var_30F7);
var_00 = 0.25;
var_01 = var_00 * 20;
for(var_02 = 0;var_02 < var_01;var_02 = var_02 + 1)
{
wait(0.05);
}
}
//Function Number: 52
func_61AF()
{
}
//Function Number: 53
func_750A(param_00,param_01,param_02,param_03)
{
self endon("death");
var_04 = param_03 * 20;
for(var_05 = 0;var_05 < var_04;var_05 = var_05 + 1)
{
wait(0.05);
}
}
//Function Number: 54
func_7509(param_00,param_01,param_02,param_03)
{
thread func_750A(param_00,param_01 + (0,0,-5),param_02,param_03);
}
//Function Number: 55
func_7435(param_00)
{
if(!isdefined(param_00))
{
param_00 = 1;
}
[[ level.var_7436 ]](param_00);
}
//Function Number: 56
func_7437(param_00)
{
self.a.lastshoottime = gettime();
maps\_gameskill::func_6E1A();
self notify("shooting");
self shoot(1,undefined,param_00);
}
//Function Number: 57
func_7438(param_00)
{
level notify("an_enemy_shot",self);
func_7437(param_00);
}
//Function Number: 58
func_7448(param_00,param_01)
{
var_02 = bulletspread(self getmuzzlepos(),param_00,4);
self.a.lastshoottime = gettime();
if(!isdefined(param_01))
{
param_01 = 1;
}
self notify("shooting");
self shoot(1,var_02,param_01);
}
//Function Number: 59
func_80AF()
{
var_00 = spawn("script_model",(0,0,0));
var_00 setmodel("temp");
var_00.origin = self gettagorigin("tag_weapon_right") + (50,50,0);
var_00.angles = self gettagangles("tag_weapon_right");
var_01 = anglestoright(var_00.angles);
var_01 = var_01 * 15;
var_02 = anglestoforward(var_00.angles);
var_02 = var_02 * 15;
var_00 movegravity((0,50,150),100);
var_03 = "weapon_" + self.weapon;
var_04 = spawn(var_03,var_00.origin);
var_04.angles = self gettagangles("tag_weapon_right");
var_04 linkto(var_00);
var_05 = var_00.origin;
while(isdefined(var_04) && isdefined(var_04.origin))
{
var_06 = var_05;
var_07 = var_00.origin;
var_08 = vectortoangles(var_07 - var_06);
var_02 = anglestoforward(var_08);
var_02 = var_02 * 4;
var_09 = bullettrace(var_07,var_07 + var_02,1,var_04);
if(isalive(var_09["entity"]) && var_09["entity"] == self)
{
wait(0.05);
continue;
}
if(var_09["fraction"] < 1)
{
break;
}
var_05 = var_00.origin;
wait(0.05);
}
if(isdefined(var_04) && isdefined(var_04.origin))
{
var_04 unlink();
}
var_00 delete();
}
//Function Number: 60
func_5BB0()
{
var_00 = "TAG_EYE";
self endon("death");
self notify("stop personal effect");
self endon("stop personal effect");
while(isdefined(self))
{
wait(0.05);
if(!isdefined(self))
{
break;
}
if(isdefined(self.a.var_5486) && self.a.var_5486 == "stop")
{
if(isdefined(self.var_48E0) && self.var_48E0 == 1)
{
continue;
}
playfxontag(level._effect["cold_breath"],self,var_00);
wait(2.5 + randomfloat(3));
continue;
}
wait(0.5);
}
}
//Function Number: 61
personalcoldbreathstop()
{
self notify("stop personal effect");
}
//Function Number: 62
func_5BB1()
{
self endon("death");
self notify("stop personal effect");
self endon("stop personal effect");
for(;;)
{
self waittill("spawned",var_00);
if(maps\_utility::func_77BE(var_00))
{
continue;
}
var_00 thread func_5BB0();
}
}
//Function Number: 63
func_4979()
{
if(isdefined(self.var_34E1))
{
return self.var_34E1;
}
if(self.suppressionmeter <= self.var_7D6A)
{
return 0;
}
return self issuppressed();
}
//Function Number: 64
func_4965()
{
return isdefined(self.swimmer) && self.swimmer == 1 && isdefined(self.space) && self.space == 1;
}
//Function Number: 65
gettruenodeangles(param_00)
{
if(!isdefined(param_00))
{
return (0,0,0);
}
if(!isdefined(param_00.script_angles))
{
return param_00.angles;
}
var_01 = param_00.angles;
var_02 = angleclamp180(var_01[0] + param_00.script_angles[0]);
var_03 = var_01[1];
var_04 = angleclamp180(var_01[2] + param_00.script_angles[2]);
return (var_02,var_03,var_04);
}
//Function Number: 66
ispartiallysuppressedwrapper()
{
if(self.suppressionmeter <= self.var_7D6A * 0.25)
{
return 0;
}
return self issuppressed();
}
//Function Number: 67
func_3B50(param_00)
{
if(isdefined(param_00.offset))
{
return param_00.offset;
}
var_01 = (-26,0.4,36);
var_02 = (-32,7,63);
var_03 = (43.5,11,36);
var_04 = (36,8.3,63);
var_05 = (3.5,-12.5,45);
var_06 = (-3.7,-22,63);
var_07 = 0;
var_08 = (0,0,0);
var_09 = anglestoright(param_00.angles);
var_0A = anglestoforward(param_00.angles);
var_0B = param_00.type;
if(var_0B == "Cover Multi")
{
var_0B = getcovermultipretendtype(param_00);
}
switch(var_0B)
{
case "Cover Left":
case "Cover Left 3D":
if(param_00 gethighestnodestance() == "crouch")
{
var_08 = func_1935(var_09,var_0A,var_01);
}
else
{
var_08 = func_1935(var_09,var_0A,var_02);
}
break;
case "Cover Right":
case "Cover Right 3D":
if(param_00 gethighestnodestance() == "crouch")
{
var_08 = func_1935(var_09,var_0A,var_03);
}
else
{
var_08 = func_1935(var_09,var_0A,var_04);
}
break;
case "Turret":
case "Cover Stand":
case "Conceal Stand":
var_08 = func_1935(var_09,var_0A,var_06);
break;
case "Cover Crouch Window":
case "Cover Crouch":
case "Conceal Crouch":
var_08 = func_1935(var_09,var_0A,var_05);
break;
}
param_00.offset = var_08;
return param_00.offset;
}
//Function Number: 68
func_1935(param_00,param_01,param_02)
{
return param_00 * param_02[0] + param_01 * param_02[1] + (0,0,param_02[2]);
}
//Function Number: 69
func_63FE()
{
return isdefined(self.enemy) && self seerecently(self.enemy,5);
}
//Function Number: 70
func_19F6(param_00)
{
if(!isdefined(self.enemy))
{
return 0;
}
if((isdefined(param_00) && self cansee(self.enemy,param_00)) || self cansee(self.enemy))
{
if(!checkpitchvisibility(self geteye(),self.enemy getshootatpos()))
{
return 0;
}
self.goodshootpos = getenemyeyepos();
func_29AE();
return 1;
}
return 0;
}
//Function Number: 71
canseeenemyfromexposed()
{
if(!isdefined(self.enemy))
{
self.goodshootpos = undefined;
return 0;
}
var_00 = getenemyeyepos();
if(!isdefined(self.node))
{
var_01 = self cansee(self.enemy);
}
else
{
var_01 = canseepointfromexposedatnode(var_01,self.node);
}
if(var_01)
{
self.goodshootpos = var_00;
func_29AE();
}
else
{
}
return var_01;
}
//Function Number: 72
canseepointfromexposedatnode(param_00,param_01)
{
if(func_4917(param_01) || func_491A(param_01) || func_4918(param_01))
{
if(!animscripts/corner::func_19F8(param_00,param_01))
{
return 0;
}
}
var_02 = func_3B50(param_01);
var_03 = param_01.origin + var_02;
if(!checkpitchvisibility(var_03,param_00,param_01))
{
return 0;
}
if(!sighttracepassed(var_03,param_00,0,undefined))
{
if(param_01.type == "Cover Crouch" || param_01.type == "Conceal Crouch")
{
var_03 = (0,0,64) + param_01.origin;
return sighttracepassed(var_03,param_00,0,undefined);
}
if(func_4965() && param_01.type == "Cover Up 3D")
{
var_04 = anglestoup(self.angles);
var_03 = param_01.origin + (var_04[0] * 32,var_04[1] * 32,var_04[2] * 32);
return sighttracepassed(var_03,param_00,0,undefined);
}
return 0;
}
return 1;
}
//Function Number: 73
func_4918(param_00)
{
if(param_00.type != "Cover Multi")
{
return 0;
}
if(!isdefined(self.cover))
{
return 0;
}
if(isdefined(self.cover.state))
{
return self.cover.state == "right" || self.cover.state == "left";
}
if(isdefined(self.cover.arrivalnodetype))
{
return self.cover.arrivalnodetype == "right" || self.cover.arrivalnodetype == "left";
}
return 0;
}
//Function Number: 74
getcovermultipretendtype(param_00,param_01)
{
if(!isdefined(param_01))
{
param_01 = param_00 animscripts/cover_multi::covermulti_getnonrandomvaliddir();
}
switch(param_01)
{
case "right":
return "Cover Right";
case "left":
return "Cover Left";
case "stand":
return "Cover Stand";
case "crouch":
return "Cover Crouch";
default:
break;
}
}
//Function Number: 75
checkpitchvisibility(param_00,param_01,param_02)
{
var_03 = self.downaimlimit - level.aimpitchdifftolerance;
var_04 = self.upaimlimit + level.aimpitchdifftolerance;
var_05 = angleclamp180(vectortoangles(param_01 - param_00)[0]);
if(var_05 > var_04)
{
return 0;
}
if(var_05 < var_03)
{
if(isdefined(param_02) && param_02.type != "Cover Crouch" && param_02.type != "Conceal Crouch")
{
return 0;
}
if(var_05 < level.covercrouchleanpitch + var_03)
{
return 0;
}
}
return 1;
}
//Function Number: 76
func_29AE()
{
self.a.var_74BD = 1;
}
//Function Number: 77
func_86F1()
{
if(!isdefined(self.a.var_74BD))
{
self.a.var_74BD = 1;
}
if(self.a.var_74BD)
{
self.a.giveuponsuppressiontime = gettime() + randomintrange(15000,30000);
self.a.var_74BD = 0;
}
}
//Function Number: 78
func_751A(param_00,param_01,param_02)
{
for(;;)
{
wait(0.05);
wait(0.05);
}
}
//Function Number: 79
aisuppressai()
{
if(!self canattackenemynode())
{
return 0;
}
var_00 = undefined;
if(isdefined(self.enemy.node))
{
var_01 = func_3B50(self.enemy.node);
var_00 = self.enemy.node.origin + var_01;
}
else
{
var_00 = self.enemy getshootatpos();
}
if(!self canshoot(var_00))
{
return 0;
}
if(self.script == "combat")
{
if(!sighttracepassed(self geteye(),self getmuzzlepos(),0,undefined))
{
return 0;
}
}
self.goodshootpos = var_00;
return 1;
}
//Function Number: 80
func_1A00()
{
if(!hassuppressableenemy())
{
self.goodshootpos = undefined;
return 0;
}
if(!isplayer(self.enemy))
{
return aisuppressai();
}
if(isdefined(self.node))
{
if(func_4917(self.node) || func_491A(self.node))
{
if(!animscripts/corner::func_19F8(getenemyeyepos(),self.node))
{
return 0;
}
}
var_00 = func_3B50(self.node);
var_01 = self.node.origin + var_00;
}
else
{
var_01 = self getmuzzlepos();
}
if(!checkpitchvisibility(var_01,self.lastenemysightpos))
{
return 0;
}
return func_3285(var_01);
}
//Function Number: 81
cansuppressenemy()
{
if(!hassuppressableenemy())
{
self.goodshootpos = undefined;
return 0;
}
if(!isplayer(self.enemy))
{
return aisuppressai();
}
var_00 = self getmuzzlepos();
if(!checkpitchvisibility(var_00,self.lastenemysightpos))
{
return 0;
}
return func_3285(var_00);
}
//Function Number: 82
hassuppressableenemy()
{
if(!isdefined(self.enemy))
{
return 0;
}
if(!isdefined(self.lastenemysightpos))
{
return 0;
}
func_86F1();
if(gettime() > self.a.giveuponsuppressiontime)
{
return 0;
}
if(!func_558F())
{
return isdefined(self.goodshootpos);
}
return 1;
}
//Function Number: 83
canseeandshootpoint(param_00)
{
if(!sighttracepassed(self getshootatpos(),param_00,0,undefined))
{
return 0;
}
if(self.a.var_8DB5["right"] == "none")
{
return 0;
}
var_01 = self getmuzzlepos();
return sighttracepassed(var_01,param_00,0,undefined);
}
//Function Number: 84
func_558F()
{
if(isdefined(self.goodshootpos) && !canseeandshootpoint(self.goodshootpos))
{
return 1;
}
return !isdefined(self.lastenemysightposold) || self.lastenemysightposold != self.lastenemysightpos || distancesquared(self.lastenemysightposselforigin,self.origin) > 1024;
}
//Function Number: 85
func_3285(param_00)
{
if(!func_558F())
{
return isdefined(self.goodshootpos);
}
if(isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) > squared(self.enemy.maxvisibledist))
{
self.goodshootpos = undefined;
return 0;
}
if(!sighttracepassed(self getshootatpos(),param_00,0,undefined))
{
self.goodshootpos = undefined;
return 0;
}
self.lastenemysightposselforigin = self.origin;
self.lastenemysightposold = self.lastenemysightpos;
var_01 = getenemyeyepos();
var_02 = bullettrace(self.lastenemysightpos,var_01,0,undefined);
var_03 = var_02["position"];
var_04 = self.lastenemysightpos - var_03;
var_05 = vectornormalize(self.lastenemysightpos - param_00);
var_04 = var_04 - var_05 * vectordot(var_04,var_05);
var_06 = 20;
var_07 = int(length(var_04) / var_06 + 0.5);
if(var_07 < 1)
{
var_07 = 1;
}
if(var_07 > 20)
{
var_07 = 20;
}
var_08 = self.lastenemysightpos - var_03;
var_08 = (var_08[0] / var_07,var_08[1] / var_07,var_08[2] / var_07);
var_07++;
var_09 = var_03;
self.goodshootpos = undefined;
var_0A = 0;
var_0B = 2;
for(var_0C = 0;var_0C < var_07 + var_0B;var_0C++)
{
var_0D = sighttracepassed(param_00,var_09,0,undefined);
var_0E = var_09;
if(var_0C == var_07 - 1)
{
var_08 = var_08 - var_05 * vectordot(var_08,var_05);
}
var_09 = var_09 + var_08;
if(var_0D)
{
var_0A++;
self.goodshootpos = var_0E;
if(var_0C > 0 && var_0A < var_0B && var_0C < var_07 + var_0B - 1)
{
continue;
}
return 1;
}
else
{
var_0A = 0;
}
}
return isdefined(self.goodshootpos);
}
//Function Number: 86
anim_array(param_00,param_01)
{
var_02 = param_00.size;
var_03 = randomint(var_02);
if(var_02 == 1)
{
return param_00[0];
}
var_04 = 0;
var_05 = 0;
for(var_06 = 0;var_06 < var_02;var_06++)
{
var_05 = var_05 + param_01[var_06];
}
var_07 = randomfloat(var_05);
var_08 = 0;
for(var_06 = 0;var_06 < var_02;var_06++)
{
var_08 = var_08 + param_01[var_06];
if(var_07 >= var_08)
{
continue;
}
var_03 = var_06;
break;
}
return param_00[var_03];
}
//Function Number: 87
func_6199(param_00,param_01,param_02,param_03,param_04,param_05)
{
var_06 = param_00 / 0.05;
for(var_07 = 0;var_07 < var_06;var_07++)
{
wait(0.05);
}
}
//Function Number: 88
func_6198(param_00,param_01,param_02,param_03,param_04)
{
var_05 = 100;
var_06 = 0;
param_00 = param_00 + common_scripts\utility::randomvector(30);
for(var_07 = 0;var_07 < var_05;var_07++)
{
var_06 = var_06 + 0.5;
wait(0.05);
}
}
//Function Number: 89
crossproduct(param_00,param_01)
{
return param_00[0] * param_01[1] - param_00[1] * param_01[0] > 0;
}
//Function Number: 90
func_3ABF()
{
return getweaponmodel(self.grenadeweapon);
}
//Function Number: 91
func_6AAF(param_00)
{
if(!isdefined(param_00))
{
param_00 = 500;
}
return gettime() - self.var_5BB7 < param_00;
}
//Function Number: 92
canthrowgrenade()
{
if(!self.grenadeammo)
{
return 0;
}
if(self.script_forcegrenade)
{
return 1;
}
return isplayer(self.enemy);
}
//Function Number: 93
func_87F0()
{
return weaponisboltaction(self.weapon);
}
//Function Number: 94
random_weight(param_00)
{
var_01 = randomint(param_00.size);
if(param_00.size > 1)
{
var_02 = 0;
for(var_03 = 0;var_03 < param_00.size;var_03++)
{
var_02 = var_02 + param_00[var_03];
}
var_04 = randomfloat(var_02);
var_02 = 0;
for(var_03 = 0;var_03 < param_00.size;var_03++)
{
var_02 = var_02 + param_00[var_03];
if(var_04 < var_02)
{
var_01 = var_03;
break;
}
}
}
return var_01;
}
//Function Number: 95
func_7039(param_00,param_01)
{
if(!isdefined(level.var_59D1))
{
anim.var_59D1 = [];
}
level.var_59D1[param_00] = 1;
level._effect["step_" + param_00] = param_01;
}
//Function Number: 96
func_703A(param_00,param_01)
{
if(!isdefined(level.var_59D3))
{
anim.var_59D3 = [];
}
level.var_59D3[param_00] = 1;
level._effect["step_small_" + param_00] = param_01;
}
//Function Number: 97
func_861E(param_00)
{
if(isdefined(level.var_59D1))
{
level.var_59D1[param_00] = undefined;
}
level._effect["step_" + param_00] = undefined;
}
//Function Number: 98
func_861F(param_00)
{
if(isdefined(level.var_59D3))
{
level.var_59D3[param_00] = undefined;
}
level._effect["step_small_" + param_00] = undefined;
}
//Function Number: 99
setnotetrackeffect(param_00,param_01,param_02,param_03,param_04,param_05)
{
if(!isdefined(param_02))
{
param_02 = "all";
}
if(!isdefined(level._notetrackfx))
{
level._notetrackfx = [];
}
level._notetrackfx[param_00][param_02] = spawnstruct();
level._notetrackfx[param_00][param_02].tag = param_01;
level._notetrackfx[param_00][param_02].fx = param_03;
func_707F(param_00,param_02,param_04,param_05);
}
//Function Number: 100
func_707F(param_00,param_01,param_02,param_03)
{
if(!isdefined(param_01))
{
param_01 = "all";
}
if(!isdefined(level._notetrackfx))
{
level._notetrackfx = [];
}
if(isdefined(level._notetrackfx[param_00][param_01]))
{
var_04 = level._notetrackfx[param_00][param_01];
}
else
{
var_04 = spawnstruct();
level._notetrackfx[param_00][param_01] = var_04;
}
if(isdefined(param_02))
{
var_04.var_7712 = param_02;
}
if(isdefined(param_03))
{
var_04.var_7715 = param_03;
}
}
//Function Number: 101
func_5BAD(param_00,param_01)
{
self endon("death");
level notify("newdebugline");
level endon("newdebugline");
wait(0.05);
}
//Function Number: 102
enterpronewrapper(param_00)
{
thread func_2F66(param_00);
}
//Function Number: 103
func_2F66(param_00)
{
self endon("death");
self notify("anim_prone_change");
self endon("anim_prone_change");
self enterprone(param_00,isdefined(self.a.onback));
self waittill("killanimscript");
if(self.a.var_60B1 != "prone" && !isdefined(self.a.onback))
{
self.a.var_60B1 = "prone";
}
}
//Function Number: 104
exitpronewrapper(param_00)
{
thread func_309D(param_00);
}
//Function Number: 105
func_309D(param_00)
{
self endon("death");
self notify("anim_prone_change");
self endon("anim_prone_change");
self exitprone(param_00);
self waittill("killanimscript");
if(self.a.var_60B1 == "prone")
{
self.a.var_60B1 = "crouch";
}
}
//Function Number: 106
func_199A()
{
if(self.a.atconcealmentnode)
{
return 0;
}
if(!animscripts/weaponlist::func_87EF())
{
return 0;
}
if(weaponclass(self.weapon) == "mg")
{
return 0;
}
if(isdefined(self.disable_blindfire) && self.disable_blindfire == 1)
{
return 0;
}
return 1;
}
//Function Number: 107
func_19C9()
{
if(!hasenemysightpos())
{
return 0;
}
var_00 = self getmuzzlepos();
return sighttracepassed(var_00,func_3A97(),0,undefined);
}
//Function Number: 108
getmoveanim(param_00)
{
return self.a.var_5473[param_00];
}
//Function Number: 109
func_632D(param_00,param_01)
{
if(randomint(2))
{
return param_00;
}
return param_01;
}
//Function Number: 110
animarray(param_00)
{
return self.a.var_ED8[param_00];
}
//Function Number: 111
animarrayanyexist(param_00)
{
return isdefined(self.a.var_ED8[param_00]) && self.a.var_ED8[param_00].size > 0;
}
//Function Number: 112
animarraypickrandom(param_00)
{
var_01 = randomint(self.a.var_ED8[param_00].size);
return self.a.var_ED8[param_00][var_01];
}
//Function Number: 113
func_0ED8(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B,param_0C,param_0D)
{
var_0E = [];
if(isdefined(param_00))
{
var_0E[0] = param_00;
}
else
{
return var_0E;
}
if(isdefined(param_01))
{
var_0E[1] = param_01;
}
else
{
return var_0E;
}
if(isdefined(param_02))
{
var_0E[2] = param_02;
}
else
{
return var_0E;
}
if(isdefined(param_03))
{
var_0E[3] = param_03;
}
else
{
return var_0E;
}
if(isdefined(param_04))
{
var_0E[4] = param_04;
}
else
{
return var_0E;
}
if(isdefined(param_05))
{
var_0E[5] = param_05;
}
else
{
return var_0E;
}
if(isdefined(param_06))
{
var_0E[6] = param_06;
}
else
{
return var_0E;
}
if(isdefined(param_07))
{
var_0E[7] = param_07;
}
else
{
return var_0E;
}
if(isdefined(param_08))
{
var_0E[8] = param_08;
}
else
{
return var_0E;
}
if(isdefined(param_09))
{
var_0E[9] = param_09;
}
else
{
return var_0E;
}
if(isdefined(param_0A))
{
var_0E[10] = param_0A;
}
else
{
return var_0E;
}
if(isdefined(param_0B))
{
var_0E[11] = param_0B;
}
else
{
return var_0E;
}
if(isdefined(param_0C))
{
var_0E[12] = param_0C;
}
else
{
return var_0E;
}
if(isdefined(param_0D))
{
var_0E[13] = param_0D;
}
return var_0E;
}
//Function Number: 114
func_3A13()
{
return self.primaryweapon;
}
//Function Number: 115
func_3A15()
{
return self.secondaryweapon;
}
//Function Number: 116
getaisidearmweapon()
{
return self.var_7544;
}
//Function Number: 117
func_3A0E()
{
return self.weapon;
}
//Function Number: 118
usingprimary()
{
return self.weapon == self.primaryweapon && self.weapon != "none";
}
//Function Number: 119
func_87FB()
{
return self.weapon == self.secondaryweapon && self.weapon != "none";
}
//Function Number: 120
func_87FE()
{
return self.weapon == self.var_7544 && self.weapon != "none";
}
//Function Number: 121
getaicurrentweaponslot()
{
if(self.weapon == self.primaryweapon)
{
return "primary";
}
if(self.weapon == self.secondaryweapon)
{
return "secondary";
}
if(self.weapon == self.var_7544)
{
return "sidearm";
}
}
//Function Number: 122
aihasweapon(param_00)
{
if(isdefined(self.weaponinfo[param_00]))
{
return 1;
}
return 0;
}
//Function Number: 123
func_3A23(param_00)
{
var_01 = getmovedelta(param_00,0,1);
return self localtoworldcoords(var_01);
}
//Function Number: 124
func_2310(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_00))
{
return 0;
}
if(self.damagelocation == param_00)
{
return 1;
}
if(!isdefined(param_01))
{
return 0;
}
if(self.damagelocation == param_01)
{
return 1;
}
if(!isdefined(param_02))
{
return 0;
}
if(self.damagelocation == param_02)
{
return 1;
}
if(!isdefined(param_03))
{
return 0;
}
if(self.damagelocation == param_03)
{
return 1;
}
if(!isdefined(param_04))
{
return 0;
}
if(self.damagelocation == param_04)
{
return 1;
}
if(!isdefined(param_05))
{
return 0;
}
if(self.damagelocation == param_05)
{
return 1;
}
if(!isdefined(param_06))
{
return 0;
}
if(self.damagelocation == param_06)
{
return 1;
}
if(!isdefined(param_07))
{
return 0;
}
if(self.damagelocation == param_07)
{
return 1;
}
if(!isdefined(param_08))
{
return 0;
}
if(self.damagelocation == param_08)
{
return 1;
}
if(!isdefined(param_09))
{
return 0;
}
if(self.damagelocation == param_09)
{
return 1;
}
if(!isdefined(param_0A))
{
return 0;
}
if(self.damagelocation == param_0A)
{
return 1;
}
return 0;
}
//Function Number: 125
func_87F4()
{
return weaponclass(self.weapon) == "pistol";
}
//Function Number: 126
func_87FA()
{
return weaponclass(self.weapon) == "rocketlauncher";
}
//Function Number: 127
usingmg()
{
return weaponclass(self.weapon) == "mg";
}
//Function Number: 128
func_87FD()
{
return weaponclass(self.weapon) == "spread";
}
//Function Number: 129
usingriflelikeweapon()
{
var_00 = weaponclass(self.weapon);
switch(var_00)
{
case "rifle":
case "sniper":
case "smg":
case "spread":
case "mg":
return 1;
}
return 0;
}
//Function Number: 130
func_74AE(param_00)
{
return isdefined(self.secondaryweapon) && self.secondaryweapon != "none" && param_00 < squared(512) || self.a.rockets < 1;
}
//Function Number: 131
func_62E1(param_00)
{
self endon("killanimscript");
var_01 = self.origin;
var_02 = (0,0,0);
for(;;)
{
wait(0.05);
var_03 = distance(self.origin,var_01);
var_01 = self.origin;
if(self.health == 1)
{
self.a.var_564F = 1;
self startragdoll();
self clearanim(param_00,0.1);
wait(0.05);
physicsexplosionsphere(var_01,600,0,var_03 * 0.1);
self notify("killanimscript");
}
}
}
//Function Number: 132
func_74A5()
{
return isdefined(self.var_1FFA) && !isdefined(self.grenade);
}
//Function Number: 133
func_48A0()
{
return isdefined(self.var_1FFA);
}
//Function Number: 134
iscqbwalkingorfacingenemy()
{
return !self.facemotion || isdefined(self.var_1FFA);
}
//Function Number: 135
func_633A()
{
self.a.var_43E4 = randomint(2);
}
//Function Number: 136
isshotgun(param_00)
{
return weaponclass(param_00) == "spread";
}
//Function Number: 137
issniperrifle(param_00)
{
return weaponclass(param_00) == "sniper";
}
//Function Number: 138
func_8D9B()
{
return self.weapon != "none" && weaponisboltaction(self.weapon) && weaponclass(self.weapon) == "spread";
}
//Function Number: 139
func_3BBB(param_00,param_01)
{
var_02 = param_00 % level.var_6337;
return level.randominttable[var_02] % param_01;
}
//Function Number: 140
func_3A6D()
{
if(func_87FB())
{
return "secondary";
}
if(func_87FE())
{
return "sidearm";
}
return "primary";
}
//Function Number: 141
func_4917(param_00)
{
return param_00.type == "Cover Left" || param_00.type == "Cover Left 3D";
}
//Function Number: 142
func_491A(param_00)
{
return param_00.type == "Cover Right" || param_00.type == "Cover Right 3D";
}
//Function Number: 143
func_4916(param_00)
{
return param_00.type == "Cover Left 3D" || param_00.type == "Cover Right 3D" || param_00.type == "Cover Up 3D";
}
//Function Number: 144
lookupanim(param_00,param_01)
{
if(isdefined(self.var_DC4))
{
if(isdefined(level.archetypes[self.var_DC4][param_00]) && isdefined(level.archetypes[self.var_DC4][param_00][param_01]))
{
return level.archetypes[self.var_DC4][param_00][param_01];
}
}
return level.archetypes["soldier"][param_00][param_01];
}
//Function Number: 145
func_4F5D(param_00)
{
if(isdefined(self.var_DC4))
{
if(isdefined(level.archetypes[self.var_DC4][param_00]))
{
var_01 = level.archetypes["soldier"][param_00];
foreach(var_04, var_03 in level.archetypes[self.var_DC4][param_00])
{
var_01[var_04] = var_03;
}
return var_01;
}
}
return level.archetypes["soldier"][var_04];
}
//Function Number: 146
func_4F60(param_00,param_01,param_02)
{
if(isdefined(self.var_DC4))
{
if(isdefined(level.archetypes[self.var_DC4][param_00]) && isdefined(level.archetypes[self.var_DC4][param_00][param_01]) && isdefined(level.archetypes[self.var_DC4][param_00][param_01][param_02]))
{
return level.archetypes[self.var_DC4][param_00][param_01][param_02];
}
}
return level.archetypes["soldier"][param_00][param_01][param_02];
}
//Function Number: 147
func_4F5F(param_00,param_01)
{
if(isdefined(self.var_DC4))
{
if(isdefined(level.archetypes[self.var_DC4][param_00]) && isdefined(level.archetypes[self.var_DC4][param_00][param_01]))
{
return level.archetypes[self.var_DC4][param_00][param_01];
}
}
return level.archetypes["dog"][param_00][param_01];
}