package Corpo_Katana
using RTDB, ReactionsActions, CombatDecorator, MeleeActions, MeleeKatanaActions, DashAndDodgeActions

Map : AINodeMap
{
	map = 
	[
		{
			node = "GenericArchetype.MeleeCloseAttackLight02Condition";
			isOverriddenBy = "";
		}, 
		{
			node = "GenericArchetype.MeleeAttackLight03Condition";
			isOverriddenBy = "";
		}, 
		{
			node = "GenericArchetype.MeleeChargeSingle02Condition";
			isOverriddenBy = "";
		}, 
		{
			node = "GenericArchetype.MeleeChargeSingle03Condition";
			isOverriddenBy = "";
		}, 
		{
			node = "GenericArchetype.MeleeChargeJump02Condition";
			isOverriddenBy = "";
		}, 
		{
			node = "GenericArchetype.MeleeStrongSingle01Condition";
			isOverriddenBy = "Corpo_Katana.MeleeStrongSingle01Condition";
		}, 
		{
			node = "GenericArchetype.MeleeStrongSingle02Condition";
			isOverriddenBy = "Corpo_Katana.MeleeStrongSingle02Condition";
		}, 
		{
			node = "GenericArchetype.MeleeBlockState";
			isOverriddenBy = "Corpo_Katana.MeleeBlockState";
		}, 
		{
			node = "GenericArchetype.HitReactionTauntCondition";
			isOverriddenBy = "";
		}, 
		{
			node = "GenericArchetype.CombatTauntsCondition";
			isOverriddenBy = "";
		}, 
		{
			node = "MeleeActions.SimpleMeleeCombatComboSelector";
			isOverriddenBy = "Corpo_Katana.CustomSimpleMeleeCombatComboSelector";
		}, 
		{
			node = "DashAndDodgeActions.KerenzikovDodgeCompositeSelectorDefinition";
			isOverriddenBy = "Corpo_Katana.KerenzikovDodgeCompositeSelectorDefinition";
		}, 
		{
			node = "DashAndDodgeActions.DodgeAfterHitReactionCompositeSelectorDefinition";
			isOverriddenBy = "Corpo_Katana.DodgeAfterHitReactionCompositeSelectorDefinition";
		}, 
		{
			node = "DashAndDodgeActions.DodgeMeleeCompositeSelectorDefinition";
			isOverriddenBy = "Corpo_Katana.DodgeMeleeCompositeSelectorDefinition";
		}, 
		{
			node = "DashAndDodgeActions.DodgeForParryMeleeCompositeSelectorDefinition";
			isOverriddenBy = "Corpo_Katana.DodgeForParryMeleeCompositeSelectorDefinition";
		}, 
		{
			node = "MeleeActions.MeleeParry01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeParry01Selector";
		}, 
		{
			node = "MeleeActions.MeleeBlock01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeBlock01Selector";
		}, 
		{
			node = "MeleeActions.MeleeKerenzikovDodge01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeKerenzikovDodge01Selector";
		}, 
		{
			node = "MeleeActions.MeleeBlockDodge01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeBlockDodge01Selector";
		}, 
		{
			node = "MeleeActions.MeleeBlockDodgeToParry01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeBlockDodgeToParry01Selector";
		}, 
		{
			node = "MeleeActions.MeleePushAttack01Selector";
			isOverriddenBy = "Corpo_Katana.MeleePushAttack01Selector";
		}, 
		{
			node = "MeleeActions.MeleeLightCloseSingleLeft01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeLightCloseSingleLeft01Selector";
		}, 
		{
			node = "MeleeActions.MeleeLightCloseSingleRight01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeLightCloseSingleRight01Selector";
		}, 
		{
			node = "MeleeActions.MeleeLightCloseSingleBack01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeLightCloseSingleBack01Selector";
		}, 
		{
			node = "MeleeActions.MeleeLightCloseCombo01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeLightCloseCombo01Selector";
		}, 
		{
			node = "MeleeActions.MeleeLightCloseCombo02Selector";
			isOverriddenBy = "Corpo_Katana.MeleeLightCloseCombo02Selector";
		}, 
		{
			node = "MeleeActions.MeleeLightCombo01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeLightCombo01Selector";
		}, 
		{
			node = "MeleeActions.MeleeLightCombo02Selector";
			isOverriddenBy = "Corpo_Katana.MeleeLightCombo02Selector";
		}, 
		{
			node = "MeleeActions.MeleeStrongSingle01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeStrongSingle01Selector";
		}, 
		{
			node = "MeleeActions.MeleeStrongSingle02Selector";
			isOverriddenBy = "Corpo_Katana.MeleeStrongSingle02Selector";
		}, 
		{
			node = "MeleeActions.MeleeChargeSingle01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeChargeSingle01Selector";
		}, 
		{
			node = "MeleeActions.MeleeChargeSingle02Selector";
			isOverriddenBy = "Corpo_Katana.MeleeChargeSingle02Selector";
		}, 
		{
			node = "MeleeActions.MeleeChargeJump01Selector";
			isOverriddenBy = "Corpo_Katana.MeleeChargeJump01Selector";
		}, 
		{
			node = "MeleeActions.MeleeChargeJump02Selector";
			isOverriddenBy = "Corpo_Katana.MeleeChargeJump02Selector";
		}, 
		{
			node = "MeleeActions.DeflectReactionCompositeSelectorDefinition";
			isOverriddenBy = "Corpo_Katana.DeflectReactionCompositeSelectorDefinition";
		}, 
		{
			node = "MeleeActions.MeleeTauntSupportAreaSelector";
			isOverriddenBy = "Corpo_Katana.MeleeTauntSupportAreaSelector";
		}, 
		{
			node = "MeleeActions.MeleeTauntCombatAreaSelector";
			isOverriddenBy = "Corpo_Katana.MeleeTauntCombatAreaSelector";
		}, 
		{
			node = "MeleeActions.MeleeTauntContactAreaSelector";
			isOverriddenBy = "Corpo_Katana.MeleeTauntContactAreaSelector";
		}, 
		{
			node = "MeleeActions.MeleeTauntHitReactionSelector";
			isOverriddenBy = "Corpo_Katana.MeleeTauntHitReactionSelector";
		}, 
		{
			node = "MeleeActions.MeleeTauntPreAttackSelector";
			isOverriddenBy = "Corpo_Katana.MeleeTauntPreAttackSelector";
		}
	];
}

CustomSimpleMeleeCombatComboSelector : AIActionSmartComposite
{
	nodes = 
	[
		"MeleeKatanaActions.SimpleMeleeCombatComboDefinition"
	];
}

MeleeStrongSingle01Condition : MeleeStrongSingle01ConditionDefinition
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow4m", "Condition.AbilityCanUseRightHand", "Condition.AbilityCanUseLeftHand", "Condition.AbilityCanUseLegs"
			];
		} : AIActionAND;
	};
}

MeleeStrongSingle02Condition : MeleeStrongSingle02ConditionDefinition
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.TargetBelow4m", "Condition.AbilityCanUseRightHand", "Condition.AbilityCanUseLeftHand", "Condition.AbilityCanUseLegs"
			];
		} : AIActionAND;
	};
}

MeleeBlockState : AIAction
{
	activationCondition = 
	{
		condition = 
		{
			AND = 
			[
				"Condition.AbilityCanUseRightHand", "Condition.AbilityCanUseLeftHand", "Condition.AbilityCanBlock", "Condition.NotPreviousAttackNameBlockDodge", "Condition.TargetBelow5m", "Condition.TargetPOVBelow90deg", "Condition.HasMeleeWeapon", "Condition.TargetHasMeleeWeapon", "Condition.NotTicketEquip"
			];
		} : AIActionAND;
	};
	loop = 
	{
		duration = 5.f;
		changeNPCState = 
		{
			upperBodyState = "Defend";
		};
		toNextPhaseConditionCheckInterval = 0.1f;
		toNextPhaseCondition = 
		[
			{
				condition = 
				{
					OR = 
					[
						"Condition.TargetAbove5m", "Condition.TargetPOVAbove120deg", "Condition.TargetHasRangedWeapon", "Condition.NotInStatesDefend", {
							AND = 
							[
								"Condition.AbilityCanParry", "Condition.MinBlockCount1"
							];
						} : AIActionAND
					];
				} : AIActionOR;
			}
		];
	};
	subActions = 
	[
		{
			delay = 0.f;
			cooldowns = 
			[
				{
					name = "BlockStateCooldown";
					duration = 1.f;
				}
			];
		} : AISubActionStartCooldown
	];
	animData = 
	{
		animFeature = "BlockIdle";
		animSlot = 
		{
			loopSlide = "DashAndDodgeActions.StepsSlideData";
		};
	};
}

KerenzikovDodgeCompositeSelectorDefinition : DashAndDodgeActions.KerenzikovDodgeCompositeSelectorDefinition
{
	nodes = 
	[
		"MeleeKatanaActions.KerenzikovDodgeSelectorDefinition"
	];
}

DodgeAfterHitReactionCompositeSelectorDefinition : DashAndDodgeActions.DodgeAfterHitReactionCompositeSelectorDefinition
{
	nodes = 
	[
		"MeleeKatanaActions.DodgeHitReactionSelectorDefinition"
	];
}

DodgeMeleeCompositeSelectorDefinition : DashAndDodgeActions.DodgeMeleeCompositeSelectorDefinition
{
	nodes = 
	[
		"MeleeKatanaActions.DodgeMeleeSelectorDefinition"
	];
}

DodgeForParryMeleeCompositeSelectorDefinition : DashAndDodgeActions.DodgeForParryMeleeCompositeSelectorDefinition
{
	nodes = 
	[
		"MeleeKatanaActions.DodgeForParryMeleeSelectorDefinition"
	];
}

MeleeParry01Selector : MeleeActions.MeleeParry01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeParry01Definition"
	];
}

MeleeBlock01Selector : MeleeActions.MeleeBlock01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeBlock01Definition"
	];
}

MeleeKerenzikovDodge01Selector : MeleeActions.MeleeKerenzikovDodge01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeKerenzikovDodge01Definition"
	];
}

MeleeBlockDodge01Selector : MeleeActions.MeleeBlockDodge01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeBlockDodge01Definition"
	];
}

MeleeBlockDodgeToParry01Selector : MeleeActions.MeleeBlockDodgeToParry01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeBlockDodgeToParry01Definition"
	];
}

MeleePushAttack01Selector : MeleeActions.MeleePushAttack01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleePushAttack01Definition"
	];
}

MeleeLightCloseSingleLeft01Selector : MeleeActions.MeleeLightCloseSingleLeft01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeLightCloseSingleLeft01Definition"
	];
}

MeleeLightCloseSingleRight01Selector : MeleeActions.MeleeLightCloseSingleRight01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeLightCloseSingleRight01Definition"
	];
}

MeleeLightCloseSingleBack01Selector : MeleeActions.MeleeLightCloseSingleBack01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeLightCloseSingleBack01Definition"
	];
}

MeleeLightCloseCombo01Selector : MeleeActions.MeleeLightCloseCombo01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeLightCloseCombo01Definition"
	];
}

MeleeLightCloseCombo02Selector : MeleeActions.MeleeLightCloseCombo02Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeLightCloseCombo02Definition"
	];
}

MeleeLightCombo01Selector : MeleeActions.MeleeLightCombo01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeLightCombo01Definition"
	];
}

MeleeLightCombo02Selector : MeleeActions.MeleeLightCombo02Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeLightCombo02Definition"
	];
}

MeleeStrongSingle01Selector : MeleeActions.MeleeStrongSingle01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeStrongSingle01Definition"
	];
}

MeleeStrongSingle02Selector : MeleeActions.MeleeStrongSingle02Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeStrongSingle02Definition"
	];
}

MeleeChargeSingle01Selector : MeleeActions.MeleeChargeSingle01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeChargeSingle01Definition"
	];
}

MeleeChargeSingle02Selector : MeleeActions.MeleeChargeSingle02Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeChargeSingle02Definition"
	];
}

MeleeChargeJump01Selector : MeleeActions.MeleeChargeJump01Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeChargeJump01Definition"
	];
}

MeleeChargeJump02Selector : MeleeActions.MeleeChargeJump02Selector
{
	nodes = 
	[
		"MeleeKatanaActions.MeleeChargeJump02Definition"
	];
}

DeflectReactionCompositeSelectorDefinition : MeleeActions.DeflectReactionCompositeSelectorDefinition
{
	nodes = 
	[
		"MeleeKatanaActions.DeflectReactionSelectorDefinition", "MeleeActions.DeflectReactionSelectorDefinition"
	];
}

MeleeTauntSupportAreaSelector : MeleeActions.MeleeTauntSupportAreaSelector
{
	actions = 
	[
		"MeleeKatanaActions.MeleeTauntSupportAreaDefinition"
	];
	defaultAction = "GenericArchetype.Success";
}

MeleeTauntCombatAreaSelector : MeleeActions.MeleeTauntCombatAreaSelector
{
	actions = 
	[
		"MeleeKatanaActions.MeleeTauntCombatAreaDefinition"
	];
	defaultAction = "GenericArchetype.Success";
}

MeleeTauntContactAreaSelector : MeleeActions.MeleeTauntContactAreaSelector
{
	actions = 
	[
		"MeleeKatanaActions.MeleeTauntContactAreaDefinition"
	];
	defaultAction = "GenericArchetype.Success";
}

MeleeTauntHitReactionSelector : MeleeActions.MeleeTauntHitReactionSelector
{
	actions = 
	[
		"MeleeKatanaActions.MeleeTauntHitReactionDefinition"
	];
	defaultAction = "GenericArchetype.Success";
}

MeleeTauntPreAttackSelector : MeleeActions.MeleeTauntPreAttackSelector
{
	actions = 
	[
		"MeleeKatanaActions.MeleeTauntPreAttackDefinition"
	];
	defaultAction = "GenericArchetype.Success";
}

