mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
1728 lines
34 KiB
Plaintext
1728 lines
34 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: combat.gsc
|
|
* Game: Call of Duty: Advanced Warfare
|
|
* Platform: PC
|
|
* Function Count: 68
|
|
* Decompile Time: 1124 ms
|
|
* Timestamp: 4/22/2024 2:00:05 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
init_animset_combat()
|
|
{
|
|
var_00 = [];
|
|
var_00["surprise_stop"] = %surprise_stop_v1;
|
|
var_00["trans_to_combat"] = %casual_stand_idle_trans_out;
|
|
var_00["smg_trans_to_combat"] = %smg_casual_stand_idle_trans_out;
|
|
var_00["drop_rpg_stand"] = %rpg_stand_throw;
|
|
var_00["drop_rpg_crouch"] = %rpg_crouch_throw;
|
|
var_00["pistol_to_primary"] = %pistol_stand_switch;
|
|
var_00["primary_to_pistol"] = %pistol_stand_pullout;
|
|
var_00["rpg_death"] = %rpg_stand_death;
|
|
var_00["rpg_death_stagger"] = %rpg_stand_death_stagger;
|
|
level.archetypes["soldier"]["combat"] = var_00;
|
|
}
|
|
|
|
//Function Number: 2
|
|
main()
|
|
{
|
|
if(isdefined(self.no_ai))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.custom_animscript))
|
|
{
|
|
if(isdefined(self.custom_animscript["combat"]))
|
|
{
|
|
[[ self.custom_animscript["combat"] ]]();
|
|
return;
|
|
}
|
|
}
|
|
|
|
self endon("killanimscript");
|
|
[[ self.exception["exposed"] ]]();
|
|
animscripts\utility::initialize("combat");
|
|
self.a.arrivaltype = undefined;
|
|
if(isdefined(self.node) && self.node.type == "Ambush" && self nearnode(self.node))
|
|
{
|
|
self.ambushnode = self.node;
|
|
}
|
|
|
|
if(isdefined(self.team))
|
|
{
|
|
maps\_dds::dds_notify("thrt_movement",self.team == "allies");
|
|
}
|
|
|
|
transitiontocombat();
|
|
dofriendlyfirereaction();
|
|
if(isdefined(self.specialidleanim))
|
|
{
|
|
animscripts\stop::specialidleloop();
|
|
}
|
|
|
|
setup();
|
|
exposedcombatmainloop();
|
|
self notify("stop_deciding_how_to_shoot");
|
|
}
|
|
|
|
//Function Number: 3
|
|
end_script()
|
|
{
|
|
self.ambushnode = undefined;
|
|
combat_clearfacialanim();
|
|
}
|
|
|
|
//Function Number: 4
|
|
dofriendlyfirereaction()
|
|
{
|
|
if(self.team != "allies")
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(self ismovesuppressed() && self.prevscript == "move" && self.a.pose == "stand" && !isdefined(self.disablefriendlyfirereaction))
|
|
{
|
|
if(isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) < squared(128))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(self.a.array))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.a.array["surprise_stop"]))
|
|
{
|
|
var_00 = animscripts\utility::animarray("surprise_stop");
|
|
}
|
|
else if(self.swimmer)
|
|
{
|
|
var_00 = animscripts\swim::getswimanim("surprise_stop");
|
|
if(!isdefined(var_00))
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_00 = animscripts\utility::lookupanim("combat","surprise_stop");
|
|
}
|
|
|
|
resetanimmode();
|
|
self setflaggedanimknoballrestart("react",var_00,%animscript_root,1,0.2,self.animplaybackrate);
|
|
combat_playfacialanim(var_00,"run");
|
|
animscripts\shared::donotetracks("react");
|
|
}
|
|
}
|
|
|
|
//Function Number: 5
|
|
transitiontocombat()
|
|
{
|
|
if(isdefined(self.specialidleanim) || isdefined(self.customidleanimset))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.animarchetype) && self.animarchetype == "s1_soldier")
|
|
{
|
|
if(!isdefined(self.enemy))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(self.a.pose == "crouch")
|
|
{
|
|
if(self.prevscript == "cover_right")
|
|
{
|
|
resetanimmode();
|
|
self orientmode("face current");
|
|
var_00 = animscripts\utility::lookupanim("combat","trans_from_crouch_r");
|
|
self setflaggedanimknoballrestart("transition",var_00,%animscript_root,1,0.2,1);
|
|
wait(getanimlength(var_00));
|
|
}
|
|
else if(self.prevscript == "cover_left")
|
|
{
|
|
resetanimmode();
|
|
self orientmode("face current");
|
|
var_00 = animscripts\utility::lookupanim("combat","trans_from_crouch_l");
|
|
self setflaggedanimknoballrestart("transition",var_00,%animscript_root,1,0.2,1);
|
|
wait(getanimlength(var_00));
|
|
}
|
|
}
|
|
}
|
|
|
|
if(isdefined(self.enemy) && distancesquared(self.origin,self.enemy.origin) < 262144)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(self.prevscript == "stop" && !animscripts\utility::iscqbwalking() && self.a.pose == "stand")
|
|
{
|
|
resetanimmode();
|
|
var_00 = undefined;
|
|
if(animscripts\utility::usingsmg())
|
|
{
|
|
var_00 = animscripts\utility::lookupanim("combat","smg_trans_to_combat");
|
|
}
|
|
else
|
|
{
|
|
var_00 = animscripts\utility::lookupanim("combat","trans_to_combat");
|
|
}
|
|
|
|
self setflaggedanimknoballrestart("transition",var_00,%animscript_root,1,0.2,1.2 * self.animplaybackrate);
|
|
combat_playfacialanim(var_00,"run");
|
|
animscripts\shared::donotetracks("transition");
|
|
}
|
|
}
|
|
|
|
//Function Number: 6
|
|
setup_anim_array()
|
|
{
|
|
if(self.a.pose == "stand")
|
|
{
|
|
animscripts\animset::set_animarray_standing();
|
|
return;
|
|
}
|
|
|
|
if(self.a.pose == "crouch")
|
|
{
|
|
animscripts\animset::set_animarray_crouching();
|
|
return;
|
|
}
|
|
|
|
if(self.a.pose == "prone")
|
|
{
|
|
animscripts\animset::set_animarray_prone();
|
|
return;
|
|
}
|
|
}
|
|
|
|
//Function Number: 7
|
|
setup()
|
|
{
|
|
if(animscripts\utility::usingsidearm() && self isstanceallowed("stand"))
|
|
{
|
|
transitionto("stand");
|
|
}
|
|
|
|
setup_anim_array();
|
|
set_aim_and_turn_limits();
|
|
thread stopshortly();
|
|
self.previouspitchdelta = 0;
|
|
self clearanim(%animscript_root,0.2);
|
|
var_00 = 0.2;
|
|
if(isdefined(self.aimsetupblendtime))
|
|
{
|
|
var_00 = self.aimsetupblendtime;
|
|
}
|
|
|
|
animscripts\combat_utility::setupaim(var_00);
|
|
thread animscripts\combat_utility::aimidlethread();
|
|
self.a.meleestate = "aim";
|
|
delaystandardmelee();
|
|
}
|
|
|
|
//Function Number: 8
|
|
stopshortly()
|
|
{
|
|
self endon("killanimscript");
|
|
wait(0.2);
|
|
self.a.movement = "stop";
|
|
}
|
|
|
|
//Function Number: 9
|
|
set_default_swimmer_aim_limits()
|
|
{
|
|
if(self.swimmer)
|
|
{
|
|
if(animscripts\utility::isspaceai())
|
|
{
|
|
self.upaimlimit = 90;
|
|
self.downaimlimit = -90;
|
|
self.rightaimlimit = 45;
|
|
self.leftaimlimit = -45;
|
|
return;
|
|
}
|
|
|
|
self.upaimlimit = 90;
|
|
self.downaimlimit = -120;
|
|
}
|
|
}
|
|
|
|
//Function Number: 10
|
|
set_default_aim_limits(param_00)
|
|
{
|
|
if(isdefined(param_00))
|
|
{
|
|
self setdefaultaimlimits(param_00);
|
|
}
|
|
else
|
|
{
|
|
self setdefaultaimlimits();
|
|
}
|
|
|
|
set_default_swimmer_aim_limits();
|
|
}
|
|
|
|
//Function Number: 11
|
|
set_aim_and_turn_limits()
|
|
{
|
|
set_default_aim_limits();
|
|
if(self.a.pose == "stand" && !self.swimmer)
|
|
{
|
|
self.upaimlimit = 60;
|
|
self.downaimlimit = -60;
|
|
}
|
|
|
|
self.turnthreshold = self.defaultturnthreshold;
|
|
}
|
|
|
|
//Function Number: 12
|
|
setupexposedcombatloop()
|
|
{
|
|
thread animscripts\track::trackshootentorpos();
|
|
thread reacquirewhennecessary();
|
|
thread animscripts\shoot_behavior::decidewhatandhowtoshoot("normal");
|
|
thread watchshootentvelocity();
|
|
resetgiveuponenemytime();
|
|
if(isdefined(self.a.magicreloadwhenreachenemy))
|
|
{
|
|
animscripts\weaponlist::refillclip();
|
|
self.a.magicreloadwhenreachenemy = undefined;
|
|
}
|
|
|
|
self.a.dontcrouchtime = gettime() + randomintrange(500,1500);
|
|
}
|
|
|
|
//Function Number: 13
|
|
exposedcombatstopusingrpgcheck(param_00)
|
|
{
|
|
if(animscripts\utility::usingrocketlauncher() && animscripts\utility::shoulddroprocketlauncher(param_00))
|
|
{
|
|
if(self.a.pose != "stand" && self.a.pose != "crouch")
|
|
{
|
|
transitionto("crouch");
|
|
}
|
|
|
|
if(self.a.pose == "stand")
|
|
{
|
|
animscripts\shared::throwdownweapon(animscripts\utility::lookupanim("combat","drop_rpg_stand"));
|
|
}
|
|
else
|
|
{
|
|
animscripts\shared::throwdownweapon(animscripts\utility::lookupanim("combat","drop_rpg_crouch"));
|
|
}
|
|
|
|
self clearanim(%animscript_root,0.2);
|
|
animscripts\combat_utility::endfireandanimidlethread();
|
|
setup_anim_array();
|
|
animscripts\combat_utility::startfireandaimidlethread();
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 14
|
|
exposedcombatcheckstance(param_00)
|
|
{
|
|
if(self.a.pose != "stand" && self isstanceallowed("stand"))
|
|
{
|
|
if(param_00 < 81225)
|
|
{
|
|
transitionto("stand");
|
|
return 1;
|
|
}
|
|
|
|
if(standifmakesenemyvisible())
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
if(param_00 > 262144 && self.a.pose != "crouch" && self isstanceallowed("crouch") && !self.swimmer && !animscripts\utility::usingsidearm() && !isdefined(self.heat) && gettime() >= self.a.dontcrouchtime && lengthsquared(self.shootentvelocity) < 10000)
|
|
{
|
|
if(!isdefined(self.shootpos) || sighttracepassed(self.origin + (0,0,36),self.shootpos,0,undefined))
|
|
{
|
|
transitionto("crouch");
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 15
|
|
exposedcombatcheckreloadorusepistol(param_00)
|
|
{
|
|
if(!animscripts\utility::usingsidearm())
|
|
{
|
|
if(isdefined(self.forcesidearm) && self.a.pose == "stand")
|
|
{
|
|
if(tryusingsidearm())
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
if(animscripts\combat_utility::issniper() && param_00 < 167772.2)
|
|
{
|
|
if(tryusingsidearm())
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(animscripts\combat_utility::needtoreload(0))
|
|
{
|
|
if(!animscripts\utility::usingsidearm() && common_scripts\utility::cointoss() && !animscripts\utility::usingrocketlauncher() && animscripts\utility::usingprimary() && param_00 < 167772.2 && self isstanceallowed("stand"))
|
|
{
|
|
if(self.a.pose != "stand")
|
|
{
|
|
transitionto("stand");
|
|
return 1;
|
|
}
|
|
|
|
if(tryusingsidearm())
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
if(exposedreload(0))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 16
|
|
exposedcombatcheckputawaypistol(param_00)
|
|
{
|
|
if(animscripts\utility::usingsidearm() && self.a.pose == "stand" && !isdefined(self.forcesidearm))
|
|
{
|
|
if(param_00 > 262144 || self.combatmode == "ambush_nodes_only" && !isdefined(self.enemy) || !self cansee(self.enemy))
|
|
{
|
|
switchtolastweapon(animscripts\utility::lookupanim("combat","pistol_to_primary"));
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 17
|
|
exposedcombatpositionadjust()
|
|
{
|
|
if(isdefined(self.heat) && self nearclaimnodeandangle())
|
|
{
|
|
self safeteleport(self.nodeoffsetpos,self.node.angles);
|
|
}
|
|
}
|
|
|
|
//Function Number: 18
|
|
exposedcombatneedtoturn()
|
|
{
|
|
if(needtoturn())
|
|
{
|
|
var_00 = 0.25;
|
|
if(isdefined(self.shootent) && !issentient(self.shootent))
|
|
{
|
|
var_00 = 1.5;
|
|
}
|
|
|
|
var_01 = animscripts\shared::getpredictedaimyawtoshootentorpos(var_00);
|
|
if(turntofacerelativeyaw(var_01))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 19
|
|
exposedcombatmainloop()
|
|
{
|
|
self endon("killanimscript");
|
|
setupexposedcombatloop();
|
|
resetanimmode(0);
|
|
if(animscripts\utility::isspaceai())
|
|
{
|
|
var_00 = (0,self.angles[1],0);
|
|
self orientmode("face angle 3d",var_00);
|
|
}
|
|
else
|
|
{
|
|
self orientmode("face angle",self.angles[1]);
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
if(animscripts\utility::usingrocketlauncher())
|
|
{
|
|
self.deathfunction = undefined;
|
|
}
|
|
|
|
animscripts\utility::updateisincombattimer();
|
|
if(waitforstancechange())
|
|
{
|
|
continue;
|
|
}
|
|
|
|
trymelee();
|
|
exposedcombatpositionadjust();
|
|
if(!isdefined(self.shootpos))
|
|
{
|
|
cantseeenemybehavior();
|
|
continue;
|
|
}
|
|
|
|
resetgiveuponenemytime();
|
|
var_01 = lengthsquared(self.origin - self.shootpos);
|
|
if(exposedcombatstopusingrpgcheck(var_01))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(exposedcombatneedtoturn())
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(considerthrowgrenade())
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(exposedcombatcheckreloadorusepistol(var_01))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(animscripts\utility::usingrocketlauncher() && self.a.pose != "crouch" && randomfloat(1) > 0.65)
|
|
{
|
|
self.deathfunction = ::rpgdeath;
|
|
}
|
|
|
|
exposedcombatcheckputawaypistol(var_01);
|
|
if(exposedcombatcheckstance(var_01))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(animscripts\combat_utility::aimedatshootentorpos())
|
|
{
|
|
shootuntilneedtoturn();
|
|
animscripts\combat_utility::hidefireshowaimidle();
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(self.team))
|
|
{
|
|
maps\_dds::dds_notify("thrt_acquired",self.team == "allies");
|
|
}
|
|
|
|
exposedwait();
|
|
}
|
|
}
|
|
|
|
//Function Number: 20
|
|
exposedwait()
|
|
{
|
|
if(!isdefined(self.enemy) || !self cansee(self.enemy))
|
|
{
|
|
self endon("enemy");
|
|
self endon("shoot_behavior_change");
|
|
wait(0.2 + randomfloat(0.1));
|
|
self waittill("do_slow_things");
|
|
return;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
|
|
//Function Number: 21
|
|
standifmakesenemyvisible()
|
|
{
|
|
if(isdefined(self.enemy) && !self cansee(self.enemy) || !self canshootenemy() && sighttracepassed(self.origin + (0,0,64),self.enemy getshootatpos(),0,undefined))
|
|
{
|
|
self.a.dontcrouchtime = gettime() + 3000;
|
|
transitionto("stand");
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 22
|
|
needtoturn()
|
|
{
|
|
var_00 = self.shootpos;
|
|
if(!isdefined(var_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_01 = self.angles[1] - vectortoyaw(var_00 - self.origin);
|
|
var_02 = distancesquared(self.origin,var_00);
|
|
if(var_02 < 65536)
|
|
{
|
|
var_03 = sqrt(var_02);
|
|
if(var_03 > 3)
|
|
{
|
|
var_01 = var_01 + asin(-3 / var_03);
|
|
}
|
|
}
|
|
|
|
return animscripts\utility::absangleclamp180(var_01) > self.turnthreshold;
|
|
}
|
|
|
|
//Function Number: 23
|
|
waitforstancechange()
|
|
{
|
|
var_00 = self.a.pose;
|
|
if(isdefined(self.a.onback))
|
|
{
|
|
wait(0.1);
|
|
return 1;
|
|
}
|
|
|
|
if(var_00 == "stand" && isdefined(self.heat))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!self isstanceallowed(var_00))
|
|
{
|
|
var_01 = "crouch";
|
|
if(var_00 == "crouch")
|
|
{
|
|
var_01 = "stand";
|
|
}
|
|
|
|
var_02 = "prone";
|
|
if(var_00 == "prone")
|
|
{
|
|
var_01 = "stand";
|
|
var_02 = "crouch";
|
|
}
|
|
|
|
if(self isstanceallowed(var_01))
|
|
{
|
|
if(var_00 == "stand" && animscripts\utility::usingsidearm())
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
transitionto(var_01);
|
|
return 1;
|
|
}
|
|
else if(self isstanceallowed(var_02))
|
|
{
|
|
if(var_00 == "stand" && animscripts\utility::usingsidearm())
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
transitionto(var_02);
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 24
|
|
cantseeenemybehavior()
|
|
{
|
|
if(self.a.pose != "stand" && self isstanceallowed("stand") && standifmakesenemyvisible())
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
var_00 = gettime();
|
|
self.a.dontcrouchtime = var_00 + 1500;
|
|
if(isdefined(self.group) && isdefined(self.group.forward))
|
|
{
|
|
var_01 = angleclamp180(self.angles[1] - vectortoyaw(self.group.forward));
|
|
if(turntofacerelativeyaw(var_01))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
if(isdefined(self.node) && isdefined(level.iscombatscriptnode[self.node.type]))
|
|
{
|
|
var_01 = angleclamp180(self.angles[1] - self.node.angles[1]);
|
|
if(turntofacerelativeyaw(var_01))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
else if((isdefined(self.enemy) && self seerecently(self.enemy,2)) || var_00 > self.a.scriptstarttime + 1200)
|
|
{
|
|
var_01 = undefined;
|
|
var_02 = self getanglestolikelyenemypath();
|
|
if(isdefined(var_02))
|
|
{
|
|
var_01 = angleclamp180(self.angles[1] - var_02[1]);
|
|
}
|
|
else if(isdefined(self.node))
|
|
{
|
|
var_01 = angleclamp180(self.angles[1] - self.node.angles[1]);
|
|
}
|
|
else if(isdefined(self.enemy))
|
|
{
|
|
var_02 = vectortoangles(self lastknownpos(self.enemy) - self.origin);
|
|
var_01 = angleclamp180(self.angles[1] - var_02[1]);
|
|
}
|
|
|
|
if(isdefined(var_01) && turntofacerelativeyaw(var_01))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
else if(isdefined(self.heat) && self nearclaimnode())
|
|
{
|
|
var_01 = angleclamp180(self.angles[1] - self.node.angles[1]);
|
|
if(turntofacerelativeyaw(var_01))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
if(considerthrowgrenade())
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
var_03 = self.a.nextgiveuponenemytime < var_00;
|
|
var_04 = 0;
|
|
if(var_03)
|
|
{
|
|
var_04 = 0.99999;
|
|
}
|
|
|
|
if(exposedreload(var_04))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(var_03 && animscripts\utility::usingsidearm())
|
|
{
|
|
if(switchtolastweapon(animscripts\utility::lookupanim("combat","pistol_to_primary")))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
cantseeenemywait();
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 25
|
|
cantseeenemywait()
|
|
{
|
|
self endon("shoot_behavior_change");
|
|
wait(0.4 + randomfloat(0.4));
|
|
self waittill("do_slow_things");
|
|
}
|
|
|
|
//Function Number: 26
|
|
resetgiveuponenemytime()
|
|
{
|
|
self.a.nextgiveuponenemytime = gettime() + randomintrange(2000,4000);
|
|
}
|
|
|
|
//Function Number: 27
|
|
turntofacerelativeyaw(param_00)
|
|
{
|
|
if(param_00 < 0 - self.turnthreshold)
|
|
{
|
|
if(self.a.pose == "prone")
|
|
{
|
|
animscripts\cover_prone::proneto("crouch");
|
|
animscripts\animset::set_animarray_crouching();
|
|
}
|
|
|
|
doturn("left",0 - param_00);
|
|
maps\_gameskill::didsomethingotherthanshooting();
|
|
return 1;
|
|
}
|
|
|
|
if(param_00 > self.turnthreshold)
|
|
{
|
|
if(self.a.pose == "prone")
|
|
{
|
|
animscripts\cover_prone::proneto("crouch");
|
|
animscripts\animset::set_animarray_crouching();
|
|
}
|
|
|
|
doturn("right",param_00);
|
|
maps\_gameskill::didsomethingotherthanshooting();
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 28
|
|
watchshootentvelocity()
|
|
{
|
|
self endon("killanimscript");
|
|
self.shootentvelocity = (0,0,0);
|
|
var_00 = undefined;
|
|
var_01 = self.origin;
|
|
var_02 = 0.15;
|
|
for(;;)
|
|
{
|
|
if(isdefined(self.shootent) && isdefined(var_00) && self.shootent == var_00)
|
|
{
|
|
var_03 = self.shootent.origin;
|
|
self.shootentvelocity = var_03 - var_01 * 1 / var_02;
|
|
var_01 = var_03;
|
|
}
|
|
else
|
|
{
|
|
if(isdefined(self.shootent))
|
|
{
|
|
var_01 = self.shootent.origin;
|
|
}
|
|
else
|
|
{
|
|
var_01 = self.origin;
|
|
}
|
|
|
|
var_00 = self.shootent;
|
|
self.shootentvelocity = (0,0,0);
|
|
}
|
|
|
|
wait(var_02);
|
|
}
|
|
}
|
|
|
|
//Function Number: 29
|
|
shouldswapshotgun()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 30
|
|
donotetrackswithendon(param_00)
|
|
{
|
|
self endon("killanimscript");
|
|
animscripts\shared::donotetracks(param_00);
|
|
}
|
|
|
|
//Function Number: 31
|
|
faceenemyimmediately()
|
|
{
|
|
self endon("killanimscript");
|
|
self notify("facing_enemy_immediately");
|
|
self endon("facing_enemy_immediately");
|
|
var_00 = 5;
|
|
for(;;)
|
|
{
|
|
var_01 = 0 - animscripts\utility::getyawtoenemy();
|
|
if(abs(var_01) < 2)
|
|
{
|
|
break;
|
|
}
|
|
|
|
if(abs(var_01) > var_00)
|
|
{
|
|
var_01 = var_00 * common_scripts\utility::sign(var_01);
|
|
}
|
|
|
|
self orientmode("face angle",self.angles[1] + var_01);
|
|
wait(0.05);
|
|
}
|
|
|
|
self orientmode("face current");
|
|
self notify("can_stop_turning");
|
|
}
|
|
|
|
//Function Number: 32
|
|
isdeltaallowed(param_00)
|
|
{
|
|
var_01 = getmovedelta(param_00,0,1);
|
|
var_02 = self localtoworldcoords(var_01);
|
|
return self isingoal(var_02) && self maymovetopoint(var_02);
|
|
}
|
|
|
|
//Function Number: 33
|
|
isanimdeltaingoal(param_00)
|
|
{
|
|
var_01 = getmovedelta(param_00,0,1);
|
|
var_02 = self localtoworldcoords(var_01);
|
|
return self isingoal(var_02);
|
|
}
|
|
|
|
//Function Number: 34
|
|
doturn(param_00,param_01)
|
|
{
|
|
var_02 = isdefined(self.shootpos);
|
|
var_03 = 1;
|
|
var_04 = 0.2;
|
|
var_05 = isdefined(self.enemy) && !isdefined(self.turntomatchnode) && self seerecently(self.enemy,2) && distancesquared(self.enemy.origin,self.origin) < 262144;
|
|
if(self.a.scriptstarttime + 500 > gettime())
|
|
{
|
|
var_04 = 0.25;
|
|
if(var_05)
|
|
{
|
|
thread faceenemyimmediately();
|
|
}
|
|
}
|
|
else if(var_05)
|
|
{
|
|
var_06 = 1 - distance(self.enemy.origin,self.origin) / 512;
|
|
var_03 = 1 + var_06 * 1;
|
|
if(var_03 > 2)
|
|
{
|
|
var_04 = 0.05;
|
|
}
|
|
else if(var_03 > 1.3)
|
|
{
|
|
var_04 = 0.1;
|
|
}
|
|
else
|
|
{
|
|
var_04 = 0.15;
|
|
}
|
|
}
|
|
|
|
var_07 = 0;
|
|
if(param_01 > 157.5)
|
|
{
|
|
var_07 = 180;
|
|
}
|
|
else if(param_01 > 112.5)
|
|
{
|
|
var_07 = 135;
|
|
}
|
|
else if(param_01 > 67.5)
|
|
{
|
|
var_07 = 90;
|
|
}
|
|
else
|
|
{
|
|
var_07 = 45;
|
|
}
|
|
|
|
var_08 = "turn_" + param_00 + "_" + var_07;
|
|
var_09 = animscripts\utility::animarray(var_08);
|
|
if(isdefined(self.turntomatchnode))
|
|
{
|
|
self animmode("angle deltas",0);
|
|
}
|
|
else if(isdefined(self.node) && isdefined(level.iscombatpathnode[self.node.type]) && distancesquared(self.origin,self.node.origin) < 256)
|
|
{
|
|
self animmode("angle deltas",0);
|
|
}
|
|
else if(isanimdeltaingoal(var_09))
|
|
{
|
|
resetanimmode();
|
|
}
|
|
else
|
|
{
|
|
self animmode("angle deltas",0);
|
|
}
|
|
|
|
self setanimknoball(%exposed_aiming,%body,1,var_04);
|
|
if(!isdefined(self.turntomatchnode))
|
|
{
|
|
turningaimingon(var_04);
|
|
}
|
|
|
|
self setanimlimited(%turn,1,var_04);
|
|
if(isdefined(self.heat))
|
|
{
|
|
var_03 = min(1,var_03);
|
|
}
|
|
else if(isdefined(self.turntomatchnode))
|
|
{
|
|
var_03 = max(1.5,var_03);
|
|
}
|
|
|
|
self setflaggedanimknoblimitedrestart("turn",var_09,1,var_04,var_03);
|
|
combat_playfacialanim(var_09,"aim");
|
|
self notify("turning");
|
|
if(var_02 && !isdefined(self.turntomatchnode) && !isdefined(self.heat))
|
|
{
|
|
thread shootwhileturning();
|
|
}
|
|
|
|
doturnnotetracks();
|
|
self setanimlimited(%turn,0,0.2);
|
|
if(!isdefined(self.turntomatchnode))
|
|
{
|
|
turningaimingoff(0.2);
|
|
}
|
|
|
|
if(!isdefined(self.turntomatchnode))
|
|
{
|
|
self clearanim(%turn,0.2);
|
|
self setanimknob(%exposed_aiming,1,0.2,1);
|
|
}
|
|
else
|
|
{
|
|
self clearanim(%exposed_modern,0.3);
|
|
}
|
|
|
|
if(isdefined(self.turnlastresort))
|
|
{
|
|
self.turnlastresort = undefined;
|
|
thread faceenemyimmediately();
|
|
}
|
|
|
|
resetanimmode(0);
|
|
self notify("done turning");
|
|
}
|
|
|
|
//Function Number: 35
|
|
doturnnotetracks()
|
|
{
|
|
self endon("can_stop_turning");
|
|
animscripts\shared::donotetracks("turn");
|
|
}
|
|
|
|
//Function Number: 36
|
|
makesureturnworks()
|
|
{
|
|
self endon("killanimscript");
|
|
self endon("done turning");
|
|
var_00 = self.angles[1];
|
|
wait(0.3);
|
|
if(self.angles[1] == var_00)
|
|
{
|
|
self notify("turning_isnt_working");
|
|
self.turnlastresort = 1;
|
|
}
|
|
}
|
|
|
|
//Function Number: 37
|
|
turningaimingon(param_00)
|
|
{
|
|
self setanimlimited(animscripts\utility::animarray("straight_level"),0,param_00);
|
|
self setanim(%add_idle,0,param_00);
|
|
if(!animscripts\utility::weapon_pump_action_shotgun())
|
|
{
|
|
self clearanim(%add_fire,0.2);
|
|
}
|
|
}
|
|
|
|
//Function Number: 38
|
|
turningaimingoff(param_00)
|
|
{
|
|
self setanimlimited(animscripts\utility::animarray("straight_level"),1,param_00);
|
|
self setanim(%add_idle,1,param_00);
|
|
}
|
|
|
|
//Function Number: 39
|
|
shootwhileturning()
|
|
{
|
|
self endon("killanimscript");
|
|
self endon("done turning");
|
|
if(animscripts\utility::usingrocketlauncher())
|
|
{
|
|
return;
|
|
}
|
|
|
|
animscripts\combat_utility::shootuntilshootbehaviorchange();
|
|
self clearanim(%add_fire,0.2);
|
|
}
|
|
|
|
//Function Number: 40
|
|
shootuntilneedtoturn()
|
|
{
|
|
thread watchforneedtoturnortimeout();
|
|
self endon("need_to_turn");
|
|
thread keeptryingtomelee();
|
|
animscripts\combat_utility::shootuntilshootbehaviorchange();
|
|
self notify("stop_watching_for_need_to_turn");
|
|
self notify("stop_trying_to_melee");
|
|
}
|
|
|
|
//Function Number: 41
|
|
watchforneedtoturnortimeout()
|
|
{
|
|
self endon("killanimscript");
|
|
self endon("stop_watching_for_need_to_turn");
|
|
var_00 = gettime() + 4000 + randomint(2000);
|
|
for(;;)
|
|
{
|
|
if(gettime() > var_00 || needtoturn())
|
|
{
|
|
self notify("need_to_turn");
|
|
break;
|
|
}
|
|
|
|
wait(0.1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 42
|
|
considerthrowgrenade()
|
|
{
|
|
if(!animscripts\combat_utility::mygrenadecooldownelapsed())
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(self.grenadeammo <= 0)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(isdefined(level.throwgrenadeatplayerasap) && isalive(level.player))
|
|
{
|
|
if(tryexposedthrowgrenade(level.player,200))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
if(isdefined(self.enemy) && tryexposedthrowgrenade(self.enemy,self.minexposedgrenadedist))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
self.a.nextgrenadetrytime = gettime() + 500;
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 43
|
|
tryexposedthrowgrenade(param_00,param_01)
|
|
{
|
|
var_02 = 0;
|
|
if(isdefined(self.dontevershoot) || isdefined(param_00.dontattackme))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(self.a.array["exposed_grenade"]))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_03 = param_00.origin;
|
|
if(!self cansee(param_00))
|
|
{
|
|
if(isdefined(self.enemy) && param_00 == self.enemy && isdefined(self.shootpos))
|
|
{
|
|
var_03 = self.shootpos;
|
|
}
|
|
}
|
|
|
|
if(!self cansee(param_00))
|
|
{
|
|
param_01 = 100;
|
|
}
|
|
|
|
if(distancesquared(self.origin,var_03) > param_01 * param_01 && self.a.pose == self.a.grenadethrowpose)
|
|
{
|
|
animscripts\combat_utility::setactivegrenadetimer(param_00);
|
|
if(!animscripts\combat_utility::grenadecooldownelapsed(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_04 = animscripts\utility::getyawtospot(var_03);
|
|
if(abs(var_04) < 60)
|
|
{
|
|
var_05 = [];
|
|
foreach(var_07 in self.a.array["exposed_grenade"])
|
|
{
|
|
if(isdeltaallowed(var_07))
|
|
{
|
|
var_05[var_05.size] = var_07;
|
|
}
|
|
}
|
|
|
|
if(var_05.size > 0)
|
|
{
|
|
self setanim(%exposed_aiming,0,0.1);
|
|
combat_clearfacialanim();
|
|
self animmode("zonly_physics");
|
|
animscripts\track::setanimaimweight(0,0);
|
|
var_02 = animscripts\combat_utility::trygrenade(param_00,var_05[randomint(var_05.size)]);
|
|
self setanim(%exposed_aiming,1,0.1);
|
|
combat_playfacialanim(undefined,"aim");
|
|
if(var_02)
|
|
{
|
|
animscripts\track::setanimaimweight(1,0.5);
|
|
}
|
|
else
|
|
{
|
|
animscripts\track::setanimaimweight(1,0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(var_02)
|
|
{
|
|
maps\_gameskill::didsomethingotherthanshooting();
|
|
}
|
|
|
|
return var_02;
|
|
}
|
|
|
|
//Function Number: 44
|
|
transitionto(param_00)
|
|
{
|
|
if(param_00 == self.a.pose)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_01 = self.a.pose + "_2_" + param_00;
|
|
if(!isdefined(self.a.array))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_02 = self.a.array[var_01];
|
|
if(!isdefined(var_02))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self clearanim(%animscript_root,0.3);
|
|
animscripts\combat_utility::endfireandanimidlethread();
|
|
if(param_00 == "stand")
|
|
{
|
|
var_03 = 2;
|
|
}
|
|
else
|
|
{
|
|
var_03 = 1.5;
|
|
}
|
|
|
|
if(!animhasnotetrack(var_02,"anim_pose = \" + param_00 + "\"))
|
|
{
|
|
}
|
|
|
|
self setflaggedanimknoballrestart("trans",var_02,%body,1,0.2,var_03);
|
|
combat_playfacialanim(var_02,"run");
|
|
var_04 = getanimlength(var_02) / var_03;
|
|
var_05 = var_04 - 0.3;
|
|
if(var_05 < 0.2)
|
|
{
|
|
var_05 = 0.2;
|
|
}
|
|
|
|
animscripts\notetracks::donotetracksfortime(var_05,"trans");
|
|
self.a.pose = param_00;
|
|
setup_anim_array();
|
|
animscripts\combat_utility::startfireandaimidlethread();
|
|
maps\_gameskill::didsomethingotherthanshooting();
|
|
}
|
|
|
|
//Function Number: 45
|
|
keeptryingtomelee()
|
|
{
|
|
self endon("killanimscript");
|
|
self endon("stop_trying_to_melee");
|
|
self endon("done turning");
|
|
self endon("need_to_turn");
|
|
self endon("shoot_behavior_change");
|
|
for(;;)
|
|
{
|
|
wait(0.2 + randomfloat(0.3));
|
|
if(isdefined(self.enemy))
|
|
{
|
|
if(isplayer(self.enemy))
|
|
{
|
|
var_00 = 40000;
|
|
}
|
|
else
|
|
{
|
|
var_00 = 10000;
|
|
}
|
|
|
|
if(distancesquared(self.enemy.origin,self.origin) < var_00)
|
|
{
|
|
trymelee();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 46
|
|
trymelee()
|
|
{
|
|
animscripts\melee::melee_tryexecuting();
|
|
}
|
|
|
|
//Function Number: 47
|
|
delaystandardmelee()
|
|
{
|
|
if(isdefined(self.nomeleechargedelay))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isplayer(self.enemy))
|
|
{
|
|
return;
|
|
}
|
|
|
|
animscripts\melee::melee_standard_delaystandardcharge(self.enemy);
|
|
}
|
|
|
|
//Function Number: 48
|
|
exposedreload(param_00)
|
|
{
|
|
if(animscripts\combat_utility::needtoreload(param_00))
|
|
{
|
|
self.a.exposedreloading = 1;
|
|
animscripts\combat_utility::endfireandanimidlethread();
|
|
var_01 = undefined;
|
|
if(isdefined(self.specialreloadanimfunc))
|
|
{
|
|
var_01 = self [[ self.specialreloadanimfunc ]]();
|
|
self.keepclaimednode = 1;
|
|
}
|
|
else
|
|
{
|
|
var_01 = animscripts\utility::animarraypickrandom("reload");
|
|
if(self.a.pose == "stand" && animscripts\utility::animarrayanyexist("reload_crouchhide") && common_scripts\utility::cointoss())
|
|
{
|
|
var_01 = animscripts\utility::animarraypickrandom("reload_crouchhide");
|
|
}
|
|
}
|
|
|
|
thread keeptryingtomelee();
|
|
self.finishedreload = 0;
|
|
if(weaponclass(self.weapon) == "pistol")
|
|
{
|
|
self orientmode("face default");
|
|
}
|
|
|
|
doreloadanim(var_01,param_00 > 0.05);
|
|
self notify("abort_reload");
|
|
self orientmode("face current");
|
|
if(self.finishedreload)
|
|
{
|
|
animscripts\weaponlist::refillclip();
|
|
}
|
|
|
|
self clearanim(%reload,0.2);
|
|
self.keepclaimednode = 0;
|
|
self notify("stop_trying_to_melee");
|
|
self.a.exposedreloading = 0;
|
|
self.finishedreload = undefined;
|
|
maps\_gameskill::didsomethingotherthanshooting();
|
|
animscripts\combat_utility::startfireandaimidlethread();
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 49
|
|
doreloadanim(param_00,param_01)
|
|
{
|
|
self endon("abort_reload");
|
|
if(param_01)
|
|
{
|
|
thread abortreloadwhencanshoot();
|
|
}
|
|
|
|
var_02 = 1;
|
|
if(!animscripts\utility::usingsidearm() && !animscripts\utility::isshotgun(self.weapon) && isdefined(self.enemy) && self cansee(self.enemy) && distancesquared(self.enemy.origin,self.origin) < 1048576)
|
|
{
|
|
var_02 = 1.2;
|
|
}
|
|
|
|
var_03 = "reload_" + animscripts\combat_utility::getuniqueflagnameindex();
|
|
self clearanim(%animscript_root,0.2);
|
|
self setflaggedanimrestart(var_03,param_00,1,0.2,var_02);
|
|
combat_playfacialanim(param_00,"run");
|
|
thread notifyonstartaim("abort_reload",var_03);
|
|
self endon("start_aim");
|
|
animscripts\shared::donotetracks(var_03);
|
|
self.finishedreload = 1;
|
|
}
|
|
|
|
//Function Number: 50
|
|
abortreloadwhencanshoot()
|
|
{
|
|
self endon("abort_reload");
|
|
self endon("killanimscript");
|
|
for(;;)
|
|
{
|
|
if(isdefined(self.shootent) && self cansee(self.shootent))
|
|
{
|
|
break;
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
|
|
self notify("abort_reload");
|
|
}
|
|
|
|
//Function Number: 51
|
|
notifyonstartaim(param_00,param_01)
|
|
{
|
|
self endon(param_00);
|
|
self waittillmatch("start_aim",param_01);
|
|
self.finishedreload = 1;
|
|
self notify("start_aim");
|
|
}
|
|
|
|
//Function Number: 52
|
|
finishnotetracks(param_00)
|
|
{
|
|
self endon("killanimscript");
|
|
animscripts\shared::donotetracks(param_00);
|
|
}
|
|
|
|
//Function Number: 53
|
|
drop_turret()
|
|
{
|
|
maps\_mgturret::dropturret();
|
|
animscripts\weaponlist::refillclip();
|
|
self.a.needstorechamber = 0;
|
|
self notify("dropped_gun");
|
|
maps\_mgturret::restoredefaults();
|
|
}
|
|
|
|
//Function Number: 54
|
|
exception_exposed_mg42_portable()
|
|
{
|
|
drop_turret();
|
|
}
|
|
|
|
//Function Number: 55
|
|
tryusingsidearm()
|
|
{
|
|
if(isdefined(self.secondaryweapon) && animscripts\utility::isshotgun(self.secondaryweapon))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(isdefined(self.no_pistol_switch))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
self.a.pose = "stand";
|
|
switchtosidearm(animscripts\utility::lookupanim("combat","primary_to_pistol"));
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 56
|
|
switchtosidearm(param_00)
|
|
{
|
|
self endon("killanimscript");
|
|
thread animscripts\combat_utility::putgunbackinhandonkillanimscript();
|
|
animscripts\combat_utility::endfireandanimidlethread();
|
|
self.swapanim = param_00;
|
|
self setflaggedanimknoballrestart("weapon swap",param_00,%body,1,0.2,animscripts\combat_utility::fasteranimspeed());
|
|
combat_playfacialanim(param_00,"run");
|
|
donotetrackspostcallbackwithendon("weapon swap",::handlepickup,"end_weapon_swap");
|
|
self clearanim(self.swapanim,0.2);
|
|
self notify("facing_enemy_immediately");
|
|
self notify("switched_to_sidearm");
|
|
maps\_gameskill::didsomethingotherthanshooting();
|
|
}
|
|
|
|
//Function Number: 57
|
|
donotetrackspostcallbackwithendon(param_00,param_01,param_02)
|
|
{
|
|
self endon(param_02);
|
|
animscripts\notetracks::donotetrackspostcallback(param_00,param_01);
|
|
}
|
|
|
|
//Function Number: 58
|
|
faceenemydelay(param_00)
|
|
{
|
|
self endon("killanimscript");
|
|
wait(param_00);
|
|
faceenemyimmediately();
|
|
}
|
|
|
|
//Function Number: 59
|
|
handlepickup(param_00)
|
|
{
|
|
if(param_00 == "pistol_pickup")
|
|
{
|
|
self clearanim(animscripts\utility::animarray("straight_level"),0);
|
|
animscripts\animset::set_animarray_standing();
|
|
thread faceenemydelay(0.25);
|
|
return;
|
|
}
|
|
|
|
if(param_00 == "start_aim")
|
|
{
|
|
animscripts\combat_utility::startfireandaimidlethread();
|
|
if(needtoturn())
|
|
{
|
|
self notify("end_weapon_swap");
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 60
|
|
switchtolastweapon(param_00,param_01)
|
|
{
|
|
self endon("killanimscript");
|
|
if(animscripts\utility::isshotgun(self.primaryweapon) && isdefined(self.wantshotgun) && !self.wantshotgun && self.lastweapon == animscripts\utility::getaiprimaryweapon())
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
animscripts\combat_utility::endfireandanimidlethread();
|
|
self.swapanim = param_00;
|
|
self setflaggedanimknoballrestart("weapon swap",param_00,%body,1,0.1,1);
|
|
combat_playfacialanim(param_00,"run");
|
|
if(isdefined(param_01))
|
|
{
|
|
donotetrackspostcallbackwithendon("weapon swap",::handlecleanupputaway,"end_weapon_swap");
|
|
}
|
|
else
|
|
{
|
|
donotetrackspostcallbackwithendon("weapon swap",::handleputaway,"end_weapon_swap");
|
|
}
|
|
|
|
self clearanim(self.swapanim,0.2);
|
|
self notify("switched_to_lastweapon");
|
|
maps\_gameskill::didsomethingotherthanshooting();
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 61
|
|
handleputaway(param_00)
|
|
{
|
|
if(param_00 == "pistol_putaway")
|
|
{
|
|
self clearanim(animscripts\utility::animarray("straight_level"),0);
|
|
animscripts\animset::set_animarray_standing();
|
|
thread animscripts\combat_utility::putgunbackinhandonkillanimscript();
|
|
return;
|
|
}
|
|
|
|
if(param_00 == "start_aim")
|
|
{
|
|
animscripts\combat_utility::startfireandaimidlethread();
|
|
if(needtoturn())
|
|
{
|
|
self notify("end_weapon_swap");
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 62
|
|
handlecleanupputaway(param_00)
|
|
{
|
|
if(param_00 == "pistol_putaway")
|
|
{
|
|
thread animscripts\combat_utility::putgunbackinhandonkillanimscript();
|
|
return;
|
|
}
|
|
|
|
if(issubstr(param_00,"anim_gunhand"))
|
|
{
|
|
self notify("end_weapon_swap");
|
|
}
|
|
}
|
|
|
|
//Function Number: 63
|
|
rpgdeath()
|
|
{
|
|
if(!animscripts\utility::usingrocketlauncher() || self.bulletsinclip == 0)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(randomfloat(1) > 0.5)
|
|
{
|
|
var_00 = animscripts\utility::lookupanim("combat","rpg_death");
|
|
}
|
|
else
|
|
{
|
|
var_00 = animscripts\utility::lookupanim("combat","rpg_death_stagger");
|
|
}
|
|
|
|
self setflaggedanimknoball("deathanim",var_00,%animscript_root,1,0.05,1);
|
|
combat_playfacialanim(var_00,"death");
|
|
animscripts\shared::donotetracks("deathanim");
|
|
animscripts\shared::dropallaiweapons();
|
|
}
|
|
|
|
//Function Number: 64
|
|
reacquirewhennecessary()
|
|
{
|
|
self endon("killanimscript");
|
|
self.a.exposedreloading = 0;
|
|
for(;;)
|
|
{
|
|
wait(0.2);
|
|
if(isdefined(self.enemy) && !self seerecently(self.enemy,2))
|
|
{
|
|
if(self.combatmode == "ambush" || self.combatmode == "ambush_nodes_only")
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
tryexposedreacquire();
|
|
}
|
|
}
|
|
|
|
//Function Number: 65
|
|
tryexposedreacquire()
|
|
{
|
|
if(self.fixednode)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(self.enemy))
|
|
{
|
|
self.reacquire_state = 0;
|
|
return;
|
|
}
|
|
|
|
if(gettime() < self.teammovewaittime)
|
|
{
|
|
self.reacquire_state = 0;
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.prevenemy) && self.prevenemy != self.enemy)
|
|
{
|
|
self.reacquire_state = 0;
|
|
self.prevenemy = undefined;
|
|
return;
|
|
}
|
|
|
|
self.prevenemy = self.enemy;
|
|
if(self cansee(self.enemy) && self canshootenemy())
|
|
{
|
|
self.reacquire_state = 0;
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.finishedreload) && !self.finishedreload)
|
|
{
|
|
self.reacquire_state = 0;
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(self.reacquire_without_facing) || !self.reacquire_without_facing)
|
|
{
|
|
var_00 = vectornormalize(self.enemy.origin - self.origin);
|
|
var_01 = anglestoforward(self.angles);
|
|
if(vectordot(var_00,var_01) < 0.5)
|
|
{
|
|
self.reacquire_state = 0;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(self.a.exposedreloading && animscripts\combat_utility::needtoreload(0.25) && self.enemy.health > self.enemy.maxhealth * 0.5)
|
|
{
|
|
self.reacquire_state = 0;
|
|
return;
|
|
}
|
|
|
|
if(animscripts\combat_utility::shouldhelpadvancingteammate() && self.reacquire_state < 3)
|
|
{
|
|
self.reacquire_state = 3;
|
|
}
|
|
|
|
switch(self.reacquire_state)
|
|
{
|
|
case 0:
|
|
if(self reacquirestep(32))
|
|
{
|
|
return;
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
if(self reacquirestep(64))
|
|
{
|
|
self.reacquire_state = 0;
|
|
return;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if(self reacquirestep(96))
|
|
{
|
|
self.reacquire_state = 0;
|
|
return;
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
if(animscripts\combat_utility::tryrunningtoenemy(0))
|
|
{
|
|
self.reacquire_state = 0;
|
|
return;
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
if(!self cansee(self.enemy) || !self canshootenemy())
|
|
{
|
|
self flagenemyunattackable();
|
|
}
|
|
break;
|
|
|
|
default:
|
|
if(self.reacquire_state > 15)
|
|
{
|
|
self.reacquire_state = 0;
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
|
|
self.reacquire_state++;
|
|
}
|
|
|
|
//Function Number: 66
|
|
resetanimmode(param_00)
|
|
{
|
|
var_01 = param_00;
|
|
if(!isdefined(var_01))
|
|
{
|
|
var_01 = 1;
|
|
}
|
|
|
|
if(self.swimmer)
|
|
{
|
|
self animmode("nogravity",var_01);
|
|
return;
|
|
}
|
|
|
|
self animmode("zonly_physics",var_01);
|
|
}
|
|
|
|
//Function Number: 67
|
|
combat_playfacialanim(param_00,param_01)
|
|
{
|
|
self.facialidx = animscripts\face::playfacialanim(param_00,param_01,self.facialidx);
|
|
}
|
|
|
|
//Function Number: 68
|
|
combat_clearfacialanim()
|
|
{
|
|
self.facialidx = undefined;
|
|
self clearanim(%head,0.2);
|
|
} |