package AIQuickHack
using RTDB, AIQuickHackStatusEffect, ChoiceCaptionParts, Prereqs, Effectors, Perks

AIQuickHack : ObjectAction
{
	bool isQuickHack = true;
	objectActionType = "ObjectActionType.Remote";
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "AdditiveMultiplier";
			refStat = "BaseStats.EnemyQuickHackUploadDurationBonus";
			refObject = "Target";
			opSymbol = "*";
			value = 0.01f;
		} : CombinedStatModifier
	];
	targetPrereqs = 
	[
		{
			statType = "QuickHackImmunity";
			valueToCheck = 1;
			comparisonType = "Less";
		} : StatPrereq, 
		{
			valueToCheck = 
			[
				{
					statType = "BaseStats.QuickHackUpload";
					modifierType = "Additive";
					value = 0.0f;
				} : ConstantStatModifier
			];
			statPoolType = "QuickHackUpload";
			comparisonType = "LessOrEqual";
		} : StatPoolPrereq
	];
	targetActivePrereqs = 
	[
		"Prereqs.QuickHackUploadingPrereq"
	];
	cooldown = 
	{
		duration = 12.f;
	} : Cooldown;
}

HackReveal : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 60.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackReveal";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.RevealPositionHack";
}

HackBurning : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 5.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackBurning";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.BurningHack";
}

HackOverheat : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 8.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackOverheat";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.OverheatHack";
}

HackOverheat_VeryHard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 3.5f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackOverheat";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.OverheatHack";
}

HackOverheat_Hard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 4.5f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackOverheat";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.OverheatHack";
}

HackOverheat_Ribakov : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 5.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackOverheatRibakov";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.OverheatHack";
}

HackBlind : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 5.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackBlind";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.BlindHack";
}

HackBlind_VeryHard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 3.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackBlind";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.BlindHack";
}

HackBlind_Hard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 4.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackBlind";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.BlindHack";
}

HackBlind_Wagner : AIQuickHack
{
	activationTime = 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 5.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackBlind";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.BlindHack";
}

HackOverload : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 8.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.OverloadShort";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.EMPOverloadHack";
}

HackOverload_VeryHard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 3.5f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.OverloadShort";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.EMPOverloadHack";
}

HackOverload_Hard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 6.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.OverloadShort";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.EMPOverloadHack";
}

HackOverload_Ribakov : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 8.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.OverloadShort";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.EMPOverloadHack";
}

HackWeaponMalfunction : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 10.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackWeaponMalfunction";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.WeaponMalfunctionHack";
}

HackWeaponMalfunction_VeryHard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 4.5f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackWeaponMalfunction";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.WeaponMalfunctionHack";
}

HackWeaponMalfunction_Hard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 7.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackWeaponMalfunction";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.WeaponMalfunctionHack";
}

HackWeaponJam : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 10.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackJamWeapon";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.WeaponMalfunctionHack";
}

HackWeaponJam_VeryHard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 4.5f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackJamWeapon";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.WeaponMalfunctionHack";
}

HackLocomotion : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 10.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackLocomotionTier3";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.LocomotionMalfunctionHack";
}

HackLocomotion_VeryHard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 4.5f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackLocomotionTier3";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.LocomotionMalfunctionHack";
}

HackLocomotion_Hard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 5.5f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackLocomotionTier3";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.LocomotionMalfunctionHack";
}

HackCyberware : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 10.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackCyberware";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.CyberwareMalfunctionHack";
}

HackCyberware_VeryHard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 5.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackCyberware";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.CyberwareMalfunctionHack";
}

HackCyberware_Hard : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 7.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.HackCyberware";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.CyberwareMalfunctionHack";
}

AIHackDeath : AIQuickHack
{
}

HackDeath : AIHackDeath
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 20.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.SoftKill";
			recipient = "ObjectActionReference.Target";
		}, 
		{
			statusEffect = "AIQuickHackStatusEffect.HackDeathStaticNoise";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.DeathHack";
}

HackDeath_VeryHard : AIHackDeath
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 12.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.SoftKill";
			recipient = "ObjectActionReference.Target";
		}, 
		{
			statusEffect = "AIQuickHackStatusEffect.HackDeathStaticNoise";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.DeathHack";
}

HackDeath_Hard : AIHackDeath
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 15.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.SoftKill";
			recipient = "ObjectActionReference.Target";
		}, 
		{
			statusEffect = "AIQuickHackStatusEffect.HackDeathStaticNoise";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.DeathHack";
}

HackDeath_Ribakov_Down : AIHackDeath
{
	activationTime = 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 11.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.SoftKill";
			recipient = "ObjectActionReference.Target";
		}, 
		{
			statusEffect = "AIQuickHackStatusEffect.HackDeathStaticNoise";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.DeathHack";
}

HackDeath_Ribakov_top : AIHackDeath
{
	activationTime = 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 15.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.SoftKill";
			recipient = "ObjectActionReference.Target";
		}, 
		{
			statusEffect = "AIQuickHackStatusEffect.HackDeathStaticNoise";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.DeathHack";
}

HackDeath_Ribakov_Final_Down : AIHackDeath
{
	activationTime = 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 10.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.SoftKill";
			recipient = "ObjectActionReference.Target";
		}, 
		{
			statusEffect = "AIQuickHackStatusEffect.HackDeathStaticNoise";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.DeathHack";
}

HackDeath_Ribakov_Final_Easy : HackDeath_Ribakov_Final_Down
{
	activationTime = 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 40.f;
		} : ConstantStatModifier
	];
}

HackDeath_Ribakov_Final_Normal : HackDeath_Ribakov_Final_Down
{
	activationTime = 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 30.f;
		} : ConstantStatModifier
	];
}

HackDeath_Ribakov_Final_Hard : HackDeath_Ribakov_Final_Down
{
	activationTime = 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 20.f;
		} : ConstantStatModifier
	];
}

HackDeath_Ribakov_Final_VeryHard : HackDeath_Ribakov_Final_Down
{
	activationTime = 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 10.f;
		} : ConstantStatModifier
	];
}

HackDeath_MaxTac : AIHackDeath
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 15.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.ForceKill";
			recipient = "ObjectActionReference.Target";
		}, 
		{
			statusEffect = "AIQuickHackStatusEffect.HackDeathStaticNoise";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.DeathHack";
}

HackRevealPosition : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 60.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Multiplier";
			refStat = "BaseStats.HackRevealPositionModifier";
			refObject = "Player";
			opSymbol = "*";
			value = 1.0f;
		} : CombinedStatModifier
	];
	objectActionUI = "Interactions.RevealPositionHack";
}

PreventionHackRevealPosition : HackRevealPosition
{
	activationTime = 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 40.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Multiplier";
			refStat = "BaseStats.HackRevealPositionModifier";
			refObject = "Player";
			opSymbol = "*";
			value = 1.0f;
		} : CombinedStatModifier
	];
}

PreventionSystemHackerLoop : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 45.f;
		} : ConstantStatModifier
	];
	objectActionUI = "Interactions.PreventionSystemHack";
}

PreventionSystemHackerLoop2 : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 30.f;
		} : ConstantStatModifier
	];
	objectActionUI = "Interactions.PreventionSystemHack";
}

PreventionSystemHackerLoop3 : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 15.f;
		} : ConstantStatModifier
	];
	objectActionUI = "Interactions.PreventionSystemHack";
}

BuffCamo : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 2.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.BuffCamo";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.LocomotionMalfunctionHack";
}

BuffICE : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 2.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.BuffICE";
			recipient = "ObjectActionReference.Target";
		}
	];
	objectActionUI = "Interactions.LocomotionMalfunctionHack";
}

TrackedVirus : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 0.f;
		} : ConstantStatModifier
	];
	completionEffects = 
	[
		{
			statusEffect = "AIQuickHackStatusEffect.TrackedVirus";
			recipient = "ObjectActionReference.Target";
		}
	];
}

HackCounter_Smasher : AIQuickHack
{
	activationTime += 
	[
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "Additive";
			value = 30.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.QuickHackUpload";
			modifierType = "AdditiveMultiplier";
			id = "boss_power_level_to_dps_mult";
			column = "smasher_counterhack_upload_time_mult";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier
	];
	startEffects = 
	[
		{
			statusEffect = "BaseStatusEffect.ForcedQHUploadAwarenessBumps";
			recipient = "ObjectActionReference.Target";
		}, 
		{
			statusEffect = "BaseStatusEffect.UploadingBossHack";
			recipient = "ObjectActionReference.Instigator";
		}
	];
	completionEffects = 
	[
		{
			recipient = "ObjectActionReference.Target";
			effectorToTrigger = 
			{
				instigator = "Player";
				applicationTarget = "Player";
				statusEffectOnStoryDifficulty = "BaseStatusEffect.SmasherICE_Damage_Story";
				statusEffectOnEasyDifficulty = "BaseStatusEffect.SmasherICE_Damage_Easy";
				statusEffectOnHardDifficulty = "BaseStatusEffect.SmasherICE_Damage_Hard";
				statusEffectOnVeryHardDifficulty = "BaseStatusEffect.SmasherICE_Damage_VeryHard";
			} : ApplyStatusEffectBasedOnDifficultyEffector;
		}, 
		{
			statusEffect = "BaseStatusEffect.SmasherICE_DisableCyberdeck";
			recipient = "ObjectActionReference.Target";
		}, 
		{
			statusEffect = "BaseStatusEffect.SmasherStatusCleanse";
			recipient = "ObjectActionReference.Instigator";
		}, 
		{
			statusEffect = "BaseStatusEffect.ICECounterHackCooldown";
			recipient = "ObjectActionReference.Instigator";
		}, 
		{
			recipient = "ObjectActionReference.Target";
			effectorToTrigger = 
			{
				statusEffects = 
				[
					"BaseStatusEffect.ForcedQHUploadAwarenessBumps"
				];
				removeAfterActionCall = true;
			} : RemoveStatusEffectsEffector;
		}, 
		{
			stimSource = "AIActionTarget.Owner";
			stimType = "StimTypes.Combat";
		} : AISubActionTriggerStim, 
		{
			effectorToTrigger = 
			{
			} : ClearQuickhackQueueEffector;
		}
	];
	objectActionUI = "Interactions.SmasherCounterHack";
	interruptionPrereqs = 
	[
		{
			nestedPrereqs = 
			[
				{
					statusEffect = "BaseStatusEffect.Defeated";
					checkType = "CheckType.Type";
				} : StatusEffectPrereq, 
				{
					statusEffect = "BaseStatusEffect.Unconscious";
					checkType = "CheckType.Type";
				} : StatusEffectPrereq
			];
		} : ORPrereq
	];
}

