"""
spawningtool.coop_constants
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Co-op uses Blizzard time like HotS (16 FPS), so it's easier to base the data off of that.

Co-op also uses the LotV launch chronoboost that stays continuously on one building
"""

from spawningtool.hots_constants import *

BO_EXCLUDED = BO_EXCLUDED.copy()

BO_EXCLUDED.update([
    'Scarab',
    # Raynor
    'HyperionAdvancedPointDefenseDrone',
    'HyperionVoidCoop',  # summoned
    'DuskWing',  # summoned
    'SpiderMine',
    # Kerrigan
    'KerriganReviveCocoon',
    'KerriganVoidCoopEconDrop1',
    'KerriganVoidCoopEconDrop2',
    'KerriganVoidCoopEconDrop3',
    'KerriganVoidCoopEconDrop4',
    'KerriganVoidCoopEconDrop5',
    'KerriganVoidCoopEconDropLT1',
    'NydusNetworkAlly',
    'NydusCanalAlly',
    'GreaterNydusWormAlly',
    'BroodLordCocoon',
    # Artanis
    'SOAPylonPowerAllyUnit',
    'SOAPylonPowerUnit',
    # Swann
    'VoidCoopARES',  # Calldown
    # Zagara
    'ZagaraReviveCocoon',
    'HunterKillerBurrowed',  # from Spawn Hunter Killers ability
    'HotSSplitterlingBig',  # Splitter probably from auto-spawn
    'HotSSplitterlingMedium',  # Splitter Baneling Spawn
    # Vorazun
    'VorazunShadowGuard',  # calldown
    'OracleStasisTrap',  # Oracle - Stasis Ward
    # Karax
    'CarrierRepairDrone',
    'SOAThermalLanceTargeter',
    'SOAPurifierBeamUnit',
    # Abathur
    'BiomassPickup',
    'ToxicNest',
    'LocustFlying',
    'BrutaliskPlacement',  # Deep Tunnel
    'AbathurSymbioteBrutalisk',  # paired with building Brutalisk
    'AbathurSymbioteLeviathan',  # paired with building Leviathan
    'ImpalerAbathurPlacement',  # Deep Tunnel for Swarm Hosts
    'ParasiticBombDummy',

    # Alarak
    'AlarakReviveBeacon',
    'VoidRayTaldarim',  # Destroyers that spawn with the Mothership
    'AlarakSupplicantWarpTrainDummy',  # actual supplicants show up as well
    'AlarakSupplicantWarpTrainCreator',

    # Nova
    'NovaBoombot',
    'NovaCoopDecoy',
    'NovaReviveBeacon',
    'SpiderMineBurrowed',
    'HealingDrone',
    'Marine_BlackOps',
    'Ghost_BlackOps',
    'GhostFemale_BlackOps',
    'Liberator_BlackOps',
    'Raven_BlackOps',
    'Goliath_BlackOps',
    'SiegeTank_BlackOps',
    'HellbatBlackOps',
    'Marauder_BlackOps',
    'Banshee_BlackOps',
    'NovaGriffinBombingRunStrafer',

    # Stukov
    # More accurate to track when cocoons started
    'SISCV',
    'SIOverlord',
    'SICocoonInfestedCivilian',
    'SIInfestedTrooper',
    'SIInfestedCivilian',
    'InfestedCivilianPlaceholder',
    'StukovInfestBroodling',
    'SIInfestedMarine',
    'StukovInfestedDiamondBack',
    'StukovInfestedSiegeTankUprooted',
    'StukovInfestedSiegeTankDeepTunnelPlacementUnit',
    'SILiberator',
    'StukovInfestedBanshee',
    'SIQueen',
    'StukovApocalisk',  # Calldown
    'SIVolatileInfested',  # not sure what this is but couldn't see it in-game
    'StukovAleksander',  # Calldown
    'ALEKSANDERCRASH_PLACEHOLDER',  # Calldown
    'SNARE_PLACEHOLDER',

    # Fenix
    # Fenix Hero Units
    'FenixCoop',
    'FenixDragoon',
    'FenixArbiter',
    # Purifier Conclave
    'FenixAdeptShade',
    'FenixTalisAdeptPhaseShift',
    'FenixChampionTaldarinImmortal',
    'FenixChampionWarbringerColossus',
    'FenixClolarionInterceptor',
    'FenixClolarionBomber',

    # Dehaka
    'EssencePickup',
    'DehakaCoopReviveCocoonFootPrint',
    'DehakaLocust',
    'LocustMPPrecursor',
    'DehakaNydusDestroyerTimedNoFood',
    'DehakaPlacement',
    'NydusDestroyerDeepTunnelPlacement',
    'GreaterNydusDestroyerDeepTunnelPlacement',
    'DehakaCreeperFlying',
    # Calldowns
    'DehakaGlevig',
    'DehakaGlevigDeepTunnelPlacement',
    'CoopDehakaGlevigEggHydralisk',
    'CoopDehakaGlevigEggRoach',
    'CoopDehakaGlevigEggZergling',
    'DehakaMurvar',
    'DehakaDakrun',
    # using cocoons instead
    'DehakaDrone',
    'DehakaZerglingLevel2',
    'DehakaRoachLevel2',
    'DehakaHydraliskLevel2',
    'DehakaSwarmHost',
    'DehakaUltraliskLevel2',
    'DehakaUltraliskLevel3',
    'DehakaPrimalSwarmHost',

    # Han and Horner
    'HHScrapPickup',
    'HHMagneticMine_SpawnerUnit',
    'HHMagneticMinePrep',
    'HHD8SingleCluster',
    'HHD8ClusterBomb',
    'HHD8CenterCluster',
    'HHD8CenterClusterUpgrade',
    'HHWraith',
    'HHVikingFighter',
    'HHRaven',
    'HHBattlecruiser',
    'HHBomber',  # calldown
    'HHMercenarySpaceStation',
    'HHGriffon',
    'HornerAirFleetTargeter',
    'HornerAirFleetStrafer',

    # Tychus
    'TychusResearchCenterUnlocked',
    'TychusMedicTransportUnit',
    'TychusWarhoundAutoTurret',
    'TychusOdinPrecursor',
    'TychusOdin',
    'TychusMarauderHealingWard',

    # Zeratul
    'ZeratulCoopReviveBeacon',
    'AutomatedAssimilatorZeratul',  # ignore because they are built automatically
    'ProphecyArtifactHintUnit',
    'ZeratulTransportVoidSeeker',
    'ZeratulArtifactPickup2',
    'ZeratulSummonVoidRay',
    'ZeratulDarkArchon',
    'ZeratulDisruptorPhased',
    'ZeratulArtifactTier3',
    'ZeratulArtifactPickup3',
    'ZeratulXelNagaConstruct',
    'ZeratulSuppressionCrystal',
    'ZeratulSummonZealot',
    'ZeratulXelNagaConstructCyan',
    'ZeratulKhaydarinMonolith',
    'ZeratulStalkerGhost',
    'ZeratulKhaydarinMonolithProjection',
    'ZeratulPhotonCannonProjection',
    'ZeratulXelNagaChargedCrystalCyan',

    # Stetmann
    'LarvaStetmann',
    'PowerTowerStetmann',  # Stetellite
    'RoachStetmannEgg',  # Spawned from Infestors
    'BroodlingEscortStetmann',
    'BroodlingStetmann',
    'RavagerStetmannEgg',
    'InterceptorStetmann',
    'LurkerStetmannBurrowed',

    # Mengsk
    'BunkerDepotMengskDrop',  # target for the actual Bunker Drop
    'NukeMengsk',  # created automatically
    # drops from troopers
    'TrooperMengskWeaponImprovedPickup',
    'TrooperMengskWeaponFlamethrowerPickup',
    'TrooperMengskWeaponAAPickup',
    # zerg swarm summon
    'ZerglingMengsk',
    'HydraliskMengsk',

])

BO_CHANGED_EXCLUDED = BO_CHANGED_EXCLUDED.copy()

BO_CHANGED_EXCLUDED.update([
    # speculative
    'HHWidowMine',
    'HHVikingAssault',
    'HHVikingFighter',
    'HHViking',
    'HotsRaptor',
    'HotSSwarmling',
    'HHReaper',

])



BO_UPGRADES_EXCLUDED = BO_UPGRADES_EXCLUDED.copy()

BO_UPGRADES_EXCLUDED.update([
    'SprayTerran',
    'SprayProtoss',
    'SprayZerg',

    # Co-op
    'GameTimeGreaterthan5Seconds',
    'NydusNetworkCoopAllyLeft',

    # Vorazun
    'MasteryVorazunTimeStopHasteModifyPlayer',

    # Dehaka
    'DehakaCoopStage2',
    'DehakaColossusLegs',
    'DehakaCoopStage3',
    'DehakaAirAttackUpgrade',

    # Fenix
    'FenixNetworkedSuperiorityZealot',
    'FenixNetworkedSuperiorityAdept',
    'FenixNetworkedSuperiorityImmortal',
    'FenixNetworkedSuperiorityColossus',
    'FenixNetworkedSuperiorityScout',
    'FenixNetworkedSuperiorityCarrier',

    # Tychus
    'TychusACOwned',
    'TychusReaperOwned',
    'TychusWarhoundOwned',
    'TychusFirebatOwned',
    'TychusHERCOwned',
    'TychusMarauderOwned',
    'TychusGhostOwned',
    'TychusSpectreOwned',
    'TychusMedicOwned',
    'TychusSquadAttackSpeedWithMastery',
    'TychusSquadHealthMastery',
    'TychusHeroCount',
    'TychusHeroMaxed',  # not sure what this is, but with subsequent heros

    # Zeratul
    'ZeratulArtifactTier1',
    'ZeratulTopBarZealotSquad',
    'ZeratulTopBarVoidRaySquad',
    'ZeratulWeaponsLevel1',
    'ZeratulArmorsLevel1',
    'ZeratulShieldsLevel1',
    'ZeratulArtifactTier1_CyberneticsCore',
    'ZeratulArtifactTier1_DarkShine',
    'ZeratulArtifactTier1_RoboticsBay',
    'ZeratulArtifactTier2',
    'ZeratulTopBarZealotSquad',
    'ZeratulTopBarVoidRaySquad',
    'ZeratulWeaponsLevel2',
    'ZeratulArmorsLevel2',
    'ZeratulShieldsLevel2',
    'ZeratulArtifactTier2_DarkShine',
    'ZeratulArtifactUpgradeTier0A',
    'ZeratulArtifactUpgradeTier0B',
    'ZeratulArtifactUpgradeTier0C',
    'ZeratulArtifactUpgradeTier1A',
    'ZeratulArtifactUpgradeTier1B',
    'ZeratulArtifactUpgradeTier1C',
    'ZeratulArtifactUpgradeTier2A',
    'ZeratulArtifactUpgradeTier2B',
    'ZeratulArtifactUpgradeTier2C',
    'ZeratulArtifactUpgradeTier3A',
    'ZeratulArtifactUpgradeTier3B',
    'ZeratulArtifactUpgradeTier3C',
    'ZeratulArtifactTier1ZeratulTalentUpgrade',
    'ZeratulArtifactTier2ZeratulTalentUpgrade',
    'ZeratulArtifactTier2_CyberneticsCore',
    'ZeratulArtifactTier2_RoboticsBay',
    'ZeratulArtifactTier3',
    'ZeratulWeaponsLevel3',
    'ZeratulArmorsLevel3',
    'ZeratulShieldsLevel3',
    'ZeratulArtifactTier3ZeratulTalentUpgrade',
    'VoidRayPrismaticRange',
    'ZeratulArtifactTier3_CyberneticsCore',
    'ZeratulArtifactTier3_DarkShine',
    'ZeratulArtifactTier3_RoboticsBay',
    'ProphecyArtifactsDiscovered',

    # Stetmann
    'PowerFieldEnergyRegeneration',
    'PowerFieldHPRegeneration',
    'PowerFieldMovementSpeed',
    'MasteryStetmannStetzoneBonusesMovementSpeed',
    'MasteryStetmannStetzoneBonusesHPRegeneration',
    'MasteryStetmannStetzoneBonusesEnergyRegeneration',
    'DeployPowerTowerTechLevel',  # not sure what this is
    'PowerFieldSuperGaryStetmann',  # Gary-zone

    # Mengsk
    'ZergMengskCalldownLevel',
])

NEW_BUILD_DATA = {
    'Lair': {
        'build_time': 60,
        'built_from': ['Hatchery'],
        'display_name': 'Lair',
        'race': 'Zerg',
        'type': 'Building',
        'is_morph': True,
    },
    'Hive': {
        'build_time': 60,
        'built_from': ['Lair'],
        'display_name': 'Hive',
        'race': 'Zerg',
        'type': 'Building',
        'is_morph': True,
    },
    # shared across at least Kerrigan and Zagara
    'overlordspeed': {
        'build_time': 60,
        'built_from': ['Hatchery', 'Lair', 'Hive'],
        'display_name': 'Pneumatized Carapace',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'overlordtransport': {
        'build_time': 60,
        'built_from': ['Hatchery', 'Lair', 'Hive'],
        'display_name': 'Ventral Sacs',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'zerglingmovementspeed': {
        'build_time': 60,
        'built_from': ['SpawningPool'],
        'display_name': 'Metabolic Boost',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'HotSZerglingHealth': {
        'build_time': 60,
        'built_from': ['SpawningPool'],
        'display_name': 'Hardened Carapace',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'zerglingattackspeed': {
        'build_time': 60,
        'built_from': ['SpawningPool'],
        'display_name': 'Adrenal Overload',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'ZerglingArmorShred': {
        'build_time': 90,
        'built_from': ['SpawningPool'],
        'display_name': 'Shredding Claws',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'QueenCoop': {
        'build_time': 50,
        'built_from': ['Hatchery', 'Lair', 'Hive'],
        'display_name': 'Queen',
        'race': 'Zerg',
        'type': 'Unit',
        'is_morph': False,
    },
    'VoidCoopHeroicFortitude': {
        'build_time': 60,
        'built_from': ['EvolutionChamber'],
        'display_name': 'Heroic Fortitude',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'ChitinousPlating': {
        'build_time': 60,
        'built_from': ['UltraliskCavern'],
        'display_name': 'Chitinous Plating',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'HotSUltraliskBurrowCharge': {
        'build_time': 60,
        'built_from': ['UltraliskCavern'],
        'display_name': 'Burrow Charge',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'HotSTissueAssimilation': {
        'build_time': 60,
        'built_from': ['UltraliskCavern'],
        'display_name': 'Tissue Assimilation',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    # Kerrigan and Abathur
    'HotSRapidRegeneration': {
        'build_time': 60,
        'built_from': ['Spire', 'GreaterSpire'],
        'display_name': 'Rapid Regeneration',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'MutaliskSunderingGlave': {
        'build_time': 120,
        'built_from': ['Spire', 'GreaterSpire',],
        'display_name': 'Sundering Glave',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'HotSViciousGlaive': {
        'build_time': 90,
        'built_from': ['Spire', 'GreaterSpire'],
        'display_name': 'Vicious Glave',
        'race': 'Zerg',
        'type': 'Upgrade',
        'is_morph': False,
    },
    # Artanis and Karax
    'AutomatedAssimilator': {
        'build_time': 0,
        'built_from': [],
        'display_name': 'Assimilator',
        'race': 'Protoss',
        'type': 'Building',
        'is_morph': False,
    },
    'WarpGateResearch': {
        'build_time': 60,
        'built_from': ['CyberneticsCore'],
        'display_name': 'Warp Gate',
        'race': 'Protoss',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'ImmortalAiur': {
        'build_time': 55,
        'built_from': ['RoboticsFacility'],
        'display_name': 'Immortal',
        'race': 'Protoss',
        'type': 'Unit',
        'is_morph': False,
    },
    'BlinkTech': {
        'build_time': 60,
        'built_from': ['TwilightCouncil'],
        'display_name': 'Blink',
        'race': 'Protoss',
        'type': 'Upgrade',
        'is_morph': False,
    },
    # Shared by at least Fenix and Karax
    'Charge': {
        'build_time': 60,
        'built_from': ['TwilightCouncil'],
        'display_name': 'Charge',
        'race': 'Protoss',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'ObserverGraviticBooster': {
        'build_time': 60,
        'built_from': ['RoboticsBay'],
        'display_name': 'Gravitic Boosters',
        'race': 'Protoss',
        'race': 'Protoss',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'ExtendedThermalLance': {
        'build_time': 90,
        'built_from': ['RoboticsBay'],
        'display_name': 'Extended Thermal Lance',
        'race': 'Protoss',
        'type': 'Upgrade',
        'is_morph': False,
    },
    # at least Nova
    'HighCapacityBarrels': {
        'build_time': 60,
        'built_from': ['TechLab'],
        'display_name': 'Infernal Pre-Igniter',
        'race': 'Terran',
        'type': 'Upgrade',
        'is_morph': False,
    },

    # Nova and Swann
    'BarracksTechReactor': {
        'build_time': 0,
        'built_from': [],
        'display_name': 'Barracks Tech Reactor',
        'race': 'Terran',
        'type': 'Building',
        'is_morph': False,
    },
    'FactoryTechReactor': {
        'build_time': 0,
        'built_from': [],
        'display_name': 'Factory Tech Reactor',
        'race': 'Terran',
        'type': 'Building',
        'is_morph': False,
    },
    'StarportTechReactor': {
        'build_time': 0,
        'built_from': [],
        'display_name': 'Starport Tech Reactor',
        'race': 'Terran',
        'type': 'Building',
        'is_morph': False,
    },
    'AutomatedRefinery': {
        'build_time': 0,
        'built_from': [],
        'display_name': 'Refinery',
        'race': 'Terran',
        'type': 'Building',
        'is_morph': False,
    },
    'AresClassWeaponsSystem': {
        'build_time': 60,
        'built_from': ['TechLab'],
        'display_name': 'Ares-Class Targeting System',
        'race': 'Terran',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'HiSecAutoTracking': {
        'build_time': 60,
        'built_from': ['Engineering'],
        'display_name': 'Hi-Sec Auto Tracking',
        'race': 'Terran',
        'type': 'Upgrade',
        'is_morph': False,
    },
    'TerranBuildingArmor': {
        'build_time': 60,
        'built_from': ['Engineering'],
        'display_name': 'Structure Armor',
        'race': 'Terran',
        'type': 'Upgrade',
        'is_morph': False,
    },
}

for value in NEW_BUILD_DATA.values():
    value['build_time'] *= FRAMES_PER_SECOND

BUILD_DATA = BUILD_DATA.copy()
BUILD_DATA.update(NEW_BUILD_DATA)


COMMANDER_BUILD_DATA = {

    'Raynor': {
        # Units
        # Rapid Recruitment halves all build times
        'Marine': {
            'build_time': 13,
            'built_from': ['Barracks'],
            'display_name': 'Marine',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Marauder': {
            'build_time': 15,
            'built_from': ['Barracks'],
            'display_name': 'Marauder',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
            },
        'Firebat': {
            'build_time': 15,
            'built_from': ['Barracks'],
            'display_name': 'Firebat',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Medic': {
            'build_time': 13,
            'built_from': ['Barracks'],
            'display_name': 'Medic',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Vulture': {
            'build_time': 13,
            'built_from': ['Factory'],
            'display_name': 'Vulture',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'SiegeTank': {
            'build_time': 23,
            'built_from': ['Factory'],
            'display_name': 'Siege Tank',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'VikingFighter': {
            'build_time': 21,
            'built_from': ['Starport'],
            'display_name': 'Viking',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Banshee': {
            'build_time': 30,
            'built_from': ['Starport'],
            'display_name': 'Banshee',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Battlecruiser': {
            'build_time': 45,
            'built_from': ['Starport'],
            'display_name': 'Battlecruiser',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },

        # Buildings
        'SupplyDepotDrop': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Supply Depot',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },

        # Upgrades
        'StabilizerMedPacks': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'Stabilizer Medpacks',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FirebatJuggernautPlating': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'Juggernaut Plating',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'BearclawNozzles': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'Incinerator Gauntlets',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'RaynorTalentedTerranInfantryArmorLevel1': {
            'build_time': 160,
            'built_from': ['EngineeringBay'],
            'display_name': 'Terran Infantry Armor Level 1',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'RaynorTalentedTerranInfantryArmorLevel2': {
            'build_time': 190,
            'built_from': ['EngineeringBay'],
            'display_name': 'Terran Infantry Armor Level 2',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'RaynorTalentedTerranInfantryArmorLevel3': {
            'build_time': 220,
            'built_from': ['EngineeringBay'],
            'display_name': 'Terran Infantry Armor Level 3',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'NanoConstructor': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'Replenishable Magazine',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'CerberusMines': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'Cerberus Mines',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AresClassWeaponsSystemViking': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'Phobos Weapons System',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'RaynorImprovedSiegeMode': {
            'build_time': 90,
            'built_from': ['TechLab'],
            'display_name': 'Advanced Siege Tech',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'VehicleAfterburners': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'Afterburners',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HALORockets': {
            'build_time': 90,
            'built_from': ['TechLab'],
            'display_name': 'Ripwave Missiles',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SwannCommanderVehicleWeaponRange': {
            'build_time': 120,
            'built_from': ['TechLab'],
            'display_name': 'Advanced Optics',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ClusterWarheads': {
            'build_time': 90,
            'built_from': ['TechLab'],
            'display_name': 'Advanced Optics',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'RaynorTalentedTerranVehicleAndShipPlatingLevel1': {
            'build_time': 160,
            'built_from': ['Armory'],
            'display_name': 'Terran Vehicle And Ship Armor Level 1',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'RaynorTalentedTerranVehicleAndShipPlatingLevel2': {
            'build_time': 190,
            'built_from': ['Armory'],
            'display_name': 'Terran Vehicle And Ship Armor Level 2',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'RaynorTalentedTerranVehicleAndShipPlatingLevel3': {
            'build_time': 220,
            'built_from': ['Armory'],
            'display_name': 'Terran Vehicle And Ship Armor Level 3',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Kerrigan': {
        # Units
        # TODO extra Zerglings in the build order?
        'HotSRaptor': {
            'build_time': 24,
            'built_from': [],
            'display_name': 'Zergling',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'Hydralisk': {
            'build_time': 30,
            'built_from': [],
            'display_name': 'Hydralisk',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
            },
        'HydraliskLurker': {
            'build_time': 24,
            'built_from': [],
            'display_name': 'Hydralisk',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'Lurker': {
            'build_time': 15,
            'built_from': ['Hydralisk'],
            'display_name': 'Lurker',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },
        'MutaliskBroodlord': {  # Mutalisk (Brood Lord strain)
            'build_time': 33,
            'built_from': [],
            'display_name': 'Mutalisk',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'BroodLord': {
            'build_time': 15,
            'built_from': ['Mutalisk'],
            'display_name': 'Brood Lord',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },
        'HotSTorrasque': {
            'build_time': 55,
            'built_from': [],
            'display_name': 'Ultralisk',  # Torrasque strain
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },

        # Buildings
        'GreaterNydusWorm': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Omega Worm',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },

        # Upgrades
        'K5ChainLightning': {
            'build_time': 90,
            'built_from': ['EvolutionChamber'],
            'display_name': 'Chain Reaction',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'K5Cooldowns': {
            'build_time': 120,
            'built_from': ['EvolutionChamber'],
            'display_name': 'Ability Efficiency',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'hydraliskspeed': {
            'build_time': 60,
            'built_from': ['HydraliskDen'],
            'display_name': 'Muscular Augments',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HotSHydraliskHealth': {
            'build_time': 90,
            'built_from': ['HydraliskDen'],
            'display_name': 'Ancillary Carapace',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HydraliskFrenzy': {
            'build_time': 120,
            'built_from': ['HydraliskDen'],
            'display_name': 'Frenzy',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SeismicSpines': {
            'build_time': 120,
            'built_from': ['HydraliskDen'],
            'display_name': 'Seismic Spines',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'KerriganVoidCoopBroodlordSpeed': {
            'build_time': 60,
            'built_from': ['Spire', 'GreaterSpire',],
            'display_name': 'Porous Cartilage',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Artanis': {
        # Units
        'ZealotAiur': {
            'build_time': 38,
            'built_from': ['Gateway', 'WarpGate'],  # warpgate is necessary because of changing types
            'display_name': 'Zealot',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'Dragoon': {
            'build_time': 42,
            'built_from': ['Gateway', 'WarpGate'],  # warpgate is necessary because of changing types
            'display_name': 'Dragoon',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'Reaver': {
            'build_time': 75,
            'built_from': ['RoboticsFacility', 'RoboticsFacilityWarp'],
            'display_name': 'Reaver',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'PhoenixAiur': {
            'build_time': 35,
            'built_from': ['Stargate'],
            'display_name': 'Phoenix',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },

        # Buildings
        'RoboticsFacilityWarp': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Robotics Facility',
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },
        'StargateWarp': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Stargate',
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },

        # Upgrades
        'ZealotResearchWhirlwind': {
            'build_time': 90,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Whirlwind',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StalkerResearchDragoonRange': {
            'build_time': 60,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Singularity Charge',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StalkerResearchDragoonHealth': {
            'build_time': 90,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Trillic Compresion Mesh',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ImmortalResearchBarrierAdvanced': {
            'build_time': 60,
            'built_from': ['RoboticsBay'],
            'display_name': 'Improved Barrier',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ReaverIncreasedScarabCount': {
            'build_time': 60,
            'built_from': ['RoboticsBay'],
            'display_name': 'Scarab Housing',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ReaverIncreasedScarabSplashRadius': {
            'build_time': 90,
            'built_from': ['RoboticsBay'],
            'display_name': 'Solarite Payload',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'PsiStormTech': {
            'build_time': 60,
            'built_from': ['TemplarArchives'],
            'display_name': 'Psionic Storm',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HighTemplarKhaydarinAmulet': {
            'build_time': 60,
            'built_from': ['TemplarArchives'],
            'display_name': 'Khaydarin Amulet',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HealingPsionicStorm': {
            'build_time': 90,
            'built_from': ['TemplarArchives'],
            'display_name': 'Plasma Surge',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'VoidPhoenixDoubleGraviton': {
            'build_time': 90,
            'built_from': ['FleetBeacon'],
            'display_name': 'Double Graviton Beam',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TempestDisintegration': {
            'build_time': 90,
            'built_from': ['FleetBeacon'],
            'display_name': 'Disintegration',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Swann': {
        # Units
        'SCV': {
            'build_time': 14,
            'built_from': ['CommandCenter'],
            'display_name': 'SCV',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Hellbat': {
            'build_time': 24,
            'built_from': ['Factory'],
            'display_name': 'Hellbat',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Goliath': {
            'build_time': 32,
            'built_from': ['Factory'],
            'display_name': 'Goliath',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'SiegeTank': {
            'build_time': 36,
            'built_from': ['Factory'],
            'display_name': 'Siege Tank',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Cyclone': {
            'build_time': 36,
            'built_from': ['Factory'],
            'display_name': 'Cyclone',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Thor': {
            'build_time': 48,
            'built_from': ['Factory'],
            'display_name': 'Thor',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Hellion': {
            'build_time': 24,
            'built_from': ['Factory'],
            'display_name': 'Hellion',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Wraith': {
            'build_time': 40,
            'built_from': ['Starport'],
            'display_name': 'Wraith',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Hercules': {
            'build_time': 32,
            'built_from': ['Starport'],
            'display_name': 'Hercules',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'ScienceVessel': {
            'build_time': 48,
            'built_from': ['Starport'],
            'display_name': 'Science Vessel',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },

        # Buildings
        'KelMorianMissileTurret': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Spinning Dizzy',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'KelMorianGrenadeTurret': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Devastation Turret',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'PerditionTurret': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Perdition Turret',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },

        # Upgrades
        'FireSuppressionSystems': {
            'build_time': 60,
            'built_from': ['EngineeringBay'],
            'display_name': 'Fire-Suppression Systems',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SwannTurretIncreasedAttackSpeed': {
            'build_time': 90,
            'built_from': ['EngineeringBay'],
            'display_name': 'KMC Auto-Loaders',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HellbatHellArmor': {
            'build_time': 60,
            'built_from': ['TechReactor'],
            'display_name': 'Infernal Plating',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MultilockTargetingSystems': {
            'build_time': 90,
            'built_from': ['TechReactor'],
            'display_name': 'Multi-Lock Weapons System',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MaelstromRounds': {
            'build_time': 60,
            'built_from': ['TechReactor'],
            'display_name': 'Maelstrom Rounds',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'CycloneLockOnRangeUpgrade': {
            'build_time': 60,  # reduced ~ April 2018
            'built_from': ['TechReactor'],
            'display_name': 'Targeting Optics',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'CycloneLockOnDamageUpgrade': {
            'build_time': 90,
            'built_from': ['TechReactor'],
            'display_name': 'Mag-Field Accelerator',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        '330mmBarrageCannons': {
            'build_time': 60,
            'built_from': ['TechReactor'],
            'display_name': '330mm Barrage Cannon',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'WraithImprovedBurstLaser': {
            'build_time': 60,
            'built_from': ['TechReactor'],
            'display_name': 'Pulse Amplifier',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'CloakDistortionField': {
            'build_time': 60,
            'built_from': ['TechReactor'],
            'display_name': 'Displacement Field',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ScienceVesselFreeRepair': {
            'build_time': 60,
            'built_from': ['TechReactor'],
            'display_name': 'Improved Nano-Repair',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ScienceVesselResearchDefensiveMatrix': {
            'build_time': 90,
            'built_from': ['TechReactor'],
            'display_name': 'Defensive Matrix',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'RegenerativeBioSteel': {
            'build_time': 90,
            'built_from': ['Armory'],
            'display_name': 'Regenerative Bio-Steel',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SwannCommanderVehicleWeaponRange': {
            'build_time': 120,
            'built_from': ['Armory'],
            'display_name': 'Advanced Optics',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DrakkenLaserDrillBFG': {
            'build_time': 190,
            'built_from': ['DrakkenLaserDrillCoop'],
            'display_name': 'Upgrade Laser Drill Level 1',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DrakkenLaserDrillNuke': {
            'build_time': 220,
            'built_from': ['DrakkenLaserDrillCoop'],
            'display_name': 'Upgrade Laser Drill Level 2',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Zagara': {
        # Units
        'Drone': {
            'build_time': 26,
            'built_from': [],
            'display_name': 'Drone',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'Zergling': {
            'build_time': 9,
            'built_from': [],
            'display_name': 'Zergling',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'HotSSwarmling': {  # Zergling evolution
            'build_time': 2,
            'built_from': [],
            'display_name': 'Swarmling',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'InfestedAbomination': {
            'build_time': 12,
            'built_from': [],
            'display_name': 'Aberration',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'Scourge': {
            'build_time': 12,
            'built_from': [],
            'display_name': 'Scourge',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'Corruptor': {
            'build_time': 16,
            'built_from': [],
            'display_name': 'Corruptor',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },

        # Buildings
        'BileLauncherZagara': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Bile Launcher',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'ScourgeNest': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Scourge Nest',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },


        # Upgrades
        'BileLauncherIncreasedRange': {
            'build_time': 60,
            'built_from': ['SpawningPool'],
            'display_name': 'Artillery Ducts',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'BileLauncherBombardmentCooldown': {
            'build_time': 90,
            'built_from': ['SpawningPool'],
            'display_name': 'Rapid Bombardment',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ZagaraVoidCoopAttackUpgrade': {
            'build_time': 90,
            'built_from': ['EvolutionChamber'],
            'display_name': 'Medusa Blades',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AberrationArmorAura': {
            'build_time': 90,
            'built_from': ['EvolutionChamber'],
            'display_name': 'Protective Cover',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HotSBanelingCorrosiveBile': {
            'build_time': 90,
            'built_from': ['BanelingNest'],
            'display_name': 'Corrosive Acid',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HotSRupture': {
            'build_time': 90,
            'built_from': ['BanelingNest'],
            'display_name': 'Rupture',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ScourgeGasCostReduction': {
            'build_time': 60,
            'built_from': ['ScourgeNest'],
            'display_name': 'Simplified Genome',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ScourgeSplashDamage': {
            'build_time': 60,
            'built_from': ['ScourgeNest'],
            'display_name': 'Virulent Spores',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Vorazun': {
        # Units
        'ZealotShakuras': {
            'build_time': 38,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Centurion',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'StalkerShakuras': {
            'build_time': 42,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Stalker',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'DarkTemplarShakuras': {
            'build_time': 55,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Dark Templar',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'DarkArchon': {
            'build_time': 55,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Dark Archon',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'CorsairMP': {
            'build_time': 35,
            'built_from': ['Stargate'],
            'display_name': 'Corsair',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'VoidRayShakuras': {
            'build_time': 60,
            'built_from': ['Stargate'],
            'display_name': 'Void Ray',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },

        # Buildings
        'DarkPylon': {
            'build_time': 0,  # actualy a calldown
            'built_from': [],
            'display_name': 'Dark Pylon',
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },

        # Upgrades
        'ZealotResearchShadowCharge': {
            'build_time': 60,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Shadow Charge',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ZealotResearchShadowStun': {
            'build_time': 90,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Darkcoil',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StalkerResearchBlinkShieldRestore': {
            'build_time': 90,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Phase Reactor',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'CorsairDisruptionWeb': {
            'build_time': 60,
            'built_from': ['FleetBeacon'],
            'display_name': 'Disruption Web',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'CorsairPermanentCloak': {
            'build_time': 90,
            'built_from': ['FleetBeacon'],
            'display_name': 'Stealth Drive',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'VoidRayPrismaticRange': {
            'build_time': 90,
            'built_from': ['FleetBeacon'],
            'display_name': 'Prismatic Range',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'OracleStasisWardUpgrade': {
            'build_time': 90,
            'built_from': ['FleetBeacon'],
            'display_name': 'Stasis Calibration',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DarkTemplarResearchShadowFury': {
            'build_time': 120,
            'built_from': ['DarkShrine'],
            'display_name': 'Shadow Fury',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DarkTemplarResearchShadowDash': {
            'build_time': 90,
            'built_from': ['DarkShrine'],
            'display_name': 'Dark Templar Blink',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DarkTemplarResearchVoidStasis': {
            'build_time': 120,
            'built_from': ['DarkShrine'],
            'display_name': 'Void Stasis',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DarkArchonFullStartingEnergy': {
            'build_time': 60,
            'built_from': ['DarkShrine'],
            'display_name': 'Argus Crystal',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DarkArchonMindControl': {
            'build_time': 90,
            'built_from': ['DarkShrine'],
            'display_name': 'Mind Control',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Karax': {
        # Units
        'ZealotPurifier': {
            'build_time': 38,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Sentinel',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
            },
        'SentryPurifier': {
            'build_time': 37,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Energizer',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
            },
        'ColossusPurifier': {
            'build_time': 75,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Immortal',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
            },
        'PhoenixPurifier': {
            'build_time': 35,
            'built_from': ['Stargate'],
            'display_name': 'Mirage',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
            },
        'CarrierAiur': {
            'build_time': 120,
            'built_from': ['Stargate'],
            'display_name': 'Carrier',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },

        # Buildings
        'KhaydarinMonolith': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Khaydarin Monolith',
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },

        # Upgrades
        'SolarEfficiencyLevel1': {
            'build_time': 90,
            'built_from': ['SolarForge'],
            'display_name': 'Solar Efficiency Level 1',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SolarEfficiencyLevel2': {
            'build_time': 120,
            'built_from': ['SolarForge'],
            'display_name': 'Solar Efficiency Level 2',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SolarEfficiencyLevel3': {
            'build_time': 180,
            'built_from': ['SolarForge'],
            'display_name': 'Solar Efficiency Level 3',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SOARepairBeamExtraTarget': {
            'build_time': 90,
            'built_from': ['SolarForge'],
            'display_name': 'Advanced Repair Systems',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SOAOrbitalStrikeUpgrade': {
            'build_time': 120,
            'built_from': ['SolarForge'],
            'display_name': 'Phase Detonation',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SOASolarLanceUpgrade': {
            'build_time': 120,
            'built_from': ['SolarForge'],
            'display_name': 'Solar Flare',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'KaraxTurretRange': {
            'build_time': 120,
            'built_from': ['Forge'],
            'display_name': 'Enhanced Targeting',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'KaraxTurretAttackSpeed': {
            'build_time': 120,
            'built_from': ['Forge'],
            'display_name': 'Optimized Ordinance',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ShieldBatteryStructureBarrier': {
            'build_time': 60,
            'built_from': ['Forge'],
            'display_name': 'Fortification Barrier',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ZealotResearchReconstruction': {
            'build_time': 90,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Reconstruction',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'KaraxEnergyRegenUpgrade': {
            'build_time': 90,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Rapid Recharging',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'EnergizerReclamation': {
            'build_time': 120,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Reclamation',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ColossusFireBeam': {
            'build_time': 120,
            'built_from': ['RoboticsBay'],
            'display_name': 'Fire Beam',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ImmortalResearchShadowCannon': {
            'build_time': 120,
            'built_from': ['RoboticsBay'],
            'display_name': 'Shadow Cannon',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'PhoenixRangeUpgrade': {
            'build_time': 60,
            'built_from': ['FleetBeacon'],
            'display_name': 'Anion Pulse-Crystals',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MiragePhaseArmor': {
            'build_time': 90,
            'built_from': ['FleetBeacon'],
            'display_name': 'Phasing Armor',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'CarrierRepairDrones': {
            'build_time': 120,
            'built_from': ['FleetBeacon'],
            'display_name': 'Repair Drones',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Abathur': {
        # Units
        'RoachVile': {
            'build_time': 27,
            'built_from': [],
            'display_name': 'Roach',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'RavagerAbathur': {
            'build_time': 9,
            'built_from': [],
            'display_name': 'Ravager',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },
        'Brutalisk': {  # actually the cocoon morph from roach
            'build_time': 5,
            'built_from': [],
            'display_name': 'Brutalisk',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },
        'HotSLeviathan': {  # actually the cocoon morph from mutalisk
            'build_time': 5,
            'built_from': [],
            'display_name': 'Leviathan',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },
        'GuardianMP': {
            'build_time': 8,
            'built_from': [],
            'display_name': 'Guardian',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },
        'Devourer': {
            'build_time': 15,
            'built_from': [],
            'display_name': 'Devourer',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },

        # Buildings

        # Upgrades
        'AbathurBioMechanicalTransfusion': {
            'build_time': 60,
            'built_from': ['EvolutionChamber'],
            'display_name': 'Bio-Mechanical Transfusion',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AbathurHatcheryDoubleQueue': {
            'build_time': 60,
            'built_from': ['EvolutionChamber'],
            'display_name': 'Incubation Chamber',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HotSRoachDamage': {
            'build_time': 110,
            'built_from': ['RoachWarren'],
            'display_name': 'Hydriodic Bile',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HotSRoachShield': {
            'build_time': 110,
            'built_from': ['RoachWarren'],
            'display_name': 'Adaptive Plating',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'RavagerCorrosiveBileRadiusIncrease': {
            'build_time': 90,
            'built_from': ['RoachWarren'],
            'display_name': 'Bloated Bile Ducts',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'RavagerCorrosiveBileDamageIncrease': {
            'build_time': 120,
            'built_from': ['RoachWarren'],
            'display_name': 'Potent Bile',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'GuardianAttackRangeIncrease': {
            'build_time': 90,
            'built_from': ['Spire', 'GreaterSpire'],
            'display_name': 'Prolonged Dispersion',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DevourerAoEDamage': {
            'build_time': 90,
            'built_from': ['Spire', 'GreaterSpire'],
            'display_name': 'Corrosive Spray',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HotSPressurizedGlands': {
            'build_time': 90,
            'built_from': ['InfestationPit'],
            'display_name': 'Pressurized Glands',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ViperImprovedCastRange': {
            'build_time': 90,
            'built_from': ['InfestationPit'],
            'display_name': 'Virulent Microbes',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AbathurDeepTunnel': {
            'build_time': 120,
            'built_from': ['InfestationPit'],
            'display_name': 'Deep Tunnel',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ViperAbductImprovedStun': {
            'build_time': 60,
            'built_from': ['InfestationPit'],
            'display_name': 'Paralytic Barbs',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Alarak': {
        # Units
        'Supplicant': {
            'build_time': 28,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Supplicant',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'Monitor': {
            'build_time': 37,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Havoc',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'Stalker': {
            'build_time': 37,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Slayer',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'HighTemplarTaldarim': {
            'build_time': 55,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Ascendant',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'ImmortalTaldarim': {
            'build_time': 55,
            'built_from': ['Robotics Facility'],
            'display_name': 'Vanguard',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'WarpPrismTaldarim': {
            'build_time': 50,
            'built_from': ['Robotics Facility'],
            'display_name': 'Warp Prism',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'ColossusTaldarim': {
            'build_time': 75,
            'built_from': ['RoboticsFacility'],
            'display_name': 'Wraithwalker',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'SOAMothershipv4': {
            'build_time': 120,
            'built_from': ['Stargate'],
            'display_name': 'Mothership',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        # Buildings
        'TwilightCouncil': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Death Council',
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },
        'TemplarArchive': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Ascendant Archives',
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },
        # Upgrades
        'AlarakAttackStunUpgrade': {
            'build_time': 90,
            'built_from': ['Forge'],
            'display_name': 'Imposing Presence',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AlarakDestructionWaveDistance': {
            'build_time': 90,
            'built_from': ['Forge'],
            'display_name': 'Telekinesis',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AlarackHavocPermanentCloak': {
            'build_time': 60,
            'built_from': ['CyberneticsCore'],
            'display_name': 'Cloaking Module',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AlarakHavocAbilityRange': {
            'build_time': 90,
            'built_from': ['CyberneticsCore'],
            'display_name': 'Bloodshard Resonance',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AlarakHavocTargetLockBuff': {
            'build_time': 90,
            'built_from': ['CyberneticsCore'],
            'display_name': 'Detect Weakness',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AlarakSupplicantShieldArmor': {
            'build_time': 60,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Blood Shields',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'BlinkTech': {
            'build_time': 60,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Phase Blink',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AlarakSupplicantMaxShields': {
            'build_time': 90,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Soul Augmentation',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AlarakStalkerPhasingArmor': {
            'build_time': 90,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Phasing Armor',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'VanguardArmoredDamage': {
            'build_time': 60,
            'built_from': ['RoboticsBay'],
            'display_name': 'Fusion Mortars',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AlarakVanguardIncreaseSplashArea': {
            'build_time': 60,
            'built_from': ['RoboticsBay'],
            'display_name': 'Matter Dispersion',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AlarakColossusChargedBlastAirAttack': {
            'build_time': 60,
            'built_from': ['RoboticsBay'],
            'display_name': 'Aerial Tracking',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AlarakColossusChargedBlastChargeTime': {
            'build_time': 60,
            'built_from': ['RoboticsBay'],
            'display_name': 'Rapid Power Cycling',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AlarakHighTemplarImprovedSacrifice': {
            'build_time': 60,
            'built_from': ['TemplarArchive'],
            'display_name': 'Power Overwhelming',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'VoidHighTemplarMindBlast': {
            'build_time': 60,
            'built_from': ['TemplarArchive'],
            'display_name': 'Mind Blast',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AlarakHighTemplarPsionicOrbTravelDistance': {
            'build_time': 60,
            'built_from': ['TemplarArchive'],
            'display_name': 'Chaotic Attunement',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Nova': {
        # Units
        'Marine_BlackOpsSpawnerUnit': {
            'build_time': 0,  # calldown
            'built_from': ['Barracks'],
            'display_name': 'Elite Marine',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Marauder_BlackOpsSpawnerUnit': {
            'build_time': 0,  # calldown
            'built_from': ['Barracks'],
            'display_name': 'Hellbat Rangers',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Ghost_BlackOpsSpawnerUnit': {
            'build_time': 0,  # calldown
            'built_from': ['Barracks'],
            'display_name': 'Spec Ops Ghost',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Hellbat_BlackOpsSpawnerUnit': {
            'build_time': 0,  # calldown
            'built_from': ['Factory'],
            'display_name': 'Hellbat Rangers',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Goliath_BlackOpsSpawnerUnit': {
            'build_time': 0,  # calldown
            'built_from': ['Factory'],
            'display_name': 'Strike Goliath',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'SiegeTank_BlackOpsSpawnerUnit': {
            'build_time': 0,  # calldown
            'built_from': ['Factory'],
            'display_name': 'Heavy Siege Tank',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Liberator_BlackOpsSpawnerUnit': {
            'build_time': 0,  # calldown
            'built_from': ['Starport'],
            'display_name': 'Raid Liberator',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Raven_BlackOpsSpawnerUnit': {
            'build_time': 0,  # calldown
            'built_from': ['Starport'],
            'display_name': 'Raven Type-II',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'Banshee_BlackOpsSpawnerUnit': {
            'build_time': 0,  # calldown
            'built_from': ['Starport'],
            'display_name': 'Covert Banshee',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },

        # Nova Special Abilities. not really sure what the types are here
        'NovaDefensiveMatrixDrone': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Defensive Drone',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'NovaGriffinBombingRunTargeter': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Griffin Airstrike',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'NovaGriffinTransportUnit': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Tactical Airlift',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'NovaBuybackUnlock': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Instant Regeneration',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },

        # Buildings
        'NovaACLaserTurret': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Railgun Turret',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'GhostAcademyNova': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Ghost Academy',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        # Upgrades
        'LaserTargetingSystemNova': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'Laser Targeting System',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MarineSuperStim': {
            'build_time': 90,
            'built_from': ['TechLab'],
            'display_name': 'Super Stimpack',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'NovaConcussiveShells': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'Suppression Shells',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MarauderMagrailMunitions': {
            'build_time': 90,
            'built_from': ['TechLab'],
            'display_name': 'Suppression Shells',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'GhostBlackOpsEMP': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'EMP Round',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'GhostBlackOpsTripleTap': {
            'build_time': 90,
            'built_from': ['TechLab'],
            'display_name': 'Triple Tap',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HellbatJumpJetAssault': {
            'build_time': 45,
            'built_from': ['TechLab'],
            'display_name': 'Jump Jet Assault',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'NovaUnitLockdown': {
            'build_time': 90,
            'built_from': ['TechLab'],
            'display_name': 'Lockdown Missiles',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DeploySpiderMines': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'Spider Mines',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SiegeTankSiegeModeProgressiveRangeIncease': {
            'build_time': 90,
            'built_from': ['TechLab'],
            'display_name': 'Graduating Range',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'BansheePermaCloak': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'Advanced Cloaking Field',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'BansheeAirstrike': {
            'build_time': 90,
            'built_from': ['TechLab'],
            'display_name': 'Rocket Barrage',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'LiberatorStructureAttack': {
            'build_time': 60,
            'built_from': ['TechLab'],
            'display_name': 'Raid Artillery',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MultiTaskMAFServosLiberator': {
            'build_time': 90,
            'built_from': ['TechLab'],
            'display_name': 'Smart Servos',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HealingDroneCloakHealBeam': {
            'build_time': 90,
            'built_from': ['TechLab'],
            'display_name': 'Covert Triage',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'RavenSuperScience': {
            'build_time': 90,
            'built_from': ['TechLab'],
            'display_name': 'Enhanced Manufacturing',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'NovaDetector': {
            'build_time': 90,
            'built_from': ['GhostAcademyNova'],
            'display_name': 'Ghost Visor',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'NovaLifeRegen': {
            'build_time': 90,
            'built_from': ['GhostAcademyNova'],
            'display_name': 'Caduceus Reactor',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'NovaSnipeRefund': {
            'build_time': 120,
            'built_from': ['GhostAcademyNova'],
            'display_name': 'Operational Efficiency',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'NovaShotgunBlastRange': {
            'build_time': 120,
            'built_from': ['GhostAcademyNova'],
            'display_name': 'Infernal Projectiles',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Stukov': {
        # Units
        # Track cocoons instead of units for more accurate start times
        'SICocoonInfestedSCV': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested SCV',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'SICocoonInfestedOverlord': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Overlord',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'SICocoonInfestedMarine': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Marine',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'SICocoonInfestedDiamondBack': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Diamondback',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'SICocoonInfestedSiegeTank': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Siege Tank',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'SICocoonInfestedLiberator': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Liberator',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'SICocoonInfestedBanshee': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Banshee',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'SICocoonQueen': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Brood Queen',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },

        # Buildings
        'SICommandCenter': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Command Center',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SICivilianStructure': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Colonist Compound',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SIRefinery': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Refinery',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SIBarracks': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Barracks',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SIBarracksTechLab': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Barracks Tech Lab',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SIEngineeringBay': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Engineering Bay',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SIInfestedBunker': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Bunker',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SIMissileTurret': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Missile Turret',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SIFactory': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Factory',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SIFactoryTechLab': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Factory Tech Lab',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SIStarport': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Starport',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SIStarportTechLab': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Starport Tech Lab',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SIArmory': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infested Armory',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },

        # Upgrades
        'HeavyInfestation': {
            'build_time': 90,
            'built_from': ['SICommandCenter'],
            'display_name': 'Aggressive Incubation',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SIBarracksTrainInfestedCivilianLevel2': {
            'build_time': 120,
            'built_from': ['SICivilianStructure'],
            'display_name': 'Infestation Level 1',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SIBarracksTrainInfestedCivilianLevel3': {
            'build_time': 120,
            'built_from': ['SICivilianStructure'],
            'display_name': 'Infestation Level 2',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SIBarracksTrainInfestedCivilianLevel4': {
            'build_time': 120,
            'built_from': ['SICivilianStructure'],
            'display_name': 'Infestation Level 3',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StukovInfestedInfestedCivilianLeapAttack': {
            'build_time': 60,
            'built_from': ['SICivilianStructure'],
            'display_name': 'Anaerobic Enhancement',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StukovInfestedCivilianSpawnBroodlingOnDeath': {
            'build_time': 90,
            'built_from': ['SICivilianStructure'],
            'display_name': 'Broodling Gestation',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SIMarinePlaguedMunitions': {
            'build_time': 90,
            'built_from': ['SIBarracksTechLab'],
            'display_name': 'Plagued Munitions',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SIMarineTrooperRange': {
            'build_time': 60,
            'built_from': ['SIBarracksTechLab'],
            'display_name': 'Retinal Augmentation',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SIBunkerLifeRegen': {
            'build_time': 60,
            'built_from': ['SIEngineeringBay'],
            'display_name': 'Regenerative Plating',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SIBunkerArmor': {
            'build_time': 60,
            'built_from': ['SIEngineeringBay'],
            'display_name': 'Calcified Armor',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'SIInfantryWeaponsLevel1': {
            'build_time': 160,
            'built_from': ['SIEngineeringBay'],
            'display_name': 'Stukov Infantry Weapons Level 1',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SIInfantryWeaponsLevel2': {
            'build_time': 190,
            'built_from': ['SIEngineeringBay'],
            'display_name': 'Stukov Infantry Weapons Level 2',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SIInfantryWeaponsLevel3': {
            'build_time': 220,
            'built_from': ['SIEngineeringBay'],
            'display_name': 'Stukov Infantry Weapons Level 3',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SIInfantryArmorLevel1': {
            'build_time': 160,
            'built_from': ['SIEngineeringBay'],
            'display_name': 'Stukov Infantry Armor Level 1',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SIInfantryArmorLevel2': {
            'build_time': 190,
            'built_from': ['SIEngineeringBay'],
            'display_name': 'Stukov Infantry Armor Level 2',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SIInfantryArmorLevel3': {
            'build_time': 220,
            'built_from': ['SIEngineeringBay'],
            'display_name': 'Stukov Infantry Armor Level 3',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SIDiamondbackImprovedEnsnare': {
            'build_time': 60,
            'built_from': ['SITechLab'],
            'display_name': 'Saturated Cultures',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'InfestedSiegeTankAmmo': {
            'build_time': 60,
            'built_from': ['SITechLab'],
            'display_name': 'Automated Mitosis',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SIDiamondbackSnailTrail': {
            'build_time': 90,
            'built_from': ['SITechLab'],
            'display_name': 'Caustic Mucus',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'InfestedSiegeTankArmoredDamage': {
            'build_time': 90,
            'built_from': ['SITechLab'],
            'display_name': 'Acidic Enzymes',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SILiberatorImprovedAoeAttack': {
            'build_time': 60,
            'built_from': ['SITechLab'],
            'display_name': 'Viral Contamination',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'LiberatorInfestedBecomeSwarm': {
            'build_time': 60,
            'built_from': ['SITechLab'],
            'display_name': 'Cloud Dispersal',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'StukovInfestedBansheeBurrowRegeneration': {
            'build_time': 60,
            'built_from': ['SITechLab'],
            'display_name': 'Rapid Hibernation',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'StukovInfestedBansheeInfestedLife': {
            'build_time': 60,
            'built_from': ['SITechLab'],
            'display_name': 'Braced Exoskeleton',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SIQueenFungalGrowth': {
            'build_time': 60,
            'built_from': ['SITechLab'],
            'display_name': 'Fungal Growth',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SIQueenEnergy': {
            'build_time': 60,
            'built_from': ['SITechLab'],
            'display_name': 'Enhanced Mitochondria',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SITerranVehicleWeaponsLevel1': {
            'build_time': 160,
            'built_from': ['SIArmory'],
            'display_name': 'Stukov Vehicle and Ship Weapons Level 1',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SITerranVehicleWeaponsLevel2': {
            'build_time': 190,
            'built_from': ['SIArmory'],
            'display_name': 'Stukov Vehicle and Ship Weapons Level 2',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SITerranVehicleWeaponsLevel3': {
            'build_time': 220,
            'built_from': ['SIArmory'],
            'display_name': 'Stukov Vehicle and Ship Weapons Level 3',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SITerranVehicleArmorsLevel1': {
            'build_time': 160,
            'built_from': ['SIArmory'],
            'display_name': 'Stukov Vehicle and Ship Armor Level 1',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SITerranVehicleArmorsLevel2': {
            'build_time': 190,
            'built_from': ['SIArmory'],
            'display_name': 'Stukov Vehicle and Ship Armor Level 2',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
            },
        'SITerranVehicleArmorsLevel3': {
            'build_time': 220,
            'built_from': ['SIArmory'],
            'display_name': 'Stukov Vehicle and Ship Armor Level 3',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Fenix': {
        # Units
        'ZealotPurifier': {
            'build_time': 30,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Legionnaire',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
            },
        'SentryFenix': {
            'build_time': 37,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Conservator',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'AdeptFenix': {
            'build_time': 38,
            'built_from': ['Gateway', 'WarpGate'],
            'display_name': 'Adept',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'ColossusPurifier': {
            'build_time': 75,
            'built_from': ['RoboticsFacility'],
            'display_name': 'Colossus',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'Scout': {
            'build_time': 30,
            'built_from': ['Stargate'],
            'display_name': 'Scout',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },

        # Buildings

        # Upgrades
        'FenixSuitAttackDamage': {
            'build_time': 90,
            'built_from': ['Forge'],
            'display_name': 'Purifier Armaments',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AStrongHeart': {
            'build_time': 10,
            'built_from': ['Forge'],
            'display_name': 'A Strong Heart',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixArbiterDetection': {
            'build_time': 60,
            'built_from': ['Forge'],
            'display_name': 'Observation Protocol',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixSentryGuardianZoneUpgrade': {
            'build_time': 60,
            'built_from': ['CyberneticsCore'],
            'display_name': 'Optimized Emitters',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'AdeptFenixShadeSpawn': {
            'build_time': 60,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Psionic Projection',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixKaldalisCleave': {
            'build_time': 60,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Empowered Blades',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixChampionTalisAdeptBounceShotUpgrade': {
            'build_time': 60,
            'built_from': ['TwilightCouncil'],
            'display_name': 'Debilitation System',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DisruptorCloak': {
            'build_time': 60,
            'built_from': ['RoboticsBay'],
            'display_name': 'Cloaking Module',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DisruptorSecondExplosion': {
            'build_time': 90,
            'built_from': ['RoboticsBay'],
            'display_name': 'Purification Echo',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixImmortalDetonationShot': {
            'build_time': 90,
            'built_from': ['RoboticsBay'],
            'display_name': 'Gravimetric Overload',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixWarbringerColossusPowerShot': {
            'build_time': 90,
            'built_from': ['RoboticsBay'],
            'display_name': 'Purification Blast',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixScoutWeaponRange': {
            'build_time': 60,
            'built_from': ['FleetBeacon'],
            'display_name': 'Combat Sensor Array',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixChampionScoutAOEMissiles': {
            'build_time': 60,
            'built_from': ['FleetBeacon'],
            'display_name': 'Suppression Procedure',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixChampionCarrierBombers': {
            'build_time': 90,
            'built_from': ['FleetBeacon'],
            'display_name': 'Interdictors',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixChampionTaldarinImmortal': {
            'build_time': 60,
            'built_from': ['PurifierConclave'],  # TODO verify
            'display_name': 'Taldarin\'s A.I. Personality',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixChampionWarbringerColossus': {
            'build_time': 60,
            'built_from': ['PurifierConclave'],  # TODO verify
            'display_name': 'Warbringer\'s A.I. Personality',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixChampionKaldalisZealot': {
            'build_time': 40,
            'built_from': ['PurifierConclave'],  # TODO verify
            'display_name': 'Kaldalis\' A.I. Personality',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixChampionMojoScout': {
            'build_time': 60,
            'built_from': ['PurifierConclave'],  # TODO verify
            'display_name': 'Mojo\'s A.I. Personality',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixChampionTalisAdept': {
            'build_time': 60,
            'built_from': ['PurifierConclave'],  # TODO verify
            'display_name': 'Talis\' A.I. Personality',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FenixChampionClolarionCarrier': {
            'build_time': 60,
            'built_from': ['PurifierConclave'],  # TODO verify
            'display_name': 'Clolarion\'s A.I. Personality',
            'race': 'Protoss',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Dehaka': {
        # Units
        'DehakaTrainEggDrone': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Primal Drone',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'DehakaTrainEggZergling': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Primal Zergling',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'DehakaRavasaur': {  # Zergling morph
            'build_time': 8,
            'built_from': [],
            'display_name': 'Ravasaur',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },
        'DehakaTrainEggRoach': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Primal Roach',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'DehakaRoachLevel3': {
            'build_time': 8,
            'built_from': [],
            'display_name': 'Primal Igniter',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },
        'DehakaTrainEggHydralisk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Primal Hydralisk',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'DehakaMutaliskLevel3FightMorph': {  # morph from Hydralisk
            'build_time': 8,
            'built_from': [],
            'display_name': 'Primal Mutalisk',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },
        'DehakaTrainEggSwarmHost': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Primal Swarm Host',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'DehakaTrainEggUltralisk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Primal Ultralisk',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'ImpalerDehaka': {
            'build_time': 0,
            'built_from': [''],
            'display_name': 'Impaler',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },
        'DehakaGuardianFightMorph': {
            'build_time': 0,
            'built_from': [''],
            'display_name': 'Primal Guardian',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },

        # Buildings
        'DehakaBarracks': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Primal Warden',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'DehakaHatchery': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Primal Hive',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'DehakaGlevigStructure': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Glevig\'s Den',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'DehakaMurvarStructure': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Murvar\'s Den',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'DehakaDakrunStructure': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Dakrun\'s Den',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'DehakaNydusDestroyer': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Primal Wurm',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },

        # Upgrades
        'DehakaPrimalWeaponsLevel1': {
            'build_time': 160,
            'built_from': ['DehakaHatchery'],
            'display_name': 'Primal Attacks Level 1',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaPrimalWeaponsLevel2': {
            'build_time': 190,
            'built_from': ['DehakaHatchery'],
            'display_name': 'Primal Attacks Level 2',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaPrimalWeaponsLevel3': {
            'build_time': 220,
            'built_from': ['DehakaHatchery'],
            'display_name': 'Primal Attacks Level 3',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaPrimalArmorLevel1': {
            'build_time': 160,
            'built_from': ['DehakaHatchery'],
            'display_name': 'Primal Carapace Level 1',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaPrimalArmorLevel2': {
            'build_time': 190,
            'built_from': ['DehakaHatchery'],
            'display_name': 'Primal Carapace Level 2',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaPrimalArmorLevel3': {
            'build_time': 220,
            'built_from': ['DehakaHatchery'],
            'display_name': 'Primal Carapace Level 3',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaRavasaurVSArmor': {
            'build_time': 60,
            'built_from': ['DehakaGlevigStructure'],
            'display_name': 'Dissolving Acid',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaRavasaurRange': {
            'build_time': 60,
            'built_from': ['DehakaGlevigStructure'],
            'display_name': 'Enlarged Parotid Glands',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaRoachMoveSpeed': {
            'build_time': 60,
            'built_from': ['DehakaGlevigStructure'],
            'display_name': 'Glial Reconstitution',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaGlevigRoachFireBreath': {
            'build_time': 120,
            'built_from': ['DehakaGlevigStructure'],
            'display_name': 'Concentrated Fire',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaHydraliskSpeed': {
            'build_time': 60,
            'built_from': ['DehakaGlevigStructure'],
            'display_name': 'Muscular Augments',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaImpalerTenderize': {
            'build_time': 60,
            'built_from': ['DehakaGlevigStructure'],
            'display_name': 'Tenderize',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaUltraliskCrashingCharge': {
            'build_time': 60,
            'built_from': ['DehakaDakrunStructure'],
            'display_name': 'Brutal Charge',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaUltraliskRegen': {
            'build_time': 60,
            'built_from': ['DehakaDakrunStructure'],
            'display_name': 'Healing Adaptation',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaUltraliskBash': {
            'build_time': 60,
            'built_from': ['DehakaDakrunStructure'],
            'display_name': 'Impaling Strike',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaTyrannozorFanOfKnives': {
            'build_time': 60,
            'built_from': ['DehakaDakrunStructure'],
            'display_name': 'Barrage of Spikes',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaTyrannozorArmorAura': {
            'build_time': 60,
            'built_from': ['DehakaDakrunStructure'],
            'display_name': 'Tyrant\'s Protection',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaMutaliskAirDoubleDamage': {
            'build_time': 60,
            'built_from': ['DehakaMurvarStructure'],
            'display_name': 'Slicing Glave',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaMutaliskDamageReduction': {
            'build_time': 60,
            'built_from': ['DehakaMurvarStructure'],
            'display_name': 'Shifting Carapace',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaMutaliskRespawnOnDeath': {
            'build_time': 90,
            'built_from': ['DehakaMurvarStructure'],
            'display_name': 'Primal Reconstitution',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaGuardianExplosiveBomb': {
            'build_time': 60,
            'built_from': ['DehakaMurvarStructure'],
            'display_name': 'Explosive Spores',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaGuardianFury': {
            'build_time': 60,
            'built_from': ['DehakaMurvarStructure'],
            'display_name': 'Primordial Fury',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'DehakaMurvarCreeperAir': {
            'build_time': 90,
            'built_from': ['DehakaMurvarStructure'],
            'display_name': 'Aerial Burst Sacs',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Horner': {
        # Units
        'HHSCV': {
            'build_time': 17,
            'built_from': ['CommandCenter'],
            'display_name': 'SCV',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'HHReaper': {
            'build_time': 14,
            'built_from': ['HHMercStarportNoArmy'],
            'display_name': 'Reaper',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'HHWidowMine': {
            'build_time': 21,
            'built_from': ['HHMercStarportNoArmy'],
            'display_name': 'Widow Mine',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'HHHellion': {
            'build_time': 14,
            'built_from': ['HHMercStarportNoArmy'],
            'display_name': 'Hellion',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'HHHellionTank': {
            'build_time': 14,
            'built_from': ['HHMercStarportNoArmy'],
            'display_name': 'Hellbat',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        # Calldowns
        'HHWraith_SpawnerUnit': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Asteria Wraith',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'HHViking_SpawnerUnit': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Deimos Viking',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'HHRaven_SpawnerUnit': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Theia Raven',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'HHBattlecruiser_SpawnerUnit': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Sovereign Battlecruiser',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },

        # Buildings
        'HHMercStarportCargo': {
            'build_time': 60,
            'built_from': [],
            'display_name': 'Drone Hangar',
            'race': 'Terran',
            'type': 'Unit',  # not really sure what this counts as
            'is_morph': False,
        },
        'HHCommandCenter': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Command Center',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'HHMercStarportNoArmy': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Assault Galleon',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'HHMercCompound': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Engineering Bay',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'HHBomberPlatform': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Strike Fighter Platform',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'HHStarport': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Dominion Starport',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },

        # Upgrades
        'HHReaperG4ClusterBombs': {
            'build_time': 60,
            'built_from': ['HHMercCompound'],
            'display_name': 'LE9 Cluster Charges',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHReaperFlight': {
            'build_time': 90,
            'built_from': ['HHMercCompound'],
            'display_name': 'Jetpack Overdrive',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHWidowMineDeathBlossom': {
            'build_time': 60,
            'built_from': ['HHMercCompound'],
            'display_name': 'Executioner Missiles',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHHellionStimDeath': {
            'build_time': 60,
            'built_from': ['HHMercCompound'],
            'display_name': 'Aerosol Stim Emitters',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHHellionStimDeath': {
            'build_time': 60,
            'built_from': ['HHMercCompound'],
            'display_name': 'Aerosol Stim Emitters',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHWidowMineBurrowedRange': {
            'build_time': 60,
            'built_from': ['EngineeringBay'],
            'display_name': 'Black Market Launchers',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHHellionRocket': {
            'build_time': 90,
            'built_from': ['EngineeringBay'],
            'display_name': 'Tar Bombs',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHHellionAttackDoT': {
            'build_time': 90,
            'built_from': ['EngineeringBay'],
            'display_name': 'Immolation Fluid',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHHellionFearDeath': {
            'build_time': 60,
            'built_from': ['EngineeringBay'],
            'display_name': 'Wildfire Explosives',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHWraithPermaCloak': {
            'build_time': 90,
            'built_from': ['StarportTechLab'],
            'display_name': 'Unregistered Cloak System',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHWraithFury': {
            'build_time': 90,
            'built_from': ['StarportTechLab'],
            'display_name': 'Trigger Override',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHVikingRockets': {
            'build_time': 90,
            'built_from': ['StarportTechLab'],
            'display_name': 'W.I.L.D. Missiles',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHVikingPiercingAttacks': {
            'build_time': 90,
            'built_from': ['StarportTechLab'],
            'display_name': 'W.I.L.D. Missiles',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'FleetwideJump': {
            'build_time': 90,
            'built_from': ['StarportTechLab'],
            'display_name': 'Tactical Jump',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHMultiLock': {
            'build_time': 90,
            'built_from': ['StarportTechLab'],
            'display_name': 'Multi-Threaded Sensors',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHVehicleAndShipWeaponsLevel1': {
            'build_time': 160,
            'built_from': ['Armory'],
            'display_name': 'Horner Weapons Level 1',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHVehicleAndShipWeaponsLevel2': {
            'build_time': 190,
            'built_from': ['Armory'],
            'display_name': 'Horner Weapons Level 2',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHVehicleAndShipWeaponsLevel3': {
            'build_time': 220,
            'built_from': ['Armory'],
            'display_name': 'Horner Weapons Level 3',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHVehicleAndShipArmorsLevel1': {
            'build_time': 160,
            'built_from': ['Armory'],
            'display_name': 'Horner Armor Level 1',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHVehicleAndShipArmorsLevel2': {
            'build_time': 190,
            'built_from': ['Armory'],
            'display_name': 'Horner Armor Level 2',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHVehicleAndShipArmorsLevel3': {
            'build_time': 220,
            'built_from': ['Armory'],
            'display_name': 'Horner Armor Level 3',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHBattlecruiserYamatoAttacks': {
            'build_time': 90,
            'built_from': ['FusionCore'],
            'display_name': 'Overcharged Reactor',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HHBomberNapalm': {
            'build_time': 90,
            'built_from': ['FusionCore'],
            'display_name': 'Napalm Payload',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },

    'Tychus': {
        # Tychus Units
        'TychusSCV': {
            'build_time': 17,
            'built_from': ['CommandCenter'],
            'display_name': 'SCV',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'TychusCoop': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Tychus',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'TychusReaper': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Crooked Sam',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'TychusWarhound': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'James Sirius Sykes',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'TychusFirebat': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Miles Blaze Lewis',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'TychusHERC': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Rob Cannonball Boswell',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'TychusMarauder': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Kev Rattlesnake West',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'TychusGhost': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Vega',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'TychusSpectre': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Nux',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'TychusMedic': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Lt Layna Nikara',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },

        # Tychus Buildings
        # Joeyray's Bar missing
        'TychusEngineeringBay': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Engineering Bay',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'TychusMercCompound': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Gunslingers Hideout',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'TychusSCVAutoTurret': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Auto-Turret',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'TychusArmory': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Muscle Armory',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'TychusCommandCenter': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Command Center',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'TychusGhostAcademy': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Fixers Safehouse',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'TychusMedivacPlatform': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Medivac Platform',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },

        # Tychus Upgrades
        'TychusOutlawWeaponsLevel1': {
            'build_time': 120,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Outlaw Weapons Level 1',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusOutlawWeaponsLevel2': {
            'build_time': 140,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Outlaw Weapons Level 2',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusOutlawWeaponsLevel3': {
            'build_time': 160,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Outlaw Weapons Level 3',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusOutlawWeaponsLevel4': {
            'build_time': 180,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Outlaw Weapons Level 4',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusOutlawWeaponsLevel5': {
            'build_time': 200,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Outlaw Weapons Level 5',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },

        'TychusOutlawArmorsLevel1': {
            'build_time': 120,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Outlaw Life and Armor Level 1',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusOutlawArmorsLevel2': {
            'build_time': 140,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Outlaw Life and Armor Level 2',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusOutlawArmorsLevel3': {
            'build_time': 160,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Outlaw Life and Armor Level 3',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusOutlawArmorsLevel4': {
            'build_time': 180,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Outlaw Life and Armor Level 4',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusOutlawArmorsLevel5': {
            'build_time': 200,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Outlaw Life and Armor Level 5',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },

        'TychusSquadAttackSpeed': {
            'build_time': 90,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'ITC-E Triggers',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusSquadHealth': {
            'build_time': 90,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Endurance Supplements',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusSquadDetection': {
            'build_time': 90,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Flashforce GDM Visor',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusOdinRedButton': {
            'build_time': 90,
            'built_from': ['TychusEngineeringBay'],
            'display_name': 'Big Red Button',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },

        # Tychus
        'TychusACImplosionGrenades': {
            'build_time': 0,
            'built_from': ['TychusMercCompound'],
            'display_name': 'KD9a Implosion Core',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusACRageGrenades': {
            'build_time': 0,
            'built_from': ['TychusMercCompound'],
            'display_name': 'Vanadium Shell',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusACPiercingRounds': {
            'build_time': 0,
            'built_from': ['TychusMercCompound'],
            'display_name': 'Kel-Morian Ripper Rounds',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusACBandofBrothers': {
            'build_time': 0,
            'built_from': ['TychusMercCompound'],
            'display_name': 'SureShot Networked Helmet',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        # Crooked Sam
        'TychusReaperBombDamage': {
            'build_time': 0,
            'built_from': ['TychusMercCompound'],
            'display_name': 'LarsCorp G7 Charges',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusReaperBombStun': {
            'build_time': 0,
            'built_from': ['TychusMercCompound'],
            'display_name': 'Moebius Restraint Matrix',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusReaperEvasionBuff': {
            'build_time': 0,
            'built_from': ['TychusMercCompound'],
            'display_name': 'Procyon Shade Suit',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusReaperBombCharges': {
            'build_time': 0,
            'built_from': ['TychusMercCompound'],
            'display_name': 'Enhanced Hostilities Kit',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        # James Sirius Sykes
        'TychusWarhoundHaywireMissiles': {
            'build_time': 0,
            'built_from': ['TychusMercCompound'],
            'display_name': 'SA-55 Thunderbolt Missiles',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusWarhoundFear': {
            'build_time': 0,
            'built_from': ['TychusMercCompound'],
            'display_name': 'Moebius M34 Terror Rounds',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusWarhoundDeathExplosion': {
            'build_time': 0,
            'built_from': ['TychusMercCompound'],
            'display_name': 'D99 Detonator',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusWarhoundTurretUpgrade': {
            'build_time': 0,
            'built_from': ['TychusMercCompound'],
            'display_name': 'Umojan Turret Frame',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },

        # Miles Blaze Lewis
        'TychusFirebatPremiumPetroleum': {
            'build_time': 0,
            'built_from': ['TychusArmory'],
            'display_name': 'High Capacity Containers',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusFirebatBlueFlameOil': {
            'build_time': 0,
            'built_from': ['TychusArmory'],
            'display_name': 'Hades Oil',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusFirebatIncendiaryPetroleum': {
            'build_time': 0,
            'built_from': ['TychusArmory'],
            'display_name': 'Wildflame Fuel Additives',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusFirebatShield': {
            'build_time': 0,
            'built_from': ['TychusArmory'],
            'display_name': 'XCMC-670 Combat Suit',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        # Rob Cannonball Boswell
        'TychusHercGrappleStun': {
            'build_time': 0,
            'built_from': ['TychusArmory'],
            'display_name': 'X-71 Impact Boots',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusHercGrappleArmor': {
            'build_time': 0,
            'built_from': ['TychusArmory'],
            'display_name': 'Critical Response System',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusHercRage': {
            'build_time': 0,
            'built_from': ['TychusArmory'],
            'display_name': 'Redline Power Cells',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusHercCrit': {
            'build_time': 0,
            'built_from': ['TychusArmory'],
            'display_name': 'MALICE Ammunition',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        # Kev Rattlesnake West
        'TychusMarauderHealingWardBuff': {
            'build_time': 0,
            'built_from': ['TychusArmory'],
            'display_name': 'Umojan Signal Modulator',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusMarauderHealingWardSpeedBuff': {
            'build_time': 0,
            'built_from': ['TychusArmory'],
            'display_name': 'Moebius Aggression Blend',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusMarauderSuperStim': {
            'build_time': 0,
            'built_from': ['TychusArmory'],
            'display_name': 'Secret Stash Stimpack',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusMarauderAttackSplash': {
            'build_time': 0,
            'built_from': ['TychusArmory'],
            'display_name': 'Hammer Munitions',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },

        # Vega
        'TychusGhostDominateBuff': {
            'build_time': 0,
            'built_from': ['TychusGhostAcademy'],
            'display_name': 'Moebius Psionic Motivator',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusGhostDominatingDomination': {
            'build_time': 0,
            'built_from': ['TychusGhostAcademy'],
            'display_name': 'Neural Disruption Device',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusGhostPsychicSnare': {
            'build_time': 0,
            'built_from': ['TychusGhostAcademy'],
            'display_name': 'Psi Projector',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusGhostConcentrationHelmet': {
            'build_time': 0,
            'built_from': ['TychusGhostAcademy'],
            'display_name': 'Type-88 Persuader',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        # Nux
        'TychusSpectreSuperUltrasonicPulse': {
            'build_time': 0,
            'built_from': ['TychusGhostAcademy'],
            'display_name': 'T4 Cloudburst Shells',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusSpectreVisionSuit': {
            'build_time': 0,
            'built_from': ['TychusGhostAcademy'],
            'display_name': 'Ultrasonic Boosters',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusSpectreExtendedPulseGun': {
            'build_time': 0,
            'built_from': ['TychusGhostAcademy'],
            'display_name': 'Crystalline Amplifiers',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusSpectreBrillianceAura': {
            'build_time': 0,
            'built_from': ['TychusGhostAcademy'],
            'display_name': 'N3 Networking',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        # Lt Layna Nikara
        'TychusMedicAdvancedHealingSpray': {
            'build_time': 0,
            'built_from': ['TychusGhostAcademy'],
            'display_name': 'Umojan Repair Nanites',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusMedicSuperHealing': {
            'build_time': 0,
            'built_from': ['TychusGhostAcademy'],
            'display_name': 'Procyon Serum',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusMedicDoubleBeam': {
            'build_time': 0,
            'built_from': ['TychusGhostAcademy'],
            'display_name': 'Procyon Twin Heal Beam Gauntlet',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TychusMedicDefensiveMatrix': {
            'build_time': 0,
            'built_from': ['TychusGhostAcademy'],
            'display_name': 'XM-77 Matrix Generator',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },
    'Zeratul': {
        # Gateway
        'ZeratulStalker': {
            'build_time': 42,
            'built_from': ['ZeratulGateway'],
            'display_name': "Xel'Naga Ambusher",
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'ZeratulSentry': {
            'build_time': 37,
            'built_from': ['ZeratulGateway'],
            'display_name': "Xel'Naga Shieldguard",
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'ZeratulDarkTemplar': {
            'build_time': 42,
            'built_from': ['ZeratulGateway'],
            'display_name': "Void Templar",
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        # Robo Facility
        'ZeratulImmortal': {
            'build_time': 55,
            'built_from': ['ZeratulRoboticsFacility'],
            'display_name': "Xel'Naga Enforcer",
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'ZeratulDisruptor': {
            'build_time': 50,
            'built_from': ['ZeratulRoboticsFacility'],
            'display_name': "Xel'Naga Abrogator",
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'ZeratulWarpPrism': {
            'build_time': 50,
            'built_from': ['ZeratulRoboticsFacility'],
            'display_name': "Xel'Naga Void Array",
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'ZeratulObserver': {
            'build_time': 30,
            'built_from': ['ZeratulRoboticsFacility'],
            'display_name': "Xel'Naga Watcher",
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        # Buildings
        'Nexus': {
            'build_time': 0,
            'built_from': [],
            'display_name': "Ancient Nexus",
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },
        'AutomatedAssimilatorZeratul': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Automated Assimilator',
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },
        'ZeratulGateway': {
            'build_time': 0,
            'built_from': [],
            'display_name': "Xel'Naga Passageway",
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },
        'ZeratulCyberneticsCore': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Core Forge',
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },
        'ZeratulPhotonCannon': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Tesseract Cannon',
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },
        'ZeratulRoboticsFacility': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Constructs Facility',
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },
        'ZeratulRoboticsBay': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Constructs Bay',
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },
        'ZeratulDarkShrine': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Void Shrine',
            'race': 'Protoss',
            'type': 'Building',
            'is_morph': False,
        },
        # No Upgrades
        # Calldowns
        'Mohandar': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Zoraya Legion',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'ZeratulHeroDarkArchon': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Serdath Legion',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
        'ZeratulSummonKarass': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Telbrus Legion',
            'race': 'Protoss',
            'type': 'Unit',
            'is_morph': False,
        },
    },

    'Stetmann': {
        # Units
        'DroneStetmann': {
            'build_time': 17,
            'built_from': [],
            'display_name': 'Drone',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'OverlordStetmann': {
            'build_time': 25,
            'built_from': [],
            'display_name': 'Overlord',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'OverseerStetmann': {
            'build_time': 17,
            'built_from': [],
            'display_name': 'Overseer',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },
        'ZerglingStetmann': {
            'build_time': 25,
            'built_from': [],
            'display_name': 'Zergling',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        # missing banelings
        'HydraliskStetmann': {
            'build_time': 33,
            'built_from': [],
            'display_name': 'Hydralisk',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        # missing lurkers
        'CorruptorStetmann': {
            'build_time': 33,
            'built_from': [],
            'display_name': 'Corruptor',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'InfestorStetmann': {
            'build_time': 50,
            'built_from': [],
            'display_name': 'Infestor',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },
        'SuperGaryStetmannAbilities': {  # data has it marked as an upgrade
            'build_time': 15,
            'built_from': [],
            'display_name': 'Super Gary',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': True,
        },
        'UltraliskStetmann': {
            'build_time': 55,
            'built_from': [],
            'display_name': 'Ultralisk',
            'race': 'Zerg',
            'type': 'Unit',
            'is_morph': False,
        },

        # Buildings
        'ExtractorStetmann': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Extractor',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SpawningPoolStetmann': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Spawning Tool',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SpineCrawlerStetmann': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Spine Crawler',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SporeCrawlerStetmann': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Spore Crawler',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'EvolutionChamberStetmann': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Evolution Chamber',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'BanelingNestStetmann': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Baneling Nest',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'HatcheryStetmann': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Hatchery',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'HydraliskDenStetmann': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Hydralisk Den',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'InfestationPitStetmann': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Infestation Pit',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'SpireStetmann': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Spire',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },
        'UltraliskCavernStetmann': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Ultralisk Cavern',
            'race': 'Zerg',
            'type': 'Building',
            'is_morph': False,
        },

        # Upgrades
        # Hatchery
        'OverlordStetmannSpeed': {
            'build_time': 60,
            'built_from': [],
            'display_name': 'Pneumatized Carapace',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'OverlordStetmannTransport': {
            'build_time': 60,
            'built_from': [],
            'display_name': 'Ventral Sacs',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },

        # Spawning Pool
        'ZerglingStetmannMovementSpeed': {
            'build_time': 60,
            'built_from': ['SpawningPoolStetmann'],
            'display_name': 'Metabolic Boost',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ZerglingStetmannHardenedShield': {
            'build_time': 60,
            'built_from': ['SpawningPoolStetmann'],
            'display_name': 'Hardened Ergonergy Shield',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ZerglingStetmannAttackSpeed': {
            'build_time': 60,
            'built_from': ['SpawningPoolStetmann'],
            'display_name': 'Adrenal Glands',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },

        # Evolution Chamber
        'StetmannMeleeWeaponsLevel1': {
            'build_time': 160,
            'built_from': ['EvolutionChamberStetmann'],
            'display_name': 'Zerg Melee Weapons Level 1',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannMeleeWeaponsLevel2': {
            'build_time': 190,
            'built_from': ['EvolutionChamberStetmann'],
            'display_name': 'Zerg Melee Weapons Level 2',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannMeleeWeaponsLevel3': {
            'build_time': 220,
            'built_from': ['EvolutionChamberStetmann'],
            'display_name': 'Zerg Melee Weapons Level 3',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannMissileWeaponsLevel1': {
            'build_time': 160,
            'built_from': ['EvolutionChamberStetmann'],
            'display_name': 'Zerg Missile Weapons Level 1',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannMissileWeaponsLevel2': {
            'build_time': 190,
            'built_from': ['EvolutionChamberStetmann'],
            'display_name': 'Zerg Missile Weapons Level 2',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannMissileWeaponsLevel3': {
            'build_time': 220,
            'built_from': ['EvolutionChamberStetmann'],
            'display_name': 'Zerg Missile Weapons Level 3',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannGroundArmorsLevel1': {
            'build_time': 160,
            'built_from': ['EvolutionChamberStetmann'],
            'display_name': 'Zerg Ground Armor Level 1',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannGroundArmorsLevel2': {
            'build_time': 190,
            'built_from': ['EvolutionChamberStetmann'],
            'display_name': 'Zerg Ground Armor Level 2',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannGroundArmorsLevel3': {
            'build_time': 220,
            'built_from': ['EvolutionChamberStetmann'],
            'display_name': 'Zerg Ground Armor Level 3',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },

        # Baneling Nest
        'BanelingStetmannMovementSpeed': {
            'build_time': 60,
            'built_from': ['BanelingNestStetmann'],
            'display_name': 'Anti-Centripetal Rocket Servos',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'BanelingStetmannExtraDamage': {
            'build_time': 90,
            'built_from': ['BanelingNestStetmann'],
            'display_name': 'Egonergy Enhanced Explosives',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'BanelingStetmannManaShieldBonus': {
            'build_time': 90,
            'built_from': ['BanelingNestStetmann'],
            'display_name': 'Egonergy Efficient Barrier',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },

        # Hydralisk Den
        'HydraliskStetmannMovementSpeed': {
            'build_time': 60,
            'built_from': ['HydraliskDenStetmann'],
            'display_name': 'Muscular Augments',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HydraliskStetmannDamage': {
            'build_time': 90,
            'built_from': ['HydraliskDenStetmann'],
            'display_name': 'Erudition Missile Launchers',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'HydraliskStetmannRange': {
            'build_time': 90,
            'built_from': ['HydraliskDenStetmann'],
            'display_name': 'Tyr-Class Targeting System',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'LurkerStetmannTunnelingBurstRange': {
            'build_time': 90,
            'built_from': ['HydraliskDenStetmann'],
            'display_name': 'Extended Tunnel of TERROR Algorithm',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'LurkerStetmannChannelingSpines': {
            'build_time': 90,
            'built_from': ['HydraliskDenStetmann'],
            'display_name': 'Focused Strike Algorithm',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },

        # Spire
        'StetmannAirWeaponsLevel1': {
            'build_time': 160,
            'built_from': ['SpireStetmann'],
            'display_name': 'Zerg Flyer Weapons Level 1',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannAirWeaponsLevel2': {
            'build_time': 190,
            'built_from': ['SpireStetmann'],
            'display_name': 'Zerg Flyer Weapons Level 2',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannAirWeaponsLevel3': {
            'build_time': 220,
            'built_from': ['SpireStetmann'],
            'display_name': 'Zerg Flyer Weapons Level 3',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannAirArmorsLevel1': {
            'build_time': 160,
            'built_from': ['SpireStetmann'],
            'display_name': 'Zerg Flyer Armor Level 1',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannAirArmorsLevel2': {
            'build_time': 190,
            'built_from': ['SpireStetmann'],
            'display_name': 'Zerg Flyer Armor Level 2',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'StetmannAirArmorsLevel3': {
            'build_time': 220,
            'built_from': ['SpireStetmann'],
            'display_name': 'Zerg Flyer Armor Level 3',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'CorruptorStetmannBiggerAoE': {
            'build_time': 60,
            'built_from': ['SpireStetmann'],
            'display_name': 'Wide Area Cluster Busters',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'CorruptorStetmannCausticSpray': {
            'build_time': 90,
            'built_from': ['SpireStetmann'],
            'display_name': 'Terraclean Solvent',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'BroodLordStetmannBombers': {
            'build_time': 90,
            'built_from': ['SpireStetmann'],
            'display_name': 'Mecha Locusceptor Bays',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'BroodLordStetmannYamato': {
            'build_time': 90,
            'built_from': ['SpireStetmann'],
            'display_name': 'Stetmato Cannon',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },

        # Infestation Pit
        'InfestorStetmannRecharge': {
            'build_time': 90,
            'built_from': ['InfestationPitStetmann'],
            'display_name': 'UMI-C Charging Protocol',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'InfestorStetmannBonusRavager': {
            'build_time': 90,
            'built_from': ['InfestationPitStetmann'],
            'display_name': 'BONUS Ravager',  # skip ! for safety
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },

        # Ultralisk Cavern
        'UltraliskBurrowChargeMechanicalStun': {
            'build_time': 60,
            'built_from': ['UltraliskCavernStetmann'],
            'display_name': 'Electrostatic Surprise',  # skip ! for safety
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'UltraliskStetmannMechanicalLifeLeech': {
            'build_time': 90,
            'built_from': ['UltraliskCavernStetmann'],
            'display_name': 'Mecha Mooch Module',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'UltraliskStetmannArmor': {
            'build_time': 90,
            'built_from': ['UltraliskCavernStetmann'],
            'display_name': 'Chitanium Plating',
            'race': 'Zerg',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },
    'Mengsk': {
        # Mengsk Units
        'SCVMengsk': {
            'build_time': 8,
            'built_from': ['CommandCenterMengsk'],
            'display_name': 'SCV',  # Dominion Laborer
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'TrooperMengsk': {
            'build_time': 0,  # Technically 8 seconds, but typically from Supply Bunker or drop
            'built_from': ['CommandCenterMengsk'],
            'display_name': 'Dominion Trooper',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'MarauderMengsk': {
            'build_time': 30,
            'built_from': ['BarracksMengsk'],
            'display_name': 'Marauder',  # Aegis Guard
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'GhostMengsk': {
            'build_time': 40,
            'built_from': ['BarracksMengsk'],
            'display_name': 'Ghost',  # Emperor's Shadow
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'SiegeTankMengsk': {
            'build_time': 45,
            'built_from': ['FactoryMengsk'],
            'display_name': 'Siege Tank',  # Shock Division
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'ThorMengsk': {
            'build_time': 60,
            'built_from': ['FactoryMengsk'],
            'display_name': 'Thor',  # Blackhammer
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'VikingMengskFighter': {
            'build_time': 42,
            'built_from': ['StarportMengsk'],
            'display_name': 'Viking',  # Sky Fury
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'MedivacMengsk': {
            'build_time': 21,
            'built_from': ['StarportMengsk'],
            'display_name': 'Medivac',  # Imperial Intercessor
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'RavenMengsk': {
            'build_time': 30,
            'built_from': ['StarportMengsk'],
            'display_name': 'Imperial Witness',
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },
        'BattlecruiserMengsk': {
            'build_time': 90,
            'built_from': ['StarportMengsk'],
            'display_name': 'Battlecruiser',  # Pride of Augustgrad
            'race': 'Terran',
            'type': 'Unit',
            'is_morph': False,
        },

        # Mengsk Structures
        'CommandCenterMengsk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Command Center',  # Enlistment Center
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'RefineryMengsk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Refinery',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'BunkerDepotMengsk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Supply Bunker',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'BarracksMengsk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Barracks',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'EngineeringBayMengsk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Engineering Bay',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'ArtilleryMengsk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Earthsplitter Ordinance',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'MissileTurretMengsk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Missile Turret',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'GhostAcademyMengsk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Ghost Academy',  # Royal Academy
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'FactoryMengsk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Factory',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'ArmoryMengsk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Armory',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'StarportMengsk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Starport',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },
        'FusionCoreMengsk': {
            'build_time': 0,
            'built_from': [],
            'display_name': 'Fusion Core',
            'race': 'Terran',
            'type': 'Building',
            'is_morph': False,
        },

        # Mengsk Upgrades
        'MengskTrooperWeaponsLevel1': {
            'build_time': 160,
            'built_from': ['EngineeringBayMengsk'],
            'display_name': 'Terran Infantry Weapons Level 1',  # Dominion Weapons
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MengskTrooperWeaponsLevel2': {
            'build_time': 190,
            'built_from': ['EngineeringBayMengsk'],
            'display_name': 'Terran Infantry Weapons Level 2',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MengskTrooperWeaponsLevel3': {
            'build_time': 220,
            'built_from': ['EngineeringBayMengsk'],
            'display_name': 'Terran Infantry Weapons Level 3',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MengskTrooperArmorsLevel1': {
            'build_time': 160,
            'built_from': ['EngineeringBayMengsk'],
            'display_name': 'Terran Infantry Armor Level 1',  # Dominion Armor
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MengskTrooperArmorsLevel2': {
            'build_time': 190,
            'built_from': ['EngineeringBayMengsk'],
            'display_name': 'Terran Infantry Armor Level 2',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MengskTrooperArmorsLevel3': {
            'build_time': 220,
            'built_from': ['EngineeringBayMengsk'],
            'display_name': 'Terran Infantry Armor Level 3',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'TrooperMengskDropTrain': {
            'build_time': 60,
            'built_from': ['EngineeringBayMengsk'],
            'display_name': 'Orbital Trooper Pods',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MengskStructureArmor': {
            'build_time': 90,
            'built_from': ['EngineeringBayMengsk'],
            'display_name': 'Neosteel Armor',  # Neosteel Fortified Armor
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'BunkerDepotMengskRange': {
            'build_time': 60,
            'built_from': ['EngineeringBayMengsk'],
            'display_name': 'Aim-assist Embrasures',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ArtilleryMengskRange': {
            'build_time': 90,
            'built_from': ['EngineeringBayMengsk'],
            'display_name': 'Hemispheric Acceleraants',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MarauderMengskSlow': {
            'build_time': 60,
            'built_from': ['GhostAcademyMengsk'],
            'display_name': 'Incapacitator Shells',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'GhostMengskGuidedStrike': {
            'build_time': 60,
            'built_from': ['GhostAcademyMengsk'],
            'display_name': 'Sovereign Tactical Missiles',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MedivacMengskSiegeTankAirlift': {
            'build_time': 60,
            'built_from': ['ArmoryMengsk'],
            'display_name': 'Armament Stabilizers',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'ThorMengskArmorAura': {
            'build_time': 60,
            'built_from': ['ArmoryMengsk'],
            'display_name': 'Bulwark Field',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MechTransformationSpeedMengsk': {
            'build_time': 60,
            'built_from': ['ArmoryMengsk'],
            'display_name': 'Smart Servos',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MedivacMengskDoubleHealBeam': {
            'build_time': 60,
            'built_from': ['FusionCoreMengsk'],
            'display_name': 'Dual Resuscitators',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'MedivacMengskPermanentCloak': {
            'build_time': 60,
            'built_from': ['FusionCoreMengsk'],
            'display_name': 'Scatter Veil',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'BlimpMengskTopbarRegen': {
            'build_time': 60,
            'built_from': ['FusionCoreMengsk'],
            'display_name': 'Amplified Airwaves',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'VikingMengskSpeed': {
            'build_time': 60,
            'built_from': ['FusionCoreMengsk'],
            'display_name': 'Aesir Turbines',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
        'BattlecruiserMengskRangeAura': {
            'build_time': 60,
            'built_from': ['FusionCoreMengsk'],
            'display_name': 'Field-Assist Targeting System',
            'race': 'Terran',
            'type': 'Upgrade',
            'is_morph': False,
        },
    },
}

# adjust by the FPS
for commander_data in COMMANDER_BUILD_DATA.values():
    for value in commander_data.values():
        value['build_time'] *= FRAMES_PER_SECOND

# take the base data and incorporate commander data
for commander in COMMANDER_BUILD_DATA:
    combined_data = BUILD_DATA.copy()
    combined_data.update(COMMANDER_BUILD_DATA[commander])
    COMMANDER_BUILD_DATA[commander] = combined_data
