mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-09 01:57:51 -05:00
2508 lines
40 KiB
Plaintext
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];
|
|
} |