package BaseStatusEffect
using RTDB, Prereqs, Effectors, Perks

HealthRegeneration : BuffStatusEffect
{
	CName[] gameplayTags += 
	[
		"Regeneration"
	];
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 3;
			} : ConstantStatModifier
		];
	};
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "splinter_buff";
		}
	];
	uiData = 
	{
		string displayName = "LocKey#40965";
		string iconPath = "regeneration_icon";
		priority = -9.0f;
	};
}

ForceStagger : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	CName[] gameplayTags = 
	[
		"HitReaction", "Stagger"
	];
}

HitReactionTBHCooldown : StatusEffect
{
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 3;
			} : ConstantStatModifier, 
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				refStat = "BaseStats.TBHsReactionCooldownReduction";
				opSymbol = "*";
				value = -1f;
			} : CombinedStatModifier
		];
	};
}

Unconscious : DebuffStatusEffect
{
	duration = "BaseStats.InfiniteDuration";
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	statusEffectType = "BaseStatusEffectTypes.Defeated";
	CName[] gameplayTags += 
	[
		"Unconscious", "Defeated"
	];
	fk< Stat >[] immunityStats = 
	[
		"BaseStats.UnconsciousImmunity"
	];
	fk< StatusEffectAIData > AIData = 
	{
		float priority = 9.f;
		fk< StatusEffectAIBehaviorFlag > behaviorEventFlag = "StatusEffectAIBehaviorFlag.InterruptsSamePriorityTask";
		fk< StatusEffectAIBehaviorType > behaviorType = "StatusEffectAIBehaviorType.Unstoppable";
	};
	uiData = 
	{
		string displayName = "LocKey#40949";
		string iconPath = "stun_icon";
	};
}

TranquilizerUnconscious : Unconscious
{
	fk< Stat >[] immunityStats += 
	[
		"BaseStats.TranquilizerImmunity"
	];
}

Defeated : DebuffStatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.Defeated";
	duration = "BaseStats.InfiniteDuration";
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	CName[] gameplayTags += 
	[
		"Defeated"
	];
	fk< StatusEffectAIData > AIData = "BaseStatusEffect.DefeatedAIData";
	fk< StatusEffectUIData > uiData = 
	{
		string displayName = "LocKey#40950";
		string iconPath = "stun_icon";
	};
	bool replicated = true;
}

DefeatedAIData : StatusEffectAIData
{
	float priority = 9.f;
	fk< StatusEffectAIBehaviorFlag > behaviorEventFlag = "StatusEffectAIBehaviorFlag.InterruptsSamePriorityTask";
	fk< StatusEffectAIBehaviorType > behaviorType = "StatusEffectAIBehaviorType.Unstoppable";
	fk< Stim >[] stimulis = 
	[
		"stims.AttentionStimuli"
	];
}

DefeatedWithRecover : Invulnerable
{
	statusEffectType = "BaseStatusEffectTypes.DefeatedWithRecover";
	duration = "BaseStats.InfiniteDuration";
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	CName[] gameplayTags = 
	[
		"DefeatedWithRecover", "Blind", "Deaf", "ClearThreats", "ResetSquadSync"
	];
	fk< StatusEffectAIData > AIData = "BaseStatusEffect.DefeatedAIData";
	fk< StatusEffectUIData > uiData = 
	{
		string displayName = "Defeated";
		string iconPath = "stun_icon";
		priority = -10.0f;
	};
	bool replicated = true;
}

FollowerDefeatedStory : DefeatedWithRecover
{
	CName[] gameplayTags = 
	[
		"FollowerDefeated"
	];
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 15;
			} : ConstantStatModifier
		];
	};
}

FollowerDefeatedEasy : DefeatedWithRecover
{
	CName[] gameplayTags = 
	[
		"FollowerDefeated"
	];
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 23;
			} : ConstantStatModifier
		];
	};
}

FollowerDefeatedHard : DefeatedWithRecover
{
	CName[] gameplayTags = 
	[
		"FollowerDefeated"
	];
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 30;
			} : ConstantStatModifier
		];
	};
}

FollowerDefeatedVeryHard : DefeatedWithRecover
{
	CName[] gameplayTags = 
	[
		"FollowerDefeated"
	];
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 35;
			} : ConstantStatModifier
		];
	};
}

MonowireGrapple : DebuffStatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.Grapple";
	duration = "BaseStats.InfiniteDuration";
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	CName[] gameplayTags += 
	[
		"Monowire", "Grapple"
	];
	fk< StatusEffectAIData > AIData = 
	{
		float priority = 9.f;
		fk< StatusEffectAIBehaviorFlag > behaviorEventFlag = "StatusEffectAIBehaviorFlag.InterruptsSamePriorityTask";
		fk< StatusEffectAIBehaviorType > behaviorType = "StatusEffectAIBehaviorType.Unstoppable";
	};
	uiData = 
	{
		string displayName = "LocKey#40966";
		string iconPath = "stun_icon";
		priority = -12.0f;
	};
}

Encumbered : DebuffStatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.PassiveDebuff";
	duration = "BaseStats.InfiniteDuration";
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			fk< StatModifier >[] stats = 
			[
				{
					statType = "BaseStats.MaxSpeed";
					modifierType = "Multiplier";
					value = 0.4f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.CanSprint";
					modifierType = "Multiplier";
					value = 0.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.HasDodge";
					modifierType = "Multiplier";
					value = 0.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.HasDodgeAir";
					modifierType = "Multiplier";
					value = 0.f;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
	uiData = 
	{
		string displayName = "LocKey#40967";
		description = "LocKey#77864";
		string iconPath = "weight_icon";
	};
}

PlayerAiming : StatusEffect
{
	gameplayTags += 
	[
		"Buff"
	];
	statusEffectType = "BaseStatusEffectTypes.PassiveBuff";
	duration = "BaseStats.InfiniteDuration";
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			fk< StatModifier >[] stats = 
			[
				{
					statType = "BaseStats.IsAimingWithWeapon";
					modifierType = "Additive";
					value = 1.0f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.StaminaRegenRateMult";
					modifierType = "Additive";
					refObject = "Player";
					refStat = "BaseStats.ADSStaminaRegenMultiplier";
					opSymbol = "*";
					value = 1;
				} : CombinedStatModifier
			];
		}
	];
}

PlayerExhausted : DebuffStatusEffect
{
	CName[] gameplayTags = 
	[
		"Exhausted"
	];
	statusEffectType = "BaseStatusEffectTypes.PassiveDebuff";
	duration = "BaseStats.InfiniteDuration";
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	fk< Stat >[] immunityStats = 
	[
		"BaseStats.ExhaustionImmunity"
	];
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			effectors = 
			[
				{
					prereqRecord = 
					{
						statType = "CanIgnoreWeaponStaminaPenaties";
						valueToCheck = 1;
						comparisonType = "Less";
					} : StatPrereq;
					fk< StatModifierGroup > statGroup = 
					{
						statModifiers = 
						[
							{
								statType = "BaseStats.AimInTime";
								modifierType = "AdditiveMultiplier";
								value = 0.2f;
							} : ConstantStatModifier
						];
					} : StatModifierGroup;
				} : ApplyStatGroupOnWeapon, 
				{
					prereqRecord = 
					{
						nestedPrereqs = 
						[
							{
								nestedPrereqs = 
								[
									"Perks.IsWeaponMelee", {
										statType = "CanIgnoreWeaponStaminaPenaties";
										valueToCheck = 1;
										comparisonType = "Less";
									} : StatPrereq, 
									{
										CName itemTag = "Gog_Katana";
										inverted = true;
									} : WeaponHeldByTagPrereq
								];
							} : ANDPrereq, 
							{
								nestedPrereqs = 
								[
									"Perks.IsWeaponMelee", {
										CName itemTag = "Gog_Katana";
									} : WeaponHeldByTagPrereq, 
									{
										statType = "CanIgnoreWeaponStaminaPenaties";
										valueToCheck = 2;
										comparisonType = "Less";
									} : StatPrereq
								];
							} : ANDPrereq
						];
					} : ORPrereq;
					value = 0.8f;
				} : MultiplyDamage
			];
		} : GameplayLogicPackage
	];
	uiData = 
	{
		string displayName = "LocKey#45300";
		description = "LocKey#77876";
		string iconPath = "exhausted_icon";
	};
}

OutOfOxygen : DoTStatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.PassiveDebuff";
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "status_out_of_oxygen";
		}
	];
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			bool stackable = false;
			effectors = 
			[
				"BaseStatusEffect.OutOfOxygenSFX"
			];
		} : GameplayLogicPackage, 
		{
			effectors = 
			[
				{
					fk< IPrereq > prereqRecord = "Prereqs.AlwaysTruePrereq";
					CName effectorClassName = "TriggerContinuousAttackEffector";
					delayTime = 1.2f;
					attackRecord = "Attacks.OutOfOxygenDamageOverTime";
				} : ContinuousAttackEffector
			];
		} : GameplayLogicPackage
	];
	uiData = 
	{
		string displayName = "LocKey#40968";
		description = "LocKey#77879";
		string iconPath = "decreased_stats_icon";
	};
}

OutOfOxygenSFX : Effector
{
	CName effectorClassName = "PlaySFXEffector";
	CName activationSFXName = "vfx_fullscreen_drowning_start";
	CName deactivationSFXName = "vfx_fullscreen_drowning_stop";
	bool unique = true;
}

WaterCollision : DebuffStatusEffect
{
	fk< StatusEffectType > statusEffectType = "BaseStatusEffectTypes.PassiveDebuff";
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 0.3;
			} : ConstantStatModifier
		];
	};
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			fk< StatModifier >[] stats = 
			[
				{
					statType = "BaseStats.MaxSpeed";
					modifierType = "Multiplier";
					value = 0.6f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.Deceleration";
					modifierType = "Additive";
					value = 12;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
}

VehicleBaseDamageOverTimeEffect : DoTStatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	packages = 
	[
		{
			effectors = 
			[
				{
					CName effectorClassName = "TriggerContinuousAttackEffector";
					delayTime = 0.35f;
					attackRecord = "Attacks.VehicleBaseDamageOverTime";
				} : ContinuousAttackEffector
			];
		} : GameplayLogicPackage
	];
}

VehicleHighDamageOverTimeEffect : DoTStatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	packages = 
	[
		{
			effectors = 
			[
				{
					CName effectorClassName = "TriggerContinuousAttackEffector";
					delayTime = 0.1f;
					attackRecord = "Attacks.VehicleHighDamageOverTime";
				} : ContinuousAttackEffector
			];
		} : GameplayLogicPackage
	];
}

PlayerJustEnteredCombat : StatusEffect
{
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 0.1;
			} : ConstantStatModifier
		];
	};
}

Sleep : StatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.Sleep";
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	CName[] gameplayTags = 
	[
		"Sleep"
	];
	uiData = 
	{
		string displayName = "LocKey#40970";
		string iconPath = "stun_icon";
		priority = 1.0f;
	};
	fk< GameplayLogicPackage >[] packages = [];
}

Uninterested : StatusEffect
{
	string displayName = "Uninterested";
	fk< GameplayLogicPackage >[] packages = [];
}

LoreAnim : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	statusEffectType = "BaseStatusEffectTypes.Misc";
	additionalParam = "LoreAnim";
	CName[] gameplayTags = 
	[
		"LoreAnim"
	];
}

LoreVictimSaved : LoreAnim
{
	additionalParam = "LoreVictimSaved";
	CName[] gameplayTags = 
	[
		"LoreVictimSaved"
	];
}

IgnoreWeaponSafe : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	statusEffectType = "BaseStatusEffectTypes.Misc";
}

Berserker : BuffStatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.Berserker";
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	CName[] gameplayTags += 
	[
		"Berserker"
	];
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "energy_off";
		}, 
		{
			name = "weakspot_weak";
		}
	];
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			fk< StatModifier >[] stats = 
			[
				{
					statType = "BaseStats.Stamina";
					modifierType = "Multiplier";
					value = 999999;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
	fk< StatusEffectAIData > AIData = 
	{
		float priority = 0.f;
		fk< StatusEffectAIBehaviorFlag > behaviorEventFlag = "StatusEffectAIBehaviorFlag.InterruptsSamePriorityTask";
		fk< StatusEffectAIBehaviorType > behaviorType = "StatusEffectAIBehaviorType.Unstoppable";
	};
	uiData = 
	{
		string displayName = "LocKey#40971";
		string iconPath = "stun_icon";
	};
}

ThrownNPC : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
}

ImpactedThrownNPC : StatusEffect
{
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 1.0;
			} : ConstantStatModifier
		];
	};
}

ForceSwim : BuffStatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.PassiveBuff";
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
}

ForceDive : ForceSwim
{
}

Invulnerable : StatusEffect
{
	duration = "BaseStats.InfiniteDuration";
	packages = 
	[
		{
			stats = 
			[
				{
					statType = "BaseStats.IsInvulnerable";
					modifierType = "Additive";
					value = 1.f;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
}

InvulnerableShort : StatusEffect
{
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 2;
			} : ConstantStatModifier
		];
	};
	packages = 
	[
		{
			stats = 
			[
				{
					statType = "BaseStats.IsInvulnerable";
					modifierType = "Additive";
					value = 1.f;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
}

InvulnerableAfterDefeated : StatusEffect
{
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 0.3;
			} : ConstantStatModifier
		];
	};
	packages = 
	[
		{
			stats = 
			[
				{
					statType = "BaseStats.IsInvulnerable";
					modifierType = "Additive";
					value = 1.f;
				} : ConstantStatModifier
			];
			effectors = 
			[
				{
					CName effectorClassName = "RemoveDOTStatusEffectsEffector";
					float delay = 0f;
				} : Effector
			];
		} : GameplayLogicPackage
	];
}

PlayerRippingOffTurretWorkspotInv : Invulnerable
{
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 7f;
			} : ConstantStatModifier
		];
	};
}

DefeatedFinisherWorkspot : Invulnerable
{
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 3.5f;
			} : ConstantStatModifier
		];
	};
}

PlayerInFinisherWorkspot : Invulnerable
{
	gameplayTags += 
	[
		"FirearmsNoSwitch"
	];
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 3.5f;
			} : ConstantStatModifier
		];
	};
}

TestEffect : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	string iconPath = "jamweapon_icon";
	packages = 
	[
		{
			effectors = 
			[
				{
					prereqRecord = 
					{
						prereqClassName = "LocomotionPSMPrereq";
						string stateName = "Crouch";
					} : IPrereq;
					CName effectorClassName = "TriggerContinuousAttackEffector";
					delayTime = 0.5f;
					attackRecord = "Attacks.FragGrenade";
				} : ContinuousAttackEffector
			];
		} : GameplayLogicPackage
	];
}

TE2 : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	string iconPath = "jamweapon_icon";
	packages = 
	[
		{
			effectors = 
			[
				{
					prereqRecord = 
					{
						prereqClassName = "LocomotionPSMPrereq";
						string stateName = "Crouch";
					} : IPrereq;
					attackRecord = "Attacks.FragGrenade";
				} : TriggerAttackOnTargetEffect
			];
		} : GameplayLogicPackage
	];
}

CyberspacePresence : BuffStatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.PassiveBuff";
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	gameplayTags += 
	[
		"CyberspacePresence", "NoCombat", "NoRadialMenus", "VehicleNoInteraction"
	];
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			fk< StatModifier >[] stats = 
			[
				{
					statType = "BaseStats.HasCybereye";
					modifierType = "Multiplier";
					value = 0;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.CanUseZoom";
					modifierType = "Multiplier";
					value = 0;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.CanJump";
					modifierType = "Multiplier";
					value = 0;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.CanSprint";
					modifierType = "Multiplier";
					value = 0;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.CanCrouch";
					modifierType = "Multiplier";
					value = 0;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.HasDodge";
					modifierType = "Multiplier";
					value = 0;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.HasChargeJump";
					modifierType = "Multiplier";
					value = 0;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.HasDoubleJump";
					modifierType = "Multiplier";
					value = 0.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.HasAirHover";
					modifierType = "Multiplier";
					value = 0;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.HasDodgeAir";
					modifierType = "Multiplier";
					value = 0.f;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
}

TemporarilyBlockMovement : DebuffStatusEffect
{
	fk< StatusEffectType > statusEffectType = "BaseStatusEffectTypes.PassiveDebuff";
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 0.5;
			} : ConstantStatModifier
		];
	};
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			fk< StatModifier >[] stats = 
			[
				{
					statType = "BaseStats.MaxSpeed";
					modifierType = "Multiplier";
					value = 0.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.Deceleration";
					modifierType = "Additive";
					value = 32;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.CanJump";
					modifierType = "Multiplier";
					value = 0.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.HasChargeJump";
					modifierType = "Multiplier";
					value = 0.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.CanSprint";
					modifierType = "Multiplier";
					value = 0.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.HasDodge";
					modifierType = "Multiplier";
					value = 0.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.HasSandevistan";
					modifierType = "Multiplier";
					value = 0.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.HasKerenzikov";
					modifierType = "Multiplier";
					value = 0.f;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
}

SpreadFear : StatusEffect
{
	fk< StatusEffectType > statusEffectType = "BaseStatusEffectTypes.Misc";
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 0.5;
			} : ConstantStatModifier
		];
	};
	CName[] gameplayTags = 
	[
		"SpreadFear"
	];
}

GreaterSpreadFear : StatusEffect
{
	fk< StatusEffectType > statusEffectType = "BaseStatusEffectTypes.Misc";
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 0.5;
			} : ConstantStatModifier
		];
	};
	CName[] gameplayTags = 
	[
		"GreaterSpreadFear"
	];
}

UncontrolledMovement_Base : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	statusEffectType = "BaseStatusEffectTypes.UncontrolledMovement";
}

UncontrolledMovement_Default : UncontrolledMovement_Base
{
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			effectors = 
			[
				{
					CName debugSourceName = "SE_UncontrolledMovement_Default";
					ragdollNoGroundThreshold = 0.0f;
					ragdollOnCollision = true;
				} : UncontrolledMovementEffector
			];
		} : GameplayLogicPackage
	];
}

UncontrolledMovement_RagdollOffLedge : UncontrolledMovement_Base
{
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			effectors = 
			[
				{
					CName debugSourceName = "SE_UncontrolledMovement_RagdollOffLedge";
					ragdollNoGroundThreshold = 0.5f;
					ragdollOnCollision = false;
				} : UncontrolledMovementEffector
			];
		} : GameplayLogicPackage
	];
}

NonInteractable : StatusEffect
{
	duration = "BaseStats.InfiniteDuration";
	statusEffectType = "BaseStatusEffectTypes.Misc";
	fk< StatModifierGroup > maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 200;
			} : ConstantStatModifier
		];
	};
}

CallReinforcement : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	fk< StatusEffectType > statusEffectType = "BaseStatusEffectTypes.Misc";
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			fk< StatModifier >[] stats = 
			[
				{
					statType = "BaseStats.CanCallReinforcements";
					modifierType = "Additive";
					value = 1f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.CallReinforcement";
					modifierType = "Additive";
					value = 100f;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
}

TalkCooldown : StatusEffect
{
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 5;
			} : ConstantStatModifier
		];
	} : StatModifierGroup;
}

GenericTalkDisabled : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
}

BlockGrapple : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
}

BossTakedownCooldown : StatusEffect
{
	isAffectedByTimeDilationPlayer = true;
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 10;
			} : ConstantStatModifier
		];
	};
}

BossNoTakeDown : StatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.PassiveBuff";
	gameplayTags += 
	[
		"NoTakeDown"
	];
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 10;
			} : ConstantStatModifier
		];
	};
}

BossNoTakeDownInfinite : BossNoTakeDown
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
}

BossNoInterrupt : StatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.PassiveBuff";
	gameplayTags += 
	[
		"NoInterrupt"
	];
}

InterruptableWithKnives : StatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.PassiveBuff";
	gameplayTags += 
	[
		"InterruptableWithKnives"
	];
}

StrongArmsActive : StatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.StrongArmsActive";
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	CName[] gameplayTags += 
	[
		"StrongArms"
	];
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "";
		}
	];
	uiData = 
	{
		string displayName = "LocKey#40971";
		string iconPath = "stun_icon";
	};
}

StrongArmsPhysicalActive : StrongArmsActive
{
}

StrongArmsThermalActive : StrongArmsActive
{
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "idle_thermal";
		}
	];
}

StrongArmsChemicalActive : StrongArmsActive
{
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "idle_chemical";
		}
	];
}

StrongArmsElecricActive : StrongArmsActive
{
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "idle_electric";
		}
	];
}

NPCForceEquipPrimaryWeapon : StatusEffect
{
	gameplayTags += 
	[
		"NPCForceEquipPrimaryWeapon"
	];
}

NPCForceEquipSecondaryWeapon : StatusEffect
{
	gameplayTags += 
	[
		"NPCForceEquipSecondaryWeapon"
	];
}

DistractionDuration : DebuffStatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.Bleeding";
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 10;
			} : ConstantStatModifier, 
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				refObject = "Instigator";
				refStat = "BaseStats.DurationBonusBleeding";
				opSymbol = "*";
				value = 1;
			} : CombinedStatModifier
		];
	};
	fk< StatusEffectUIData > uiData = 
	{
		displayName = "LocKey#54057";
		iconPath = "distracted";
		priority = -8.0f;
	};
}

BeingCarried : StatusEffect
{
	duration = "BaseStats.InfiniteDuration";
}

DoNotUseVehicle : StatusEffect
{
	duration = "BaseStats.InfiniteDuration";
	gameplayTags += 
	[
		"BlockMountVehicle"
	];
}

DeviceTrapHit : DebuffStatusEffect
{
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	statusEffectType = "BaseStatusEffectTypes.Misc";
	packages += 
	[
		{
			effectors += 
			[
				{
					prereqRecord = 
					{
						nestedPrereqs = 
						[
							"Prereqs.NPCIsHuman", "Prereqs.TargetNotInCombatPrereq", {
								rarity = "Boss";
								invert = true;
							} : NPCRarityPrereq
						];
					} : Prereqs.ANDPrereq;
					statusEffect = "BaseStatusEffect.Unconscious";
					removeWithEffector = false;
				} : ApplyStatusEffectEffector, 
				{
					prereqRecord = 
					{
						nestedPrereqs = 
						[
							"Prereqs.NPCIsHuman", {
								nestedPrereqs = 
								[
									{
										rarity = "Normal";
									} : NPCRarityPrereq, 
									{
										rarity = "Weak";
									} : NPCRarityPrereq, 
									{
										rarity = "Trash";
									} : NPCRarityPrereq
								];
							} : Prereqs.ORPrereq
						];
					} : Prereqs.ANDPrereq;
					statusEffect = "BaseStatusEffect.Unconscious";
					removeWithEffector = false;
				} : ApplyStatusEffectEffector, 
				{
					prereqRecord = 
					{
						nestedPrereqs = 
						[
							"Prereqs.NPCIsDrone", {
								nestedPrereqs = 
								[
									{
										rarity = "Normal";
									} : NPCRarityPrereq, 
									{
										rarity = "Weak";
									} : NPCRarityPrereq, 
									{
										rarity = "Trash";
									} : NPCRarityPrereq
								];
							} : Prereqs.ORPrereq
						];
					} : Prereqs.ANDPrereq;
					statusEffect = "BaseStatusEffect.ForceKill";
					removeWithEffector = false;
				} : ApplyStatusEffectEffector, 
				{
					prereqRecord = 
					{
						nestedPrereqs = 
						[
							"Prereqs.NPCIsAndroid", {
								nestedPrereqs = 
								[
									{
										rarity = "Normal";
									} : NPCRarityPrereq, 
									{
										rarity = "Weak";
									} : NPCRarityPrereq, 
									{
										rarity = "Trash";
									} : NPCRarityPrereq
								];
							} : Prereqs.ORPrereq
						];
					} : Prereqs.ANDPrereq;
					statusEffect = "BaseStatusEffect.ForceKill";
					removeWithEffector = false;
				} : ApplyStatusEffectEffector, 
				{
					prereqRecord = 
					{
						rarity = "Boss";
					} : NPCRarityPrereq;
					attackRecord = "Attacks.PhysicalPercentageDeviceAttack";
					playerAsInstigator = true;
				} : Effectors.TriggerAttackOnOwnerEffect, 
				{
					prereqRecord = 
					{
						nestedPrereqs = 
						[
							"Prereqs.TargetInCombatPrereq", {
								nestedPrereqs = 
								[
									{
										rarity = "Elite";
									} : NPCRarityPrereq, 
									{
										rarity = "Rare";
									} : NPCRarityPrereq, 
									{
										rarity = "Officer";
									} : NPCRarityPrereq
								];
							} : Prereqs.ORPrereq
						];
					} : Prereqs.ANDPrereq;
					attackRecord = "Attacks.PhysicalPercentageDeviceAttack";
					playerAsInstigator = true;
				} : Effectors.TriggerAttackOnOwnerEffect, 
				{
					prereqRecord = "Prereqs.NPCIsAndroid";
					activationSFXName = "quickhack_system_reset";
				} : PlaySFXEffector, 
				{
					prereqRecord = "Prereqs.NPCIsAndroid";
					CName vfxName = "hacks_system_collapse";
				} : PlayVFXEffector
			];
		} : GameplayLogicPackage
	];
}

PlayerInvulnerable : BuffStatusEffect
{
	duration = 
	{
		statModifiers += 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 5f;
			} : ConstantStatModifier
		];
	} : StatModifierGroup;
	packages = 
	[
		{
			effectors = 
			[
				{
					prereqRecord = 
					{
						nestedPrereqs = 
						[
							{
								fk< StatusEffect > statusEffect = "BaseStatusEffect.ForceKill";
							} : StatusEffectAbsentPrereq, 
							{
								stateName = "DeathLand";
								isInState = false;
							} : DetailedLocomotionPSMPrereq
						];
					} : ANDPrereq;
					effectorToApply = 
					{
						prereqRecord = "Prereqs.ProcessHitReceived";
						value = 0.0f;
					} : MultiplyDamage;
				} : ApplyEffectorOnPlayer
			];
		}, 
		{
			stats = 
			[
				{
					statType = "BaseStats.BurningImmunity";
					modifierType = "Additive";
					value = 1.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.BleedingImmunity";
					modifierType = "Additive";
					value = 1.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.EMPImmunity";
					modifierType = "Additive";
					value = 1.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.PoisonImmunity";
					modifierType = "Additive";
					value = 1.f;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.ElectrocuteImmunity";
					modifierType = "Additive";
					value = 1.f;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
	uiData = 
	{
		string displayName = "LocKey#80637";
		string iconPath = "immunity_icon";
	};
}

MagnetDevice_NPC : BaseQuickHackStatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.MagnetDeviceNPC";
	CName[] gameplayTags += 
	[
		"MagnetDevice"
	];
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	AIData = 
	{
		float priority = 6.f;
		shouldProcessAIDataOnReapplication = true;
	};
}

MagnetDeviceHit : DebuffStatusEffect
{
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	statusEffectType = "BaseStatusEffectTypes.Misc";
	packages += 
	[
		{
			effectors += 
			[
				{
					prereqRecord = 
					{
						nestedPrereqs = 
						[
							"Prereqs.NPCIsHuman", "Prereqs.TargetNotInCombatPrereq", {
								rarity = "Boss";
								invert = true;
							} : NPCRarityPrereq
						];
					} : Prereqs.ANDPrereq;
					statusEffect = "BaseStatusEffect.MagnetDevice_NPC";
					removeWithEffector = false;
				} : ApplyStatusEffectEffector, 
				{
					prereqRecord = 
					{
						nestedPrereqs = 
						[
							"Prereqs.NPCIsHuman", {
								nestedPrereqs = 
								[
									{
										rarity = "Normal";
									} : NPCRarityPrereq, 
									{
										rarity = "Weak";
									} : NPCRarityPrereq, 
									{
										rarity = "Trash";
									} : NPCRarityPrereq
								];
							} : Prereqs.ORPrereq
						];
					} : Prereqs.ANDPrereq;
					statusEffect = "BaseStatusEffect.MagnetDevice_NPC";
					removeWithEffector = false;
				} : ApplyStatusEffectEffector, 
				{
					prereqRecord = 
					{
						nestedPrereqs = 
						[
							"Prereqs.NPCIsDrone", {
								nestedPrereqs = 
								[
									{
										rarity = "Normal";
									} : NPCRarityPrereq, 
									{
										rarity = "Weak";
									} : NPCRarityPrereq, 
									{
										rarity = "Trash";
									} : NPCRarityPrereq
								];
							} : Prereqs.ORPrereq
						];
					} : Prereqs.ANDPrereq;
					statusEffect = "BaseStatusEffect.EMP";
					removeWithEffector = false;
				} : ApplyStatusEffectEffector, 
				{
					prereqRecord = 
					{
						nestedPrereqs = 
						[
							"Prereqs.NPCIsAndroid", {
								nestedPrereqs = 
								[
									{
										rarity = "Normal";
									} : NPCRarityPrereq, 
									{
										rarity = "Weak";
									} : NPCRarityPrereq, 
									{
										rarity = "Trash";
									} : NPCRarityPrereq
								];
							} : Prereqs.ORPrereq
						];
					} : Prereqs.ANDPrereq;
					statusEffect = "BaseStatusEffect.AndroidTurnOff";
					removeWithEffector = false;
				} : ApplyStatusEffectEffector, 
				{
					prereqRecord = 
					{
						rarity = "Boss";
					} : NPCRarityPrereq;
					attackRecord = "Attacks.PhysicalPercentageDeviceAttack";
					playerAsInstigator = true;
				} : Effectors.TriggerAttackOnOwnerEffect, 
				{
					prereqRecord = 
					{
						nestedPrereqs = 
						[
							"Prereqs.TargetInCombatPrereq", {
								nestedPrereqs = 
								[
									{
										rarity = "Elite";
									} : NPCRarityPrereq, 
									{
										rarity = "Rare";
									} : NPCRarityPrereq, 
									{
										rarity = "Officer";
									} : NPCRarityPrereq
								];
							} : Prereqs.ORPrereq
						];
					} : Prereqs.ANDPrereq;
					attackRecord = "Attacks.PhysicalPercentageDeviceAttack";
					playerAsInstigator = true;
				} : Effectors.TriggerAttackOnOwnerEffect, 
				{
					prereqRecord = "Prereqs.NPCIsAndroid";
					activationSFXName = "quickhack_system_reset";
				} : PlaySFXEffector, 
				{
					prereqRecord = "Prereqs.NPCIsAndroid";
					CName vfxName = "hacks_system_collapse";
				} : PlayVFXEffector
			];
		} : GameplayLogicPackage
	];
}

ChokingLowDamage : DoTStatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.PassiveDebuff";
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "status_out_of_oxygen";
		}
	];
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			bool stackable = false;
			effectors = 
			[
				"BaseStatusEffect.OutOfOxygenSFX"
			];
		} : GameplayLogicPackage, 
		{
			effectors = 
			[
				{
					fk< IPrereq > prereqRecord = "Prereqs.AlwaysTruePrereq";
					CName effectorClassName = "TriggerContinuousAttackEffector";
					delayTime = 1.2f;
					attackRecord = "Attacks.LowChokingDamageOverTime";
				} : ContinuousAttackEffector
			];
		} : GameplayLogicPackage
	];
	uiData = 
	{
		string displayName = "LocKey#40968";
		description = "LocKey#77879";
		string iconPath = "decreased_stats_icon";
	};
}

ChokingHighDamage : DoTStatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.PassiveDebuff";
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "status_out_of_oxygen";
		}
	];
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			bool stackable = false;
			effectors = 
			[
				"BaseStatusEffect.OutOfOxygenSFX"
			];
		} : GameplayLogicPackage, 
		{
			effectors = 
			[
				{
					fk< IPrereq > prereqRecord = "Prereqs.AlwaysTruePrereq";
					CName effectorClassName = "TriggerContinuousAttackEffector";
					delayTime = 1.2f;
					attackRecord = "Attacks.HighChokingDamageOverTime";
				} : ContinuousAttackEffector
			];
		} : GameplayLogicPackage
	];
	uiData = 
	{
		string displayName = "LocKey#40968";
		description = "LocKey#77879";
		string iconPath = "decreased_stats_icon";
	};
}

DriverCombat : StatusEffect
{
	duration = "BaseStats.InfiniteDuration";
	packages = 
	[
		{
			effectors = 
			[
				{
					prereqRecord = "Perks.PlayerIsNotAiming";
					statGroup = 
					{
						statModifiers = 
						[
							{
								statType = "BaseStats.RecoilKickMin";
								modifierType = "Multiplier";
								value = 0.0f;
							} : ConstantStatModifier, 
							{
								statType = "BaseStats.RecoilKickMax";
								modifierType = "Multiplier";
								value = 0.0f;
							} : ConstantStatModifier
						];
					};
					reapplyOnWeaponChange = true;
				} : ApplyStatGroupOnWeapon, 
				{
					statGroup = 
					{
						statModifiers = 
						[
							{
								statType = "BaseStats.SmartGunPlayerProjectileVelocity";
								modifierType = "Multiplier";
								value = 1.5f;
							} : ConstantStatModifier
						];
					};
					reapplyOnWeaponChange = true;
				} : ApplyStatGroupOnWeapon
			];
			stats = [];
		} : GameplayLogicPackage
	];
}

DriverCombatPistol : StatusEffect
{
	duration = "BaseStats.InfiniteDuration";
	packages = 
	[
		{
			effectors = 
			[
				{
					statGroup = 
					{
						statModifiers = 
						[
							{
								statType = "BaseStats.SpreadUseInAds";
								modifierType = "Multiplier";
								value = 0.f;
							} : ConstantStatModifier
						];
					};
					reapplyOnWeaponChange = true;
				} : ApplyStatGroupOnWeapon
			];
		} : GameplayLogicPackage
	];
}

DriverCombatSwayRemoval : StatusEffect
{
	duration = "BaseStats.InfiniteDuration";
	packages = 
	[
		{
			effectors = 
			[
				{
					statGroup = 
					{
						statModifiers = 
						[
							{
								statType = "BaseStats.SwayTraversalTime";
								modifierType = "Multiplier";
								value = 0.f;
							} : ConstantStatModifier, 
							{
								statType = "BaseStats.SwayCenterMaximumAngleOffset";
								modifierType = "Multiplier";
								value = 0.f;
							} : ConstantStatModifier
						];
					};
					reapplyOnWeaponChange = true;
				} : ApplyStatGroupOnWeapon
			];
		} : GameplayLogicPackage
	];
}

DriverCombatSwayPause : StatusEffect
{
	duration = "BaseStats.InfiniteDuration";
	packages = 
	[
		{
			effectors = 
			[
				{
					statGroup = 
					{
						statModifiers = 
						[
							{
								statType = "BaseStats.SwaySideMaximumAngleDistance";
								modifierType = "Multiplier";
								value = 0;
							} : ConstantStatModifier, 
							{
								statType = "BaseStats.SwaySideMinimumAngleDistance";
								modifierType = "Multiplier";
								value = 0;
							} : ConstantStatModifier
						];
					};
					reapplyOnWeaponChange = true;
				} : ApplyStatGroupOnWeapon
			];
		} : GameplayLogicPackage
	];
}

DriverCombatMountedWeaponVFXScale : StatusEffect
{
	gameplayTags += 
	[
		"DriverCombatWeaponVFXScaling"
	];
	duration = "BaseStats.InfiniteDuration";
	packages = 
	[
		{
			stats = 
			[
				{
					statType = "BaseStats.WeaponVFX_ProjectileFxScale";
					modifierType = "Multiplier";
					value = 4;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.WeaponVFX_BulletFxScaleFullAutoRandomization";
					modifierType = "Additive";
					value = 1;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.WeaponVFX_BulletFxScaleFullAutoRandStart";
					modifierType = "Additive";
					value = 2;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.WeaponVFX_BulletFxScaleFullAutoRandRange";
					modifierType = "Additive";
					value = 5;
				} : ConstantStatModifier, 
				{
					statType = "BaseStats.WeaponVFX_MuzzleFxScale";
					modifierType = "Multiplier";
					value = 2;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
}

DriverCombatHandgunVFXScale : StatusEffect
{
	gameplayTags += 
	[
		"DriverCombatWeaponVFXScaling"
	];
	duration = "BaseStats.InfiniteDuration";
	packages = 
	[
		{
			effectors = 
			[
				{
					statGroup = 
					{
						statModifiers = 
						[
							{
								statType = "BaseStats.WeaponVFX_TracerFxScale";
								modifierType = "Multiplier";
								value = 2;
							} : ConstantStatModifier, 
							{
								statType = "BaseStats.WeaponVFX_ProjectileFxScale";
								modifierType = "Multiplier";
								value = 4;
							} : ConstantStatModifier, 
							{
								statType = "BaseStats.WeaponVFX_MuzzleFxScale";
								modifierType = "Multiplier";
								value = 2;
							} : ConstantStatModifier, 
							{
								statType = "BaseStats.WeaponVFX_ShellsFxScale";
								modifierType = "Multiplier";
								value = 0;
							} : ConstantStatModifier
						];
					};
					reapplyOnWeaponChange = true;
				} : ApplyStatGroupOnWeapon
			];
		} : GameplayLogicPackage
	];
}

DriverCombatRevolverVFXScale : DriverCombatHandgunVFXScale
{
}

DriverCombatSMGVFXScale : DriverCombatHandgunVFXScale
{
}

DriverCombatHandgunFPPVFXScale : StatusEffect
{
	gameplayTags += 
	[
		"DriverCombatWeaponVFXScaling"
	];
	duration = "BaseStats.InfiniteDuration";
	packages = 
	[
		{
			effectors = 
			[
				{
					statGroup = 
					{
						statModifiers = 
						[
							{
								statType = "BaseStats.WeaponVFX_ShellsFxScale";
								modifierType = "Multiplier";
								value = 0;
							} : ConstantStatModifier
						];
					};
					reapplyOnWeaponChange = true;
				} : ApplyStatGroupOnWeapon
			];
		} : GameplayLogicPackage
	];
}

DriverCombatRevolverFPPVFXScale : DriverCombatHandgunFPPVFXScale
{
}

DriverCombatSMGFPPVFXScale : DriverCombatHandgunFPPVFXScale
{
}

DriverCombatVehicleManeuvers : StatusEffect
{
	duration = "BaseStats.InfiniteDuration";
}

Saburo_Healing : BuffStatusEffect
{
	duration = 
	{
		statModifiers += 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 10f;
			} : ConstantStatModifier
		];
	} : StatModifierGroup;
	packages = 
	[
		{
			effectors = 
			[
				{
					prereqRecord = 
					{
						statPoolType = "Health";
						valueToCheck = 
						[
							{
								statType = "BaseStats.Health";
								modifierType = "Additive";
								value = 0.0f;
							} : ConstantStatModifier
						];
						comparisonType = "Greater";
					} : StatPoolPrereq;
					poolModifier = 
					{
						bool enabled = true;
						rangeBegin = 0;
						rangeEnd = 100;
						startDelay = 0;
						valuePerSec = 10;
						bool delayOnChange = false;
					} : PoolValueModifier;
					string statPoolType = "Health";
					string modificationType = "Regeneration";
				} : ModifyStatPoolModifierEffector, 
				{
					prereqRecord = 
					{
						statusEffect = "BaseStatusEffect.Saburo_Hemorrhage";
						checkType = "CheckType.Record";
						count = 1;
						comparisonType = "Less";
						range = 8f;
					} : EntitiesWithStatusEffectPrereq;
					statusEffects = 
					[
						"BaseStatusEffect.Saburo_Healing"
					];
				} : RemoveStatusEffectsEffector
			];
		}
	];
}

PlayerJustDashed : StatusEffect
{
	gameplayTags += 
	[
		"JustDodged", "JustDashed"
	];
	duration = 
	{
		statModifiers += 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 2f;
			} : ConstantStatModifier
		];
	} : StatModifierGroup;
}

PlayerJustAirDashed : StatusEffect
{
	duration = 
	{
		statModifiers += 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 0.2f;
			} : ConstantStatModifier
		];
	} : StatModifierGroup;
}

PlayerJustDodged : StatusEffect
{
	gameplayTags += 
	[
		"JustDodged"
	];
	duration = 
	{
		statModifiers += 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 1.5f;
			} : ConstantStatModifier
		];
	} : StatModifierGroup;
}

PlayerJustDodgedLocomotionBuffer : StatusEffect
{
	gameplayTags += 
	[
		"JustDodgedLocomotion"
	];
	duration = 
	{
		statModifiers += 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 0.6f;
			} : ConstantStatModifier
		];
	} : StatModifierGroup;
}

PlayerJustVaultedLocomotionBuffer : StatusEffect
{
	gameplayTags += 
	[
		"JustVaultedLocomotion"
	];
	duration = 
	{
		statModifiers += 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 0.5f;
			} : ConstantStatModifier
		];
	} : StatModifierGroup;
}

VehicleExitKnockdownProtection : StatusEffect
{
	gameplayTags += 
	[
		"VehicleExitKnockdownProtection"
	];
	duration = 
	{
		statModifiers += 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 2.0f;
			} : ConstantStatModifier
		];
	} : StatModifierGroup;
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			fk< StatModifier >[] stats = 
			[
				{
					statType = "BaseStats.KnockdownImmunity";
					modifierType = "Additive";
					value = 1f;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
}

MonoWireQuickhackContagiousHittableTarget : StatusEffect
{
	gameplayTags += 
	[
		"MonoWireQuickhackContagiousHittableTarget"
	];
	duration = 
	{
		statModifiers += 
		[
			{
				value = 4f;
			} : BaseDurationMod
		];
	};
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
}

MonoWireQuickhackApliedBySpread : StatusEffect
{
	gameplayTags += 
	[
		"MonoWireQuickhackApliedBySpread"
	];
	duration = 
	{
		statModifiers += 
		[
			{
				value = 50f;
			} : BaseDurationMod
		];
	};
	maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
}

FollowerDontLeaveStealth : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
}

FollowerVisibilityTargeting : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
}

ParryExpHarvested : StatusEffect
{
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 45;
			} : ConstantStatModifier
		];
	};
	fk< StatModifierGroup > maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 10;
			} : ConstantStatModifier
		];
	};
}

LocomotionExpHarvested : StatusEffect
{
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 5;
			} : ConstantStatModifier
		];
	};
	fk< StatModifierGroup > maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 5;
			} : ConstantStatModifier
		];
	};
}

QuickhackExpHarvested : StatusEffect
{
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 30;
			} : ConstantStatModifier
		];
	};
	fk< StatModifierGroup > maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 5;
			} : ConstantStatModifier
		];
	};
}

UtilityGrenadeRewardHarvested : StatusEffect
{
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = -1;
			} : ConstantStatModifier
		];
	};
	fk< StatModifierGroup > maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
}

SmasherStatusCleanse : StatusEffect
{
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 5;
			} : ConstantStatModifier
		];
	};
	fk< StatModifierGroup > maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	packages = 
	[
		{
			effectors = 
			[
				{
					effectTypes = 
					[
						"Quickhack"
					];
					effectTags = 
					[
						"DoT", "Quickhack"
					];
					statusEffects = 
					[
						"BaseStatusEffect.UploadingBossHack"
					];
				} : RemoveStatusEffectsEffector
			];
		} : GameplayLogicPackage
	];
}

UploadingBossHack : StatusEffect
{
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	fk< StatModifierGroup > maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
	packages = 
	[
		{
			effectors = 
			[
				{
					prereqRecord = 
					{
						conditions += 
						[
							{
								instigatorType = "Player";
								onlyOncePerShot = true;
							} : InstigatorTypeHitPrereqCondition, 
							{
								hitFlag = "DamageOverTime";
								invert = true;
							} : HitFlagHitPrereqCondition, 
							{
								attackType = "Hack";
								invert = true;
							} : AttackTypeHitPrereqCondition
						];
					} : PostProcessHitReceived;
					statPoolUpdates = 
					[
						{
							statPoolType = "BaseStatPools.BaseQuickHackUpload";
						}
					];
					applicationTarget = "Player";
					damageScaleFactor = -25f;
					usePercent = true;
				} : ModifyStatPoolValuePerHitEffector, 
				{
					prereqRecord = 
					{
						conditions += 
						[
							{
								instigatorType = "Player";
								onlyOncePerShot = true;
							} : InstigatorTypeHitPrereqCondition, 
							{
								attackType = "Hack";
							} : AttackTypeHitPrereqCondition
						];
					} : PostProcessHitReceived;
					statPoolUpdates = 
					[
						{
							statPoolType = "BaseStatPools.BaseQuickHackUpload";
						}
					];
					applicationTarget = "Player";
					damageScaleFactor = -5f;
					usePercent = true;
				} : ModifyStatPoolValuePerHitEffector
			];
		} : GameplayLogicPackage
	];
}

ForcedQHUploadAwarenessBumps : StatusEffect
{
	gameplayTags += 
	[
		"ForcedQHUploadAwarenessBumps"
	];
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	fk< StatModifierGroup > maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
}

ICECounterHackCooldown : DebuffStatusEffect
{
	fk< StatModifierGroup > duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 4;
			} : ConstantStatModifier
		];
	};
	fk< StatModifierGroup > maxStacks = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxStacks";
				modifierType = "Additive";
				value = 1;
			} : ConstantStatModifier
		];
	};
}

PocketRadioRestrictionUnlockDelay : StatusEffect
{
	gameplayTags += 
	[
		"PocketRadioRestrictionUnlockDelay"
	];
	duration = 
	{
		statModifiers = 
		[
			{
				statType = "BaseStats.MaxDuration";
				modifierType = "Additive";
				value = 3;
			} : ConstantStatModifier
		];
	};
	isAffectedByTimeDilationNPC = false;
	isAffectedByTimeDilationPlayer = false;
}

PhotoModeForceFPPCamera : StatusEffect
{
	gameplayTags += 
	[
		"PhotoModeForceFPPCamera"
	];
}

