package NPCRarity
using RTDB, NPCStatPreset

Elite : NPCRarity
{
	enumName = "Elite";
	enumComment = "NPC is much stronger than average";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.Health";
			modifierType = "Multiplier";
			id = "puppet_powerLevelToHealth";
			column = "puppet_powerLevelToRarityHealthMultiplier_elite";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.DamageReductionExplosion";
			modifierType = "Additive";
			value = 0.35f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.LootLevel";
			modifierType = "Additive";
			id = "puppet_preset_elite_mods";
			column = "power_level_to_loot_level";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.HitShapeArmor";
			modifierType = "Additive";
			refStat = "BaseStats.Armor";
			opSymbol = "*";
			value = 1.2f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Accuracy";
			modifierType = "Additive";
			id = "puppet_accuracy";
			column = "elite_puppet_accuracy";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.HackingResistance";
			modifierType = "Additive";
			value = 1f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterKnockdown";
			modifierType = "Additive";
			value = 4.33;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterStagger";
			modifierType = "Additive";
			value = 3.5;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterStaggerMelee";
			modifierType = "Additive";
			value = 3.5;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterImpact";
			modifierType = "Additive";
			value = 2.5;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterImpactMelee";
			modifierType = "Additive";
			value = 2.5;
		} : ConstantStatModifier
	];
	rarityValue = 5.0f;
}

Rare : NPCRarity
{
	enumName = "Rare";
	enumComment = "NPC is moderately stronger than average";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.Health";
			modifierType = "Multiplier";
			id = "puppet_powerLevelToHealth";
			column = "puppet_powerLevelToRarityHealthMultiplier_rare";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.LootLevel";
			modifierType = "Additive";
			id = "puppet_preset_rare_mods";
			column = "power_level_to_loot_level";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.HitShapeArmor";
			modifierType = "Additive";
			refStat = "BaseStats.Armor";
			opSymbol = "*";
			value = 1.15f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Accuracy";
			modifierType = "Additive";
			id = "puppet_accuracy";
			column = "rare_puppet_accuracy";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier
	];
	rarityValue = 4.0f;
}

Normal : NPCRarity
{
	enumName = "Normal";
	enumComment = "NPC is average";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.LootLevel";
			modifierType = "Additive";
			id = "puppet_preset_normal_mods";
			column = "power_level_to_loot_level";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.HitShapeArmor";
			modifierType = "Additive";
			refStat = "BaseStats.Armor";
			opSymbol = "*";
			value = 1.1f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Accuracy";
			modifierType = "Additive";
			id = "puppet_accuracy";
			column = "normal_puppet_accuracy";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.HasSubdermalArmor";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier
	];
	rarityValue = 3.0f;
}

Weak : NPCRarity
{
	enumName = "Weak";
	enumComment = "NPC is moderately weaker than average";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.Health";
			modifierType = "Multiplier";
			id = "puppet_powerLevelToHealth";
			column = "puppet_powerLevelToRarityHealthMultiplier_weak";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.DPS";
			modifierType = "Multiplier";
			id = "puppet_preset_weak_mods";
			column = "power_level_to_dps_mod";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.LootLevel";
			modifierType = "Additive";
			id = "puppet_preset_weak_mods";
			column = "power_level_to_loot_level";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.HitShapeArmor";
			modifierType = "Additive";
			refStat = "BaseStats.Armor";
			opSymbol = "*";
			value = 1.05f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Accuracy";
			modifierType = "Additive";
			id = "puppet_accuracy";
			column = "weak_puppet_accuracy";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.HasSubdermalArmor";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier
	];
	rarityValue = 2.0f;
}

Trash : NPCRarity
{
	enumName = "Trash";
	enumComment = "NPC is much weaker than average";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.Health";
			modifierType = "Multiplier";
			id = "puppet_powerLevelToHealth";
			column = "puppet_powerLevelToRarityHealthMultiplier_trash";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.DPS";
			modifierType = "Multiplier";
			id = "puppet_preset_trash_mods";
			column = "power_level_to_dps_mod";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.LootLevel";
			modifierType = "Additive";
			id = "puppet_preset_trash_mods";
			column = "power_level_to_loot_level";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.HitShapeArmor";
			modifierType = "Additive";
			refStat = "BaseStats.Armor";
			opSymbol = "*";
			value = 1.0f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.HasSubdermalArmor";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.Accuracy";
			modifierType = "Additive";
			id = "puppet_accuracy";
			column = "trash_puppet_accuracy";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier
	];
	rarityValue = 1.0f;
}

Officer : Rare
{
	enumName = "Officer";
	enumComment = "NPC is an officer allowing access to an NPC network for a netrunner";
	rarityValue = 4.5f;
	notAvailableDynamically = true;
}

Boss : NPCRarity
{
	enumName = "Boss";
	enumComment = "NPC is a boss enemy, with unique tactics, quest purpose, and/or heavily inflated stats";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.Health";
			modifierType = "Multiplier";
			id = "puppet_powerLevelToHealth";
			column = "puppet_powerLevelToRarityHealthMultiplier_boss";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.LootLevel";
			modifierType = "Additive";
			id = "puppet_preset_boss_mods";
			column = "power_level_to_loot_level";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.HitShapeArmor";
			modifierType = "Additive";
			refStat = "BaseStats.Armor";
			opSymbol = "*";
			value = 1.25f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Accuracy";
			modifierType = "Additive";
			id = "puppet_accuracy";
			column = "boss_puppet_accuracy";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.DPS";
			modifierType = "AdditiveMultiplier";
			id = "puppet_preset_boss_mods";
			column = "power_level_to_dps_mod";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.DamageReductionExplosion";
			modifierType = "Additive";
			value = 0.35f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "Multiplier";
			value = 1.25f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.KnockdownImmunity";
			modifierType = "Additive";
			value = 1f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HackingResistance";
			modifierType = "Additive";
			value = 3f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundedImmunity";
			modifierType = "Additive";
			value = 1f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundHeadDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundLArmDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundRArmDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundLLegDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundRLegDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismHeadDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismLArmDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismRArmDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismLLegDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismRLegDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier
	];
	rarityValue = 7.0f;
	notAvailableDynamically = true;
}

MaxTac : NPCRarity
{
	enumName = "MaxTac";
	enumComment = "NPC is a max tac enemy, with unique tactics, and/or heavily inflated stats";
	fk< StatModifier >[] statModifiers = 
	[
		{
			statType = "BaseStats.Health";
			modifierType = "Multiplier";
			id = "puppet_powerLevelToHealth";
			column = "puppet_powerLevelToRarityHealthMultiplier_boss";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.LootLevel";
			modifierType = "Additive";
			id = "puppet_preset_boss_mods";
			column = "power_level_to_loot_level";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.HitShapeArmor";
			modifierType = "Additive";
			refStat = "BaseStats.Armor";
			opSymbol = "*";
			value = 1.25f;
		} : CombinedStatModifier, 
		{
			statType = "BaseStats.Accuracy";
			modifierType = "Additive";
			id = "puppet_accuracy";
			column = "elite_puppet_accuracy";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.DPS";
			modifierType = "AdditiveMultiplier";
			id = "puppet_preset_boss_mods";
			column = "power_level_to_dps_mod";
			refStat = "BaseStats.PowerLevel";
		} : CurveStatModifier, 
		{
			statType = "BaseStats.DamageReductionExplosion";
			modifierType = "Additive";
			value = 0.6f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.Stamina";
			modifierType = "Multiplier";
			value = 1.25f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.KnockdownImmunity";
			modifierType = "Additive";
			value = 1f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HackingResistance";
			modifierType = "Additive";
			value = 3f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterKnockdown";
			modifierType = "Additive";
			value = 5.33;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterStagger";
			modifierType = "Additive";
			value = 4.5;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterStaggerMelee";
			modifierType = "Additive";
			value = 4.5;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterImpact";
			modifierType = "Additive";
			value = 3.5;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.HitTimerAfterImpactMelee";
			modifierType = "Additive";
			value = 3.5;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundedImmunity";
			modifierType = "Additive";
			value = 1f;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundHeadDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundLArmDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundRArmDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundLLegDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.WoundRLegDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismHeadDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismLArmDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismRArmDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismLLegDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier, 
		{
			statType = "BaseStats.DismRLegDamageThreshold";
			modifierType = "Multiplier";
			value = 0;
		} : ConstantStatModifier
	];
	rarityValue = 6.0f;
	notAvailableDynamically = true;
}

