164 lines
4.1 KiB
Ucode
164 lines
4.1 KiB
Ucode
class VS_ZedRecentZed extends VS_ZedClotBase;
|
|
|
|
var repnotify bool bWasWoken;
|
|
var transient float WakeUpAnimTime;
|
|
|
|
replication
|
|
{
|
|
if (true)
|
|
bWasWoken;
|
|
}
|
|
|
|
simulated function float StartAttackAnim(byte Num) // Return animation duration.
|
|
{
|
|
if (FPHandModel!=None)
|
|
FPHandModel.PlayHandsAnim('Atk_Combo1_V3',1.5f);
|
|
return PlayBodyAnim('Atk_Combo1_V3',EAS_UpperBody,1.5f);
|
|
}
|
|
|
|
simulated event ReplicatedEvent(name VarName)
|
|
{
|
|
switch (VarName)
|
|
{
|
|
case 'bWasWoken':
|
|
if (bWasWoken)
|
|
WakeUp();
|
|
break;
|
|
default:
|
|
Super.ReplicatedEvent(VarName);
|
|
}
|
|
}
|
|
|
|
simulated function WakeUp() // Just spawned from transformed into a zombie.
|
|
{
|
|
bWasWoken = true;
|
|
bNoWeaponFiring = true;
|
|
WakeUpAnimTime = BodyStanceNodes[EAS_FullBody].PlayCustomAnim('Getup_Fast_F_V1',1.f);
|
|
SetTimer(WakeUpAnimTime,false,'GotUp');
|
|
GoToState('WakingUp');
|
|
}
|
|
|
|
simulated function GotUp()
|
|
{
|
|
if (Health<=0)
|
|
return;
|
|
ClearTimer('GotUp');
|
|
bWasWoken = false;
|
|
bNoWeaponFiring = false;
|
|
if (WorldInfo.NetMode!=NM_Client)
|
|
{
|
|
if (ExtPlayerController(Controller)!=None)
|
|
ExtPlayerController(Controller).EnterRagdollMode(false);
|
|
else if (Controller!=None)
|
|
Controller.ReplicatedEvent('EndRagdollMove');
|
|
}
|
|
GoToState('Auto');
|
|
}
|
|
|
|
state WakingUp
|
|
{
|
|
Ignores TakeDamage, FaceRotation;
|
|
|
|
function UnPossessed()
|
|
{
|
|
Super.UnPossessed();
|
|
|
|
ClearTimer('GotUp');
|
|
KilledBy(None);
|
|
LifeSpan = 2.f;
|
|
}
|
|
}
|
|
|
|
simulated function NotifyTeamChanged()
|
|
{
|
|
// Applies Character Info for < ROLE_Authority
|
|
if (PlayerReplicationInfo != None)
|
|
SetCharacterArch(GetCharacterInfo());
|
|
}
|
|
|
|
simulated function SetCharacterAnimationInfo()
|
|
{
|
|
local KFCharacterInfo_Monster M;
|
|
|
|
Super.SetCharacterAnimationInfo();
|
|
|
|
// Keep monster animations.
|
|
M = KFCharacterInfo_Monster'ZED_ARCH.ZED_Clot_UnDev_Archetype';
|
|
Mesh.AnimSets = M.AnimSets;
|
|
if (Mesh.AnimTreeTemplate != M.AnimTreeTemplate)
|
|
Mesh.SetAnimTreeTemplate(M.AnimTreeTemplate);
|
|
if (M.AnimArchetype != None)
|
|
PawnAnimInfo = M.AnimArchetype;
|
|
}
|
|
|
|
simulated function KFCharacterInfoBase GetCharacterInfo()
|
|
{
|
|
if (ExtPlayerReplicationInfo(PlayerReplicationInfo)!=None)
|
|
return ExtPlayerReplicationInfo(PlayerReplicationInfo).GetSelectedArch();
|
|
return Super.GetCharacterInfo();
|
|
}
|
|
|
|
simulated function SetCharacterArch(KFCharacterInfoBase Info, optional bool bForce)
|
|
{
|
|
local KFPlayerReplicationInfo KFPRI;
|
|
|
|
KFPRI = KFPlayerReplicationInfo(PlayerReplicationInfo);
|
|
if (Info != CharacterArch)
|
|
{
|
|
// Set Family Info
|
|
CharacterArch = Info;
|
|
CharacterArch.SetCharacterFromArch(self, KFPRI);
|
|
class'ExtCharacterInfo'.Static.SetCharacterMeshFromArch(KFCharacterInfo_Human(CharacterArch), self, KFPRI);
|
|
class'ExtCharacterInfo'.Static.SetFirstPersonArmsFromArch(KFCharacterInfo_Human(CharacterArch), self, KFPRI);
|
|
|
|
SetCharacterAnimationInfo();
|
|
|
|
// Sounds
|
|
SoundGroupArch = Info.SoundGroupArch;
|
|
|
|
if (WorldInfo.NetMode != NM_DedicatedServer)
|
|
{
|
|
// refresh weapon attachment (attachment bone may have changed)
|
|
if (WeaponAttachmentTemplate != None)
|
|
{
|
|
WeaponAttachmentChanged(true);
|
|
}
|
|
}
|
|
if (CharacterArch != none)
|
|
{
|
|
if (CharacterArch.VoiceGroupArchName != "")
|
|
VoiceGroupArch = class<KFPawnVoiceGroup>(class'ExtCharacterInfo'.Static.SafeLoadObject(CharacterArch.VoiceGroupArchName, class'Class'));
|
|
}
|
|
}
|
|
}
|
|
|
|
// Dont gore and gib because human chars don't support it.
|
|
simulated function HandlePartialGoreAndGibs(class<KFDamageType> DmgType,vector HitLocation,vector HitDirection,name HitBoneName,bool ObliterateGibs);
|
|
simulated function PlayHeadAsplode();
|
|
simulated function bool PlayDismemberment(int InHitZoneIndex, class<KFDamageType> InDmgType, optional vector HitDirection)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
event OnRigidBodyLinearConstraintViolated(name StretchedBoneName);
|
|
simulated function ApplyHeadChunkGore(class<KFDamageType> DmgType, vector HitLocation, vector HitDirection);
|
|
|
|
defaultproperties
|
|
{
|
|
Health=300
|
|
HealthMax=300
|
|
FPHandOffset=(X=-35,Z=-60)
|
|
HitsPerAttack=1
|
|
HPScaler=0.4
|
|
|
|
MonsterArchPath="ZED_ARCH.ZED_Clot_UnDev_Archetype"
|
|
CharacterMonsterArch=KFCharacterInfo_Monster'ZED_ARCH.ZED_Clot_UnDev_Archetype'
|
|
GroundSpeed=700
|
|
MeleeDamage=35
|
|
|
|
// Stats
|
|
XPValues(0)=11
|
|
XPValues(1)=11
|
|
XPValues(2)=11
|
|
XPValues(3)=11
|
|
} |