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

538 lines
12 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: face.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 19
* Decompile Time: 272 ms
* Timestamp: 4/22/2024 2:00:29 AM
*******************************************************************/
//Function Number: 1
initcharacterface()
{
if(!level.usefacialanims)
{
return;
}
if(!isdefined(self.a.currentdialogimportance))
{
self.a.currentdialogimportance = 0;
self.a.idleface = level.alertface;
self.facewaiting = [];
self.facelastnotifynum = 0;
}
}
//Function Number: 2
saygenericdialogue(param_00)
{
var_01 = undefined;
switch(self.voice)
{
case "czech":
case "french":
case "seal":
case "taskforce":
case "delta":
case "pmc":
case "xslice":
case "american":
var_02 = "friendly";
var_03 = level.numfriendlyvoices;
break;
default:
var_02 = "enemy";
var_03 = level.numenemyvoices;
break;
}
var_01 = 1 + self getentitynumber() % var_03;
var_02 = var_02 + "_" + var_01;
var_04 = undefined;
switch(param_00)
{
case "meleecharge":
case "meleeattack":
var_05 = 0.5;
break;
case "flashbang":
var_05 = 0.7;
break;
case "pain":
var_05 = 0.9;
break;
case "pain_small":
var_05 = 0.9;
break;
case "dogdeathlongplr":
case "dogdeathshortplr":
case "dogdeathlong":
case "dogdeathshort":
case "melee_death":
case "death":
var_05 = 1;
break;
default:
var_05 = 0.3;
break;
}
var_06 = undefined;
if(isdefined(self.generic_voice_override))
{
var_06 = self.generic_voice_override + "_" + param_00 + "_" + var_02;
if(!soundexists(var_06))
{
var_06 = "generic_" + param_00 + "_" + var_02;
}
}
else
{
var_06 = "generic_" + param_00 + "_" + var_02;
}
thread playfacethread(var_04,var_06,var_05);
}
//Function Number: 3
setidlefacedelayed(param_00)
{
animscripts\battlechatter::playbattlechatter();
self.a.idleface = param_00;
}
//Function Number: 4
setidleface(param_00)
{
if(!level.usefacialanims)
{
return;
}
animscripts\battlechatter::playbattlechatter();
self.a.idleface = param_00;
playidleface();
}
//Function Number: 5
sayspecificdialogue(param_00,param_01,param_02,param_03,param_04,param_05)
{
thread playfacethread(param_00,param_01,param_02,param_03,param_04,param_05);
}
//Function Number: 6
chooseanimfromset(param_00)
{
}
//Function Number: 7
playidleface()
{
}
//Function Number: 8
playfacethread(param_00,param_01,param_02,param_03,param_04,param_05)
{
self.a.facialanimdone = 1;
self.a.facialsounddone = 1;
if(isdefined(param_03))
{
if(isdefined(param_01))
{
if(!soundexists(param_01))
{
wait(0);
self notify(param_03);
}
self playsoundatviewheight(param_01,"animscript facesound" + param_03,1);
thread waitforfacesound(param_03);
}
}
else
{
self playsoundatviewheight(param_01);
}
if(!level.usefacialanims)
{
return;
}
initcharacterface();
if(!isdefined(param_00) && !isdefined(param_01))
{
if(isdefined(param_03))
{
wait(0);
self.faceresult = "failed";
self notify(param_03);
}
return;
}
self endon("death");
if(isstring(param_02))
{
switch(param_02)
{
case "any":
param_02 = 0.1;
break;
case "pain":
param_02 = 0.9;
break;
case "death":
param_02 = 1;
break;
}
}
if(param_02 <= self.a.currentdialogimportance && isdefined(param_04) && param_04 == "wait")
{
var_06 = self.facewaiting.size;
var_07 = self.facelastnotifynum + 1;
self.facewaiting[var_06]["facialanim"] = param_00;
self.facewaiting[var_06]["soundAlias"] = param_01;
self.facewaiting[var_06]["importance"] = param_02;
self.facewaiting[var_06]["notifyString"] = param_03;
self.facewaiting[var_06]["waitOrNot"] = param_04;
self.facewaiting[var_06]["timeToWait"] = param_05;
self.facewaiting[var_06]["notifyNum"] = var_07;
thread playface_waitfornotify("animscript face stop waiting " + self.facewaiting[var_06]["notifyNum"],"Face done waiting","Face done waiting");
if(isdefined(param_05))
{
thread playface_waitfortime(param_05,"Face done waiting","Face done waiting");
}
self waittill("Face done waiting");
var_06 = undefined;
for(var_08 = 0;var_08 < self.facewaiting.size;var_08++)
{
if(self.facewaiting[var_08]["notifyNum"] == var_07)
{
var_06 = var_08;
break;
}
}
if(self.a.facewaitforresult == "notify")
{
playfacethread(self.facewaiting[var_06]["facialanim"],self.facewaiting[var_06]["soundAlias"],self.facewaiting[var_06]["importance"],self.facewaiting[var_06]["notifyString"]);
}
else if(isdefined(param_03))
{
self.faceresult = "failed";
self notify(param_03);
}
for(var_08 = var_06 + 1;var_08 < self.facewaiting.size;var_08++)
{
self.facewaiting[var_08 - 1]["facialanim"] = self.facewaiting[var_08]["facialanim"];
self.facewaiting[var_08 - 1]["soundAlias"] = self.facewaiting[var_08]["soundAlias"];
self.facewaiting[var_08 - 1]["importance"] = self.facewaiting[var_08]["importance"];
self.facewaiting[var_08 - 1]["notifyString"] = self.facewaiting[var_08]["notifyString"];
self.facewaiting[var_08 - 1]["waitOrNot"] = self.facewaiting[var_08]["waitOrNot"];
self.facewaiting[var_08 - 1]["timeToWait"] = self.facewaiting[var_08]["timeToWait"];
self.facewaiting[var_08 - 1]["notifyNum"] = self.facewaiting[var_08]["notifyNum"];
}
self.facewaiting[self.facewaiting.size - 1] = undefined;
return;
}
if(param_02 >= self.a.currentdialogimportance)
{
self notify("end current face");
self endon("end current face");
if(isdefined(param_03))
{
if(isdefined(self.a.currentdialognotifystring))
{
self.faceresult = "interrupted";
self notify(self.a.currentdialognotifystring);
}
}
self.a.currentdialogimportance = param_02;
self.a.currentdialogsound = param_01;
self.a.currentdialognotifystring = param_03;
self.a.facialanimdone = 1;
self.a.facialsounddone = 1;
if(isdefined(param_00))
{
maps\_anim::disabledefaultfacialanims();
self setflaggedanimknobrestart("animscript faceanim",param_00,1,0.1,1);
self.a.facialanimdone = 0;
thread waitforfacialanim();
}
else
{
maps\_anim::disabledefaultfacialanims(0);
}
if(isdefined(param_01))
{
self playsoundatviewheight(param_01,"animscript facesound",1);
self.a.facialsounddone = 0;
thread waitforfacesound();
}
while(!self.a.facialanimdone || !self.a.facialsounddone)
{
self waittill("animscript facedone");
}
self.a.currentdialogimportance = 0;
self.a.currentdialogsound = undefined;
self.a.currentdialognotifystring = undefined;
if(isdefined(param_03))
{
self.faceresult = "finished";
self notify(param_03);
}
if(isdefined(self.facewaiting) && self.facewaiting.size > 0)
{
var_09 = 0;
var_0A = 1;
for(var_08 = 0;var_08 < self.facewaiting.size;var_08++)
{
if(self.facewaiting[var_08]["importance"] > var_09)
{
var_09 = self.facewaiting[var_08]["importance"];
var_0A = var_08;
}
}
self notify("animscript face stop waiting " + self.facewaiting[var_0A]["notifyNum"]);
return;
}
if(isai(self))
{
playidleface();
return;
}
return;
}
if(isdefined(param_03))
{
self.faceresult = "failed";
self notify(param_03);
return;
}
}
//Function Number: 9
waitforfacialanim()
{
self endon("death");
self endon("end current face");
animscripts\shared::donotetracks("animscript faceanim");
self.a.facialanimdone = 1;
self notify("animscript facedone");
maps\_anim::disabledefaultfacialanims(0);
}
//Function Number: 10
waitforfacesound(param_00)
{
self endon("death");
self waittill("animscript facesound" + param_00);
self notify(param_00);
}
//Function Number: 11
playface_waitfornotify(param_00,param_01,param_02)
{
self endon("death");
self endon(param_02);
self waittill(param_00);
self.a.facewaitforresult = "notify";
self notify(param_01);
}
//Function Number: 12
playface_waitfortime(param_00,param_01,param_02)
{
self endon("death");
self endon(param_02);
wait(param_00);
self.a.facewaitforresult = "time";
self notify(param_01);
}
//Function Number: 13
initlevelface()
{
anim.numfriendlyvoices = 8;
anim.numenemyvoices = 8;
initfacialanims();
}
//Function Number: 14
initfacialanims()
{
anim.facial = [];
level.facial["pain"] = [%facial_pain_1,%facial_pain_2,%facial_pain_3,%facial_pain_4];
level.facial["aim"] = [%facial_aim_1,%facial_aim_2];
level.facial["run"] = [%facial_run_1,%facial_run_2];
level.facial["corner_stand_L"] = [%facial_corner_stand_l_1,%facial_corner_stand_l_2];
level.facial["corner_stand_R"] = [%facial_corner_stand_r_1,%facial_corner_stand_r_2];
level.facial["death"] = [%facial_death_1,%facial_death_2,%facial_death_3,%facial_death_4];
level.facial["idle"] = [%facial_idle_1,%facial_idle_2,%facial_idle_3];
level.facial["pain_blend"] = [%facial_pain_blend_1,%facial_pain_blend_2,%facial_pain_blend_3,%facial_pain_blend_4];
level.facial["aim_blend"] = [%facial_aim_blend_1,%facial_aim_blend_2];
level.facial["run_blend"] = [%facial_run_blend_1,%facial_run_blend_2];
level.facial["corner_stand_L_blend"] = [%facial_corner_stand_l_blend_1,%facial_corner_stand_l_blend_2];
level.facial["corner_stand_R_blend"] = [%facial_corner_stand_r_blend_1,%facial_corner_stand_r_blend_2];
level.facial["death_blend"] = [%facial_death_blend_1,%facial_death_blend_2,%facial_death_blend_3,%facial_death_blend_4];
level.facial["idle_blend"] = [%facial_idle_blend_1,%facial_idle_blend_2,%facial_idle_blend_3];
}
//Function Number: 15
animhasfacialoverride(param_00)
{
return animhasnotetrack(param_00,"facial_override");
}
//Function Number: 16
playfacialanim(param_00,param_01,param_02)
{
if(!isdefined(self.facialidlemonitor))
{
thread facial_idle_monitor_thread();
}
if(isdefined(self.bdisabledefaultfacialanims) && self.bdisabledefaultfacialanims)
{
self clearanim(%head,0.2);
return;
}
if(isdefined(param_00) && animhasfacialoverride(param_00))
{
self clearanim(%head,0.2);
return;
}
if(self hasblendshapes())
{
param_01 = param_01 + "_blend";
}
if(!isdefined(level.facial[param_01]))
{
return;
}
if(isdefined(param_02) && param_02 >= 0 && param_02 < level.facial[param_01].size)
{
var_03 = param_02;
}
else
{
var_03 = randomint(level.facial[param_02].size);
}
var_04 = level.facial[param_01][var_03];
self setanimknob(var_04);
if(param_01 == "death")
{
thread end_facial_on_death();
}
return var_03;
}
//Function Number: 17
end_facial_on_death()
{
wait(1);
if(isdefined(self))
{
self clearanim(%head,0.2);
}
}
//Function Number: 18
get_eye_relative_dir()
{
if(self gettagindex("jnt_eyelid_TL") == -1 || self gettagindex("tag_eye") == -1)
{
return;
}
if(self gettagindex("jnt_eyelid_TR") == -1)
{
return;
}
var_00 = self gettagangles("tag_eye");
var_01 = self gettagangles("jnt_eyelid_TR");
var_02 = self gettagangles("jnt_eyelid_TL");
var_03 = angleclamp180(abs(var_00[0] - var_01[0]));
var_04 = angleclamp180(abs(var_00[0] - var_02[0]));
if(!isdefined(self.prev_eyel_diff))
{
self.prev_eyel_diff = var_03;
}
if(!isdefined(self.prev_eyer_diff))
{
self.prev_eyer_diff = var_04;
}
if(!isdefined(self.eye_move_counter))
{
self.eye_move_counter = 0;
}
if(angleclamp180(var_03 - self.prev_eyel_diff) > 5 || angleclamp180(var_04 - self.prev_eyer_diff) > 5)
{
self.prev_eyel_diff = var_03;
self.prev_eyer_diff = var_04;
}
else
{
self.eye_move_counter++;
}
if(isdefined(self.eye_move_counter) && self.eye_move_counter > 4 && isdefined(self.script) && self.script != "scripted")
{
var_05 = playfacialanim(undefined,"idle",undefined);
if(isdefined(var_05))
{
wait(getanimlength(level.facial["idle"][var_05]));
}
self.eye_move_counter = 0;
}
}
//Function Number: 19
facial_idle_monitor_thread()
{
self endon("death");
self endon("killanimscript");
self.facialidlemonitor = 1;
for(;;)
{
get_eye_relative_dir();
wait(0.35);
}
}