Files
IL-GSC/MW3/Xbox/SP/animscripts/utility.gsc
InfinityLoader d559c1d414 Added MW3 Scripts
2023-10-27 03:47:01 -04:00

2240 lines
36 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: animscripts\utility.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: Console
* Function Count: 132
* Decompile Time: 2198 ms
* Timestamp: 10/27/2023 2:31:02 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.special = "none";
}
self.missedsightchecks = 0;
self.a.var_8AE = 1;
self.a.aimweight_start = 1;
self.a.aimweight_end = 1;
self.a.aimweight_transframes = 0;
self.a.aimweight_t = 0;
isincombat();
}
//Function Number: 2
updateanimpose()
{
if(isdefined(self.desired_anim_pose) && self.desired_anim_pose != self.a.var_911)
{
if(self.a.var_911 == "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(%prone_aim_5,%body,1,0.1,1);
}
}
self.desired_anim_pose = undefined;
}
//Function Number: 3
initialize(param_00)
{
if(isdefined(self.longdeathstarting))
{
if(param_00 != "pain" && param_00 != "death")
{
self kill(self.origin);
}
if(param_00 != "pain")
{
self.longdeathstarting = undefined;
self notify("kill_long_death");
}
}
if(isdefined(self.a.mayonlydie) && param_00 != "death")
{
self kill(self.origin);
}
if(isdefined(self.a.var_1C2F))
{
var_01 = self.a.var_1C2F;
self.a.var_1C2F = undefined;
[[ var_01 ]](param_00);
}
if(param_00 != "combat" && param_00 != "pain" && param_00 != "death" && usingsidearm())
{
animscripts/combat::switchtolastweapon(%pistol_stand_switch,1);
}
if(param_00 != "combat" && param_00 != "move" && param_00 != "pain")
{
self.a.magicreloadwhenreachenemy = undefined;
}
if(param_00 != "death")
{
self.a.nodeath = 0;
}
if(isdefined(self.isholdinggrenade) && param_00 == "pain" || param_00 == "death" || param_00 == "flashed")
{
animscripts/combat_utility::func_1F2C();
}
self.isholdinggrenade = undefined;
animscripts/squadmanager::func_6AE(param_00);
self.covernode = undefined;
self.suppressed = 0;
self.isreloading = 0;
self.var_8C8 = 0;
self.a.aimidlethread = undefined;
self.a.scriptstarttime = 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);
updateanimpose();
}
//Function Number: 4
getpreferredweapon()
{
if(isdefined(self.wantshotgun) && self.wantshotgun)
{
if(isshotgun(self.primaryweapon))
{
return self.primaryweapon;
}
else if(isshotgun(self.secondaryweapon))
{
return self.secondaryweapon;
}
}
return self.primaryweapon;
}
//Function Number: 5
func_1FFF(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_2000()
{
self endon("death");
self notify("displaceprint");
self endon("displaceprint");
wait 0.05;
}
//Function Number: 7
isincombat()
{
if(self.alertlevelint > 1)
{
return 1;
}
if(isdefined(self.enemy))
{
self.a.var_1C2B = gettime() + level.var_1C4C + randomint(level.var_1C4D);
return 1;
}
return self.a.var_1C2B > gettime();
}
//Function Number: 8
getenemyeyepos()
{
if(isdefined(self.enemy))
{
self.a.var_2001 = self.enemy getshootatpos();
self.a.lastenemytime = gettime();
return self.a.var_2001;
}
if(isdefined(self.a.lastenemytime) && isdefined(self.a.var_2001) && self.a.lastenemytime + 3000 < gettime())
{
return self.a.var_2001;
}
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: 9
getnodeforwardyaw(param_00)
{
if(!isdefined(self.heat))
{
if(param_00.type == "Cover Left")
{
return param_00.angles[1] + 90;
}
else if(param_00.type == "Cover Right")
{
return param_00.angles[1] - 90;
}
}
return param_00.angles[1];
}
//Function Number: 10
func_2002(param_00)
{
if(isdefined(self.node))
{
var_01 = self.node.angles[1] - func_0C05(param_00);
}
else
{
var_01 = self.angles[1] - func_0C05(var_01);
}
var_01 = angleclamp180(var_01);
return var_01;
}
//Function Number: 11
getnodeyawtoenemy()
{
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_0C05(var_00);
}
else
{
var_02 = self.angles[1] - func_0C05(var_02);
}
var_02 = angleclamp180(var_02);
return var_02;
}
//Function Number: 12
getyawtospot(param_00)
{
var_01 = self.angles[1] - func_0C05(param_00);
var_01 = angleclamp180(var_01);
return var_01;
}
//Function Number: 13
getyawtoenemy()
{
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_0C05(var_00);
var_02 = angleclamp180(var_02);
return var_02;
}
//Function Number: 14
func_0C05(param_00)
{
return vectortoyaw(param_00 - self.origin);
}
//Function Number: 15
func_2003(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: 16
func_2004()
{
var_00 = self.angles[1] - func_0C05(self.enemy.origin);
var_00 = angleclamp180(var_00);
if(var_00 < 0)
{
var_00 = -1 * var_00;
}
return var_00;
}
//Function Number: 17
absyawtoenemy2d()
{
var_00 = self.angles[1] - func_2003(self.enemy.origin);
var_00 = angleclamp180(var_00);
if(var_00 < 0)
{
var_00 = -1 * var_00;
}
return var_00;
}
//Function Number: 18
absyawtoorigin(param_00)
{
var_01 = self.angles[1] - func_0C05(param_00);
var_01 = angleclamp180(var_01);
if(var_01 < 0)
{
var_01 = -1 * var_01;
}
return var_01;
}
//Function Number: 19
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: 20
func_2008(param_00,param_01)
{
var_02 = vectortoangles(param_00 - param_01);
return var_02[1];
}
//Function Number: 21
getyawtotag(param_00,param_01)
{
var_02 = self gettagangles(param_00)[1] - func_2008(param_01,self gettagorigin(param_00));
var_02 = angleclamp180(var_02);
return var_02;
}
//Function Number: 22
func_1FD1(param_00)
{
var_01 = self.angles[1] - func_0C05(param_00);
var_01 = angleclamp180(var_01);
return var_01;
}
//Function Number: 23
func_200A(param_00)
{
var_01 = self gettagangles("TAG_EYE")[1] - func_0C05(param_00);
var_01 = angleclamp180(var_01);
return var_01;
}
//Function Number: 24
isstanceallowedwrapper(param_00)
{
if(isdefined(self.covernode))
{
return self.covernode doesnodeallowstance(param_00);
}
return self isstanceallowed(param_00);
}
//Function Number: 25
choosepose(param_00)
{
if(!isdefined(param_00))
{
param_00 = self.a.var_911;
}
switch(param_00)
{
case "stand":
if(isstanceallowedwrapper("stand"))
{
var_01 = "stand";
}
else if(isstanceallowedwrapper("crouch"))
{
var_01 = "crouch";
}
else if(isstanceallowedwrapper("prone"))
{
var_01 = "prone";
}
else
{
var_01 = "stand";
}
break;
case "crouch":
if(isstanceallowedwrapper("crouch"))
{
var_01 = "crouch";
}
else if(isstanceallowedwrapper("stand"))
{
var_01 = "stand";
}
else if(isstanceallowedwrapper("prone"))
{
var_01 = "prone";
}
else
{
var_01 = "crouch";
}
break;
case "prone":
if(isstanceallowedwrapper("prone"))
{
var_01 = "prone";
}
else if(isstanceallowedwrapper("crouch"))
{
var_01 = "crouch";
}
else if(isstanceallowedwrapper("stand"))
{
var_01 = "stand";
}
else
{
var_01 = "prone";
}
break;
default:
var_01 = "stand";
break;
}
return var_01;
}
//Function Number: 26
getclaimednode()
{
var_00 = self.node;
if(isdefined(var_00) && self nearnode(var_00) || isdefined(self.covernode) && var_00 == self.covernode)
{
return var_00;
}
return undefined;
}
//Function Number: 27
getnodetype()
{
var_00 = getclaimednode();
if(isdefined(var_00))
{
return var_00.type;
}
return "none";
}
//Function Number: 28
getnodedirection()
{
var_00 = getclaimednode();
if(isdefined(var_00))
{
return var_00.angles[1];
}
return self.desiredangle;
}
//Function Number: 29
getnodeforward()
{
var_00 = getclaimednode();
if(isdefined(var_00))
{
return anglestoforward(var_00.angles);
}
return anglestoforward(self.angles);
}
//Function Number: 30
getnodeorigin()
{
var_00 = getclaimednode();
if(isdefined(var_00))
{
return var_00.origin;
}
return self.origin;
}
//Function Number: 31
safemod(param_00,param_01)
{
var_02 = int(param_00) % param_01;
var_02 = var_02 + param_01;
return var_02 % param_01;
}
//Function Number: 32
absangleclamp180(param_00)
{
return abs(angleclamp180(param_00));
}
//Function Number: 33
quadrantanimweights(param_00)
{
var_01 = cos(param_00);
var_02 = sin(param_00);
var_03["front"] = 0;
if(isdefined(self.alwaysrunforward))
{
return var_41;
}
if(var_02 > 0)
{
if(var_03 > var_02)
{
}
else if(var_03 < -1 * var_02)
{
}
else
{
}
}
else
{
var_04 = -1 * var_02;
if(var_03 > var_04)
{
var_41["left"] = 1;
}
else if(var_03 < var_02)
{
var_41["right"] = 1;
}
else
{
var_41["back"] = 1;
}
}
return var_41;
}
//Function Number: 34
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: 35
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: 36
playanim(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 func_2010("time is up","time is up",var_01);
self waittill("time is up");
self notify("enddrawstring");
}
}
//Function Number: 37
func_2010(param_00,param_01,param_02)
{
self endon("death");
self endon(param_01);
wait param_02;
self notify(param_00);
}
//Function Number: 38
drawstring(param_00)
{
self endon("killanimscript");
self endon("enddrawstring");
wait 0.05;
}
//Function Number: 39
func_2012(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: 40
func_2013(param_00)
{
self notify("got known enemy2");
self endon("got known enemy2");
self endon("death");
if(!isdefined(self.enemy))
{
return;
}
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: 41
hasenemysightpos()
{
if(isdefined(self.node))
{
return func_0B35() || cansuppressenemyfromexposed();
}
return canseeenemy() || cansuppressenemy();
}
//Function Number: 42
getenemysightpos()
{
return self.goodshootpos;
}
//Function Number: 43
util_ignorecurrentsightpos()
{
if(!hasenemysightpos())
{
return;
}
self.ignoresightpos = getenemysightpos();
self.ignoreorigin = self.origin;
}
//Function Number: 44
func_2017()
{
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(getenemysightpos(),var_01);
if(!var_02)
{
self.ignoresightpos = getenemysightpos();
return 0;
}
return 1;
}
//Function Number: 45
debugtimeout()
{
wait 5;
self notify("timeout");
}
//Function Number: 46
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: 47
debugpos(param_00,param_01)
{
thread debugposinternal(param_00,param_01,2.15);
}
//Function Number: 48
debugpossize(param_00,param_01,param_02)
{
thread debugposinternal(param_00,param_01,param_02);
}
//Function Number: 49
debugburstprint(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: 50
func_201D()
{
self endon("death");
self notify("stop shoot " + self.var_1DEB);
self endon("stop shoot " + self.var_1DEB);
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: 51
func_201E()
{
}
//Function Number: 52
func_201F(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: 53
showdebugline(param_00,param_01,param_02,param_03)
{
thread func_201F(param_00,param_01 + (0,0,-5),param_02,param_03);
}
//Function Number: 54
shootenemywrapper()
{
[[ level.shootenemywrapper_func ]]();
}
//Function Number: 55
func_2021()
{
self.a.lastshoottime = gettime();
maps\_gameskill::func_1E92();
self notify("shooting");
self shoot();
}
//Function Number: 56
shootenemywrapper_shootnotify()
{
level notify("an_enemy_shot",self);
func_2021();
}
//Function Number: 57
shootposwrapper(param_00)
{
var_01 = bulletspread(self getmuzzlepos(),param_00,4);
self.a.lastshoottime = gettime();
self notify("shooting");
self shoot(1,var_01);
}
//Function Number: 58
func_2022()
{
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: 59
func_1C4E(param_00)
{
level.idleanimtransition["stand"]["in"] = %casual_stand_idle_trans_in;
level.idleanimarray["stand"][0][0] = %casual_stand_idle;
level.idleanimarray["stand"][0][1] = %casual_stand_idle_twitch;
level.idleanimarray["stand"][0][2] = %casual_stand_idle_twitchb;
level.idleanimweights["stand"][0][0] = 2;
level.idleanimweights["stand"][0][1] = 1;
level.idleanimweights["stand"][0][2] = 1;
level.idleanimarray["stand"][1][0] = %casual_stand_v2_idle;
level.idleanimarray["stand"][1][1] = %casual_stand_v2_twitch_radio;
level.idleanimarray["stand"][1][2] = %casual_stand_v2_twitch_shift;
level.idleanimarray["stand"][1][3] = %casual_stand_v2_twitch_talk;
level.idleanimweights["stand"][1][0] = 10;
level.idleanimweights["stand"][1][1] = 4;
level.idleanimweights["stand"][1][2] = 7;
level.idleanimweights["stand"][1][3] = 4;
level.idleanimarray["stand_cqb"][0][0] = %cqb_stand_idle;
level.idleanimarray["stand_cqb"][0][1] = %cqb_stand_twitch;
level.idleanimweights["stand_cqb"][0][0] = 2;
level.idleanimweights["stand_cqb"][0][1] = 1;
level.idleanimtransition["crouch"]["in"] = %casual_crouch_idle_in;
level.idleanimarray["crouch"][0][0] = %casual_crouch_idle;
level.idleanimweights["crouch"][0][0] = 6;
}
//Function Number: 60
func_2023()
{
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.movement) && self.a.movement == "stop")
{
if(isdefined(self.isindoor) && self.isindoor == 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_2025()
{
self endon("death");
self notify("stop personal effect");
self endon("stop personal effect");
for(;;)
{
self waittill("spawned",var_00);
if(maps\_utility::func_F77(var_00))
{
continue;
}
var_00 thread func_2023();
}
}
//Function Number: 63
issuppressedwrapper()
{
if(isdefined(self.forcesuppression))
{
return self.forcesuppression;
}
if(self.suppressionmeter <= self.suppressionthreshold)
{
return 0;
}
return self issuppressed();
}
//Function Number: 64
ispartiallysuppressedwrapper()
{
if(self.suppressionmeter <= self.suppressionthreshold * 0.25)
{
return 0;
}
return self issuppressed();
}
//Function Number: 65
getnodeoffset(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);
switch(param_00.type)
{
case "Cover Left":
if(param_00 gethighestnodestance() == "crouch")
{
var_08 = calculatenodeoffset(var_09,var_0A,var_01);
}
else
{
var_08 = calculatenodeoffset(var_09,var_0A,var_02);
}
break;
case "Cover Right":
if(param_00 gethighestnodestance() == "crouch")
{
var_08 = calculatenodeoffset(var_09,var_0A,var_03);
}
else
{
var_08 = calculatenodeoffset(var_09,var_0A,var_04);
}
break;
case "Turret":
case "Cover Stand":
case "Conceal Stand":
var_08 = calculatenodeoffset(var_09,var_0A,var_06);
break;
case "Cover Crouch Window":
case "Cover Crouch":
case "Conceal Crouch":
var_08 = calculatenodeoffset(var_09,var_0A,var_05);
break;
}
param_00.offset = var_08;
return param_00.offset;
}
//Function Number: 66
calculatenodeoffset(param_00,param_01,param_02)
{
return param_00 * param_02[0] + param_01 * param_02[1] + (0,0,param_02[2]);
}
//Function Number: 67
recentlysawenemy()
{
return isdefined(self.enemy) && self seerecently(self.enemy,5);
}
//Function Number: 68
canseeenemy(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_2029();
return 1;
}
return 0;
}
//Function Number: 69
func_0B35()
{
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_2029();
}
else
{
}
return var_01;
}
//Function Number: 70
canseepointfromexposedatnode(param_00,param_01)
{
if(param_01.type == "Cover Left" || param_01.type == "Cover Right")
{
if(!animscripts/corner::canseepointfromexposedatcorner(param_00,param_01))
{
return 0;
}
}
var_02 = getnodeoffset(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);
}
return 0;
}
return 1;
}
//Function Number: 71
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.var_898 + var_03)
{
return 0;
}
}
return 1;
}
//Function Number: 72
func_2029()
{
self.a.shouldresetgiveuponsuppressiontimer = 1;
}
//Function Number: 73
updategiveuponsuppressiontimer()
{
if(!isdefined(self.a.shouldresetgiveuponsuppressiontimer))
{
self.a.shouldresetgiveuponsuppressiontimer = 1;
}
if(self.a.shouldresetgiveuponsuppressiontimer)
{
self.a.giveuponsuppressiontime = gettime() + randomintrange(15000,30000);
self.a.shouldresetgiveuponsuppressiontimer = 0;
}
}
//Function Number: 74
showlines(param_00,param_01,param_02)
{
for(;;)
{
wait 0.05;
wait 0.05;
}
}
//Function Number: 75
func_202E()
{
if(!self canattackenemynode())
{
return 0;
}
var_00 = undefined;
if(isdefined(self.enemy.node))
{
var_01 = getnodeoffset(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: 76
cansuppressenemyfromexposed()
{
if(!hassuppressableenemy())
{
self.goodshootpos = undefined;
return 0;
}
if(!isplayer(self.enemy))
{
return func_202E();
}
if(isdefined(self.node))
{
if(self.node.type == "Cover Left" || self.node.type == "Cover Right")
{
if(!animscripts/corner::canseepointfromexposedatcorner(getenemyeyepos(),self.node))
{
return 0;
}
}
var_00 = getnodeoffset(self.node);
var_01 = self.node.origin + var_00;
}
else
{
var_01 = self getmuzzlepos();
}
if(!checkpitchvisibility(var_01,self.lastenemysightpos))
{
return 0;
}
return func_2034(var_01);
}
//Function Number: 77
cansuppressenemy()
{
if(!hassuppressableenemy())
{
self.goodshootpos = undefined;
return 0;
}
if(!isplayer(self.enemy))
{
return func_202E();
}
var_00 = self getmuzzlepos();
if(!checkpitchvisibility(var_00,self.lastenemysightpos))
{
return 0;
}
return func_2034(var_00);
}
//Function Number: 78
hassuppressableenemy()
{
if(!isdefined(self.enemy))
{
return 0;
}
if(!isdefined(self.lastenemysightpos))
{
return 0;
}
updategiveuponsuppressiontimer();
if(gettime() > self.a.giveuponsuppressiontime)
{
return 0;
}
if(!needrecalculatesuppressspot())
{
return isdefined(self.goodshootpos);
}
return 1;
}
//Function Number: 79
canseeandshootpoint(param_00)
{
if(!sighttracepassed(self getshootatpos(),param_00,0,undefined))
{
return 0;
}
if(self.a.weaponpos["right"] == "none")
{
return 0;
}
var_01 = self getmuzzlepos();
return sighttracepassed(var_01,param_00,0,undefined);
}
//Function Number: 80
needrecalculatesuppressspot()
{
if(isdefined(self.goodshootpos) && !canseeandshootpoint(self.goodshootpos))
{
return 1;
}
return !isdefined(self.lastenemysightposold) || self.lastenemysightposold != self.lastenemysightpos || distancesquared(self.var_2033,self.origin) > 1024;
}
//Function Number: 81
func_2034(param_00)
{
if(!needrecalculatesuppressspot())
{
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.var_2033 = 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: 82
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: 83
print3dtime(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: 84
func_2036(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: 85
func_2037(param_00,param_01)
{
return param_00[0] * param_01[1] - param_00[1] * param_01[0] > 0;
}
//Function Number: 86
getgrenademodel()
{
return getweaponmodel(self.grenadeweapon);
}
//Function Number: 87
sawenemymove(param_00)
{
if(!isdefined(param_00))
{
param_00 = 500;
}
return gettime() - self.personalsighttime < param_00;
}
//Function Number: 88
func_203A()
{
if(!self.grenadeammo)
{
return 0;
}
if(self.script_forcegrenade)
{
return 1;
}
return isplayer(self.enemy);
}
//Function Number: 89
usingboltactionweapon()
{
return weaponisboltaction(self.weapon);
}
//Function Number: 90
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: 91
setfootstepeffect(param_00,param_01)
{
if(!isdefined(level.var_1C53))
{
anim.var_1C53 = [];
}
level.var_1C53[level.var_1C53.size] = param_00;
level._effect["step_" + param_00] = param_01;
}
//Function Number: 92
setfootstepeffectsmall(param_00,param_01)
{
if(!isdefined(level.optionalstepeffectssmall))
{
anim.optionalstepeffectssmall = [];
}
level.optionalstepeffectssmall[level.optionalstepeffectssmall.size] = param_00;
level._effect["step_small_" + param_00] = param_01;
}
//Function Number: 93
func_203F(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;
if(isdefined(param_04))
{
level._notetrackfx[param_00][param_02].sound_prefix = param_04;
}
if(isdefined(param_05))
{
level._notetrackfx[param_00][param_02].sound_suffix = param_05;
}
}
//Function Number: 94
func_2040(param_00,param_01)
{
self endon("death");
level notify("newdebugline");
level endon("newdebugline");
wait 0.05;
}
//Function Number: 95
enterpronewrapper(param_00)
{
thread enterpronewrapperproc(param_00);
}
//Function Number: 96
enterpronewrapperproc(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_911 != "prone" && !isdefined(self.a.onback))
{
self.a.var_911 = "prone";
}
}
//Function Number: 97
exitpronewrapper(param_00)
{
thread exitpronewrapperproc(param_00);
}
//Function Number: 98
exitpronewrapperproc(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_911 == "prone")
{
self.a.var_911 = "crouch";
}
}
//Function Number: 99
canblindfire()
{
if(self.a.atconcealmentnode)
{
return 0;
}
if(!animscripts/weaponlist::usingautomaticweapon())
{
return 0;
}
if(weaponclass(self.weapon) == "mg")
{
return 0;
}
if(isdefined(self.var_2043) && self.var_2043 == 1)
{
return 0;
}
return 1;
}
//Function Number: 100
canhitsuppressspot()
{
if(!hasenemysightpos())
{
return 0;
}
var_00 = self getmuzzlepos();
return sighttracepassed(var_00,getenemysightpos(),0,undefined);
}
//Function Number: 101
moveanim(param_00)
{
return self.a.moveanimset[param_00];
}
//Function Number: 102
randomanimoftwo(param_00,param_01)
{
if(randomint(2))
{
return param_00;
}
return param_01;
}
//Function Number: 103
animarray(param_00)
{
return self.a.array[param_00];
}
//Function Number: 104
animarrayanyexist(param_00)
{
return self.a.array[param_00].size > 0;
}
//Function Number: 105
animarraypickrandom(param_00)
{
var_01 = randomint(self.a.array[param_00].size);
return self.a.array[param_00][var_01];
}
//Function Number: 106
array(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))
{
}
else
{
return var_41;
}
if(isdefined(param_02))
{
}
else
{
return var_41;
}
if(isdefined(param_03))
{
}
else
{
return var_41;
}
if(isdefined(param_04))
{
}
else
{
return var_41;
}
if(isdefined(param_05))
{
}
else
{
return var_41;
}
if(isdefined(param_06))
{
}
else
{
return var_41;
}
if(isdefined(param_07))
{
}
else
{
return var_41;
}
if(isdefined(param_08))
{
}
else
{
return var_41;
}
if(isdefined(param_09))
{
}
else
{
return var_41;
}
if(isdefined(param_0A))
{
}
else
{
return var_41;
}
if(isdefined(param_0B))
{
}
else
{
return var_41;
}
if(isdefined(param_0C))
{
}
else
{
return var_41;
}
if(isdefined(param_0D))
{
}
else
{
return var_41;
}
if(isdefined(var_0E))
{
}
return var_41;
}
//Function Number: 107
func_0D45()
{
return self.primaryweapon;
}
//Function Number: 108
getaisecondaryweapon()
{
return self.secondaryweapon;
}
//Function Number: 109
getaisidearmweapon()
{
return self.sidearm;
}
//Function Number: 110
getaicurrentweapon()
{
return self.weapon;
}
//Function Number: 111
usingprimary()
{
return self.weapon == self.primaryweapon && self.weapon != "none";
}
//Function Number: 112
func_2048()
{
return self.weapon == self.secondaryweapon && self.weapon != "none";
}
//Function Number: 113
usingsidearm()
{
return self.weapon == self.sidearm && self.weapon != "none";
}
//Function Number: 114
getaicurrentweaponslot()
{
if(self.weapon == self.primaryweapon)
{
return "primary";
}
if(self.weapon == self.secondaryweapon)
{
return "secondary";
}
if(self.weapon == self.sidearm)
{
return "sidearm";
}
}
//Function Number: 115
aihasweapon(param_00)
{
if(isdefined(self.weaponinfo[param_00]))
{
return 1;
}
return 0;
}
//Function Number: 116
getanimendpos(param_00)
{
var_01 = getmovedelta(param_00,0,1);
return self localtoworldcoords(var_01);
}
//Function Number: 117
damagelocationisany(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: 118
usingpistol()
{
return weaponclass(self.weapon) == "pistol";
}
//Function Number: 119
usingrocketlauncher()
{
return weaponclass(self.weapon) == "rocketlauncher";
}
//Function Number: 120
usingmg()
{
return weaponclass(self.weapon) == "mg";
}
//Function Number: 121
func_1F02()
{
return weaponclass(self.weapon) == "spread";
}
//Function Number: 122
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: 123
ragdolldeath(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.nodeath = 1;
self startragdoll();
self clearanim(param_00,0.1);
wait 0.05;
physicsexplosionsphere(var_01,600,0,var_03 * 0.1);
self notify("killanimscript");
return;
}
}
}
//Function Number: 124
shouldcqb()
{
return isdefined(self.cqbwalking) && !isdefined(self.grenade);
}
//Function Number: 125
iscqbwalking()
{
return isdefined(self.cqbwalking);
}
//Function Number: 126
iscqbwalkingorfacingenemy()
{
return !self.facemotion || isdefined(self.cqbwalking);
}
//Function Number: 127
randomizeidleset()
{
self.a.idleset = randomint(2);
}
//Function Number: 128
isshotgun(param_00)
{
return weaponclass(param_00) == "spread";
}
//Function Number: 129
issniperrifle(param_00)
{
return weaponclass(param_00) == "sniper";
}
//Function Number: 130
weapon_pump_action_shotgun()
{
return self.weapon != "none" && weaponisboltaction(self.weapon) && weaponclass(self.weapon) == "spread";
}
//Function Number: 131
getrandomintfromseed(param_00,param_01)
{
var_02 = param_00 % level.randominttablesize;
return level.randominttable[var_02] % param_01;
}
//Function Number: 132
getcurrentweaponslotname()
{
if(func_2048())
{
return "secondary";
}
if(usingsidearm())
{
return "sidearm";
}
return "primary";
}