Skip to content

Commit

Permalink
Merge pull request #212 from Ziktofel/overlord_upgrades
Browse files Browse the repository at this point in the history
Add Overlord upgrades
  • Loading branch information
Ziktofel authored Jun 15, 2024
2 parents 5dae0dd + 491b04d commit 0b787fd
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 43 deletions.
16 changes: 10 additions & 6 deletions worlds/sc2/item_descriptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -649,15 +649,15 @@ def _ability_desc(unit_name_plural: str, ability_name: str, ability_description:
item_names.KERRIGAN_CRUSHING_GRIP: "Kerrigan stuns enemies in a target area for 3 seconds and deals 30 damage over time. Heroic units are not stunned.",
item_names.KERRIGAN_CHAIN_REACTION: "Kerrigan's attacks deal normal damage to her target then jump to additional nearby enemies.",
item_names.KERRIGAN_PSIONIC_SHIFT: "Kerrigan dashes through enemies, dealing 50 damage to all enemies in her path.",
item_names.KERRIGAN_ZERGLING_RECONSTITUTION: "Killed Zerglings respawn from your primary Hatchery at no cost.",
item_names.KERRIGAN_IMPROVED_OVERLORDS: "Overlords morph instantly and provide 50% more supply.",
item_names.KERRIGAN_AUTOMATED_EXTRACTORS: "Extractors automatically harvest Vespene Gas without the need for Drones.",
item_names.ZERGLING_RECONSTITUTION: "Killed Zerglings respawn from your primary Hatchery at no cost.",
item_names.OVERLORD_IMPROVED_OVERLORDS: "Overlords morph instantly and provide 50% more supply.",
item_names.AUTOMATED_EXTRACTORS: "Extractors automatically harvest Vespene Gas without the need for Drones.",
item_names.KERRIGAN_WILD_MUTATION: "Kerrigan gives all units in an area +200 max life and double attack speed for 10 seconds.",
item_names.KERRIGAN_SPAWN_BANELINGS: "Kerrigan spawns six Banelings with timed life.",
item_names.KERRIGAN_MEND: "Kerrigan heals for 150 life and heals nearby friendly units for 50 life. An additional +50% life is healed over 15 seconds.",
item_names.KERRIGAN_TWIN_DRONES: "Drones morph in groups of two at no additional cost and require less supply.",
item_names.KERRIGAN_MALIGNANT_CREEP: "Your units and structures gain increased life regeneration and 30% increased attack speed while on creep. Creep Tumors also spread creep faster and farther.",
item_names.KERRIGAN_VESPENE_EFFICIENCY: "Extractors produce Vespene gas 25% faster.",
item_names.TWIN_DRONES: "Drones morph in groups of two at no additional cost and require less supply.",
item_names.MALIGNANT_CREEP: "Your units and structures gain increased life regeneration and 30% increased attack speed while on creep. Creep Tumors also spread creep faster and farther.",
item_names.VESPENE_EFFICIENCY: "Extractors produce Vespene gas 25% faster.",
item_names.KERRIGAN_INFEST_BROODLINGS: "Enemies damaged by Kerrigan become infested and will spawn Broodlings with timed life if killed quickly.",
item_names.KERRIGAN_FURY: "Each of Kerrigan's attacks temporarily increase her attack speed by 15%. Can stack up to 75%.",
item_names.KERRIGAN_ABILITY_EFFICIENCY: "Kerrigan's abilities have their cooldown and energy cost reduced by 20%.",
Expand All @@ -682,6 +682,10 @@ def _ability_desc(unit_name_plural: str, ability_name: str, ability_description:
item_names.INFESTED_SIEGE_TANKS: "Mercenary infested Siege Tanks that may be called in from the Hatchery.",
item_names.INFESTED_BANSHEES: "Mercenary infested Banshees that may be called in from the Hatchery.",
item_names.OVERLORD_VENTRAL_SACS: "Overlords gain the ability to transport ground units.",
item_names.OVERLORD_GENERATE_CREEP: "Overlords gain the ability to generate creep while standing still.",
item_names.OVERLORD_ANTENNAE: "Increases Overlord sight range.",
item_names.OVERLORD_PNEUMATIZED_CARAPACE: "Increases Overlord movement speed.",
item_names.OVERLORD_OVERSEER_ASPECT: "Allows to morph Overlords into Overseers. Overseers can use Spawn Creep Tumor and Contaminate abilities.",
item_names.MUTALISK_CORRUPTOR_GUARDIAN_ASPECT: "Long-range anti-ground flyer. Can attack ground units. Morphed from the Mutalisk or Corruptor.",
item_names.MUTALISK_CORRUPTOR_DEVOURER_ASPECT: "Anti-air flyer. Attack inflict Acid Spores. Can attack air units. Morphed from the Mutalisk or Corruptor.",
item_names.ROACH_RAVAGER_ASPECT: "Ranged artillery. Can use Corrosive Bile. Can attack ground units. Morphed from the Roach.",
Expand Down
49 changes: 43 additions & 6 deletions worlds/sc2/item_groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,16 @@ class ItemGroupNames:
HOTS_MORPHS = "HotS Morphs"
KERRIGAN_ABILITIES = "Kerrigan 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"
HOTS_ITEMS = "HotS Items"
"""All items from vanilla HotS"""
OVERLORD_UPGRADES = "Overlord Upgrades"
ZERG_MORPHS = "Zerg Morphs"
ZERG_MERCS = "Zerg Mercenaries"
ZERG_BUILDINGS = "Zerg Buildings"
Expand Down Expand Up @@ -412,6 +420,35 @@ def get_all_group_names(cls) -> typing.Set[str]:
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_TIER_1] = [
item_names.KERRIGAN_CRUSHING_GRIP, item_names.KERRIGAN_HEROIC_FORTITUDE, item_names.KERRIGAN_LEAPING_STRIKE
]
item_name_groups[ItemGroupNames.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] = [
item_names.TWIN_DRONES, item_names.AUTOMATED_EXTRACTORS, item_names.ZERGLING_RECONSTITUTION
]
item_name_groups[ItemGroupNames.KERRIGAN_TIER_4] = [
item_names.KERRIGAN_MEND, item_names.KERRIGAN_SPAWN_BANELINGS, item_names.KERRIGAN_WILD_MUTATION
]
item_name_groups[ItemGroupNames.KERRIGAN_TIER_5] = [
item_names.MALIGNANT_CREEP, item_names.VESPENE_EFFICIENCY, item_names.OVERLORD_IMPROVED_OVERLORDS
]
item_name_groups[ItemGroupNames.KERRIGAN_TIER_6] = [
item_names.KERRIGAN_INFEST_BROODLINGS, item_names.KERRIGAN_FURY, item_names.KERRIGAN_ABILITY_EFFICIENCY
]
item_name_groups[ItemGroupNames.KERRIGAN_TIER_7] = [
item_names.KERRIGAN_APOCALYPSE, item_names.KERRIGAN_SPAWN_LEVIATHAN, item_names.KERRIGAN_DROP_PODS
]
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 = [
Expand All @@ -427,12 +464,12 @@ def get_all_group_names(cls) -> typing.Set[str]:
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.KERRIGAN_ZERGLING_RECONSTITUTION,
item_names.KERRIGAN_IMPROVED_OVERLORDS,
item_names.KERRIGAN_AUTOMATED_EXTRACTORS,
item_names.KERRIGAN_TWIN_DRONES,
item_names.KERRIGAN_MALIGNANT_CREEP,
item_names.KERRIGAN_VESPENE_EFFICIENCY,
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
Expand Down
48 changes: 26 additions & 22 deletions worlds/sc2/item_names.py
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,11 @@
CORRUPTOR_CONSTRUCT_REGENERATION = "Construct Regeneration (Corruptor)"
CORRUPTOR_SCOURGE_INCUBATION = "Scourge Incubation (Corruptor)"
CORRUPTOR_RESOURCE_EFFICIENCY = "Resource Efficiency (Corruptor)"
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)"

# Zerg Strains
ZERGLING_RAPTOR_STRAIN = "Raptor Strain (Zergling)"
Expand All @@ -462,38 +467,37 @@
MUTALISK_CORRUPTOR_GUARDIAN_ASPECT = "Guardian Aspect (Mutalisk/Corruptor)"
MUTALISK_CORRUPTOR_DEVOURER_ASPECT = "Devourer Aspect (Mutalisk/Corruptor)"
ROACH_RAVAGER_ASPECT = "Ravager Aspect (Roach)"
OVERLORD_OVERSEER_ASPECT = "Overseer Aspect (Overlord)"

# Zerg Mercs
INFESTED_MEDICS = "Infested Medics"
INFESTED_SIEGE_TANKS = "Infested Siege Tanks"
INFESTED_BANSHEES = "Infested Banshees"

# Kerrigan Upgrades
KERRIGAN_KINETIC_BLAST = "Kinetic Blast (Kerrigan Tier 1)"
KERRIGAN_HEROIC_FORTITUDE = "Heroic Fortitude (Kerrigan Tier 1)"
KERRIGAN_LEAPING_STRIKE = "Leaping Strike (Kerrigan Tier 1)"
KERRIGAN_CRUSHING_GRIP = "Crushing Grip (Kerrigan Tier 2)"
KERRIGAN_CHAIN_REACTION = "Chain Reaction (Kerrigan Tier 2)"
KERRIGAN_PSIONIC_SHIFT = "Psionic Shift (Kerrigan Tier 2)"
KERRIGAN_WILD_MUTATION = "Wild Mutation (Kerrigan Tier 4)"
KERRIGAN_SPAWN_BANELINGS = "Spawn Banelings (Kerrigan Tier 4)"
KERRIGAN_MEND = "Mend (Kerrigan Tier 4)"
KERRIGAN_INFEST_BROODLINGS = "Infest Broodlings (Kerrigan Tier 6)"
KERRIGAN_FURY = "Fury (Kerrigan Tier 6)"
KERRIGAN_ABILITY_EFFICIENCY = "Ability Efficiency (Kerrigan Tier 6)"
KERRIGAN_APOCALYPSE = "Apocalypse (Kerrigan Tier 7)"
KERRIGAN_SPAWN_LEVIATHAN = "Spawn Leviathan (Kerrigan Tier 7)"
KERRIGAN_DROP_PODS = "Drop-Pods (Kerrigan Tier 7)"
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_PRIMAL_FORM = "Primal Form (Kerrigan)"

# Misc Upgrades
KERRIGAN_ZERGLING_RECONSTITUTION = "Zergling Reconstitution (Kerrigan Tier 3)"
KERRIGAN_IMPROVED_OVERLORDS = "Improved Overlords (Kerrigan Tier 3)"
KERRIGAN_AUTOMATED_EXTRACTORS = "Automated Extractors (Kerrigan Tier 3)"
KERRIGAN_TWIN_DRONES = "Twin Drones (Kerrigan Tier 5)"
KERRIGAN_MALIGNANT_CREEP = "Malignant Creep (Kerrigan Tier 5)"
KERRIGAN_VESPENE_EFFICIENCY = "Vespene Efficiency (Kerrigan Tier 5)"
OVERLORD_VENTRAL_SACS = "Ventral Sacs (Overlord)"
ZERGLING_RECONSTITUTION = "Zergling Reconstitution"
AUTOMATED_EXTRACTORS = "Automated Extractors"
TWIN_DRONES = "Twin Drones"
MALIGNANT_CREEP = "Malignant Creep"
VESPENE_EFFICIENCY = "Vespene Efficiency"

# Kerrigan Levels
KERRIGAN_LEVELS_1 = "1 Kerrigan Level"
Expand Down
22 changes: 14 additions & 8 deletions worlds/sc2/items.py
Original file line number Diff line number Diff line change
Expand Up @@ -1394,15 +1394,15 @@ def get_full_item_list():
item_names.KERRIGAN_CRUSHING_GRIP: ItemData(403 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Ability, 3, SC2Race.ZERG, origin={"hots"}, classification=ItemClassification.progression),
item_names.KERRIGAN_CHAIN_REACTION: ItemData(404 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Ability, 4, SC2Race.ZERG, origin={"hots"}, classification=ItemClassification.progression),
item_names.KERRIGAN_PSIONIC_SHIFT: ItemData(405 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Ability, 5, SC2Race.ZERG, origin={"hots"}, classification=ItemClassification.progression),
item_names.KERRIGAN_ZERGLING_RECONSTITUTION: ItemData(406 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 0, SC2Race.ZERG, origin={"hots"}, classification=ItemClassification.filler),
item_names.KERRIGAN_IMPROVED_OVERLORDS: ItemData(407 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 1, SC2Race.ZERG, origin={"hots"}),
item_names.KERRIGAN_AUTOMATED_EXTRACTORS: ItemData(408 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 2, SC2Race.ZERG, origin={"hots"}),
item_names.ZERGLING_RECONSTITUTION: ItemData(406 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 0, SC2Race.ZERG, origin={"hots"}, classification=ItemClassification.filler),
item_names.OVERLORD_IMPROVED_OVERLORDS: ItemData(407 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 1, SC2Race.ZERG, origin={"hots"}),
item_names.AUTOMATED_EXTRACTORS: ItemData(408 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 2, SC2Race.ZERG, origin={"hots"}),
item_names.KERRIGAN_WILD_MUTATION: ItemData(409 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Ability, 6, SC2Race.ZERG, origin={"hots"}, classification=ItemClassification.progression),
item_names.KERRIGAN_SPAWN_BANELINGS: ItemData(410 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Ability, 7, SC2Race.ZERG, origin={"hots"}, classification=ItemClassification.progression),
item_names.KERRIGAN_MEND: ItemData(411 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Ability, 8, SC2Race.ZERG, origin={"hots"}, classification=ItemClassification.progression),
item_names.KERRIGAN_TWIN_DRONES: ItemData(412 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 3, SC2Race.ZERG, origin={"hots"}),
item_names.KERRIGAN_MALIGNANT_CREEP: ItemData(413 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 4, SC2Race.ZERG, origin={"hots"}),
item_names.KERRIGAN_VESPENE_EFFICIENCY: ItemData(414 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 5, SC2Race.ZERG, origin={"hots"}),
item_names.TWIN_DRONES: ItemData(412 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 3, SC2Race.ZERG, origin={"hots"}),
item_names.MALIGNANT_CREEP: ItemData(413 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 4, SC2Race.ZERG, origin={"hots"}),
item_names.VESPENE_EFFICIENCY: ItemData(414 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 5, SC2Race.ZERG, origin={"hots"}),
item_names.KERRIGAN_INFEST_BROODLINGS: ItemData(415 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Ability, 9, SC2Race.ZERG, origin={"hots"}, classification=ItemClassification.progression),
item_names.KERRIGAN_FURY: ItemData(416 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Ability, 10, SC2Race.ZERG, origin={"hots"}, classification=ItemClassification.progression),
item_names.KERRIGAN_ABILITY_EFFICIENCY: ItemData(417 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Ability, 11, SC2Race.ZERG, origin={"hots"}),
Expand Down Expand Up @@ -1433,11 +1433,15 @@ def get_full_item_list():

# Misc Upgrades
item_names.OVERLORD_VENTRAL_SACS: ItemData(700 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 6, SC2Race.ZERG, origin={"bw"}),
item_names.OVERLORD_GENERATE_CREEP: ItemData(701 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 7, SC2Race.ZERG, origin={"ext"}),
item_names.OVERLORD_ANTENNAE: ItemData(702 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 8, SC2Race.ZERG, origin={"ext"}, classification=ItemClassification.filler),
item_names.OVERLORD_PNEUMATIZED_CARAPACE: ItemData(703 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 9, SC2Race.ZERG, origin={"ext"}),

# Morphs
item_names.MUTALISK_CORRUPTOR_GUARDIAN_ASPECT: ItemData(800 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Morph, 6, SC2Race.ZERG, origin={"bw"}),
item_names.MUTALISK_CORRUPTOR_DEVOURER_ASPECT: ItemData(801 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Morph, 7, SC2Race.ZERG, origin={"bw"}),
item_names.ROACH_RAVAGER_ASPECT: ItemData(802 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Morph, 8, SC2Race.ZERG, origin={"ext"}),
item_names.OVERLORD_OVERSEER_ASPECT: ItemData(803 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Morph, 4, SC2Race.ZERG, origin={"ext"}, classification=ItemClassification.progression),


# Protoss Units (those that aren't as items in WoL (Prophecy))
Expand Down Expand Up @@ -1815,6 +1819,8 @@ def get_basic_units(world: 'SC2World', race: SC2Race) -> typing.Set[str]:
# Zerg static defenses
item_names.SPORE_CRAWLER,
item_names.SPINE_CRAWLER,
# Overseer
item_names.OVERLORD_OVERSEER_ASPECT,
# Spear of Adun Abilities
item_names.SOA_CHRONO_SURGE,
item_names.SOA_PROGRESSIVE_PROXY_PYLON,
Expand Down Expand Up @@ -1904,9 +1910,9 @@ def get_basic_units(world: 'SC2World', race: SC2Race) -> typing.Set[str]:
kerrigan_passives: typing.List[typing.Set[str]] = [
{item_names.KERRIGAN_HEROIC_FORTITUDE},
{item_names.KERRIGAN_CHAIN_REACTION},
{item_names.KERRIGAN_ZERGLING_RECONSTITUTION, item_names.KERRIGAN_IMPROVED_OVERLORDS, item_names.KERRIGAN_AUTOMATED_EXTRACTORS},
{item_names.ZERGLING_RECONSTITUTION, item_names.OVERLORD_IMPROVED_OVERLORDS, item_names.AUTOMATED_EXTRACTORS},
set(),
{item_names.KERRIGAN_TWIN_DRONES, item_names.KERRIGAN_MALIGNANT_CREEP, item_names.KERRIGAN_VESPENE_EFFICIENCY},
{item_names.TWIN_DRONES, item_names.MALIGNANT_CREEP, item_names.VESPENE_EFFICIENCY},
{item_names.KERRIGAN_INFEST_BROODLINGS, item_names.KERRIGAN_FURY, item_names.KERRIGAN_ABILITY_EFFICIENCY},
set(),
]
Expand Down
2 changes: 1 addition & 1 deletion worlds/sc2/rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ def zerg_competent_comp(self, state: CollectionState) -> bool:
return vespene_unit and state.has_any({item_names.ZERGLING, item_names.SWARM_QUEEN}, self.player)

def spread_creep(self, state: CollectionState) -> bool:
return self.advanced_tactics or state.has(item_names.SWARM_QUEEN, self.player)
return self.advanced_tactics or state.has_any({item_names.SWARM_QUEEN, item_names.OVERLORD_OVERSEER_ASPECT}, self.player)

def zerg_competent_defense(self, state: CollectionState) -> bool:
return (
Expand Down
3 changes: 3 additions & 0 deletions worlds/sc2/test/test_generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,9 @@ def test_excluding_zerg_units_with_morphling_disabled_should_exclude_aspects(sel
itempool = [item.name for item in self.multiworld.itempool]
self.assertTrue(itempool)
aspects_in_pool = list(set(itempool).intersection(set(item_groups.zerg_morphs)))
if item_names.OVERLORD_OVERSEER_ASPECT in aspects_in_pool:
# Overseer morphs from Overlord, that's available always
aspects_in_pool.remove(item_names.OVERLORD_OVERSEER_ASPECT)
self.assertFalse(aspects_in_pool)
units_in_pool = list(set(itempool).intersection(set(item_groups.zerg_units))
.difference(set(item_groups.zerg_morphs)))
Expand Down

0 comments on commit 0b787fd

Please sign in to comment.