SC2: Content update (#5312)
Feature highlights: - Adds many content to the SC2 game - Allows custom mission order - Adds race-swapped missions for build missions (except Epilogue and NCO) - Allows War Council Nerfs (Protoss units can get pre - War Council State, alternative units get another custom nerf to match the power level of base units) - Revamps Predator's upgrade tree (never was considered strategically important) - Adds some units and upgrades - Locked and excluded items can specify quantity - Key mode (if opt-in, missions require keys to be unlocked on top of their regular regular requirements - Victory caches - Victory locations can grant multiple items to the multiworld instead of one - The generator is more resilient for generator failures as it validates logic for item excludes - Fixes the following issues: - https://github.com/ArchipelagoMW/Archipelago/issues/3531 - https://github.com/ArchipelagoMW/Archipelago/issues/3548
This commit is contained in:
173
worlds/sc2/item/__init__.py
Normal file
173
worlds/sc2/item/__init__.py
Normal file
@@ -0,0 +1,173 @@
|
||||
import enum
|
||||
import typing
|
||||
from dataclasses import dataclass
|
||||
from typing import Optional, Union, Dict, Type
|
||||
|
||||
from BaseClasses import Item, ItemClassification
|
||||
from ..mission_tables import SC2Race
|
||||
|
||||
|
||||
class ItemFilterFlags(enum.IntFlag):
|
||||
"""Removed > Start Inventory > Locked > Excluded > Requested > Culled"""
|
||||
Available = 0
|
||||
StartInventory = enum.auto()
|
||||
Locked = enum.auto()
|
||||
"""Used to flag items that are never allowed to be culled."""
|
||||
LogicLocked = enum.auto()
|
||||
"""Locked by item cull logic checks; logic-locked w/a upgrades may be removed if all parents are removed"""
|
||||
Requested = enum.auto()
|
||||
"""Soft-locked items by item count checks during item culling; may be re-added"""
|
||||
Removed = enum.auto()
|
||||
"""Marked for immediate removal"""
|
||||
UserExcluded = enum.auto()
|
||||
"""Excluded by the user; display an error message if failing to exclude"""
|
||||
FilterExcluded = enum.auto()
|
||||
"""Excluded by item filtering"""
|
||||
Culled = enum.auto()
|
||||
"""Soft-removed by the item culling"""
|
||||
NonLocal = enum.auto()
|
||||
Plando = enum.auto()
|
||||
AllowedOrphan = enum.auto()
|
||||
"""Used to flag items that shouldn't be filtered out with their parents"""
|
||||
ForceProgression = enum.auto()
|
||||
"""Used to flag items that aren't classified as progression by default"""
|
||||
|
||||
Unexcludable = StartInventory|Plando|Locked|LogicLocked
|
||||
UnexcludableUpgrade = StartInventory|Plando|Locked
|
||||
Uncullable = StartInventory|Plando|Locked|LogicLocked|Requested
|
||||
Excluded = UserExcluded|FilterExcluded
|
||||
RequestedOrBetter = StartInventory|Locked|LogicLocked|Requested
|
||||
CulledOrBetter = Removed|Excluded|Culled
|
||||
|
||||
|
||||
class StarcraftItem(Item):
|
||||
game: str = "Starcraft 2"
|
||||
filter_flags: ItemFilterFlags = ItemFilterFlags.Available
|
||||
|
||||
def __init__(self, name: str, classification: ItemClassification, code: Optional[int], player: int, filter_flags: ItemFilterFlags = ItemFilterFlags.Available):
|
||||
super().__init__(name, classification, code, player)
|
||||
self.filter_flags = filter_flags
|
||||
|
||||
class ItemTypeEnum(enum.Enum):
|
||||
def __new__(cls, *args, **kwargs):
|
||||
value = len(cls.__members__) + 1
|
||||
obj = object.__new__(cls)
|
||||
obj._value_ = value
|
||||
return obj
|
||||
|
||||
def __init__(self, name: str, flag_word: int):
|
||||
self.display_name = name
|
||||
self.flag_word = flag_word
|
||||
|
||||
|
||||
class TerranItemType(ItemTypeEnum):
|
||||
Armory_1 = "Armory", 0
|
||||
"""General Terran unit upgrades"""
|
||||
Armory_2 = "Armory", 1
|
||||
Armory_3 = "Armory", 2
|
||||
Armory_4 = "Armory", 3
|
||||
Armory_5 = "Armory", 4
|
||||
Armory_6 = "Armory", 5
|
||||
Armory_7 = "Armory", 6
|
||||
Progressive = "Progressive Upgrade", 7
|
||||
Laboratory = "Laboratory", 8
|
||||
Upgrade = "Upgrade", 9
|
||||
Unit = "Unit", 10
|
||||
Building = "Building", 11
|
||||
Mercenary = "Mercenary", 12
|
||||
Nova_Gear = "Nova Gear", 13
|
||||
Progressive_2 = "Progressive Upgrade", 14
|
||||
Unit_2 = "Unit", 15
|
||||
|
||||
|
||||
class ZergItemType(ItemTypeEnum):
|
||||
Ability = "Ability", 0
|
||||
"""Kerrigan abilities"""
|
||||
Mutation_1 = "Mutation", 1
|
||||
Strain = "Strain", 2
|
||||
Morph = "Morph", 3
|
||||
Upgrade = "Upgrade", 4
|
||||
Mercenary = "Mercenary", 5
|
||||
Unit = "Unit", 6
|
||||
Level = "Level", 7
|
||||
"""Kerrigan level packs"""
|
||||
Primal_Form = "Primal Form", 8
|
||||
Evolution_Pit = "Evolution Pit", 9
|
||||
"""Zerg global economy upgrades, like automated extractors"""
|
||||
Mutation_2 = "Mutation", 10
|
||||
Mutation_3 = "Mutation", 11
|
||||
Mutation_4 = "Mutation", 12
|
||||
Progressive = "Progressive Upgrade", 13
|
||||
Mutation_5 = "Mutation", 14
|
||||
|
||||
|
||||
class ProtossItemType(ItemTypeEnum):
|
||||
Unit = "Unit", 0
|
||||
Unit_2 = "Unit", 1
|
||||
Upgrade = "Upgrade", 2
|
||||
Building = "Building", 3
|
||||
Progressive = "Progressive Upgrade", 4
|
||||
Spear_Of_Adun = "Spear of Adun", 5
|
||||
Solarite_Core = "Solarite Core", 6
|
||||
"""Protoss global effects, such as reconstruction beam or automated assimilators"""
|
||||
Forge_1 = "Forge", 7
|
||||
"""General Protoss unit upgrades"""
|
||||
Forge_2 = "Forge", 8
|
||||
"""General Protoss unit upgrades"""
|
||||
Forge_3 = "Forge", 9
|
||||
"""General Protoss unit upgrades"""
|
||||
Forge_4 = "Forge", 10
|
||||
"""General Protoss unit upgrades"""
|
||||
Forge_5 = "Forge", 11
|
||||
"""General Protoss unit upgrades"""
|
||||
War_Council = "War Council", 12
|
||||
War_Council_2 = "War Council", 13
|
||||
ShieldRegeneration = "Shield Regeneration Group", 14
|
||||
|
||||
|
||||
class FactionlessItemType(ItemTypeEnum):
|
||||
Minerals = "Minerals", 0
|
||||
Vespene = "Vespene", 1
|
||||
Supply = "Supply", 2
|
||||
MaxSupply = "Max Supply", 3
|
||||
BuildingSpeed = "Building Speed", 4
|
||||
Nothing = "Nothing Group", 5
|
||||
Deprecated = "Deprecated", 6
|
||||
MaxSupplyTrap = "Max Supply Trap", 7
|
||||
ResearchSpeed = "Research Speed", 8
|
||||
ResearchCost = "Research Cost", 9
|
||||
Keys = "Keys", -1
|
||||
|
||||
|
||||
ItemType = Union[TerranItemType, ZergItemType, ProtossItemType, FactionlessItemType]
|
||||
race_to_item_type: Dict[SC2Race, Type[ItemTypeEnum]] = {
|
||||
SC2Race.ANY: FactionlessItemType,
|
||||
SC2Race.TERRAN: TerranItemType,
|
||||
SC2Race.ZERG: ZergItemType,
|
||||
SC2Race.PROTOSS: ProtossItemType,
|
||||
}
|
||||
|
||||
|
||||
class ItemData(typing.NamedTuple):
|
||||
code: int
|
||||
type: ItemType
|
||||
number: int # Important for bot commands to send the item into the game
|
||||
race: SC2Race
|
||||
classification: ItemClassification = ItemClassification.useful
|
||||
quantity: int = 1
|
||||
parent: typing.Optional[str] = None
|
||||
important_for_filtering: bool = False
|
||||
|
||||
def is_important_for_filtering(self):
|
||||
return (
|
||||
self.important_for_filtering
|
||||
or self.classification == ItemClassification.progression
|
||||
or self.classification == ItemClassification.progression_skip_balancing
|
||||
)
|
||||
|
||||
@dataclass
|
||||
class FilterItem:
|
||||
name: str
|
||||
data: ItemData
|
||||
index: int = 0
|
||||
flags: ItemFilterFlags = ItemFilterFlags.Available
|
||||
178
worlds/sc2/item/item_annotations.py
Normal file
178
worlds/sc2/item/item_annotations.py
Normal file
@@ -0,0 +1,178 @@
|
||||
"""
|
||||
Annotations to add to item names sent to the in-game message panel
|
||||
"""
|
||||
from . import item_names
|
||||
|
||||
ITEM_NAME_ANNOTATIONS = {
|
||||
item_names.MARINE: "(Barracks)",
|
||||
item_names.MEDIC: "(Barracks)",
|
||||
item_names.FIREBAT: "(Barracks)",
|
||||
item_names.MARAUDER: "(Barracks)",
|
||||
item_names.REAPER: "(Barracks)",
|
||||
item_names.HELLION: "(Factory)",
|
||||
item_names.VULTURE: "(Factory)",
|
||||
item_names.GOLIATH: "(Factory)",
|
||||
item_names.DIAMONDBACK: "(Factory)",
|
||||
item_names.SIEGE_TANK: "(Factory)",
|
||||
item_names.MEDIVAC: "(Starport)",
|
||||
item_names.WRAITH: "(Starport)",
|
||||
item_names.VIKING: "(Starport)",
|
||||
item_names.BANSHEE: "(Starport)",
|
||||
item_names.BATTLECRUISER: "(Starport)",
|
||||
item_names.GHOST: "(Barracks)",
|
||||
item_names.SPECTRE: "(Barracks)",
|
||||
item_names.THOR: "(Factory)",
|
||||
item_names.RAVEN: "(Starport)",
|
||||
item_names.SCIENCE_VESSEL: "(Starport)",
|
||||
item_names.PREDATOR: "(Factory)",
|
||||
item_names.HERCULES: "(Starport)",
|
||||
|
||||
item_names.HERC: "(Barracks)",
|
||||
item_names.DOMINION_TROOPER: "(Barracks)",
|
||||
item_names.WIDOW_MINE: "(Factory)",
|
||||
item_names.CYCLONE: "(Factory)",
|
||||
item_names.WARHOUND: "(Factory)",
|
||||
item_names.LIBERATOR: "(Starport)",
|
||||
item_names.VALKYRIE: "(Starport)",
|
||||
|
||||
item_names.SON_OF_KORHAL: "(Elite Barracks)",
|
||||
item_names.AEGIS_GUARD: "(Elite Barracks)",
|
||||
item_names.FIELD_RESPONSE_THETA: "(Elite Barracks)",
|
||||
item_names.EMPERORS_SHADOW: "(Elite Barracks)",
|
||||
item_names.BULWARK_COMPANY: "(Elite Factory)",
|
||||
item_names.SHOCK_DIVISION: "(Elite Factory)",
|
||||
item_names.BLACKHAMMER: "(Elite Factory)",
|
||||
item_names.SKY_FURY: "(Elite Starport)",
|
||||
item_names.NIGHT_HAWK: "(Elite Starport)",
|
||||
item_names.NIGHT_WOLF: "(Elite Starport)",
|
||||
item_names.EMPERORS_GUARDIAN: "(Elite Starport)",
|
||||
item_names.PRIDE_OF_AUGUSTRGRAD: "(Elite Starport)",
|
||||
|
||||
item_names.WAR_PIGS: "(Terran Mercenary)",
|
||||
item_names.DEVIL_DOGS: "(Terran Mercenary)",
|
||||
item_names.HAMMER_SECURITIES: "(Terran Mercenary)",
|
||||
item_names.SPARTAN_COMPANY: "(Terran Mercenary)",
|
||||
item_names.SIEGE_BREAKERS: "(Terran Mercenary)",
|
||||
item_names.HELS_ANGELS: "(Terran Mercenary)",
|
||||
item_names.DUSK_WINGS: "(Terran Mercenary)",
|
||||
item_names.JACKSONS_REVENGE: "(Terran Mercenary)",
|
||||
item_names.SKIBIS_ANGELS: "(Terran Mercenary)",
|
||||
item_names.DEATH_HEADS: "(Terran Mercenary)",
|
||||
item_names.WINGED_NIGHTMARES: "(Terran Mercenary)",
|
||||
item_names.MIDNIGHT_RIDERS: "(Terran Mercenary)",
|
||||
item_names.BRYNHILDS: "(Terran Mercenary)",
|
||||
item_names.JOTUN: "(Terran Mercenary)",
|
||||
|
||||
item_names.BUNKER: "(Terran Building)",
|
||||
item_names.MISSILE_TURRET: "(Terran Building)",
|
||||
item_names.SENSOR_TOWER: "(Terran Building)",
|
||||
item_names.PLANETARY_FORTRESS: "(Terran Building)",
|
||||
item_names.PERDITION_TURRET: "(Terran Building)",
|
||||
item_names.DEVASTATOR_TURRET: "(Terran Building)",
|
||||
item_names.PSI_DISRUPTER: "(Terran Building)",
|
||||
item_names.HIVE_MIND_EMULATOR: "(Terran Building)",
|
||||
|
||||
item_names.ZERGLING: "(Larva)",
|
||||
item_names.SWARM_QUEEN: "(Hatchery)",
|
||||
item_names.ROACH: "(Larva)",
|
||||
item_names.HYDRALISK: "(Larva)",
|
||||
item_names.ABERRATION: "(Larva)",
|
||||
item_names.MUTALISK: "(Larva)",
|
||||
item_names.SWARM_HOST: "(Larva)",
|
||||
item_names.INFESTOR: "(Larva)",
|
||||
item_names.ULTRALISK: "(Larva)",
|
||||
item_names.PYGALISK: "(Larva)",
|
||||
item_names.CORRUPTOR: "(Larva)",
|
||||
item_names.SCOURGE: "(Larva)",
|
||||
item_names.BROOD_QUEEN: "(Larva)",
|
||||
item_names.DEFILER: "(Larva)",
|
||||
item_names.INFESTED_MARINE: "(Infested Barracks)",
|
||||
item_names.INFESTED_SIEGE_TANK: "(Infested Factory)",
|
||||
item_names.INFESTED_DIAMONDBACK: "(Infested Factory)",
|
||||
item_names.BULLFROG: "(Infested Factory)",
|
||||
item_names.INFESTED_BANSHEE: "(Infested Starport)",
|
||||
item_names.INFESTED_LIBERATOR: "(Infested Starport)",
|
||||
|
||||
item_names.ZERGLING_BANELING_ASPECT: "(Zergling Morph)",
|
||||
item_names.HYDRALISK_IMPALER_ASPECT: "(Hydralisk Morph)",
|
||||
item_names.HYDRALISK_LURKER_ASPECT: "(Hydralisk Morph)",
|
||||
item_names.MUTALISK_CORRUPTOR_BROOD_LORD_ASPECT: "(Mutalisk/Corruptor Morph)",
|
||||
item_names.MUTALISK_CORRUPTOR_VIPER_ASPECT: "(Mutalisk/Corruptor Morph)",
|
||||
item_names.MUTALISK_CORRUPTOR_GUARDIAN_ASPECT: "(Mutalisk/Corruptor Morph)",
|
||||
item_names.MUTALISK_CORRUPTOR_DEVOURER_ASPECT: "(Mutalisk/Corruptor Morph)",
|
||||
item_names.ROACH_RAVAGER_ASPECT: "(Roach Morph)",
|
||||
item_names.OVERLORD_OVERSEER_ASPECT: "(Overlord Morph)",
|
||||
item_names.ROACH_PRIMAL_IGNITER_ASPECT: "(Roach Morph)",
|
||||
item_names.ULTRALISK_TYRANNOZOR_ASPECT: "(Ultralisk Morph)",
|
||||
|
||||
item_names.INFESTED_MEDICS: "(Zerg Mercenary)",
|
||||
item_names.INFESTED_SIEGE_BREAKERS: "(Zerg Mercenary)",
|
||||
item_names.INFESTED_DUSK_WINGS: "(Zerg Mercenary)",
|
||||
item_names.DEVOURING_ONES: "(Zerg Mercenary)",
|
||||
item_names.HUNTER_KILLERS: "(Zerg Mercenary)",
|
||||
item_names.TORRASQUE_MERC: "(Zerg Mercenary)",
|
||||
item_names.HUNTERLING: "(Zerg Mercenary)",
|
||||
item_names.YGGDRASIL: "(Zerg Mercenary)",
|
||||
item_names.CAUSTIC_HORRORS: "(Zerg Mercenary)",
|
||||
|
||||
item_names.SPORE_CRAWLER: "(Zerg Building)",
|
||||
item_names.SPINE_CRAWLER: "(Zerg Building)",
|
||||
item_names.BILE_LAUNCHER: "(Zerg Building)",
|
||||
item_names.INFESTED_BUNKER: "(Zerg Building)",
|
||||
item_names.INFESTED_MISSILE_TURRET: "(Zerg Building)",
|
||||
item_names.NYDUS_WORM: "(Nydus Network)",
|
||||
item_names.ECHIDNA_WORM: "(Nydus Network)",
|
||||
|
||||
item_names.ZEALOT: "(Gateway, Aiur)",
|
||||
item_names.CENTURION: "(Gateway, Nerazim)",
|
||||
item_names.SENTINEL: "(Gateway, Purifier)",
|
||||
item_names.SUPPLICANT: "(Gateway, Tal'darim)",
|
||||
item_names.STALKER: "(Gateway, Nerazim)",
|
||||
item_names.INSTIGATOR: "(Gateway, Purifier)",
|
||||
item_names.SLAYER: "(Gateway, Tal'darim)",
|
||||
item_names.SENTRY: "(Gateway, Aiur)",
|
||||
item_names.ENERGIZER: "(Gateway, Purifier)",
|
||||
item_names.HAVOC: "(Gateway, Tal'darim)",
|
||||
item_names.HIGH_TEMPLAR: "(Gateway, Aiur)",
|
||||
item_names.SIGNIFIER: "(Gateway, Nerazim)",
|
||||
item_names.ASCENDANT: "(Gateway, Tal'darim)",
|
||||
item_names.DARK_TEMPLAR: "(Gateway, Nerazim)",
|
||||
item_names.AVENGER: "(Gateway, Aiur)",
|
||||
item_names.BLOOD_HUNTER: "(Gateway, Tal'darim)",
|
||||
item_names.DRAGOON: "(Gateway, Aiur)",
|
||||
item_names.DARK_ARCHON: "(Gateway, Nerazim)",
|
||||
item_names.ADEPT: "(Gateway, Purifier)",
|
||||
item_names.OBSERVER: "(Robotics Facility)",
|
||||
item_names.WARP_PRISM: "(Robotics Facility)",
|
||||
item_names.IMMORTAL: "(Robotics Facility, Aiur)",
|
||||
item_names.ANNIHILATOR: "(Robotics Facility, Nerazim)",
|
||||
item_names.VANGUARD: "(Robotics Facility, Tal'darim)",
|
||||
item_names.STALWART: "(Robotics Facility, Purifier)",
|
||||
item_names.COLOSSUS: "(Robotics Facility, Purifier)",
|
||||
item_names.WRATHWALKER: "(Robotics Facility, Tal'darim)",
|
||||
item_names.REAVER: "(Robotics Facility, Aiur)",
|
||||
item_names.DISRUPTOR: "(Robotics Facility, Purifier)",
|
||||
item_names.PHOENIX: "(Stargate, Aiur)",
|
||||
item_names.MIRAGE: "(Stargate, Purifier)",
|
||||
item_names.SKIRMISHER: "(Stargate, Tal'darim)",
|
||||
item_names.CORSAIR: "(Stargate, Nerazim)",
|
||||
item_names.VOID_RAY: "(Stargate, Nerazim)",
|
||||
item_names.DESTROYER: "(Stargate, Tal'darim)",
|
||||
item_names.PULSAR: "(Stargate, Aiur)",
|
||||
item_names.DAWNBRINGER: "(Stargate, Purifier)",
|
||||
item_names.SCOUT: "(Stargate, Aiur)",
|
||||
item_names.OPPRESSOR: "(Stargate, Tal'darim)",
|
||||
item_names.CALADRIUS: "(Stargate, Purifier)",
|
||||
item_names.MISTWING: "(Stargate, Nerazim)",
|
||||
item_names.CARRIER: "(Stargate, Aiur)",
|
||||
item_names.SKYLORD: "(Stargate, Tal'darim)",
|
||||
item_names.TRIREME: "(Stargate, Purifier)",
|
||||
item_names.TEMPEST: "(Stargate, Purifier)",
|
||||
item_names.MOTHERSHIP: "(Stargate, Tal'darim)",
|
||||
item_names.ARBITER: "(Stargate, Aiur)",
|
||||
item_names.ORACLE: "(Stargate, Nerazim)",
|
||||
|
||||
item_names.PHOTON_CANNON: "(Protoss Building)",
|
||||
item_names.KHAYDARIN_MONOLITH: "(Protoss Building)",
|
||||
item_names.SHIELD_BATTERY: "(Protoss Building)",
|
||||
}
|
||||
1127
worlds/sc2/item/item_descriptions.py
Normal file
1127
worlds/sc2/item/item_descriptions.py
Normal file
File diff suppressed because it is too large
Load Diff
902
worlds/sc2/item/item_groups.py
Normal file
902
worlds/sc2/item/item_groups.py
Normal file
@@ -0,0 +1,902 @@
|
||||
import typing
|
||||
from . import item_tables, item_names
|
||||
from .item_tables import key_item_table
|
||||
from ..mission_tables import campaign_mission_table, SC2Campaign, SC2Mission, SC2Race
|
||||
|
||||
"""
|
||||
Item name groups, given to Archipelago and used in YAMLs and /received filtering.
|
||||
For non-developers the following will be useful:
|
||||
* Items with a bracket get groups named after the unbracketed part
|
||||
* eg. "Advanced Healing AI (Medivac)" is accessible as "Advanced Healing AI"
|
||||
* The exception to this are item names that would be ambiguous (eg. "Resource Efficiency")
|
||||
* Item flaggroups get unique groups as well as combined groups for numbered flaggroups
|
||||
* eg. "Unit" contains all units, "Armory" contains "Armory 1" through "Armory 6"
|
||||
* The best place to look these up is at the bottom of Items.py
|
||||
* Items that have a parent are grouped together
|
||||
* eg. "Zergling Items" contains all items that have "Zergling" as a parent
|
||||
* These groups do NOT contain the parent item
|
||||
* This currently does not include items with multiple potential parents, like some LotV unit upgrades
|
||||
* All items are grouped by their race ("Terran", "Protoss", "Zerg", "Any")
|
||||
* Hand-crafted item groups can be found at the bottom of this file
|
||||
"""
|
||||
|
||||
item_name_groups: typing.Dict[str, typing.List[str]] = {}
|
||||
|
||||
# Groups for use in world logic
|
||||
item_name_groups["Missions"] = ["Beat " + mission.mission_name for mission in SC2Mission]
|
||||
item_name_groups["WoL Missions"] = ["Beat " + mission.mission_name for mission in campaign_mission_table[SC2Campaign.WOL]] + \
|
||||
["Beat " + mission.mission_name for mission in campaign_mission_table[SC2Campaign.PROPHECY]]
|
||||
|
||||
# These item name groups should not show up in documentation
|
||||
unlisted_item_name_groups = {
|
||||
"Missions", "WoL Missions",
|
||||
item_tables.TerranItemType.Progressive.display_name,
|
||||
item_tables.TerranItemType.Nova_Gear.display_name,
|
||||
item_tables.TerranItemType.Mercenary.display_name,
|
||||
item_tables.ZergItemType.Ability.display_name,
|
||||
item_tables.ZergItemType.Morph.display_name,
|
||||
item_tables.ZergItemType.Strain.display_name,
|
||||
}
|
||||
|
||||
# Some item names only differ in bracketed parts
|
||||
# These items are ambiguous for short-hand name groups
|
||||
bracketless_duplicates: typing.Set[str]
|
||||
# This is a list of names in ItemNames with bracketed parts removed, for internal use
|
||||
_shortened_names = [(name[:name.find(' (')] if '(' in name else name)
|
||||
for name in [item_names.__dict__[name] for name in item_names.__dir__() if not name.startswith('_')]]
|
||||
# Remove the first instance of every short-name from the full item list
|
||||
bracketless_duplicates = set(_shortened_names)
|
||||
for name in bracketless_duplicates:
|
||||
_shortened_names.remove(name)
|
||||
# The remaining short-names are the duplicates
|
||||
bracketless_duplicates = set(_shortened_names)
|
||||
del _shortened_names
|
||||
|
||||
# All items get sorted into their data type
|
||||
for item, data in item_tables.get_full_item_list().items():
|
||||
# Items get assigned to their flaggroup's display type
|
||||
item_name_groups.setdefault(data.type.display_name, []).append(item)
|
||||
# Items with a bracket get a short-hand name group for ease of use in YAMLs
|
||||
if '(' in item:
|
||||
short_name = item[:item.find(' (')]
|
||||
# Ambiguous short-names are dropped
|
||||
if short_name not in bracketless_duplicates:
|
||||
item_name_groups[short_name] = [item]
|
||||
# Short-name groups are unlisted
|
||||
unlisted_item_name_groups.add(short_name)
|
||||
# Items with a parent get assigned to their parent's group
|
||||
if data.parent:
|
||||
# The parent groups need a special name, otherwise they are ambiguous with the parent
|
||||
parent_group = f"{data.parent} Items"
|
||||
item_name_groups.setdefault(parent_group, []).append(item)
|
||||
# Parent groups are unlisted
|
||||
unlisted_item_name_groups.add(parent_group)
|
||||
# All items get assigned to their race's group
|
||||
race_group = data.race.name.capitalize()
|
||||
item_name_groups.setdefault(race_group, []).append(item)
|
||||
|
||||
|
||||
# Hand-made groups
|
||||
class ItemGroupNames:
|
||||
TERRAN_ITEMS = "Terran Items"
|
||||
"""All Terran items"""
|
||||
TERRAN_UNITS = "Terran Units"
|
||||
TERRAN_GENERIC_UPGRADES = "Terran Generic Upgrades"
|
||||
"""+attack/armour upgrades"""
|
||||
BARRACKS_UNITS = "Barracks Units"
|
||||
FACTORY_UNITS = "Factory Units"
|
||||
STARPORT_UNITS = "Starport Units"
|
||||
WOL_UNITS = "WoL Units"
|
||||
WOL_MERCS = "WoL Mercenaries"
|
||||
WOL_BUILDINGS = "WoL Buildings"
|
||||
WOL_UPGRADES = "WoL Upgrades"
|
||||
WOL_ITEMS = "WoL Items"
|
||||
"""All items from vanilla WoL. Note some items are progressive where level 2 is not vanilla."""
|
||||
NCO_UNITS = "NCO Units"
|
||||
NCO_BUILDINGS = "NCO Buildings"
|
||||
NCO_UNIT_TECHNOLOGY = "NCO Unit Technology"
|
||||
NCO_BASELINE_UPGRADES = "NCO Baseline Upgrades"
|
||||
NCO_UPGRADES = "NCO Upgrades"
|
||||
NOVA_EQUIPMENT = "Nova Equipment"
|
||||
NOVA_WEAPONS = "Nova Weapons"
|
||||
NOVA_GADGETS = "Nova Gadgets"
|
||||
NCO_MAX_PROGRESSIVE_ITEMS = "NCO +Items"
|
||||
"""NCO item groups that should be set to maximum progressive amounts"""
|
||||
NCO_MIN_PROGRESSIVE_ITEMS = "NCO -Items"
|
||||
"""NCO item groups that should be set to minimum progressive amounts (1)"""
|
||||
TERRAN_BUILDINGS = "Terran Buildings"
|
||||
TERRAN_MERCENARIES = "Terran Mercenaries"
|
||||
TERRAN_STIMPACKS = "Terran Stimpacks"
|
||||
TERRAN_PROGRESSIVE_UPGRADES = "Terran Progressive Upgrades"
|
||||
TERRAN_ORIGINAL_PROGRESSIVE_UPGRADES = "Terran Original Progressive Upgrades"
|
||||
"""Progressive items where level 1 appeared in WoL"""
|
||||
MENGSK_UNITS = "Mengsk Units"
|
||||
TERRAN_VETERANCY_UNITS = "Terran Veterancy Units"
|
||||
ORBITAL_COMMAND_ABILITIES = "Orbital Command Abilities"
|
||||
WOL_ORBITAL_COMMAND_ABILITIES = "WoL Command Center Abilities"
|
||||
|
||||
ZERG_ITEMS = "Zerg Items"
|
||||
ZERG_UNITS = "Zerg Units"
|
||||
ZERG_NONMORPH_UNITS = "Zerg Non-morph Units"
|
||||
ZERG_GENERIC_UPGRADES = "Zerg Generic Upgrades"
|
||||
"""+attack/armour upgrades"""
|
||||
HOTS_UNITS = "HotS Units"
|
||||
HOTS_BUILDINGS = "HotS Buildings"
|
||||
HOTS_STRAINS = "HotS Strains"
|
||||
"""Vanilla HotS strains (the upgrades you play a mini-mission for)"""
|
||||
HOTS_MUTATIONS = "HotS Mutations"
|
||||
"""Vanilla HotS Mutations (basic toggleable unit upgrades)"""
|
||||
HOTS_GLOBAL_UPGRADES = "HotS Global Upgrades"
|
||||
HOTS_MORPHS = "HotS Morphs"
|
||||
KERRIGAN_ABILITIES = "Kerrigan Abilities"
|
||||
KERRIGAN_HOTS_ABILITIES = "Kerrigan HotS Abilities"
|
||||
KERRIGAN_ACTIVE_ABILITIES = "Kerrigan Active Abilities"
|
||||
KERRIGAN_LOGIC_ACTIVE_ABILITIES = "Kerrigan Logic Active Abilities"
|
||||
KERRIGAN_PASSIVES = "Kerrigan Passives"
|
||||
KERRIGAN_TIER_1 = "Kerrigan Tier 1"
|
||||
KERRIGAN_TIER_2 = "Kerrigan Tier 2"
|
||||
KERRIGAN_TIER_3 = "Kerrigan Tier 3"
|
||||
KERRIGAN_TIER_4 = "Kerrigan Tier 4"
|
||||
KERRIGAN_TIER_5 = "Kerrigan Tier 5"
|
||||
KERRIGAN_TIER_6 = "Kerrigan Tier 6"
|
||||
KERRIGAN_TIER_7 = "Kerrigan Tier 7"
|
||||
KERRIGAN_ULTIMATES = "Kerrigan Ultimates"
|
||||
KERRIGAN_LOGIC_ULTIMATES = "Kerrigan Logic Ultimates"
|
||||
KERRIGAN_NON_ULTIMATES = "Kerrigan Non-Ultimates"
|
||||
KERRIGAN_NON_ULTIMATE_ACTIVE_ABILITIES = "Kerrigan Non-Ultimate Active Abilities"
|
||||
HOTS_ITEMS = "HotS Items"
|
||||
"""All items from vanilla HotS"""
|
||||
OVERLORD_UPGRADES = "Overlord Upgrades"
|
||||
ZERG_MORPHS = "Zerg Morphs"
|
||||
ZERG_MERCENARIES = "Zerg Mercenaries"
|
||||
ZERG_BUILDINGS = "Zerg Buildings"
|
||||
INF_TERRAN_ITEMS = "Infested Terran Items"
|
||||
"""All items from Stukov co-op subfaction"""
|
||||
INF_TERRAN_UNITS = "Infested Terran Units"
|
||||
INF_TERRAN_UPGRADES = "Infested Terran Upgrades"
|
||||
|
||||
PROTOSS_ITEMS = "Protoss Items"
|
||||
PROTOSS_UNITS = "Protoss Units"
|
||||
PROTOSS_GENERIC_UPGRADES = "Protoss Generic Upgrades"
|
||||
"""+attack/armour upgrades"""
|
||||
GATEWAY_UNITS = "Gateway Units"
|
||||
ROBO_UNITS = "Robo Units"
|
||||
STARGATE_UNITS = "Stargate Units"
|
||||
PROPHECY_UNITS = "Prophecy Units"
|
||||
PROPHECY_BUILDINGS = "Prophecy Buildings"
|
||||
LOTV_UNITS = "LotV Units"
|
||||
LOTV_ITEMS = "LotV Items"
|
||||
LOTV_GLOBAL_UPGRADES = "LotV Global Upgrades"
|
||||
SOA_ITEMS = "SOA"
|
||||
PROTOSS_GLOBAL_UPGRADES = "Protoss Global Upgrades"
|
||||
PROTOSS_BUILDINGS = "Protoss Buildings"
|
||||
WAR_COUNCIL = "Protoss War Council Upgrades"
|
||||
AIUR_UNITS = "Aiur"
|
||||
NERAZIM_UNITS = "Nerazim"
|
||||
TAL_DARIM_UNITS = "Tal'Darim"
|
||||
PURIFIER_UNITS = "Purifier"
|
||||
|
||||
VANILLA_ITEMS = "Vanilla Items"
|
||||
OVERPOWERED_ITEMS = "Overpowered Items"
|
||||
UNRELEASED_ITEMS = "Unreleased Items"
|
||||
LEGACY_ITEMS = "Legacy Items"
|
||||
|
||||
KEYS = "Keys"
|
||||
|
||||
@classmethod
|
||||
def get_all_group_names(cls) -> typing.Set[str]:
|
||||
return {
|
||||
name for identifier, name in cls.__dict__.items()
|
||||
if not identifier.startswith('_')
|
||||
and not identifier.startswith('get_')
|
||||
}
|
||||
|
||||
|
||||
# Terran
|
||||
item_name_groups[ItemGroupNames.TERRAN_ITEMS] = terran_items = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.race == SC2Race.TERRAN
|
||||
]
|
||||
item_name_groups[ItemGroupNames.TERRAN_UNITS] = terran_units = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.type in (
|
||||
item_tables.TerranItemType.Unit, item_tables.TerranItemType.Unit_2, item_tables.TerranItemType.Mercenary)
|
||||
]
|
||||
item_name_groups[ItemGroupNames.TERRAN_GENERIC_UPGRADES] = terran_generic_upgrades = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.type == item_tables.TerranItemType.Upgrade
|
||||
]
|
||||
barracks_wa_group = [
|
||||
item_names.MARINE, item_names.FIREBAT, item_names.MARAUDER,
|
||||
item_names.REAPER, item_names.GHOST, item_names.SPECTRE, item_names.HERC, item_names.AEGIS_GUARD,
|
||||
item_names.EMPERORS_SHADOW, item_names.DOMINION_TROOPER, item_names.SON_OF_KORHAL,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.BARRACKS_UNITS] = barracks_units = (barracks_wa_group + [
|
||||
item_names.MEDIC,
|
||||
item_names.FIELD_RESPONSE_THETA,
|
||||
])
|
||||
factory_wa_group = [
|
||||
item_names.HELLION, item_names.VULTURE, item_names.GOLIATH, item_names.DIAMONDBACK,
|
||||
item_names.SIEGE_TANK, item_names.THOR, item_names.PREDATOR,
|
||||
item_names.CYCLONE, item_names.WARHOUND, item_names.SHOCK_DIVISION, item_names.BLACKHAMMER,
|
||||
item_names.BULWARK_COMPANY,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.FACTORY_UNITS] = factory_units = (factory_wa_group + [
|
||||
item_names.WIDOW_MINE,
|
||||
])
|
||||
starport_wa_group = [
|
||||
item_names.WRAITH, item_names.VIKING, item_names.BANSHEE,
|
||||
item_names.BATTLECRUISER, item_names.RAVEN_HUNTER_SEEKER_WEAPON,
|
||||
item_names.LIBERATOR, item_names.VALKYRIE, item_names.PRIDE_OF_AUGUSTRGRAD, item_names.SKY_FURY,
|
||||
item_names.EMPERORS_GUARDIAN, item_names.NIGHT_HAWK, item_names.NIGHT_WOLF,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.STARPORT_UNITS] = starport_units = [
|
||||
item_names.MEDIVAC, item_names.WRAITH, item_names.VIKING, item_names.BANSHEE,
|
||||
item_names.BATTLECRUISER, item_names.HERCULES, item_names.SCIENCE_VESSEL, item_names.RAVEN,
|
||||
item_names.LIBERATOR, item_names.VALKYRIE, item_names.PRIDE_OF_AUGUSTRGRAD, item_names.SKY_FURY,
|
||||
item_names.EMPERORS_GUARDIAN, item_names.NIGHT_HAWK, item_names.NIGHT_WOLF,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.TERRAN_MERCENARIES] = terran_mercenaries = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.type == item_tables.TerranItemType.Mercenary
|
||||
]
|
||||
item_name_groups[ItemGroupNames.NCO_UNITS] = nco_units = [
|
||||
item_names.MARINE, item_names.MARAUDER, item_names.REAPER,
|
||||
item_names.HELLION, item_names.GOLIATH, item_names.SIEGE_TANK,
|
||||
item_names.RAVEN, item_names.LIBERATOR, item_names.BANSHEE, item_names.BATTLECRUISER,
|
||||
item_names.HERC, # From that one bonus objective in mission 5
|
||||
]
|
||||
item_name_groups[ItemGroupNames.NCO_BUILDINGS] = nco_buildings = [
|
||||
item_names.BUNKER, item_names.MISSILE_TURRET, item_names.PLANETARY_FORTRESS,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.NOVA_EQUIPMENT] = nova_equipment = [
|
||||
*[item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.type == item_tables.TerranItemType.Nova_Gear],
|
||||
item_names.NOVA_PROGRESSIVE_STEALTH_SUIT_MODULE,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.NOVA_WEAPONS] = nova_weapons = [
|
||||
item_names.NOVA_C20A_CANISTER_RIFLE,
|
||||
item_names.NOVA_HELLFIRE_SHOTGUN,
|
||||
item_names.NOVA_PLASMA_RIFLE,
|
||||
item_names.NOVA_MONOMOLECULAR_BLADE,
|
||||
item_names.NOVA_BLAZEFIRE_GUNBLADE,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.NOVA_GADGETS] = nova_gadgets = [
|
||||
item_names.NOVA_STIM_INFUSION,
|
||||
item_names.NOVA_PULSE_GRENADES,
|
||||
item_names.NOVA_FLASHBANG_GRENADES,
|
||||
item_names.NOVA_IONIC_FORCE_FIELD,
|
||||
item_names.NOVA_HOLO_DECOY,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.WOL_UNITS] = wol_units = [
|
||||
item_names.MARINE, item_names.MEDIC, item_names.FIREBAT, item_names.MARAUDER, item_names.REAPER,
|
||||
item_names.HELLION, item_names.VULTURE, item_names.GOLIATH, item_names.DIAMONDBACK, item_names.SIEGE_TANK,
|
||||
item_names.MEDIVAC, item_names.WRAITH, item_names.VIKING, item_names.BANSHEE, item_names.BATTLECRUISER,
|
||||
item_names.GHOST, item_names.SPECTRE, item_names.THOR,
|
||||
item_names.PREDATOR, item_names.HERCULES,
|
||||
item_names.SCIENCE_VESSEL, item_names.RAVEN,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.WOL_MERCS] = wol_mercs = [
|
||||
item_names.WAR_PIGS, item_names.DEVIL_DOGS, item_names.HAMMER_SECURITIES,
|
||||
item_names.SPARTAN_COMPANY, item_names.SIEGE_BREAKERS,
|
||||
item_names.HELS_ANGELS, item_names.DUSK_WINGS, item_names.JACKSONS_REVENGE,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.WOL_BUILDINGS] = wol_buildings = [
|
||||
item_names.BUNKER, item_names.MISSILE_TURRET, item_names.SENSOR_TOWER,
|
||||
item_names.PERDITION_TURRET, item_names.PLANETARY_FORTRESS,
|
||||
item_names.HIVE_MIND_EMULATOR, item_names.PSI_DISRUPTER,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.TERRAN_BUILDINGS] = terran_buildings = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.type == item_tables.TerranItemType.Building or item_name in wol_buildings
|
||||
]
|
||||
item_name_groups[ItemGroupNames.MENGSK_UNITS] = [
|
||||
item_names.AEGIS_GUARD, item_names.EMPERORS_SHADOW,
|
||||
item_names.SHOCK_DIVISION, item_names.BLACKHAMMER,
|
||||
item_names.PRIDE_OF_AUGUSTRGRAD, item_names.SKY_FURY,
|
||||
item_names.DOMINION_TROOPER,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.TERRAN_VETERANCY_UNITS] = [
|
||||
item_names.AEGIS_GUARD, item_names.EMPERORS_SHADOW, item_names.SHOCK_DIVISION, item_names.BLACKHAMMER,
|
||||
item_names.PRIDE_OF_AUGUSTRGRAD, item_names.SKY_FURY, item_names.SON_OF_KORHAL, item_names.FIELD_RESPONSE_THETA,
|
||||
item_names.BULWARK_COMPANY, item_names.NIGHT_HAWK, item_names.EMPERORS_GUARDIAN, item_names.NIGHT_WOLF,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.ORBITAL_COMMAND_ABILITIES] = orbital_command_abilities = [
|
||||
item_names.COMMAND_CENTER_SCANNER_SWEEP,
|
||||
item_names.COMMAND_CENTER_MULE,
|
||||
item_names.COMMAND_CENTER_EXTRA_SUPPLIES,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.WOL_ORBITAL_COMMAND_ABILITIES] = wol_orbital_command_abilities = [
|
||||
item_names.COMMAND_CENTER_SCANNER_SWEEP,
|
||||
item_names.COMMAND_CENTER_MULE,
|
||||
]
|
||||
spider_mine_sources = [
|
||||
item_names.VULTURE,
|
||||
item_names.REAPER_SPIDER_MINES,
|
||||
item_names.SIEGE_TANK_SPIDER_MINES,
|
||||
item_names.RAVEN_SPIDER_MINES,
|
||||
]
|
||||
|
||||
# Terran Upgrades
|
||||
item_name_groups[ItemGroupNames.WOL_UPGRADES] = wol_upgrades = [
|
||||
# Armory Base
|
||||
item_names.BUNKER_PROJECTILE_ACCELERATOR, item_names.BUNKER_NEOSTEEL_BUNKER,
|
||||
item_names.MISSILE_TURRET_TITANIUM_HOUSING, item_names.MISSILE_TURRET_HELLSTORM_BATTERIES,
|
||||
item_names.SCV_ADVANCED_CONSTRUCTION, item_names.SCV_DUAL_FUSION_WELDERS,
|
||||
item_names.PROGRESSIVE_FIRE_SUPPRESSION_SYSTEM, item_names.COMMAND_CENTER_MULE, item_names.COMMAND_CENTER_SCANNER_SWEEP,
|
||||
# Armory Infantry
|
||||
item_names.MARINE_PROGRESSIVE_STIMPACK, item_names.MARINE_COMBAT_SHIELD,
|
||||
item_names.MEDIC_ADVANCED_MEDIC_FACILITIES, item_names.MEDIC_STABILIZER_MEDPACKS,
|
||||
item_names.FIREBAT_INCINERATOR_GAUNTLETS, item_names.FIREBAT_JUGGERNAUT_PLATING,
|
||||
item_names.MARAUDER_CONCUSSIVE_SHELLS, item_names.MARAUDER_KINETIC_FOAM,
|
||||
item_names.REAPER_U238_ROUNDS, item_names.REAPER_G4_CLUSTERBOMB,
|
||||
# Armory Vehicles
|
||||
item_names.HELLION_TWIN_LINKED_FLAMETHROWER, item_names.HELLION_THERMITE_FILAMENTS,
|
||||
item_names.SPIDER_MINE_CERBERUS_MINE, item_names.VULTURE_PROGRESSIVE_REPLENISHABLE_MAGAZINE,
|
||||
item_names.GOLIATH_MULTI_LOCK_WEAPONS_SYSTEM, item_names.GOLIATH_ARES_CLASS_TARGETING_SYSTEM,
|
||||
item_names.DIAMONDBACK_PROGRESSIVE_TRI_LITHIUM_POWER_CELL, item_names.DIAMONDBACK_SHAPED_HULL,
|
||||
item_names.SIEGE_TANK_MAELSTROM_ROUNDS, item_names.SIEGE_TANK_SHAPED_BLAST,
|
||||
# Armory Starships
|
||||
item_names.MEDIVAC_RAPID_DEPLOYMENT_TUBE, item_names.MEDIVAC_ADVANCED_HEALING_AI,
|
||||
item_names.WRAITH_PROGRESSIVE_TOMAHAWK_POWER_CELLS, item_names.WRAITH_DISPLACEMENT_FIELD,
|
||||
item_names.VIKING_RIPWAVE_MISSILES, item_names.VIKING_PHOBOS_CLASS_WEAPONS_SYSTEM,
|
||||
item_names.BANSHEE_PROGRESSIVE_CROSS_SPECTRUM_DAMPENERS, item_names.BANSHEE_SHOCKWAVE_MISSILE_BATTERY,
|
||||
item_names.BATTLECRUISER_PROGRESSIVE_MISSILE_PODS, item_names.BATTLECRUISER_PROGRESSIVE_DEFENSIVE_MATRIX,
|
||||
# Armory Dominion
|
||||
item_names.GHOST_OCULAR_IMPLANTS, item_names.GHOST_CRIUS_SUIT,
|
||||
item_names.SPECTRE_PSIONIC_LASH, item_names.SPECTRE_NYX_CLASS_CLOAKING_MODULE,
|
||||
item_names.THOR_330MM_BARRAGE_CANNON, item_names.THOR_PROGRESSIVE_IMMORTALITY_PROTOCOL,
|
||||
# Lab Zerg
|
||||
item_names.BUNKER_FORTIFIED_BUNKER, item_names.BUNKER_SHRIKE_TURRET,
|
||||
item_names.PROGRESSIVE_REGENERATIVE_BIO_STEEL, item_names.CELLULAR_REACTOR,
|
||||
# Other 3 levels are units/buildings (Perdition, PF, Hercules, Predator, HME, Psi Disrupter)
|
||||
# Lab Protoss
|
||||
item_names.VANADIUM_PLATING, item_names.ULTRA_CAPACITORS,
|
||||
item_names.AUTOMATED_REFINERY, item_names.MICRO_FILTERING,
|
||||
item_names.ORBITAL_DEPOTS, item_names.COMMAND_CENTER_COMMAND_CENTER_REACTOR,
|
||||
item_names.ORBITAL_STRIKE, item_names.TECH_REACTOR,
|
||||
# Other level is units (Raven, Science Vessel)
|
||||
]
|
||||
item_name_groups[ItemGroupNames.TERRAN_STIMPACKS] = terran_stimpacks = [
|
||||
item_names.MARINE_PROGRESSIVE_STIMPACK,
|
||||
item_names.MARAUDER_PROGRESSIVE_STIMPACK,
|
||||
item_names.REAPER_PROGRESSIVE_STIMPACK,
|
||||
item_names.FIREBAT_PROGRESSIVE_STIMPACK,
|
||||
item_names.HELLION_PROGRESSIVE_STIMPACK,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.TERRAN_ORIGINAL_PROGRESSIVE_UPGRADES] = terran_original_progressive_upgrades = [
|
||||
item_names.PROGRESSIVE_FIRE_SUPPRESSION_SYSTEM,
|
||||
item_names.MARINE_PROGRESSIVE_STIMPACK,
|
||||
item_names.VULTURE_PROGRESSIVE_REPLENISHABLE_MAGAZINE,
|
||||
item_names.DIAMONDBACK_PROGRESSIVE_TRI_LITHIUM_POWER_CELL,
|
||||
item_names.WRAITH_PROGRESSIVE_TOMAHAWK_POWER_CELLS,
|
||||
item_names.BANSHEE_PROGRESSIVE_CROSS_SPECTRUM_DAMPENERS,
|
||||
item_names.BATTLECRUISER_PROGRESSIVE_MISSILE_PODS,
|
||||
item_names.BATTLECRUISER_PROGRESSIVE_DEFENSIVE_MATRIX,
|
||||
item_names.THOR_PROGRESSIVE_IMMORTALITY_PROTOCOL,
|
||||
item_names.PROGRESSIVE_REGENERATIVE_BIO_STEEL,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.NCO_BASELINE_UPGRADES] = nco_baseline_upgrades = [
|
||||
item_names.BUNKER_NEOSTEEL_BUNKER, # Baseline from mission 2
|
||||
item_names.BUNKER_FORTIFIED_BUNKER, # Baseline from mission 2
|
||||
item_names.MARINE_COMBAT_SHIELD, # Baseline from mission 2
|
||||
item_names.MARAUDER_KINETIC_FOAM, # Baseline outside WOL
|
||||
item_names.MARAUDER_CONCUSSIVE_SHELLS, # Baseline from mission 2
|
||||
item_names.REAPER_BALLISTIC_FLIGHTSUIT, # Baseline from mission 2
|
||||
item_names.HELLION_HELLBAT, # Baseline from mission 3
|
||||
item_names.GOLIATH_INTERNAL_TECH_MODULE, # Baseline from mission 4
|
||||
item_names.GOLIATH_SHAPED_HULL,
|
||||
# ItemNames.GOLIATH_RESOURCE_EFFICIENCY, # Supply savings baseline in NCO, mineral savings is non-NCO
|
||||
item_names.SIEGE_TANK_SHAPED_HULL, # Baseline NCO gives +10; this upgrade gives +25
|
||||
item_names.SIEGE_TANK_SHAPED_BLAST, # Baseline from mission 3
|
||||
item_names.LIBERATOR_RAID_ARTILLERY, # Baseline in mission 5
|
||||
item_names.RAVEN_BIO_MECHANICAL_REPAIR_DRONE, # Baseline in mission 5
|
||||
item_names.BATTLECRUISER_TACTICAL_JUMP,
|
||||
item_names.BATTLECRUISER_MOIRAI_IMPULSE_DRIVE,
|
||||
item_names.PROGRESSIVE_FIRE_SUPPRESSION_SYSTEM, # Baseline from mission 2
|
||||
item_names.ORBITAL_DEPOTS, # Baseline from mission 2
|
||||
item_names.COMMAND_CENTER_SCANNER_SWEEP, # In NCO you must actually morph Command Center into Orbital Command
|
||||
item_names.COMMAND_CENTER_EXTRA_SUPPLIES, # But in AP this works WoL-style
|
||||
] + nco_buildings
|
||||
item_name_groups[ItemGroupNames.NCO_UNIT_TECHNOLOGY] = nco_unit_technology = [
|
||||
item_names.MARINE_LASER_TARGETING_SYSTEM,
|
||||
item_names.MARINE_PROGRESSIVE_STIMPACK,
|
||||
item_names.MARINE_MAGRAIL_MUNITIONS,
|
||||
item_names.MARINE_OPTIMIZED_LOGISTICS,
|
||||
item_names.MARAUDER_LASER_TARGETING_SYSTEM,
|
||||
item_names.MARAUDER_INTERNAL_TECH_MODULE,
|
||||
item_names.MARAUDER_PROGRESSIVE_STIMPACK,
|
||||
item_names.MARAUDER_MAGRAIL_MUNITIONS,
|
||||
item_names.REAPER_SPIDER_MINES,
|
||||
item_names.REAPER_LASER_TARGETING_SYSTEM,
|
||||
item_names.REAPER_PROGRESSIVE_STIMPACK,
|
||||
item_names.REAPER_ADVANCED_CLOAKING_FIELD,
|
||||
# Reaper special ordnance gives anti-building attack, which is baseline in AP
|
||||
item_names.HELLION_JUMP_JETS,
|
||||
item_names.HELLION_PROGRESSIVE_STIMPACK,
|
||||
item_names.HELLION_SMART_SERVOS,
|
||||
item_names.HELLION_OPTIMIZED_LOGISTICS,
|
||||
item_names.HELLION_THERMITE_FILAMENTS, # Called Infernal Pre-Igniter in NCO
|
||||
item_names.GOLIATH_ARES_CLASS_TARGETING_SYSTEM, # Called Laser Targeting System in NCO
|
||||
item_names.GOLIATH_JUMP_JETS,
|
||||
item_names.GOLIATH_OPTIMIZED_LOGISTICS,
|
||||
item_names.GOLIATH_MULTI_LOCK_WEAPONS_SYSTEM,
|
||||
item_names.SIEGE_TANK_SPIDER_MINES,
|
||||
item_names.SIEGE_TANK_JUMP_JETS,
|
||||
item_names.SIEGE_TANK_INTERNAL_TECH_MODULE,
|
||||
item_names.SIEGE_TANK_SMART_SERVOS,
|
||||
# Tanks can't get Laser targeting system in NCO
|
||||
item_names.BANSHEE_INTERNAL_TECH_MODULE,
|
||||
item_names.BANSHEE_PROGRESSIVE_CROSS_SPECTRUM_DAMPENERS,
|
||||
item_names.BANSHEE_SHOCKWAVE_MISSILE_BATTERY, # Banshee Special Ordnance
|
||||
# Banshees can't get laser targeting systems in NCO
|
||||
item_names.LIBERATOR_CLOAK,
|
||||
item_names.LIBERATOR_SMART_SERVOS,
|
||||
item_names.LIBERATOR_OPTIMIZED_LOGISTICS,
|
||||
# Liberators can't get laser targeting system in NCO
|
||||
item_names.RAVEN_SPIDER_MINES,
|
||||
item_names.RAVEN_INTERNAL_TECH_MODULE,
|
||||
item_names.RAVEN_RAILGUN_TURRET, # Raven Magrail Munitions
|
||||
item_names.RAVEN_HUNTER_SEEKER_WEAPON, # Raven Special Ordnance
|
||||
item_names.BATTLECRUISER_INTERNAL_TECH_MODULE,
|
||||
item_names.BATTLECRUISER_CLOAK,
|
||||
item_names.BATTLECRUISER_ATX_LASER_BATTERY, # Battlecruiser Special Ordnance
|
||||
item_names.PROGRESSIVE_REGENERATIVE_BIO_STEEL,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.NCO_UPGRADES] = nco_upgrades = nco_baseline_upgrades + nco_unit_technology
|
||||
item_name_groups[ItemGroupNames.NCO_MAX_PROGRESSIVE_ITEMS] = nco_unit_technology + nova_equipment + terran_generic_upgrades
|
||||
item_name_groups[ItemGroupNames.NCO_MIN_PROGRESSIVE_ITEMS] = nco_units + nco_baseline_upgrades
|
||||
item_name_groups[ItemGroupNames.TERRAN_PROGRESSIVE_UPGRADES] = terran_progressive_items = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.type in (item_tables.TerranItemType.Progressive, item_tables.TerranItemType.Progressive_2)
|
||||
]
|
||||
item_name_groups[ItemGroupNames.WOL_ITEMS] = vanilla_wol_items = (
|
||||
wol_units
|
||||
+ wol_buildings
|
||||
+ wol_mercs
|
||||
+ wol_upgrades
|
||||
+ orbital_command_abilities
|
||||
+ terran_generic_upgrades
|
||||
)
|
||||
|
||||
# Zerg
|
||||
item_name_groups[ItemGroupNames.ZERG_ITEMS] = zerg_items = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.race == SC2Race.ZERG
|
||||
]
|
||||
item_name_groups[ItemGroupNames.ZERG_BUILDINGS] = zerg_buildings = [
|
||||
item_names.SPINE_CRAWLER,
|
||||
item_names.SPORE_CRAWLER,
|
||||
item_names.BILE_LAUNCHER,
|
||||
item_names.INFESTED_BUNKER,
|
||||
item_names.INFESTED_MISSILE_TURRET,
|
||||
item_names.NYDUS_WORM,
|
||||
item_names.ECHIDNA_WORM]
|
||||
item_name_groups[ItemGroupNames.ZERG_NONMORPH_UNITS] = zerg_nonmorph_units = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.type in (
|
||||
item_tables.ZergItemType.Unit, item_tables.ZergItemType.Mercenary
|
||||
)
|
||||
and item_name not in zerg_buildings
|
||||
]
|
||||
item_name_groups[ItemGroupNames.ZERG_MORPHS] = zerg_morphs = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items() if item_data.type == item_tables.ZergItemType.Morph
|
||||
]
|
||||
item_name_groups[ItemGroupNames.ZERG_UNITS] = zerg_units = zerg_nonmorph_units + zerg_morphs
|
||||
# For W/A upgrades
|
||||
zerg_ground_units = [
|
||||
item_names.ZERGLING, item_names.SWARM_QUEEN, item_names.ROACH, item_names.HYDRALISK, item_names.ABERRATION,
|
||||
item_names.SWARM_HOST, item_names.INFESTOR, item_names.ULTRALISK, item_names.ZERGLING_BANELING_ASPECT,
|
||||
item_names.HYDRALISK_LURKER_ASPECT, item_names.HYDRALISK_IMPALER_ASPECT, item_names.ULTRALISK_TYRANNOZOR_ASPECT,
|
||||
item_names.ROACH_RAVAGER_ASPECT, item_names.DEFILER, item_names.ROACH_PRIMAL_IGNITER_ASPECT,
|
||||
item_names.PYGALISK,
|
||||
item_names.INFESTED_MARINE, item_names.INFESTED_BUNKER, item_names.INFESTED_DIAMONDBACK,
|
||||
item_names.INFESTED_SIEGE_TANK,
|
||||
]
|
||||
zerg_melee_wa = [
|
||||
item_names.ZERGLING, item_names.ABERRATION, item_names.ULTRALISK, item_names.ZERGLING_BANELING_ASPECT,
|
||||
item_names.ULTRALISK_TYRANNOZOR_ASPECT, item_names.INFESTED_BUNKER, item_names.PYGALISK,
|
||||
]
|
||||
zerg_ranged_wa = [
|
||||
item_names.SWARM_QUEEN, item_names.ROACH, item_names.HYDRALISK, item_names.SWARM_HOST,
|
||||
item_names.HYDRALISK_LURKER_ASPECT, item_names.HYDRALISK_IMPALER_ASPECT, item_names.ULTRALISK_TYRANNOZOR_ASPECT,
|
||||
item_names.ROACH_RAVAGER_ASPECT, item_names.ROACH_PRIMAL_IGNITER_ASPECT, item_names.INFESTED_MARINE,
|
||||
item_names.INFESTED_BUNKER, item_names.INFESTED_DIAMONDBACK, item_names.INFESTED_SIEGE_TANK,
|
||||
]
|
||||
zerg_air_units = [
|
||||
item_names.MUTALISK, item_names.MUTALISK_CORRUPTOR_VIPER_ASPECT, item_names.MUTALISK_CORRUPTOR_BROOD_LORD_ASPECT,
|
||||
item_names.CORRUPTOR, item_names.BROOD_QUEEN, item_names.SCOURGE, item_names.MUTALISK_CORRUPTOR_GUARDIAN_ASPECT,
|
||||
item_names.MUTALISK_CORRUPTOR_DEVOURER_ASPECT, item_names.INFESTED_BANSHEE, item_names.INFESTED_LIBERATOR,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.ZERG_GENERIC_UPGRADES] = zerg_generic_upgrades = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.type == item_tables.ZergItemType.Upgrade
|
||||
]
|
||||
item_name_groups[ItemGroupNames.HOTS_UNITS] = hots_units = [
|
||||
item_names.ZERGLING, item_names.SWARM_QUEEN, item_names.ROACH, item_names.HYDRALISK,
|
||||
item_names.ABERRATION, item_names.SWARM_HOST, item_names.MUTALISK,
|
||||
item_names.INFESTOR, item_names.ULTRALISK,
|
||||
item_names.ZERGLING_BANELING_ASPECT,
|
||||
item_names.HYDRALISK_LURKER_ASPECT,
|
||||
item_names.HYDRALISK_IMPALER_ASPECT,
|
||||
item_names.MUTALISK_CORRUPTOR_VIPER_ASPECT,
|
||||
item_names.MUTALISK_CORRUPTOR_BROOD_LORD_ASPECT,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.HOTS_BUILDINGS] = hots_buildings = [
|
||||
item_names.SPINE_CRAWLER,
|
||||
item_names.SPORE_CRAWLER,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.HOTS_MORPHS] = hots_morphs = [
|
||||
item_names.ZERGLING_BANELING_ASPECT,
|
||||
item_names.HYDRALISK_IMPALER_ASPECT,
|
||||
item_names.HYDRALISK_LURKER_ASPECT,
|
||||
item_names.MUTALISK_CORRUPTOR_VIPER_ASPECT,
|
||||
item_names.MUTALISK_CORRUPTOR_BROOD_LORD_ASPECT,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.ZERG_MERCENARIES] = zerg_mercenaries = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items() if item_data.type == item_tables.ZergItemType.Mercenary
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_ABILITIES] = kerrigan_abilities = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items() if item_data.type == item_tables.ZergItemType.Ability
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_PASSIVES] = kerrigan_passives = [
|
||||
item_names.KERRIGAN_HEROIC_FORTITUDE, item_names.KERRIGAN_CHAIN_REACTION,
|
||||
item_names.KERRIGAN_INFEST_BROODLINGS, item_names.KERRIGAN_FURY, item_names.KERRIGAN_ABILITY_EFFICIENCY,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_ACTIVE_ABILITIES] = kerrigan_active_abilities = [
|
||||
item_name for item_name in kerrigan_abilities if item_name not in kerrigan_passives
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_LOGIC_ACTIVE_ABILITIES] = kerrigan_logic_active_abilities = [
|
||||
item_name for item_name in kerrigan_active_abilities if item_name != item_names.KERRIGAN_ASSIMILATION_AURA
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_TIER_1] = kerrigan_tier_1 = [
|
||||
item_names.KERRIGAN_CRUSHING_GRIP, item_names.KERRIGAN_HEROIC_FORTITUDE, item_names.KERRIGAN_LEAPING_STRIKE
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_TIER_2] = kerrigan_tier_2= [
|
||||
item_names.KERRIGAN_CRUSHING_GRIP, item_names.KERRIGAN_CHAIN_REACTION, item_names.KERRIGAN_PSIONIC_SHIFT
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_TIER_3] = kerrigan_tier_3 = [
|
||||
item_names.TWIN_DRONES, item_names.AUTOMATED_EXTRACTORS, item_names.ZERGLING_RECONSTITUTION
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_TIER_4] = kerrigan_tier_4 = [
|
||||
item_names.KERRIGAN_MEND, item_names.KERRIGAN_SPAWN_BANELINGS, item_names.KERRIGAN_WILD_MUTATION
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_TIER_5] = kerrigan_tier_5 = [
|
||||
item_names.MALIGNANT_CREEP, item_names.VESPENE_EFFICIENCY, item_names.OVERLORD_IMPROVED_OVERLORDS
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_TIER_6] = kerrigan_tier_6 = [
|
||||
item_names.KERRIGAN_INFEST_BROODLINGS, item_names.KERRIGAN_FURY, item_names.KERRIGAN_ABILITY_EFFICIENCY
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_TIER_7] = kerrigan_tier_7 = [
|
||||
item_names.KERRIGAN_APOCALYPSE, item_names.KERRIGAN_SPAWN_LEVIATHAN, item_names.KERRIGAN_DROP_PODS
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_ULTIMATES] = kerrigan_ultimates = [
|
||||
*kerrigan_tier_7, item_names.KERRIGAN_ASSIMILATION_AURA, item_names.KERRIGAN_IMMOBILIZATION_WAVE
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_NON_ULTIMATES] = kerrigan_non_ulimates = [
|
||||
item for item in kerrigan_abilities if item not in kerrigan_ultimates
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_LOGIC_ULTIMATES] = kerrigan_logic_ultimates = [
|
||||
item for item in kerrigan_ultimates if item != item_names.KERRIGAN_ASSIMILATION_AURA
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_NON_ULTIMATE_ACTIVE_ABILITIES] = kerrigan_non_ulimate_active_abilities = [
|
||||
item for item in kerrigan_non_ulimates if item in kerrigan_active_abilities
|
||||
]
|
||||
item_name_groups[ItemGroupNames.KERRIGAN_HOTS_ABILITIES] = kerrigan_hots_abilities = [
|
||||
ability for tiers in [
|
||||
kerrigan_tier_1, kerrigan_tier_2, kerrigan_tier_4, kerrigan_tier_6, kerrigan_tier_7
|
||||
] for ability in tiers
|
||||
]
|
||||
|
||||
item_name_groups[ItemGroupNames.OVERLORD_UPGRADES] = [
|
||||
item_names.OVERLORD_ANTENNAE,
|
||||
item_names.OVERLORD_VENTRAL_SACS,
|
||||
item_names.OVERLORD_GENERATE_CREEP,
|
||||
item_names.OVERLORD_PNEUMATIZED_CARAPACE,
|
||||
item_names.OVERLORD_IMPROVED_OVERLORDS,
|
||||
item_names.OVERLORD_OVERSEER_ASPECT,
|
||||
]
|
||||
|
||||
# Zerg Upgrades
|
||||
item_name_groups[ItemGroupNames.HOTS_STRAINS] = hots_strains = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items() if item_data.type == item_tables.ZergItemType.Strain
|
||||
]
|
||||
item_name_groups[ItemGroupNames.HOTS_MUTATIONS] = hots_mutations = [
|
||||
item_names.ZERGLING_HARDENED_CARAPACE, item_names.ZERGLING_ADRENAL_OVERLOAD, item_names.ZERGLING_METABOLIC_BOOST,
|
||||
item_names.BANELING_CORROSIVE_ACID, item_names.BANELING_RUPTURE, item_names.BANELING_REGENERATIVE_ACID,
|
||||
item_names.ROACH_HYDRIODIC_BILE, item_names.ROACH_ADAPTIVE_PLATING, item_names.ROACH_TUNNELING_CLAWS,
|
||||
item_names.HYDRALISK_FRENZY, item_names.HYDRALISK_ANCILLARY_CARAPACE, item_names.HYDRALISK_GROOVED_SPINES,
|
||||
item_names.SWARM_HOST_BURROW, item_names.SWARM_HOST_RAPID_INCUBATION, item_names.SWARM_HOST_PRESSURIZED_GLANDS,
|
||||
item_names.MUTALISK_VICIOUS_GLAIVE, item_names.MUTALISK_RAPID_REGENERATION, item_names.MUTALISK_SUNDERING_GLAIVE,
|
||||
item_names.ULTRALISK_BURROW_CHARGE, item_names.ULTRALISK_TISSUE_ASSIMILATION, item_names.ULTRALISK_MONARCH_BLADES,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.HOTS_GLOBAL_UPGRADES] = hots_global_upgrades = [
|
||||
item_names.ZERGLING_RECONSTITUTION,
|
||||
item_names.OVERLORD_IMPROVED_OVERLORDS,
|
||||
item_names.AUTOMATED_EXTRACTORS,
|
||||
item_names.TWIN_DRONES,
|
||||
item_names.MALIGNANT_CREEP,
|
||||
item_names.VESPENE_EFFICIENCY,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.HOTS_ITEMS] = vanilla_hots_items = (
|
||||
hots_units
|
||||
+ hots_buildings
|
||||
+ kerrigan_hots_abilities
|
||||
+ hots_mutations
|
||||
+ hots_strains
|
||||
+ hots_global_upgrades
|
||||
+ zerg_generic_upgrades
|
||||
)
|
||||
|
||||
# Zerg - Infested Terran (Stukov Co-op)
|
||||
item_name_groups[ItemGroupNames.INF_TERRAN_UNITS] = infterr_units = [
|
||||
item_names.INFESTED_MARINE,
|
||||
item_names.INFESTED_BUNKER,
|
||||
item_names.BULLFROG,
|
||||
item_names.INFESTED_DIAMONDBACK,
|
||||
item_names.INFESTED_SIEGE_TANK,
|
||||
item_names.INFESTED_LIBERATOR,
|
||||
item_names.INFESTED_BANSHEE,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.INF_TERRAN_UPGRADES] = infterr_upgrades = [
|
||||
item_names.INFESTED_SCV_BUILD_CHARGES,
|
||||
item_names.INFESTED_MARINE_PLAGUED_MUNITIONS,
|
||||
item_names.INFESTED_MARINE_RETINAL_AUGMENTATION,
|
||||
item_names.INFESTED_BUNKER_CALCIFIED_ARMOR,
|
||||
item_names.INFESTED_BUNKER_REGENERATIVE_PLATING,
|
||||
item_names.INFESTED_BUNKER_ENGORGED_BUNKERS,
|
||||
item_names.BULLFROG_WILD_MUTATION,
|
||||
item_names.BULLFROG_BROODLINGS,
|
||||
item_names.BULLFROG_HARD_IMPACT,
|
||||
item_names.BULLFROG_RANGE,
|
||||
item_names.INFESTED_DIAMONDBACK_CAUSTIC_MUCUS,
|
||||
item_names.INFESTED_DIAMONDBACK_CONCENTRATED_SPEW,
|
||||
item_names.INFESTED_DIAMONDBACK_PROGRESSIVE_FUNGAL_SNARE,
|
||||
item_names.INFESTED_DIAMONDBACK_VIOLENT_ENZYMES,
|
||||
item_names.INFESTED_SIEGE_TANK_ACIDIC_ENZYMES,
|
||||
item_names.INFESTED_SIEGE_TANK_BALANCED_ROOTS,
|
||||
item_names.INFESTED_SIEGE_TANK_DEEP_TUNNEL,
|
||||
item_names.INFESTED_SIEGE_TANK_PROGRESSIVE_AUTOMATED_MITOSIS,
|
||||
item_names.INFESTED_SIEGE_TANK_SEISMIC_SONAR,
|
||||
item_names.INFESTED_LIBERATOR_CLOUD_DISPERSAL,
|
||||
item_names.INFESTED_LIBERATOR_DEFENDER_MODE,
|
||||
item_names.INFESTED_LIBERATOR_VIRAL_CONTAMINATION,
|
||||
item_names.INFESTED_BANSHEE_FLESHFUSED_TARGETING_OPTICS,
|
||||
item_names.INFESTED_BANSHEE_BRACED_EXOSKELETON,
|
||||
item_names.INFESTED_BANSHEE_RAPID_HIBERNATION,
|
||||
item_names.INFESTED_DIAMONDBACK_FRIGHTFUL_FLESHWELDER,
|
||||
item_names.INFESTED_SIEGE_TANK_FRIGHTFUL_FLESHWELDER,
|
||||
item_names.INFESTED_LIBERATOR_FRIGHTFUL_FLESHWELDER,
|
||||
item_names.INFESTED_BANSHEE_FRIGHTFUL_FLESHWELDER,
|
||||
item_names.INFESTED_MISSILE_TURRET_BIOELECTRIC_PAYLOAD,
|
||||
item_names.INFESTED_MISSILE_TURRET_ACID_SPORE_VENTS,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.INF_TERRAN_ITEMS] = (
|
||||
infterr_units
|
||||
+ infterr_upgrades
|
||||
+ [item_names.INFESTED_MISSILE_TURRET]
|
||||
)
|
||||
|
||||
# Protoss
|
||||
item_name_groups[ItemGroupNames.PROTOSS_ITEMS] = protoss_items = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.race == SC2Race.PROTOSS
|
||||
]
|
||||
item_name_groups[ItemGroupNames.PROTOSS_UNITS] = protoss_units = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.type in (item_tables.ProtossItemType.Unit, item_tables.ProtossItemType.Unit_2)
|
||||
]
|
||||
protoss_ground_wa = [
|
||||
item_names.ZEALOT, item_names.CENTURION, item_names.SENTINEL, item_names.SUPPLICANT,
|
||||
item_names.SENTRY, item_names.ENERGIZER,
|
||||
item_names.STALKER, item_names.INSTIGATOR, item_names.SLAYER, item_names.DRAGOON, item_names.ADEPT,
|
||||
item_names.HIGH_TEMPLAR, item_names.SIGNIFIER, item_names.ASCENDANT,
|
||||
item_names.DARK_TEMPLAR, item_names.BLOOD_HUNTER, item_names.AVENGER,
|
||||
item_names.DARK_ARCHON,
|
||||
item_names.IMMORTAL, item_names.ANNIHILATOR, item_names.VANGUARD, item_names.STALWART,
|
||||
item_names.COLOSSUS, item_names.WRATHWALKER,
|
||||
item_names.REAVER,
|
||||
]
|
||||
protoss_air_wa = [
|
||||
item_names.WARP_PRISM_PHASE_BLASTER,
|
||||
item_names.PHOENIX, item_names.MIRAGE, item_names.CORSAIR, item_names.SKIRMISHER,
|
||||
item_names.VOID_RAY, item_names.DESTROYER, item_names.PULSAR, item_names.DAWNBRINGER,
|
||||
item_names.CARRIER, item_names.SKYLORD, item_names.TRIREME,
|
||||
item_names.SCOUT, item_names.TEMPEST, item_names.MOTHERSHIP,
|
||||
item_names.ARBITER, item_names.ORACLE, item_names.OPPRESSOR,
|
||||
item_names.CALADRIUS, item_names.MISTWING,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.PROTOSS_GENERIC_UPGRADES] = protoss_generic_upgrades = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.type == item_tables.ProtossItemType.Upgrade
|
||||
]
|
||||
item_name_groups[ItemGroupNames.LOTV_UNITS] = lotv_units = [
|
||||
item_names.ZEALOT, item_names.CENTURION, item_names.SENTINEL,
|
||||
item_names.STALKER, item_names.DRAGOON, item_names.ADEPT,
|
||||
item_names.SENTRY, item_names.HAVOC, item_names.ENERGIZER,
|
||||
item_names.HIGH_TEMPLAR, item_names.DARK_ARCHON, item_names.ASCENDANT,
|
||||
item_names.DARK_TEMPLAR, item_names.AVENGER, item_names.BLOOD_HUNTER,
|
||||
item_names.IMMORTAL, item_names.ANNIHILATOR, item_names.VANGUARD,
|
||||
item_names.COLOSSUS, item_names.WRATHWALKER, item_names.REAVER,
|
||||
item_names.PHOENIX, item_names.MIRAGE, item_names.CORSAIR,
|
||||
item_names.VOID_RAY, item_names.DESTROYER, item_names.ARBITER,
|
||||
item_names.CARRIER, item_names.TEMPEST, item_names.MOTHERSHIP,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.PROPHECY_UNITS] = prophecy_units = [
|
||||
item_names.ZEALOT, item_names.STALKER, item_names.HIGH_TEMPLAR, item_names.DARK_TEMPLAR,
|
||||
item_names.OBSERVER, item_names.COLOSSUS,
|
||||
item_names.PHOENIX, item_names.VOID_RAY, item_names.CARRIER,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.PROPHECY_BUILDINGS] = prophecy_buildings = [
|
||||
item_names.PHOTON_CANNON,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.GATEWAY_UNITS] = gateway_units = [
|
||||
item_names.ZEALOT, item_names.CENTURION, item_names.SENTINEL, item_names.SUPPLICANT,
|
||||
item_names.STALKER, item_names.INSTIGATOR, item_names.SLAYER,
|
||||
item_names.SENTRY, item_names.HAVOC, item_names.ENERGIZER,
|
||||
item_names.DRAGOON, item_names.ADEPT, item_names.DARK_ARCHON,
|
||||
item_names.HIGH_TEMPLAR, item_names.SIGNIFIER, item_names.ASCENDANT,
|
||||
item_names.DARK_TEMPLAR, item_names.AVENGER, item_names.BLOOD_HUNTER,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.ROBO_UNITS] = robo_units = [
|
||||
item_names.WARP_PRISM, item_names.OBSERVER,
|
||||
item_names.IMMORTAL, item_names.ANNIHILATOR, item_names.VANGUARD, item_names.STALWART,
|
||||
item_names.COLOSSUS, item_names.WRATHWALKER,
|
||||
item_names.REAVER, item_names.DISRUPTOR,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.STARGATE_UNITS] = stargate_units = [
|
||||
item_names.PHOENIX, item_names.SKIRMISHER, item_names.MIRAGE, item_names.CORSAIR,
|
||||
item_names.VOID_RAY, item_names.DESTROYER, item_names.PULSAR, item_names.DAWNBRINGER,
|
||||
item_names.CARRIER, item_names.SKYLORD, item_names.TRIREME,
|
||||
item_names.TEMPEST, item_names.SCOUT, item_names.MOTHERSHIP,
|
||||
item_names.ARBITER, item_names.ORACLE, item_names.OPPRESSOR,
|
||||
item_names.CALADRIUS, item_names.MISTWING,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.PROTOSS_BUILDINGS] = protoss_buildings = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.type == item_tables.ProtossItemType.Building
|
||||
]
|
||||
item_name_groups[ItemGroupNames.AIUR_UNITS] = [
|
||||
item_names.ZEALOT, item_names.DRAGOON, item_names.SENTRY, item_names.AVENGER, item_names.HIGH_TEMPLAR,
|
||||
item_names.IMMORTAL, item_names.REAVER,
|
||||
item_names.PHOENIX, item_names.SCOUT, item_names.ARBITER, item_names.CARRIER,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.NERAZIM_UNITS] = [
|
||||
item_names.CENTURION, item_names.STALKER, item_names.DARK_TEMPLAR, item_names.SIGNIFIER, item_names.DARK_ARCHON,
|
||||
item_names.ANNIHILATOR,
|
||||
item_names.CORSAIR, item_names.ORACLE, item_names.VOID_RAY, item_names.MISTWING,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.TAL_DARIM_UNITS] = [
|
||||
item_names.SUPPLICANT, item_names.SLAYER, item_names.HAVOC, item_names.BLOOD_HUNTER, item_names.ASCENDANT,
|
||||
item_names.VANGUARD, item_names.WRATHWALKER,
|
||||
item_names.SKIRMISHER, item_names.DESTROYER, item_names.SKYLORD, item_names.MOTHERSHIP, item_names.OPPRESSOR,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.PURIFIER_UNITS] = [
|
||||
item_names.SENTINEL, item_names.ADEPT, item_names.INSTIGATOR, item_names.ENERGIZER,
|
||||
item_names.STALWART, item_names.COLOSSUS, item_names.DISRUPTOR,
|
||||
item_names.MIRAGE, item_names.DAWNBRINGER, item_names.TRIREME, item_names.TEMPEST,
|
||||
item_names.CALADRIUS,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.SOA_ITEMS] = soa_items = [
|
||||
*[item_name for item_name, item_data in item_tables.item_table.items() if item_data.type == item_tables.ProtossItemType.Spear_Of_Adun],
|
||||
item_names.SOA_PROGRESSIVE_PROXY_PYLON,
|
||||
]
|
||||
lotv_soa_items = [item_name for item_name in soa_items if item_name != item_names.SOA_PYLON_OVERCHARGE]
|
||||
item_name_groups[ItemGroupNames.PROTOSS_GLOBAL_UPGRADES] = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items() if item_data.type == item_tables.ProtossItemType.Solarite_Core
|
||||
]
|
||||
item_name_groups[ItemGroupNames.LOTV_GLOBAL_UPGRADES] = lotv_global_upgrades = [
|
||||
item_names.NEXUS_OVERCHARGE,
|
||||
item_names.ORBITAL_ASSIMILATORS,
|
||||
item_names.WARP_HARMONIZATION,
|
||||
item_names.MATRIX_OVERLOAD,
|
||||
item_names.GUARDIAN_SHELL,
|
||||
item_names.RECONSTRUCTION_BEAM,
|
||||
]
|
||||
item_name_groups[ItemGroupNames.WAR_COUNCIL] = war_council_upgrades = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if item_data.type in (item_tables.ProtossItemType.War_Council, item_tables.ProtossItemType.War_Council_2)
|
||||
]
|
||||
|
||||
lotv_war_council_upgrades = [
|
||||
item_name for item_name, item_data in item_tables.item_table.items()
|
||||
if (
|
||||
item_name in war_council_upgrades
|
||||
and item_data.parent in item_name_groups[ItemGroupNames.LOTV_UNITS]
|
||||
# Destroyers get a custom (non-vanilla) buff, not a nerf over their vanilla council state
|
||||
and item_name != item_names.DESTROYER_REFORGED_BLOODSHARD_CORE
|
||||
)
|
||||
]
|
||||
item_name_groups[ItemGroupNames.LOTV_ITEMS] = vanilla_lotv_items = (
|
||||
lotv_units
|
||||
+ protoss_buildings
|
||||
+ lotv_soa_items
|
||||
+ lotv_global_upgrades
|
||||
+ protoss_generic_upgrades
|
||||
+ lotv_war_council_upgrades
|
||||
)
|
||||
|
||||
item_name_groups[ItemGroupNames.VANILLA_ITEMS] = vanilla_items = (
|
||||
vanilla_wol_items + vanilla_hots_items + vanilla_lotv_items
|
||||
)
|
||||
|
||||
item_name_groups[ItemGroupNames.OVERPOWERED_ITEMS] = overpowered_items = [
|
||||
# Terran general
|
||||
item_names.SIEGE_TANK_GRADUATING_RANGE,
|
||||
item_names.RAVEN_HUNTER_SEEKER_WEAPON,
|
||||
item_names.BATTLECRUISER_ATX_LASER_BATTERY,
|
||||
item_names.PROGRESSIVE_REGENERATIVE_BIO_STEEL,
|
||||
item_names.MECHANICAL_KNOW_HOW,
|
||||
item_names.MERCENARY_MUNITIONS,
|
||||
|
||||
# Terran Mind Control
|
||||
item_names.HIVE_MIND_EMULATOR,
|
||||
item_names.PSI_INDOCTRINATOR,
|
||||
item_names.ARGUS_AMPLIFIER,
|
||||
|
||||
# Zerg Mind Control
|
||||
item_names.INFESTOR,
|
||||
|
||||
# Protoss Mind Control
|
||||
item_names.DARK_ARCHON_INDOMITABLE_WILL,
|
||||
|
||||
# Nova
|
||||
item_names.NOVA_PLASMA_RIFLE,
|
||||
|
||||
# Kerrigan
|
||||
item_names.KERRIGAN_APOCALYPSE,
|
||||
item_names.KERRIGAN_DROP_PODS,
|
||||
item_names.KERRIGAN_SPAWN_LEVIATHAN,
|
||||
item_names.KERRIGAN_IMMOBILIZATION_WAVE,
|
||||
|
||||
# SOA
|
||||
item_names.SOA_TIME_STOP,
|
||||
item_names.SOA_SOLAR_LANCE,
|
||||
item_names.SOA_DEPLOY_FENIX,
|
||||
# Note: This is more an issue of having multiple ults at the same time, rather than solar bombardment in particular.
|
||||
# Can be removed from the list if we get an SOA ult combined cooldown or energy cost on it.
|
||||
item_names.SOA_SOLAR_BOMBARDMENT,
|
||||
|
||||
# Protoss general
|
||||
item_names.QUATRO,
|
||||
item_names.MOTHERSHIP_INTEGRATED_POWER,
|
||||
item_names.IMMORTAL_ANNIHILATOR_ADVANCED_TARGETING,
|
||||
|
||||
# Mindless Broodwar garbage
|
||||
item_names.GHOST_BARGAIN_BIN_PRICES,
|
||||
item_names.SPECTRE_BARGAIN_BIN_PRICES,
|
||||
item_names.REAVER_BARGAIN_BIN_PRICES,
|
||||
item_names.SCOUT_SUPPLY_EFFICIENCY,
|
||||
]
|
||||
|
||||
# Items not aimed to be officially released
|
||||
# These need further balancing, and they shouldn't generate normally unless explicitly locked
|
||||
# Added here to not confuse the client
|
||||
item_name_groups[ItemGroupNames.UNRELEASED_ITEMS] = unreleased_items = [
|
||||
item_names.PRIDE_OF_AUGUSTRGRAD,
|
||||
item_names.SKY_FURY,
|
||||
item_names.SHOCK_DIVISION,
|
||||
item_names.BLACKHAMMER,
|
||||
item_names.AEGIS_GUARD,
|
||||
item_names.EMPERORS_SHADOW,
|
||||
item_names.SON_OF_KORHAL,
|
||||
item_names.BULWARK_COMPANY,
|
||||
item_names.FIELD_RESPONSE_THETA,
|
||||
item_names.EMPERORS_GUARDIAN,
|
||||
item_names.NIGHT_HAWK,
|
||||
item_names.NIGHT_WOLF,
|
||||
item_names.EMPERORS_SHADOW_SOVEREIGN_TACTICAL_MISSILES,
|
||||
]
|
||||
|
||||
# A place for traits that were released before but are to be taken down by default.
|
||||
# If an item gets split to multiple ones, the original one should be set deprecated instead (see Orbital Command for an example).
|
||||
# This is a place if you want to nerf or disable by default a previously released trait.
|
||||
# Currently, it disables only the topmost level of the progressives.
|
||||
# Don't place here anything that's present in the vanilla campaigns (if it's overpowered, use overpowered items instead)
|
||||
item_name_groups[ItemGroupNames.LEGACY_ITEMS] = legacy_items = [
|
||||
item_names.ASCENDANT_ARCHON_MERGE,
|
||||
]
|
||||
|
||||
item_name_groups[ItemGroupNames.KEYS] = keys = [
|
||||
item_name for item_name in key_item_table.keys()
|
||||
]
|
||||
957
worlds/sc2/item/item_names.py
Normal file
957
worlds/sc2/item/item_names.py
Normal file
@@ -0,0 +1,957 @@
|
||||
"""
|
||||
A complete collection of Starcraft 2 item names as strings.
|
||||
Users of this data may make some assumptions about the structure of a name:
|
||||
* The upgrade for a unit will end with the unit's name in parentheses
|
||||
* Weapon / armor upgrades may be grouped by a common prefix specified within this file
|
||||
"""
|
||||
|
||||
# Terran Units
|
||||
MARINE = "Marine"
|
||||
MEDIC = "Medic"
|
||||
FIREBAT = "Firebat"
|
||||
MARAUDER = "Marauder"
|
||||
REAPER = "Reaper"
|
||||
HELLION = "Hellion"
|
||||
VULTURE = "Vulture"
|
||||
GOLIATH = "Goliath"
|
||||
DIAMONDBACK = "Diamondback"
|
||||
SIEGE_TANK = "Siege Tank"
|
||||
MEDIVAC = "Medivac"
|
||||
WRAITH = "Wraith"
|
||||
VIKING = "Viking"
|
||||
BANSHEE = "Banshee"
|
||||
BATTLECRUISER = "Battlecruiser"
|
||||
GHOST = "Ghost"
|
||||
SPECTRE = "Spectre"
|
||||
THOR = "Thor"
|
||||
RAVEN = "Raven"
|
||||
SCIENCE_VESSEL = "Science Vessel"
|
||||
PREDATOR = "Predator"
|
||||
HERCULES = "Hercules"
|
||||
# Extended units
|
||||
LIBERATOR = "Liberator"
|
||||
VALKYRIE = "Valkyrie"
|
||||
WIDOW_MINE = "Widow Mine"
|
||||
CYCLONE = "Cyclone"
|
||||
HERC = "HERC"
|
||||
WARHOUND = "Warhound"
|
||||
DOMINION_TROOPER = "Dominion Trooper"
|
||||
# Elites
|
||||
PRIDE_OF_AUGUSTRGRAD = "Pride of Augustgrad"
|
||||
SKY_FURY = "Sky Fury"
|
||||
SHOCK_DIVISION = "Shock Division"
|
||||
BLACKHAMMER = "Blackhammer"
|
||||
AEGIS_GUARD = "Aegis Guard"
|
||||
EMPERORS_SHADOW = "Emperor's Shadow"
|
||||
SON_OF_KORHAL = "Son of Korhal"
|
||||
BULWARK_COMPANY = "Bulwark Company"
|
||||
FIELD_RESPONSE_THETA = "Field Response Theta"
|
||||
EMPERORS_GUARDIAN = "Emperor's Guardian"
|
||||
NIGHT_HAWK = "Night Hawk"
|
||||
NIGHT_WOLF = "Night Wolf"
|
||||
|
||||
# Terran Buildings
|
||||
BUNKER = "Bunker"
|
||||
MISSILE_TURRET = "Missile Turret"
|
||||
SENSOR_TOWER = "Sensor Tower"
|
||||
PLANETARY_FORTRESS = "Planetary Fortress"
|
||||
PERDITION_TURRET = "Perdition Turret"
|
||||
# HIVE_MIND_EMULATOR = "Hive Mind Emulator"# moved to Lab / Global upgrades
|
||||
# PSI_DISRUPTER = "Psi Disrupter" # moved to Lab / Global upgrades
|
||||
DEVASTATOR_TURRET = "Devastator Turret"
|
||||
|
||||
# Terran Weapon / Armor Upgrades
|
||||
TERRAN_UPGRADE_PREFIX = "Progressive Terran"
|
||||
TERRAN_INFANTRY_UPGRADE_PREFIX = f"{TERRAN_UPGRADE_PREFIX} Infantry"
|
||||
TERRAN_VEHICLE_UPGRADE_PREFIX = f"{TERRAN_UPGRADE_PREFIX} Vehicle"
|
||||
TERRAN_SHIP_UPGRADE_PREFIX = f"{TERRAN_UPGRADE_PREFIX} Ship"
|
||||
|
||||
PROGRESSIVE_TERRAN_INFANTRY_WEAPON = f"{TERRAN_INFANTRY_UPGRADE_PREFIX} Weapon"
|
||||
PROGRESSIVE_TERRAN_INFANTRY_ARMOR = f"{TERRAN_INFANTRY_UPGRADE_PREFIX} Armor"
|
||||
PROGRESSIVE_TERRAN_VEHICLE_WEAPON = f"{TERRAN_VEHICLE_UPGRADE_PREFIX} Weapon"
|
||||
PROGRESSIVE_TERRAN_VEHICLE_ARMOR = f"{TERRAN_VEHICLE_UPGRADE_PREFIX} Armor"
|
||||
PROGRESSIVE_TERRAN_SHIP_WEAPON = f"{TERRAN_SHIP_UPGRADE_PREFIX} Weapon"
|
||||
PROGRESSIVE_TERRAN_SHIP_ARMOR = f"{TERRAN_SHIP_UPGRADE_PREFIX} Armor"
|
||||
PROGRESSIVE_TERRAN_WEAPON_UPGRADE = f"{TERRAN_UPGRADE_PREFIX} Weapon Upgrade"
|
||||
PROGRESSIVE_TERRAN_ARMOR_UPGRADE = f"{TERRAN_UPGRADE_PREFIX} Armor Upgrade"
|
||||
PROGRESSIVE_TERRAN_INFANTRY_UPGRADE = f"{TERRAN_INFANTRY_UPGRADE_PREFIX} Upgrade"
|
||||
PROGRESSIVE_TERRAN_VEHICLE_UPGRADE = f"{TERRAN_VEHICLE_UPGRADE_PREFIX} Upgrade"
|
||||
PROGRESSIVE_TERRAN_SHIP_UPGRADE = f"{TERRAN_SHIP_UPGRADE_PREFIX} Upgrade"
|
||||
PROGRESSIVE_TERRAN_WEAPON_ARMOR_UPGRADE = f"{TERRAN_UPGRADE_PREFIX} Weapon/Armor Upgrade"
|
||||
|
||||
# Mercenaries
|
||||
WAR_PIGS = "War Pigs"
|
||||
DEVIL_DOGS = "Devil Dogs"
|
||||
HAMMER_SECURITIES = "Hammer Securities"
|
||||
SPARTAN_COMPANY = "Spartan Company"
|
||||
SIEGE_BREAKERS = "Siege Breakers"
|
||||
HELS_ANGELS = "Hel's Angels"
|
||||
DUSK_WINGS = "Dusk Wings"
|
||||
JACKSONS_REVENGE = "Jackson's Revenge"
|
||||
SKIBIS_ANGELS = "Skibi's Angels"
|
||||
DEATH_HEADS = "Death Heads"
|
||||
WINGED_NIGHTMARES = "Winged Nightmares"
|
||||
MIDNIGHT_RIDERS = "Midnight Riders"
|
||||
BRYNHILDS = "Brynhilds"
|
||||
JOTUN = "Jotun"
|
||||
|
||||
# Lab / Global
|
||||
ULTRA_CAPACITORS = "Ultra-Capacitors (Terran)"
|
||||
VANADIUM_PLATING = "Vanadium Plating (Terran)"
|
||||
ORBITAL_DEPOTS = "Orbital Depots (Terran)"
|
||||
MICRO_FILTERING = "Micro-Filtering (Terran)"
|
||||
AUTOMATED_REFINERY = "Automated Refinery (Terran)"
|
||||
COMMAND_CENTER_COMMAND_CENTER_REACTOR = "Command Center Reactor (Command Center)"
|
||||
COMMAND_CENTER_SCANNER_SWEEP = "Scanner Sweep (Command Center)"
|
||||
COMMAND_CENTER_MULE = "MULE (Command Center)"
|
||||
COMMAND_CENTER_EXTRA_SUPPLIES = "Extra Supplies (Command Center)"
|
||||
TECH_REACTOR = "Tech Reactor (Terran)"
|
||||
ORBITAL_STRIKE = "Orbital Strike (Barracks)"
|
||||
CELLULAR_REACTOR = "Cellular Reactor (Terran)"
|
||||
PROGRESSIVE_REGENERATIVE_BIO_STEEL = "Progressive Regenerative Bio-Steel (Terran)"
|
||||
PROGRESSIVE_FIRE_SUPPRESSION_SYSTEM = "Progressive Fire-Suppression System (Terran)"
|
||||
STRUCTURE_ARMOR = "Structure Armor (Terran)"
|
||||
HI_SEC_AUTO_TRACKING = "Hi-Sec Auto Tracking (Terran)"
|
||||
ADVANCED_OPTICS = "Advanced Optics (Terran)"
|
||||
ROGUE_FORCES = "Rogue Forces (Terran)"
|
||||
MECHANICAL_KNOW_HOW = "Mechanical Know-how (Terran)"
|
||||
MERCENARY_MUNITIONS = "Mercenary Munitions (Terran)"
|
||||
PROGRESSIVE_FAST_DELIVERY = "Progressive Fast Delivery (Terran)"
|
||||
RAPID_REINFORCEMENT = "Rapid Reinforcement (Terran)"
|
||||
FUSION_CORE_FUSION_REACTOR = "Fusion Reactor (Fusion Core)"
|
||||
PSI_DISRUPTER = "Psi Disrupter"
|
||||
PSI_SCREEN = "Psi Screen (Psi Disrupter)"
|
||||
SONIC_DISRUPTER = "Sonic Disrupter (Psi Disrupter)"
|
||||
HIVE_MIND_EMULATOR = "Hive Mind Emulator"
|
||||
PSI_INDOCTRINATOR = "Psi Indoctrinator (Hive Mind Emulator)"
|
||||
ARGUS_AMPLIFIER = "Argus Amplifier (Hive Mind Emulator)"
|
||||
SIGNAL_BEACON = "Signal Beacon (Terran)"
|
||||
|
||||
# Terran Unit Upgrades
|
||||
BANSHEE_HYPERFLIGHT_ROTORS = "Hyperflight Rotors (Banshee)"
|
||||
BANSHEE_INTERNAL_TECH_MODULE = "Internal Tech Module (Banshee)"
|
||||
BANSHEE_LASER_TARGETING_SYSTEM = "Laser Targeting System (Banshee)"
|
||||
BANSHEE_PROGRESSIVE_CROSS_SPECTRUM_DAMPENERS = "Progressive Cross-Spectrum Dampeners (Banshee)"
|
||||
BANSHEE_SHOCKWAVE_MISSILE_BATTERY = "Shockwave Missile Battery (Banshee)"
|
||||
BANSHEE_SHAPED_HULL = "Shaped Hull (Banshee)"
|
||||
BANSHEE_ADVANCED_TARGETING_OPTICS = "Advanced Targeting Optics (Banshee)"
|
||||
BANSHEE_DISTORTION_BLASTERS = "Distortion Blasters (Banshee)"
|
||||
BANSHEE_ROCKET_BARRAGE = "Rocket Barrage (Banshee)"
|
||||
BATTLECRUISER_ATX_LASER_BATTERY = "ATX Laser Battery (Battlecruiser)"
|
||||
BATTLECRUISER_CLOAK = "Cloak (Battlecruiser)"
|
||||
BATTLECRUISER_PROGRESSIVE_DEFENSIVE_MATRIX = "Progressive Defensive Matrix (Battlecruiser)"
|
||||
BATTLECRUISER_INTERNAL_TECH_MODULE = "Internal Tech Module (Battlecruiser)"
|
||||
BATTLECRUISER_PROGRESSIVE_MISSILE_PODS = "Progressive Missile Pods (Battlecruiser)"
|
||||
BATTLECRUISER_OPTIMIZED_LOGISTICS = "Optimized Logistics (Battlecruiser)"
|
||||
BATTLECRUISER_TACTICAL_JUMP = "Tactical Jump (Battlecruiser)"
|
||||
BATTLECRUISER_BEHEMOTH_PLATING = "Behemoth Plating (Battlecruiser)"
|
||||
BATTLECRUISER_MOIRAI_IMPULSE_DRIVE = "Moirai Impulse Drive (Battlecruiser)"
|
||||
BATTLECRUISER_BEHEMOTH_REACTOR = "Behemoth Reactor (Battlecruiser)"
|
||||
BATTLECRUISER_FIELD_ASSIST_TARGETING_SYSTEM = "Field-Assist Target System (Battlecruiser)"
|
||||
CYCLONE_MAG_FIELD_ACCELERATORS = "Mag-Field Accelerators (Cyclone)"
|
||||
CYCLONE_MAG_FIELD_LAUNCHERS = "Mag-Field Launchers (Cyclone)"
|
||||
CYCLONE_RAPID_FIRE_LAUNCHERS = "Rapid Fire Launchers (Cyclone)"
|
||||
CYCLONE_TARGETING_OPTICS = "Targeting Optics (Cyclone)"
|
||||
CYCLONE_RESOURCE_EFFICIENCY = "Resource Efficiency (Cyclone)"
|
||||
CYCLONE_INTERNAL_TECH_MODULE = "Internal Tech Module (Cyclone)"
|
||||
DIAMONDBACK_BURST_CAPACITORS = "Burst Capacitors (Diamondback)"
|
||||
DIAMONDBACK_HYPERFLUXOR = "Hyperfluxor (Diamondback)"
|
||||
DIAMONDBACK_RESOURCE_EFFICIENCY = "Resource Efficiency (Diamondback)"
|
||||
DIAMONDBACK_SHAPED_HULL = "Shaped Hull (Diamondback)"
|
||||
DIAMONDBACK_PROGRESSIVE_TRI_LITHIUM_POWER_CELL = "Progressive Tri-Lithium Power Cell (Diamondback)"
|
||||
DIAMONDBACK_MAGLEV_PROPULSION = "Maglev Propulsion (Diamondback)"
|
||||
DOMINION_TROOPER_B2_HIGH_CAL_LMG = "B-2 High-Cal LMG (Dominion Trooper)"
|
||||
DOMINION_TROOPER_CPO7_SALAMANDER_FLAMETHROWER = "CPO-7 Salamander Flamethrower (Dominion Trooper)"
|
||||
DOMINION_TROOPER_HAILSTORM_LAUNCHER = "Hailstorm Launcher (Dominion Trooper)"
|
||||
DOMINION_TROOPER_ADVANCED_ALLOYS = "Advanced Alloys (Dominion Trooper)"
|
||||
DOMINION_TROOPER_OPTIMIZED_LOGISTICS = "Optimized Logistics (Dominion Trooper)"
|
||||
EMPERORS_SHADOW_SOVEREIGN_TACTICAL_MISSILES = "Sovereign Tactical Missiles (Emperor's Shadow)"
|
||||
FIREBAT_INCINERATOR_GAUNTLETS = "Incinerator Gauntlets (Firebat)"
|
||||
FIREBAT_JUGGERNAUT_PLATING = "Juggernaut Plating (Firebat)"
|
||||
FIREBAT_RESOURCE_EFFICIENCY = "Resource Efficiency (Firebat)"
|
||||
FIREBAT_PROGRESSIVE_STIMPACK = "Progressive Stimpack (Firebat)"
|
||||
FIREBAT_INFERNAL_PRE_IGNITER = "Infernal Pre-Igniter (Firebat)"
|
||||
FIREBAT_KINETIC_FOAM = "Kinetic Foam (Firebat)"
|
||||
FIREBAT_NANO_PROJECTORS = "Nano Projectors (Firebat)"
|
||||
GHOST_CRIUS_SUIT = "Crius Suit (Ghost)"
|
||||
GHOST_EMP_ROUNDS = "EMP Rounds (Ghost)"
|
||||
GHOST_LOCKDOWN = "Lockdown (Ghost)"
|
||||
GHOST_OCULAR_IMPLANTS = "Ocular Implants (Ghost)"
|
||||
GHOST_RESOURCE_EFFICIENCY = "Resource Efficiency (Ghost)"
|
||||
GHOST_BARGAIN_BIN_PRICES = "Bargain Bin Prices (Ghost)"
|
||||
GOLIATH_ARES_CLASS_TARGETING_SYSTEM = "Ares-Class Targeting System (Goliath)"
|
||||
GOLIATH_JUMP_JETS = "Jump Jets (Goliath)"
|
||||
GOLIATH_MULTI_LOCK_WEAPONS_SYSTEM = "Multi-Lock Weapons System (Goliath)"
|
||||
GOLIATH_OPTIMIZED_LOGISTICS = "Optimized Logistics (Goliath)"
|
||||
GOLIATH_SHAPED_HULL = "Shaped Hull (Goliath)"
|
||||
GOLIATH_RESOURCE_EFFICIENCY = "Resource Efficiency (Goliath)"
|
||||
GOLIATH_INTERNAL_TECH_MODULE = "Internal Tech Module (Goliath)"
|
||||
HELLION_HELLBAT = "Hellbat (Hellion Morph)"
|
||||
HELLION_JUMP_JETS = "Jump Jets (Hellion)"
|
||||
HELLION_OPTIMIZED_LOGISTICS = "Optimized Logistics (Hellion)"
|
||||
HELLION_PROGRESSIVE_STIMPACK = "Progressive Stimpack (Hellion)"
|
||||
HELLION_SMART_SERVOS = "Smart Servos (Hellion)"
|
||||
HELLION_THERMITE_FILAMENTS = "Thermite Filaments (Hellion)"
|
||||
HELLION_TWIN_LINKED_FLAMETHROWER = "Twin-Linked Flamethrower (Hellion)"
|
||||
HELLION_INFERNAL_PLATING = "Infernal Plating (Hellion)"
|
||||
HERC_JUGGERNAUT_PLATING = "Juggernaut Plating (HERC)"
|
||||
HERC_KINETIC_FOAM = "Kinetic Foam (HERC)"
|
||||
HERC_RESOURCE_EFFICIENCY = "Resource Efficiency (HERC)"
|
||||
HERC_GRAPPLE_PULL = "Grapple Pull (HERC)"
|
||||
HERCULES_INTERNAL_FUSION_MODULE = "Internal Fusion Module (Hercules)"
|
||||
HERCULES_TACTICAL_JUMP = "Tactical Jump (Hercules)"
|
||||
LIBERATOR_ADVANCED_BALLISTICS = "Advanced Ballistics (Liberator)"
|
||||
LIBERATOR_CLOAK = "Cloak (Liberator)"
|
||||
LIBERATOR_LASER_TARGETING_SYSTEM = "Laser Targeting System (Liberator)"
|
||||
LIBERATOR_OPTIMIZED_LOGISTICS = "Optimized Logistics (Liberator)"
|
||||
LIBERATOR_RAID_ARTILLERY = "Raid Artillery (Liberator)"
|
||||
LIBERATOR_SMART_SERVOS = "Smart Servos (Liberator)"
|
||||
LIBERATOR_RESOURCE_EFFICIENCY = "Resource Efficiency (Liberator)"
|
||||
LIBERATOR_GUERILLA_MISSILES = "Guerilla Missiles (Liberator)"
|
||||
LIBERATOR_UED_MISSILE_TECHNOLOGY = "UED Missile Technology (Liberator)"
|
||||
MARAUDER_CONCUSSIVE_SHELLS = "Concussive Shells (Marauder)"
|
||||
MARAUDER_INTERNAL_TECH_MODULE = "Internal Tech Module (Marauder)"
|
||||
MARAUDER_KINETIC_FOAM = "Kinetic Foam (Marauder)"
|
||||
MARAUDER_LASER_TARGETING_SYSTEM = "Laser Targeting System (Marauder)"
|
||||
MARAUDER_MAGRAIL_MUNITIONS = "Magrail Munitions (Marauder)"
|
||||
MARAUDER_PROGRESSIVE_STIMPACK = "Progressive Stimpack (Marauder)"
|
||||
MARAUDER_JUGGERNAUT_PLATING = "Juggernaut Plating (Marauder)"
|
||||
MARINE_COMBAT_SHIELD = "Combat Shield (Marine)"
|
||||
MARINE_LASER_TARGETING_SYSTEM = "Laser Targeting System (Marine)"
|
||||
MARINE_MAGRAIL_MUNITIONS = "Magrail Munitions (Marine)"
|
||||
MARINE_OPTIMIZED_LOGISTICS = "Optimized Logistics (Marine)"
|
||||
MARINE_PROGRESSIVE_STIMPACK = "Progressive Stimpack (Marine)"
|
||||
MEDIC_ADVANCED_MEDIC_FACILITIES = "Advanced Medic Facilities (Medic)"
|
||||
MEDIC_OPTICAL_FLARE = "Optical Flare (Medic)"
|
||||
MEDIC_RESOURCE_EFFICIENCY = "Resource Efficiency (Medic)"
|
||||
MEDIC_RESTORATION = "Restoration (Medic)"
|
||||
MEDIC_STABILIZER_MEDPACKS = "Stabilizer Medpacks (Medic)"
|
||||
MEDIC_ADAPTIVE_MEDPACKS = "Adaptive Medpacks (Medic)"
|
||||
MEDIC_NANO_PROJECTOR = "Nano Projector (Medic)"
|
||||
MEDIVAC_ADVANCED_HEALING_AI = "Advanced Healing AI (Medivac)"
|
||||
MEDIVAC_AFTERBURNERS = "Afterburners (Medivac)"
|
||||
MEDIVAC_EXPANDED_HULL = "Expanded Hull (Medivac)"
|
||||
MEDIVAC_RAPID_DEPLOYMENT_TUBE = "Rapid Deployment Tube (Medivac)"
|
||||
MEDIVAC_SCATTER_VEIL = "Scatter Veil (Medivac)"
|
||||
MEDIVAC_ADVANCED_CLOAKING_FIELD = "Advanced Cloaking Field (Medivac)"
|
||||
MEDIVAC_RAPID_REIGNITION_SYSTEMS = "Rapid Reignition Systems (Medivac)"
|
||||
MEDIVAC_RESOURCE_EFFICIENCY = "Resource Efficiency (Medivac)"
|
||||
PREDATOR_RESOURCE_EFFICIENCY = "Resource Efficiency (Predator)"
|
||||
PREDATOR_CLOAK = "Phase Cloak (Predator)"
|
||||
PREDATOR_CHARGE = "Concussive Charge (Predator)"
|
||||
PREDATOR_VESPENE_SYNTHESIS = "Vespene Synthesis (Predator)"
|
||||
PREDATOR_ADAPTIVE_DEFENSES = "Adaptive Defenses (Predator)"
|
||||
RAVEN_ANTI_ARMOR_MISSILE = "Anti-Armor Missile (Raven)"
|
||||
RAVEN_BIO_MECHANICAL_REPAIR_DRONE = "Bio Mechanical Repair Drone (Raven)"
|
||||
RAVEN_HUNTER_SEEKER_WEAPON = "Hunter-Seeker Weapon (Raven)"
|
||||
RAVEN_INTERFERENCE_MATRIX = "Interference Matrix (Raven)"
|
||||
RAVEN_INTERNAL_TECH_MODULE = "Internal Tech Module (Raven)"
|
||||
RAVEN_RAILGUN_TURRET = "Railgun Turret (Raven)"
|
||||
RAVEN_SPIDER_MINES = "Spider Mines (Raven)"
|
||||
RAVEN_RESOURCE_EFFICIENCY = "Resource Efficiency (Raven)"
|
||||
RAVEN_DURABLE_MATERIALS = "Durable Materials (Raven)"
|
||||
REAPER_ADVANCED_CLOAKING_FIELD = "Advanced Cloaking Field (Reaper)"
|
||||
REAPER_COMBAT_DRUGS = "Combat Drugs (Reaper)"
|
||||
REAPER_G4_CLUSTERBOMB = "G-4 Clusterbomb (Reaper)"
|
||||
REAPER_LASER_TARGETING_SYSTEM = "Laser Targeting System (Reaper)"
|
||||
REAPER_PROGRESSIVE_STIMPACK = "Progressive Stimpack (Reaper)"
|
||||
REAPER_SPIDER_MINES = "Spider Mines (Reaper)"
|
||||
REAPER_U238_ROUNDS = "U-238 Rounds (Reaper)"
|
||||
REAPER_JET_PACK_OVERDRIVE = "Jet Pack Overdrive (Reaper)"
|
||||
REAPER_RESOURCE_EFFICIENCY = "Resource Efficiency (Reaper)"
|
||||
REAPER_BALLISTIC_FLIGHTSUIT = "Ballistic Flightsuit (Reaper)"
|
||||
SCIENCE_VESSEL_DEFENSIVE_MATRIX = "Defensive Matrix (Science Vessel)"
|
||||
SCIENCE_VESSEL_EMP_SHOCKWAVE = "EMP Shockwave (Science Vessel)"
|
||||
SCIENCE_VESSEL_IMPROVED_NANO_REPAIR = "Improved Nano-Repair (Science Vessel)"
|
||||
SCIENCE_VESSEL_MAGELLAN_COMPUTATION_SYSTEMS = "Magellan Computation Systems (Science Vessel)"
|
||||
SCIENCE_VESSEL_TACTICAL_JUMP = "Tactical Jump (Science Vessel)"
|
||||
SCV_ADVANCED_CONSTRUCTION = "Advanced Construction (SCV)"
|
||||
SCV_DUAL_FUSION_WELDERS = "Dual-Fusion Welders (SCV)"
|
||||
SCV_HOSTILE_ENVIRONMENT_ADAPTATION = "Hostile Environment Adaptation (SCV)"
|
||||
SCV_CONSTRUCTION_JUMP_JETS = "Construction Jump Jets (SCV)"
|
||||
SIEGE_TANK_ADVANCED_SIEGE_TECH = "Advanced Siege Tech (Siege Tank)"
|
||||
SIEGE_TANK_GRADUATING_RANGE = "Graduating Range (Siege Tank)"
|
||||
SIEGE_TANK_INTERNAL_TECH_MODULE = "Internal Tech Module (Siege Tank)"
|
||||
SIEGE_TANK_JUMP_JETS = "Jump Jets (Siege Tank)"
|
||||
SIEGE_TANK_LASER_TARGETING_SYSTEM = "Laser Targeting System (Siege Tank)"
|
||||
SIEGE_TANK_MAELSTROM_ROUNDS = "Maelstrom Rounds (Siege Tank)"
|
||||
SIEGE_TANK_SHAPED_BLAST = "Shaped Blast (Siege Tank)"
|
||||
SIEGE_TANK_SMART_SERVOS = "Smart Servos (Siege Tank)"
|
||||
SIEGE_TANK_SPIDER_MINES = "Spider Mines (Siege Tank)"
|
||||
SIEGE_TANK_SHAPED_HULL = "Shaped Hull (Siege Tank)"
|
||||
SIEGE_TANK_RESOURCE_EFFICIENCY = "Resource Efficiency (Siege Tank)"
|
||||
SIEGE_TANK_PROGRESSIVE_TRANSPORT_HOOK = "Progressive Transport Hook (Siege Tank)"
|
||||
SIEGE_TANK_ALLTERRAIN_TREADS = "All-Terrain Treads (Siege Tank)"
|
||||
SPECTRE_IMPALER_ROUNDS = "Impaler Rounds (Spectre)"
|
||||
SPECTRE_NYX_CLASS_CLOAKING_MODULE = "Nyx-Class Cloaking Module (Spectre)"
|
||||
SPECTRE_PSIONIC_LASH = "Psionic Lash (Spectre)"
|
||||
SPECTRE_RESOURCE_EFFICIENCY = "Resource Efficiency (Spectre)"
|
||||
SPECTRE_BARGAIN_BIN_PRICES = "Bargain Bin Prices (Spectre)"
|
||||
SPIDER_MINE_CERBERUS_MINE = "Cerberus Mine (Spider Mine)"
|
||||
SPIDER_MINE_HIGH_EXPLOSIVE_MUNITION = "High Explosive Munition (Spider Mine)"
|
||||
THOR_330MM_BARRAGE_CANNON = "330mm Barrage Cannon (Thor)"
|
||||
THOR_PROGRESSIVE_IMMORTALITY_PROTOCOL = "Progressive Immortality Protocol (Thor)"
|
||||
THOR_PROGRESSIVE_HIGH_IMPACT_PAYLOAD = "Progressive High Impact Payload (Thor)"
|
||||
THOR_BUTTON_WITH_A_SKULL_ON_IT = "Button With a Skull on It (Thor)"
|
||||
THOR_LASER_TARGETING_SYSTEM = "Laser Targeting System (Thor)"
|
||||
THOR_LARGE_SCALE_FIELD_CONSTRUCTION = "Large Scale Field Construction (Thor)"
|
||||
THOR_RAPID_RELOAD = "Rapid Reload (Thor)"
|
||||
VALKYRIE_AFTERBURNERS = "Afterburners (Valkyrie)"
|
||||
VALKYRIE_FLECHETTE_MISSILES = "Flechette Missiles (Valkyrie)"
|
||||
VALKYRIE_ENHANCED_CLUSTER_LAUNCHERS = "Enhanced Cluster Launchers (Valkyrie)"
|
||||
VALKYRIE_SHAPED_HULL = "Shaped Hull (Valkyrie)"
|
||||
VALKYRIE_LAUNCHING_VECTOR_COMPENSATOR = "Launching Vector Compensator (Valkyrie)"
|
||||
VALKYRIE_RESOURCE_EFFICIENCY = "Resource Efficiency (Valkyrie)"
|
||||
VIKING_ANTI_MECHANICAL_MUNITION = "Anti-Mechanical Munition (Viking)"
|
||||
VIKING_PHOBOS_CLASS_WEAPONS_SYSTEM = "Phobos-Class Weapons System (Viking)"
|
||||
VIKING_RIPWAVE_MISSILES = "Ripwave Missiles (Viking)"
|
||||
VIKING_SMART_SERVOS = "Smart Servos (Viking)"
|
||||
VIKING_SHREDDER_ROUNDS = "Shredder Rounds (Viking)"
|
||||
VIKING_WILD_MISSILES = "W.I.L.D. Missiles (Viking)"
|
||||
VIKING_AESIR_TURBINES = "Aesir Turbines (Viking)"
|
||||
VULTURE_AUTO_LAUNCHERS = "Auto Launchers (Vulture)"
|
||||
VULTURE_ION_THRUSTERS = "Ion Thrusters (Vulture)"
|
||||
VULTURE_PROGRESSIVE_REPLENISHABLE_MAGAZINE = "Progressive Replenishable Magazine (Vulture)"
|
||||
VULTURE_JERRYRIGGED_PATCHUP = "Jerry-Rigged Patchup (Vulture)"
|
||||
WARHOUND_RESOURCE_EFFICIENCY = "Resource Efficiency (Warhound)"
|
||||
WARHOUND_AXIOM_PLATING = "Axiom Plating (Warhound)"
|
||||
WARHOUND_DEPLOY_TURRET = "Deploy Turret (Warhound)"
|
||||
WIDOW_MINE_BLACK_MARKET_LAUNCHERS = "Black Market Launchers (Widow Mine)"
|
||||
WIDOW_MINE_CONCEALMENT = "Concealment (Widow Mine)"
|
||||
WIDOW_MINE_DEMOLITION_PAYLOAD = "Demolition Payload (Widow Mine)"
|
||||
WIDOW_MINE_DRILLING_CLAWS = "Drilling Claws (Widow Mine)"
|
||||
WIDOW_MINE_EXECUTIONER_MISSILES = "Executioner Missiles (Widow Mine)"
|
||||
WIDOW_MINE_RESOURCE_EFFICIENCY = "Resource Efficiency (Widow Mine)"
|
||||
WRAITH_ADVANCED_LASER_TECHNOLOGY = "Advanced Laser Technology (Wraith)"
|
||||
WRAITH_DISPLACEMENT_FIELD = "Displacement Field (Wraith)"
|
||||
WRAITH_PROGRESSIVE_TOMAHAWK_POWER_CELLS = "Progressive Tomahawk Power Cells (Wraith)"
|
||||
WRAITH_TRIGGER_OVERRIDE = "Trigger Override (Wraith)"
|
||||
WRAITH_INTERNAL_TECH_MODULE = "Internal Tech Module (Wraith)"
|
||||
WRAITH_RESOURCE_EFFICIENCY = "Resource Efficiency (Wraith)"
|
||||
|
||||
# Terran Building upgrades
|
||||
BUNKER_NEOSTEEL_BUNKER = "Neosteel Bunker (Bunker)"
|
||||
BUNKER_PROJECTILE_ACCELERATOR = "Projectile Accelerator (Bunker)"
|
||||
BUNKER_SHRIKE_TURRET = "Shrike Turret (Bunker)"
|
||||
BUNKER_FORTIFIED_BUNKER = "Fortified Bunker (Bunker)"
|
||||
DEVASTATOR_TURRET_ANTI_ARMOR_MUNITIONS = "Anti-Armor Munitions (Devastator Turret)"
|
||||
DEVASTATOR_TURRET_CONCUSSIVE_GRENADES = "Concussive Grenades (Devastator Turret)"
|
||||
DEVASTATOR_TURRET_RESOURCE_EFFICIENCY = "Resource Efficiency (Devastator Turret)"
|
||||
MISSILE_TURRET_HELLSTORM_BATTERIES = "Hellstorm Batteries (Missile Turret)"
|
||||
MISSILE_TURRET_TITANIUM_HOUSING = "Titanium Housing (Missile Turret)"
|
||||
MISSILE_TURRET_RESOURCE_EFFICENCY = "Resource Efficiency (Missile Turret)"
|
||||
PLANETARY_FORTRESS_PROGRESSIVE_AUGMENTED_THRUSTERS = "Progressive Augmented Thrusters (Planetary Fortress)"
|
||||
PLANETARY_FORTRESS_IBIKS_TRACKING_SCANNERS = "Ibiks Tracking Scanners (Planetary Fortress)"
|
||||
PLANETARY_FORTRESS_ORBITAL_MODULE = "Orbital Module (Planetary Fortress)"
|
||||
SENSOR_TOWER_ASSISTIVE_TARGETING = "Assistive Targeting (Sensor Tower)"
|
||||
SENSOR_TOWER_MUILTISPECTRUM_DOPPLER = "Multispectrum Doppler (Sensor Tower)"
|
||||
|
||||
# Nova
|
||||
NOVA_GHOST_VISOR = "Ghost Visor (Nova Equipment)"
|
||||
NOVA_RANGEFINDER_OCULUS = "Rangefinder Oculus (Nova Equipment)"
|
||||
NOVA_DOMINATION = "Domination (Nova Ability)"
|
||||
NOVA_BLINK = "Blink (Nova Ability)"
|
||||
NOVA_PROGRESSIVE_STEALTH_SUIT_MODULE = "Progressive Stealth Suit Module (Nova Suit Module)"
|
||||
NOVA_ENERGY_SUIT_MODULE = "Energy Suit Module (Nova Suit Module)"
|
||||
NOVA_ARMORED_SUIT_MODULE = "Armored Suit Module (Nova Suit Module)"
|
||||
NOVA_JUMP_SUIT_MODULE = "Jump Suit Module (Nova Suit Module)"
|
||||
NOVA_C20A_CANISTER_RIFLE = "C20A Canister Rifle (Nova Weapon)"
|
||||
NOVA_HELLFIRE_SHOTGUN = "Hellfire Shotgun (Nova Weapon)"
|
||||
NOVA_PLASMA_RIFLE = "Plasma Rifle (Nova Weapon)"
|
||||
NOVA_MONOMOLECULAR_BLADE = "Monomolecular Blade (Nova Weapon)"
|
||||
NOVA_BLAZEFIRE_GUNBLADE = "Blazefire Gunblade (Nova Weapon)"
|
||||
NOVA_STIM_INFUSION = "Stim Infusion (Nova Gadget)"
|
||||
NOVA_PULSE_GRENADES = "Pulse Grenades (Nova Gadget)"
|
||||
NOVA_FLASHBANG_GRENADES = "Flashbang Grenades (Nova Gadget)"
|
||||
NOVA_IONIC_FORCE_FIELD = "Ionic Force Field (Nova Gadget)"
|
||||
NOVA_HOLO_DECOY = "Holo Decoy (Nova Gadget)"
|
||||
NOVA_NUKE = "Tac Nuke Strike (Nova Ability)"
|
||||
|
||||
# Zerg Units
|
||||
ZERGLING = "Zergling"
|
||||
SWARM_QUEEN = "Swarm Queen"
|
||||
ROACH = "Roach"
|
||||
HYDRALISK = "Hydralisk"
|
||||
ABERRATION = "Aberration"
|
||||
MUTALISK = "Mutalisk"
|
||||
SWARM_HOST = "Swarm Host"
|
||||
INFESTOR = "Infestor"
|
||||
ULTRALISK = "Ultralisk"
|
||||
PYGALISK = "Pygalisk"
|
||||
CORRUPTOR = "Corruptor"
|
||||
SCOURGE = "Scourge"
|
||||
BROOD_QUEEN = "Brood Queen"
|
||||
DEFILER = "Defiler"
|
||||
INFESTED_MARINE = "Infested Marine"
|
||||
INFESTED_SIEGE_TANK = "Infested Siege Tank"
|
||||
INFESTED_DIAMONDBACK = "Infested Diamondback"
|
||||
BULLFROG = "Bullfrog"
|
||||
INFESTED_BANSHEE = "Infested Banshee"
|
||||
INFESTED_LIBERATOR = "Infested Liberator"
|
||||
|
||||
# Zerg Buildings
|
||||
SPORE_CRAWLER = "Spore Crawler"
|
||||
SPINE_CRAWLER = "Spine Crawler"
|
||||
BILE_LAUNCHER = "Bile Launcher"
|
||||
INFESTED_BUNKER = "Infested Bunker"
|
||||
INFESTED_MISSILE_TURRET = "Infested Missile Turret"
|
||||
NYDUS_WORM = "Nydus Worm"
|
||||
ECHIDNA_WORM = "Echidna Worm"
|
||||
|
||||
# Zerg Weapon / Armor Upgrades
|
||||
ZERG_UPGRADE_PREFIX = "Progressive Zerg"
|
||||
ZERG_FLYER_UPGRADE_PREFIX = f"{ZERG_UPGRADE_PREFIX} Flyer"
|
||||
|
||||
PROGRESSIVE_ZERG_MELEE_ATTACK = f"{ZERG_UPGRADE_PREFIX} Melee Attack"
|
||||
PROGRESSIVE_ZERG_MISSILE_ATTACK = f"{ZERG_UPGRADE_PREFIX} Missile Attack"
|
||||
PROGRESSIVE_ZERG_GROUND_CARAPACE = f"{ZERG_UPGRADE_PREFIX} Ground Carapace"
|
||||
PROGRESSIVE_ZERG_FLYER_ATTACK = f"{ZERG_FLYER_UPGRADE_PREFIX} Attack"
|
||||
PROGRESSIVE_ZERG_FLYER_CARAPACE = f"{ZERG_FLYER_UPGRADE_PREFIX} Carapace"
|
||||
PROGRESSIVE_ZERG_WEAPON_UPGRADE = f"{ZERG_UPGRADE_PREFIX} Weapon Upgrade"
|
||||
PROGRESSIVE_ZERG_ARMOR_UPGRADE = f"{ZERG_UPGRADE_PREFIX} Armor Upgrade"
|
||||
PROGRESSIVE_ZERG_GROUND_UPGRADE = f"{ZERG_UPGRADE_PREFIX} Ground Upgrade"
|
||||
PROGRESSIVE_ZERG_FLYER_UPGRADE = f"{ZERG_FLYER_UPGRADE_PREFIX} Upgrade"
|
||||
PROGRESSIVE_ZERG_WEAPON_ARMOR_UPGRADE = f"{ZERG_UPGRADE_PREFIX} Weapon/Armor Upgrade"
|
||||
|
||||
# Zerg Unit Upgrades
|
||||
ZERGLING_HARDENED_CARAPACE = "Hardened Carapace (Zergling)"
|
||||
ZERGLING_ADRENAL_OVERLOAD = "Adrenal Overload (Zergling)"
|
||||
ZERGLING_METABOLIC_BOOST = "Metabolic Boost (Zergling)"
|
||||
ZERGLING_SHREDDING_CLAWS = "Shredding Claws (Zergling)"
|
||||
ROACH_HYDRIODIC_BILE = "Hydriodic Bile (Roach)"
|
||||
ROACH_ADAPTIVE_PLATING = "Adaptive Plating (Roach)"
|
||||
ROACH_TUNNELING_CLAWS = "Tunneling Claws (Roach)"
|
||||
ROACH_GLIAL_RECONSTITUTION = "Glial Reconstitution (Roach)"
|
||||
ROACH_ORGANIC_CARAPACE = "Organic Carapace (Roach)"
|
||||
HYDRALISK_FRENZY = "Frenzy (Hydralisk)"
|
||||
HYDRALISK_ANCILLARY_CARAPACE = "Ancillary Carapace (Hydralisk)"
|
||||
HYDRALISK_GROOVED_SPINES = "Grooved Spines (Hydralisk)"
|
||||
HYDRALISK_MUSCULAR_AUGMENTS = "Muscular Augments (Hydralisk)"
|
||||
HYDRALISK_RESOURCE_EFFICIENCY = "Resource Efficiency (Hydralisk)"
|
||||
BANELING_CORROSIVE_ACID = "Corrosive Acid (Baneling)"
|
||||
BANELING_RUPTURE = "Rupture (Baneling)"
|
||||
BANELING_REGENERATIVE_ACID = "Regenerative Acid (Baneling)"
|
||||
BANELING_CENTRIFUGAL_HOOKS = "Centrifugal Hooks (Baneling)"
|
||||
BANELING_TUNNELING_JAWS = "Tunneling Jaws (Baneling)"
|
||||
BANELING_RAPID_METAMORPH = "Rapid Metamorph (Baneling)"
|
||||
MUTALISK_VICIOUS_GLAIVE = "Vicious Glaive (Mutalisk)"
|
||||
MUTALISK_RAPID_REGENERATION = "Rapid Regeneration (Mutalisk)"
|
||||
MUTALISK_SUNDERING_GLAIVE = "Sundering Glaive (Mutalisk)"
|
||||
MUTALISK_SEVERING_GLAIVE = "Severing Glaive (Mutalisk)"
|
||||
MUTALISK_AERODYNAMIC_GLAIVE_SHAPE = "Aerodynamic Glaive Shape (Mutalisk)"
|
||||
SPORE_CRAWLER_BIO_BONUS = "Caustic Enzymes (Spore Crawler)"
|
||||
SWARM_HOST_BURROW = "Burrow (Swarm Host)"
|
||||
SWARM_HOST_RAPID_INCUBATION = "Rapid Incubation (Swarm Host)"
|
||||
SWARM_HOST_PRESSURIZED_GLANDS = "Pressurized Glands (Swarm Host)"
|
||||
SWARM_HOST_LOCUST_METABOLIC_BOOST = "Locust Metabolic Boost (Swarm Host)"
|
||||
SWARM_HOST_ENDURING_LOCUSTS = "Enduring Locusts (Swarm Host)"
|
||||
SWARM_HOST_ORGANIC_CARAPACE = "Organic Carapace (Swarm Host)"
|
||||
SWARM_HOST_RESOURCE_EFFICIENCY = "Resource Efficiency (Swarm Host)"
|
||||
ULTRALISK_BURROW_CHARGE = "Burrow Charge (Ultralisk)"
|
||||
ULTRALISK_TISSUE_ASSIMILATION = "Tissue Assimilation (Ultralisk)"
|
||||
ULTRALISK_MONARCH_BLADES = "Monarch Blades (Ultralisk)"
|
||||
ULTRALISK_ANABOLIC_SYNTHESIS = "Anabolic Synthesis (Ultralisk)"
|
||||
ULTRALISK_CHITINOUS_PLATING = "Chitinous Plating (Ultralisk)"
|
||||
ULTRALISK_ORGANIC_CARAPACE = "Organic Carapace (Ultralisk)"
|
||||
ULTRALISK_RESOURCE_EFFICIENCY = "Resource Efficiency (Ultralisk)"
|
||||
PYGALISK_STIM = "Stimpack (Pygalisk)"
|
||||
PYGALISK_DUCAL_BLADES = "Ducal Blades (Pygalisk)"
|
||||
PYGALISK_COMBAT_CARAPACE = "Combat Carapace (Pygalisk)"
|
||||
CORRUPTOR_CORRUPTION = "Corruption (Corruptor)"
|
||||
CORRUPTOR_CAUSTIC_SPRAY = "Caustic Spray (Corruptor)"
|
||||
SCOURGE_VIRULENT_SPORES = "Virulent Spores (Scourge)"
|
||||
SCOURGE_RESOURCE_EFFICIENCY = "Resource Efficiency (Scourge)"
|
||||
SCOURGE_SWARM_SCOURGE = "Swarm Scourge (Scourge)"
|
||||
DEVOURER_CORROSIVE_SPRAY = "Corrosive Spray (Devourer)"
|
||||
DEVOURER_GAPING_MAW = "Gaping Maw (Devourer)"
|
||||
DEVOURER_IMPROVED_OSMOSIS = "Improved Osmosis (Devourer)"
|
||||
DEVOURER_PRESCIENT_SPORES = "Prescient Spores (Devourer)"
|
||||
GUARDIAN_PROLONGED_DISPERSION = "Prolonged Dispersion (Guardian)"
|
||||
GUARDIAN_PRIMAL_ADAPTATION = "Primal Adaptation (Guardian)"
|
||||
GUARDIAN_SORONAN_ACID = "Soronan Acid (Guardian)"
|
||||
GUARDIAN_PROPELLANT_SACS = "Propellant Sacs (Guardian)"
|
||||
GUARDIAN_EXPLOSIVE_SPORES = "Explosive Spores (Guardian)"
|
||||
GUARDIAN_PRIMORDIAL_FURY = "Primordial Fury (Guardian)"
|
||||
IMPALER_ADAPTIVE_TALONS = "Adaptive Talons (Impaler)"
|
||||
IMPALER_SECRETION_GLANDS = "Secretion Glands (Impaler)"
|
||||
IMPALER_SUNKEN_SPINES = "Sunken Spines (Impaler)"
|
||||
LURKER_SEISMIC_SPINES = "Seismic Spines (Lurker)"
|
||||
LURKER_ADAPTED_SPINES = "Adapted Spines (Lurker)"
|
||||
RAVAGER_POTENT_BILE = "Potent Bile (Ravager)"
|
||||
RAVAGER_BLOATED_BILE_DUCTS = "Bloated Bile Ducts (Ravager)"
|
||||
RAVAGER_DEEP_TUNNEL = "Deep Tunnel (Ravager)"
|
||||
VIPER_PARASITIC_BOMB = "Parasitic Bomb (Viper)"
|
||||
VIPER_PARALYTIC_BARBS = "Paralytic Barbs (Viper)"
|
||||
VIPER_VIRULENT_MICROBES = "Virulent Microbes (Viper)"
|
||||
BROOD_LORD_POROUS_CARTILAGE = "Porous Cartilage (Brood Lord)"
|
||||
BROOD_LORD_BEHEMOTH_STELLARSKIN = "Behemoth Stellarskin (Brood Lord)"
|
||||
BROOD_LORD_SPLITTER_MITOSIS = "Splitter Mitosis (Brood Lord)"
|
||||
BROOD_LORD_RESOURCE_EFFICIENCY = "Resource Efficiency (Brood Lord)"
|
||||
INFESTOR_INFESTED_TERRAN = "Infested Terran (Infestor)"
|
||||
INFESTOR_MICROBIAL_SHROUD = "Microbial Shroud (Infestor)"
|
||||
SWARM_QUEEN_SPAWN_LARVAE = "Spawn Larvae (Swarm Queen)"
|
||||
SWARM_QUEEN_DEEP_TUNNEL = "Deep Tunnel (Swarm Queen)"
|
||||
SWARM_QUEEN_ORGANIC_CARAPACE = "Organic Carapace (Swarm Queen)"
|
||||
SWARM_QUEEN_BIO_MECHANICAL_TRANSFUSION = "Bio-Mechanical Transfusion (Swarm Queen)"
|
||||
SWARM_QUEEN_RESOURCE_EFFICIENCY = "Resource Efficiency (Swarm Queen)"
|
||||
SWARM_QUEEN_INCUBATOR_CHAMBER = "Incubator Chamber (Swarm Queen)"
|
||||
BROOD_QUEEN_FUNGAL_GROWTH = "Fungal Growth (Brood Queen)"
|
||||
BROOD_QUEEN_ENSNARE = "Ensnare (Brood Queen)"
|
||||
BROOD_QUEEN_ENHANCED_MITOCHONDRIA = "Enhanced Mitochondria (Brood Queen)"
|
||||
DEFILER_PATHOGEN_PROJECTORS = "Pathogen Projectors (Defiler)"
|
||||
DEFILER_TRAPDOOR_ADAPTATION = "Trapdoor Adaptation (Defiler)"
|
||||
DEFILER_PREDATORY_CONSUMPTION = "Predatory Consumption (Defiler)"
|
||||
DEFILER_COMORBIDITY = "Comorbidity (Defiler)"
|
||||
ABERRATION_MONSTROUS_RESILIENCE = "Monstrous Resilience (Aberration)"
|
||||
ABERRATION_CONSTRUCT_REGENERATION = "Construct Regeneration (Aberration)"
|
||||
ABERRATION_BANELING_INCUBATION = "Baneling Incubation (Aberration)"
|
||||
ABERRATION_PROTECTIVE_COVER = "Protective Cover (Aberration)"
|
||||
ABERRATION_RESOURCE_EFFICIENCY = "Resource Efficiency (Aberration)"
|
||||
ABERRATION_PROGRESSIVE_BANELING_LAUNCH = "Progressive Baneling Launch (Aberration)"
|
||||
CORRUPTOR_MONSTROUS_RESILIENCE = "Monstrous Resilience (Corruptor)"
|
||||
CORRUPTOR_CONSTRUCT_REGENERATION = "Construct Regeneration (Corruptor)"
|
||||
CORRUPTOR_SCOURGE_INCUBATION = "Scourge Incubation (Corruptor)"
|
||||
CORRUPTOR_RESOURCE_EFFICIENCY = "Resource Efficiency (Corruptor)"
|
||||
PRIMAL_IGNITER_CONCENTRATED_FIRE = "Concentrated Fire (Primal Igniter)"
|
||||
PRIMAL_IGNITER_PRIMAL_TENACITY = "Primal Tenacity (Primal Igniter)"
|
||||
OVERLORD_IMPROVED_OVERLORDS = "Improved Overlords (Overlord)"
|
||||
OVERLORD_VENTRAL_SACS = "Ventral Sacs (Overlord)"
|
||||
OVERLORD_GENERATE_CREEP = "Generate Creep (Overlord)"
|
||||
OVERLORD_PNEUMATIZED_CARAPACE = "Pneumatized Carapace (Overlord)"
|
||||
OVERLORD_ANTENNAE = "Antennae (Overlord)"
|
||||
INFESTED_SCV_BUILD_CHARGES = "Sustained Cultivation Ventricles (Infested SCV)"
|
||||
INFESTED_MARINE_PLAGUED_MUNITIONS = "Plagued Munitions (Infested Marine)"
|
||||
INFESTED_MARINE_RETINAL_AUGMENTATION = "Retinal Augmentation (Infested Marine)"
|
||||
INFESTED_BUNKER_CALCIFIED_ARMOR = "Calcified Armor (Infested Bunker)"
|
||||
INFESTED_BUNKER_REGENERATIVE_PLATING = "Regenerative Plating (Infested Bunker)"
|
||||
INFESTED_BUNKER_ENGORGED_BUNKERS = "Engorged Bunkers (Infested Bunker)"
|
||||
TYRANNOZOR_BARRAGE_OF_SPIKES = "Barrage of Spikes (Tyrannozor)"
|
||||
TYRANNOZOR_TYRANTS_PROTECTION = "Tyrant's Protection (Tyrannozor)"
|
||||
TYRANNOZOR_HEALING_ADAPTATION = "Healing Adaptation (Tyrannozor)"
|
||||
TYRANNOZOR_IMPALING_STRIKE = "Impaling Strike (Tyrannozor)"
|
||||
BILE_LAUNCHER_ARTILLERY_DUCTS = "Artillery Ducts (Bile Launcher)"
|
||||
BILE_LAUNCHER_RAPID_BOMBARMENT = "Rapid Bombardment (Bile Launcher)"
|
||||
NYDUS_WORM_ECHIDNA_WORM_SUBTERRANEAN_SCALES = "Subterranean Scales (Nydus Worm/Echidna Worm)"
|
||||
NYDUS_WORM_ECHIDNA_WORM_JORMUNGANDR_STRAIN = "Jormungandr Strain (Nydus Worm/Echidna Worm)"
|
||||
NYDUS_WORM_ECHIDNA_WORM_RESOURCE_EFFICIENCY = "Resource Efficiency (Nydus Worm/Echidna Worm)"
|
||||
NYDUS_WORM_RAVENOUS_APPETITE = "Ravenous Appetite (Nydus Worm)"
|
||||
ECHIDNA_WORM_OUROBOROS_STRAIN = "Ouroboros Strain (Echidna Worm)"
|
||||
INFESTED_SIEGE_TANK_PROGRESSIVE_AUTOMATED_MITOSIS = "Progressive Automated Mitosis (Infested Siege Tank)"
|
||||
INFESTED_SIEGE_TANK_ACIDIC_ENZYMES = "Acidic Enzymes (Infested Siege Tank)"
|
||||
INFESTED_SIEGE_TANK_DEEP_TUNNEL = "Deep Tunnel (Infested Siege Tank)"
|
||||
INFESTED_SIEGE_TANK_SEISMIC_SONAR = "Seismic Sonar (Infested Siege Tank)"
|
||||
INFESTED_SIEGE_TANK_BALANCED_ROOTS = "Balanced Roots (Infested Siege Tank)"
|
||||
INFESTED_DIAMONDBACK_CAUSTIC_MUCUS = "Caustic Mucus (Infested Diamondback)"
|
||||
INFESTED_DIAMONDBACK_VIOLENT_ENZYMES = "Violent Enzymes (Infested Diamondback)"
|
||||
INFESTED_DIAMONDBACK_CONCENTRATED_SPEW = "Concentrated Spew (Infested Diamondback)"
|
||||
INFESTED_DIAMONDBACK_PROGRESSIVE_FUNGAL_SNARE = "Progressive Fungal Snare (Infested Diamondback)"
|
||||
INFESTED_BANSHEE_BRACED_EXOSKELETON = "Braced Exoskeleton (Infested Banshee)"
|
||||
INFESTED_BANSHEE_RAPID_HIBERNATION = "Rapid Hibernation (Infested Banshee)"
|
||||
INFESTED_BANSHEE_FLESHFUSED_TARGETING_OPTICS = "Fleshfused Targeting Optics (Infested Banshee)"
|
||||
INFESTED_LIBERATOR_CLOUD_DISPERSAL = "Cloud Dispersal (Infested Liberator)"
|
||||
INFESTED_LIBERATOR_VIRAL_CONTAMINATION = "Viral Contamination (Infested Liberator)"
|
||||
INFESTED_LIBERATOR_DEFENDER_MODE = "Defender Mode (Infested Liberator)"
|
||||
INFESTED_SIEGE_TANK_FRIGHTFUL_FLESHWELDER = "Frightful Fleshwelder (Infested Siege Tank)"
|
||||
INFESTED_DIAMONDBACK_FRIGHTFUL_FLESHWELDER = "Frightful Fleshwelder (Infested Diamondback)"
|
||||
INFESTED_BANSHEE_FRIGHTFUL_FLESHWELDER = "Frightful Fleshwelder (Infested Banshee)"
|
||||
INFESTED_LIBERATOR_FRIGHTFUL_FLESHWELDER = "Frightful Fleshwelder (Infested Liberator)"
|
||||
INFESTED_MISSILE_TURRET_BIOELECTRIC_PAYLOAD = "Bioelectric Payload (Infested Missile Turret)"
|
||||
INFESTED_MISSILE_TURRET_ACID_SPORE_VENTS = "Acid Spore Vents (Infested Missile Turret)"
|
||||
BULLFROG_WILD_MUTATION = "Mutagen Vents (Bullfrog)"
|
||||
BULLFROG_BROODLINGS = "Suffused With Vermin (Bullfrog)"
|
||||
BULLFROG_HARD_IMPACT = "Lethal Impact (Bullfrog)"
|
||||
BULLFROG_RANGE = "Catalytic Boosters (Bullfrog)"
|
||||
|
||||
# Zerg Strains
|
||||
ZERGLING_RAPTOR_STRAIN = "Raptor Strain (Zergling)"
|
||||
ZERGLING_SWARMLING_STRAIN = "Swarmling Strain (Zergling)"
|
||||
ROACH_VILE_STRAIN = "Vile Strain (Roach)"
|
||||
ROACH_CORPSER_STRAIN = "Corpser Strain (Roach)"
|
||||
BANELING_SPLITTER_STRAIN = "Splitter Strain (Baneling)"
|
||||
BANELING_HUNTER_STRAIN = "Hunter Strain (Baneling)"
|
||||
SWARM_HOST_CARRION_STRAIN = "Carrion Strain (Swarm Host)"
|
||||
SWARM_HOST_CREEPER_STRAIN = "Creeper Strain (Swarm Host)"
|
||||
ULTRALISK_NOXIOUS_STRAIN = "Noxious Strain (Ultralisk)"
|
||||
ULTRALISK_TORRASQUE_STRAIN = "Torrasque Strain (Ultralisk)"
|
||||
|
||||
# Morphs
|
||||
ZERGLING_BANELING_ASPECT = "Baneling"
|
||||
HYDRALISK_IMPALER_ASPECT = "Impaler"
|
||||
HYDRALISK_LURKER_ASPECT = "Lurker"
|
||||
MUTALISK_CORRUPTOR_BROOD_LORD_ASPECT = "Brood Lord"
|
||||
MUTALISK_CORRUPTOR_VIPER_ASPECT = "Viper"
|
||||
MUTALISK_CORRUPTOR_GUARDIAN_ASPECT = "Guardian"
|
||||
MUTALISK_CORRUPTOR_DEVOURER_ASPECT = "Devourer"
|
||||
ROACH_RAVAGER_ASPECT = "Ravager"
|
||||
OVERLORD_OVERSEER_ASPECT = "Overseer"
|
||||
ROACH_PRIMAL_IGNITER_ASPECT = "Primal Igniter"
|
||||
ULTRALISK_TYRANNOZOR_ASPECT = "Tyrannozor"
|
||||
|
||||
# Zerg Mercs
|
||||
INFESTED_MEDICS = "Infested Medics"
|
||||
INFESTED_SIEGE_BREAKERS = "Infested Siege Breakers"
|
||||
INFESTED_DUSK_WINGS = "Infested Dusk Wings"
|
||||
DEVOURING_ONES = "Devouring Ones"
|
||||
HUNTER_KILLERS = "Hunter Killers"
|
||||
TORRASQUE_MERC = "Wise Old Torrasque"
|
||||
HUNTERLING = "Hunterling"
|
||||
YGGDRASIL = "Yggdrasil"
|
||||
CAUSTIC_HORRORS = "Caustic Horrors"
|
||||
|
||||
|
||||
# Kerrigan Upgrades
|
||||
KERRIGAN_KINETIC_BLAST = "Kinetic Blast (Kerrigan Ability)"
|
||||
KERRIGAN_HEROIC_FORTITUDE = "Heroic Fortitude (Kerrigan Passive)"
|
||||
KERRIGAN_LEAPING_STRIKE = "Leaping Strike (Kerrigan Ability)"
|
||||
KERRIGAN_CRUSHING_GRIP = "Crushing Grip (Kerrigan Ability)"
|
||||
KERRIGAN_CHAIN_REACTION = "Chain Reaction (Kerrigan Passive)"
|
||||
KERRIGAN_PSIONIC_SHIFT = "Psionic Shift (Kerrigan Ability)"
|
||||
KERRIGAN_WILD_MUTATION = "Wild Mutation (Kerrigan Ability)"
|
||||
KERRIGAN_SPAWN_BANELINGS = "Spawn Banelings (Kerrigan Ability)"
|
||||
KERRIGAN_MEND = "Mend (Kerrigan Ability)"
|
||||
KERRIGAN_INFEST_BROODLINGS = "Infest Broodlings (Kerrigan Passive)"
|
||||
KERRIGAN_FURY = "Fury (Kerrigan Passive)"
|
||||
KERRIGAN_ABILITY_EFFICIENCY = "Ability Efficiency (Kerrigan Passive)"
|
||||
KERRIGAN_APOCALYPSE = "Apocalypse (Kerrigan Ability)"
|
||||
KERRIGAN_SPAWN_LEVIATHAN = "Spawn Leviathan (Kerrigan Ability)"
|
||||
KERRIGAN_DROP_PODS = "Drop-Pods (Kerrigan Ability)"
|
||||
KERRIGAN_ASSIMILATION_AURA = "Assimilation Aura (Kerrigan Ability)"
|
||||
KERRIGAN_IMMOBILIZATION_WAVE = "Immobilization Wave (Kerrigan Ability)"
|
||||
KERRIGAN_PRIMAL_FORM = "Primal Form (Kerrigan)"
|
||||
|
||||
# Misc Upgrades
|
||||
ZERGLING_RECONSTITUTION = "Zergling Reconstitution (Zerg)"
|
||||
AUTOMATED_EXTRACTORS = "Automated Extractors (Zerg)"
|
||||
TWIN_DRONES = "Twin Drones (Zerg)"
|
||||
MALIGNANT_CREEP = "Malignant Creep (Zerg)"
|
||||
VESPENE_EFFICIENCY = "Vespene Efficiency (Zerg)"
|
||||
ZERG_CREEP_STOMACH = "Creep Stomach (Zerg)"
|
||||
ZERG_EXCAVATING_CLAWS = "Excavating Claws (Zerg)"
|
||||
HIVE_CLUSTER_MATURATION = "Hive Cluster Maturation (Zerg)"
|
||||
MACROSCOPIC_RECUPERATION = "Macroscopic Recuperation (Zerg)"
|
||||
BIOMECHANICAL_STOCKPILING = "Bio-Mechanical Stockpiling (Zerg)"
|
||||
BROODLING_SPORE_SATURATION = "Broodling Spore Saturation (Zerg)"
|
||||
UNRESTRICTED_MUTATION = "Unrestricted Mutation (Zerg)"
|
||||
CELL_DIVISION = "Cell Division (Zerg)"
|
||||
EVOLUTIONARY_LEAP = "Evolutionary Leap (Zerg)"
|
||||
SELF_SUFFICIENT = "Self-Sufficient (Zerg)"
|
||||
|
||||
# Kerrigan Levels
|
||||
KERRIGAN_LEVELS_1 = "1 Kerrigan Level"
|
||||
KERRIGAN_LEVELS_2 = "2 Kerrigan Levels"
|
||||
KERRIGAN_LEVELS_3 = "3 Kerrigan Levels"
|
||||
KERRIGAN_LEVELS_4 = "4 Kerrigan Levels"
|
||||
KERRIGAN_LEVELS_5 = "5 Kerrigan Levels"
|
||||
KERRIGAN_LEVELS_6 = "6 Kerrigan Levels"
|
||||
KERRIGAN_LEVELS_7 = "7 Kerrigan Levels"
|
||||
KERRIGAN_LEVELS_8 = "8 Kerrigan Levels"
|
||||
KERRIGAN_LEVELS_9 = "9 Kerrigan Levels"
|
||||
KERRIGAN_LEVELS_10 = "10 Kerrigan Levels"
|
||||
KERRIGAN_LEVELS_14 = "14 Kerrigan Levels"
|
||||
KERRIGAN_LEVELS_35 = "35 Kerrigan Levels"
|
||||
KERRIGAN_LEVELS_70 = "70 Kerrigan Levels"
|
||||
|
||||
# Protoss Units
|
||||
ZEALOT = "Zealot"
|
||||
STALKER = "Stalker"
|
||||
HIGH_TEMPLAR = "High Templar"
|
||||
DARK_TEMPLAR = "Dark Templar"
|
||||
IMMORTAL = "Immortal"
|
||||
COLOSSUS = "Colossus"
|
||||
PHOENIX = "Phoenix"
|
||||
VOID_RAY = "Void Ray"
|
||||
CARRIER = "Carrier"
|
||||
SKYLORD = "Skylord"
|
||||
TRIREME = "Trireme"
|
||||
OBSERVER = "Observer"
|
||||
CENTURION = "Centurion"
|
||||
SENTINEL = "Sentinel"
|
||||
SUPPLICANT = "Supplicant"
|
||||
INSTIGATOR = "Instigator"
|
||||
SLAYER = "Slayer"
|
||||
SENTRY = "Sentry"
|
||||
ENERGIZER = "Energizer"
|
||||
HAVOC = "Havoc"
|
||||
SIGNIFIER = "Signifier"
|
||||
ASCENDANT = "Ascendant"
|
||||
AVENGER = "Avenger"
|
||||
BLOOD_HUNTER = "Blood Hunter"
|
||||
DRAGOON = "Dragoon"
|
||||
DARK_ARCHON = "Dark Archon"
|
||||
ADEPT = "Adept"
|
||||
WARP_PRISM = "Warp Prism"
|
||||
ANNIHILATOR = "Annihilator"
|
||||
VANGUARD = "Vanguard"
|
||||
STALWART = "Stalwart"
|
||||
WRATHWALKER = "Wrathwalker"
|
||||
REAVER = "Reaver"
|
||||
DISRUPTOR = "Disruptor"
|
||||
MIRAGE = "Mirage"
|
||||
SKIRMISHER = "Skirmisher"
|
||||
CORSAIR = "Corsair"
|
||||
DESTROYER = "Destroyer"
|
||||
PULSAR = "Pulsar"
|
||||
DAWNBRINGER = "Dawnbringer"
|
||||
SCOUT = "Scout"
|
||||
OPPRESSOR = "Oppressor"
|
||||
CALADRIUS = "Caladrius"
|
||||
MISTWING = "Mist Wing"
|
||||
TEMPEST = "Tempest"
|
||||
MOTHERSHIP = "Mothership"
|
||||
ARBITER = "Arbiter"
|
||||
ORACLE = "Oracle"
|
||||
|
||||
# Upgrades
|
||||
PROTOSS_UPGRADE_PREFIX = "Progressive Protoss"
|
||||
PROTOSS_GROUND_UPGRADE_PREFIX = f"{PROTOSS_UPGRADE_PREFIX} Ground"
|
||||
PROTOSS_AIR_UPGRADE_PREFIX = f"{PROTOSS_UPGRADE_PREFIX} Air"
|
||||
PROGRESSIVE_PROTOSS_GROUND_WEAPON = f"{PROTOSS_GROUND_UPGRADE_PREFIX} Weapon"
|
||||
PROGRESSIVE_PROTOSS_GROUND_ARMOR = f"{PROTOSS_GROUND_UPGRADE_PREFIX} Armor"
|
||||
PROGRESSIVE_PROTOSS_SHIELDS = f"{PROTOSS_UPGRADE_PREFIX} Shields"
|
||||
PROGRESSIVE_PROTOSS_AIR_WEAPON = f"{PROTOSS_AIR_UPGRADE_PREFIX} Weapon"
|
||||
PROGRESSIVE_PROTOSS_AIR_ARMOR = f"{PROTOSS_AIR_UPGRADE_PREFIX} Armor"
|
||||
PROGRESSIVE_PROTOSS_WEAPON_UPGRADE = f"{PROTOSS_UPGRADE_PREFIX} Weapon Upgrade"
|
||||
PROGRESSIVE_PROTOSS_ARMOR_UPGRADE = f"{PROTOSS_UPGRADE_PREFIX} Armor Upgrade"
|
||||
PROGRESSIVE_PROTOSS_GROUND_UPGRADE = f"{PROTOSS_GROUND_UPGRADE_PREFIX} Upgrade"
|
||||
PROGRESSIVE_PROTOSS_AIR_UPGRADE = f"{PROTOSS_AIR_UPGRADE_PREFIX} Upgrade"
|
||||
PROGRESSIVE_PROTOSS_WEAPON_ARMOR_UPGRADE = f"{PROTOSS_UPGRADE_PREFIX} Weapon/Armor Upgrade"
|
||||
|
||||
# Buildings
|
||||
PHOTON_CANNON = "Photon Cannon"
|
||||
KHAYDARIN_MONOLITH = "Khaydarin Monolith"
|
||||
SHIELD_BATTERY = "Shield Battery"
|
||||
|
||||
# Unit Upgrades
|
||||
SUPPLICANT_BLOOD_SHIELD = "Blood Shield (Supplicant)"
|
||||
SUPPLICANT_SOUL_AUGMENTATION = "Soul Augmentation (Supplicant)"
|
||||
SUPPLICANT_ENDLESS_SERVITUDE = "Endless Servitude (Supplicant)"
|
||||
SUPPLICANT_ZENITH_PITCH = "Zenith Pitch (Supplicant)"
|
||||
SUPPLICANT_SACRIFICE = "Sacrifice (Supplicant)"
|
||||
ADEPT_SHOCKWAVE = "Shockwave (Adept)"
|
||||
ADEPT_RESONATING_GLAIVES = "Resonating Glaives (Adept)"
|
||||
ADEPT_PHASE_BULWARK = "Phase Bulwark (Adept)"
|
||||
STALKER_INSTIGATOR_SLAYER_DISINTEGRATING_PARTICLES = "Disintegrating Particles (Stalker/Instigator/Slayer)"
|
||||
STALKER_INSTIGATOR_SLAYER_PARTICLE_REFLECTION = "Particle Reflection (Stalker/Instigator/Slayer)"
|
||||
INSTIGATOR_BLINK_OVERDRIVE = "Blink Overdrive (Instigator)"
|
||||
INSTIGATOR_RECONSTRUCTION = "Reconstruction (Instigator)"
|
||||
DRAGOON_CONCENTRATED_ANTIMATTER = "Concentrated Antimatter (Dragoon)"
|
||||
DRAGOON_TRILLIC_COMPRESSION_SYSTEM = "Trillic Compression System (Dragoon)"
|
||||
DRAGOON_SINGULARITY_CHARGE = "Singularity Charge (Dragoon)"
|
||||
DRAGOON_ENHANCED_STRIDER_SERVOS = "Enhanced Strider Servos (Dragoon)"
|
||||
SCOUT_COMBAT_SENSOR_ARRAY = "Combat Sensor Array (Scout/Oppressor/Caladrius/Mist Wing)"
|
||||
SCOUT_APIAL_SENSORS = "Apial Sensors (Scout)"
|
||||
SCOUT_GRAVITIC_THRUSTERS = "Gravitic Thrusters (Scout/Oppressor/Caladrius/Mist Wing)"
|
||||
SCOUT_ADVANCED_PHOTON_BLASTERS = "Advanced Photon Blasters (Scout/Oppressor/Mist Wing)"
|
||||
SCOUT_RESOURCE_EFFICIENCY = "Resource Efficiency (Scout)"
|
||||
SCOUT_SUPPLY_EFFICIENCY = "Supply Efficiency (Scout)"
|
||||
TEMPEST_TECTONIC_DESTABILIZERS = "Tectonic Destabilizers (Tempest)"
|
||||
TEMPEST_QUANTIC_REACTOR = "Quantic Reactor (Tempest)"
|
||||
TEMPEST_GRAVITY_SLING = "Gravity Sling (Tempest)"
|
||||
TEMPEST_INTERPLANETARY_RANGE = "Interplanetary Range (Tempest)"
|
||||
PHOENIX_CLASS_IONIC_WAVELENGTH_FLUX = "Ionic Wavelength Flux (Phoenix/Mirage/Skirmisher)"
|
||||
PHOENIX_CLASS_ANION_PULSE_CRYSTALS = "Anion Pulse-Crystals (Phoenix/Mirage/Skirmisher)"
|
||||
CORSAIR_STEALTH_DRIVE = "Stealth Drive (Corsair)"
|
||||
CORSAIR_ARGUS_JEWEL = "Argus Jewel (Corsair)"
|
||||
CORSAIR_SUSTAINING_DISRUPTION = "Sustaining Disruption (Corsair)"
|
||||
CORSAIR_NEUTRON_SHIELDS = "Neutron Shields (Corsair)"
|
||||
ORACLE_STEALTH_DRIVE = "Stealth Drive (Oracle)"
|
||||
ORACLE_SKYWARD_CHRONOANOMALY = "Skyward Chronoanomaly (Oracle)"
|
||||
ORACLE_TEMPORAL_ACCELERATION_BEAM = "Temporal Acceleration Beam (Oracle)"
|
||||
ORACLE_BOSONIC_CORE = "Bosonic Core (Oracle)"
|
||||
ARBITER_CHRONOSTATIC_REINFORCEMENT = "Chronostatic Reinforcement (Arbiter)"
|
||||
ARBITER_KHAYDARIN_CORE = "Khaydarin Core (Arbiter)"
|
||||
ARBITER_SPACETIME_ANCHOR = "Spacetime Anchor (Arbiter)"
|
||||
ARBITER_RESOURCE_EFFICIENCY = "Resource Efficiency (Arbiter)"
|
||||
ARBITER_JUDICATORS_VEIL = "Judicator's Veil (Arbiter)"
|
||||
CARRIER_TRIREME_GRAVITON_CATAPULT = "Graviton Catapult (Carrier/Trireme)"
|
||||
CARRIER_SKYLORD_TRIREME_HULL_OF_PAST_GLORIES = "Hull of Past Glories (Carrier/Skylord/Trireme)"
|
||||
VOID_RAY_DESTROYER_PULSAR_DAWNBRINGER_FLUX_VANES = "Flux Vanes (Void Ray/Destroyer/Pulsar/Dawnbringer)"
|
||||
DAWNBRINGER_ANTI_SURFACE_COUNTERMEASURES = "Anti-Surface Countermeasures (Dawnbringer)"
|
||||
DAWNBRINGER_ENHANCED_SHIELD_GENERATOR = "Enhanced Shield Generator (Dawnbringer)"
|
||||
PULSAR_CHRONOCLYSM = "Chronoclysm (Pulsar)"
|
||||
PULSAR_ENTROPIC_REVERSAL = "Entropic Reversal (Pulsar)"
|
||||
DESTROYER_RESOURCE_EFFICIENCY = "Resource Efficiency (Destroyer)"
|
||||
WARP_PRISM_GRAVITIC_DRIVE = "Gravitic Drive (Warp Prism)"
|
||||
WARP_PRISM_PHASE_BLASTER = "Phase Blaster (Warp Prism)"
|
||||
WARP_PRISM_WAR_CONFIGURATION = "War Configuration (Warp Prism)"
|
||||
OBSERVER_GRAVITIC_BOOSTERS = "Gravitic Boosters (Observer)"
|
||||
OBSERVER_SENSOR_ARRAY = "Sensor Array (Observer)"
|
||||
REAVER_SCARAB_DAMAGE = "Scarab Damage (Reaver)"
|
||||
REAVER_SOLARITE_PAYLOAD = "Solarite Payload (Reaver)"
|
||||
REAVER_REAVER_CAPACITY = "Reaver Capacity (Reaver)"
|
||||
REAVER_RESOURCE_EFFICIENCY = "Resource Efficiency (Reaver)"
|
||||
REAVER_BARGAIN_BIN_PRICES = "Bargain Bin Prices (Reaver)"
|
||||
VANGUARD_AGONY_LAUNCHERS = "Agony Launchers (Vanguard)"
|
||||
VANGUARD_MATTER_DISPERSION = "Matter Dispersion (Vanguard)"
|
||||
IMMORTAL_ANNIHILATOR_SINGULARITY_CHARGE = "Singularity Charge (Immortal/Annihilator)"
|
||||
IMMORTAL_ANNIHILATOR_ADVANCED_TARGETING = "Advanced Targeting (Immortal/Annihilator)"
|
||||
IMMORTAL_ANNIHILATOR_DISRUPTOR_DISPERSION = "Disruptor Dispersion (Immortal/Annihilator)"
|
||||
STALWART_HIGH_VOLTAGE_CAPACITORS = "High Voltage Capacitors (Stalwart)"
|
||||
STALWART_REINTEGRATED_FRAMEWORK = "Reintegrated Framework (Stalwart)"
|
||||
STALWART_STABILIZED_ELECTRODES = "Stabilized Electrodes (Stalwart)"
|
||||
STALWART_LATTICED_SHIELDING = "Latticed Shielding (Stalwart)"
|
||||
DISRUPTOR_CLOAKING_MODULE = "Cloaking Module (Disruptor)"
|
||||
DISRUPTOR_PERFECTED_POWER = "Perfected Power (Disruptor)"
|
||||
DISRUPTOR_RESTRAINED_DESTRUCTION = "Restrained Destruction (Disruptor)"
|
||||
COLOSSUS_PACIFICATION_PROTOCOL = "Pacification Protocol (Colossus)"
|
||||
WRATHWALKER_RAPID_POWER_CYCLING = "Rapid Power Cycling (Wrathwalker)"
|
||||
WRATHWALKER_EYE_OF_WRATH = "Eye of Wrath (Wrathwalker)"
|
||||
DARK_TEMPLAR_AVENGER_BLOOD_HUNTER_SHROUD_OF_ADUN = "Shroud of Adun (Dark Templar/Avenger/Blood Hunter)"
|
||||
DARK_TEMPLAR_AVENGER_BLOOD_HUNTER_SHADOW_GUARD_TRAINING = "Shadow Guard Training (Dark Templar/Avenger/Blood Hunter)"
|
||||
DARK_TEMPLAR_AVENGER_BLOOD_HUNTER_BLINK = "Blink (Dark Templar/Avenger/Blood Hunter)"
|
||||
DARK_TEMPLAR_AVENGER_BLOOD_HUNTER_RESOURCE_EFFICIENCY = "Resource Efficiency (Dark Templar/Avenger/Blood Hunter)"
|
||||
DARK_TEMPLAR_DARK_ARCHON_MELD = "Dark Archon Meld (Dark Templar)"
|
||||
DARK_TEMPLAR_ARCHON_MERGE = "Archon Merge (Dark Templar)"
|
||||
HIGH_TEMPLAR_SIGNIFIER_UNSHACKLED_PSIONIC_STORM = "Unshackled Psionic Storm (High Templar/Signifier)"
|
||||
HIGH_TEMPLAR_SIGNIFIER_HALLUCINATION = "Hallucination (High Templar/Signifier)"
|
||||
HIGH_TEMPLAR_SIGNIFIER_KHAYDARIN_AMULET = "Khaydarin Amulet (High Templar/Signifier)"
|
||||
ARCHON_HIGH_ARCHON = "High Archon (Archon)"
|
||||
ARCHON_TRANSCENDENCE = "Transcendence (Archon)"
|
||||
ARCHON_POWER_SIPHON = "Power Siphon (Archon)"
|
||||
ARCHON_ERADICATE = "Eradicate (Archon)"
|
||||
ARCHON_OBLITERATE = "Obliterate (Archon)"
|
||||
DARK_ARCHON_FEEDBACK = "Feedback (Dark Archon)"
|
||||
DARK_ARCHON_MAELSTROM = "Maelstrom (Dark Archon)"
|
||||
DARK_ARCHON_ARGUS_TALISMAN = "Argus Talisman (Dark Archon)"
|
||||
ASCENDANT_POWER_OVERWHELMING = "Power Overwhelming (Ascendant)"
|
||||
ASCENDANT_CHAOTIC_ATTUNEMENT = "Chaotic Attunement (Ascendant)"
|
||||
ASCENDANT_BLOOD_AMULET = "Blood Amulet (Ascendant)"
|
||||
ASCENDANT_ARCHON_MERGE = "Archon Merge (Ascendant)"
|
||||
SENTRY_ENERGIZER_HAVOC_CLOAKING_MODULE = "Cloaking Module (Sentry/Energizer/Havoc)"
|
||||
SENTRY_ENERGIZER_HAVOC_SHIELD_BATTERY_RAPID_RECHARGING = "Rapid Recharging (Sentry/Energizer/Havoc/Shield Battery)"
|
||||
SENTRY_FORCE_FIELD = "Force Field (Sentry)"
|
||||
SENTRY_HALLUCINATION = "Hallucination (Sentry)"
|
||||
ENERGIZER_RECLAMATION = "Reclamation (Energizer)"
|
||||
ENERGIZER_FORGED_CHASSIS = "Forged Chassis (Energizer)"
|
||||
HAVOC_DETECT_WEAKNESS = "Detect Weakness (Havoc)"
|
||||
HAVOC_BLOODSHARD_RESONANCE = "Bloodshard Resonance (Havoc)"
|
||||
ZEALOT_SENTINEL_CENTURION_LEG_ENHANCEMENTS = "Leg Enhancements (Zealot/Sentinel/Centurion)"
|
||||
ZEALOT_SENTINEL_CENTURION_SHIELD_CAPACITY = "Shield Capacity (Zealot/Sentinel/Centurion)"
|
||||
OPPRESSOR_ACCELERATED_WARP = "Accelerated Warp (Oppressor)"
|
||||
OPPRESSOR_ARMOR_MELTING_BLASTERS = "Armor Melting Blasters (Oppressor)"
|
||||
CALADRIUS_SIDE_MISSILES = "Side Missiles (Caladrius)"
|
||||
CALADRIUS_STRUCTURE_TARGETING = "Structure Targeting (Caladrius)"
|
||||
CALADRIUS_SOLARITE_REACTOR = "Solarite Reactor (Caladrius)"
|
||||
MISTWING_NULL_SHROUD = "Null Shroud (Mist Wing)"
|
||||
MISTWING_PILOT = "Pilot (Mist Wing)"
|
||||
|
||||
# War Council
|
||||
ZEALOT_WHIRLWIND = "Whirlwind (Zealot)"
|
||||
CENTURION_RESOURCE_EFFICIENCY = "Resource Efficiency (Centurion)"
|
||||
SENTINEL_RESOURCE_EFFICIENCY = "Resource Efficiency (Sentinel)"
|
||||
STALKER_PHASE_REACTOR = "Phase Reactor (Stalker)"
|
||||
DRAGOON_PHALANX_SUIT = "Phalanx Suit (Dragoon)"
|
||||
INSTIGATOR_MODERNIZED_SERVOS = "Modernized Servos (Instigator)"
|
||||
ADEPT_DISRUPTIVE_TRANSFER = "Disruptive Transfer (Adept)"
|
||||
SLAYER_PHASE_BLINK = "Phase Blink (Slayer)"
|
||||
AVENGER_KRYHAS_CLOAK = "Kryhas Cloak (Avenger)"
|
||||
DARK_TEMPLAR_LESSER_SHADOW_FURY = "Lesser Shadow Fury (Dark Templar)"
|
||||
DARK_TEMPLAR_GREATER_SHADOW_FURY = "Greater Shadow Fury (Dark Templar)"
|
||||
BLOOD_HUNTER_BRUTAL_EFFICIENCY = "Brutal Efficiency (Blood Hunter)"
|
||||
SENTRY_DOUBLE_SHIELD_RECHARGE = "Double Shield Recharge (Sentry)"
|
||||
ENERGIZER_MOBILE_CHRONO_BEAM = "Mobile Chrono Beam (Energizer)"
|
||||
HAVOC_ENDURING_SIGHT = "Enduring Sight (Havoc)"
|
||||
HIGH_TEMPLAR_PLASMA_SURGE = "Plasma Surge (High Templar)"
|
||||
SIGNIFIER_FEEDBACK = "Feedback (Signifier)"
|
||||
ASCENDANT_BREATH_OF_CREATION = "Breath of Creation (Ascendant)"
|
||||
DARK_ARCHON_INDOMITABLE_WILL = "Indomitable Will (Dark Archon)"
|
||||
IMMORTAL_IMPROVED_BARRIER = "Improved Barrier (Immortal)"
|
||||
VANGUARD_RAPIDFIRE_CANNON = "Rapid-Fire Cannon (Vanguard)"
|
||||
VANGUARD_FUSION_MORTARS = "Fusion Mortars (Vanguard)"
|
||||
ANNIHILATOR_TWILIGHT_CHASSIS = "Twilight Chassis (Annihilator)"
|
||||
STALWART_ARC_INDUCERS = "Arc Inducers (Stalwart)"
|
||||
COLOSSUS_FIRE_LANCE = "Fire Lance (Colossus)"
|
||||
WRATHWALKER_AERIAL_TRACKING = "Aerial Tracking (Wrathwalker)"
|
||||
REAVER_KHALAI_REPLICATORS = "Khalai Replicators (Reaver)"
|
||||
DISRUPTOR_MOBILITY_PROTOCOLS = "Mobility Protocols (Disruptor)"
|
||||
WARP_PRISM_WARP_REFRACTION = "Warp Refraction (Warp Prism)"
|
||||
OBSERVER_INDUCE_SCOPOPHOBIA = "Induce Scopophobia (Observer)"
|
||||
PHOENIX_DOUBLE_GRAVITON_BEAM = "Double Graviton Beam (Phoenix)"
|
||||
CORSAIR_NETWORK_DISRUPTION = "Network Disruption (Corsair)"
|
||||
MIRAGE_GRAVITON_BEAM = "Graviton Beam (Mirage)"
|
||||
SKIRMISHER_PEER_CONTEMPT = "Peer Contempt (Skirmisher)"
|
||||
VOID_RAY_PRISMATIC_RANGE = "Prismatic Range (Void Ray)"
|
||||
DESTROYER_REFORGED_BLOODSHARD_CORE = "Reforged Bloodshard Core (Destroyer)"
|
||||
PULSAR_CHRONO_SHEAR = "Chrono Shear (Pulsar)"
|
||||
DAWNBRINGER_SOLARITE_LENS = "Solarite Lens (Dawnbringer)"
|
||||
CARRIER_REPAIR_DRONES = "Repair Drones (Carrier)"
|
||||
SKYLORD_JUMP = "Jump (Skylord)"
|
||||
TRIREME_SOLAR_BEAM = "Solar Beam (Trireme)"
|
||||
TEMPEST_DISINTEGRATION = "Disintegration (Tempest)"
|
||||
SCOUT_EXPEDITIONARY_HULL = "Expeditionary Hull (Scout)"
|
||||
ARBITER_VESSEL_OF_THE_CONCLAVE = "Vessel of the Conclave (Arbiter)"
|
||||
ORACLE_STASIS_CALIBRATION = "Stasis Calibration (Oracle)"
|
||||
MOTHERSHIP_INTEGRATED_POWER = "Integrated Power (Mothership)"
|
||||
OPPRESSOR_VULCAN_BLASTER = "Vulcan Blaster (Oppressor)"
|
||||
CALADRIUS_CORONA_BEAM = "Corona Beam (Caladrius)"
|
||||
MISTWING_PHANTOM_DASH = "Phantom Dash (Mist Wing)"
|
||||
|
||||
# Spear Of Adun
|
||||
SOA_CHRONO_SURGE = "Chrono Surge (Spear of Adun)"
|
||||
SOA_PROGRESSIVE_PROXY_PYLON = "Progressive Proxy Pylon (Spear of Adun)"
|
||||
SOA_PYLON_OVERCHARGE = "Pylon Overcharge (Spear of Adun)"
|
||||
SOA_ORBITAL_STRIKE = "Orbital Strike (Spear of Adun)"
|
||||
SOA_TEMPORAL_FIELD = "Temporal Field (Spear of Adun)"
|
||||
SOA_SOLAR_LANCE = "Solar Lance (Spear of Adun)"
|
||||
SOA_MASS_RECALL = "Mass Recall (Spear of Adun)"
|
||||
SOA_SHIELD_OVERCHARGE = "Shield Overcharge (Spear of Adun)"
|
||||
SOA_DEPLOY_FENIX = "Deploy Fenix (Spear of Adun)"
|
||||
SOA_PURIFIER_BEAM = "Purifier Beam (Spear of Adun)"
|
||||
SOA_TIME_STOP = "Time Stop (Spear of Adun)"
|
||||
SOA_SOLAR_BOMBARDMENT = "Solar Bombardment (Spear of Adun)"
|
||||
|
||||
# Generic upgrades
|
||||
MATRIX_OVERLOAD = "Matrix Overload (Protoss)"
|
||||
QUATRO = "Quatro (Protoss)"
|
||||
NEXUS_OVERCHARGE = "Nexus Overcharge (Protoss)"
|
||||
ORBITAL_ASSIMILATORS = "Orbital Assimilators (Protoss)"
|
||||
WARP_HARMONIZATION = "Warp Harmonization (Protoss)"
|
||||
GUARDIAN_SHELL = "Guardian Shell (Spear of Adun)"
|
||||
RECONSTRUCTION_BEAM = "Reconstruction Beam (Spear of Adun)"
|
||||
OVERWATCH = "Overwatch (Spear of Adun)"
|
||||
SUPERIOR_WARP_GATES = "Superior Warp Gates (Protoss)"
|
||||
ENHANCED_TARGETING = "Enhanced Targeting (Protoss)"
|
||||
OPTIMIZED_ORDNANCE = "Optimized Ordnance (Protoss)"
|
||||
KHALAI_INGENUITY = "Khalai Ingenuity (Protoss)"
|
||||
AMPLIFIED_ASSIMILATORS = "Amplified Assimilators (Protoss)"
|
||||
PROGRESSIVE_WARP_RELOCATE = "Progressive Warp Relocate (Protoss)"
|
||||
PROBE_WARPIN = "Probe Warp-In (Protoss)"
|
||||
ELDER_PROBES = "Elder Probes (Protoss)"
|
||||
|
||||
# Filler items
|
||||
STARTING_MINERALS = "Additional Starting Minerals"
|
||||
STARTING_VESPENE = "Additional Starting Vespene"
|
||||
STARTING_SUPPLY = "Additional Starting Supply"
|
||||
MAX_SUPPLY = "Additional Maximum Supply"
|
||||
SHIELD_REGENERATION = "Increased Shield Regeneration"
|
||||
BUILDING_CONSTRUCTION_SPEED = "Increased Building Construction Speed"
|
||||
UPGRADE_RESEARCH_SPEED = "Increased Upgrade Research Speed"
|
||||
UPGRADE_RESEARCH_COST = "Reduced Upgrade Research Cost"
|
||||
|
||||
# Trap
|
||||
REDUCED_MAX_SUPPLY = "Decreased Maximum Supply"
|
||||
NOTHING = "Nothing"
|
||||
|
||||
# Deprecated
|
||||
PROGRESSIVE_ORBITAL_COMMAND = "Progressive Orbital Command (Deprecated)"
|
||||
|
||||
# Keys
|
||||
_TEMPLATE_MISSION_KEY = "{} Mission Key"
|
||||
_TEMPLATE_NAMED_LAYOUT_KEY = "{} ({}) Questline Key"
|
||||
_TEMPLATE_NUMBERED_LAYOUT_KEY = "Questline Key #{}"
|
||||
_TEMPLATE_NAMED_CAMPAIGN_KEY = "{} Campaign Key"
|
||||
_TEMPLATE_NUMBERED_CAMPAIGN_KEY = "Campaign Key #{}"
|
||||
_TEMPLATE_FLAVOR_KEY = "{} Key"
|
||||
PROGRESSIVE_MISSION_KEY = "Progressive Mission Key"
|
||||
PROGRESSIVE_QUESTLINE_KEY = "Progressive Questline Key"
|
||||
_TEMPLATE_PROGRESSIVE_KEY = "Progressive Key #{}"
|
||||
|
||||
# Names for flavor keys, feel free to add more, but add them to the Custom Mission Order docs too
|
||||
# These will never be randomly created by the generator
|
||||
_flavor_key_names = [
|
||||
"Terran", "Zerg", "Protoss",
|
||||
"Raynor", "Tychus", "Swann", "Stetmann", "Hanson", "Nova", "Tosh", "Valerian", "Warfield", "Mengsk", "Han", "Horner",
|
||||
"Kerrigan", "Zagara", "Abathur", "Yagdra", "Kraith", "Slivan", "Zurvan", "Brakk", "Stukov", "Dehaka", "Niadra", "Izsha",
|
||||
"Artanis", "Zeratul", "Tassadar", "Karax", "Vorazun", "Alarak", "Fenix", "Urun", "Mohandar", "Selendis", "Rohana",
|
||||
"Reigel", "Davis", "Ji'nara"
|
||||
]
|
||||
266
worlds/sc2/item/item_parents.py
Normal file
266
worlds/sc2/item/item_parents.py
Normal file
@@ -0,0 +1,266 @@
|
||||
"""
|
||||
Utilities for telling item parentage hierarchy.
|
||||
ItemData in item_tables.py will point from child item -> parent rule.
|
||||
Rules have a `parent_items()` method which links rule -> parent items.
|
||||
Rules may be more complex than all or any items being present. Call them to determine if they are satisfied.
|
||||
"""
|
||||
|
||||
from typing import Dict, List, Iterable, Sequence, Optional, TYPE_CHECKING
|
||||
import abc
|
||||
from . import item_names, parent_names, item_tables, item_groups
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ..options import Starcraft2Options
|
||||
|
||||
|
||||
class PresenceRule(abc.ABC):
|
||||
"""Contract for a parent presence rule. This should be a protocol in Python 3.10+"""
|
||||
constraint_group: Optional[str]
|
||||
"""Identifies the group this item rule is a part of, subject to min/max upgrades per unit"""
|
||||
display_string: str
|
||||
"""Main item to count as the parent for min/max upgrades per unit purposes"""
|
||||
@abc.abstractmethod
|
||||
def __call__(self, inventory: Iterable[str], options: 'Starcraft2Options') -> bool: ...
|
||||
@abc.abstractmethod
|
||||
def parent_items(self) -> Sequence[str]: ...
|
||||
|
||||
|
||||
class ItemPresent(PresenceRule):
|
||||
def __init__(self, item_name: str) -> None:
|
||||
self.item_name = item_name
|
||||
self.constraint_group = item_name
|
||||
self.display_string = item_name
|
||||
|
||||
def __call__(self, inventory: Iterable[str], options: 'Starcraft2Options') -> bool:
|
||||
return self.item_name in inventory
|
||||
|
||||
def parent_items(self) -> List[str]:
|
||||
return [self.item_name]
|
||||
|
||||
|
||||
class AnyOf(PresenceRule):
|
||||
def __init__(self, group: Iterable[str], main_item: Optional[str] = None, display_string: Optional[str] = None) -> None:
|
||||
self.group = set(group)
|
||||
self.constraint_group = main_item
|
||||
self.display_string = display_string or main_item or ' | '.join(group)
|
||||
|
||||
def __call__(self, inventory: Iterable[str], options: 'Starcraft2Options') -> bool:
|
||||
return len(self.group.intersection(inventory)) > 0
|
||||
|
||||
def parent_items(self) -> List[str]:
|
||||
return sorted(self.group)
|
||||
|
||||
|
||||
class AllOf(PresenceRule):
|
||||
def __init__(self, group: Iterable[str], main_item: Optional[str] = None) -> None:
|
||||
self.group = set(group)
|
||||
self.constraint_group = main_item
|
||||
self.display_string = main_item or ' & '.join(group)
|
||||
|
||||
def __call__(self, inventory: Iterable[str], options: 'Starcraft2Options') -> bool:
|
||||
return len(self.group.intersection(inventory)) == len(self.group)
|
||||
|
||||
def parent_items(self) -> List[str]:
|
||||
return sorted(self.group)
|
||||
|
||||
|
||||
class AnyOfGroupAndOneOtherItem(PresenceRule):
|
||||
def __init__(self, group: Iterable[str], item_name: str) -> None:
|
||||
self.group = set(group)
|
||||
self.item_name = item_name
|
||||
self.constraint_group = item_name
|
||||
self.display_string = item_name
|
||||
|
||||
def __call__(self, inventory: Iterable[str], options: 'Starcraft2Options') -> bool:
|
||||
return (len(self.group.intersection(inventory)) > 0) and self.item_name in inventory
|
||||
|
||||
def parent_items(self) -> List[str]:
|
||||
return sorted(self.group) + [self.item_name]
|
||||
|
||||
|
||||
class MorphlingOrItem(PresenceRule):
|
||||
def __init__(self, item_name: str, has_parent: bool = True) -> None:
|
||||
self.item_name = item_name
|
||||
self.constraint_group = None # Keep morphs from counting towards the parent unit's upgrade count
|
||||
self.display_string = f'{item_name} Morphs'
|
||||
|
||||
def __call__(self, inventory: Iterable[str], options: 'Starcraft2Options') -> bool:
|
||||
return (options.enable_morphling.value != 0) or self.item_name in inventory
|
||||
|
||||
def parent_items(self) -> List[str]:
|
||||
return [self.item_name]
|
||||
|
||||
|
||||
class MorphlingOrAnyOf(PresenceRule):
|
||||
def __init__(self, group: Iterable[str], display_string: str, main_item: Optional[str] = None) -> None:
|
||||
self.group = set(group)
|
||||
self.constraint_group = main_item
|
||||
self.display_string = display_string
|
||||
|
||||
def __call__(self, inventory: Iterable[str], options: 'Starcraft2Options') -> bool:
|
||||
return (options.enable_morphling.value != 0) or (len(self.group.intersection(inventory)) > 0)
|
||||
|
||||
def parent_items(self) -> List[str]:
|
||||
return sorted(self.group)
|
||||
|
||||
|
||||
parent_present: Dict[str, PresenceRule] = {
|
||||
item_name: ItemPresent(item_name)
|
||||
for item_name in item_tables.item_table
|
||||
}
|
||||
|
||||
# Terran
|
||||
parent_present[parent_names.DOMINION_TROOPER_WEAPONS] = AnyOf([
|
||||
item_names.DOMINION_TROOPER_B2_HIGH_CAL_LMG,
|
||||
item_names.DOMINION_TROOPER_CPO7_SALAMANDER_FLAMETHROWER,
|
||||
item_names.DOMINION_TROOPER_HAILSTORM_LAUNCHER,
|
||||
], main_item=item_names.DOMINION_TROOPER)
|
||||
parent_present[parent_names.INFANTRY_UNITS] = AnyOf(item_groups.barracks_units, display_string='Terran Infantry')
|
||||
parent_present[parent_names.INFANTRY_WEAPON_UNITS] = AnyOf(item_groups.barracks_wa_group, display_string='Terran Infantry')
|
||||
parent_present[parent_names.ORBITAL_COMMAND_AND_PLANETARY] = AnyOfGroupAndOneOtherItem(
|
||||
item_groups.orbital_command_abilities,
|
||||
item_names.PLANETARY_FORTRESS,
|
||||
)
|
||||
parent_present[parent_names.SIEGE_TANK_AND_TRANSPORT] = AnyOfGroupAndOneOtherItem(
|
||||
(item_names.MEDIVAC, item_names.HERCULES),
|
||||
item_names.SIEGE_TANK,
|
||||
)
|
||||
parent_present[parent_names.SIEGE_TANK_AND_MEDIVAC] = AllOf((item_names.SIEGE_TANK, item_names.MEDIVAC), item_names.SIEGE_TANK)
|
||||
parent_present[parent_names.SPIDER_MINE_SOURCE] = AnyOf(item_groups.spider_mine_sources, display_string='Spider Mines')
|
||||
parent_present[parent_names.STARSHIP_UNITS] = AnyOf(item_groups.starport_units, display_string='Terran Starships')
|
||||
parent_present[parent_names.STARSHIP_WEAPON_UNITS] = AnyOf(item_groups.starport_wa_group, display_string='Terran Starships')
|
||||
parent_present[parent_names.VEHICLE_UNITS] = AnyOf(item_groups.factory_units, display_string='Terran Vehicles')
|
||||
parent_present[parent_names.VEHICLE_WEAPON_UNITS] = AnyOf(item_groups.factory_wa_group, display_string='Terran Vehicles')
|
||||
parent_present[parent_names.TERRAN_MERCENARIES] = AnyOf(item_groups.terran_mercenaries, display_string='Terran Mercenaries')
|
||||
|
||||
# Zerg
|
||||
parent_present[parent_names.ANY_NYDUS_WORM] = AnyOf((item_names.NYDUS_WORM, item_names.ECHIDNA_WORM), item_names.NYDUS_WORM)
|
||||
parent_present[parent_names.BANELING_SOURCE] = AnyOf(
|
||||
(item_names.ZERGLING_BANELING_ASPECT, item_names.KERRIGAN_SPAWN_BANELINGS),
|
||||
item_names.ZERGLING_BANELING_ASPECT,
|
||||
)
|
||||
parent_present[parent_names.INFESTED_UNITS] = AnyOf(item_groups.infterr_units, display_string='Infested')
|
||||
parent_present[parent_names.INFESTED_FACTORY_OR_STARPORT] = AnyOf(
|
||||
(item_names.INFESTED_DIAMONDBACK, item_names.INFESTED_SIEGE_TANK, item_names.INFESTED_LIBERATOR, item_names.INFESTED_BANSHEE, item_names.BULLFROG)
|
||||
)
|
||||
parent_present[parent_names.MORPH_SOURCE_AIR] = MorphlingOrAnyOf((item_names.MUTALISK, item_names.CORRUPTOR), "Mutalisk/Corruptor Morphs")
|
||||
parent_present[parent_names.MORPH_SOURCE_ROACH] = MorphlingOrItem(item_names.ROACH)
|
||||
parent_present[parent_names.MORPH_SOURCE_ZERGLING] = MorphlingOrItem(item_names.ZERGLING)
|
||||
parent_present[parent_names.MORPH_SOURCE_HYDRALISK] = MorphlingOrItem(item_names.HYDRALISK)
|
||||
parent_present[parent_names.MORPH_SOURCE_ULTRALISK] = MorphlingOrItem(item_names.ULTRALISK)
|
||||
parent_present[parent_names.ZERG_UPROOTABLE_BUILDINGS] = AnyOf(
|
||||
(item_names.SPINE_CRAWLER, item_names.SPORE_CRAWLER, item_names.INFESTED_MISSILE_TURRET, item_names.INFESTED_BUNKER),
|
||||
)
|
||||
parent_present[parent_names.ZERG_MELEE_ATTACKER] = AnyOf(item_groups.zerg_melee_wa, display_string='Zerg Ground')
|
||||
parent_present[parent_names.ZERG_MISSILE_ATTACKER] = AnyOf(item_groups.zerg_ranged_wa, display_string='Zerg Ground')
|
||||
parent_present[parent_names.ZERG_CARAPACE_UNIT] = AnyOf(item_groups.zerg_ground_units, display_string='Zerg Flyers')
|
||||
parent_present[parent_names.ZERG_FLYING_UNIT] = AnyOf(item_groups.zerg_air_units, display_string='Zerg Flyers')
|
||||
parent_present[parent_names.ZERG_MERCENARIES] = AnyOf(item_groups.zerg_mercenaries, display_string='Zerg Mercenaries')
|
||||
parent_present[parent_names.ZERG_OUROBOUROS_CONDITION] = AnyOfGroupAndOneOtherItem(
|
||||
(item_names.ZERGLING, item_names.ROACH, item_names.HYDRALISK, item_names.ABERRATION),
|
||||
item_names.ECHIDNA_WORM
|
||||
)
|
||||
|
||||
# Protoss
|
||||
parent_present[parent_names.ARCHON_SOURCE] = AnyOf(
|
||||
(item_names.HIGH_TEMPLAR, item_names.SIGNIFIER, item_names.ASCENDANT_ARCHON_MERGE, item_names.DARK_TEMPLAR_ARCHON_MERGE),
|
||||
main_item="Archon",
|
||||
)
|
||||
parent_present[parent_names.CARRIER_CLASS] = AnyOf(
|
||||
(item_names.CARRIER, item_names.TRIREME, item_names.SKYLORD),
|
||||
main_item=item_names.CARRIER,
|
||||
)
|
||||
parent_present[parent_names.CARRIER_OR_TRIREME] = AnyOf(
|
||||
(item_names.CARRIER, item_names.TRIREME),
|
||||
main_item=item_names.CARRIER,
|
||||
)
|
||||
parent_present[parent_names.DARK_ARCHON_SOURCE] = AnyOf(
|
||||
(item_names.DARK_ARCHON, item_names.DARK_TEMPLAR_DARK_ARCHON_MELD),
|
||||
main_item=item_names.DARK_ARCHON,
|
||||
)
|
||||
parent_present[parent_names.DARK_TEMPLAR_CLASS] = AnyOf(
|
||||
(item_names.DARK_TEMPLAR, item_names.AVENGER, item_names.BLOOD_HUNTER),
|
||||
main_item=item_names.DARK_TEMPLAR,
|
||||
)
|
||||
parent_present[parent_names.STORM_CASTER] = AnyOf(
|
||||
(item_names.HIGH_TEMPLAR, item_names.SIGNIFIER),
|
||||
main_item=item_names.HIGH_TEMPLAR,
|
||||
)
|
||||
parent_present[parent_names.IMMORTAL_OR_ANNIHILATOR] = AnyOf(
|
||||
(item_names.IMMORTAL, item_names.ANNIHILATOR),
|
||||
main_item=item_names.IMMORTAL,
|
||||
)
|
||||
parent_present[parent_names.PHOENIX_CLASS] = AnyOf(
|
||||
(item_names.PHOENIX, item_names.MIRAGE, item_names.SKIRMISHER),
|
||||
main_item=item_names.PHOENIX,
|
||||
)
|
||||
parent_present[parent_names.SENTRY_CLASS] = AnyOf(
|
||||
(item_names.SENTRY, item_names.ENERGIZER, item_names.HAVOC),
|
||||
main_item=item_names.SENTRY,
|
||||
)
|
||||
parent_present[parent_names.SENTRY_CLASS_OR_SHIELD_BATTERY] = AnyOf(
|
||||
(item_names.SENTRY, item_names.ENERGIZER, item_names.HAVOC, item_names.SHIELD_BATTERY),
|
||||
main_item=item_names.SENTRY,
|
||||
)
|
||||
parent_present[parent_names.STALKER_CLASS] = AnyOf(
|
||||
(item_names.STALKER, item_names.SLAYER, item_names.INSTIGATOR),
|
||||
main_item=item_names.STALKER,
|
||||
)
|
||||
parent_present[parent_names.SUPPLICANT_AND_ASCENDANT] = AllOf(
|
||||
(item_names.SUPPLICANT, item_names.ASCENDANT),
|
||||
main_item=item_names.ASCENDANT,
|
||||
)
|
||||
parent_present[parent_names.VOID_RAY_CLASS] = AnyOf(
|
||||
(item_names.VOID_RAY, item_names.DESTROYER, item_names.PULSAR, item_names.DAWNBRINGER),
|
||||
main_item=item_names.VOID_RAY,
|
||||
)
|
||||
parent_present[parent_names.ZEALOT_OR_SENTINEL_OR_CENTURION] = AnyOf(
|
||||
(item_names.ZEALOT, item_names.SENTINEL, item_names.CENTURION),
|
||||
main_item=item_names.ZEALOT,
|
||||
)
|
||||
parent_present[parent_names.SCOUT_CLASS] = AnyOf(
|
||||
(item_names.SCOUT, item_names.OPPRESSOR, item_names.CALADRIUS, item_names.MISTWING),
|
||||
main_item=item_names.SCOUT,
|
||||
)
|
||||
parent_present[parent_names.SCOUT_OR_OPPRESSOR_OR_MISTWING] = AnyOf(
|
||||
(item_names.SCOUT, item_names.OPPRESSOR, item_names.MISTWING),
|
||||
main_item=item_names.SCOUT,
|
||||
)
|
||||
parent_present[parent_names.PROTOSS_STATIC_DEFENSE] = AnyOf(
|
||||
(item_names.NEXUS_OVERCHARGE, item_names.PHOTON_CANNON, item_names.KHAYDARIN_MONOLITH, item_names.SHIELD_BATTERY),
|
||||
main_item=item_names.PHOTON_CANNON,
|
||||
)
|
||||
parent_present[parent_names.PROTOSS_ATTACKING_BUILDING] = AnyOf(
|
||||
(item_names.NEXUS_OVERCHARGE, item_names.PHOTON_CANNON, item_names.KHAYDARIN_MONOLITH),
|
||||
main_item=item_names.PHOTON_CANNON,
|
||||
)
|
||||
|
||||
|
||||
parent_id_to_children: Dict[str, Sequence[str]] = {}
|
||||
"""Parent identifier to child items. Only contains parent rules with children."""
|
||||
child_item_to_parent_items: Dict[str, Sequence[str]] = {}
|
||||
"""Child item name to all parent items that can possibly affect its presence rule. Populated for all item names."""
|
||||
|
||||
parent_item_to_ids: Dict[str, Sequence[str]] = {}
|
||||
"""Parent item to parent identifiers it affects. Populated for all items and parent IDs."""
|
||||
parent_item_to_children: Dict[str, Sequence[str]] = {}
|
||||
"""Parent item to child item names. Populated for all items and parent IDs."""
|
||||
item_upgrade_groups: Dict[str, Sequence[str]] = {}
|
||||
"""Mapping of upgradable item group -> child items. Only populated for groups with child items."""
|
||||
# Note(mm): "All items" promise satisfied by the basic ItemPresent auto-generated rules
|
||||
|
||||
def _init() -> None:
|
||||
for item_name, item_data in item_tables.item_table.items():
|
||||
if item_data.parent is None:
|
||||
continue
|
||||
parent_id_to_children.setdefault(item_data.parent, []).append(item_name) # type: ignore
|
||||
child_item_to_parent_items[item_name] = parent_present[item_data.parent].parent_items()
|
||||
|
||||
for parent_id, presence_func in parent_present.items():
|
||||
for parent_item in presence_func.parent_items():
|
||||
parent_item_to_ids.setdefault(parent_item, []).append(parent_id) # type: ignore
|
||||
parent_item_to_children.setdefault(parent_item, []).extend(parent_id_to_children.get(parent_id, [])) # type: ignore
|
||||
if presence_func.constraint_group is not None and parent_id_to_children.get(parent_id):
|
||||
item_upgrade_groups.setdefault(presence_func.constraint_group, []).extend(parent_id_to_children[parent_id]) # type: ignore
|
||||
|
||||
_init()
|
||||
2415
worlds/sc2/item/item_tables.py
Normal file
2415
worlds/sc2/item/item_tables.py
Normal file
File diff suppressed because it is too large
Load Diff
57
worlds/sc2/item/parent_names.py
Normal file
57
worlds/sc2/item/parent_names.py
Normal file
@@ -0,0 +1,57 @@
|
||||
"""
|
||||
Identifiers for complex item parent structures.
|
||||
Defined separately from item_parents to avoid a circular import
|
||||
item_names -> item_parent_names -> item_tables -> item_parents
|
||||
"""
|
||||
|
||||
# Terran
|
||||
DOMINION_TROOPER_WEAPONS = "Dominion Trooper Weapons"
|
||||
INFANTRY_UNITS = "Infantry Units"
|
||||
INFANTRY_WEAPON_UNITS = "Infantry Weapon Units"
|
||||
ORBITAL_COMMAND_AND_PLANETARY = "Orbital Command Abilities + Planetary Fortress" # MULE | Scan | Supply Drop
|
||||
SIEGE_TANK_AND_TRANSPORT = "Siege Tank + Transport"
|
||||
SIEGE_TANK_AND_MEDIVAC = "Siege Tank + Medivac"
|
||||
SPIDER_MINE_SOURCE = "Spider Mine Source"
|
||||
STARSHIP_UNITS = "Starship Units"
|
||||
STARSHIP_WEAPON_UNITS = "Starship Weapon Units"
|
||||
VEHICLE_UNITS = "Vehicle Units"
|
||||
VEHICLE_WEAPON_UNITS = "Vehicle Weapon Units"
|
||||
TERRAN_MERCENARIES = "Terran Mercenaries"
|
||||
|
||||
# Zerg
|
||||
ANY_NYDUS_WORM = "Any Nydus Worm"
|
||||
BANELING_SOURCE = "Any Baneling Source" # Baneling aspect | Kerrigan Spawn Banelings
|
||||
INFESTED_UNITS = "Infested Units"
|
||||
INFESTED_FACTORY_OR_STARPORT = "Infested Factory or Starport"
|
||||
MORPH_SOURCE_AIR = "Air Morph Source" # Morphling | Mutalisk | Corruptor
|
||||
MORPH_SOURCE_ROACH = "Roach Morph Source" # Morphling | Roach
|
||||
MORPH_SOURCE_ZERGLING = "Zergling Morph Source" # Morphling | Zergling
|
||||
MORPH_SOURCE_HYDRALISK = "Hydralisk Morph Source" # Morphling | Hydralisk
|
||||
MORPH_SOURCE_ULTRALISK = "Ultralisk Morph Source" # Morphling | Ultralisk
|
||||
ZERG_UPROOTABLE_BUILDINGS = "Zerg Uprootable Buildings"
|
||||
ZERG_MELEE_ATTACKER = "Zerg Melee Attacker"
|
||||
ZERG_MISSILE_ATTACKER = "Zerg Missile Attacker"
|
||||
ZERG_CARAPACE_UNIT = "Zerg Carapace Unit"
|
||||
ZERG_FLYING_UNIT = "Zerg Flying Unit"
|
||||
ZERG_MERCENARIES = "Zerg Mercenaries"
|
||||
ZERG_OUROBOUROS_CONDITION = "Zerg Ourobouros Condition"
|
||||
|
||||
# Protoss
|
||||
ARCHON_SOURCE = "Any Archon Source"
|
||||
CARRIER_CLASS = "Carrier Class"
|
||||
CARRIER_OR_TRIREME = "Carrier | Trireme"
|
||||
DARK_ARCHON_SOURCE = "Dark Archon Source"
|
||||
DARK_TEMPLAR_CLASS = "Dark Templar Class"
|
||||
STORM_CASTER = "Storm Caster"
|
||||
IMMORTAL_OR_ANNIHILATOR = "Immortal | Annihilator"
|
||||
PHOENIX_CLASS = "Phoenix Class"
|
||||
SENTRY_CLASS = "Sentry Class"
|
||||
SENTRY_CLASS_OR_SHIELD_BATTERY = "Sentry Class | Shield Battery"
|
||||
STALKER_CLASS = "Stalker Class"
|
||||
SUPPLICANT_AND_ASCENDANT = "Supplicant + Ascendant"
|
||||
VOID_RAY_CLASS = "Void Ray Class"
|
||||
ZEALOT_OR_SENTINEL_OR_CENTURION = "Zealot | Sentinel | Centurion"
|
||||
PROTOSS_STATIC_DEFENSE = "Protoss Static Defense"
|
||||
PROTOSS_ATTACKING_BUILDING = "Protoss Attacking Structure"
|
||||
SCOUT_CLASS = "Scout Class"
|
||||
SCOUT_OR_OPPRESSOR_OR_MISTWING = "Scout | Oppressor | Mist Wing"
|
||||
Reference in New Issue
Block a user