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 GetImmortalData() { return new Dictionary { // Immortals // Aru { DataType.IMMORTAL_Atzlan, new EntityModel(DataType.IMMORTAL_Atzlan, EntityType.Immortal) .AddPart(new EntityInfoModel { Name = "Atzlan" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityHarvestModel { Resource = ResourceType.Pyre, HarvestedPerInterval = 1, HarvestDelay = 3, RequiresWorker = false, Slots = 1, TotalAmount = -1 }) .AddPart(new EntityIdPassiveModel { Id = DataType.IPASSIVE_GreenThumb }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonGroveGuardian }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_ProphetOfTheRoots }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_WallOfRoots }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonDeepWyrm }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonRootBud }) .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_RootShepard_Atzlan }) .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_Resinant_Atzlan }) }, { DataType.IMMORTAL_Mala, new EntityModel(DataType.IMMORTAL_Mala, EntityType.Immortal) .AddPart(new EntityInfoModel { Name = "Mala" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityHarvestModel { Resource = ResourceType.Pyre, HarvestedPerInterval = 1, HarvestDelay = 3, RequiresWorker = false, Slots = 1, TotalAmount = -1 }) .AddPart(new EntityIdPassiveModel { Id = DataType.IPASSIVE_MothersHunger }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonGroveGuardian }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_RedHarvest }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_ProphetsFavor }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_RainOfBlood }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_ConstructBloodWell }) .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_Incubator_Mala }) .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_DreadSister_Mala }) }, { DataType.IMMORTAL_Xol, new EntityModel(DataType.IMMORTAL_Xol, EntityType.Immortal) .AddPart(new EntityInfoModel { Name = "Xol" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityHarvestModel { Resource = ResourceType.Pyre, HarvestedPerInterval = 1, HarvestDelay = 3, RequiresWorker = false, Slots = 1, TotalAmount = -1 }) .AddPart(new EntityIdPassiveModel { Id = DataType.IPASSIVE_StalkersSense }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonGroveGuardian }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_ProphetOfTheHunt }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_HuntingGrounds }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_TheGreatHunt }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_ConstructBloodWell }) .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_BoneStalker_Xol }) .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_WhiteWoodReaper_Xol }) }, // Immortals // Q'Rath { DataType.IMMORTAL_Ajari, new EntityModel(DataType.IMMORTAL_Ajari, EntityType.Immortal) .AddPart(new EntityInfoModel { Name = "Ajari" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityHarvestModel { Resource = ResourceType.Pyre, HarvestedPerInterval = 1, HarvestDelay = 3, RequiresWorker = false, Slots = 1, TotalAmount = -1 }) .AddPart(new EntityIdPassiveModel { Id = DataType.IPASSIVE_MendingGrace }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonCitadel }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_HeavensAegis }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_DeliverFromEvil }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_Salvation }) .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_Saoshin_Ajari }) .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_ArkMother_Ajari }) }, { DataType.IMMORTAL_Orzum, new EntityModel(DataType.IMMORTAL_Orzum, EntityType.Immortal) .AddPart(new EntityInfoModel { Name = "Orzum" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityHarvestModel { Resource = ResourceType.Pyre, HarvestedPerInterval = 1, HarvestDelay = 3, RequiresWorker = false, Slots = 1, TotalAmount = -1 }) .AddPart(new EntityIdPassiveModel { Id = DataType.IPASSIVE_OrdainedConquest }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_RookOfIra }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonCitadel }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_EmpireUnbroken }) .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_PillarOfHeaven }) .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_Zentari_Orzum }) .AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_Sceptre_Orzum }) }, // Immortal Passives { DataType.IPASSIVE_MendingGrace, new EntityModel(DataType.IPASSIVE_MendingGrace, EntityType.Passive) .AddPart(new EntityInfoModel { Name = "Mending Grace", Description = "Friendly units heal on Hallowed Ground. Units get an initial burst of healing after a delay, then heal over time." }) }, { DataType.IPASSIVE_OrdainedConquest, new EntityModel(DataType.IPASSIVE_OrdainedConquest, EntityType.Passive) .AddPart(new EntityInfoModel { Name = "Ordained Conquest", Description = """ Citadels generate Pyre passively. Execute towers below 20% HP. """ }) }, { DataType.IPASSIVE_MothersHunger, new EntityModel(DataType.IPASSIVE_MothersHunger, EntityType.Passive) .AddPart(new EntityInfoModel { Name = "Mother's Hunger", Description = """ Units that die near Blood Wells, Grove Guardians, Incubators, Dread Sisters, Mala's Specter, and units that dies during Rain of Blood give Sacral Blood. """ }) }, { DataType.IPASSIVE_StalkersSense, new EntityModel(DataType.IPASSIVE_StalkersSense, EntityType.Passive) .AddPart(new EntityInfoModel { Name = "Stalker's Sense", Description = "Increases the vision range of your units by 1." }) }, { DataType.IPASSIVE_GreenThumb, new EntityModel(DataType.IPASSIVE_GreenThumb, EntityType.Passive) .AddPart(new EntityInfoModel { Name = "Green Thumb", Description = "Friendly units near Atzlan heal over time." }) }, // Pyre Spells // Q'Rath { DataType.ISPELL_SummonCitadel, new EntityModel(DataType.ISPELL_SummonCitadel, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Summon Citadel", Description = """ Target a Phyric Foundation. Summon a Citadel.
Can attack ground and air. Heals friendly units. Does not require a worker. """ }) .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityProductionModel { Pyre = 50, BuildTime = 70 }) .AddPart(new EntityVitalityModel { Health = 1000, DefenseLayer = 500, Armor = ArmorType.Heavy, IsStructure = true }) .AddPart(new EntityWeaponModel { Damage = 20, Range = 800, AttacksPerSecond = 1.124f, Targets = TargetType.All, MediumDamage = 25, HeavyDamage = 30 }) .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Respite }) .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HallowedGround }) }, // Orzum { DataType.ISPELL_RookOfIra, new EntityModel(DataType.ISPELL_RookOfIra, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Rook of Ira", Description = "Target a location to summon a Rook of Ira." }) .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Orzum }) .AddPart(new EntityProductionModel { Pyre = 125, Cooldown = 90, BuildTime = 3 }) }, { DataType.ISPELL_EmpireUnbroken, new EntityModel(DataType.ISPELL_EmpireUnbroken, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Empire Unbroken", Description = """ Targe an area. Buildings get damage reduction then heal.
Temporary. Healing happens at the end of the spell.
Temporarily turns Citadels into Rooks of Ira. """ }) .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Orzum }) .AddPart(new EntityProductionModel { Pyre = 50, Cooldown = 120 }) }, { DataType.ISPELL_PillarOfHeaven, new EntityModel(DataType.ISPELL_PillarOfHeaven, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Pillar of the Heavens", Description = """ Target an area to deal massive area damage.
Creates temporary Hallowed Ground that improves friendly unit attack speed. """ }) .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Orzum }) .AddPart(new EntityProductionModel { Pyre = 150, Cooldown = 120 }) .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Zeal }) }, // Ajari { DataType.ISPELL_HeavensAegis, new EntityModel(DataType.ISPELL_HeavensAegis, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Heaven's Aegis", Description = """ Target a friendly unit. It gets movement speed and Shields.
Periodically saves charges, up to a cap. """ }) .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Ajari }) .AddPart(new EntityProductionModel { Pyre = 25, Cooldown = 0.5f }) }, { DataType.ISPELL_DeliverFromEvil, new EntityModel(DataType.ISPELL_DeliverFromEvil, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Deliver from Evil", Description = """ Target an area. Friendly units teleport to your nearest Acropolis.
Units get Shields for a few seconds before teleporting. """ }) .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Ajari }) .AddPart(new EntityProductionModel { Pyre = 50, Cooldown = 60 }) }, { DataType.ISPELL_Salvation, new EntityModel(DataType.ISPELL_Salvation, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Salvation", Description = """ Target a location. Summon Ajari's Specter to prevent death.
Saved units are brought back to Ajari's location at the end of the duration. Destroying Ajari's Urn ends the effect and prevents Saved units from coming back. """ }) .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Ajari }) .AddPart(new EntityProductionModel { Pyre = 175, Cooldown = 45 }) }, // Immortal Spells // Aru { DataType.ISPELL_SummonGroveGuardian, new EntityModel(DataType.ISPELL_SummonGroveGuardian, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Summon Grove Guardian", Description = "Creates a powerful defensive structure on a Tower Foundation." }) .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityProductionModel { Pyre = 50, BuildTime = 70 }) .AddPart(new EntityVitalityModel { Health = 1850, DefenseLayer = 450, Armor = ArmorType.Heavy, IsStructure = true }) .AddPart(new EntityWeaponModel { Damage = 19, Range = 800, AttacksPerSecond = 1.887f, Targets = TargetType.All }) .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Respite }) .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Rootway }) }, { DataType.ISPELL_ConstructBloodWell, new EntityModel(DataType.ISPELL_ConstructBloodWell, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Construct Blood Well", Description = "Creates a rootway generating structure that heals nearby allied units, and transfers it's blood to nearby allied units." }) .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityProductionModel { Pyre = 25, Cooldown = 21, BuildTime = 3 }) .AddPart(new EntityVitalityModel { Health = 400, Energy = 100, DefenseLayer = 50, Armor = ArmorType.Heavy, IsStructure = true }) .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_RestoreLifeblood }) .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Transfusion }) .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Rootway }) }, // Atzlan { DataType.ISPELL_ProphetOfTheRoots, new EntityModel(DataType.ISPELL_ProphetOfTheRoots, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Prophet Of The Roots", Description = "Moves Atzlan to target Root Bud. Blesses the Root Bud to give units nearby more overgrowth Atzlan heals nearby units." }) .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityProductionModel { Pyre = 25, Cooldown = 3 }) .AddPart(new EntityVitalityModel { Health = 25, DefenseLayer = 50, Armor = ArmorType.Heavy, IsStructure = true }) }, { DataType.ISPELL_WallOfRoots, new EntityModel(DataType.ISPELL_WallOfRoots, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Wall of Roots", Description = """ Spawn a Wall of Roots that blocks ground pathing.
Click and drag to "draw" the wall. Wall takes damage over time when it's off rootway. """ }) .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityProductionModel { Pyre = 50, Cooldown = 10 }) .AddPart(new EntityVitalityModel { Health = 25, DefenseLayer = 50, Armor = ArmorType.Heavy, IsStructure = true }) }, { DataType.ISPELL_SummonDeepWyrm, new EntityModel(DataType.ISPELL_SummonDeepWyrm, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Summon Deep Wyrm", Description = """ The Deep Wyrm roams in the area and attacks any ground enemy unit entering the rootway.
Spawns rootway on summon. The Deep Wyrm is invulnerable and uncontrollable. """ }) .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityProductionModel { Pyre = 150, Cooldown = 55 }) .AddPart(new EntityVitalityModel { Health = 25, DefenseLayer = 50, Armor = ArmorType.Heavy, IsStructure = true }) }, { DataType.ISPELL_SummonRootBud, new EntityModel(DataType.ISPELL_SummonRootBud, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Summon Root Bud", Description = """ Generates Rootway
Must be placed on Rootway and in range of another Root Bud or Stronghold """ }) .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityProductionModel { Cooldown = 25 }) .AddPart(new EntityVitalityModel { Health = 25, DefenseLayer = 50, Armor = ArmorType.Heavy, IsStructure = true }) }, // Mala { DataType.ISPELL_RedHarvest, new EntityModel(DataType.ISPELL_RedHarvest, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Red Harvest", Description = """ Target a location to summon Mala's Specter.
Nearby units make Quitl and give Sacral Blood on-death. """ }) .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "V" }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Mala }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityProductionModel { Pyre = 75, Cooldown = 90 }) }, { DataType.ISPELL_ProphetsFavor, new EntityModel(DataType.ISPELL_ProphetsFavor, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Prophet's Favor", Description = """ Target an area. Permanently empower units.
Empowered units get more HP and damage. Does not stack.
Costs Sacral Blood. Get Sacral Blood from Mala's other Powers and Vanguard. """ }) .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Mala }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityProductionModel { Cooldown = 5 }) }, { DataType.ISPELL_RainOfBlood, new EntityModel(DataType.ISPELL_RainOfBlood, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "Rain of Blood", Description = "Rains blood from the sky for 30 seconds. Massively increases global life regeneration for allied troops. Allies anywhere also have significantly increased blood regeneration." }) .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Mala }) .AddPart(new EntityProductionModel { Pyre = 150, Cooldown = 30 }) }, // Xol { DataType.ISPELL_ProphetOfTheHunt, new EntityModel(DataType.ISPELL_ProphetOfTheHunt, ImmortalSpellType.Combat) .AddPart(new EntityInfoModel { Name = "Prophet Of The Hunt", Description = """ Target a location to summon Xol. Get XP by assiting in kills. Level up to become more powerful. """, Notes = " - Summons Xol (stealthed) after a 1 second delay.
- Xol has 225 Life, 75 Shield, 410 Move speed, 70 Radius.
- Xol has a weapon: 28 Damage, 1s Cooldown, 7 Range, Ground and Air.
- Every 4 attacks, the next attack will deal 22 bonus damage.
" }) .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol }) .AddPart(new EntityProductionModel { Cooldown = 50, Pyre = 50 }) }, { DataType.ISPELL_HuntingGrounds, new EntityModel(DataType.ISPELL_HuntingGrounds, ImmortalSpellType.Combat) .AddPart(new EntityInfoModel { Name = "Hunting Grounds", Description = """ Target an area. Friendly units there become Hidden. After becoming Hidden, friendly units get more movement speed, attack speed, and damage on their first attack. Hunting Grounds disappears 5 seconds after a unit inside attacks. """, Notes = " - After a 10 second delay, creates a large ambush area which lasts until after an ambush is sprung.
- Units in the Hunting Ground become stealth.
- Stealth units will deal double damage on the first attack and spring the ambush.
- The Hunting Ground will disappear 5 seconds after an ambush is sprung.
- Units can only get the bonus once." }) .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol }) .AddPart(new EntityProductionModel { Cooldown = 10, Pyre = 25 }) }, { DataType.ISPELL_TheGreatHunt, new EntityModel(DataType.ISPELL_TheGreatHunt, EntityType.Pyre_Spell) .AddPart(new EntityInfoModel { Name = "The Great Hunt", Description = """ Activate to reduce enemy vision range and give friendly units movement speed. Affects all units. Friendly units get attack speed on-kill """, Notes = " - Reduces enemy vision to 6 range (used to be 3).
- After a 3 second delay, the hunt begins. The hunt lasts 20 seconds.
- Summons Xol (moveable) to lead the hunt.
- Units gain a 70% decaying move speed bonus for 6 seconds.
- While on the hunt killing an enemy will cause a frenzy giving the killer double attack speed for 7 seconds
- Adds duration timer to Xol" }) .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol }) .AddPart(new EntityProductionModel { Pyre = 175, Cooldown = 50 }) } }; } }