/* Generic Herbivore Dead Behaviour // */ machine HerbDead { default state DeadStart { action LockMachine(true) transition WantDeadCollision() { action SetMass(50000.0) action ScaleDeathRadius(0.5) direct goto DeadPlay } transition { action SetAvoidanceSteer(false) direct goto DeadPlay } } state DeadPlay { action LeaveFlock() action SetSpeedDirect(0.0) action SetStandStill() transition IsDeadPoseLocked() { ;//action Print("Dead Pose Is Locked, Dont play fall anim\n") goto DeadLoop } action StopLook() action SetAutoMovementBlend(false) action StopAllUserAnimations(true) transition IsKillCause("retired") { direct goto HitPlay } transition { direct goto FallInit } } state HitPlay { transition IsAnimLoaded("hit", "lt")==false { direct goto FallInit } transition IsAnimLoaded("hit", "rt")==false { direct goto FallInit } action SetRand(0, 3) transition GetRand() == 0 { action PlayAnim("hit", "lt", true, 0.0) action SetLockLastPose("hit", "lt", true) goto HitWait } transition GetRand() == 1 { action PlayAnim("hit", "rt", true, 0.0) action SetLockLastPose("hit", "rt", true) goto HitWait } transition { direct goto FallInit } } state HitWait { transition IsAnimStatePlaying("hit") == false { action LockDeadPose() goto DeadLoop } } state FallInit { action PlayAnim("fall", "st", true, 0.0) action SetLockLastPose("fall", "st", true) action SetAutoLinkAnimOff("fall", "st", true) transition { goto FallWait } } state FallWait { transition IsAnimPlaying("fall", "st", true) == false { action LockDeadPose() goto DeadLoop } } state DeadLoop { transition { ;//action SetRandomTimerBetween(1, 5.0, 7.0) ;// for testing now until mat lib is available ;//action SetRandomTimerBetween(1, 120.0, 150.0) ;// for testing now until mat lib is available action SetDeadTranslate() action StartDecay() action PlaySound("SFX_CORPSE_FLIES", 0.001) action SetRandomTimerBetween(1, 2.0, 2.0) goto Decay } } state Decay { ;//transition IsTimerUp(1) ;// for testing now until mat lib is available transition UpdateDecay() { action StopDecay() goto DecayDone } transition IsTimerUp(1) { action SetRandomTimerBetween(1, 2.0, 2.0) action SetDeadTranslate() goto Decay } } state DecayDone { action StopLoopingSound("SFX_CORPSE_FLIES") action DestroyMyself() transition { goto DestroyWait } } state DestroyWait { } ;------------------------ Exit States Begin ---------------------- exitstart state CleanUp { transition { goto CleanUpEnd } } exitend state CleanUpEnd { action StopDecay() action SetAutoMovementBlend(true) } ;------------------------ Exit States End ---------------------- }