diff --git a/worlds/sc2/item/item_descriptions.py b/worlds/sc2/item/item_descriptions.py index adb8103fcba5..42e76b2b43ee 100644 --- a/worlds/sc2/item/item_descriptions.py +++ b/worlds/sc2/item/item_descriptions.py @@ -758,6 +758,7 @@ def _ability_desc(unit_name_plural: str, ability_name: str, ability_description: item_names.ZERG_EXCAVATING_CLAWS: "Increases movement speed of uprooted Zerg structures, especially off creep. Also increases root speed.", item_names.HIVE_CLUSTER_MATURATION: "Lairs are replaced with Hives, and Hatcheries can now upgrade directly to Hives at the Lair's original cost.", item_names.MACROSCOPIC_RECUPERATION: "Zerg structures regenerate health rapidly while on creep and out of combat. Does not apply to uprooted structures, or structures with the Mechanical tag.", + item_names.BIOMECHANICAL_STOCKPILING: "Infested Factories and Starports can store 3 additional unit charges.", item_names.ZERGLING_RAPTOR_STRAIN: "Allows Zerglings to jump up and down cliffs and leap onto enemies. Also increases Zergling attack damage by 2.", item_names.ZERGLING_SWARMLING_STRAIN: "Zerglings will spawn instantly and with an extra Zergling per egg at no additional cost.", item_names.ROACH_VILE_STRAIN: "Roach attacks will slow the movement and attack speed of enemies.", diff --git a/worlds/sc2/item/item_names.py b/worlds/sc2/item/item_names.py index 3cd8b48a7c1f..dab90b2e1275 100644 --- a/worlds/sc2/item/item_names.py +++ b/worlds/sc2/item/item_names.py @@ -599,6 +599,7 @@ ZERG_EXCAVATING_CLAWS = "Excavating Claws (Zerg)" HIVE_CLUSTER_MATURATION = "Hive Cluster Maturation (Zerg)" MACROSCOPIC_RECUPERATION = "Macroscopic Recuperation (Zerg)" +BIOMECHANICAL_STOCKPILING = "Bio-Mechanical Stockpiling (Zerg)" # Kerrigan Levels KERRIGAN_LEVELS_1 = "1 Kerrigan Level" diff --git a/worlds/sc2/item/item_tables.py b/worlds/sc2/item/item_tables.py index a8ca5c30a30f..6ac302e1f5bf 100644 --- a/worlds/sc2/item/item_tables.py +++ b/worlds/sc2/item/item_tables.py @@ -1600,6 +1600,7 @@ def get_full_item_list(): item_names.ZERG_CREEP_STOMACH: ItemData(705 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 10, SC2Race.ZERG), item_names.HIVE_CLUSTER_MATURATION: ItemData(706 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 12, SC2Race.ZERG), item_names.MACROSCOPIC_RECUPERATION: ItemData(707 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 13, SC2Race.ZERG), + item_names.BIOMECHANICAL_STOCKPILING: ItemData(708 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Evolution_Pit, 14, SC2Race.ZERG), # Morphs item_names.MUTALISK_CORRUPTOR_GUARDIAN_ASPECT: ItemData(800 + SC2HOTS_ITEM_ID_OFFSET, ZergItemType.Morph, 6, SC2Race.ZERG, classification=ItemClassification.progression), diff --git a/worlds/sc2/locations.py b/worlds/sc2/locations.py index 068c835b7483..cf9c76dc5a93 100644 --- a/worlds/sc2/locations.py +++ b/worlds/sc2/locations.py @@ -4356,6 +4356,36 @@ def get_locations(world: Optional['SC2World']) -> Tuple[LocationData, ...]: and (not logic.take_over_ai_allies or logic.terran_base_trasher(state))), flags=LocationFlag.SPEEDRUN ), + make_location_data(SC2Mission.DARK_WHISPERS_T.mission_name, "Victory", SC2_RACESWAP_LOC_ID_OFFSET + 9900, LocationType.VICTORY, + logic.terran_competent_comp + ), + make_location_data(SC2Mission.DARK_WHISPERS_T.mission_name, "First Prisoner Group", SC2_RACESWAP_LOC_ID_OFFSET + 9901, LocationType.VANILLA, + logic.terran_competent_comp + ), + make_location_data(SC2Mission.DARK_WHISPERS_T.mission_name, "Second Prisoner Group", SC2_RACESWAP_LOC_ID_OFFSET + 9902, LocationType.VANILLA, + logic.terran_competent_comp + ), + make_location_data(SC2Mission.DARK_WHISPERS_T.mission_name, "First Pylon", SC2_RACESWAP_LOC_ID_OFFSET + 9903, LocationType.VANILLA, + logic.terran_competent_comp + ), + make_location_data(SC2Mission.DARK_WHISPERS_T.mission_name, "Second Pylon", SC2_RACESWAP_LOC_ID_OFFSET + 9904, LocationType.VANILLA, + logic.terran_competent_comp + ), + make_location_data(SC2Mission.DARK_WHISPERS_Z.mission_name, "Victory", SC2_RACESWAP_LOC_ID_OFFSET + 10000, LocationType.VICTORY, + logic.zerg_competent_comp_basic_aa + ), + make_location_data(SC2Mission.DARK_WHISPERS_Z.mission_name, "First Prisoner Group", SC2_RACESWAP_LOC_ID_OFFSET + 10001, LocationType.VANILLA, + logic.zerg_competent_comp_basic_aa + ), + make_location_data(SC2Mission.DARK_WHISPERS_Z.mission_name, "Second Prisoner Group", SC2_RACESWAP_LOC_ID_OFFSET + 10002, LocationType.VANILLA, + logic.zerg_competent_comp_basic_aa + ), + make_location_data(SC2Mission.DARK_WHISPERS_Z.mission_name, "First Pylon", SC2_RACESWAP_LOC_ID_OFFSET + 10003, LocationType.VANILLA, + logic.zerg_competent_comp_basic_aa + ), + make_location_data(SC2Mission.DARK_WHISPERS_Z.mission_name, "Second Pylon", SC2_RACESWAP_LOC_ID_OFFSET + 10004, LocationType.VANILLA, + logic.zerg_competent_comp_basic_aa + ), ] beat_events = [] diff --git a/worlds/sc2/mission_tables.py b/worlds/sc2/mission_tables.py index 3a0486376b11..c17b2f85ea9a 100644 --- a/worlds/sc2/mission_tables.py +++ b/worlds/sc2/mission_tables.py @@ -155,7 +155,7 @@ def __init__(self, mission_id: int, name: str, campaign: SC2Campaign, area: str, THE_RECKONING = 49, "The Reckoning (Zerg)", SC2Campaign.HOTS, "Korhal", SC2Race.ZERG, MissionPools.VERY_HARD, "ap_the_reckoning", MissionFlag.Zerg|MissionFlag.Kerrigan|MissionFlag.VsTerran|MissionFlag.AiTerranAlly|MissionFlag.HasRaceSwap # Prologue - DARK_WHISPERS = 50, "Dark Whispers", SC2Campaign.PROLOGUE, "_1", SC2Race.PROTOSS, MissionPools.EASY, "ap_dark_whispers", MissionFlag.Protoss|MissionFlag.Countdown|MissionFlag.VsTZ + DARK_WHISPERS = 50, "Dark Whispers (Protoss)", SC2Campaign.PROLOGUE, "_1", SC2Race.PROTOSS, MissionPools.EASY, "ap_dark_whispers", MissionFlag.Protoss|MissionFlag.Countdown|MissionFlag.VsTZ|MissionFlag.HasRaceSwap GHOSTS_IN_THE_FOG = 51, "Ghosts in the Fog", SC2Campaign.PROLOGUE, "_2", SC2Race.PROTOSS, MissionPools.MEDIUM, "ap_ghosts_in_the_fog", MissionFlag.Protoss|MissionFlag.VsProtoss EVIL_AWOKEN = 52, "Evil Awoken", SC2Campaign.PROLOGUE, "_3", SC2Race.PROTOSS, MissionPools.STARTER, "ap_evil_awoken", MissionFlag.Protoss|MissionFlag.NoBuild|MissionFlag.VsProtoss @@ -277,7 +277,8 @@ def __init__(self, mission_id: int, name: str, campaign: SC2Campaign, area: str, DEATH_FROM_ABOVE_P = 179, "Death From Above (Protoss)", SC2Campaign.HOTS, "Korhal", SC2Race.PROTOSS, MissionPools.HARD, "ap_death_from_above", MissionFlag.Protoss|MissionFlag.VsTerran|MissionFlag.RaceSwap THE_RECKONING_T = 180, "The Reckoning (Terran)", SC2Campaign.HOTS, "Korhal", SC2Race.TERRAN, MissionPools.VERY_HARD, "ap_the_reckoning", MissionFlag.Terran|MissionFlag.VsTerran|MissionFlag.AiTerranAlly|MissionFlag.RaceSwap THE_RECKONING_P = 181, "The Reckoning (Protoss)", SC2Campaign.HOTS, "Korhal", SC2Race.PROTOSS, MissionPools.VERY_HARD, "ap_the_reckoning", MissionFlag.Protoss|MissionFlag.VsTerran|MissionFlag.AiTerranAlly|MissionFlag.RaceSwap - # 182/183 - Dark Whispers + DARK_WHISPERS_T = 182, "Dark Whispers (Terran)", SC2Campaign.PROLOGUE, "_1", SC2Race.TERRAN, MissionPools.MEDIUM, "ap_dark_whispers", MissionFlag.Terran|MissionFlag.Countdown|MissionFlag.VsTZ|MissionFlag.RaceSwap + DARK_WHISPERS_Z = 183, "Dark Whispers (Zerg)", SC2Campaign.PROLOGUE, "_1", SC2Race.ZERG, MissionPools.MEDIUM, "ap_dark_whispers", MissionFlag.Zerg|MissionFlag.Countdown|MissionFlag.VsTZ|MissionFlag.RaceSwap # 184/185 - Ghosts in the Fog # 186/187 - Evil Awoken # 188/189 - For Aiur!