mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
276 lines
6.2 KiB
Plaintext
276 lines
6.2 KiB
Plaintext
|
||
#include common_scripts\utility;
|
||
SayGenericDialogue(typeString)
|
||
{
|
||
switch (typeString)
|
||
{
|
||
case "kill_melee":
|
||
importance = 0.5;
|
||
break;
|
||
case "flashbang":
|
||
importance = 0.7;
|
||
break;
|
||
case "pain":
|
||
importance = 0.4;
|
||
break;
|
||
case "death":
|
||
wait(.01);
|
||
importance = 1.5;
|
||
break;
|
||
default:
|
||
println ("Unexpected generic dialog string: "+typeString);
|
||
importance = 0.3;
|
||
break;
|
||
}
|
||
SayGenericDialogueWithImportance(typeString, importance);
|
||
}
|
||
SayGenericDialogueWithImportance(typeString, importance)
|
||
{
|
||
soundAlias = "dds_";
|
||
if( IsDefined( self.dds_characterID ) )
|
||
{
|
||
soundAlias += self.dds_characterID;
|
||
}
|
||
else
|
||
{
|
||
printLn( "this AI does not have a dds_characterID" );
|
||
return;
|
||
}
|
||
soundAlias += "_" + typeString;
|
||
if(SoundExists(soundAlias))
|
||
{
|
||
self thread PlayFaceThread (undefined, soundAlias, importance);
|
||
}
|
||
}
|
||
SetIdleFaceDelayed(facialAnimationArray)
|
||
{
|
||
self.a.idleFace = facialAnimationArray;
|
||
}
|
||
SetIdleFace(facialAnimationArray)
|
||
{
|
||
if (!anim.useFacialAnims)
|
||
{
|
||
return;
|
||
}
|
||
self.a.idleFace = facialAnimationArray;
|
||
self PlayIdleFace();
|
||
}
|
||
SaySpecificDialogue(facialanim, soundAlias, importance, notifyString, waitOrNot, timeToWait)
|
||
{
|
||
self thread PlayFaceThread (facialanim, soundAlias, importance, notifyString, waitOrNot, timeToWait);
|
||
}
|
||
ChooseAnimFromSet( animSet )
|
||
{
|
||
return;
|
||
}
|
||
PlayIdleFace()
|
||
{
|
||
return;
|
||
}
|
||
PlayFaceThread(facialanim, soundAlias, importance, notifyString, waitOrNot, timeToWait)
|
||
{
|
||
if(!IsDefined(soundAlias))
|
||
{
|
||
wait(1);
|
||
self notify(notifyString);
|
||
return;
|
||
}
|
||
if(!IsDefined(level.NumberOfImportantPeopleTalking))
|
||
{
|
||
level.NumberOfImportantPeopleTalking = 0;
|
||
}
|
||
if(!IsDefined(level.TalkNotifySeed))
|
||
{
|
||
level.TalkNotifySeed = 0;
|
||
}
|
||
if(!IsDefined(notifyString))
|
||
{
|
||
notifyString = "PlayFaceThread "+soundAlias;
|
||
}
|
||
if( !IsDefined( self.a ) )
|
||
{
|
||
self.a = SpawnStruct();
|
||
}
|
||
if(!IsDefined(self.a.facialSoundDone))
|
||
{
|
||
self.a.facialSoundDone = true;
|
||
}
|
||
if(!IsDefined(self.isTalking))
|
||
{
|
||
self.isTalking = false;
|
||
}
|
||
if(self.isTalking)
|
||
{
|
||
if(importance < self.a.currentDialogImportance)
|
||
{
|
||
wait(1);
|
||
self notify(notifyString);
|
||
return;
|
||
}
|
||
else if(importance == self.a.currentDialogImportance)
|
||
{
|
||
if(self.a.facialSoundAlias==soundAlias)
|
||
{
|
||
return;
|
||
}
|
||
println("WARNING: delaying alias "+self.a.facialSoundAlias+" to play "+soundAlias);
|
||
while(IsDefined(self) && self.isTalking)
|
||
{
|
||
self waittill("done speaking" );
|
||
}
|
||
if(!IsDefined(self))
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
println("WARNING: interrupting alias "+self.a.facialSoundAlias+" to play "+soundAlias);
|
||
self stopSound(self.a.facialSoundAlias);
|
||
self notify("cancel speaking");
|
||
while(IsDefined(self) && self.isTalking)
|
||
{
|
||
self waittill("done speaking");
|
||
}
|
||
if(!IsDefined(self))
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
assert(self.a.facialSoundDone);
|
||
assert(self.a.facialSoundAlias == undefined);
|
||
assert(self.a.facialSoundNotify == undefined);
|
||
assert(self.a.currentDialogImportance == undefined);
|
||
assert(!self.isTalking);
|
||
self.isTalking = true;
|
||
self.a.facialSoundDone = false;
|
||
self.a.facialSoundNotify = notifyString;
|
||
self.a.facialSoundAlias = soundAlias;
|
||
self.a.currentDialogImportance = importance;
|
||
if(importance == 1.0)
|
||
{
|
||
level.NumberOfImportantPeopleTalking += 1;
|
||
}
|
||
if(level.NumberOfImportantPeopleTalking > 1)
|
||
{
|
||
println("WARNING: multiple high priority dialogs are happening at once "+ soundAlias);
|
||
}
|
||
uniqueNotify = notifyString + " "+level.TalkNotifySeed;
|
||
level.TalkNotifySeed += 1;
|
||
play_sound = true;
|
||
if(!SoundExists(soundAlias))
|
||
{
|
||
println("Warning: "+soundAlias+" does not exist");
|
||
if( IsString( soundAlias ) && ( "vox_" != GetSubStr( soundAlias, 0, 4 ) ) )
|
||
{
|
||
play_sound = false;
|
||
self thread display_vo(soundAlias, uniqueNotify);
|
||
}
|
||
}
|
||
if (play_sound)
|
||
{
|
||
self PlaySound(soundAlias, uniqueNotify, true);
|
||
}
|
||
self waittill_any("death", "cancel speaking", uniqueNotify);
|
||
if(importance == 1.0)
|
||
{
|
||
level.NumberOfImportantPeopleTalking -= 1;
|
||
level.ImportantPeopleTalkingTime = GetTime();
|
||
}
|
||
if(IsDefined(self))
|
||
{
|
||
self.isTalking = false;
|
||
self.a.facialSoundDone = true;
|
||
self.a.facialSoundNotify = undefined;
|
||
self.a.facialSoundAlias = undefined;
|
||
self.a.currentDialogImportance = undefined;
|
||
self.lastSayTime = GetTime();
|
||
}
|
||
self notify( "done speaking" );
|
||
self notify(notifyString);
|
||
}
|
||
display_vo(vo_string, uniqueNotify)
|
||
{
|
||
if (!IsDefined(level.vo_hud))
|
||
{
|
||
level.vo_hud = NewHudElem();
|
||
level.vo_hud.fontscale = 2;
|
||
level.vo_hud.horzAlign = "center";
|
||
level.vo_hud.vertAlign = "middle";
|
||
level.vo_hud.alignX = "center";
|
||
level.vo_hud.alignY = "middle";
|
||
level.vo_hud.y = 180;
|
||
}
|
||
name = "";
|
||
if (IsDefined(self.name))
|
||
{
|
||
name = self.name;
|
||
}
|
||
else if (IsDefined(self.animname))
|
||
{
|
||
name = self.animname;
|
||
}
|
||
level.vo_hud SetText(name + ": " + vo_string);
|
||
wait (vo_string.size / 6);
|
||
level.vo_hud SetText("");
|
||
self notify(uniqueNotify);
|
||
}
|
||
temp_dialogue_print( soundAlias )
|
||
{
|
||
self endon( "death" );
|
||
new_string = "";
|
||
if( IsSubStr( soundAlias, "print:" ) )
|
||
{
|
||
if( IsDefined( self.name ) )
|
||
{
|
||
name = self.name + ": ";
|
||
}
|
||
else
|
||
{
|
||
name = "NO-NAMER: ";
|
||
}
|
||
for( i = 6; i < soundAlias.size; i++ )
|
||
{
|
||
new_string = new_string + soundAlias[i];
|
||
}
|
||
println( "^3TEMP DIALOGUE - " + name + new_string );
|
||
}
|
||
else
|
||
{
|
||
new_string = soundAlias;
|
||
}
|
||
self notify( "stop_temp_dialogue_print" );
|
||
self endon( "stop_temp_dialogue_print" );
|
||
size = new_string.size;
|
||
time = GetTime() + 3000;
|
||
if( size > 25 )
|
||
{
|
||
time = GetTime() + ( size * 0.1 * 1000 );
|
||
}
|
||
while( GetTime() < time )
|
||
{
|
||
Print3d( self.origin + ( 0, 0, 72 ), new_string );
|
||
wait( 0.05 );
|
||
}
|
||
}
|
||
PlayFace_WaitForNotify(waitForString, notifyString, killmeString)
|
||
{
|
||
self endon ("death");
|
||
self endon (killmeString);
|
||
self waittill (waitForString);
|
||
self.a.faceWaitForResult = "notify";
|
||
self notify (notifyString);
|
||
}
|
||
PlayFace_WaitForTime(time, notifyString, killmeString)
|
||
{
|
||
self endon ("death");
|
||
self endon (killmeString);
|
||
wait (time);
|
||
self.a.faceWaitForResult = "time";
|
||
self notify (notifyString);
|
||
}
|
||
#using_animtree ("generic_human");
|
||
InitLevelFace()
|
||
{
|
||
} |