package Character
using RTDB, BaseStats, Spawn_glp, Minotaur, Ability, Perks

Puppet_Base : Character
{
	string devNotes = "Puppet Base! All other character records should inherit in a way form this record!";
	fk< AttachmentSlot >[] attachmentSlots = 
	[
		"AttachmentSlots.WeaponRight", "AttachmentSlots.WeaponLeft", "AttachmentSlots.GrenadeRight", "AttachmentSlots.GrenadeLeft", "AttachmentSlots.Head", "AttachmentSlots.Eyes", "AttachmentSlots.Chest", "AttachmentSlots.RightArm", "AttachmentSlots.LeftArm", "AttachmentSlots.RightHand", "AttachmentSlots.LeftHand", "AttachmentSlots.Legs", "AttachmentSlots.PersonalLink", "AttachmentSlots.Consumable", "AttachmentSlots.Feet", "AttachmentSlots.TppHead", "AttachmentSlots.Torso", "AttachmentSlots.Outfit", "AttachmentSlots.UnderwearTop", "AttachmentSlots.UnderwearBottom", "AttachmentSlots.ItemSlotSniperRifle", "AttachmentSlots.ItemSlotSMG", "AttachmentSlots.ItemSlotTechRifle", "AttachmentSlots.ItemSlotHandgunLeftJackie", "AttachmentSlots.ItemSlotHandgunRightJackie", "AttachmentSlots.ItemSlotKatana", "AttachmentSlots.ItemSlotGenericMelee", "AttachmentSlots.ItemSlotHammer", "AttachmentSlots.ItemSlotKnifeRight", "AttachmentSlots.ItemSlotKnifeLeft", "AttachmentSlots.ItemSlotGenericRanged", "AttachmentSlots.ItemSlotHandgunRight", "AttachmentSlots.ItemSlotHandgunLeft"
	];
	fk< InventoryItem >[] items = [];
	fk< StatModifierGroup >[] statModifierGroups = [];
	fk< StatPool >[] statPools = 
	[
		"BaseStatPools.Puppet_Health_Base", "BaseStatPools.Puppet_Stamina_Base"
	];
}

NPC_Base : Puppet_Base
{
	bool enableSensesOnStart = true;
	characterType = "NPCType.Human";
	baseAttitudeGroup = "neutral";
	CName archetypeName = "humanoid";
	CName weaponSlot = "AttachmentSlots.WeaponRight";
	fk< SensePreset > sensePreset = "Senses.Relaxed";
	string relaxedSensesPreset = "Relaxed";
	string alertedSensesPreset = "Alerted";
	string combatSensesPreset = "Combat";
	reactionPreset = "ReactionPresets.NoReaction";
	CName communitySquad = "Squad_Basic";
	statModifierGroups = 
	[
		"Character.NPC_Base_Primary_Stat_ModGroup"
	];
	fk< StatPool >[] statPools += 
	[
		"BaseStatPools.Fear", "BaseStatPools.Poise", "BaseStatPools.CPO_NPC_Importance"
	];
}

Crowd_NPC_Base : NPC_Base
{
	bool enableSensesOnStart = false;
	baseAttitudeGroup = "civilian";
	fk< Affiliation > affiliation = "Factions.Civilian";
	reactionPreset = "ReactionPresets.Civilian_Neutral";
	CName communitySquad = "";
	lootDrop = "LootTables.Empty";
	priority = "SpawnableObjectPriority.Crowd";
	isCrowd = true;
	isBumpable = true;
	dropsWeaponOnDeath = false;
	itemGroups = [];
	uiNameplate = "UINameplate.CrowdSettings";
	fk< StatPool >[] statPools = 
	[
		"BaseStatPools.Puppet_Health_Base", "BaseStatPools.Puppet_Stamina_Base"
	];
	statModifierGroups = 
	[
		"Character.Crowd_Primary_Stat_ModGroup"
	];
	rarity = "NPCRarity.Trash";
	fk< ObjectAction >[] objectActions = 
	[
		"GenericInteraction.Talk"
	];
	items = 
	[
		{
			item = "Items.locomotion_crowd_int_apparel_002__umbrella_small";
		}
	];
	primaryEquipment = 
	{
		equipmentItems = 
		[
			{
			} : CommunityFistsOnlyPool
		];
	};
	secondaryEquipment = 
	{
		equipmentItems = 
		[
			{
			} : CommunityDefaultSecondaryHandgunPool
		];
	};
}

Drone_NPC_Base_Old : NPC_Base
{
	CName archetypeName = "drone_deprecated";
	CName audioMeleeMaterial = "Mech";
	actionMap = "DroneArchetype.Map";
	string statusEffectParamsPackageName = "DroneStatusEffectActions";
	lootDrop = 
	{
	};
	statModifierGroups = 
	[
		"Character.Drone_Primary_Stat_ModGroup"
	];
	statPools = 
	[
		"BaseStatPools.NonHuman_Puppet_Health_Base", "BaseStatPools.Fear"
	];
	fk< ObjectAction >[] objectActions = 
	[
		"QuickHack.BaseWeaponMalfunctionHack", "QuickHack.BaseBlindHack"
	];
	characterType = "NPCType.Drone";
}

Mechanical_NPC_Base : NPC_Base
{
	savable = true;
	lootDrop = "Loot.NPCGenericMechanical";
	reactionPreset = "ReactionPresets.Mechanical_Aggressive";
	CName audioMeleeMaterial = "Mech";
	statModifierGroups = 
	[
		"Character.Mechanical_Primary_Stat_ModGroup", "Character.Mechanical_Immunities_ModGroup", "NPCStatPreset.LowElectricResistance"
	];
	statPools = 
	[
		"BaseStatPools.NonHuman_Puppet_Health_Base", "BaseStatPools.Fear", "BaseStatPools.Poise"
	];
	abilities += 
	[
		"Ability.IsMechanical"
	];
	fk< ObjectAction >[] objectActions = 
	[
		"QuickHack.RemoteBreach", "QuickHack.SuicideHackBase", "QuickHack.GrenadeHackBase", "QuickHack.SystemCollapseHackBase", "QuickHack.MadnessSetFriendlyBase", "QuickHack.BaseBlindHack", "QuickHack.BaseWeaponMalfunctionHack", "QuickHack.BaseLocomotionMalfunctionHack", "QuickHack.BaseOverheatHack", "QuickHack.BaseCommsCallInHack", "QuickHack.BaseCommsNoiseHack", "QuickHack.BaseCyberwareMalfunctionHack", "QuickHack.OverloadBaseHack", "QuickHack.BrainMeltBaseHack", "QuickHack.BasePingHack", "QuickHack.BaseContagionHack", "QuickHack.BaseMemoryWipeHack", "QuickHack.BaseWhistleHack", "QuickHack.BaseBlackWallHack", "MinigameAction.NetworkSuicideHack", "MinigameAction.NetworkJamWeaponHack", "MinigameAction.NetworkPingHack", "MinigameAction.NetworkAutoJamHack", "MinigameAction.NetworkAutoBlindHack", "MinigameAction.NetworkAutoLocomotionHack", "MinigameAction.NetworkWeakNPCs", "MinigameAction.NetworkVulnerableNPCs", "MinigameAction.NetworkMadnessHack", "MinigameAction.NetworkWeaponMalfunctionHack", "MinigameAction.NetworkCyberwareMalfunctionHack", "MinigameAction.NetworkLowerICEMinorFirst", "MinigameAction.NetworkLowerICEMinorSecond", "MinigameAction.NetworkLowerICEMinorThird", "MinigameAction.NetworkLowerICEMedium", "MinigameAction.NetworkLowerICETutorial", "MinigameAction.NetworkLowerICEMajor"
	];
	contentAssignment = "DeviceContentAssignment.Autoscaling";
}

Drone_NPC_Base : Mechanical_NPC_Base
{
	CName archetypeName = "drone";
	actionMap = "DroneArchetype.Map";
	string statusEffectParamsPackageName = "DroneStatusEffectActions";
	CName audioResourceName = "dev_drone_default";
	CName audioMeleeMaterial = "Mech";
	dropsWeaponOnDeath = false;
	statModifierGroups = 
	[
		"Character.Drone_Primary_Stat_ModGroup", "Character.Mechanical_Immunities_ModGroup", "NPCStatPreset.LowElectricResistance"
	];
	abilities += 
	[
		"Ability.CanSprint", "Ability.CanDash", "Ability.CanUseLegs"
	];
	onSpawnGLPs = [];
	characterType = "NPCType.Drone";
	float airDeathRagdollDelay = 0.9f;
	float mass = 100f;
	float sizeFront = 1.5f;
	float sizeBack = -1.5f;
	float sizeLeft = 1.2f;
	float sizeRight = -1.2f;
	float walkTiltCoefficient = 1.33f;
	float massNormalizedCoefficient = 2.0f;
	float tiltAngleOnSpeed = 40.0f;
	float speedIdleThreshold = 0.2f;
	float startingRecoveryBalance = 0.01f;
	float pseudoAcceleration = 30f;
	float turnInertiaDamping = 0.75f;
	float combatDefaultZOffset = 0.f;
}

Drone_Bombus_Base : Drone_NPC_Base
{
	rarity = "NPCRarity.Weak";
	entityTemplatePath = "base\vehicles\special\av_zetatech_bombus__basic.ent";
	displayName = "LocKey#45199";
	audioResourceName = "dev_drone_bombus_01";
	reactionPreset = "ReactionPresets.Mechanical_NonCombat";
	actionMap = "DroneBombusArchetype.Map";
	onSpawnGLPs += 
	[
		"Spawn_glp.DroneBombus_ExplodeOnDeath"
	];
	abilities += 
	[
		"Ability.CanShootWhileMoving", "Ability.HasSubdermalArmorLow_Mechanical"
	];
	mass = 70f;
	sizeFront = 0.2f;
	sizeBack = -0.33f;
	sizeLeft = 0.33f;
	sizeRight = -0.33f;
	walkTiltCoefficient = 0.1f;
	massNormalizedCoefficient = 2.0f;
	tiltAngleOnSpeed = 5.0f;
	speedIdleThreshold = 0.2f;
	startingRecoveryBalance = 0.01f;
	pseudoAcceleration = 30f;
	turnInertiaDamping = 0.2f;
}

Drone_Wyvern_Base : Drone_NPC_Base
{
	[ EP1 ]
	entityTemplatePath = "ep1\vehicles\special\av_militech_wyvern__basic_01_ep1.ent";
	displayName = "LocKey#45200";
	audioResourceName = "dev_drone_wyvern_01";
	actionMap = "DroneArchetype.Map";
	primaryEquipment = 
	{
		equipmentItems = 
		[
			{
				item = "Items.Wyvern_Rifle";
				equipSlot = "AttachmentSlots.WeaponRight";
			} : NPCEquipmentItem
		];
	};
	onSpawnGLPs += 
	[
		"Spawn_glp.DroneWyvern_ExplodeOnDeath"
	];
	abilities += 
	[
		"Ability.CanShootWhileMoving", "Ability.HasDodge", "Ability.HasSubdermalArmorLow_Mechanical"
	];
	mass = 20;
	sizeFront = 0.75f;
	sizeBack = -0.75f;
	sizeLeft = 0.5f;
	sizeRight = -0.5f;
	walkTiltCoefficient = 0.6f;
	massNormalizedCoefficient = 2.0f;
	tiltAngleOnSpeed = 1.0f;
	speedIdleThreshold = 0.2f;
	startingRecoveryBalance = 0.01f;
	pseudoAcceleration = 30f;
	turnInertiaDamping = 0.1f;
	combatDefaultZOffset = -0.15f;
}

Drone_Griffin_Base : Drone_NPC_Base
{
	rarity = "NPCRarity.Rare";
	[ EP1 ]
	entityTemplatePath = "ep1\vehicles\special\av_militech_griffin__basic_01_ep1.ent";
	displayName = "LocKey#45201";
	audioResourceName = "dev_drone_griffin_01";
	actionMap = "DroneGriffinArchetype.Map";
	primaryEquipment = 
	{
		equipmentItems = 
		[
			{
				item = "Items.Griffin_Rifle_Left";
				equipSlot = "AttachmentSlots.WeaponLeft";
			} : NPCEquipmentItem, 
			{
				item = "Items.Griffin_Rifle_Right";
				equipSlot = "AttachmentSlots.WeaponRight";
			} : NPCEquipmentItem
		];
	};
	onSpawnGLPs += 
	[
		"Spawn_glp.DroneGriffin_ExplodeOnDeath"
	];
	abilities += 
	[
		"Ability.HasDodge", "Ability.HasSubdermalArmorLow_Mechanical"
	];
	mass = 2;
	sizeFront = 0.33f;
	sizeBack = -0.66f;
	sizeLeft = 1.0f;
	sizeRight = -1.0f;
	walkTiltCoefficient = 0.2f;
	massNormalizedCoefficient = 2.0f;
	tiltAngleOnSpeed = 1.0f;
	speedIdleThreshold = 0.2f;
	startingRecoveryBalance = 0.01f;
	pseudoAcceleration = 30f;
	turnInertiaDamping = 0.1f;
}

Drone_Octant_Base : Drone_NPC_Base
{
	rarity = "NPCRarity.Elite";
	[ EP1 ]
	entityTemplatePath = "ep1\vehicles\special\av_zetatech_octant__basic_01_ep1.ent";
	displayName = "LocKey#45202";
	audioResourceName = "dev_drone_octant_01";
	actionMap = "DroneOctantArchetype.Map";
	bool keepColliderOnDeath = true;
	primaryEquipment = 
	{
		equipmentItems = 
		[
			{
				item = "Items.Octant_Autocannon";
				equipSlot = "AttachmentSlots.WeaponRight";
			} : NPCEquipmentItem
		];
	};
	statModifierGroups = 
	[
		"Character.Drone_Big_Primary_Stat_ModGroup", "Character.Mechanical_Immunities_ModGroup", "NPCStatPreset.LowElectricResistance"
	];
	onSpawnGLPs += 
	[
		"Spawn_glp.DroneOctant_ExplodeOnDeath"
	];
	abilities += 
	[
		"Ability.CanShootWhileMoving", "Ability.HasSubdermalArmorMedium_Mechanical"
	];
	mass = 120;
	sizeFront = 1.5f;
	sizeBack = -1.5f;
	sizeLeft = 1.2f;
	sizeRight = -1.2f;
	walkTiltCoefficient = 0.5f;
	massNormalizedCoefficient = 2.0f;
	tiltAngleOnSpeed = 10.0f;
	speedIdleThreshold = 0.2f;
	startingRecoveryBalance = 0.01f;
	pseudoAcceleration = 30f;
	turnInertiaDamping = 0.33f;
}

Android_NPC_Base : Mechanical_NPC_Base
{
	characterType = "NPCType.Android";
	CName audioMeleeMaterial = "Android";
	statModifierGroups += 
	[
		"Character.Android_Primary_Stat_ModGroup"
	];
	objectActions += 
	[
		"Takedown.NewPerkFinisher", "Takedown.NewPerkFinisherBlunt"
	];
	abilities += 
	[
		"Ability.CanShootWhileMoving", "Ability.CanPreciseShoot", "Ability.CanChargedShoot", "Ability.CanSmartShoot", "Ability.CanUseLeftHand", "Ability.CanUseRightHand", "Ability.CanUseLegs"
	];
	onSpawnGLPs = 
	[
		"Spawn_glp.Droid"
	];
}

Mech_NPC_Base : Mechanical_NPC_Base
{
	[ EP1 ]
	entityTemplatePath = "ep1\mechanical\mech\mch_003__minotaur_ep1.ent";
	baseAttitudeGroup = "neutral";
	CName audioMeleeMaterial = "Mech";
	string relaxedSensesPreset = "Relaxed";
	string alertedSensesPreset = "Alerted";
	string combatSensesPreset = "Combat";
	fk< NPCType > characterType = "NPCType.Mech";
	rarity = "NPCRarity.Elite";
	dropsWeaponOnDeath = false;
	actionMap = "MinotaurMech.Map";
	CName archetypeName = "mech";
	fk< AttachmentSlot >[] attachmentSlots = 
	[
		"AttachmentSlots.WeaponRight", "AttachmentSlots.WeaponLeft"
	];
	primaryEquipment = 
	{
		equipmentItems = 
		[
			{
				item = "Items.Minotaur_HMG_Right";
				equipSlot = "AttachmentSlots.WeaponRight";
			} : NPCEquipmentItem, 
			{
				item = "Items.Minotaur_HMG_Left";
				equipSlot = "AttachmentSlots.WeaponLeft";
			} : NPCEquipmentItem
		];
	};
	objectActions += 
	[
		"Takedown.NewPerkFinisher", "Takedown.NewPerkFinisherBlunt"
	];
	fk< GameplayAbility >[] abilities = 
	[
		"Ability.HasWeakspot", "Ability.HasQuickhackResistance", "Ability.HasMeleeHitReactionAndTakedownResistance", "Ability.HasSandevistanTier1", "Ability.HasSubdermalArmorHigh_Mechanical"
	];
	fk< StatModifierGroup >[] statModifierGroups += 
	[
		"Character.Mech_Primary_Stat_ModGroup"
	];
	fk< Weakspot >[] weakspots = 
	[
		"Weakspots.Mech_Weapon_Right_Weakspot", "Weakspots.Mech_Weapon_Left_Weakspot"
	];
	effectors += 
	[
		"Minotaur.OverloadWeakspotEffector", "Minotaur.RemoveOverloadWeakspotEffectEffector"
	];
}

Exo_NPC_Base : Gameplay_NPC_Base
{
	CName archetypeName = "exo";
	bool enableSensesOnStart = true;
	baseAttitudeGroup = "neutral";
	dropsWeaponOnDeath = false;
	rarity = "NPCRarity.Elite";
	displayName = "Exo Skeletton";
	CName audioMeleeMaterial = "Mech";
	entityTemplatePath = "base\mechanical\mech\mch_005__militech_exo.ent";
	actionMap = "RoyceExo.Map";
	CName preferedWeapon = "Items.plasma_cutter";
	CName weaponSlot = "AttachmentSlots.WeaponRight";
	attachmentSlots = 
	[
		"AttachmentSlots.WeaponRight", "AttachmentSlots.WeaponLeft", "AttachmentSlots.Head", "AttachmentSlots.Chest", "AttachmentSlots.RightArm", "AttachmentSlots.LeftArm", "AttachmentSlots.RightHand", "AttachmentSlots.LeftHand", "AttachmentSlots.Legs", "AttachmentSlots.PersonalLink", "AttachmentSlots.Consumable", "AttachmentSlots.ExoWeakspot"
	];
	abilities += 
	[
		"Ability.IsExo", "Ability.HasMeleeHitReactionAndTakedownResistance", "Ability.HasExtendedHitReactionImmunity", "Ability.HasWeakspot", "Ability.HasQuickhackResistance", "Ability.HasSandevistan", "Ability.HasSubdermalArmorHigh", "Ability.CanUseFragGrenades"
	];
	weakspots = 
	[
		"Weakspots.Exo_Weakspot"
	];
	items = 
	[
		{
			item = "Items.plasma_cutter";
			quantity = 1;
		}, 
		{
			item = "Items.GrenadeFragRegular";
			quantity = 99;
		}
	];
	objectActions = 
	[
		"Takedown.BossTakedown", "Takedown.NewPerkFinisher", "Takedown.NewPerkFinisherBlunt", "QuickHack.RemoteBreach", "QuickHack.BossSystemCollapseHackBase", "QuickHack.BossGrenadeHackBase", "QuickHack.BossMadnessHackBase", "QuickHack.BossSuicideHackBase", "QuickHack.BaseBlackWallHack", "QuickHack.BossBaseOverheatHack", "QuickHack.BaseContagionHack", "QuickHack.BossOverloadBaseHack", "QuickHack.BossBrainMeltBaseHack", "QuickHack.BossBaseWeaponMalfunctionHack", "QuickHack.BossBaseLocomotionMalfunctionHack", "QuickHack.BossBaseCyberwareMalfunctionHack", "QuickHack.BossBaseBlindHack", "QuickHack.BaseCommsCallInHack", "QuickHack.BaseCommsNoiseHack", "QuickHack.BasePingHack", "QuickHack.BossMemoryWipeHackBase", "QuickHack.BaseWhistleHack", "MinigameAction.NetworkSuicideHack", "MinigameAction.NetworkJamWeaponHack", "MinigameAction.NetworkPingHack", "MinigameAction.NetworkAutoJamHack", "MinigameAction.NetworkAutoBlindHack", "MinigameAction.NetworkAutoLocomotionHack", "MinigameAction.NetworkWeakNPCs", "MinigameAction.NetworkVulnerableNPCs", "MinigameAction.NetworkMadnessHack", "MinigameAction.NetworkWeaponMalfunctionHack", "MinigameAction.NetworkCyberwareMalfunctionHack", "MinigameAction.NetworkLowerICEMinorFirst", "MinigameAction.NetworkLowerICEMinorSecond", "MinigameAction.NetworkLowerICEMinorThird", "MinigameAction.NetworkLowerICEMedium", "MinigameAction.NetworkLowerICETutorial", "MinigameAction.NetworkLowerICEMajor"
	];
	statModifierGroups = 
	[
		"Character.exo_npc_base_stats"
	];
	statPools = 
	[
		"BaseStatPools.Puppet_Health_Base", "BaseStatPools.E3_BossWeakSpotHealth", "BaseStatPools.Poise"
	];
	effectors += 
	[
		"Royce.OverloadWeakspotEffector", {
			prereqRecord = 
			{
				allowedTags = 
				[
					"Cyberpsycho"
				];
			} : GameplayTagsPrereq;
			statGroup = 
			{
				statModifiers = 
				[
					{
						statType = "BaseStats.RandomCurveInput";
						modifierType = "Additive";
						id = "quality_curves";
						column = "rci_to_cyberpsycho_boss_level";
						refStat = "BaseStats.NPCLootLevelHelper";
					} : CurveStatModifier
				];
			};
			reapplyOnWeaponChange = true;
		} : ApplyStatGroupOnWeapon
	];
	bool hasToBeKilledInWounded = true;
	float shieldControllerDestroyed_staggerThreshold = -1.f;
}

exo_npc_base_stats : NPC_Base_Curves
{
	statModifiers += 
	[
		{
			statType = "BaseStats.Health";
			modifierType = "Multiplier";
			value = 1.25f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ImpactDamageThreshold";
			modifierType = "Additive";
			value = -1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.StaggerDamageThreshold";
			modifierType = "Additive";
			value = 20.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.KnockdownDamageThreshold";
			modifierType = "Additive";
			value = -1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ImpactDamageThresholdInCover";
			modifierType = "Additive";
			value = -1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.StaggerDamageThresholdInCover";
			modifierType = "Additive";
			value = -1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.KnockdownDamageThresholdInCover";
			modifierType = "Additive";
			value = -1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundHeadDamageThreshold";
			modifierType = "Additive";
			value = 99999;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundLArmDamageThreshold";
			modifierType = "Additive";
			value = 99999;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundRArmDamageThreshold";
			modifierType = "Additive";
			value = 99999;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundLLegDamageThreshold";
			modifierType = "Additive";
			value = 99999;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundRLegDamageThreshold";
			modifierType = "Additive";
			value = 99999;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismHeadDamageThreshold";
			modifierType = "Additive";
			value = 99999;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismLArmDamageThreshold";
			modifierType = "Additive";
			value = 99999;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismRArmDamageThreshold";
			modifierType = "Additive";
			value = 99999;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismLLegDamageThreshold";
			modifierType = "Additive";
			value = 99999;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismRLegDamageThreshold";
			modifierType = "Additive";
			value = 99999;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DefeatedHeadDamageThreshold";
			modifierType = "Additive";
			value = 100;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DefeatedLArmDamageThreshold";
			modifierType = "Additive";
			value = 100;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DefeatedRArmDamageThreshold";
			modifierType = "Additive";
			value = 100;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DefeatedLLegDamageThreshold";
			modifierType = "Additive";
			value = 100;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DefeatedRLegDamageThreshold";
			modifierType = "Additive";
			value = 100;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitReactionFactor";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitWoundsFactor";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitDismembermentFactor";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.BlindImmunity";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.StunImmunity";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.BurningImmunity";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.BleedingImmunity";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.PoisonImmunity";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ElectricResistance";
			modifierType = "Additive";
			value = 5;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.ThermalResistance";
			modifierType = "Additive";
			value = 40;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.PersonalityAggressive";
			modifierType = "Additive";
			value = 100.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterImpact";
			modifierType = "Additive";
			value = 15;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterImpactMelee";
			modifierType = "Additive";
			value = 15;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterStagger";
			modifierType = "Additive";
			value = 15;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterStaggerMelee";
			modifierType = "Additive";
			value = 15;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.KnockdownImmunity";
			modifierType = "Additive";
			value = 1.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.UnconsciousImmunity";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundedImmunity";
			modifierType = "Additive";
			value = 1;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.NPCDamage";
			modifierType = "Additive";
			refStat = "BaseStats.DPS";
			opSymbol = "*";
			value = 1.0f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.AudioStimRangeMultiplier";
			modifierType = "Additive";
			value = 1.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.VisualStimRangeMultiplier";
			modifierType = "Additive";
			value = 1.f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HackingResistance";
			modifierType = "Additive";
			id = "puppet_hacking_res_to_upload";
			column = "exo_hacking_res_to_npc_rarity";
			refStat = "BaseStats.NPCRarity";
		} : CurveStatModifier
	];
}

Hologram_NPC_Base : NPC_Base
{
	CName communitySquad = "";
	itemGroups = [];
}

Interactable_NPC_Base : NPC_Base
{
	savable = true;
	fk< ObjectAction >[] objectActions = 
	[
		"GenericInteraction.PickUpBody", "GenericInteraction.Talk", "GenericInteraction.ReturnTalk", "Takedown.Grapple", "Takedown.LethalTakedown", "Takedown.NonLethalTakedown", "Takedown.AerialTakedown", "Takedown.BlackwallTakedown", "Takedown.NewPerkFinisher", "Takedown.NewPerkFinisherBlunt", "Takedown.NewPerkFinisherBluntHold", "QuickHack.RemoteBreach", "QuickHack.SuicideHackBase", "QuickHack.GrenadeHackBase", "QuickHack.SystemCollapseHackBase", "QuickHack.MadnessHackBase", "QuickHack.BaseBlackWallHack", "QuickHack.BaseOverheatHack", "QuickHack.BaseContagionHack", "QuickHack.OverloadBaseHack", "QuickHack.BrainMeltBaseHack", "QuickHack.BaseBlindHack", "QuickHack.BaseWeaponMalfunctionHack", "QuickHack.BaseLocomotionMalfunctionHack", "QuickHack.BaseCyberwareMalfunctionHack", "QuickHack.BaseCommsCallInHack", "QuickHack.BaseCommsNoiseHack", "QuickHack.BasePingHack", "QuickHack.BaseMemoryWipeHack", "QuickHack.BaseWhistleHack", "MinigameAction.NetworkSuicideHack", "MinigameAction.NetworkJamWeaponHack", "MinigameAction.NetworkPingHack", "MinigameAction.NetworkAutoJamHack", "MinigameAction.NetworkAutoBlindHack", "MinigameAction.NetworkAutoLocomotionHack", "MinigameAction.NetworkWeakNPCs", "MinigameAction.NetworkVulnerableNPCs", "MinigameAction.NetworkMadnessHack", "MinigameAction.NetworkWeaponMalfunctionHack", "MinigameAction.NetworkCyberwareMalfunctionHack", "MinigameAction.NetworkLowerICEMinorFirst", "MinigameAction.NetworkLowerICEMinorSecond", "MinigameAction.NetworkLowerICEMinorThird", "MinigameAction.NetworkLowerICEMedium", "MinigameAction.NetworkLowerICETutorial", "MinigameAction.NetworkLowerICEMajor"
	];
}

Gameplay_NPC_Base : Interactable_NPC_Base
{
	uiNameplate = "UINameplate.CombatSettings";
	CName communitySquad = "Squad_Basic";
	itemGroups = 
	[
		"Character.Enemy_Items_Base"
	];
	abilities += 
	[
		"Ability.CanCrouch", "Ability.CanSprint", "Ability.CanSwitchWeapon", "Ability.CanShootWhileMoving", "Ability.CanPreciseShoot", "Ability.CanChargedShoot", "Ability.CanSmartShoot", "Ability.CanUseLeftHand", "Ability.CanUseRightHand", "Ability.CanUseLegs", "Ability.CanTaunt", "Ability.CanCloseCombat"
	];
	effectors = 
	[
		"Effectors.HitReactionTBHIncrease"
	];
	statModifiers += 
	[
		"QuickHack.TargetResistance_DifficultyMult", "QuickHack.TargetResistanceUltimate_DifficultyMult"
	];
	contentAssignment = "DeviceContentAssignment.Autoscaling";
	lootDrop = "LootTables.Empty";
}

Quest_NPC_Base : Interactable_NPC_Base
{
	priority = "SpawnableObjectPriority.Regular";
	reactionPreset = "ReactionPresets.NoReaction";
	uiNameplate = "UINameplate.QuestSettings";
	abilities += 
	[
		"Ability.CanCrouch", "Ability.CanSprint"
	];
	fk< StatModifier >[] statModifiers += 
	[
		{
			statType = "BaseStats.WoundedImmunity";
			modifierType = "Additive";
			value = 1f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundHeadDamageThreshold";
			modifierType = "Additive";
			value = 100;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundLArmDamageThreshold";
			modifierType = "Additive";
			value = 100;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundRArmDamageThreshold";
			modifierType = "Additive";
			value = 100;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundLLegDamageThreshold";
			modifierType = "Additive";
			value = 100;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundRLegDamageThreshold";
			modifierType = "Additive";
			value = 100;
		} : ConstantStatModifier
	];
}

Quest_Combat_NPC_Base : Gameplay_NPC_Base
{
	priority = "SpawnableObjectPriority.Regular";
	reactionPreset = "ReactionPresets.Ganger_Aggressive";
	uiNameplate = "UINameplate.QuestSettings";
	primaryEquipment = 
	{
		equipmentItems = 
		[
			{
				item = "Items.Preset_Base_Lexington";
				equipSlot = "AttachmentSlots.WeaponRight";
			} : NPCEquipmentItem
		];
	};
}

Fixer : Quest_NPC_Base
{
	CName factCounterName = "";
	int amountOfQuests = 0;
	int[] thresholds = [];
	fk< UIIcon > tooltipAvatar = "";
	CName additionalDescription = "";
}

