machine TriceraStress { state StressInit { action SetRageIcon(true) action SetRampageTime(300.0, true) action LockMachine(true) transition IsSteerStuck() { action SetStuckFlag(true) goto StressStart } transition { goto StressStart } } state StressStart { action SetFlockImpulse(false) action SetAutoMovementBlend(true) action ClearTarget() action SetSpeedModifierWalk(1.0) action SetRunMode(false) action SetRageIcon(true) transition AcquireFence(50, false) { call RamFence StressDecrLoop } transition { goto SetWander } } state SetWander { action StartLook("LookProximity", 0.5) transition SetWander() { goto AcquireTarget } } state AcquireTarget { transition GetRampageTime() <= 0.0 { goto StressSleep } transition IsDead() { goto StressExit } transition AcquireFence(50, false) { call RamFence StressDecrLoop } /* transition IsInGrazeArea() { goto GrazeStart } transition AcquireWaterPoint(true) { goto SeekWater } */ transition HasArrived() { goto SetWander } } state SeekWater { transition SeekWaterPoint() { goto SeekWaterLoop } transition { goto SetWander } } state SeekWaterLoop { transition GetRampageTime() <= 0.0 { goto StressSleep } transition IsDead() { goto StressExit } transition IsInWaterArea() { action FaceWaterPoint() goto FaceWater } transition HasArrived() { action FaceWaterPoint() goto FaceWater } transition AcquireWaterPoint(false) { goto SeekWaterClose } } state SeekWaterClose { transition SeekWaterPoint() { goto SeekWaterCloseLoop } transition { goto SetWander } } state SeekWaterCloseLoop { transition GetRampageTime() <= 0.0 { goto StressSleep } transition IsDead() { goto StressExit } transition IsInWaterArea() { action FaceWaterPoint() goto FaceWater } transition HasArrived() { action FaceWaterPoint() goto FaceWater } } state FaceWater { transition HasArrived() { goto Drink } } state Drink { action SendEnclosureEvent("drinking") action StopAllRandomAnimations() action SetStandStill() action StopLook() action PlayAnim("drink", "st", false) transition { goto DrinkWait } } state DrinkWait { transition IsAnimPlaying("drink", "lp", false) == true { action SetRandomTimerBetween(1, 3.0, 5.0) goto DrinkLoop } } state DrinkLoop { action UpdateDeltaVariable("Water", 0.02) action UpdateDeltaVariable("Stress", -0.05) transition IsTimerUp(1) { goto DrinkBreak } } state DrinkBreak { action StopAnimState("drink") transition { goto DrinkBreakStart } } state DrinkBreakStart { action StartLook("LookProximity", 0.5) action AddRandomAnimation("tail", "flck_lp", 3.0, 5.0) transition IsIdleLocked() == false { action SetRandomTimerBetween(1, 4.0, 6.0) goto DrinkBreakLoop } } state DrinkBreakLoop { transition GetRampageTime() <= 0.0 { goto StressSleep } transition IsDead() { goto StressExit } transition IsTimerUp(1) { goto Drink } } state StressDecrLoop { transition SetRandomTimerBetween(1, 5.0, 6.0) { goto StressTimeDecr } } state StressTimeDecr { transition GetRampageTime() <= 0.0 { goto StressSleep } transition IsDead() { goto StressExit } action UpdateDeltaVariable("Stress", -0.2) transition IsTimerUp(1) { goto StressStart } } ;//---------------------------- state GrazeStart { transition { action SetStandStill() action SetRandomTimerBetween(1, 1.0, 2.0) goto Graze } } state Graze { transition IsTimerUp(1) { action StopLook() action SendEnclosureEvent("feeding_plant") action SetAutoMovementBlend(false) action SetSpeedDirect(0.0) action SetStandStill() action PlayAnim("eat", "lo_lp", true) goto GrazeRipWait } } state GrazeRipWait { transition IsAnimPlaying("eat", "lo_lp", true) == false { action SetAutoMovementBlend(true) action SetRandomTimerBetween(1, 6.0, 9.0) action PlayAnimLooping("chew", "lp", false, -1.0, 1.0) action StartLook("LookProximity", 0.5) goto GrazeChew } } state GrazeChew { ;//action UpdateDeltaVariable("FoodEnergy", 0.01) action HerbEatTarget("grass") action UpdateDeltaVariable("Stress", -0.05) transition IsTimerUp(1) { action StopAnimState("chew") goto StressStart } } ;//----------------------------------------------------------------- state StressSleep { action StopAllRandomAnimations() action SetStandStill() action StopLook() action SetRandomTimerBetween(1, 3.0, 4.0) action SetRandomTimerBetween(3, 5.0, 10.0) action LockMachine(true) transition { goto StressSleepInit } } state StressSleepInit { transition IsNextDrive("Sedated") { action SetRampageTime(0.0, false) goto StressExit } transition IsTimerUp(1) { action SetRampageTime(0.0, false) action InitStressHealthDecr(0.5) action SetAutoMovementBlend(false) action PlayAnim("fall", "st", false) ;//action SetRandomTimerBetween(1, 280.0, 300.0) action SetRampageSleepTimer(1) action SetRandomTimerBetween(2, 3.0, 3.0) goto FallLoopWait } } state FallLoopWait { transition IsAnimPlaying("fall", "st") == false { goto SleepWait } transition IsTimerUp(2) { goto SleepWait } } state SleepWait { action UpdateRampageHealth(false) transition IsNextDrive("Dead") { direct goto SleepDead } transition IsNextDrive("Sedated") { action SetRampageTime(0.0, false) goto StressExit } transition IsTimerUp(1) { action StopAnimState("fall") goto SleepEnd } transition IsTimerUp(3) { action PlayDistressedSound(); action SetRandomTimerBetween(3, 20.0, 35.0) goto SleepWait } } state SleepDead { transition IsAnimPlaying("fall", "brth_lp", false) { action SetAutoLinkAnimOff("fall", "brth_lp", true) action StopAnimState("fall") action SetLockLastPose("fall", "brth_lp", true) action LockDeadPose() goto StressExitEnd } transition IsAnimPlaying("fall", "st", false) { action SetAutoLinkAnimOff("fall", "st", true) action StopAnimState("fall") action SetLockLastPose("fall", "st", true) action LockDeadPose() goto StressExitEnd } transition IsAnimPlaying("fall", "lp", false) { action SetAutoLinkAnimOff("fall", "lp", true) action StopAnimState("fall") action SetLockLastPose("fall", "lp", true) action LockDeadPose() goto StressExitEnd } transition { ;// hmmmm... action StopAnimState("fall") goto SleepEnd } } state SleepEnd { transition IsAnimStatePlaying("fall", false) == false { action SetAutoMovementBlend(true) action LockMachine(false) goto StressExit } } ;//----------------------------------------------------------------- exitstart state StressExit { action StopAnimState("drink") action StopAnimState("chew") action StopAnim("eat", "lo_lp") action StopAnimState("eat") action StopAnimState("fall") transition { goto StressEndWait } } state StressEndWait { transition IsAnimStatePlaying("eat", true) == true { goto StressEndWait } transition IsAnimStatePlaying("drink", true) == true { goto StressEndWait } transition IsAnimStatePlaying("fall", false) == false { action SetRandomTimerBetween(1, 20.0, 30.0) action StopLook() action SetAutoMovementBlend(true) goto StressEndIdleWait } } state StressEndIdleWait { transition IsIdleLocked() == false { goto StressExitEnd } transition IsTimerUp(1) { goto StressExitEnd } } exitend state StressExitEnd { action SetRageIcon(false) action SetFlockImpulse(true) action LockMachine(false) action SetStuckFlag(false) } }