package FistsAttacks
using RTDB, Attacks, AttackDirections

FistsComboAttackAbstract : Impact
{
	attackSubtype = "AttackType.ComboAttack";
	float attackWindowOpen = 0.20f;
	float attackWindowClosed = 0.4f;
	float idleTransitionTime = 1.0f;
	float blockTransitionTime = 0.45f;
	float attackEffectDelay = 0.2f;
	float attackEffectDuration = 0.06f;
	float cameraSpaceImpulse = -1.0f;
	float impulseDelay = 0.f;
	float startupDuration = 0.1f;
	float activeDuration = 0.367f;
	float recoverDuration = 0.933f;
	float trailStartDelay = 0.1f;
	float trailStopDelay = 0.4f;
	bool hasDeflectAnim = false;
	bool hasHitAnim = false;
	staminaCost = 
	[
		{
			statType = "BaseStats.Stamina";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BaseMeleeAttackStaminaCost";
			opSymbol = "*";
			value = 1f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "AdditiveMultiplier";
			refObject = "Player";
			refStat = "BaseStats.FistsStaminaCostReduction";
			opSymbol = "*";
			value = -1f;
		} : CombinedStatModifier
	];
	audioTag = "normal";
	hitReactionSeverityMin = 0;
	hitReactionSeverityMax = 1;
	bool incrementsCombo = true;
}

FistsComboAttack1 : FistsComboAttackAbstract
{
	attackName = "MeleeComboAttack0";
	fk< AttackDirection > attackDirection = "AttackDirections.Center";
	CName vfxName = "fx_strong_arms_attack_right";
	audioAttackIndex = 0.0f;
}

FistsComboAttack2 : FistsComboAttackAbstract
{
	attackName = "MeleeComboAttack1";
	staminaCost = 
	[
		{
			statType = "BaseStats.Stamina";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BaseMeleeAttackStaminaCost";
			opSymbol = "*";
			value = 1.25f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "AdditiveMultiplier";
			refObject = "Player";
			refStat = "BaseStats.FistsStaminaCostReduction";
			opSymbol = "*";
			value = -1f;
		} : CombinedStatModifier
	];
	fk< StatModifier >[] statModifiers += 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Multiplier";
			value = 1.1f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ThermalDamage";
			modifierType = "Multiplier";
			value = 1.1f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ChemicalDamage";
			modifierType = "Multiplier";
			value = 1.1f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ElectricDamage";
			modifierType = "Multiplier";
			value = 1.1f;
		} : ConstantStatModifier
	];
	fk< AttackDirection > attackDirection = "AttackDirections.Center";
	CName vfxName = "fx_strong_arms_attack_left";
	audioAttackIndex = 1.0f;
}

FistsComboAttack3 : FistsComboAttackAbstract
{
	attackName = "MeleeComboAttack2";
	fk< AttackDirection > attackDirection = "AttackDirections.Center";
	CName vfxName = "fx_strong_arms_attack_right";
	audioAttackIndex = 2.0f;
}

FistsComboAttack4 : FistsComboAttackAbstract
{
	attackName = "MeleeComboAttack3";
	fk< AttackDirection > attackDirection = "AttackDirections.Center";
	audioAttackIndex = 3.0f;
	audioTag = "heavy";
}

FistsComboAttack5 : FistsComboAttackAbstract
{
	attackName = "MeleeComboAttack4";
	fk< AttackDirection > attackDirection = "AttackDirections.Center";
	audioAttackIndex = 3.0f;
	audioTag = "heavy";
}

FistsFinalAttackAbstract : Impact
{
	attackSubtype = "AttackType.FinalAttack";
	float attackWindowOpen = 0.6f;
	float attackWindowClosed = 1.0f;
	float idleTransitionTime = 1.3f;
	float blockTransitionTime = 1.0f;
	float attackEffectDelay = 0.2f;
	float attackEffectDuration = 0.06f;
	float cameraSpaceImpulse = 4.f;
	float impulseDelay = 0.1f;
	float startupDuration = 0.2f;
	float activeDuration = 0.467f;
	float recoverDuration = 1.167f;
	float trailStartDelay = 0.1f;
	float trailStopDelay = 0.4f;
	bool hasDeflectAnim = false;
	bool hasHitAnim = false;
	staminaCost = 
	[
		{
			statType = "BaseStats.Stamina";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BaseMeleeAttackStaminaCost";
			opSymbol = "*";
			value = 1.67f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "AdditiveMultiplier";
			refObject = "Player";
			refStat = "BaseStats.FistsStaminaCostReduction";
			opSymbol = "*";
			value = -1f;
		} : CombinedStatModifier
	];
	fk< StatModifier >[] statModifiers += 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Multiplier";
			value = 1.25f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ThermalDamage";
			modifierType = "Multiplier";
			value = 1.25f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ChemicalDamage";
			modifierType = "Multiplier";
			value = 1.25f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ElectricDamage";
			modifierType = "Multiplier";
			value = 1.25f;
		} : ConstantStatModifier
	];
	attackTag = "final";
	audioTag = "finisher";
	hitReactionSeverityMin = 0;
	hitReactionSeverityMax = 1;
	bool incrementsCombo = true;
}

FistsFinalAttack1 : FistsFinalAttackAbstract
{
	attackName = "MeleeFinalAttack0";
	fk< AttackDirection > attackDirection = "AttackDirections.ThrustRightToLeft";
	audioAttackIndex = 0.0f;
}

FistsFinalAttack2 : FistsFinalAttackAbstract
{
	attackName = "MeleeFinalAttack1";
	fk< AttackDirection > attackDirection = "AttackDirections.RightToLeft";
	audioAttackIndex = 1.0f;
}

FistsFinalAttack3 : FistsFinalAttackAbstract
{
	attackName = "MeleeFinalAttack2";
	fk< AttackDirection > attackDirection = "AttackDirections.RightToLeft";
	float attackEffectDelay = 0.19f;
	CName vfxName = "fx_strong_arms_attack_right";
	audioAttackIndex = 2.0f;
}

FistsFinalAttack4 : FistsFinalAttackAbstract
{
	attackName = "MeleeFinalAttack3";
	fk< AttackDirection > attackDirection = "AttackDirections.LeftToRight";
	float attackEffectDelay = 0.22f;
	audioAttackIndex = 3.0f;
}

FistsFinalAttack5 : FistsFinalAttackAbstract
{
	attackName = "MeleeFinalAttack4";
	fk< AttackDirection > attackDirection = "AttackDirections.RightToLeft";
	float attackEffectDelay = 0.2233f;
	audioAttackIndex = 4.0f;
	audioTag = "heavy";
}

FistsFinalAttack6 : FistsFinalAttackAbstract
{
	attackName = "MeleeFinalAttack5";
	fk< AttackDirection > attackDirection = "AttackDirections.LeftToRight";
	audioAttackIndex = 5.0f;
	audioTag = "finisher";
}

FistsStrongAttackAbstract : StrongImpact
{
	float attackWindowOpen = 0.0f;
	float attackWindowClosed = 0.6f;
	float idleTransitionTime = 1.0f;
	float blockTransitionTime = 0.57f;
	float cameraSpaceImpulse = 4.f;
	float impulseDelay = 0.0f;
	float startupDuration = 0.1f;
	float activeDuration = 0.433f;
	float recoverDuration = 0.533f;
	float trailStartDelay = 0.1f;
	float trailStopDelay = 0.4f;
	bool hasDeflectAnim = false;
	bool hasHitAnim = false;
	staminaCost = 
	[
		{
			statType = "BaseStats.Stamina";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BaseMeleeAttackStaminaCost";
			opSymbol = "*";
			value = 2.08f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "AdditiveMultiplier";
			refObject = "Player";
			refStat = "BaseStats.FistsStaminaCostReduction";
			opSymbol = "*";
			value = -1f;
		} : CombinedStatModifier
	];
	float attackEffectDelay = 0.19f;
	float attackEffectDuration = 0.06f;
	audioTag = "heavy";
	bool incrementsCombo = true;
	float adjustmentDistanceRadiusOffset = 3.0f;
	hitReactionSeverityMin = 0;
	hitReactionSeverityMax = 2;
}

FistsStrongAttack1 : FistsStrongAttackAbstract
{
	attackName = "MeleeStrongAttack0";
	fk< AttackDirection > attackDirection = "AttackDirections.RightToLeft";
	audioAttackIndex = 0.0f;
}

FistsStrongAttack2 : FistsStrongAttackAbstract
{
	attackName = "MeleeStrongAttack1";
	fk< AttackDirection > attackDirection = "AttackDirections.LeftToRight";
	audioAttackIndex = 1.0f;
}

FistsStrongAttack3 : FistsStrongAttackAbstract
{
	attackName = "MeleeStrongAttack2";
	fk< AttackDirection > attackDirection = "AttackDirections.RightToLeft";
	audioAttackIndex = 2.0f;
	audioTag = "heavy";
}

FistsBlockAttack : FistsComboAttackAbstract
{
	attackSubtype = "AttackType.BlockAttack";
	attackName = "MeleeBlockAttack0";
	fk< AttackDirection > attackDirection = "AttackDirections.Center";
	bool hasDeflectAnim = false;
	bool hasHitAnim = false;
	float attackWindowOpen = 0.1f;
	float attackWindowClosed = 0.8f;
	float idleTransitionTime = 0.9f;
	float blockTransitionTime = 0.8f;
	float attackEffectDelay = 0.1f;
	float attackEffectDuration = 0.003f;
	float startupDuration = 0.1f;
	float activeDuration = 0.5f;
	float recoverDuration = 0.3333f;
	bool incrementsCombo = false;
	float trailStartDelay = 0.1f;
	float trailStopDelay = 0.4f;
	staminaCost = 
	[
		{
			statType = "BaseStats.Stamina";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BaseMeleeAttackStaminaCost";
			opSymbol = "*";
			value = 1.25f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "AdditiveMultiplier";
			refObject = "Player";
			refStat = "BaseStats.FistsStaminaCostReduction";
			opSymbol = "*";
			value = -1f;
		} : CombinedStatModifier
	];
	fk< StatModifier >[] statModifiers += 
	[
		{
			statType = "BaseStats.PhysicalDamage";
			modifierType = "Multiplier";
			value = 0.01f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ThermalDamage";
			modifierType = "Multiplier";
			value = 0.01f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ChemicalDamage";
			modifierType = "Multiplier";
			value = 0.01f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ElectricDamage";
			modifierType = "Multiplier";
			value = 0.01f;
		} : ConstantStatModifier
	];
	audioTag = "block";
	hitReactionSeverityMin = 1;
	hitReactionSeverityMax = 1;
	audioAttackIndex = 0.0f;
}

FistsSafeAttack : FistsComboAttackAbstract
{
	attackSubtype = "AttackType.SafeAttack";
	attackName = "MeleeSafeAttack0";
	fk< AttackDirection > attackDirection = "AttackDirections.RightToLeft";
	bool hasDeflectAnim = false;
	bool hasHitAnim = false;
	audioAttackIndex = 0.0f;
	float trailStartDelay = 0.1f;
	float trailStopDelay = 0.4f;
	audioTag = "normal";
	bool incrementsCombo = true;
}

FistsSprintAttack : Impact
{
	attackSubtype = "AttackType.SprintAttack";
	attackName = "MeleeSprintAttack0";
	float attackWindowOpen = 0.2f;
	float attackWindowClosed = 0.4f;
	float idleTransitionTime = 1.0f;
	float blockTransitionTime = 0.4f;
	float cameraSpaceImpulse = 4.f;
	float impulseDelay = 0.f;
	float startupDuration = 0.1f;
	float activeDuration = 0.367f;
	float recoverDuration = 0.633f;
	float trailStartDelay = 0.1f;
	float trailStopDelay = 0.4f;
	staminaCost = 
	[
		{
			statType = "BaseStats.Stamina";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BaseMeleeAttackStaminaCost";
			opSymbol = "*";
			value = 1.25f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "AdditiveMultiplier";
			refObject = "Player";
			refStat = "BaseStats.FistsStaminaCostReduction";
			opSymbol = "*";
			value = -1f;
		} : CombinedStatModifier
	];
	fk< AttackDirection > attackDirection = "AttackDirections.ThrustRightToLeft";
	float attackEffectDelay = 0.16f;
	float attackEffectDuration = 0.06f;
	audioTag = "heavy";
	hitReactionSeverityMin = 0;
	hitReactionSeverityMax = 1;
	audioAttackIndex = 0.0f;
	bool incrementsCombo = true;
}

FistsJumpAttack : Impact
{
	attackSubtype = "AttackType.JumpAttack";
	attackName = "MeleeJumpAttack0";
	float attackWindowOpen = 0.2f;
	float attackWindowClosed = 0.4f;
	float idleTransitionTime = 0.5f;
	float blockTransitionTime = 0.4f;
	float cameraSpaceImpulse = -1.f;
	float impulseDelay = 0.0f;
	float startupDuration = 0.067f;
	float activeDuration = 0.433f;
	float recoverDuration = 0.6f;
	float trailStartDelay = 0.1f;
	float trailStopDelay = 0.4f;
	staminaCost = 
	[
		{
			statType = "BaseStats.Stamina";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BaseMeleeAttackStaminaCost";
			opSymbol = "*";
			value = 1.25f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "AdditiveMultiplier";
			refObject = "Player";
			refStat = "BaseStats.FistsStaminaCostReduction";
			opSymbol = "*";
			value = -1f;
		} : CombinedStatModifier
	];
	fk< AttackDirection > attackDirection = "AttackDirections.ThrustRightToLeft";
	hitReactionSeverityMin = 0;
	hitReactionSeverityMax = 2;
	float attackEffectDelay = 0.1f;
	float attackEffectDuration = 0.06f;
	audioTag = "heavy";
	audioAttackIndex = 0.0f;
}

FistsCrouchAttack : Impact
{
	attackSubtype = "AttackType.CrouchAttack";
	attackName = "MeleeCrouchAttack0";
	float attackWindowOpen = 0.2f;
	float attackWindowClosed = 0.85f;
	float idleTransitionTime = 1.0f;
	float blockTransitionTime = 0.4f;
	float cameraSpaceImpulse = 3.f;
	float impulseDelay = 0.1f;
	float trailStartDelay = 0.1f;
	float trailStopDelay = 0.4f;
	staminaCost = 
	[
		{
			statType = "BaseStats.Stamina";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BaseMeleeAttackStaminaCost";
			opSymbol = "*";
			value = 1.25f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "AdditiveMultiplier";
			refObject = "Player";
			refStat = "BaseStats.FistsStaminaCostReduction";
			opSymbol = "*";
			value = -1f;
		} : CombinedStatModifier
	];
	fk< AttackDirection > attackDirection = "AttackDirections.DownToUp";
	float attackEffectDelay = 0.14f;
	float attackEffectDuration = 0.06f;
	bool hasDeflectAnim = false;
	bool hasHitAnim = false;
	audioAttackIndex = 0.0f;
	bool incrementsCombo = true;
	audioTag = "light";
	hitReactionSeverityMin = 1;
	hitReactionSeverityMax = 2;
	float startupDuration = 0.1f;
	float activeDuration = 0.367f;
	float recoverDuration = 0.933f;
	float standUpDelay = 0.1f;
}

FistsDeflectAttack : Impact
{
	attackSubtype = "AttackType.DeflectAttack";
	attackName = "MeleeDeflectAttack0";
	bool hasDeflectAnim = false;
	bool hasHitAnim = false;
	float attackWindowOpen = 0.37f;
	float attackWindowClosed = 0.8f;
	float idleTransitionTime = 1.f;
	float blockTransitionTime = 0.8f;
	float cameraSpaceImpulse = 3.f;
	float impulseDelay = 0.1f;
	float trailStartDelay = 0.1f;
	float trailStopDelay = 0.4f;
	fk< AttackDirection > attackDirection = "AttackDirections.Center";
	float attackEffectDelay = 0.3f;
	float attackEffectDuration = 0.06f;
	audioTag = "heavy";
	staminaCost = 
	[
		{
			statType = "BaseStats.Stamina";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BaseMeleeAttackStaminaCost";
			opSymbol = "*";
			value = 1.25f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "AdditiveMultiplier";
			refObject = "Player";
			refStat = "BaseStats.FistsStaminaCostReduction";
			opSymbol = "*";
			value = -1f;
		} : CombinedStatModifier
	];
	hitReactionSeverityMin = 2;
	hitReactionSeverityMax = 2;
}

FistsBodySlamLevel1Attack : BodySlamAttackLevel1
{
}

FistsBodySlamLevel2Attack : BodySlamAttackLevel2
{
	staminaCost = 
	[
		{
			statType = "BaseStats.Stamina";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BaseMeleeAttackStaminaCost";
			opSymbol = "*";
			value = 1.33f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "AdditiveMultiplier";
			refObject = "Player";
			refStat = "BaseStats.FistsStaminaCostReduction";
			opSymbol = "*";
			value = -1f;
		} : CombinedStatModifier
	];
}

FistsBodySlamLevel3Attack : BodySlamAttackLevel3
{
	staminaCost = 
	[
		{
			statType = "BaseStats.Stamina";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BaseMeleeAttackStaminaCost";
			opSymbol = "*";
			value = 1.33f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "AdditiveMultiplier";
			refObject = "Player";
			refStat = "BaseStats.FistsStaminaCostReduction";
			opSymbol = "*";
			value = -1f;
		} : CombinedStatModifier
	];
}

FistsGroundSlamAttack : GroundSlamAttack
{
	staminaCost = 
	[
		{
			statType = "BaseStats.Stamina";
			modifierType = "Additive";
			refObject = "Player";
			refStat = "BaseStats.BaseMeleeAttackStaminaCost";
			opSymbol = "*";
			value = 3.0f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "AdditiveMultiplier";
			refObject = "Player";
			refStat = "BaseStats.StrongArmsStaminaCostReduction";
			opSymbol = "*";
			value = -1f;
		} : CombinedStatModifier
	];
}

