using System.Collections.Generic;
using Model.Entity.Parts;
using Model.Entity.Types;
using Model.Types;

namespace Model.Entity.Data;

public partial class EntityData
{
    public static Dictionary<string, EntityModel> GetArmyData()
    {
        return new Dictionary<string, EntityModel>
        {
            // Vanguard
            // Q'Rath
            {
                DataType.VANGUARD_Zentari_Orzum,
                new EntityModel(DataType.VANGUARD_Zentari_Orzum, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name =
                            "Zentari",
                        Descriptive = DescriptiveType.Frontliner,
                        Description =
                            """
                            Ground unit. Attacks ground targets. Ranged attack in Hallowed Ground.
                            """,
                        FlavorText =
                            """
                            "Through our faith and duty bid us part, know that I will be here to protect you for the 
                            rest of yours days."<br/>
                            —Zentari Lord Orz'Abin
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 1 })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityVanguardAddedModel
                        { ReplaceId = DataType.UNIT_Sipari, ImmortalId = DataType.IMMORTAL_Orzum })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, BuildTime = 20, ProducedBy = DataType.BUILDING_LegionHall })
                    .AddPart(new EntitySupplyModel { Takes = 4 })
                    .AddPart(new EntityVitalityModel { Health = 180, DefenseLayer = 100, Armor = ArmorType.Light })
                    .AddPart(new EntityWeaponModel
                        { Damage = 26, Range = 100, AttacksPerSecond = 0.699f, Targets = TargetType.Ground })
                    .AddPart(new EntityWeaponModel
                        { Damage = 26, Range = 300, AttacksPerSecond = 0.699f, Targets = TargetType.Ground })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_LegionHall,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityMovementModel { Speed = 380, Movement = MovementType.Ground })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_FaithCastBlades })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_IconOfKhastEem })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_IconOfKhastEem })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_FaithCastBlades })
            },
            {
                DataType.VANGUARD_Sceptre_Orzum,
                new EntityModel(DataType.VANGUARD_Sceptre_Orzum, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Sceptre",
                        Descriptive = DescriptiveType.Skirmisher,
                        Description =
                            """
                            Air unit. Attacks ground targets. Anti-ground specialist.<br/>
                            Empowered attack does bonus damage and Burns adjacent enemies, dealing damage over time.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 3 })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 200, Ether = 175, BuildTime = 32, ProducedBy = DataType.BUILDING_Angelarium })
                    .AddPart(new EntityVitalityModel { Health = 435, DefenseLayer = 150, Armor = ArmorType.Heavy })
                    .AddPart(new EntitySupplyModel { Takes = 6 })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 35, MediumDamage = 40, HeavyDamage = 45, Range = 450, SecondsBetweenAttacks = 2.1f,
                        Targets = TargetType.Ground
                    })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 125, Range = 450, SecondsBetweenAttacks = 2f,
                        Targets = TargetType.Ground, HasSplash = true
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Angelarium,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVanguardAddedModel
                        { ReplaceId = DataType.UNIT_Warden, ImmortalId = DataType.IMMORTAL_Orzum })
                    .AddPart(new EntityMovementModel { Speed = 340, Movement = MovementType.Air })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_RegentsWrath })
            },
            {
                DataType.VANGUARD_Saoshin_Ajari,
                new EntityModel(DataType.VANGUARD_Saoshin_Ajari, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Saoshin",
                        Descriptive = DescriptiveType.Support,
                        Description =
                            """
                            Ground Spell Caster. Casts a healing/utility spell. Protector.
                            """,
                        FlavorText =
                            """
                            "You will hold fast the lost, dragging them to salvation. For only
                            your hearts can hold the boundless love of Q'rath"<br/>
                            —Ajari, Arash of Deliverance
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 1.5f })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityVanguardAddedModel
                        { ReplaceId = DataType.UNIT_Magi, ImmortalId = DataType.IMMORTAL_Ajari })
                    .AddPart(new EntityProductionModel
                        { Alloy = 75, Ether = 75, BuildTime = 28, ProducedBy = DataType.BUILDING_LegionHall })
                    .AddPart(new EntitySupplyModel { Takes = 4 })
                    .AddPart(new EntityVitalityModel
                        { Health = 210, DefenseLayer = 105, Armor = ArmorType.Light, IsEtheric = true })
                    .AddPart(new EntityMovementModel { Speed = 460, Movement = MovementType.Ground })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_LegionHall,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Reliquary,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityWeaponModel
                        { Damage = 18, Range = 400, SecondsBetweenAttacks = 1.4f, Targets = TargetType.Ground })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_Intervention })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Invervention })
            },
            {
                DataType.VANGUARD_ArkMother_Ajari,
                new EntityModel(DataType.VANGUARD_ArkMother_Ajari, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Ark Mother",
                        Descriptive = DescriptiveType.Support,
                        Description =
                            """
                            Ground Spellcaster. Casts a utility spell. Protector.<br/>
                            Creates <b>Hallowed Ground</b> when still for a few seconds.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 2.5f })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityVanguardAddedModel
                        { ReplaceId = DataType.UNIT_Hallower, ImmortalId = DataType.IMMORTAL_Ajari })
                    .AddPart(new EntityProductionModel
                        { Alloy = 125, Ether = 100, BuildTime = 32, ProducedBy = DataType.BUILDING_SoulFoundry })
                    .AddPart(new EntitySupplyModel { Takes = 5 })
                    .AddPart(new EntityVitalityModel
                        { Energy = 100, Health = 150, DefenseLayer = 150, Armor = ArmorType.Medium, IsEtheric = true })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_SoulFoundry,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_HouseOfFadingSaints,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityMovementModel { Speed = 390, Movement = MovementType.Hover })
                    .AddPart(new EntityWeaponModel
                        { Damage = 25, Range = 1100, SecondsBetweenAttacks = 2.5f, Targets = TargetType.Ground })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_OrdainedPassage })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HallowingRites })
            },
            // Vanguards
            // Aru
            {
                DataType.VANGUARD_Incubator_Mala,
                new EntityModel(DataType.VANGUARD_Incubator_Mala, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Incubator",
                        Descriptive = DescriptiveType.Support,
                        Description =
                            """
                            Ground unit. Can only attack ground. Mala Vanguard. Replaces Underspine.
                            """,
                        FlavorText =
                            """
                            "We cannot understand their pain when they lose their motherhood, nor can we judge their measures to regain it."<br/>
                            —Atzlan, to Om'loch
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 2 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AmberWomb,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityVanguardAddedModel
                        { ReplaceId = DataType.UNIT_Underspine, ImmortalId = DataType.IMMORTAL_Mala })
                    .AddPart(new EntityProductionModel
                        { Alloy = 75, Ether = 100, BuildTime = 28, ProducedBy = DataType.BUILDING_AmberWomb })
                    .AddPart(new EntitySupplyModel { Takes = 5 })
                    .AddPart(new EntityVitalityModel
                        { Energy = 150, Health = 180, DefenseLayer = 40, Armor = ArmorType.Medium, IsEtheric = false })
                    .AddPart(new EntityMovementModel { Speed = 340, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                        { Damage = 16, Range = 700, SecondsBetweenAttacks = 1.65f, Targets = TargetType.Ground })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_ProjectileGestation })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_FallenHarvest })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_Hematoma })
            },
            {
                DataType.VANGUARD_DreadSister_Mala,
                new EntityModel(DataType.VANGUARD_DreadSister_Mala, EntityType.Army)
                    .AddPart(new EntityInfoModel { Name = "Dread Sister", Descriptive = DescriptiveType.EliteCaster })
                    .AddPart(new EntityTierModel { Tier = 3 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_RedVale,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityVanguardAddedModel
                        { ReplaceId = DataType.UNIT_RedSeer, ImmortalId = DataType.IMMORTAL_Mala })
                    .AddPart(new EntityProductionModel
                        { Alloy = 60, Ether = 150, BuildTime = 36, ProducedBy = DataType.BUILDING_AltarOfTheWorthy })
                    .AddPart(new EntitySupplyModel { Takes = 4 })
                    .AddPart(new EntityVitalityModel
                    {
                        Energy = 100, Health = 90, DefenseLayer = 110, Armor = ArmorType.Light,
                        Defense = DefenseType.Overgrowth, IsEtheric = false
                    })
                    .AddPart(new EntityMovementModel { Speed = 360, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                        { Damage = 14, Range = 750, SecondsBetweenAttacks = 1.4f, Targets = TargetType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 120,
                        MediumDamage = 160,
                        HeavyDamage = 200,
                        Range = 1400,
                        SecondsBetweenAttacks = 4.0f,
                        Targets = TargetType.Ground
                    })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_RootVice })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_BirthingStorm })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_DeployDreadSister })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_BirthingStorm })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_CastingFromBlood })
            },

            {
                DataType.VANGUARD_RootShepard_Atzlan,
                new EntityModel(DataType.VANGUARD_RootShepard_Atzlan, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Root Shepard",
                        Descriptive = DescriptiveType.Skirmisher,
                        Description = "Can generate rootway."
                    })
                    .AddPart(new EntityTierModel { Tier = 2 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityVanguardAddedModel
                        { ReplaceId = DataType.UNIT_Ichor, ImmortalId = DataType.IMMORTAL_Atzlan })
                    .AddPart(new EntityProductionModel
                        { Alloy = 80, Ether = 0, BuildTime = 24, ProducedBy = DataType.BUILDING_AltarOfTheWorthy })
                    .AddPart(new EntitySupplyModel { Takes = 3 })
                    .AddPart(new EntityVitalityModel
                        { Health = 125, DefenseLayer = 100, Armor = ArmorType.Medium, IsEtheric = false })
                    .AddPart(new EntityMovementModel { Speed = 540, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 15, MediumDamage = 12, HeavyDamage = 9, Range = 400, AttacksPerSecond = 2.4f,
                        Targets = TargetType.Ground
                    })
                //.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Stalk })
            },


            {
                DataType.VANGUARD_Resinant_Atzlan,
                new EntityModel(DataType.VANGUARD_Resinant_Atzlan, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Resinant",
                        Descriptive = DescriptiveType.ZoneControl,
                        Description = "Ground unit. Can only attack ground."
                    })
                    .AddPart(new EntityTierModel { Tier = 2.5f })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AmberWomb,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityVanguardAddedModel
                        { ReplaceId = DataType.UNIT_BloodAnchor, ImmortalId = DataType.IMMORTAL_Atzlan })
                    .AddPart(new EntityProductionModel
                        { Alloy = 150, Ether = 125, BuildTime = 32, ProducedBy = DataType.BUILDING_AmberWomb })
                    .AddPart(new EntitySupplyModel { Takes = 6 })
                    .AddPart(new EntityVitalityModel { Health = 260, DefenseLayer = 90, Armor = ArmorType.Heavy })
                    .AddPart(new EntityMovementModel { Speed = 360, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 25, MediumDamage = 35, HeavyDamage = 45, Range = 800, SecondsBetweenAttacks = 1.429f,
                        Targets = TargetType.Ground
                    })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 85, MediumDamage = 100, HeavyDamage = 115, Range = 1000, SecondsBetweenAttacks = 2.5f,
                        MinimumRange = 500,
                        Targets = TargetType.Ground
                    })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_ResinantSpeed })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_MobilizeAru })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_EngorgedArteries })
            },

            {
                DataType.VANGUARD_BoneStalker_Xol,
                new EntityModel(DataType.VANGUARD_BoneStalker_Xol, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Bone Stalker",
                        Descriptive = DescriptiveType.Generalist,
                        Description = "Ground unit. Attacks ground/air targets. Stealthy.",
                        FlavorText =
                            """
                            "They will come in deathy silence, awaiting the Great Hunt. In time, the 'Bone-Takers' shall 
                            be without equal."<br/>
                            —Xol, Prophecies of the Icta'nuat
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 1 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityVanguardAddedModel
                        { ReplaceId = DataType.UNIT_MaskedHunter, ImmortalId = DataType.IMMORTAL_Xol })
                    .AddPart(new EntityProductionModel
                        { Alloy = 50, Ether = 0, BuildTime = 16, ProducedBy = DataType.BUILDING_AltarOfTheWorthy })
                    .AddPart(new EntitySupplyModel { Takes = 2 })
                    .AddPart(new EntityVitalityModel
                        { Health = 85, DefenseLayer = 10, Armor = ArmorType.Light, IsEtheric = false })
                    .AddPart(new EntityMovementModel { Speed = 380, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                        { Damage = 11, Range = 400, AttacksPerSecond = 1.02f, Targets = TargetType.All })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Stalk })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Ambush })
            },
            {
                DataType.VANGUARD_WhiteWoodReaper_Xol,
                new EntityModel(DataType.VANGUARD_WhiteWoodReaper_Xol, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "White Wood Reaper",
                        Descriptive = DescriptiveType.Skirmisher,
                        Description = "Ground unit. Attacks ground targets. Permanently Hidden."
                    })
                    .AddPart(new EntityTierModel { Tier = 3 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_RedVale,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityVanguardAddedModel
                        { ReplaceId = DataType.UNIT_Bloodbound, ImmortalId = DataType.IMMORTAL_Xol })
                    .AddPart(new EntityProductionModel
                        { Alloy = 80, Ether = 80, BuildTime = 28, ProducedBy = DataType.BUILDING_AltarOfTheWorthy })
                    .AddPart(new EntitySupplyModel { Takes = 4 })
                    .AddPart(new EntityVitalityModel
                    {
                        Energy = 60, Health = 80, DefenseLayer = 40, Defense = DefenseType.Overgrowth,
                        Armor = ArmorType.Medium, IsEtheric = false
                    })
                    .AddPart(new EntityMovementModel { Speed = 448, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 40, Range = 100, AttacksPerSecond = 1,
                        Targets = TargetType.Ground
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_CastingFromBlood })
            },
            // Units
            // Q'Rath
            {
                DataType.WORKER_Mote,
                new EntityModel(DataType.WORKER_Mote, EntityType.Worker)
                    .AddPart(new EntityInfoModel { Name = "Mote", Descriptive = DescriptiveType.Worker })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel { Alloy = 50, BuildTime = 20 })
                    .AddPart(new EntityVitalityModel { Health = 45, DefenseLayer = 45, Armor = ArmorType.Light })
                    .AddPart(new EntityMovementModel { Speed = 400, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                        { Damage = 5, Range = 50, AttacksPerSecond = 1.887f, Targets = TargetType.Ground })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HarvestAlloy })
            },
            {
                DataType.UNIT_Sipari,
                new EntityModel(DataType.UNIT_Sipari, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Sipari", Descriptive = DescriptiveType.Frontliner,
                        Description =
                            """
                            Ground unit. Attacks ground targets. Durable melee fighter.<br/>
                            Gets Shields in <b>Hallowed Ground</b>.<br/>
                            """,
                        FlavorText =
                            """
                            "From the ranks of the faithful shall the true-hearted step forward. They shall 
                            be My spear, My shield, pointed forever outward against Wicked and Beast!"<br/>
                            —Holy Aros, "Utterances 16.9"
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 1 })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "Z" })
                    .AddPart(new EntityVanguardReplacedModel
                        { ImmortalId = DataType.IMMORTAL_Orzum, ReplacedById = DataType.VANGUARD_Zentari_Orzum })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 75, BuildTime = 20, ProducedBy = DataType.BUILDING_LegionHall })
                    .AddPart(new EntitySupplyModel { Takes = 3 })
                    .AddPart(new EntityVitalityModel { Health = 210, DefenseLayer = 135, Armor = ArmorType.Light })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_LegionHall,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityMovementModel { Speed = 440, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 20, HeavyDamage = 18, Range = 180,
                        SecondsBetweenAttacks = 1.43f, Targets = TargetType.Ground
                    })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_GreavesOfAhqar })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_FortifiedIcons })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_GreavesOfAhqar })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_FortifiedIcons })
            },
            {
                DataType.UNIT_Magi,
                new EntityModel(DataType.UNIT_Magi, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Magi", Descriptive = DescriptiveType.Support,
                        Description =
                            """
                            Ground Spellcaster. Casts healing/utility spells. Protector.<br/>
                            Deploy to get Shields and create <b>Hallowed Ground</b>.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 1.5f })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 50, Ether = 75, BuildTime = 28, ProducedBy = DataType.BUILDING_LegionHall })
                    .AddPart(new EntitySupplyModel { Takes = 2 })
                    .AddPart(new EntityVanguardReplacedModel
                        { ImmortalId = DataType.IMMORTAL_Ajari, ReplacedById = DataType.VANGUARD_Saoshin_Ajari })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_LegionHall,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Reliquary,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Energy = 100, Health = 75, DefenseLayer = 75, Armor = ArmorType.Light })
                    .AddPart(new EntityMovementModel { Speed = 420, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 6, Range = 600, SecondsBetweenAttacks = 1.5f,
                        Targets = TargetType.All
                    })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_DeployMagi })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_MobilizeQrath })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_MendingDecree })
            },
            {
                DataType.UNIT_Zephyr,
                new EntityModel(DataType.UNIT_Zephyr, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Zephyr",
                        Descriptive = DescriptiveType.Generalist,
                        Description =
                            """
                            Ground unit. Attacks ground/air targets. Can teleport.
                            """,
                        FlavorText =
                            """
                            Once named, the bound between zephyr and pilot cannot be broken.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 1.5f })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 100, Ether = 40, BuildTime = 24, ProducedBy = DataType.BUILDING_LegionHall })
                    .AddPart(new EntitySupplyModel { Takes = 4 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_LegionHall,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_MonasteryOfIzur,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel { Health = 255, DefenseLayer = 105, Armor = ArmorType.Heavy })
                    .AddPart(new EntityMovementModel { Speed = 400, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 22, MediumDamage = 27, HeavyDamage = 32, Range = 500, SecondsBetweenAttacks = 1.5f,
                        Targets = TargetType.All
                    })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_WindStep })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_ZephyrRange })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_Windstep })
            },
            {
                DataType.UNIT_Dervish,
                new EntityModel(DataType.UNIT_Dervish, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Dervish",
                        Descriptive = DescriptiveType.Skirmisher,
                        Description =
                            """
                            Ground unit. Attacks ground targets. Fragile and agile.<br/>
                            Can use Radiant Ward to lay mines. Has damage reduction.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 2 })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 125, Ether = 10, BuildTime = 24, ProducedBy = DataType.BUILDING_SoulFoundry })
                    .AddPart(new EntitySupplyModel { Takes = 4 })
                    .AddPart(new EntityVitalityModel { Health = 180, DefenseLayer = 150, Armor = ArmorType.Medium })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_SoulFoundry,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityMovementModel { Speed = 500, Movement = MovementType.Hover })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 10, LightDamage = 26, MediumDamage = 18, Range = 350, SecondsBetweenAttacks = 2.0f,
                        Targets = TargetType.Ground
                    })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_SiroccoScript })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_RadiantWard })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_RadiantWard })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_SiroccoScript })
            },
            {
                DataType.UNIT_Absolver,
                new EntityModel(DataType.UNIT_Absolver, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Absolver",
                        Descriptive = DescriptiveType.ZoneControl,
                        Description =
                            """
                            Ground unit. Attacks ground targets. Deploys for area damage.
                            """,
                        Notes =
                            """
                            Has a higher DPS against structures when unmobilized.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 2 })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 150, Ether = 75, BuildTime = 28, ProducedBy = DataType.BUILDING_SoulFoundry })
                    .AddPart(new EntitySupplyModel { Takes = 5 })
                    .AddPart(new EntityVitalityModel { Health = 230, DefenseLayer = 150, Armor = ArmorType.Medium })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_SoulFoundry,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityMovementModel { Speed = 400, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 11, MediumDamage = 13, HeavyDamage = 15, StructureDamageBonus = 8, Range = 800,
                        AttacksPerSecond = 1.25f, Targets = TargetType.Ground
                    })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 6, MediumDamage = 7, HeavyDamage = 8, Range = 800, AttacksPerSecond = 2.222f,
                        Targets = TargetType.Ground
                    })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_DeployAbsolver })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_MobilizeQrath })
                    .AddPart(new EntityPassiveModel { Name = "?", Description = "Hits multiple units when deployed." })
            },
            {
                DataType.UNIT_Castigator,
                new EntityModel(DataType.UNIT_Castigator, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Castigator", Descriptive = DescriptiveType.AirKiller,
                        Description =
                            """
                            Ground unit. Can attack air and ground.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 2 })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 150, Ether = 75, BuildTime = 28, ProducedBy = DataType.BUILDING_SoulFoundry })
                    .AddPart(new EntitySupplyModel { Takes = 5 })
                    .AddPart(new EntityVitalityModel { Health = 300, DefenseLayer = 150, Armor = ArmorType.Heavy })
                    .AddPart(new EntityMovementModel { Speed = 390, Movement = MovementType.Ground })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_SoulFoundry,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 20,
                        MediumDamage = 30,
                        HeavyDamage = 40,
                        Range = 800,
                        SecondsBetweenAttacks = 1.42f,
                        Targets = TargetType.Air,
                        HasSplash = true
                    })
                    .AddPart(new EntityWeaponModel
                        { Damage = 16, Range = 500, SecondsBetweenAttacks = 1.5f, Targets = TargetType.Ground })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_RelicOfTheWrathfulGaze })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.PASSIVE_Maledictions })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_RelicOfTheWrathfulGaze })
            },
            {
                DataType.UNIT_Hallower,
                new EntityModel(DataType.UNIT_Hallower, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Hallower", Descriptive = DescriptiveType.Dislodger,
                        Description =
                            """
                            Ground Unit. Attack ground targets. Long-range attack.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 2.5f })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityVanguardReplacedModel
                        { ImmortalId = DataType.IMMORTAL_Ajari, ReplacedById = DataType.VANGUARD_ArkMother_Ajari })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 150, Ether = 100, BuildTime = 32, ProducedBy = DataType.BUILDING_SoulFoundry })
                    .AddPart(new EntitySupplyModel { Takes = 5 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_SoulFoundry,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_HouseOfFadingSaints,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel { Health = 100, DefenseLayer = 130, Armor = ArmorType.Heavy })
                    .AddPart(new EntityMovementModel { Speed = 335, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 60, MediumDamage = 80, HeavyDamage = 100, Range = 1300, AttacksPerSecond = 0.143f,
                        Targets = TargetType.Ground
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HallowedRuin })
            },
            {
                DataType.UNIT_Sentinel,
                new EntityModel(DataType.UNIT_Sentinel, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Sentinel",
                        Descriptive = DescriptiveType.AirKiller,
                        Description =
                            """
                            Air unit. Attacks air targets. Anti-air specialist.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 3 })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 150, Ether = 75, BuildTime = 28, ProducedBy = DataType.BUILDING_Angelarium })
                    .AddPart(new EntitySupplyModel { Takes = 4 })
                    .AddPart(new EntityVitalityModel { Health = 150, DefenseLayer = 100, Armor = ArmorType.Medium })
                    .AddPart(new EntityMovementModel { Speed = 525, Movement = MovementType.Air })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Angelarium,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 28, Range = 500, AttacksPerSecond = 0.714f, Targets = TargetType.Air
                    })
                //TODO: Connect Sentinel mobilize ability
            },
            {
                DataType.UNIT_Throne,
                new EntityModel(DataType.UNIT_Throne, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Throne",
                        Descriptive = DescriptiveType.Generalist,
                        Description =
                            """
                            Air unit. Attacks ground/air targets. Ultimate unit.
                            """,
                        FlavorText =
                            """
                            The Godhead Aros left silvers of itself in them, and no sight is more fearsome 
                            to its enemies.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 3.5f })
                    .AddPart(new EntityHotkeyModel { Hotkey = "A", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 350, Ether = 200, BuildTime = 70, ProducedBy = DataType.BUILDING_Angelarium })
                    .AddPart(new EntitySupplyModel { Takes = 10 })
                    .AddPart(new EntityVitalityModel { Health = 550, DefenseLayer = 350, Armor = ArmorType.Heavy })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Angelarium,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_BearerOfTheCrown,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityMovementModel { Speed = 300, Movement = MovementType.Air })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 120, Range = 500, SecondsBetweenAttacks = 2.5f,
                        Targets = TargetType.All
                    })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_TitheBlades })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_TitheBlades })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_GodstoneBulwark })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_ThroneMovingShot })
            },
            {
                DataType.UNIT_Warden,
                new EntityModel(DataType.UNIT_Warden, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Warden",
                        Descriptive = DescriptiveType.Skirmisher,
                        Description =
                            """
                            Air unit. Attacks ground targets. Anti-ground specialist.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 3 })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityVanguardReplacedModel
                        { ImmortalId = DataType.IMMORTAL_Orzum, ReplacedById = DataType.VANGUARD_Sceptre_Orzum })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 175, Ether = 100, BuildTime = 32, ProducedBy = DataType.BUILDING_Angelarium })
                    .AddPart(new EntitySupplyModel { Takes = 6 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Angelarium,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel { Health = 375, DefenseLayer = 100, Armor = ArmorType.Heavy })
                    .AddPart(new EntityMovementModel { Speed = 480, Movement = MovementType.Air })
                    .AddPart(new EntityWeaponModel
                        { Damage = 32, Range = 500, SecondsBetweenAttacks = 1.8f, Targets = TargetType.Ground })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_WingsOfTheKenLatir })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_WingsOfTheKenLatir })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_ExecutionRites })
            },
            {
                DataType.UNIT_SharU,
                new EntityModel(DataType.UNIT_SharU, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Shar'U",
                        Descriptive = DescriptiveType.DamageCaster
                    })
                    .AddPart(new EntityTierModel { Tier = 3.5f })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
                    .AddPart(new EntityProductionModel
                        { Alloy = 110, Ether = 250, BuildTime = 55, ProducedBy = DataType.BUILDING_Angelarium })
                    .AddPart(new EntitySupplyModel { Takes = 6 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Angelarium,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_EyeOfAros,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityVitalityModel
                        { Health = 300, DefenseLayer = 155, Energy = 150, IsEtheric = true, Armor = ArmorType.Heavy })
                    .AddPart(new EntityMovementModel { Speed = 360, Movement = MovementType.Air })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 10, Range = 650, SecondsBetweenAttacks = 1.4f,
                        Targets = TargetType.All
                    })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_Awestrike })
            },
            // Units
            // Aru
            {
                DataType.WORKER_Symbiote,
                new EntityModel(DataType.WORKER_Symbiote, EntityType.Worker)
                    .AddPart(new EntityInfoModel { Name = "Symbiote", Descriptive = DescriptiveType.Worker })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel { Alloy = 50, BuildTime = 20 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_GroveHeart,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityVitalityModel { Health = 75, DefenseLayer = 15, Armor = ArmorType.Light })
                    .AddPart(new EntityMovementModel { Speed = 400, Movement = MovementType.Hover })
                    .AddPart(new EntityWeaponModel
                        { Damage = 8, Range = 40, AttacksPerSecond = 1.25f, Targets = TargetType.Ground })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HarvestAlloy })
            },
            {
                DataType.UNIT_MaskedHunter,
                new EntityModel(DataType.UNIT_MaskedHunter, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Masked Hunter",
                        Descriptive = DescriptiveType.Generalist,
                        Description =
                            """
                            Ground Unit. Can attack ground and air.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 1 })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "Z" })
                    .AddPart(new EntityVanguardReplacedModel
                        { ImmortalId = DataType.IMMORTAL_Xol, ReplacedById = DataType.VANGUARD_BoneStalker_Xol })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 50, BuildTime = 16, ProducedBy = DataType.BUILDING_AltarOfTheWorthy })
                    .AddPart(new EntitySupplyModel { Takes = 2 })
                    .AddPart(new EntityVitalityModel
                        { Health = 125, DefenseLayer = 40, Defense = DefenseType.Overgrowth, Armor = ArmorType.Light })
                    .AddPart(new EntityMovementModel { Speed = 400, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 7, Range = 400, AttacksPerSecond = 1.4f, Targets = TargetType.All, MediumDamage = 6,
                        HeavyDamage = 5
                    })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_Offering })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.ABILITY_Offering })
            },
            {
                DataType.UNIT_Xacal,
                new EntityModel(DataType.UNIT_Xacal, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Xacal",
                        Descriptive = DescriptiveType.Skirmisher,
                        Description =
                            """
                            Ground unit. Attacks ground targets. Anti-Armor specialist.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 1.5f })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 80, Ether = 30, BuildTime = 20, ProducedBy = DataType.BUILDING_AltarOfTheWorthy })
                    .AddPart(new EntitySupplyModel { Takes = 3 })
                    .AddPart(new EntityVitalityModel { Health = 210, DefenseLayer = 110, Armor = ArmorType.Medium })
                    .AddPart(new EntityMovementModel { Speed = 516, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 14, MediumDamage = 21, HeavyDamage = 28, Range = 600, SecondsBetweenAttacks = 1.786f,
                        Targets = TargetType.Ground
                    })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_EthericFibers })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_XacalDamage })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_XacalDefense })
            },
            {
                DataType.UNIT_Bloodbound,
                new EntityModel(DataType.UNIT_Bloodbound, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Bloodbound",
                        Descriptive = DescriptiveType.Frontliner,
                        Description =
                            """
                            Ground unit. Attacks ground targets. Hard to kill.
                            """,
                        FlavorText =
                            """
                            "With this act, I sever myself from families proud and pleasures fickle. My hands shall 
                            clutch no babe nor trophy, for I am Laculathon's hungering blade."
                            <br/>
                            —Bloodbound initiation Rites
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 3 })
                    .AddPart(new EntityVanguardReplacedModel
                        { ImmortalId = DataType.IMMORTAL_Xol, ReplacedById = DataType.VANGUARD_WhiteWoodReaper_Xol })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_RedVale,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 80, Ether = 80, BuildTime = 24, ProducedBy = DataType.BUILDING_AltarOfTheWorthy })
                    .AddPart(new EntitySupplyModel { Takes = 4 })
                    .AddPart(new EntityVitalityModel
                        { Energy = 60, Health = 150, DefenseLayer = 75, Armor = ArmorType.Light })
                    .AddPart(new EntityMovementModel { Speed = 500, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 30, MediumDamage = 40, LightDamage = 50, Range = 80, AttacksPerSecond = 1.4f,
                        Targets = TargetType.Ground
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_QuenchingScythes })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.ABILITY_BloodyRebound })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_CastingFromBlood })
            },

            {
                DataType.UNIT_BloodAnchor,
                new EntityModel(DataType.UNIT_BloodAnchor, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Blood Anchor",
                        Descriptive = DescriptiveType.ZoneControl,
                        Description =
                            """
                            Ground unit. Can't attack. Deploys to spawn Cystic Crawlers and Rootway.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 2 })
                    .AddPart(new EntityVanguardReplacedModel
                        { ImmortalId = DataType.IMMORTAL_Atzlan, ReplacedById = DataType.VANGUARD_Resinant_Atzlan })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AmberWomb,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_RedVale,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 125, Ether = 100, BuildTime = 32, ProducedBy = DataType.BUILDING_AltarOfTheWorthy })
                    .AddPart(new EntitySupplyModel { Takes = 5 })
                    .AddPart(new EntityVitalityModel
                        { Health = 150, DefenseLayer = 75, Armor = ArmorType.Light })
                    .AddPart(new EntityMovementModel { Speed = 500, Movement = MovementType.Ground })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.ABILITY_MobilizeAru })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.ABILITY_DeployBloodAnchor })
            },

            {
                DataType.UNIT_RedSeer,
                new EntityModel(DataType.UNIT_RedSeer, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Red Seer",
                        Descriptive = DescriptiveType.DamageCaster,
                        Description =
                            """
                            Ground Spellcaster. Casts damage and utility spells. Ultimate Spellcaster.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 3 })
                    .AddPart(new EntityVanguardReplacedModel
                        { ImmortalId = DataType.IMMORTAL_Mala, ReplacedById = DataType.VANGUARD_DreadSister_Mala })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_RedVale,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "F", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 40, Ether = 140, BuildTime = 32, ProducedBy = DataType.BUILDING_AltarOfTheWorthy })
                    .AddPart(new EntitySupplyModel { Takes = 3 })
                    .AddPart(new EntityVitalityModel
                    {
                        Energy = 100, Health = 90, DefenseLayer = 75, Defense = DefenseType.Overgrowth,
                        IsEtheric = true, Armor = ArmorType.Light
                    })
                    .AddPart(new EntityMovementModel { Speed = 360, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                        { Damage = 9, Range = 700, AttacksPerSecond = 1.253f, Targets = TargetType.All })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_BloodPlague })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_DrainingEmbrace })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_MorphToGodphage })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_CastingFromBlood })
            },
            {
                DataType.UNIT_Underspine,
                new EntityModel(DataType.UNIT_Underspine, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Underspine",
                        Descriptive = DescriptiveType.Support,
                        Description = "Ground unit. Can attack ground and air."
                    })
                    .AddPart(new EntityTierModel { Tier = 1.5f })
                    .AddPart(new EntityVanguardReplacedModel
                        { ImmortalId = DataType.IMMORTAL_Mala, ReplacedById = DataType.VANGUARD_Incubator_Mala })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "Q", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 70, Ether = 50, BuildTime = 20, ProducedBy = DataType.BUILDING_AltarOfTheWorthy })
                    .AddPart(new EntitySupplyModel { Takes = 3 })
                    .AddPart(new EntityVitalityModel { Health = 210, DefenseLayer = 60, Armor = ArmorType.Medium })
                    .AddPart(new EntityMovementModel { Speed = 400, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 2, Range = 600, SecondsBetweenAttacks = 1.253f, Targets =
                            TargetType.All
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_OssifyingSwarm })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_ObstructingSwarm })
            },
            {
                DataType.UNIT_Ichor,
                new EntityModel(DataType.UNIT_Ichor, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Ichor",
                        Descriptive = DescriptiveType.Skirmisher,
                        Description =
                            """
                            Ground unit. Attacks ground targets. Fragile and agile.
                            """,
                        FlavorText =
                            """
                            "Kissed an ichor:" Aru phrase for "dying by one's own stupidity." 
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 1.5f })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AltarOfTheWorthy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 80, Ether = 0, BuildTime = 24, ProducedBy = DataType.BUILDING_AltarOfTheWorthy })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_MurderHollow,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntitySupplyModel { Takes = 3 })
                    .AddPart(new EntityVitalityModel { Health = 100, DefenseLayer = 40, Armor = ArmorType.Medium })
                    .AddPart(new EntityMovementModel { Speed = 424, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 18, LightDamage = 38, MediumDamage = 28, Range = 500, AttacksPerSecond = 0.7f,
                        Targets = TargetType.Ground, SecondsBetweenAttacks = 1.429f
                    })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_PursuitLigaments })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_ExternalDigestion })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_PursuitLigaments })
            },
            {
                DataType.UNIT_Aarox,
                new EntityModel(DataType.UNIT_Aarox, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Aarox",
                        Descriptive = DescriptiveType.AirKiller,
                        Description =
                            """
                            Air unit. Attacks air targets. Self-destructs to do area damage.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 3 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_BoneCanopy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "E", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 20, Ether = 20, BuildTime = 24, ProducedBy = DataType.BUILDING_BoneCanopy })
                    .AddPart(new EntitySupplyModel { Takes = 2 })
                    .AddPart(new EntityVitalityModel { Health = 55, DefenseLayer = 10, Armor = ArmorType.Light })
                    .AddPart(new EntityMovementModel { Speed = 490, Movement = MovementType.Air })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 125, MediumDamage = 163, HeavyDamage = 200, Range = 20,
                        AttacksPerSecond = 1,
                        Targets =
                            TargetType.Air
                    })
                    .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_DiveBomb })
            },
            {
                DataType.UNIT_Thrum,
                new EntityModel(DataType.UNIT_Thrum, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Thrum",
                        Descriptive = DescriptiveType.Skirmisher,
                        Description =
                            """
                            Air unit. Attacks ground/air targets. Fragile and agile.<br/>
                            Thrums get attack speed when a Thrum kills an enemy.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 3 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_BoneCanopy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "R", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 80, Ether = 65, BuildTime = 24, ProducedBy = DataType.BUILDING_BoneCanopy })
                    .AddPart(new EntitySupplyModel { Takes = 3 })
                    .AddPart(new EntityVitalityModel { Health = 150, DefenseLayer = 50, Armor = ArmorType.Light })
                    .AddPart(new EntityMovementModel { Speed = 580, Movement = MovementType.Air })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 11, LightDamage = 15, MediumDamage = 13, Range = 350, SecondsBetweenAttacks = 1.25f,
                        Targets = TargetType.All
                    })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_BloodFrenzy })
            },
            {
                DataType.UNIT_WraithBow,
                new EntityModel(DataType.UNIT_WraithBow, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Wraith Bow",
                        Descriptive = DescriptiveType.AirKiller,
                        Description =
                            """
                            Ground unit. Attacks ground/air targets. Anti-air specialist. 
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 2 })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_AmberWomb,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "W", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 80, Ether = 40, BuildTime = 24, ProducedBy = DataType.BUILDING_AmberWomb })
                    .AddPart(new EntitySupplyModel { Takes = 3 })
                    .AddPart(new EntityVitalityModel { Health = 180, DefenseLayer = 65, Armor = ArmorType.Medium })
                    .AddPart(new EntityMovementModel { Speed = 500, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                        { Damage = 22, Range = 700, AttacksPerSecond = 1.4f, Targets = TargetType.Air })
                    .AddPart(new EntityWeaponModel
                        { Damage = 9, Range = 500, AttacksPerSecond = 1.4f, Targets = TargetType.Ground })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_GuidingAmber })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_WraithBowRange })
            },
            {
                DataType.UNIT_Behemoth,
                new EntityModel(DataType.UNIT_Behemoth, EntityType.Army)
                    .AddPart(new EntityInfoModel
                    {
                        Name = "Behemoth",
                        Descriptive = DescriptiveType.Skirmisher,
                        Description =
                            """
                            Air unit. Attacks ground targets. Long-range attack.
                            """
                    })
                    .AddPart(new EntityTierModel { Tier = 3.5f })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_BoneCanopy,
                        Requirement = RequirementType.Production_Building
                    })
                    .AddPart(new EntityRequirementModel
                    {
                        Id = DataType.BUILDING_Neurocyte,
                        Requirement = RequirementType.Research_Building
                    })
                    .AddPart(new EntityHotkeyModel { Hotkey = "A", HoldSpace = true, HotkeyGroup = "Z" })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityProductionModel
                        { Alloy = 190, Ether = 150, BuildTime = 40, ProducedBy = DataType.BUILDING_BoneCanopy })
                    .AddPart(new EntitySupplyModel { Takes = 8 })
                    .AddPart(new EntityVitalityModel { Health = 350, DefenseLayer = 100, Armor = ArmorType.Heavy })
                    .AddPart(new EntityMovementModel { Speed = 210, Movement = MovementType.Air })
                    .AddPart(new EntityWeaponModel
                    {
                        Damage = 21,
                        Range = 600, AttacksPerSecond = 0.588f, SecondsBetweenAttacks = 1.7f,
                        Cooldown = 6, Charges = 1,
                        Targets = TargetType.Ground
                    })
                    .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_VitellineCysts })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_BehemothCapacity })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_QuitlStorage2 })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_FireQuitl })
            },
            {
                DataType.SUMMON_Quitl,
                new EntityModel(DataType.SUMMON_Quitl, EntityType.Army)
                    .AddPart(new EntityInfoModel { Name = "Quitl", Descriptive = DescriptiveType.Summon })
                    .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
                    .AddPart(new EntityVitalityModel { Health = 65, Armor = ArmorType.Light, Lasts = 8 })
                    .AddPart(new EntityMovementModel { Speed = 168, Movement = MovementType.Ground })
                    .AddPart(new EntityWeaponModel
                        { Damage = 10, Range = 300, AttacksPerSecond = 1.124f, Targets = TargetType.Ground })
                    .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Temporary })
            }
        };
    }
}