/* // Cerato Fence Rampage // */ machine CeratoFence { state FaceFence { action StopLook() action FaceTarget() transition { action SetRandomTimerBetween(2, 8.0, 10.0) goto FaceTargetWait } } state FaceTargetWait { transition HasArrived() { action SetStandStill() goto MinDistanceCheck } transition IsTimerUp(2) { action SetStandStill() goto MinDistanceCheck } } state MinDistanceCheck { transition InTargetProximityRadius(7.0) { action SetSpeedModifierWalk(1.0) action SetWalkBackMode(true) action StepBackFromTarget(20.0) action SetRandomTimerBetween(3, 4.0, 5.0) goto MinDistanceStep } transition { goto SeekFence } } state MinDistanceStep { transition InTargetProximityRadius(8.0) == false { action SetWalkBackMode(false) action SetLockFacing(false) goto SeekFence } transition IsTimerUp(3) { action SetWalkBackMode(false) action SetLockFacing(false) goto SeekFence } } state SeekFence { action SetSpeedModifier(1.5) action SetRunMode(true) transition { action SetRandomTimerBetween(1, 4.0, 5.0) goto SeekStart } } state SeekStart { transition CanBreakFence(45.0, 60.0) ;// (damage range) { goto BreakFence } transition { action SetSpeedModifier(1.0) action SetRunMode(true) action SetNumPassedParam(1) ;// for SeekFenceOffset action SetPassedParam(0, -2.5) ;// for SeekFenceOffset action SetFenceExclusion(false) action SetRandomTimerBetween(1, 4.0, 5.0) goto AttackFence } } state AttackFence { transition SeekFenceOffset(0, -0.1) { goto AttackSeekFenceLoop } transition IsTimerUp(1) { action StartLook("LookProximity", 0.5) goto FenceAttackRecoilWander } } state AttackSeekFenceLoop { transition InTargetProximityRadius(4.0) { action SetStandStill() action SetSpeedDirect(0.0) goto FenceAttackRecoil } transition HasArrived() { action SetStandStill() action SetSpeedDirect(0.0) goto FenceAttackRecoil } } state FenceAttackRecoil { ;//action PlayAnim("idle", "recl_lp", false) action PlayAnim("rcl", "lt", false) action DamageFence(0.0, true, true) action SetFenceExclusion(true) transition { goto FenceAttackRecoilLoop } } state FenceAttackRecoilLoop { transition IsAnimPlaying("idle", "recl_lp", false) == false { goto FenceAttackRecoilRoar } } state FenceAttackRecoilRoar { action PlayAnim("call", "01_lp", false) action SendEnclosureEvent("Call_angry") transition { action SetRandomTimerBetween(1, 2.0, 3.0) goto FenceAttackRecoilCallLoop } } state FenceAttackRecoilCallLoop { transition IsTimerUp(1) { action StartLook("LookProximity", 0.5) goto FenceAttackRecoilWander } } state FenceAttackRecoilWander { transition SetWander() { action SetRandomTimerBetween(1, 1.0, 1.5) action SetSpeedModifierWalk(1.0) action SetRunMode(false) goto FenceAttackRecoilWanderLoop } } state FenceAttackRecoilWanderLoop { transition IsTimerUp(1) { action SetRandomTimerBetween(1, 5.0, 10.0) goto SeekFailureWander } transition HasArrived() { action SetRandomTimerBetween(1, 5.0, 10.0) goto SeekFailureWander } } state BreakFence { action RamFence(true, 20.0) action SetSpeedModifier(1.5) action SetRunMode(true) ;//action SetAvoidanceWorld(false) transition SeekTarget(true, false) { action StopLook() goto RamWait } transition IsTimerUp(1) { action SetRandomTimerBetween(1, 10.0, 15.0) goto SeekFailureWander } } state SeekFailureWander { transition SetWander() { action SetSpeedModifier(1.0) action SetRunMode(false) goto SeekFailureWait } } state SeekFailureWait { transition HasArrived() { goto SeekFailureWander } transition IsTimerUp(1) { goto FenceExit } } state RamWait { transition InTargetProximityRadius(3.0) { action RamFence(false, 0.0) action DamageFence(10000.0, false, false) goto LeaveEnclosure } transition HasArrived() { action RamFence(false, 0.0) action DamageFence(10000.0, false, false) goto LeaveEnclosure } } state LeaveEnclosure { transition { ;//action SetAvoidanceWorld(true) ;//action SeekBehindTarget(-20.0) action SeekSetPosition() action SendEnclosureEvent("destroy_structure") goto DoNothingForNow } } state DoNothingForNow { action StartLook("LookProximity", 0.5) transition { action SetRandomTimerBetween(1, 4.0, 5.0) direct goto StressDecrLoop } } state StressDecrLoop { action UpdateDeltaVariable("Stress", -0.2) transition IsTimerUp(1) { goto FenceExit } } ;//----------------------------------------------------------------- exitstart state FenceExit { transition { action SetRandomTimerBetween(1, 15.0, 20.0) goto FenceExitWait } } state FenceExitWait { transition IsIdleLocked() == false { goto FenceExitEnd } transition IsTimerUp(1) { goto FenceExitEnd } } exitend state FenceExitEnd { action SetFenceExclusion(true) ;// will only set if scripted exited prematurely action StopLook() action SetAutoMovementBlend(true) action SetLockFacing(false) action SetWalkBackMode(false) } }