Files
IL-GSC/AW/PC/animscripts/squadmanager.gsc
InfinityLoader b2389dbcb9 Full AW Dump
2024-04-22 02:38:24 -04:00

845 lines
15 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: squadmanager.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 32
* Decompile Time: 456 ms
* Timestamp: 4/22/2024 2:00:59 AM
*******************************************************************/
//Function Number: 1
init_squadmanager()
{
if(isdefined(level.squadinitialized) && level.squadinitialized)
{
return;
}
anim.squadcreatefuncs = [];
anim.squadcreatestrings = [];
anim.squads = [];
anim.squadindex = [];
anim.squadrand = 0;
anim.squadinitialized = 1;
maps\_utility::set_console_status();
}
//Function Number: 2
createsquad(param_00,param_01)
{
level.squads[param_00] = spawnstruct();
var_02 = level.squads[param_00];
var_02.squadname = param_00;
var_02.team = getsquadteam(param_01);
var_02.sighttime = 0;
var_02.origin = undefined;
var_02.forward = undefined;
var_02.enemy = undefined;
var_02.isincombat = 0;
var_02.membercount = 0;
var_02.members = [];
var_02.officers = [];
var_02.officercount = 0;
var_02.squadlist = [];
var_02.memberaddfuncs = [];
var_02.memberaddstrings = [];
var_02.memberremovefuncs = [];
var_02.memberremovestrings = [];
var_02.squadupdatefuncs = [];
var_02.squadupdatestrings = [];
var_02.squadid = level.squadindex.size;
var_02 initstate("combat",0.75);
var_02 initstate("cover",0.75);
var_02 initstate("move",0.75);
var_02 initstate("stop",0.75);
var_02 initstate("death",0.75);
var_02 initstate("suppressed",0.75);
var_02 initstate("attacking",0.5);
level.squadindex[level.squadindex.size] = var_02;
var_02 updatesquadlist();
level notify("squad created " + param_00);
anim notify("squad created " + param_00);
for(var_03 = 0;var_03 < level.squadcreatefuncs.size;var_03++)
{
var_04 = level.squadcreatefuncs[var_03];
var_02 thread [[ var_04 ]]();
}
for(var_03 = 0;var_03 < level.squadindex.size;var_03++)
{
level.squadindex[var_03] updatesquadlist();
}
var_02 thread updatewaiter();
var_02 thread squadtracker();
var_02 thread officerwaiter();
var_02 thread updatememberstates();
return var_02;
}
//Function Number: 3
deletesquad(param_00)
{
if(param_00 == "axis" || param_00 == "team3" || param_00 == "allies")
{
return;
}
var_01 = level.squads[param_00].squadid;
var_02 = level.squads[param_00];
var_02 notify("squad_deleting");
while(var_02.members.size)
{
var_02.members[0] addtosquad(var_02.members[0].team);
}
level.squadindex[var_01] = level.squadindex[level.squadindex.size - 1];
level.squadindex[var_01].squadid = var_01;
level.squadindex[level.squadindex.size - 1] = undefined;
level.squads[param_00] = undefined;
level notify("squad deleted " + param_00);
anim notify("squad deleted " + param_00);
for(var_03 = 0;var_03 < level.squadindex.size;var_03++)
{
level.squadindex[var_03] updatesquadlist();
}
}
//Function Number: 4
generatesquadname()
{
var_00 = "auto" + level.squadrand;
level.squadrand++;
return var_00;
}
//Function Number: 5
addplayertosquad(param_00)
{
if(!isdefined(param_00))
{
if(isdefined(self.script_squadname))
{
param_00 = self.script_squadname;
}
else
{
param_00 = self.team;
}
}
if(!isdefined(level.squads[param_00]))
{
anim createsquad(param_00,self);
}
var_01 = level.squads[param_00];
self.squad = var_01;
}
//Function Number: 6
squadchange()
{
self endon("death");
wait(10);
if(!isdefined(self.script_squadname))
{
var_00 = self.team + self.script_flanker;
}
else
{
var_00 = self.script_squadname + self.script_flanker;
}
addtosquad(var_00);
}
//Function Number: 7
getsquadteam(param_00)
{
var_01 = "allies";
if(param_00.team == "axis" || param_00.team == "neutral" || param_00.team == "team3")
{
var_01 = param_00.team;
}
return var_01;
}
//Function Number: 8
addtosquad(param_00)
{
if(!isdefined(param_00))
{
if(isdefined(self.script_flanker))
{
thread squadchange();
}
if(isdefined(self.script_squadname))
{
param_00 = self.script_squadname;
}
else
{
param_00 = self.team;
}
}
if(!isdefined(level.squads[param_00]))
{
anim createsquad(param_00,self);
}
var_01 = level.squads[param_00];
if(isdefined(self.squad))
{
if(self.squad == var_01)
{
return;
}
else
{
removefromsquad();
}
}
self.lastenemysighttime = 0;
self.combattime = 0;
self.squad = var_01;
self.memberid = var_01.members.size;
var_01.members[self.memberid] = self;
var_01.membercount = var_01.members.size;
if(isdefined(level.loadoutcomplete))
{
if(self.team == "allies" && animscripts\battlechatter::isofficer())
{
addofficertosquad();
}
}
for(var_02 = 0;var_02 < self.squad.memberaddfuncs.size;var_02++)
{
var_03 = self.squad.memberaddfuncs[var_02];
self thread [[ var_03 ]](self.squad.squadname);
}
maps\_dds::dds_ai_init();
thread membercombatwaiter();
thread memberdeathwaiter();
}
//Function Number: 9
removefromsquad()
{
var_00 = self.squad;
var_01 = -1;
if(isdefined(self))
{
var_01 = self.memberid;
}
else
{
for(var_02 = 0;var_02 < var_00.members.size;var_02++)
{
if(var_00.members[var_02] == self)
{
var_01 = var_02;
}
}
}
if(var_01 != var_00.members.size - 1)
{
var_03 = var_00.members[var_00.members.size - 1];
var_00.members[var_01] = var_03;
if(isdefined(var_03))
{
var_03.memberid = var_01;
}
}
var_00.members[var_00.members.size - 1] = undefined;
var_00.membercount = var_00.members.size;
if(isdefined(self.officerid))
{
removeofficerfromsquad();
}
if(isdefined(self) && isdefined(self.team))
{
maps\_dds::dds_notify_casualty();
}
for(var_02 = 0;var_02 < self.squad.memberremovefuncs.size;var_02++)
{
var_04 = self.squad.memberremovefuncs[var_02];
self thread [[ var_04 ]](var_00.squadname);
}
if(var_00.membercount == 0)
{
deletesquad(var_00.squadname);
}
if(isdefined(self))
{
self.squad = undefined;
self.memberid = undefined;
}
self notify("removed from squad");
}
//Function Number: 10
addofficertosquad()
{
var_00 = self.squad;
if(isdefined(self.officerid))
{
return;
}
self.officerid = var_00.officers.size;
var_00.officers[self.officerid] = self;
var_00.officercount = var_00.officers.size;
}
//Function Number: 11
removeofficerfromsquad()
{
var_00 = self.squad;
var_01 = -1;
if(isdefined(self))
{
var_01 = self.officerid;
}
else
{
for(var_02 = 0;var_02 < var_00.officers.size;var_02++)
{
if(var_00.officers[var_02] == self)
{
var_01 = var_02;
}
}
}
if(var_01 != var_00.officers.size - 1)
{
var_03 = var_00.officers[var_00.officers.size - 1];
var_00.officers[var_01] = var_03;
if(isdefined(var_03))
{
var_03.officerid = var_01;
}
}
var_00.officers[var_00.officers.size - 1] = undefined;
var_00.officercount = var_00.officers.size;
if(isdefined(self))
{
self.officerid = undefined;
}
}
//Function Number: 12
officerwaiter()
{
if(!isdefined(level.loadoutcomplete))
{
anim waittill("loadout complete");
}
for(var_00 = 0;var_00 < self.members.size;var_00++)
{
if(self.members[var_00] animscripts\battlechatter::isofficer())
{
self.members[var_00] addofficertosquad();
}
}
}
//Function Number: 13
updatewaiter()
{
for(;;)
{
anim waittill("squadupdate",var_00);
switch(var_00)
{
case "squadlist":
updatesquadlist();
break;
case "combat":
updatecombat();
break;
case "origin":
updateorigin();
break;
case "forward":
updateheading();
break;
}
}
}
//Function Number: 14
squadtracker()
{
anim endon("squad deleted " + self.squadname);
var_00 = 0.1;
if(level.currentgen)
{
var_00 = 0.5;
}
for(;;)
{
updateall();
wait(var_00);
}
}
//Function Number: 15
memberdeathwaiter()
{
self endon("removed from squad");
self waittill("death",var_00);
if(isdefined(self))
{
self.attacker = var_00;
}
removefromsquad();
}
//Function Number: 16
membercombatwaiter()
{
self endon("removed from squad");
for(;;)
{
self waittill("enemy");
if(!isdefined(self.enemy))
{
self.squad notify("squadupdate","combat");
}
else
{
self.squad.isincombat = 1;
}
wait(0.05);
}
}
//Function Number: 17
updateheading()
{
if(isdefined(self.enemy))
{
self.forward = vectornormalize(self.enemy.origin - self.origin);
return;
}
var_00 = (0,0,0);
var_01 = 0;
for(var_02 = 0;var_02 < self.members.size;var_02++)
{
if(!isalive(self.members[var_02]))
{
continue;
}
var_00 = var_00 + anglestoforward(self.members[var_02].angles);
var_01++;
}
if(var_01)
{
self.forward = (var_00[0] / var_01,var_00[1] / var_01,var_00[2] / var_01);
return;
}
self.forward = var_00;
}
//Function Number: 18
updateorigin()
{
var_00 = (0,0,0);
var_01 = 0;
for(var_02 = 0;var_02 < self.members.size;var_02++)
{
if(!isalive(self.members[var_02]))
{
continue;
}
var_00 = var_00 + self.members[var_02].origin;
var_01++;
}
if(var_01)
{
self.origin = (var_00[0] / var_01,var_00[1] / var_01,var_00[2] / var_01);
return;
}
self.origin = var_00;
}
//Function Number: 19
updatecombat()
{
self.isincombat = 0;
for(var_00 = 0;var_00 < level.squadindex.size;var_00++)
{
self.squadlist[level.squadindex[var_00].squadname].isincontact = 0;
}
for(var_00 = 0;var_00 < self.members.size;var_00++)
{
if(isdefined(self.members[var_00].enemy) && isdefined(self.members[var_00].enemy.squad) && self.members[var_00].combattime > 0)
{
self.squadlist[self.members[var_00].enemy.squad.squadname].isincontact = 1;
}
}
}
//Function Number: 20
updateenemy()
{
var_00 = undefined;
for(var_01 = 0;var_01 < self.members.size;var_01++)
{
if(isdefined(self.members[var_01].enemy) && isdefined(self.members[var_01].enemy.squad))
{
if(!isdefined(var_00))
{
var_00 = self.members[var_01].enemy.squad;
continue;
}
if(self.members[var_01].enemy.squad.membercount > var_00.membercount)
{
var_00 = self.members[var_01].enemy.squad;
}
}
}
self.enemy = var_00;
}
//Function Number: 21
updateall()
{
var_00 = (0,0,0);
var_01 = 0;
var_02 = undefined;
var_03 = 0;
updatecombat();
for(var_04 = 0;var_04 < self.members.size;var_04++)
{
if(!isalive(self.members[var_04]))
{
continue;
}
var_00 = var_00 + self.members[var_04].origin;
var_01++;
if(isdefined(self.members[var_04].enemy) && isdefined(self.members[var_04].enemy.squad))
{
if(!isdefined(var_02))
{
var_02 = self.members[var_04].enemy.squad;
continue;
}
if(self.members[var_04].enemy.squad.membercount > var_02.membercount)
{
var_02 = self.members[var_04].enemy.squad;
}
}
}
if(var_01)
{
self.origin = (var_00[0] / var_01,var_00[1] / var_01,var_00[2] / var_01);
}
else
{
self.origin = var_00;
}
self.isincombat = var_03;
self.enemy = var_02;
updateheading();
}
//Function Number: 22
updatesquadlist()
{
for(var_00 = 0;var_00 < level.squadindex.size;var_00++)
{
if(!isdefined(self.squadlist[level.squadindex[var_00].squadname]))
{
self.squadlist[level.squadindex[var_00].squadname] = spawnstruct();
self.squadlist[level.squadindex[var_00].squadname].isincontact = 0;
}
for(var_01 = 0;var_01 < self.squadupdatefuncs.size;var_01++)
{
var_02 = self.squadupdatefuncs[var_01];
self thread [[ var_02 ]](level.squadindex[var_00].squadname);
}
}
}
//Function Number: 23
printabovehead(param_00,param_01,param_02,param_03)
{
self endon("death");
if(!isdefined(param_02))
{
param_02 = (0,0,0);
}
if(!isdefined(param_03))
{
param_03 = (1,0,0);
}
for(var_04 = 0;var_04 < param_01 * 2;var_04++)
{
if(!isalive(self))
{
return;
}
var_05 = self getshootatpos() + (0,0,10) + param_02;
wait(0.05);
}
}
//Function Number: 24
aiupdateanimstate(param_00)
{
switch(param_00)
{
case "combat":
case "death":
case "move":
case "stop":
self.a.state = param_00;
break;
case "grenadecower":
case "pain":
break;
case "stalingrad_cover_crouch":
case "cover_wide_right":
case "cover_wide_left":
case "concealment_stand":
case "concealment_prone":
case "concealment_crouch":
case "cover_prone":
case "cover_swim_right":
case "cover_swim_left":
case "cover_swim_up":
case "cover_left":
case "cover_multi":
case "cover_right":
case "cover_stand":
case "cover_crouch":
self.a.state = "cover";
break;
case "l33t truckride combat":
case "aim":
self.a.state = "combat";
break;
}
}
//Function Number: 25
updatestates()
{
resetstate("combat");
resetstate("cover");
resetstate("move");
resetstate("stop");
resetstate("death");
resetstate("suppressed");
resetstate("attacking");
for(var_00 = 0;var_00 < self.members.size;var_00++)
{
if(!isalive(self.members[var_00]))
{
continue;
}
querymemberanimstate(self.members[var_00]);
querymemberstate(self.members[var_00],"suppressed");
querymemberstate(self.members[var_00],"combat");
querymemberstate(self.members[var_00],"attacking");
querymemberstate(self.members[var_00],"cover");
}
}
//Function Number: 26
updatememberstates()
{
anim endon("squad deleted " + self.squadname);
var_00 = 0.05;
if(level.currentgen)
{
var_00 = 0.25;
}
for(;;)
{
for(var_01 = 0;var_01 < self.members.size;var_01++)
{
if(!isalive(self.members[var_01]))
{
continue;
}
self.members[var_01] aiupdatecombat(var_00);
self.members[var_01] aiupdatesuppressed(var_00);
}
wait(var_00);
}
}
//Function Number: 27
aiupdatecombat(param_00)
{
if(isdefined(self.lastenemysightpos))
{
if(self.combattime < 0)
{
self.combattime = param_00;
}
else
{
self.combattime = self.combattime + param_00;
}
self.lastenemysighttime = gettime();
return;
}
else if(self issuppressed())
{
self.combattime = self.combattime + param_00;
return;
}
if(self.combattime > 0)
{
self.combattime = 0 - param_00;
return;
}
self.combattime = self.combattime - param_00;
}
//Function Number: 28
aiupdatesuppressed(param_00)
{
if(self.suppressed)
{
if(self.suppressedtime < 0)
{
self.suppressedtime = param_00;
}
else
{
self.suppressedtime = self.suppressedtime + param_00;
}
return;
}
if(self.suppressedtime > 0)
{
self.suppressedtime = 0 - param_00;
return;
}
self.suppressedtime = self.suppressedtime - param_00;
}
//Function Number: 29
initstate(param_00,param_01)
{
self.squadstates[param_00] = spawnstruct();
self.squadstates[param_00].activateratio = param_01;
self.squadstates[param_00].isactive = 0;
self.squadstates[param_00].numactive = 0;
}
//Function Number: 30
resetstate(param_00)
{
self.squadstates[param_00].isactive = 0;
self.squadstates[param_00].numactive = 0;
}
//Function Number: 31
querymemberanimstate(param_00)
{
self.squadstates[param_00.a.state].numactive++;
if(self.squadstates[param_00.a.state].numactive > self.squadstates[param_00.a.state].activateratio * self.members.size)
{
self.squadstates[param_00.a.state].isactive = 1;
}
}
//Function Number: 32
querymemberstate(param_00,param_01)
{
switch(param_01)
{
case "suppressed":
if(param_00.suppressedtime > 1)
{
self.squadstates[param_01].numactive++;
}
break;
case "combat":
if(param_00.combattime > 0)
{
self.squadstates[param_01].numactive++;
}
break;
case "attacking":
if(gettime() < param_00.a.lastshoottime + 2000)
{
self.squadstates[param_01].numactive++;
}
break;
case "cover":
if(!param_00 animscripts\battlechatter::isexposed())
{
self.squadstates[param_01].numactive++;
}
break;
}
if(self.squadstates[param_01].numactive > self.squadstates[param_01].activateratio * self.members.size)
{
self.squadstates[param_01].isactive = 1;
}
}