package RoyceExo
using RTDB, AIActionTarget, StatusEffectActions, ReactionsActions

Map : ActionMap
{
	defaultMap = 
	{
		map = 
		[
			{
				node = "GenericArchetype.SE_Pain";
				isOverriddenBy = "RoyceExo.SE_Pain";
			}, 
			{
				node = "GenericArchetype.SE_PainWorkspot";
				isOverriddenBy = "RoyceExo.SE_PainWorkspot";
			}, 
			{
				node = "GenericArchetype.SE_Stun";
				isOverriddenBy = "RoyceExo.SE_Stun";
			}, 
			{
				node = "GenericArchetype.SE_DefeatedStartup";
				isOverriddenBy = "RoyceExo.SE_DefeatedStartup";
			}, 
			{
				node = "GenericArchetype.SE_DefeatedLoop";
				isOverriddenBy = "RoyceExo.SE_DefeatedLoop";
			}, 
			{
				node = "GenericArchetype.SE_DefeatedRecover";
				isOverriddenBy = "RoyceExo.SE_DefeatedRecover";
			}, 
			{
				node = "StatusEffectActions.SE_Burning";
				isOverriddenBy = "RoyceExo.SE_Burning";
			}, 
			{
				node = "StatusEffectActions.SE_Poisoned";
				isOverriddenBy = "RoyceExo.SE_Poisoned";
			}, 
			{
				node = "StatusEffectActions.SE_QuickHackStaggerLocomotion";
				isOverriddenBy = "RoyceExo.SE_QuickHackStaggerLocomotion";
			}, 
			{
				node = "StatusEffectActions.SE_QuickHackFreezeLocomotion";
				isOverriddenBy = "RoyceExo.SE_QuickHackFreezeLocomotion";
			}, 
			{
				node = "StatusEffectActions.SE_Whistle";
				isOverriddenBy = "RoyceExo.SE_Whistle";
			}, 
			{
				node = "StatusEffectActions.SE_CombatWhistle";
				isOverriddenBy = "RoyceExo.SE_CombatWhistle";
			}, 
			{
				node = "StatusEffectActions.SE_CommsNoise";
				isOverriddenBy = "RoyceExo.SE_CommsNoise";
			}, 
			{
				node = "GenericArchetype.SE_WeaponJammed";
				isOverriddenBy = "RoyceExo.SE_WeaponJammed";
			}, 
			{
				node = "StatusEffectActions.SE_WeaponJammedBlowUpWeapon";
				isOverriddenBy = "RoyceExo.SE_WeaponJammedBlowUpWeapon";
			}, 
			{
				node = "StatusEffectActions.SE_WeaponJammedBlowUpWeaponSelector";
				isOverriddenBy = "RoyceExo.SE_WeaponJammedSelector";
			}, 
			{
				node = "StatusEffectActions.SE_CommsNoise";
				isOverriddenBy = "RoyceExo.SE_CommsNoise";
			}, 
			{
				node = "GenericArchetype.SE_Blind";
				isOverriddenBy = "RoyceExo.SE_Blind";
			}, 
			{
				node = "StatusEffectActions.SE_BrainMelt";
				isOverriddenBy = "RoyceExo.SE_BrainMelt";
			}, 
			{
				node = "StatusEffectActions.SE_QuickHackStaggerCyberware";
				isOverriddenBy = "RoyceExo.SE_QuickHackStaggerCyberware";
			}, 
			{
				node = "ReactionsActions.PanicSelector";
				isOverriddenBy = "RoyceExo.PanicSelector";
			}, 
			{
				node = "ReactionsActions.RunAwayFromGrenade";
				isOverriddenBy = "RoyceExo.RunAwayFromGrenade";
			}, 
			{
				node = "ReactionsActions.HearFootstepsUnarmed";
				isOverriddenBy = "RoyceExo.HearFootstepsUnarmed";
			}, 
			{
				node = "ReactionsActions.HearFootstepsArmedPatrol";
				isOverriddenBy = "RoyceExo.HearFootstepsArmedPatrol";
			}, 
			{
				node = "ReactionsActions.HearFootstepsArmedSearch";
				isOverriddenBy = "RoyceExo.HearFootstepsArmedSearch";
			}, 
			{
				node = "ReactionsActions.AnswerCall";
				isOverriddenBy = "RoyceExo.AnswerCall";
			}, 
			{
				node = "ReactionsActions.CallSquadTalk";
				isOverriddenBy = "RoyceExo.CallSquadTalk";
			}, 
			{
				node = "ReactionsActions.HearGunshotSelector";
				isOverriddenBy = "RoyceExo.HearGunshotSelector";
			}, 
			{
				node = "ItemHandling.EquipSelector";
				isOverriddenBy = "RoyceExo.EquipSelector";
			}, 
			{
				node = "ReactionsActions.LookAroundForIntruder";
				isOverriddenBy = "RoyceExo.LookAroundForIntruder";
			}, 
			{
				node = "ReactionsActions.LookAroundForIntruderUnarmed";
				isOverriddenBy = "RoyceExo.LookAroundForIntruderUnarmed";
			}, 
			{
				node = "ReactionsActions.LookAroundForWhistle";
				isOverriddenBy = "RoyceExo.LookAroundForWhistle";
			}, 
			{
				node = "ReactionsActions.BodyInvestigationSearchComposite";
				isOverriddenBy = "RoyceExo.BodyInvestigationSearchComposite";
			}, 
			{
				node = "ReactionsActions.HearDeviceNoiseSelector";
				isOverriddenBy = "RoyceExo.HearDeviceNoiseSelector";
			}, 
			{
				node = "ReactionsActions.HearDeviceNoiseBack";
				isOverriddenBy = "RoyceExo.HearDeviceNoiseBack";
			}, 
			{
				node = "ReactionsActions.HearDeviceNoiseFront";
				isOverriddenBy = "RoyceExo.HearDeviceNoiseFront";
			}, 
			{
				node = "ReactionsActions.DeviceInvestigationHigh";
				isOverriddenBy = "RoyceExo.HearDeviceNoiseBack";
			}, 
			{
				node = "ReactionsActions.DeviceInvestigationHighUnarmed";
				isOverriddenBy = "RoyceExo.HearDeviceNoiseBack";
			}, 
			{
				node = "ReactionsActions.DeviceInvestigationLow";
				isOverriddenBy = "RoyceExo.HearDeviceNoiseBack";
			}, 
			{
				node = "ReactionsActions.DeviceInvestigationLowUnarmed";
				isOverriddenBy = "RoyceExo.HearDeviceNoiseBack";
			}, 
			{
				node = "ReactionsActions.DeviceInvestigation";
				isOverriddenBy = "RoyceExo.HearDeviceNoiseBack";
			}, 
			{
				node = "ReactionsActions.DeviceInvestigationUnarmed";
				isOverriddenBy = "RoyceExo.HearDeviceNoiseBack";
			}, 
			{
				node = "ReactionsActions.DeviceInvestigationLookat";
				isOverriddenBy = "RoyceExo.DeviceInvestigationLookat";
			}, 
			{
				node = "ReactionsActions.MoveToStimSourceInvestigate";
				isOverriddenBy = "RoyceExo.RotateToStim";
			}, 
			{
				node = "ReactionsActions.DeviceInvestigationBossCustomSequence";
				isOverriddenBy = "RoyceExo.BossInvestigateCustomComposite";
			}, 
			{
				node = "StatusEffectActions.SE_SystemCollapseAndroid";
				isOverriddenBy = "RoyceExo.SE_SystemCollapseBossMitigated";
			}, 
			{
				node = "StatusEffectActions.SE_SystemCollapseMech";
				isOverriddenBy = "RoyceExo.SE_SystemCollapse";
			}, 
			{
				node = "StatusEffectActions.SE_SystemCollapseBossMitigated";
				isOverriddenBy = "RoyceExo.SE_SystemCollapse";
			}, 
			{
				node = "StatusEffectActions.SE_SystemCollapseBoss";
				isOverriddenBy = "RoyceExo.SE_SystemCollapse";
			}, 
			{
				node = "StatusEffectActions.SE_SystemCollapse";
				isOverriddenBy = "RoyceExo.SE_SystemCollapse";
			}, 
			{
				node = "StatusEffectActions.SE_BlackwallDamage";
				isOverriddenBy = "RoyceExo.SE_BlackwallDamage";
			}, 
			{
				node = "GenericArchetype.SE_Madness";
				isOverriddenBy = "RoyceExo.SE_Madness";
			}, 
			{
				node = "GenericArchetype.SE_WeaponJammed";
				isOverriddenBy = "RoyceExo.SE_WeaponJammed";
			}
		];
	};
}

test1 : AIAction
{
	startup = 
	{
		duration = 0.7f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
		};
	};
	loop = 
	{
		duration = 0.4f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
		};
	};
	recovery = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.StompAttackStagger";
			attackRange = 5.f;
			attackTime = 0.f;
			attackName = "ShieldAttack";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "MeleeAttack";
		animSlot = 
		{
		};
	};
}

ReevaluationBreak : AIAction
{
	loop = 
	{
		duration = 0.1f;
	};
}

ApplyControlHackReactionImmunity : AIStatusEffectAction
{
	loop = 
	{
		duration = 0.01f;
	};
	loopSubActions = 
	[
		{
			statusEffects = 
			[
				"BaseStatusEffect.BossControlhackReactionImmunity"
			];
			remove = false;
		} : AISubActionStatusEffect
	];
}

SE_BlackwallDamage : AIQuickhackDefaultAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = [];
		} : AIActionAND;
	};
	startup = 
	{
		useDurationFromAnimSlot = false;
		duration = 0.333f;
		changeNPCState = 
		{
			upperBodyState = "Taunt";
			hitReactionMode = "Unstoppable";
		};
	};
	loop = 
	{
		useDurationFromAnimSlot = false;
		duration = 7.7f;
		changeNPCState = 
		{
			upperBodyState = "Taunt";
			hitReactionMode = "Unstoppable";
		};
	};
	recovery = 
	{
		useDurationFromAnimSlot = false;
		duration = 0.333f;
		changeNPCState = 
		{
			upperBodyState = "Taunt";
			hitReactionMode = "Unstoppable";
		};
	};
	animData = 
	{
		animFeature = "SE_Poisoned";
		animSlot = 
		{
		};
	};
	loopSubActions = 
	[
		{
			effectors = 
			[
				"Effectors.BossBlackWallAttack"
			];
			float delay = 0.f;
		} : AISubActionCustomEffectors
	];
	subActions += 
	[
		{
			stimSource = "AIActionTarget.Owner";
			stimType = "StimTypes.Scream";
		} : AISubActionTriggerStim, 
		{
			name = "black_wall_activation";
		} : AISubActionSpawnFX, 
		{
			name = "black_wall";
		} : AISubActionSpawnFX
	];
}

SE_MadnessCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			OR = 
			[
				"Condition.StatusEffectTypeMadness"
			];
		} : AIActionOR;
	};
}

SE_Madness : AIStatusEffectAction
{
	activationCondition = 
	{
		condition = 
		{
			OR = 
			[
				"Condition.StatusEffectTypeMadness"
			];
		} : AIActionOR;
	};
	loop = 
	{
		duration = 1.5f;
	};
	loopSubActions = 
	[
		{
			statusEffects = 
			[
				"BaseStatusEffect.BossNoInterrupt"
			];
			remove = false;
		} : AISubActionStatusEffect, 
		{
			name = "hacks_system_collapse";
		} : AISubActionSpawnFX
	];
	animData = 
	{
		animFeature = "SE_Pain";
		animSlot = 
		{
		};
	};
}

SE_SystemCollapse : AIStatusEffectAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.StatusEffectBossSystemCollapse", "Condition.NotStatusEffectBossSystemCollapseHackReactionImmunity"
			];
		} : AIActionAND;
	};
	startup = 
	{
		useDurationFromAnimSlot = false;
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Taunt";
			hitReactionMode = "Unstoppable";
		};
	};
	loop = 
	{
		useDurationFromAnimSlot = false;
		duration = 8.f;
		changeNPCState = 
		{
			upperBodyState = "Taunt";
			hitReactionMode = "Unstoppable";
		};
	};
	recovery = 
	{
		useDurationFromAnimSlot = false;
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Taunt";
			hitReactionMode = "Unstoppable";
		};
	};
	animData = 
	{
		animFeature = "SE_Poisoned";
		animSlot = 
		{
		};
	};
	subActions = 
	[
		{
			name = "death_sparks";
		} : AISubActionSpawnFX, 
		{
			name = "status_electrocuted";
		} : AISubActionSpawnFX, 
		{
			name = "status_emp";
		} : AISubActionSpawnFX
	];
	recoverySubActions = 
	[
		{
			statusEffects = 
			[
				"BaseStatusEffect.BossSystemCollapseHackReactionImmunity"
			];
			apply = true;
			remove = false;
			delay = 0.5f;
		} : AISubActionStatusEffect
	];
}

SE_SystemCollapseBossMitigated : AIStatusEffectAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.StatusEffectBossSystemCollapse", "Condition.StatusEffectBossSystemCollapseHackReactionImmunity"
			];
		} : AIActionAND;
	};
	loop = 
	{
		duration = 3.f;
		changeNPCState = 
		{
			upperBodyState = "Taunt";
			hitReactionMode = "Unstoppable";
		};
	};
	subActions = 
	[
		{
			name = "death_sparks";
		} : AISubActionSpawnFX
	];
	animData = 
	{
		animFeature = "StaggerFront";
		animSlot = 
		{
		};
	};
}

IsNotShootingCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotTargetInStatesShoot"
			];
		} : AIActionAND;
	};
}

SE_QuickHackStaggerCyberware : AIQuickhackDefaultAction
{
	activationCondition = 
	{
		condition = 
		{
			OR = 
			[
				"Condition.StatusEffectCyberwareMalfunction", "Condition.StatusEffectCyberwareMalfunctionLvl1", "Condition.StatusEffectCyberwareMalfunctionLvl2", "Condition.StatusEffectCyberwareMalfunctionLvl3", "Condition.StatusEffectCyberwareMalfunctionLvl4", "Condition.StatusEffectCyberwareMalfunctionLvl4PlusPlus"
			];
		} : AIActionOR;
	};
	loop = 
	{
		duration = 0.01f;
	};
}

SE_BrainMelt : AIActionSelector
{
	actions = 
	[
		"StatusEffectActions.SE_BrainMeltArmed"
	];
}

SE_BrainMeltArmed : AIStatusEffectAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.StatusEffectTypeBrainMelt"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.333f;
	};
	loop = 
	{
		duration = 11.667f;
	};
	recovery = 
	{
		duration = 0.333f;
	};
	subActions += 
	[
		{
			stimSource = "AIActionTarget.Owner";
			stimType = "StimTypes.Scream";
		} : AISubActionTriggerStim
	];
	animData = 
	{
		animFeature = "SE_CommsNoise";
		animSlot = 
		{
		};
	};
}

SE_Blind : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SE_BlindQuickhack", "RoyceExo.SE_BlindArmed"
	];
}

HearFootstepsUnarmed : AIAction
{
	loop = 
	{
		duration = 0.01f;
	};
}

HearFootstepsArmedPatrol : AIAction
{
	loop = 
	{
		duration = 0.01f;
	};
}

HearFootstepsArmedSearch : AIAction
{
	loop = 
	{
		duration = 0.01f;
	};
}

PanicSelector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.RotateToStim", "GenericArchetype.Success"
	];
}

BodyInvestigationSearchComposite : AIActionSmartComposite
{
	nodes = 
	[
		"RoyceExo.BodyInvestigateSearch", "GenericArchetype.Success"
	];
}

BodyInvestigateSearch : AIActionSequence
{
	actions = 
	[
		"RoyceExo.LookAroundForIntruder", "GenericArchetype.Success"
	];
}

LookAroundForIntruder : AIAction
{
	activationCondition = 
	{
		condition = "Condition.NotIsUsingOffMeshLink";
	};
	startup = 
	{
		duration = 2.1f;
	};
	loop = 
	{
		useDurationFromAnimSlot = false;
		duration = 0.f;
	};
	recovery = 
	{
		duration = 2.167f;
	};
	subActions = 
	[
		"ReactionsActions.PlayStealthSearchVoiceOver"
	];
	animData = 
	{
		animFeature = "Investigation";
		animSlot = 
		{
		};
	};
}

LookAroundForWhistle : RoyceExo.LookAroundForIntruder
{
	activationCondition = 
	{
		condition = "Condition.StatusEffectWhistleTurnAway";
	};
	startup = 
	{
		duration = 1.1f;
	};
	loop = 
	{
		useDurationFromAnimSlot = false;
		duration = 0.f;
	};
	recovery = 
	{
		duration = 1.1f;
	};
	subActions = [];
}

LookAroundForIntruderUnarmed : AIAction
{
	activationCondition = 
	{
		condition = "Condition.NotIsUsingOffMeshLink";
	};
	startup = 
	{
		duration = 2.1f;
	};
	loop = 
	{
		duration = 2.1f;
	};
	recovery = 
	{
		duration = 2.167f;
	};
	subActions = 
	[
		"ReactionsActions.PlayStealthSearchVoiceOver"
	];
	animData = 
	{
		animFeature = "Investigation";
		animSlot = 
		{
		};
	};
}

HearGunshotSelector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.RotateToStim", "GenericArchetype.Success"
	];
}

RunAwayFromGrenade : AIActionSelector
{
	actions = 
	[
		"GenericArchetype.Success"
	];
}

AnswerCall : ReactionsActions.AnswerCall
{
	animData = 
	{
	};
}

CallSquadTalk : ReactionsActions.CallSquadTalk
{
	animData = 
	{
		animFeature = "Investigation";
		animSlot = 
		{
		};
	};
}

SE_BlindBase : AIAction
{
	startup = 
	{
		duration = 2.f;
	};
	loop = 
	{
		duration = 6.f;
	};
	recovery = 
	{
		duration = 2.f;
	};
	recoverySubActions = 
	[
		{
			statusEffects = 
			[
				"BaseStatusEffect.QuickHackBlind"
			];
			apply = false;
		} : AISubActionStatusEffect, 
		{
			statusEffects = 
			[
				"BaseStatusEffect.QuickHackBlindLevel2"
			];
			apply = false;
		} : AISubActionStatusEffect, 
		{
			statusEffects = 
			[
				"BaseStatusEffect.QuickHackBlindLevel3"
			];
			apply = false;
		} : AISubActionStatusEffect, 
		{
			statusEffects = 
			[
				"BaseStatusEffect.QuickHackBlindLevel4"
			];
			apply = false;
		} : AISubActionStatusEffect
	];
	subActions = 
	[
		{
			stimSource = "AIActionTarget.Owner";
			stimType = "StimTypes.Hacked";
		} : AISubActionTriggerStim, 
		{
			name = "greeting";
			delay = 0.f;
		} : AISubActionPlayVoiceOver, 
		{
			name = "boss_blinded";
		} : AISubActionAddFact
	];
	animData = 
	{
		animFeature = "SE_Blind";
		animSlot = 
		{
		};
	};
}

SE_BlindArmed : RoyceExo.SE_BlindBase
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.IsNPCBlindedRegular"
			];
		} : AIActionAND;
	};
}

SE_BlindQuickhack : RoyceExo.SE_BlindBase
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.IsNPCBlindedFromQuickhack"
			];
		} : AIActionAND;
	};
}

SE_Burning : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SE_BurningReaction"
	];
}

SE_BurningReaction : AIStatusEffectAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.IsNPCBurning"
			];
		} : AIActionAND;
	};
	loop = 
	{
		duration = 4.9f;
	};
	animData = 
	{
		animFeature = "SE_Burning";
		animSlot = 
		{
		};
	};
}

SE_Poisoned : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SE_PoisonedReaction"
	];
}

SE_PoisonedReaction : AIStatusEffectAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.StatusEffectTypePoisoned"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.633f;
		toNextPhaseConditionCheckInterval = 0.25f;
		toNextPhaseCondition = 
		[
			{
				condition = "Condition.InStatesStatic";
			}
		];
	};
	loop = 
	{
		duration = 4.533f;
	};
	animData = 
	{
		animFeature = "SE_Poisoned";
		animSlot = 
		{
		};
	};
}

SE_WeaponJammedBlowUpWeapon : AIQuickhackDefaultAction
{
}

SE_WeaponJammedSelector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SE_WeaponJammed"
	];
}

SE_WeaponJammed : AIQuickhackDefaultAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.IsNPCUnderWeaponMalfunctionQuickhack"
			];
		} : AIActionAND;
	};
	loop = 
	{
		duration = 3.333f;
	};
	subActions = 
	[
		{
			delay = 0.1f;
			statusEffects = 
			[
				"BaseStatusEffect.BossControlhackReactionImmunity"
			];
			apply = true;
			remove = false;
		} : AISubActionStatusEffect, 
		{
			CName name = "hacks_weapon_malfunction";
		} : AISubActionSpawnFX, 
		{
			CName name = "weapon_overload";
		} : AISubActionSpawnFX
	];
	animData = 
	{
		animFeature = "SE_WeaponJammed";
		animSlot = 
		{
		};
	};
}

SE_CommsNoise : AIStatusEffectAction
{
	activationCondition = 
	{
		condition = 
		{
			OR = 
			[
				"Condition.IsNPCUnderWeaponMalfunctionQuickhack"
			];
		} : AIActionOR;
	};
	startup = 
	{
		duration = 0.567f;
	};
	loop = 
	{
		duration = 1.833f;
		toNextPhaseConditionCheckInterval = 0.25f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.NotCommNoise", "Condition.InStatesCombat"
					];
				} : AIActionOR;
			}
		];
	};
	recovery = 
	{
		duration = 2.133f;
	};
	subActions = 
	[
		{
			name = "stlh_curious_grunt";
			delay = 0.3f;
		} : AISubActionPlayVoiceOver
	];
	animData = 
	{
		animFeature = "SE_CommsNoise";
		animSlot = 
		{
		};
	};
}

SE_Stun : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SE_StunArmed"
	];
}

SE_StunArmed : AIAction
{
	startup = 
	{
		duration = 3.f;
	};
	subActions = 
	[
		{
			stimSource = "AIActionTarget.Owner";
			stimType = "StimTypes.Attention";
		} : AISubActionTriggerStim, 
		{
			name = "status_stunned";
		} : AISubActionSpawnFX, 
		{
			name = "headshot";
		} : AISubActionSpawnFX, 
		{
			name = "death_sparks";
		} : AISubActionSpawnFX, 
		{
			name = "weapon_overload";
		} : AISubActionSpawnFX
	];
	animData = 
	{
		animFeature = "RoyceStunArmed";
		animSlot = 
		{
		};
	};
	loop = 
	{
		duration = 5.f;
	};
}

SE_StunUnArmed : RoyceExo.SE_StunArmed
{
}

EnragedCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotHasExoWeakspot"
			];
		} : AIActionAND;
	};
	loop = 
	{
		duration = 0.01f;
	};
}

InitalCombatActions : AIActionSmartComposite
{
	type = "AISmartCompositeType.Sequence";
	nodes = 
	[
		"RoyceExo.SetInitialTauntCooldown", "RoyceExo.SetSpecialAttackCooldown", "GenericArchetype.Success"
	];
}

PatternSequence01 : AIActionSmartComposite
{
	type = "AISmartCompositeType.SequenceWithSmartMemory";
	nodes = 
	[
		"RoyceExo.JumpAttack", "RoyceExo.SingleMeleeAttackStrongSequence", "RoyceExo.JumpAttack", "RoyceExo.AimAttackSequence", "RoyceExo.JumpAttack", "RoyceExo.SingleMeleeAttackStrongSequence", "RoyceExo.JumpAttack", "RoyceExo.JumpAttack", "RoyceExo.SingleMeleeAttackStrongSequence", "RoyceExo.JumpAttack", "RoyceExo.AimAttackSequence", "RoyceExo.JumpAttack", "RoyceExo.SingleMeleeAttackStrongSequence", "RoyceExo.JumpAttack", "RoyceExo.JumpAttack", "RoyceExo.SpecialAttackSequence", "GenericArchetype.Success"
	];
}

IdleSequenceTimer : AIAction
{
	loop = 
	{
		duration = 1.5f;
	};
}

WalkSequenceTimer : AIAction
{
	loop = 
	{
		duration = 7.5f;
	};
}

RotateToTargetSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.RotateToTarget", "GenericArchetype.Success"
	];
}

RotateToTargetShootSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.RotateToTargetShoot", "GenericArchetype.Success"
	];
}

RotateToTargetShootCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove90deg"
			];
		} : AIActionAND;
	};
}

RotateToTargetShoot : AIAction
{
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Normal";
		};
		movePolicy = 
		{
			target = "AIActionTarget.Owner";
			movementType = "Walk";
			tolerance = 50.f;
			distance = 0.f;
			dontUseStart = true;
			dontUseStop = true;
		};
		toNextPhaseConditionCheckInterval = 0.5f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow15deg"
					];
				} : AIActionOR;
			}
		];
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

RotateToTargetShootLeft : RotateToTargetShoot
{
	animData = 
	{
		animFeature = "TurtleRotateLeft";
	};
}

RotateToTargetShootRight : RotateToTargetShoot
{
	animData = 
	{
		animFeature = "TurtleRotateRight";
	};
}

RotateToTargetCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove120deg"
			];
		} : AIActionAND;
	};
}

RotateToTargetNoLimitCondition : RotateToTargetCondition
{
}

RotateToTargetNoLimitNoStraightPath : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotCalculatePathStraightToTarget", "Condition.TargetAbove120deg"
			];
		} : AIActionAND;
	};
}

RotateToTarget : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove120deg"
			];
		} : AIActionAND;
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Normal";
		};
		movePolicy = 
		{
			strafingTarget = "AIActionTarget.CombatTarget";
			tolerance = 50.f;
		};
		toNextPhaseConditionCheckInterval = 0.5f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow90deg", "Condition.TargetBelow3m"
					];
				} : AIActionOR;
			}
		];
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

RotateToTargetNoLimit : RotateToTarget
{
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Normal";
		};
		duration = 2.f;
		movePolicy = 
		{
			strafingTarget = "AIActionTarget.CombatTarget";
			deadAngle = 65.f;
			tolerance = 50.f;
		};
		toNextPhaseConditionCheckInterval = 0.5f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow90deg"
					];
				} : AIActionOR;
			}
		];
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

RotateToStim : RotateToTarget
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.StimSource"
			];
		} : AIActionAND;
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Normal";
		};
		movePolicy = 
		{
			strafingTarget = "AIActionTarget.StimTarget";
			tolerance = 50.f;
		};
		toNextPhaseConditionCheckInterval = 0.5f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetStimBelow90deg", "Condition.StimTargetBelow3m"
					];
				} : AIActionOR;
			}
		];
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.StimTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.StimTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.StimTarget";
		}
	];
}

WalkToTargetNoPathSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.WalkToTargetNoPath", "GenericArchetype.Success"
	];
}

WalkToTargetNoPath : AIAction
{
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Normal";
		};
		movePolicy = 
		{
			target = "AIActionTarget.CombatTarget";
			strafingTarget = "AIActionTarget.CombatTarget";
			keepLineOfSight = "Keep";
			movementType = "Walk";
			tolerance = 10.f;
			distance = 5.f;
		};
		toNextPhaseConditionCheckInterval = 0.2f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.InStatesStatic"
					];
				} : AIActionOR;
			}
		];
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

MovementCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotMoveCommands", "Condition.NotAIHoldPositionCommand", "Condition.NotInStatesStatic"
			];
		} : AIActionAND;
	};
}

NotLocomotionMalfunctionCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotStatusEffectTypeLocomotionMalfunction"
			];
		} : AIActionAND;
	};
}

LocomotionMalfunctionCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			OR = 
			[
				"Condition.StatusEffectTypeLocomotionMalfunction"
			];
		} : AIActionOR;
	};
}

WalkToTargetSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.WalkToTarget", "GenericArchetype.Success"
	];
}

WalkToTargetCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove10m", "Condition.TargetBelow120deg", "Condition.CalculatePathStraightToTarget", "Condition.NotStatusEffectTypeLocomotionMalfunction"
			];
		} : AIActionAND;
	};
}

WalkToTargetConditionNoStraightPath : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow90deg", "Condition.NotCalculatePathStraightToTarget"
			];
		} : AIActionAND;
	};
}

WalkToTargetConditionHasStraightPath : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.CalculatePathStraightToTarget"
			];
		} : AIActionAND;
	};
}

WalkToTargetConditionHasPath : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.CalculatePathToTarget"
			];
		} : AIActionAND;
	};
}

TargetIsNotVisible : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotTargetIsVisible"
			];
		} : AIActionAND;
	};
}

WalkToTarget : AIAction
{
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Normal";
		};
		movePolicy = 
		{
			target = "AIActionTarget.CombatTarget";
			strafingTarget = "AIActionTarget.CombatTarget";
			movementType = "Walk";
			keepLineOfSight = "Keep";
			tolerance = 10.f;
			distance = 5.f;
		};
		toNextPhaseConditionCheckInterval = 0.2f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetAbove140deg", "Condition.InStatesStatic", "Condition.NotCalculatePathStraightToTarget", "Condition.TargetBelow7m", "Condition.StatusEffectLocomotionMalfunction", "Condition.StatusEffectLocomotionMalfunctionLevel2", "Condition.StatusEffectLocomotionMalfunctionLevel3", "Condition.StatusEffectLocomotionMalfunctionLevel4"
					];
				} : AIActionOR;
			}
		];
	};
	recovery = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Normal";
			locomotionMode = "Moving";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

WalkToTargetTargetNotVisible : WalkToTarget
{
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Normal";
		};
		movePolicy = 
		{
			target = "AIActionTarget.CombatTarget";
			strafingTarget = "AIActionTarget.CombatTarget";
			movementType = "Walk";
			keepLineOfSight = "Keep";
			tolerance = 10.f;
			distance = 5.f;
		};
		toNextPhaseConditionCheckInterval = 0.2f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					AND = 
					[
						"Condition.TargetIsVisible", "Condition.NotIsUsingOffMeshLink"
					];
				} : AIActionAND;
			}
		];
	};
	recovery = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Normal";
			locomotionMode = "Moving";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

WalkToTargetAwayCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow10m", "Condition.TargetAbove3m", "Condition.CalculatePathStraightToTarget", "Condition.CalculatePathStraightBackClose"
			];
		} : AIActionAND;
	};
}

WalkToTargetAway : WalkToTarget
{
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Normal";
		};
		movePolicy = 
		{
			target = "AIActionTarget.CombatTarget";
			strafingTarget = "AIActionTarget.CombatTarget";
			movementType = "Walk";
			keepLineOfSight = "Keep";
			tolerance = 10.f;
			distance = 15.f;
		};
		toNextPhaseConditionCheckInterval = 0.2f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetAbove140deg", "Condition.InStatesStatic", "Condition.NotCalculatePathStraightToTarget", "Condition.NotCalculatePathStraightBackClose", "Condition.TargetAbove15m", "Condition.TargetBelow20m", "Condition.StatusEffectLocomotionMalfunction", "Condition.StatusEffectLocomotionMalfunctionLevel2", "Condition.StatusEffectLocomotionMalfunctionLevel3", "Condition.StatusEffectLocomotionMalfunctionLevel4"
					];
				} : AIActionOR;
			}
		];
	};
	recovery = 
	{
		duration = 1.5f;
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

StrafeCondition : AIAction
{
	cooldowns = 
	[
		"RoyceExo.StrafeCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow10m", "Condition.TargetAbove5m", "Condition.TargetBelow120deg"
			];
		} : AIActionAND;
	};
}

strafeleftSpaceCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.CalculatePathStraightLeftClose"
			];
		} : AIActionAND;
	};
}

straferightSpaceCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.CalculatePathStraightRightClose"
			];
		} : AIActionAND;
	};
}

StrafeSelector : AIActionSelector
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotFollower", "Condition.NotIsUsingOffMeshLink", "Condition.NotAIMoveCommand", "Condition.NotAIUseWorkspotCommand", "Condition.TargetBelow90deg"
			];
		} : AIActionAND;
	};
	actions = 
	[
		"RoyceExo.StrafeRight", "RoyceExo.StrafeLeft"
	];
	defaultAction = "GenericArchetype.Success";
}

StrafeLeft : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.CalculatePathStraightLeftClose"
			];
		} : AIActionAND;
	};
	loop = 
	{
		duration = 10.f;
		changeNPCState = 
		{
			upperBodyState = "Normal";
			locomotionMode = "Moving";
		};
		movePolicy = 
		{
			target = "AIActionTarget.CombatTarget";
			strafingTarget = "AIActionTarget.CombatTarget";
			movementType = "Walk";
			keepLineOfSight = "Keep";
			tolerance = 50.f;
			distance = 7.5f;
			circlingDirection = "Left";
			stopOnObstacle = true;
			dynamicTargetUpdateTimer = 1.f;
			minDistance = 3.f;
			deadAngle = 90.f;
		};
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.NotCalculatePathStraightLeftClose", "Condition.AIMoveCommand", "Condition.AIUseWorkspotCommand", "Condition.TargetAbove120deg", "Condition.StatusEffectLocomotionMalfunction", "Condition.StatusEffectLocomotionMalfunctionLevel2", "Condition.StatusEffectLocomotionMalfunctionLevel3", "Condition.StatusEffectLocomotionMalfunctionLevel4", {
							AND = 
							[
								"Condition.TargetBelow3m", "Condition.CalculatePathStraightToTarget"
							];
						} : AIActionAND
					];
				} : AIActionOR;
			}
		];
	};
	subActions = 
	[
		{
			delay = -1.f;
			cooldowns = 
			[
				"RoyceExo.StrafeCooldown"
			];
		} : AISubActionStartCooldown
	];
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

StrafeRight : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.CalculatePathStraightRightClose", "Condition.TargetRight"
			];
		} : AIActionAND;
	};
	loop = 
	{
		duration = 10.f;
		changeNPCState = 
		{
			upperBodyState = "Normal";
			locomotionMode = "Moving";
		};
		movePolicy = 
		{
			target = "AIActionTarget.CombatTarget";
			strafingTarget = "AIActionTarget.CombatTarget";
			movementType = "Walk";
			keepLineOfSight = "Keep";
			tolerance = 50.f;
			distance = 7.5f;
			circlingDirection = "Right";
			stopOnObstacle = true;
			dynamicTargetUpdateTimer = 1.f;
			minDistance = 3.f;
			deadAngle = 90.f;
		};
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.NotCalculatePathStraightRightClose", "Condition.AIMoveCommand", "Condition.AIUseWorkspotCommand", "Condition.TargetAbove120deg", "Condition.StatusEffectLocomotionMalfunction", "Condition.StatusEffectLocomotionMalfunctionLevel2", "Condition.StatusEffectLocomotionMalfunctionLevel3", "Condition.StatusEffectLocomotionMalfunctionLevel4", {
							AND = 
							[
								"Condition.TargetBelow3m", "Condition.CalculatePathStraightToTarget"
							];
						} : AIActionAND
					];
				} : AIActionOR;
			}
		];
	};
	subActions = 
	[
		{
			delay = -1.f;
			cooldowns = 
			[
				"RoyceExo.StrafeCooldown"
			];
		} : AISubActionStartCooldown
	];
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

SprintToTargetSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.SprintToTarget", "GenericArchetype.Success"
	];
}

SprintToTargetJumpSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.SprintToTargetNoRecover", "RoyceExo.JumpAttackNoStartup", "GenericArchetype.Success"
	];
}

SprintToTargetCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove20m", "Condition.TargetUpTo2dot5mZDiff", "Condition.CalculatePathToTarget", "Condition.NotTargetIsVisible", "Condition.NotStatusEffectTypeLocomotionMalfunction"
			];
		} : AIActionAND;
	};
}

SprintToTargetSoftCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetUpTo2dot5mZDiff", "Condition.CalculatePathToTarget", "Condition.NotStatusEffectTypeLocomotionMalfunction"
			];
		} : AIActionAND;
	};
}

SprintToTargetLosCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow120deg", "Condition.TargetUpTo2dot5mZDiff", "Condition.CalculatePathToTarget", "Condition.NotTargetIsVisible"
			];
		} : AIActionAND;
	};
}

SprintToTarget : AIAction
{
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Normal";
			locomotionMode = "Moving";
		};
		movePolicy = 
		{
			target = "AIActionTarget.CombatTarget";
			strafingTarget = "AIActionTarget.CombatTarget";
			movementType = "Sprint";
			tolerance = 10.f;
		};
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					AND = 
					[
						"Condition.TargetIsVisible", {
							OR = 
							[
								"Condition.TargetBelow5m", "Condition.TargetAbove1dot4mZDiff", "Condition.StatusEffectTypeLocomotionMalfunction"
							];
						} : AIActionOR
					];
				} : AIActionAND;
			}
		];
	};
	recovery = 
	{
		duration = 1.f;
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

SprintToTarget_WithRMACheck : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.CalculatePathToTarget", "Condition.TargetInRestrictedMovementArea"
			];
		} : AIActionAND;
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Normal";
			locomotionMode = "Moving";
		};
		movePolicy = 
		{
			target = "AIActionTarget.CombatTarget";
			strafingTarget = "AIActionTarget.CombatTarget";
			movementType = "Sprint";
			tolerance = 10.f;
		};
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					AND = 
					[
						"Condition.TargetIsVisible", {
							OR = 
							[
								"Condition.TargetBelow5m", "Condition.TargetAbove1dot4mZDiff", "Condition.StatusEffectTypeLocomotionMalfunction", "Condition.NotTargetInRestrictedMovementArea"
							];
						} : AIActionOR
					];
				} : AIActionAND;
			}
		];
	};
	recovery = 
	{
		duration = 1.f;
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

SprintToTargetNoRecover : AIAction
{
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Normal";
		};
		movePolicy = 
		{
			target = "AIActionTarget.CombatTarget";
			strafingTarget = "AIActionTarget.CombatTarget";
			movementType = "Sprint";
			tolerance = 10.f;
			dontUseStop = true;
		};
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					AND = 
					[
						"Condition.TargetBelow8m"
					];
				} : AIActionAND;
			}
		];
	};
	recovery = 
	{
		duration = 1.f;
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

JumpAttackSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.RotateToTarget", "RoyceExo.JumpAttack", "GenericArchetype.Success"
	];
}

JumpAttackCondition : AIAction
{
	cooldowns = 
	[
		"RoyceExo.JumpAttackCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove7m", "Condition.TargetBelow12m", "Condition.NotLineOfSightFailed", "Condition.NotIsUsingOffMeshLink", "Condition.TargetIsVisible", "Condition.CalculatePathStraightToTarget"
			];
		} : AIActionAND;
	};
}

JumpAttack : AIAction
{
	cooldowns = 
	[
		"RoyceExo.JumpAttackCooldown", "RoyceExo.DashAwayCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove7m", "Condition.TargetBelow12m"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.833f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loop = 
	{
		duration = 0.633f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	recovery = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.StompAttackStagger";
			attackRange = 4.f;
			attackTime = 0.6f;
			attackName = "ShieldAttack";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "JumpAttack";
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.JumpAttackSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

JumpAttackNoStartupCondition : AIAction
{
	cooldowns = 
	[
		"RoyceExo.JumpAttackCooldown"
	];
}

JumpAttackNoStartup : AIAction
{
	cooldowns = 
	[
		"RoyceExo.DashSideCooldown"
	];
	startup = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loop = 
	{
		duration = 0.633f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	recovery = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	recoverySubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.StompAttackStagger";
			attackRange = 3.f;
			attackTime = 0.f;
			attackName = "ShieldAttack";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "JumpAttack";
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.JumpAttackSlideData";
		};
	};
}

DashAwayFromTargetSequence : AIActionSequence
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.CombatTarget"
			];
		} : AIActionAND;
	};
	actions = 
	[
		"RoyceExo.DashLeftAwayFromTarget", "RoyceExo.DashRightAwayFromTarget", "GenericArchetype.Success"
	];
}

DashAwayFromTargetSelector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.DashBackwardAwayFromTarget", "RoyceExo.DashLeftAwayFromTarget", "RoyceExo.DashRightAwayFromTarget"
	];
}

DashSideSelector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.JumpAttack", "RoyceExo.DashLeftSide", "RoyceExo.DashRightSide"
	];
}

DashAwayFromTargetCondition : AIAction
{
	cooldowns = 
	[
		"RoyceExo.DashAwayCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow5mPrediction"
			];
		} : AIActionAND;
	};
}

DashSideCondition : AIAction
{
	cooldowns = 
	[
		"RoyceExo.DashSideCooldown"
	];
}

DashBackwardAwayFromTarget : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.CalculatePathStraightBackClose", "Condition.CalculatePathStraightToTarget", "Condition.NotPreviousAttackNameDashBack"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.6f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loop = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	recovery = 
	{
		duration = 0.9f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.2f;
			attack = "NPCAttacks.StrongAttackStagger";
			attackRange = 0.00000001f;
			attackName = "DashBack";
		} : AISubActionAttackWithWeapon
	];
	recoverySubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.StompAttackStagger";
			attackRange = 3.f;
			attackTime = 0.f;
			attackName = "ShieldAttack";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "Dash";
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
		};
	};
}

DashLeftAwayFromTarget : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.CalculatePathStraightLeftClose", "Condition.CalculatePathStraightToTarget", "Condition.NotPreviousAttackNameDashBack"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.6f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loop = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	recovery = 
	{
		duration = 0.9f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.2f;
			attack = "NPCAttacks.StrongAttackStagger";
			attackRange = 0.00000001f;
			attackName = "DashBack";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "Dash";
		animVariation = 1;
		animSlot = 
		{
		};
	};
}

DashRightAwayFromTarget : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.CalculatePathStraightRightClose", "Condition.CalculatePathStraightToTarget", "Condition.NotPreviousAttackNameDashBack"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.6f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loop = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	recovery = 
	{
		duration = 0.9f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.2f;
			attack = "NPCAttacks.StrongAttackStagger";
			attackRange = 0.00000001f;
			attackName = "DashBack";
		} : AISubActionAttackWithWeapon
	];
	recoverySubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.StompAttackStagger";
			attackRange = 3.f;
			attackTime = 0.f;
			attackName = "ShieldAttack";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "Dash";
		animVariation = 2;
		animSlot = 
		{
		};
	};
}

DashLeftSide : RoyceExo.DashLeftAwayFromTarget
{
	cooldowns = 
	[
		"RoyceExo.DashSideCooldown", "RoyceExo.JumpAttackCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove5m", "Condition.TargetBelow15m", "Condition.CalculatePathStraightLeftClose", "Condition.CalculatePathStraightToTarget", "Condition.NotPreviousAttackNameDashBack"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.6f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loop = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	recovery = 
	{
		duration = 0.9f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.2f;
			attack = "NPCAttacks.StrongAttackStagger";
			attackRange = 0.00000001f;
			attackName = "DashBack";
		} : AISubActionAttackWithWeapon
	];
	recoverySubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.StompAttackStagger";
			attackRange = 3.f;
			attackTime = 0.f;
			attackName = "ShieldAttack";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "Dash";
		animVariation = 1;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			recoverySlide = "RoyceExo.RotateSlideData";
		};
	};
}

DashRightSide : RoyceExo.DashRightAwayFromTarget
{
	cooldowns = 
	[
		"RoyceExo.DashSideCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove5m", "Condition.TargetBelow15m", "Condition.CalculatePathStraightRightClose", "Condition.CalculatePathStraightToTarget", "Condition.NotPreviousAttackNameDashBack"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.6f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loop = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	recovery = 
	{
		duration = 0.9f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.2f;
			attack = "NPCAttacks.StrongAttackStagger";
			attackRange = 0.00000001f;
			attackName = "DashBack";
		} : AISubActionAttackWithWeapon
	];
	recoverySubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.StompAttackStagger";
			attackRange = 3.f;
			attackTime = 0.f;
			attackName = "ShieldAttack";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "Dash";
		animVariation = 2;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			recoverySlide = "RoyceExo.RotateSlideData";
		};
	};
}

SingleMeleeAttackStrongSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.SingleMeleeAttackShield0", "RoyceExo.SingleMeleeAttackStrong03", "RoyceExo.SingleMeleeAttackStrong04", "GenericArchetype.Success"
	];
}

SingleMeleeAttackStrongSelector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SingleMeleeAttackShield0", "RoyceExo.SingleMeleeAttackShield90", "RoyceExo.SingleMeleeAttackShield270", "RoyceExo.SingleMeleeAttackShield180r", "RoyceExo.SingleMeleeAttackShield180l", "RoyceExo.SingleMeleeAttackNoShield0", "RoyceExo.SingleMeleeAttackNoShield90", "RoyceExo.SingleMeleeAttackNoShield270", "RoyceExo.SingleMeleeAttackNoShield180r", "RoyceExo.SingleMeleeAttackNoShield180l"
	];
}

WeakSpotCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.HasExoWeakspot"
			];
		} : AIActionAND;
	};
}

SingleMeleeAttackStrongCondition : AIAction
{
	cooldowns = 
	[
		"RoyceExo.MeleeAttackCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow3m", "Condition.TargetUpTo1dot4mZDiff", "Condition.NotStatusEffectTargetKnockdown", "Condition.CalculatePathStraightToTarget", "Condition.TargetIsVisible"
			];
		} : AIActionAND;
	};
}

SingleMeleeAttackShield0 : AIAction
{
	cooldowns = 
	[
		"RoyceExo.MeleeAttackCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow45deg", "Condition.HasExoWeakspot"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.75f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
		useDurationFromAnimSlot = false;
	};
	loop = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	recovery = 
	{
		duration = 0.667f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.RoyceStrongAttackKnockdown";
			attackRange = 3.5f;
			attackTime = 0.f;
			attackName = "ShieldAttack";
			colliderBoxSize = ( 2.5f, 0.3f, 2.f );
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "MeleeAttack";
		animVariation = 0;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

SingleMeleeAttackShield90 : SingleMeleeAttackShield0
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow180deg", "Condition.TargetRight", "Condition.HasExoWeakspot"
			];
		} : AIActionAND;
	};
	animData = 
	{
		animFeature = "MeleeAttack";
		animVariation = 1;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.RotateSlideData";
		};
	};
}

SingleMeleeAttackShield270 : SingleMeleeAttackShield0
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow180deg", "Condition.TargetLeft", "Condition.HasExoWeakspot"
			];
		} : AIActionAND;
	};
	animData = 
	{
		animFeature = "MeleeAttack";
		animVariation = 2;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.RotateSlideData";
		};
	};
}

SingleMeleeAttackShield180r : AIAction
{
	cooldowns = 
	[
		"RoyceExo.MeleeAttackCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetRight", "Condition.HasExoWeakspot"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.75f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
		useDurationFromAnimSlot = false;
	};
	loop = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	recovery = 
	{
		duration = 0.667f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.RoyceStrongAttackKnockdown";
			attackRange = 3.5f;
			attackTime = 0.f;
			attackName = "ShieldAttack";
			colliderBoxSize = ( 2.5f, 0.3f, 2.f );
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "MeleeAttack";
		animVariation = 3;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.RotateSlideData";
		};
	};
}

SingleMeleeAttackShield180l : SingleMeleeAttackShield180r
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetLeft", "Condition.HasExoWeakspot"
			];
		} : AIActionAND;
	};
	animData = 
	{
		animFeature = "MeleeAttack";
		animVariation = 4;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.RotateSlideData";
		};
	};
}

SingleMeleeAttackNoShield0 : AIAction
{
	cooldowns = 
	[
		"RoyceExo.MeleeAttackCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow45deg", "Condition.NotHasExoWeakspot"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.75f;
		useDurationFromAnimSlot = false;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	recovery = 
	{
		duration = 0.667f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.RoyceStrongAttackKnockdown";
			attackRange = 3.5f;
			attackTime = 0.f;
			attackName = "ShieldAttack";
			colliderBoxSize = ( 2.5f, 0.3f, 2.f );
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "MeleeAttackNoShield";
		animVariation = 0;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

SingleMeleeAttackNoShield90 : SingleMeleeAttackNoShield0
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow180deg", "Condition.TargetRight", "Condition.NotHasExoWeakspot"
			];
		} : AIActionAND;
	};
	animData = 
	{
		animFeature = "MeleeAttackNoShield";
		animVariation = 1;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.RotateSlideData";
		};
	};
}

SingleMeleeAttackNoShield270 : SingleMeleeAttackNoShield0
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow180deg", "Condition.TargetLeft", "Condition.NotHasExoWeakspot"
			];
		} : AIActionAND;
	};
	animData = 
	{
		animFeature = "MeleeAttackNoShield";
		animVariation = 2;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.RotateSlideData";
		};
	};
}

SingleMeleeAttackNoShield180r : AIAction
{
	cooldowns = 
	[
		"RoyceExo.MeleeAttackCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetRight", "Condition.NotHasExoWeakspot"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.75f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	recovery = 
	{
		duration = 0.667f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.RoyceStrongAttackKnockdown";
			attackRange = 3.5f;
			attackTime = 0.f;
			attackName = "ShieldAttack";
			colliderBoxSize = ( 2.5f, 0.3f, 2.f );
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "MeleeAttackNoShield";
		animVariation = 3;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.RotateSlideData";
		};
	};
}

SingleMeleeAttackNoShield180l : SingleMeleeAttackNoShield180r
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetLeft", "Condition.NotHasExoWeakspot"
			];
		} : AIActionAND;
	};
	animData = 
	{
		animFeature = "MeleeAttack";
		animVariation = 4;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.RotateSlideData";
		};
	};
}

SingleMeleeAttackStrong03 : AIAction
{
	cooldowns = 
	[
		"RoyceExo.MeleeAttackCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow120deg", "Condition.NotHasExoWeakspot"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.75f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	recovery = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	startupSubActions = 
	[
		{
			name = "swipe_charge_tpp";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			name = "swipe_charge_tpp";
		} : AISubActionSpawnFX, 
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 1.f;
			attack = "Attacks.PlasmaBeam";
			attackRange = 10.f;
			attackName = "LaserAttack";
		} : AISubActionAttackWithWeapon
	];
	recoverySubActions = 
	[
		{
			name = "beam_shot_fx";
		} : AISubActionSpawnFX
	];
	animData = 
	{
		animFeature = "MeleeAttack";
		animVariation = 1;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

SingleMeleeAttackStrong04 : AIAction
{
	cooldowns = 
	[
		"RoyceExo.MeleeAttackCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotHasExoWeakspot"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.75f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		duration = 0.733f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	recovery = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	startupSubActions = 
	[
		{
			name = "swipe_charge_tpp";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			name = "swipe_charge_tpp";
		} : AISubActionSpawnFX, 
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.733f;
			attack = "Attacks.PlasmaBeam";
			attackRange = 20.f;
			attackName = "LaserAttack";
		} : AISubActionAttackWithWeapon
	];
	recoverySubActions = 
	[
		{
			name = "beam_shot_fx";
		} : AISubActionSpawnFX
	];
	animData = 
	{
		animFeature = "MeleeAttack";
		animVariation = 3;
		animSlot = 
		{
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

AimAttackSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.AimAttack", "RoyceExo.AimAttackRecovery", "RoyceExo.SetAimAttackCooldown", "GenericArchetype.Success"
	];
}

AimAttackSplashSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.AimAttackSplash", "RoyceExo.AimAttackSplashRecovery", "RoyceExo.SetAimAttackSplashCooldown", "GenericArchetype.Success"
	];
}

AimAttackSplashStraightSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.AimAttackSplashStraight", "RoyceExo.AimAttackSplashStraightRecovery", "RoyceExo.SetAimAttackSplashCooldown", "GenericArchetype.Success"
	];
}

AimAttackLaserSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.AimAttackLaser", "RoyceExo.AimAttackLaserRecovery", "GenericArchetype.Success"
	];
}

AimAttackBurstSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.RotateToTarget", "RoyceExo.AimAttackBurst", "GenericArchetype.Success"
	];
}

AimAttackSelector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.RotateToTarget", "RoyceExo.AimAttack"
	];
}

AimAttackBurstSelector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.RotateToTarget", "RoyceExo.AimAttackBurst"
	];
}

AimAttackEnragedSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.RotateToTarget", "RoyceExo.AimAttackEnraged", "RoyceExo.AimAttackRecovery", "RoyceExo.SetAimAttackCooldown", "GenericArchetype.Success"
	];
}

AimAttackBurstEnragedSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.RotateToTarget", "RoyceExo.AimAttackBurstEnraged", "GenericArchetype.Success"
	];
}

AimAttackEnragedSelector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.RotateToTarget", "RoyceExo.AimAttackEnraged"
	];
}

AimAttackBurstEnragedSelector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.RotateToTarget", "RoyceExo.AimAttackBurstEnraged"
	];
}

AimAttackConditions : AIAction
{
	cooldowns = 
	[
		"RoyceExo.AimAttackCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow120deg", "Condition.TargetIsVisible"
			];
		} : AIActionAND;
	};
}

AimAttack : AIAction
{
	startup = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
		useDurationFromAnimSlot = false;
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction"
					];
				} : AIActionOR;
			}
		];
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction", "Condition.TargetAbove140deg"
					];
				} : AIActionOR;
			}
		];
	};
	recovery = 
	{
		duration = 0.f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
	};
	startupSubActions = 
	[
		{
			name = "charging_tpp_loop";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = 
			{
				targetSlot = "Chest";
			} : AIActionTarget.CombatTarget;
			rangedAttack = "Attacks.PlasmaShotCharge";
			triggerMode = "TriggerMode.SemiAuto";
			predictionTime = 0.25f;
			delay = 0.f;
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseChargeShootingPackage"
			];
			numberOfShots = 1;
			pauseCondition = 
			[
				{
					condition = 
					{
						OR = 
						[
							"Condition.FriendlyFire"
						];
					} : AIActionOR;
				}
			];
		} : AISubActionShootWithWeapon
	];
	animData = 
	{
		animFeature = "ShootAction";
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

AimAttackRecovery : AIAction
{
	startup = 
	{
		duration = 0.f;
	};
	loop = 
	{
		duration = 0.f;
	};
	recovery = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
		useDurationFromAnimSlot = false;
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction", "Condition.TargetAbove140deg"
					];
				} : AIActionOR;
			}
		];
	};
	animData = 
	{
		animFeature = "ShootAction";
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.StimTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.StimTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.StimTarget";
		}
	];
}

ShootDefault : AIAction
{
	startup = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
		};
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Shoot";
		};
		useDurationFromAnimSlot = false;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.NotValidTargetPositionOrAimCommandCondition", "Condition.PreciseShootDeactivationCondition", "Condition.IsMoving"
					];
				} : AIActionOR;
			}
		];
	};
	recovery = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
		};
	};
	startupSubActions = 
	[
		{
			name = "charging_tpp_loop";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = 
			{
				targetSlot = "Chest";
			} : AIActionTarget.CombatTarget;
			rangedAttack = "Attacks.PlasmaShotCharge";
			triggerMode = "TriggerMode.SemiAuto";
			predictionTime = 0.25f;
			delay = 0.f;
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseChargeShootingPackage"
			];
			numberOfShots = 1;
			pauseCondition = 
			[
				{
					condition = 
					{
						OR = 
						[
							"Condition.FriendlyFire"
						];
					} : AIActionOR;
				}
			];
		} : AISubActionShootWithWeapon
	];
	animData = 
	{
		animFeature = "ShootAction";
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.StimTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.StimTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.StimTarget";
		}
	];
}

ShootDefaultRecovery : AIAction
{
	startup = 
	{
		duration = 0.f;
	};
	loop = 
	{
		duration = 0.f;
	};
	recovery = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
		useDurationFromAnimSlot = false;
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction", "Condition.TargetAbove140deg"
					];
				} : AIActionOR;
			}
		];
	};
	animData = 
	{
		animFeature = "ShootAction";
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.StimTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.StimTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.StimTarget";
		}
	];
}

AimAttackSplashConditions : AIAction
{
	cooldowns = 
	[
		"RoyceExo.AimAttackSplashCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove5m", "Condition.TargetBelow15m", "Condition.TargetUpTo1dot4mZDiff", "Condition.TargetBelow120deg", "Condition.CalculatePathStraightForwardClose", "Condition.NotCalculatePathStraightToTarget", "Condition.NotStatusEffectTargetKnockdown"
			];
		} : AIActionAND;
	};
}

AimAttackSplashStraightConditions : AIAction
{
	cooldowns = 
	[
		"RoyceExo.AimAttackSplashCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove5mPrediction", "Condition.CalculatePathStraightForwardClose", "Condition.CalculatePathStraightToTarget", "Condition.NotStatusEffectTargetKnockdown"
			];
		} : AIActionAND;
	};
}

AimAttackSplashConditionsCooldown : AIAction
{
	cooldowns = 
	[
		"RoyceExo.AimAttackSplashCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove7m", "Condition.TargetBelow120deg", "Condition.CalculatePathStraightForwardClose", "Condition.CalculatePathStraightToTarget", "Condition.NotStatusEffectTargetKnockdown"
			];
		} : AIActionAND;
	};
}

AimAttackSplashConditionsNoCooldown : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove7m", "Condition.NotStatusEffectTargetKnockdown", "Condition.CalculatePathToTarget"
			];
		} : AIActionAND;
	};
}

AimAttackSplash : AimAttack
{
	startup = 
	{
		duration = 2.f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
			hitReactionMode = "UnstoppableTwitchNone";
		};
		useDurationFromAnimSlot = false;
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction"
					];
				} : AIActionOR;
			}
		];
	};
	loop = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
			hitReactionMode = "UnstoppableTwitchNone";
		};
		useDurationFromAnimSlot = false;
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction", "Condition.TargetAbove140deg"
					];
				} : AIActionOR;
			}
		];
	};
	recovery = 
	{
		duration = 0.f;
	};
	startupSubActions = 
	[
		{
			name = "charging_splash_tpp";
		} : AISubActionSpawnFX, 
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 2.5f;
			attack = "Attacks.RoyceLaserSight";
			attackRange = 10.f;
			attackName = "laser";
		} : AISubActionAttackWithWeapon
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = "AIActionTarget.CustomWorldPosition";
			rangedAttack = "Attacks.PlasmaShotSplash";
			triggerMode = "TriggerMode.SemiAuto";
			delay = 0;
			predictionTime = 0.5f;
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseChargeShootingPackage"
			];
			numberOfShots = 1;
		} : AISubActionShootWithWeapon
	];
	animData = 
	{
		animFeature = "ShootAttack";
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CustomWorldPosition";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CustomWorldPosition";
		}
	];
}

AimAttackSplashRecovery : AIAction
{
	startup = 
	{
		duration = 0.f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
			hitReactionMode = "UnstoppableTwitchNone";
		};
	};
	loop = 
	{
		duration = 0.f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
			hitReactionMode = "UnstoppableTwitchNone";
		};
	};
	recovery = 
	{
		duration = 0.25f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
			hitReactionMode = "UnstoppableTwitchNone";
		};
		useDurationFromAnimSlot = false;
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction"
					];
				} : AIActionOR;
			}
		];
	};
	animData = 
	{
		animFeature = "ShootAttack";
		animSlot = 
		{
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

AimAttackSplashStraight : AimAttackSplash
{
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = "AIActionTarget.CombatTarget";
			rangedAttack = "Attacks.PlasmaShotSplash";
			triggerMode = "TriggerMode.SemiAuto";
			delay = 0;
			predictionTime = 0.5f;
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseChargeShootingPackage"
			];
			numberOfShots = 1;
		} : AISubActionShootWithWeapon
	];
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

AimAttackSplashStraightRecovery : AimAttackSplashRecovery
{
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

AimAttackSplashAcquiringTimer : AIAction
{
	loop = 
	{
		duration = 2.25f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
			hitReactionMode = "UnstoppableTwitchNone";
		};
		toNextPhaseConditionCheckInterval = 0.2f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow5m"
					];
				} : AIActionOR;
			}
		];
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CustomWorldPosition;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CustomWorldPosition";
		}
	];
}

AimAttackSplashLookatUpdate : AIAction
{
	loop = 
	{
		duration = 0.01f;
	};
}

AimAttackLookatUpdate : AIAction
{
	loop = 
	{
		duration = 0.01f;
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.StimTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.StimTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.StimTarget";
		}
	];
}

AimAttackSplashLeft : AimAttackSplash
{
	startup = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
			hitReactionMode = "UnstoppableTwitchNone";
		};
		useDurationFromAnimSlot = false;
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction"
					];
				} : AIActionOR;
			}
		];
	};
	startupSubActions = 
	[
		{
			name = "charging_splash_tpp";
		} : AISubActionSpawnFX, 
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.7f;
			attack = "Attacks.RoyceLaserSight";
			attackRange = 10.f;
			attackName = "laser";
			stopContinuousAttackOnDurationEnd = false;
		} : AISubActionAttackWithWeapon
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = "AIActionTarget.CustomWorldPosition";
			rangedAttack = "Attacks.PlasmaShotSplash";
			triggerMode = "TriggerMode.SemiAuto";
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseChargeShootingPackage"
			];
			numberOfShots = 1;
		} : AISubActionShootWithWeapon
	];
}

AimAttackSplashRight : AimAttackSplash
{
	startup = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
			hitReactionMode = "UnstoppableTwitchNone";
		};
		useDurationFromAnimSlot = false;
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction"
					];
				} : AIActionOR;
			}
		];
	};
	startupSubActions = 
	[
		{
			name = "charging_splash_tpp";
		} : AISubActionSpawnFX, 
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.7f;
			attack = "Attacks.RoyceLaserSight";
			attackRange = 10.f;
			attackName = "laser";
			stopContinuousAttackOnDurationEnd = false;
		} : AISubActionAttackWithWeapon
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = "AIActionTarget.CustomWorldPosition";
			rangedAttack = "Attacks.PlasmaShotSplash";
			triggerMode = "TriggerMode.SemiAuto";
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseChargeShootingPackage"
			];
			numberOfShots = 1;
		} : AISubActionShootWithWeapon
	];
}

AimAttackBurst : AIAction
{
	startup = 
	{
		duration = 1.3f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	recovery = 
	{
		duration = 0.8f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	startupSubActions = 
	[
		{
			name = "charging_tpp_loop";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = 
			{
				targetSlot = "Chest";
			} : AIActionTarget.CombatTarget;
			rangedAttack = "Attacks.PlasmaShotCharge";
			triggerMode = "TriggerMode.FullAuto";
			delay = 0.f;
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseChargeBurstShootingPackage"
			];
			numberOfShots = 3;
			pauseCondition = 
			[
				{
					condition = 
					{
						OR = 
						[
							"Condition.FriendlyFire", "Condition.TargetAbove140deg"
						];
					} : AIActionOR;
				}
			];
		} : AISubActionShootWithWeapon
	];
	animData = 
	{
		animFeature = "ShootAttack";
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

AimAttackEnraged : AimAttack
{
	startup = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
		useDurationFromAnimSlot = false;
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction"
					];
				} : AIActionOR;
			}
		];
	};
}

AimAttackEnragedOnPlace : AimAttackEnraged
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow8m"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction", "Condition.TargetAbove120deg"
					];
				} : AIActionOR;
			}
		];
	};
	recovery = 
	{
		duration = 0.833f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	startupSubActions = 
	[
		{
			name = "charging_tpp_loop";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = 
			{
				targetSlot = "Chest";
			} : AIActionTarget.CombatTarget;
			rangedAttack = "Attacks.PlasmaShotCharge";
			triggerMode = "TriggerMode.SemiAuto";
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseChargeShootingPackage"
			];
			numberOfShots = 6;
			pauseCondition = 
			[
				{
					condition = 
					{
						OR = 
						[
							"Condition.FriendlyFire", "Condition.TargetAbove140deg"
						];
					} : AIActionOR;
				}
			];
		} : AISubActionShootWithWeapon
	];
	animData = 
	{
		animFeature = "ShootAttack";
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

AimAttackBurstEnraged : AIAction
{
	startup = 
	{
		duration = 1.3f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	recovery = 
	{
		duration = 0.8f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	startupSubActions = 
	[
		{
			name = "charging_tpp_loop";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = 
			{
				targetSlot = "Chest";
			} : AIActionTarget.CombatTarget;
			rangedAttack = "Attacks.PlasmaShotCharge";
			triggerMode = "TriggerMode.SemiAuto";
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseChargeShootingPackage"
			];
			numberOfShots = 9;
			pauseCondition = 
			[
				{
					condition = 
					{
						OR = 
						[
							"Condition.FriendlyFire", "Condition.TargetAbove140deg"
						];
					} : AIActionOR;
				}
			];
		} : AISubActionShootWithWeapon
	];
	animData = 
	{
		animFeature = "ShootAttack";
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

AimAttackLaser : AIAction
{
	startup = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
		useDurationFromAnimSlot = false;
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction"
					];
				} : AIActionOR;
			}
		];
	};
	loop = 
	{
		duration = 10.f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction", "Condition.TargetAbove140deg"
					];
				} : AIActionOR;
			}
		];
	};
	recovery = 
	{
		duration = 0.f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
	};
	startupSubActions = 
	[
		{
			name = "swipe_charge_tpp";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			name = "swipe_charge_tpp";
		} : AISubActionSpawnFX, 
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 10.f;
			attack = "Attacks.PlasmaBeam";
			attackRange = 200.f;
			attackName = "SwipedUp";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "ShootAction";
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

AimAttackLaserRecovery : AIAction
{
	startup = 
	{
		duration = 0.f;
	};
	loop = 
	{
		duration = 0.f;
	};
	recovery = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
		useDurationFromAnimSlot = false;
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetBelow3mPrediction", "Condition.TargetAbove140deg"
					];
				} : AIActionOR;
			}
		];
	};
	startupSubActions = 
	[
		{
			name = "blazsma_beam_end";
		} : AISubActionSpawnFX
	];
	animData = 
	{
		animFeature = "ShootAction";
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.StimTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.StimTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.StimTarget";
		}
	];
}

SwipeAttackSelectorCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow180deg"
			];
		} : AIActionAND;
	};
}

SwipeAttackTopSelector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SwipeAttackUp", "RoyceExo.SwipeAttackDown"
	];
}

SwipeAttackTopSelector2 : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SwipeAttackUp2", "RoyceExo.SwipeAttackDown2"
	];
}

SwipeAttackTop180Selector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SwipeAttackUp1802", "RoyceExo.SwipeAttackDown1802"
	];
}

SwipeAttackTop180Selector2 : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SwipeAttackUp180", "RoyceExo.SwipeAttackDown180"
	];
}

SwipeAttackDownSelector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SwipeAttackDown", "RoyceExo.SwipeAttackUp"
	];
}

SwipeAttackDownSelector2 : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SwipeAttackDown2", "RoyceExo.SwipeAttackUp2"
	];
}

SwipeAttackDown180Selector : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SwipeAttackDown180", "RoyceExo.SwipeAttackUp180"
	];
}

SwipeAttackDown180Selector2 : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SwipeAttackDown1802", "RoyceExo.SwipeAttackUp1802"
	];
}

SwipeAttackCondition : AIAction
{
	cooldowns = 
	[
		"RoyceExo.SwipeAttackCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove3m", "Condition.TargetBelow30m", "Condition.CalculatePathStraightToTarget0dot1mZOffset"
			];
		} : AIActionAND;
	};
}

PlayerToTheLeftCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetLeft"
			];
		} : AIActionAND;
	};
}

PlayerToTheRightCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetRight"
			];
		} : AIActionAND;
	};
}

SwipeAttackUp : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotTargetInStatesCrouch"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchNone";
			locomotionMode = "Static";
		};
		useDurationFromAnimSlot = false;
	};
	loop = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchNone";
			locomotionMode = "Static";
		};
		useDurationFromAnimSlot = false;
	};
	recovery = 
	{
		duration = 1.16f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchNone";
			locomotionMode = "Static";
		};
		useDurationFromAnimSlot = false;
	};
	startupSubActions = 
	[
		{
			name = "swipe_charge_tpp";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			name = "swipe_charge_tpp";
		} : AISubActionSpawnFX, 
		{
			name = "blazsma_beam_end";
			delay = 1.5f;
		} : AISubActionSpawnFX, 
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 1.35f;
			attack = "Attacks.PlasmaBeam";
			attackRange = 200.f;
			attackName = "SwipedUp";
			stopContinuousAttackOnDurationEnd = false;
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "SwipeAttack";
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			recoverySlide = "RoyceExo.RotateSlideData";
		};
	};
}

SwipeAttackUp2 : SwipeAttackUp
{
	loopSubActions = 
	[
		{
			name = "swipe_charge_tpp";
		} : AISubActionSpawnFX, 
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 1.35f;
			attack = "Attacks.PlasmaBeam";
			attackRange = 200.f;
			attackName = "SwipedUp";
			stopContinuousAttackOnDurationEnd = false;
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "SwipeAttack";
		animVariation = 4;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			recoverySlide = "RoyceExo.RotateSlideData";
		};
	};
}

SwipeAttackUp180 : SwipeAttackUp
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotPreviousAttackNameSwipedUp", "Condition.NotTargetInStatesCrouch"
			];
		} : AIActionAND;
	};
	animData = 
	{
		animFeature = "SwipeAttack";
		animVariation = 3;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			recoverySlide = "RoyceExo.RotateSlideData";
		};
	};
}

SwipeAttackUp1802 : SwipeAttackUp180
{
	animData = 
	{
		animFeature = "SwipeAttack";
		animVariation = 6;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			recoverySlide = "RoyceExo.RotateSlideData";
		};
	};
}

SwipeAttackDown : AIAction
{
	startup = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
		useDurationFromAnimSlot = false;
	};
	loop = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchNone";
			locomotionMode = "Static";
		};
		useDurationFromAnimSlot = false;
	};
	recovery = 
	{
		duration = 1.16f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchNone";
			locomotionMode = "Static";
		};
		useDurationFromAnimSlot = false;
	};
	startupSubActions = 
	[
		{
			name = "swipe_charge_tpp";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			name = "swipe_charge_tpp";
		} : AISubActionSpawnFX, 
		{
			name = "blazsma_beam_end";
			delay = 1.5f;
		} : AISubActionSpawnFX, 
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 1.35f;
			attack = "Attacks.PlasmaBeam";
			attackRange = 200.f;
			attackName = "SwipedDown";
			stopContinuousAttackOnDurationEnd = false;
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "SwipeAttack";
		animVariation = 1;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			recoverySlide = "RoyceExo.RotateSlideData";
		};
	};
}

SwipeAttackDown2 : SwipeAttackDown
{
	animData = 
	{
		animFeature = "SwipeAttack";
		animVariation = 5;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			recoverySlide = "RoyceExo.RotateSlideData";
		};
	};
}

SwipeAttackDown180 : SwipeAttackDown
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotPreviousAttackNameSwipedDown"
			];
		} : AIActionAND;
	};
	animData = 
	{
		animFeature = "SwipeAttack";
		animVariation = 3;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			recoverySlide = "RoyceExo.RotateSlideData";
		};
	};
}

SwipeAttackDown1802 : SwipeAttackDown180
{
	animData = 
	{
		animFeature = "SwipeAttack";
		animVariation = 7;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			recoverySlide = "RoyceExo.RotateSlideData";
		};
	};
}

SpecialAttackSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.RotateToTarget", "RoyceExo.SpecialAttackShield", "RoyceExo.SpecialAttackNoShield", "RoyceExo.SetSpecialAttackCooldown", "GenericArchetype.Success"
	];
}

SpecialAttackSequenceMadness : AIActionSequence
{
	actions = 
	[
		"RoyceExo.RotateToTarget", "RoyceExo.SpecialAttackShieldMadness", "RoyceExo.SpecialAttackNoWeakspotMadness", "RoyceExo.SetSpecialAttackCooldown", "GenericArchetype.Success"
	];
}

SpecialAttackCondition : AIAction
{
	cooldowns = 
	[
		"RoyceExo.SpecialAttackCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow120deg", "Condition.NotLineOfSightFailed", "Condition.TargetIsVisible"
			];
		} : AIActionAND;
	};
}

SpecialAttackConditionNoPath : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotCalculatePathToTarget", "Condition.TargetAbove5mPrediction", "Condition.TargetBelow120deg"
			];
		} : AIActionAND;
	};
}

SpecialAttackConditionOutOfRange : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotCalculatePathToTarget", "Condition.TargetIsVisible", "Condition.TargetAbove10m", "Condition.TargetBelow120deg", "Condition.TargetAbove1dot4mZDiff"
			];
		} : AIActionAND;
	};
}

SpecialAttackShield : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.HasExoWeakspot", "Condition.CalculatePathStraightForward4m", "Condition.TargetIsVisible"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = [];
				} : AIActionOR;
			}
		];
	};
	recovery = 
	{
		duration = 2.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	startupSubActions = 
	[
		{
			name = "charging_tpp_loop";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = 
			{
				targetSlot = "Chest";
			} : AIActionTarget.CombatTarget;
			rangedAttack = "Attacks.PlasmaShotTurtle";
			predictionTime = 0.25f;
			triggerMode = "TriggerMode.SemiAuto";
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseBarrageShootingPackage"
			];
			numberOfShots = 20;
			pauseCondition = 
			[
				{
					condition = 
					{
						OR = 
						[
							"Condition.FriendlyFire"
						];
					} : AIActionOR;
				}
			];
		} : AISubActionShootWithWeapon
	];
	recoverySubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.01f;
			attack = "NPCAttacks.StrongAttackStagger";
			attackRange = 0.00000001f;
			attackName = "SpecialAttack";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "SpecialAttack";
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

SpecialAttackNoShield : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotHasExoWeakspot", "Condition.CalculatePathStraightForwardClose", "Condition.TargetIsVisible"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = [];
				} : AIActionOR;
			}
		];
	};
	recovery = 
	{
		duration = 2.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	startupSubActions = 
	[
		{
			name = "charging_tpp_loop";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = 
			{
				targetSlot = "Chest";
			} : AIActionTarget.CombatTarget;
			predictionTime = 0.25f;
			rangedAttack = "Attacks.PlasmaShotTurtle";
			triggerMode = "TriggerMode.SemiAuto";
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseBarrageShootingPackage"
			];
			numberOfShots = 20;
			pauseCondition = 
			[
				{
					condition = 
					{
						OR = 
						[
							"Condition.FriendlyFire"
						];
					} : AIActionOR;
				}
			];
		} : AISubActionShootWithWeapon
	];
	recoverySubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.01f;
			attack = "NPCAttacks.StrongAttackStagger";
			attackRange = 0.00000001f;
			attackName = "SpecialAttack";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "SpecialAttackNoShield";
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

SpecialAttackShieldMadness : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.HasExoWeakspot"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	recovery = 
	{
		duration = 2.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	startupSubActions = 
	[
		{
			name = "charging_tpp_loop";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = 
			{
				targetSlot = "Chest";
			} : AIActionTarget.CombatTarget;
			rangedAttack = "Attacks.PlasmaShotTurtle";
			predictionTime = 0.25f;
			triggerMode = "TriggerMode.SemiAuto";
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseBarrageShootingPackage"
			];
			numberOfShots = 500;
			pauseCondition = 
			[
				{
					condition = 
					{
						OR = 
						[
							"Condition.FriendlyFire"
						];
					} : AIActionOR;
				}
			];
		} : AISubActionShootWithWeapon
	];
	recoverySubActions = 
	[
		{
			statusEffects = 
			[
				"BaseStatusEffect.BossSuicide"
			];
			apply = true;
			remove = true;
		} : AISubActionStatusEffect, 
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.01f;
			attack = "NPCAttacks.StrongAttackStagger";
			attackRange = 0.00000001f;
			attackName = "SpecialAttack";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "SpecialAttack";
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

SpecialAttackNoWeakspotMadness : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotHasExoWeakspot"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Static";
		};
	};
	recovery = 
	{
		duration = 2.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	startupSubActions = 
	[
		{
			name = "charging_tpp_loop";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = 
			{
				targetSlot = "Chest";
			} : AIActionTarget.CombatTarget;
			predictionTime = 0.25f;
			rangedAttack = "Attacks.PlasmaShotTurtle";
			triggerMode = "TriggerMode.SemiAuto";
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseBarrageShootingPackage"
			];
			numberOfShots = 500;
			pauseCondition = 
			[
				{
					condition = 
					{
						OR = 
						[
							"Condition.FriendlyFire"
						];
					} : AIActionOR;
				}
			];
		} : AISubActionShootWithWeapon
	];
	recoverySubActions = 
	[
		{
			statusEffects = 
			[
				"BaseStatusEffect.BossSuicide"
			];
			apply = true;
			remove = true;
		} : AISubActionStatusEffect, 
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.01f;
			attack = "NPCAttacks.StrongAttackStagger";
			attackRange = 0.00000001f;
			attackName = "SpecialAttack";
		} : AISubActionAttackWithWeapon
	];
	animData = 
	{
		animFeature = "SpecialAttackNoShield";
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.CombatTarget";
		}
	];
}

IntroTaunt : CombatTaunt01
{
}

CombatTauntSequence : AIActionSequence
{
	actions = 
	[
		"RoyceExo.RotateToTarget", "RoyceExo.CombatTaunt01", "GenericArchetype.Success"
	];
}

CombatTauntJamCondition : AIAction
{
	activationCondition = 
	{
		condition = "Condition.IsNPCUnderWeaponMalfunctionQuickhack";
	};
}

CombatTauntCondition : AIAction
{
	cooldowns = 
	[
		"RoyceExo.TauntCooldown"
	];
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove3mPrediction", "Condition.NotIsUsingOffMeshLink"
			];
		} : AIActionAND;
	};
}

CombatTaunt01 : AIAction
{
	cooldowns = 
	[
		"RoyceExo.TauntCooldown"
	];
	startup = 
	{
		duration = 0.967f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchNone";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		useDurationFromAnimSlot = false;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchNone";
			locomotionMode = "Static";
		};
		conditionSuccessDuration = 4.f;
		toNextPhaseConditionCheckInterval = 1.f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.CombatTarget"
					];
				} : AIActionOR;
			}
		];
	};
	recovery = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchNone";
			locomotionMode = "Static";
		};
	};
	subActions = 
	[
		{
			name = "weakspot_compensating";
		} : AISubActionSpawnFX, 
		{
			name = "weapon_overload";
		} : AISubActionSpawnFX
	];
	animData = 
	{
		animFeature = "Reload";
		animVariation = 0;
		animSlot = 
		{
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.EyesHead";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

CombatBreak : AIAction
{
	loop = 
	{
		duration = 3.f;
	};
}

EquipSelector : AIActionSmartComposite
{
	nodes = 
	[
		"GenericArchetype.Success"
	];
}

EquipPlasmaCutterCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotHasRifle"
			];
		} : AIActionAND;
	};
}

EquipPlasmaCutterInstantly : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetAbove5m"
			];
		} : AIActionAND;
	};
	loop = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "Unstoppable";
			locomotionMode = "Moving";
		};
	};
	subActions = 
	[
		{
			attachmentSlot = "AttachmentSlots.WeaponRight";
			itemType = "ItemType.Wea_Rifle";
		} : AISubActionForceEquip
	];
}

SE_Pain : AIAction
{
	loop = 
	{
		duration = 3.f;
		changeNPCState = 
		{
			upperBodyState = "Taunt";
			hitReactionMode = "Unstoppable";
		};
	};
	subActions = 
	[
		{
			statusEffects = 
			[
				"Royce.Phase2"
			];
			remove = false;
		} : AISubActionStatusEffect, 
		{
			statusEffects = 
			[
				"Royce.Phase1"
			];
			apply = false;
		} : AISubActionStatusEffect, 
		{
			statusEffects = 
			[
				"Royce.Broken"
			];
			remove = false;
		} : AISubActionStatusEffect
	];
	animData = 
	{
		animFeature = "SE_Pain";
		animSlot = 
		{
		};
	};
}

SE_PainWorkspot : AIAction
{
	loop = 
	{
	};
	subActions = 
	[
		{
			statusEffects = 
			[
				"Royce.Phase2"
			];
			remove = false;
		} : AISubActionStatusEffect, 
		{
			statusEffects = 
			[
				"Royce.Phase1"
			];
			apply = false;
		} : AISubActionStatusEffect, 
		{
			statusEffects = 
			[
				"Royce.Broken"
			];
			remove = false;
		} : AISubActionStatusEffect
	];
}

SE_QuickHackStaggerLocomotion : StatusEffectActions.SE_QuickHackStaggerLocomotion
{
	startup = 
	{
		useDurationFromAnimSlot = false;
		duration = 0.f;
	};
	loop = 
	{
		useDurationFromAnimSlot = false;
		duration = 0.f;
	};
	recovery = 
	{
		useDurationFromAnimSlot = false;
		duration = 0.f;
	};
	animData = 
	{
	};
}

SE_QuickHackFreezeLocomotion : StatusEffectActions.SE_QuickHackFreezeLocomotion
{
	activationCondition = 
	{
		condition = 
		{
			OR = 
			[
				"Condition.StatusEffectLocomotionMalfunction", "Condition.StatusEffectLocomotionMalfunctionLevel2", "Condition.StatusEffectLocomotionMalfunctionLevel3", "Condition.StatusEffectLocomotionMalfunctionLevel4"
			];
		} : AIActionOR;
	};
	startup = 
	{
		useDurationFromAnimSlot = false;
		duration = 0.f;
	};
	loop = 
	{
		useDurationFromAnimSlot = false;
		changeNPCState = 
		{
			hitReactionMode = "Unstoppable";
		};
		toNextPhaseConditionCheckInterval = 0.f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.StatusEffectLocomotionMalfunction", "Condition.StatusEffectLocomotionMalfunctionLevel2", "Condition.StatusEffectLocomotionMalfunctionLevel3", "Condition.StatusEffectLocomotionMalfunctionLevel4"
					];
				} : AIActionOR;
			}
		];
	};
	recovery = 
	{
		useDurationFromAnimSlot = false;
		duration = 0.f;
	};
	animData = 
	{
	};
}

SE_Whistle : StatusEffectActions.SE_Whistle
{
	startup = 
	{
		duration = 0.f;
	};
	loop = 
	{
		duration = 2.f;
		toNextPhaseConditionCheckInterval = 0.25f;
		toNextPhaseCondition = 
		[
			{
				condition = "Condition.InStatesCombat";
			}
		];
	};
	recovery = 
	{
		duration = 0.f;
	};
	animData = 
	{
		animFeature = "SE_CommsCall";
		animSlot = 
		{
		};
	};
}

SE_CombatWhistle : StatusEffectActions.SE_CombatWhistle
{
	startup = 
	{
		duration = 0.f;
	};
	loop = 
	{
		duration = 2.f;
	};
	recovery = 
	{
		duration = 0.f;
	};
	animData = 
	{
		animFeature = "SE_CommsCall";
		animSlot = 
		{
		};
	};
}

SE_DefeatedStartup : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SE_DefeatedStartupRegular"
	];
}

SE_DefeatedStartupRegular : AIAction
{
	startup = 
	{
		duration = 3.3f;
	};
	loop = 
	{
		duration = 0.265f;
	};
	startupSubActions = 
	[
		{
			CName name = "death_sparks";
		} : AISubActionSpawnFX
	];
	animData = 
	{
		animFeature = "Royce_DefeatedLoop";
		animSlot = 
		{
		};
		animVariation = 0;
	};
}

SE_DefeatedLoop : AIActionSelector
{
	actions = 
	[
		"RoyceExo.SE_Defeated"
	];
}

SE_Defeated : AIAction
{
	loop = 
	{
	};
	animData = 
	{
		animFeature = "Royce_DefeatedLoop";
		animSlot = 
		{
		};
		animVariation = 0;
	};
}

SE_DefeatedRecover : AIAction
{
	startup = 
	{
	};
	loop = 
	{
	};
	recovery = 
	{
	};
	animData = 
	{
		animFeature = "Royce_DefeatedLoop";
		animSlot = 
		{
		};
		animVariationSubAction = 
		{
		} : AISubActionHitData;
	};
}

Shield_Off : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotHasExoWeakspot"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 3.f;
	};
	loop = 
	{
	};
	animData = 
	{
		animFeature = "Shield_Off";
		animSlot = 
		{
		};
	};
}

RotateSlideData : AIActionSlideData
{
	target = "AIActionTarget.CombatTarget";
	duration = 0.f;
	distance = 0.f;
	offsetToTarget = 1.5f;
	finalRotationAngle = 0.f;
	usePositionSlide = false;
	useRotationSlide = true;
}

RotateToCustomTargetSlideData : RotateSlideData
{
	target = "AIActionTarget.CustomWorldPosition";
}

MeleeLoopRotateSlideData : RotateSlideData
{
	duration = 0.2f;
}

JumpAttackSlideData : AIActionSlideData
{
	target = "AIActionTarget.CombatTarget";
	duration = 0.8f;
	slideStartDelay = 0.f;
	distance = 10.f;
	positionSpeed = 5.f;
	offsetToTarget = 2.f;
	useRotationSlide = false;
}

SetSpecialAttackCooldown : AIAction
{
	subActions = 
	[
		{
			delay = -1.f;
			cooldowns = 
			[
				"RoyceExo.SpecialAttackCooldown"
			];
		} : AISubActionStartCooldown
	];
}

SpecialAttackCooldown : AIActionCooldown
{
	name = "SpecialAttackCooldown";
	duration = 35.f;
}

SpecialAttackInitCooldown : AIActionCooldown
{
	name = "SpecialAttackCooldown";
	duration = 45.f;
}

JumpAttackCooldown : AIActionCooldown
{
	name = "JumpAttackCooldown";
	duration = 20.f;
}

JumpAttackInitCooldown : AIActionCooldown
{
	name = "JumpAttackCooldown";
	duration = 0.f;
}

SetSwipeAttackCooldown : AIAction
{
	subActions = 
	[
		{
			delay = -1.f;
			cooldowns = 
			[
				"RoyceExo.SwipeAttackCooldown"
			];
		} : AISubActionStartCooldown
	];
}

SwipeAttackCooldown : AIActionCooldown
{
	name = "SwipeAttackCooldown";
	duration = 12.5f;
}

SwipeAttackInitCooldown : AIActionCooldown
{
	name = "SwipeAttackCooldown";
	duration = 12.5f;
}

MeleeAttackCooldown : AIActionCooldown
{
	name = "MeleeAttackCooldown";
	duration = 0.f;
}

MeleeAttackInitCooldown : AIActionCooldown
{
	name = "MeleeAttackCooldown";
	duration = 1.5f;
}

DashSideCooldown : AIActionCooldown
{
	name = "DashSideCooldown";
	duration = 10.f;
}

DashSideInitCooldown : AIActionCooldown
{
	name = "DashSideCooldown";
	duration = 2.f;
}

DashAwayCooldown : AIActionCooldown
{
	name = "DashAwayCooldown";
	duration = 3.f;
}

DashAwayInitCooldown : AIActionCooldown
{
	name = "DashAwayCooldown";
	duration = 0.f;
}

SetAimAttackCooldown : AIAction
{
	subActions = 
	[
		{
			delay = -1.f;
			cooldowns = 
			[
				"RoyceExo.AimAttackCooldown"
			];
		} : AISubActionStartCooldown
	];
}

AimAttackCooldown : AIActionCooldown
{
	name = "AimAttackCooldown";
	duration = 0.f;
}

SetAimAttackSplashCooldown : AIAction
{
	subActions = 
	[
		{
			delay = -1.f;
			cooldowns = 
			[
				"RoyceExo.AimAttackSplashCooldown"
			];
		} : AISubActionStartCooldown
	];
}

AimAttackSplashCooldown : AIActionCooldown
{
	name = "AimAttackSplashCooldown";
	duration = 7.5f;
}

AimAttackInitCooldown : AIActionCooldown
{
	name = "AimAttackCooldown";
	duration = 0.f;
}

SetInitialTauntCooldown : AIAction
{
	subActions = 
	[
		{
			delay = -1.f;
			cooldowns = 
			[
				"RoyceExo.TauntInitCooldown"
			];
		} : AISubActionStartCooldown
	];
}

TauntCooldown : AIActionCooldown
{
	name = "TauntCooldown";
	duration = 20.f;
}

TauntInitCooldown : AIActionCooldown
{
	name = "TauntCooldown";
	duration = 5.f;
}

SetStrafeCooldown : AIAction
{
	subActions = 
	[
		{
			delay = -1.f;
			cooldowns = 
			[
				"RoyceExo.StrafeCooldown"
			];
		} : AISubActionStartCooldown
	];
}

StrafeCooldown : AIActionCooldown
{
	name = "StrafeCooldown";
	duration = 25.f;
}

BossInvestigateCustomComposite : AIActionSmartComposite
{
	type = "AISmartCompositeType.Sequence";
	nodes = 
	[
		"RoyceExo.AimAttackDeviceEquip", "RoyceExo.AimAttackDevice", "RoyceExo.SingleMeleeAttackShield0Device", "RoyceExo.SingleMeleeAttackNoShield0Device", "RoyceExo.IdleInvestigate", "GenericArchetype.Success"
	];
}

DeviceInvestigationLookat : AIAction
{
	loop = 
	{
	};
}

HearDeviceNoiseBack : AIAction
{
}

HearDeviceNoiseBackUnarmed : ReactionsActions.HearDeviceNoiseBack
{
}

HearDeviceNoiseFront : ReactionsActions.HearDeviceNoiseBack
{
}

HearDeviceNoiseFrontUnarmed : ReactionsActions.HearDeviceNoiseBack
{
}

HearDeviceNoiseSelector : AIActionSelector
{
	actions = 
	[
		"GenericArchetype.Success"
	];
}

MoveToStimSourceInvestigate : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.StimSource", "Condition.CalculatePathToStimSource"
			];
		} : AIActionAND;
	};
	loop = 
	{
		movePolicy = 
		{
			target = "AIActionTarget.StimSource";
			movementType = "Walk";
			dontUseStart = true;
		};
		toNextPhaseConditionCheckInterval = 0.5f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					AND = 
					[
						"Condition.DistanceToDestinationBelow5m", "Condition.MovementIsEvaluated"
					];
				} : AIActionAND;
			}
		];
	};
	subActions = 
	[
		{
			name = "smasher_shotgun_barrage";
		} : AISubActionPlayVoiceOver
	];
	lookats = 
	[
		{
			preset = "LookatPreset.Smasher_Body";
			target = "AIActionTarget.StimTarget";
		}, 
		{
			preset = "LookatPreset.EyesHeadWithBodyAttached";
			target = "AIActionTarget.StimTarget";
		}
	];
}

AimAttackDevice : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.HasRifle", "Condition.StimTargetAbove3m"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 2.f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
		useDurationFromAnimSlot = false;
	};
	loop = 
	{
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
	};
	recovery = 
	{
		duration = 1.5f;
		changeNPCState = 
		{
			upperBodyState = "Shoot";
			locomotionMode = "Moving";
		};
		useDurationFromAnimSlot = false;
	};
	startupSubActions = 
	[
		{
			name = "charging_tpp_loop";
		} : AISubActionSpawnFX
	];
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			target = "AIActionTarget.CustomWorldPosition";
			rangedAttack = "Attacks.PlasmaShotCharge";
			triggerMode = "TriggerMode.SemiAuto";
			predictionTime = 0.25f;
			delay = 0.f;
			shootingPatternPackages = 
			[
				"ShootingPatterns.PulseChargeShootingPackage"
			];
			numberOfShots = 1;
			pauseCondition = 
			[
				{
					condition = 
					{
						OR = 
						[
							"Condition.FriendlyFire"
						];
					} : AIActionOR;
				}
			];
		} : AISubActionShootWithWeapon
	];
	recoverySubActions = 
	[
		{
			name = "InvestigationEnded";
			targetListener = "AIActionTarget.StimTarget";
			delay = 0.f;
		} : AISubActionQueueCommunicationEvent, 
		{
			name = "InvestigationEnded";
			targetListener = "AIActionTarget.TargetDevice";
			delay = 0.f;
		} : AISubActionQueueCommunicationEvent
	];
	subActions = 
	[
		{
			name = "stlh_investigate";
			delay = 0.25f;
		} : AISubActionPlayVoiceOver, 
		{
			name = "InvestigationStarted";
			targetListener = "AIActionTarget.StimTarget";
		} : AISubActionQueueCommunicationEvent, 
		{
			name = "InvestigationStarted";
			targetListener = "AIActionTarget.TargetDevice";
		} : AISubActionQueueCommunicationEvent
	];
	animData = 
	{
		animFeature = "ShootAction";
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.StimTarget;
		}, 
		{
			preset = "LookatPreset.CentaurWeapon";
			target = "AIActionTarget.StimTarget";
		}, 
		{
			preset = "LookatPreset.CentaurShield";
			target = "AIActionTarget.StimTarget";
		}
	];
}

AimAttackDeviceEquip : AimAttackDevice
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotHasRifle"
			];
		} : AIActionAND;
	};
	subActions = 
	[
		{
			attachmentSlot = "AttachmentSlots.WeaponRight";
			itemType = "ItemType.Wea_Rifle";
		} : AISubActionForceEquip
	];
}

SingleMeleeAttackShield0Device : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.StimTargetBelow3m", "Condition.HasExoWeakspot"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.6f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
		useDurationFromAnimSlot = false;
	};
	loop = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	recovery = 
	{
		duration = 0.667f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.RoyceStrongAttackKnockdown";
			attackRange = 3.5f;
			attackTime = 0.f;
			attackName = "ShieldAttack";
			colliderBoxSize = ( 2.5f, 0.3f, 1.f );
		} : AISubActionAttackWithWeapon
	];
	recoverySubActions = 
	[
		{
			name = "InvestigationEnded";
			targetListener = "AIActionTarget.StimTarget";
			delay = 0.f;
		} : AISubActionQueueCommunicationEvent, 
		{
			name = "InvestigationEnded";
			targetListener = "AIActionTarget.TargetDevice";
			delay = 0.f;
		} : AISubActionQueueCommunicationEvent
	];
	subActions = 
	[
		{
			name = "stlh_investigate";
			delay = 0.25f;
		} : AISubActionPlayVoiceOver, 
		{
			name = "InvestigationStarted";
			targetListener = "AIActionTarget.StimTarget";
		} : AISubActionQueueCommunicationEvent, 
		{
			name = "InvestigationStarted";
			targetListener = "AIActionTarget.TargetDevice";
		} : AISubActionQueueCommunicationEvent
	];
	animData = 
	{
		animFeature = "MeleeAttack";
		animVariation = 0;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

SingleMeleeAttackNoShield0Device : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.StimTargetBelow3m", "Condition.NotHasExoWeakspot"
			];
		} : AIActionAND;
	};
	startup = 
	{
		duration = 0.6f;
		useDurationFromAnimSlot = false;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		duration = 0.5f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	recovery = 
	{
		duration = 0.667f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
	loopSubActions = 
	[
		{
			weaponSlots = 
			[
				"AttachmentSlots.WeaponRight"
			];
			attackDuration = 0.1f;
			attack = "NPCAttacks.RoyceStrongAttackKnockdown";
			attackRange = 3.5f;
			attackTime = 0.f;
			attackName = "ShieldAttack";
			colliderBoxSize = ( 2.5f, 0.3f, 1.5f );
		} : AISubActionAttackWithWeapon
	];
	recoverySubActions = 
	[
		{
			name = "InvestigationEnded";
			targetListener = "AIActionTarget.StimTarget";
			delay = 0.f;
		} : AISubActionQueueCommunicationEvent, 
		{
			name = "InvestigationEnded";
			targetListener = "AIActionTarget.TargetDevice";
			delay = 0.f;
		} : AISubActionQueueCommunicationEvent
	];
	subActions = 
	[
		{
			name = "stlh_investigate";
			delay = 0.25f;
		} : AISubActionPlayVoiceOver, 
		{
			name = "InvestigationStarted";
			targetListener = "AIActionTarget.StimTarget";
		} : AISubActionQueueCommunicationEvent, 
		{
			name = "InvestigationStarted";
			targetListener = "AIActionTarget.TargetDevice";
		} : AISubActionQueueCommunicationEvent
	];
	animData = 
	{
		animFeature = "MeleeAttackNoShield";
		animVariation = 0;
		animSlot = 
		{
			startupSlide = "RoyceExo.RotateSlideData";
			loopSlide = "RoyceExo.RotateSlideData";
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.CentaurBody";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

IdleInvestigate : AIAction
{
	loop = 
	{
		duration = 5.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			locomotionMode = "Static";
		};
	};
}

CombatTaunt01Investigate : AIAction
{
	startup = 
	{
		duration = 0.967f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchNone";
			locomotionMode = "Static";
		};
	};
	loop = 
	{
		useDurationFromAnimSlot = false;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchNone";
			locomotionMode = "Static";
		};
		conditionSuccessDuration = 4.f;
		toNextPhaseConditionCheckInterval = 1.f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					AND = 
					[
						"Condition.CombatTarget"
					];
				} : AIActionAND;
			}
		];
	};
	recovery = 
	{
		duration = 1.f;
		changeNPCState = 
		{
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchNone";
			locomotionMode = "Static";
		};
	};
	subActions = 
	[
		{
			name = "weakspot_compensating";
		} : AISubActionSpawnFX, 
		{
			name = "weapon_overload";
		} : AISubActionSpawnFX
	];
	animData = 
	{
		animFeature = "Reload";
		animVariation = 0;
		animSlot = 
		{
		};
	};
	lookats = 
	[
		{
			preset = "LookatPreset.EyesHead";
			target = 
			{
				targetSlot = "Head";
			} : AIActionTarget.CombatTarget;
		}
	];
}

MoveCloserToStimSource : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.NotWhistleStimType", "Condition.StimSource", "Condition.StimTargetInRestrictedMovementArea"
			];
		} : AIActionAND;
	};
	loop = 
	{
		movePolicy = 
		{
			target = "AIActionTarget.StimSource";
			movementType = "Walk";
		};
		toNextPhaseConditionCheckInterval = 0.5f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					AND = 
					[
						"Condition.NotIsUsingOffMeshLink", {
							OR = 
							[
								"Condition.StimSourceBelow2dot5m", "Condition.NotCalculatePathToStimSource"
							];
						} : AIActionOR
					];
				} : AIActionAND;
			}
		];
	};
	subActions = 
	[
		"AdamSmasherBoss.PlayStealthSearchVoiceOver"
	];
}

EnteringAlerted : AIAction
{
	loop = 
	{
		duration = 0.1f;
		changeNPCState = 
		{
			locomotionMode = "Static";
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchMin";
		};
	};
	subActions = 
	[
		{
			name = "bumb";
		} : AISubActionPlayVoiceOver
	];
}

EnteringPatrolling : AIAction
{
	loop = 
	{
		duration = 0.1f;
		changeNPCState = 
		{
			locomotionMode = "Static";
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchMin";
		};
	};
	subActions = 
	[
		{
			name = "interrupt";
		} : AISubActionPlayVoiceOver
	];
}

FindingPlayer : AIAction
{
	loop = 
	{
		duration = 0.1f;
		changeNPCState = 
		{
			locomotionMode = "Static";
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchMin";
		};
	};
	subActions = 
	[
		{
			name = "smasher_taunt_special";
		} : AISubActionPlayVoiceOver
	];
}

RoyceOwnerParryCounterCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.AttackOwnerMaxParriesCount2"
			];
		} : AIActionAND;
	};
	loop = 
	{
	};
}

RoyceOwnerParryCounterSoftCondition : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.AttackOwnerMaxParriesCount1"
			];
		} : AIActionAND;
	};
	loop = 
	{
	};
}

ResetParryCount : AIAction
{
	loop = 
	{
		duration = 0.1f;
		changeNPCState = 
		{
			locomotionMode = "Static";
			upperBodyState = "Attack";
			hitReactionMode = "UnstoppableTwitchMin";
		};
	};
	subActions = 
	[
		{
			name = "ResetmyAttackParriedCount";
		} : AISubActionQueueAIEvent
	];
}

ParryStaggerBack : AIAction
{
	loop = 
	{
		duration = 3.f;
		changeNPCState = 
		{
			upperBodyState = "Taunt";
			hitReactionMode = "Unstoppable";
		};
	};
	subActions = 
	[
		{
			name = "death_sparks";
		} : AISubActionSpawnFX
	];
	animData = 
	{
		animFeature = "StaggerFront";
		animSlot = 
		{
		};
	};
}

