/* // Pachy Specific Territorial Behaviour // */ machine PachyTerritory { default state TerritoryStart { action SetFlockImpulse(false) action StartLook("LookTarget", 0.5) action SetTerritoryScriptRunning(true) action SetAutoMovementBlend(true) action ClearTarget() action SetSpeedModifierWalk(1.0) action SetRunMode(false) action SetNumPassedParam(9) ;// min. same as for SpecAttk.fsm action SetPassedParam(0, 0) action SetPassedParam(1, -1) action SetPassedParam(2, 0) action SetRandomTimerBetween(1, 3.0, 4.0) transition { goto AcquireCompetitor } } state AcquireCompetitor { action AcquireTarget("competitor") transition IsTimerUp(1) { goto TerritoryExit } transition HasTarget() { goto SameSpeciesCheck } } state SameSpeciesCheck { transition IsTargetSameSpecies() { direct goto TerritoryAllowedCheck } transition { goto AcquireCompetitor } } state TerritoryAllowedCheck { transition IsTargetTerritoryAllowed() == false { action ClearTarget() goto TerritoryExit } transition { action LockTargetTerritoryBhvr(true) action SetRandomTimerBetween(1, 40.0, 60.0) action SetRandomTimerBetween(2, 10.0, 12.0) action SeekTarget(true, false) action SendEnclosureEvent("challenge_rival") goto TempWaitCompetitor } } state TempWaitCompetitor { transition IsTimerUp(2) { goto TerritoryExit } transition IsTargetTerritoryScriptRunning() { action SetFatalityAnims() goto FaceCompetitor } } state FaceCompetitor { action SendEnclosureEvent("challenge_rival") transition GetPassedParam(0) == 1 ;// victorious { goto VictoryDance } transition IsTargetTerritoryScriptRunning() == false { goto TerritoryExit } transition GetNumPassedParamTarget() != 9 { goto TerritoryExit } transition GetPassedParamTarget(0) == 1 { action SetRandomTimerBetween(3, 2.0, 3.0) goto RunAway } transition { goto CheckProximity } } state ChooseBehaviour { transition { action SetPassedParam(1, 0) direct goto SyncBehaviour } } state SyncBehaviour { transition IsTargetTerritoryScriptRunning() == false { goto TerritoryExit } transition GetNumPassedParamTarget() != 9 { goto TerritoryExit } transition GetPassedParamTarget(1) == 0 { goto StartBehaviour } transition IsTargetTerritoryBhvrLocked() == false { goto TerritoryExit } } state StartBehaviour { transition IsTargetTerritoryScriptRunning() == false { goto TerritoryExit } transition GetNumPassedParamTarget() != 9 { goto TerritoryExit } transition GetPassedParamTarget(1) == 0 { direct goto InitiateBehaviour } transition { direct goto ResponseBehaviour } } state InitiateBehaviour { transition IsTimerUp(1) { ;// victor action SetPassedParam(0, 1) action SetPassedParam(1, 2) goto Posture } /* action SetRand(0, 3) transition GetRand() == 0 { action SetPassedParam(1, 2) goto Posture } */ transition ;//GetRand() == 1 { /*action SetPassedParam(1, 3) ;//goto Snap goto FatalAttack */ direct goto FatalityCheck } /* transition { action SetPassedParam(1, 1) goto ChangePosition } */ } state FatalityCheck { transition CanPerformFatality() { action SetPassedParam(1, 3) goto FatalAttack } transition { action SetPassedParam(1, 2) goto Posture } } state ResponseBehaviour { transition IsTargetTerritoryScriptRunning() == false { goto TerritoryExit } transition GetNumPassedParamTarget() != 9 { goto TerritoryExit } transition GetPassedParamTarget(1) == 0 { direct goto InitiateBehaviour } transition GetPassedParamTarget(1) == 2 { action SetPassedParam(1, 2) goto PostureResponse } transition GetPassedParamTarget(1) == 3 { action SetPassedParam(1, 3) ;//goto SnapResponse ;// snapped at goto FatalDeath } transition { action SetPassedParam(1, 1) goto ChangePosition } } /* ------- change position */ state ChangePosition { action SetRandomTimerBetween(3, 2.0, 3.0) transition { direct goto ChangePositionStart } } state ChangePositionStart { transition SeekPosOffset(15.0, 0.7854, true, false, true) { action SetRandomTimerBetween(3, 4.0, 5.0) goto ChangePositionSeek } transition IsTimerUp(3) { goto FaceCompetitor } } state ChangePositionSeek { transition HasArrived() { goto FaceCompetitor } transition IsTimerUp(3) { goto FaceCompetitor } } /* ------- posture */ state Posture { action SetAutoMovementBlend(false) action StopLook() action PlayAnim("idle", "post_lp", false) transition { goto StandOffLoop } } state StandOffLoop { transition IsAnimPlaying("idle", "post_lp", false) == false { action SetAutoMovementBlend(true) action StartLook("LookTarget", 0.5) goto StandOffPause } } state StandOffPause { action FaceTarget() action SetRandomTimerBetween(2, 3.0, 5.0) transition { goto StandOffPauseWait } } state StandOffPauseWait { transition IsTimerUp(2) { goto FaceCompetitor } } /* ------- posture response*/ state PostureResponse { action SetSpeedModifierWalk(1.0) action SetWalkBackMode(true) action StepBackFromTarget(20.0) transition { action SetRandomTimerBetween(2, 4.0, 5.0) goto PostureResponseLoop } } state PostureResponseLoop { transition IsTimerUp(2) { direct goto PostureResponseEnd } transition HasArrived() { direct goto PostureResponseEnd } transition IsTargetTerritoryScriptRunning() == false { goto TerritoryExit } transition GetNumPassedParamTarget() != 9 { goto TerritoryExit } transition GetPassedParamTarget(1) != 2 { direct goto PostureResponseEnd } } state PostureResponseEnd { action SetRandomTimerBetween(2, 2.0, 3.0) action SetWalkBackMode(false) action SetLockFacing(false) action SetStandStill() transition { goto PostureResponseEndWait } } state PostureResponseEndWait { transition IsTimerUp(2) { goto FaceCompetitor } } /* ------- Face competitor */ state CheckProximity { action SetPassedParam(1, -1) action SeekTarget(true, true) transition InTargetProximityRadius(9.0, true) { goto StandOffFaceTarget } transition { goto SeekLoop } } state SeekLoop { transition IsTargetTerritoryScriptRunning() == false { goto TerritoryExit } transition InTargetProximityRadius(9.0, true) { goto StandOffFaceTarget } } state StandOffFaceTarget { action FaceTarget() transition { action SetRandomTimerBetween(2, 10.0, 12.0) goto StandOffFaceTargetWait } } state StandOffFaceTargetWait { transition HasArrived() { action SetStandStill() goto MinDistanceMove } transition IsTimerUp(2) { action SetStandStill() goto MinDistanceMove } } state MinDistanceMove { transition InTargetProximityRadius(7.0, false) { action SetSpeedModifierWalk(1.0) action SetWalkBackMode(true) action StepBackFromTarget(20.0) action SetRandomTimerBetween(3, 4.0, 5.0) goto MinDistanceStep } transition { goto ChooseBehaviour } } state MinDistanceStep { transition InTargetProximityRadius(7.0, false) == false { action SetWalkBackMode(false) action SetLockFacing(false) action SetStandStill() goto ChooseBehaviour } transition IsTimerUp(3) { action SetWalkBackMode(false) action SetLockFacing(false) action SetStandStill() goto ChooseBehaviour } } /* ------- snap */ state Snap { action SetSpeedModifier(1.0) action SetRunMode(true) action SeekTarget(true, true) transition { goto SnapSeekLoop } } state SnapSeekLoop { transition InTargetProximityRadius(7.0, true) { direct goto SnapSeekFacingCheck } transition HasArrived() { direct goto SnapSeekFacingCheckArrived } } state SnapSeekFacingCheck { transition IsFacingTargetUnit() { action SendEnclosureEvent("attack_rival") action PlayAnim("snap", "md_lp", false) action SetStandStill() goto SnapWait } transition { goto SeekLoop } } state SnapSeekFacingCheckArrived { transition IsFacingTargetUnit() { action PlayAnim("snap", "md_lp", false) action SetStandStill() goto SnapWait } transition { action SeekTarget(true, false) goto SeekLoop } } state SnapWait { transition IsAnimPlaying("snap", "md_lp", false) == false { action SetSpeedModifierWalk(1.0) action SetRunMode(false) action SetRandomTimerBetween(2, 1.0, 2.0) goto SnapPause } } state SnapPause { transition IsTimerUp(2) { goto FaceCompetitor } } /* ------- snap response */ state SnapResponse { transition IsAnimPlayingTarget("snap", "md_lp", false) == true { action SetRandomTimerBetween(2, 1.0, 1.1) goto RecoilWait } transition IsTargetTerritoryScriptRunning() == false { goto TerritoryExit } transition GetNumPassedParamTarget() != 9 { goto TerritoryExit } transition GetPassedParamTarget(1) != 3 { goto FaceCompetitor } } state RecoilWait { transition IsTimerUp(2) { action SetAutoMovementBlend(false) action StopLook() ;//action PlayAnim("idle", "recl_lp", false) action PlayAnim("rcl", "lt", false) goto RecoilPlayingWait } } state RecoilPlayingWait { transition IsAnimPlaying("idle", "recl_lp", false) == false { action SetAutoMovementBlend(true) action StartLook("LookTarget", 0.5) action SetRandomTimerBetween(2, 1.0, 2.0) goto RecoilPause } } state RecoilPause { transition IsTimerUp(2) { goto FaceCompetitor } } /* ------- loser */ state RunAway { action SetSpeedModifier(1.0) action SetRunMode(true) transition SeekTargetOffset(15.0, 0.0, false, false, true) { action SetRandomTimerBetween(2, 10.0, 15.0) goto RunAwayLoop } transition IsTimerUp(3) ;// in case unable to seek { goto TerritoryExit } } state RunAwayLoop { transition HasArrived() { goto TerritoryExit } transition IsTimerUp(2) { goto TerritoryExit } } /* ------- winner*/ state VictoryDance { action SetAutoMovementBlend(false) action StopLook() action PlayAnim("idle", "post_lp", false) transition { goto VictoryDanceLoop } } state VictoryDanceLoop { transition IsAnimPlaying("idle", "post_lp", false) == false { action StartLook("LookTarget", 0.5) action SetRandomTimerBetween(2, 3.0, 5.0) action SetAutoMovementBlend(true) goto VictoryDancePause } } state VictoryDancePause { transition IsTimerUp(2) { goto TerritoryExit } } /* ------- fatal attack */ state FatalAttack { transition { action SetRandomTimerBetween(4, 15.0, 17.0) goto FatalAttackMinDistanceMove } } state FatalAttackMinDistanceMove { transition IsTargetTerritoryScriptRunning() == false { goto TerritoryExit } transition GetNumPassedParamTarget() != 9 { goto TerritoryExit } transition IsTimerUp(4) { goto TerritoryExit } transition WithinTargetDistanceParam(7, -0.5, true) ;// too close { action SetSpeedModifierWalk(1.0) action SetWalkBackMode(true) action StepBackFromTarget(20.0) action SetRandomTimerBetween(3, 6.0, 6.0) goto FatalAttackMinDistanceStep } transition WithinTargetDistanceParam(7, 0.0, true) == false ;// too far { action SetSpeedModifierWalk(1.0) action SetRandomTimerBetween(3, 6.0, 6.0) action SeekTarget(true, true) goto FatalAttackStepForward } transition { goto FatalAttackFaceTarget } } state FatalAttackStepForward { transition WithinTargetDistanceParam(7, 0.0, true) { action SetSpeedDirect(0.0) action SetStandStill() goto FatalAttackMinDistanceMove } transition IsTimerUp(3) { action SetSpeedDirect(0.0) action SetStandStill() goto FatalAttackMinDistanceMove } } state FatalAttackMinDistanceStep { transition WithinTargetDistanceParam(7, -0.3, true) == false { action SetWalkBackMode(false) action SetLockFacing(false) action SetStandStill() goto FatalAttackStepForward } transition IsTimerUp(3) { action SetWalkBackMode(false) action SetLockFacing(false) action SetStandStill() goto FatalAttackStepForward } } state FatalAttackFaceTarget { action FaceTarget() action SetRandomTimerBetween(3, 0.7, 1.2) transition { goto FatalCallWait } } state FatalCallWait { transition IsTimerUp(3) { direct goto FatalCall } } state FatalCall { action SetRandomTimerBetween(2, 3.0, 3.0) transition IsAnimLoaded("idle", "post_lp") { direct goto FatalPostureCall } transition IsAnimLoaded("call", "02_lp") { action PlayAnim("call", "02_lp", false) goto FatalAttackFaceTargetWait } transition { goto FatalAttackFaceTargetWait } } state FatalPostureCall { action SetAutoMovementBlend(false) action StopLook() action PlayAnim("idle", "post_lp", false) transition { goto FatalPostureCallLoop } } state FatalPostureCallLoop { transition IsAnimPlaying("idle", "post_lp", false) == false { action SetAutoMovementBlend(true) action SetRandomTimerBetween(2, 1.0, 1.0) goto FatalAttackFaceTargetWait } } state FatalAttackFaceTargetWait { transition IsTimerUp(2) { goto FatalAttackSync } } state FatalAttackSync { action SetPassedParam(2, 1) transition { action SetStandStill() action SetSpeedDirect(0.0) action SetRandomTimerBetween(3, 12.0, 15.0) direct goto FatalSyncWait } } state FatalSyncWait { transition GetNumPassedParamTarget() != 9 { goto TerritoryExit } transition GetPassedParamTarget(2) == 1 { direct goto StartFatalAttack } transition IsTimerUp(3) { goto TerritoryExit } } state StartFatalAttack { action SetAutoMovementBlend(false) action StopLook() action StopAllUserAnimations() action SetInterpolation(true) action SetAvoidanceSteer(false) ;//action SetAesPosInterp(false) action PlayAnimParam(3, 4, false, 0.0) transition { goto FatalAttackLoop } } state FatalAttackLoop { transition IsAnimPlayingParam(3, 4, false) == false { action SetRandomTimerBetween(3, 1.0, 1.0) goto FatalPosture } } state FatalPosture { transition IsTimerUp(3) { action SetInterpolation(false) action SetInterpolationTarget(false) action SetAvoidanceSteer(true) action SetTransfromFromLocator("D", true) action StopAnimInstantParam(3, 4) action SetAutoMovementBlend(true) action PlayAnimInstant("idle", "brth_lp", false) action SetStandStill() action SetRandomTimerBetween(3, 1.0, 1.0) goto FatalPostureStartWait } } state FatalPostureStartWait { transition IsTimerUp(3) { action SetAutoMovementBlend(false) action PlayAnimInstant("idle", "post_lp", false) goto FatalPostureWait } } state FatalPostureWait { transition IsAnimPlaying("idle", "post_lp", false) == false { action SetAutoMovementBlend(true) goto TerritoryExit } } /* ------- fatal death */ state FatalDeath { transition { action SetRandomTimerBetween(4, 15.0, 17.0) goto FatalDeathMinDistanceMove } } state FatalDeathMinDistanceMove { transition IsTargetTerritoryScriptRunning() == false { goto TerritoryExit } transition GetNumPassedParamTarget() != 9 { goto TerritoryExit } transition IsTimerUp(4) { goto TerritoryExit } transition WithinTargetDistanceParam(7, -0.5, true) ;// too close { action SetSpeedModifierWalk(1.0) action SetWalkBackMode(true) action StepBackFromTarget(20.0) action SetRandomTimerBetween(3, 6.0, 6.0) goto FatalDeathMinDistanceStep } transition WithinTargetDistanceParam(7, 0.0, true) == false ;// too far { action SetSpeedModifierWalk(1.0) action SetRandomTimerBetween(3, 6.0, 6.0) action SeekTarget(true, true) goto FatalDeathStepForward } transition { goto FatalDeathFaceTarget } } state FatalDeathStepForward { transition WithinTargetDistanceParam(7, 0.0, true) { action SetSpeedDirect(0.0) action SetStandStill() goto FatalDeathMinDistanceMove } transition IsTimerUp(3) { action SetSpeedDirect(0.0) action SetStandStill() goto FatalDeathMinDistanceMove } } state FatalDeathMinDistanceStep { transition WithinTargetDistanceParam(7, -0.3, true) == false { action SetWalkBackMode(false) action SetLockFacing(false) action SetStandStill() goto FatalDeathStepForward } transition IsTimerUp(3) { action SetWalkBackMode(false) action SetLockFacing(false) action SetStandStill() goto FatalDeathStepForward } } state FatalDeathFaceTarget { action FaceTarget() action SetRandomTimerBetween(2, 3.0, 3.0) transition IsAnimLoaded("call", "02_lp") { action PlayAnim("call", "02_lp", false) goto FatalDeathFaceTargetWait } transition IsAnimLoaded("call", "f") { action PlayAnim("call", "f", false) goto FatalDeathFaceTargetWait } transition { goto FatalDeathFaceTargetWait } } state FatalDeathFaceTargetWait { transition IsTimerUp(2) { goto FatalDeathSync } } state FatalDeathSync { action SetPassedParam(2, 1) transition { action SetStandStill() action SetSpeedDirect(0.0) action SetRandomTimerBetween(3, 15.0, 17.0) direct goto FatalDeathSyncWait } } state FatalDeathSyncWait { transition GetNumPassedParamTarget() != 9 { goto TerritoryExit } transition GetPassedParamTarget(2) == 1 { direct goto StartFatalDeath } transition IsTimerUp(3) { goto TerritoryExit } } state StartFatalDeath { action SetAutoMovementBlend(false) action StopLook() action StopAllUserAnimations() action SetInterpolation(true) action SetAvoidanceSteer(false) ;//action SetAesPosInterp(false) action PlayAnimParam(5, 6, false, 0.0) transition { goto FatalDeathLoop } } state FatalDeathLoop { transition IsAnimPlayingParam(5, 6, false) == false { action SetInterpolation(false) action SetInterpolationTarget(false) action SetTransfromFromLocator("D", true) action StopAnimInstantParam(5, 6) action SetAutoMovementBlend(true) ;// action PlayAnimInstant("idle", "brth_lp", false) action SetStandStill() action SetRandomTimerBetween(3, 5.0, 6.0) direct goto LoserRunAway } } state LoserRunAway { action AvoidTarget(20.0, true) transition InTargetProximity(19.5) == false { goto TerritoryExit } transition IsTimerUp(3) { goto TerritoryExit } } ;//----------------------------------------------------------------- exitstart state TerritoryExit { action SetAutoMovementBlend(true) action StopLook() transition { goto TerritoryExitEnd } } exitend state TerritoryExitEnd { action SetInterpolation(false) action SetAvoidanceSteer(true) action SetLockFacing(false) action SetWalkBackMode(false) action UpdateVariable("territory", -1.0) action LockTargetTerritoryBhvr(false) action SetTerritoryScriptRunning(false) action SetFlockImpulse(true) ;//action SetAesPosInterp(true) } }