diff --git a/worlds/sc2/locations.py b/worlds/sc2/locations.py index b934fcc4e329..fc4680a5ff2a 100644 --- a/worlds/sc2/locations.py +++ b/worlds/sc2/locations.py @@ -105,39 +105,39 @@ def get_locations(world: Optional['SC2World']) -> Tuple[LocationData, ...]: LocationData("Liberation Day", "Liberation Day: Sixth Statue", SC2WOL_LOC_ID_OFFSET + 106, LocationType.VANILLA), LocationData("Liberation Day", "Liberation Day: Special Delivery", SC2WOL_LOC_ID_OFFSET + 107, LocationType.EXTRA), LocationData("Liberation Day", "Liberation Day: Transport", SC2WOL_LOC_ID_OFFSET + 108, LocationType.EXTRA), - LocationData("The Outlaws (T)", "The Outlaws (Terran): Victory", SC2WOL_LOC_ID_OFFSET + 200, LocationType.VICTORY, + LocationData("The Outlaws (Terran)", "The Outlaws (Terran): Victory", SC2WOL_LOC_ID_OFFSET + 200, LocationType.VICTORY, lambda state: logic.terran_early_tech(state)), - LocationData("The Outlaws (T)", "The Outlaws (Terran): Rebel Base", SC2WOL_LOC_ID_OFFSET + 201, LocationType.VANILLA, + LocationData("The Outlaws (Terran)", "The Outlaws (Terran): Rebel Base", SC2WOL_LOC_ID_OFFSET + 201, LocationType.VANILLA, lambda state: logic.terran_early_tech(state)), - LocationData("The Outlaws (T)", "The Outlaws (Terran): North Resource Pickups", SC2WOL_LOC_ID_OFFSET + 202, LocationType.EXTRA, + LocationData("The Outlaws (Terran)", "The Outlaws (Terran): North Resource Pickups", SC2WOL_LOC_ID_OFFSET + 202, LocationType.EXTRA, lambda state: logic.terran_early_tech(state)), - LocationData("The Outlaws (T)", "The Outlaws (Terran): Bunker", SC2WOL_LOC_ID_OFFSET + 203, LocationType.VANILLA, + LocationData("The Outlaws (Terran)", "The Outlaws (Terran): Bunker", SC2WOL_LOC_ID_OFFSET + 203, LocationType.VANILLA, lambda state: logic.terran_early_tech(state)), - LocationData("The Outlaws (T)", "The Outlaws (Terran): Close Resource Pickups", SC2WOL_LOC_ID_OFFSET + 204, LocationType.EXTRA), - LocationData("Zero Hour (T)", "Zero Hour (Terran): Victory", SC2WOL_LOC_ID_OFFSET + 300, LocationType.VICTORY, + LocationData("The Outlaws (Terran)", "The Outlaws (Terran): Close Resource Pickups", SC2WOL_LOC_ID_OFFSET + 204, LocationType.EXTRA), + LocationData("Zero Hour (Terran)", "Zero Hour (Terran): Victory", SC2WOL_LOC_ID_OFFSET + 300, LocationType.VICTORY, lambda state: logic.terran_common_unit(state) and logic.terran_defense_rating(state, True) >= 2 and (adv_tactics or logic.terran_basic_anti_air(state))), - LocationData("Zero Hour (T)", "Zero Hour (Terran): First Group Rescued", SC2WOL_LOC_ID_OFFSET + 301, LocationType.VANILLA), - LocationData("Zero Hour (T)", "Zero Hour (Terran): Second Group Rescued", SC2WOL_LOC_ID_OFFSET + 302, LocationType.VANILLA, + LocationData("Zero Hour (Terran)", "Zero Hour (Terran): First Group Rescued", SC2WOL_LOC_ID_OFFSET + 301, LocationType.VANILLA), + LocationData("Zero Hour (Terran)", "Zero Hour (Terran): Second Group Rescued", SC2WOL_LOC_ID_OFFSET + 302, LocationType.VANILLA, lambda state: logic.terran_common_unit(state)), - LocationData("Zero Hour (T)", "Zero Hour (Terran): Third Group Rescued", SC2WOL_LOC_ID_OFFSET + 303, LocationType.VANILLA, + LocationData("Zero Hour (Terran)", "Zero Hour (Terran): Third Group Rescued", SC2WOL_LOC_ID_OFFSET + 303, LocationType.VANILLA, lambda state: logic.terran_common_unit(state) and logic.terran_defense_rating(state, True) >= 2), - LocationData("Zero Hour (T)", "Zero Hour (Terran): First Hatchery", SC2WOL_LOC_ID_OFFSET + 304, LocationType.CHALLENGE, + LocationData("Zero Hour (Terran)", "Zero Hour (Terran): First Hatchery", SC2WOL_LOC_ID_OFFSET + 304, LocationType.CHALLENGE, lambda state: logic.terran_competent_comp(state)), - LocationData("Zero Hour (T)", "Zero Hour (Terran): Second Hatchery", SC2WOL_LOC_ID_OFFSET + 305, LocationType.CHALLENGE, + LocationData("Zero Hour (Terran)", "Zero Hour (Terran): Second Hatchery", SC2WOL_LOC_ID_OFFSET + 305, LocationType.CHALLENGE, lambda state: logic.terran_competent_comp(state)), - LocationData("Zero Hour (T)", "Zero Hour (Terran): Third Hatchery", SC2WOL_LOC_ID_OFFSET + 306, LocationType.CHALLENGE, + LocationData("Zero Hour (Terran)", "Zero Hour (Terran): Third Hatchery", SC2WOL_LOC_ID_OFFSET + 306, LocationType.CHALLENGE, lambda state: logic.terran_competent_comp(state)), - LocationData("Zero Hour (T)", "Zero Hour (Terran): Fourth Hatchery", SC2WOL_LOC_ID_OFFSET + 307, LocationType.CHALLENGE, + LocationData("Zero Hour (Terran)", "Zero Hour (Terran): Fourth Hatchery", SC2WOL_LOC_ID_OFFSET + 307, LocationType.CHALLENGE, lambda state: logic.terran_competent_comp(state)), - LocationData("Zero Hour (T)", "Zero Hour (Terran): Ride's on its Way", SC2WOL_LOC_ID_OFFSET + 308, LocationType.EXTRA, + LocationData("Zero Hour (Terran)", "Zero Hour (Terran): Ride's on its Way", SC2WOL_LOC_ID_OFFSET + 308, LocationType.EXTRA, lambda state: logic.terran_common_unit(state)), - LocationData("Zero Hour (T)", "Zero Hour (Terran): Hold Just a Little Longer", SC2WOL_LOC_ID_OFFSET + 309, LocationType.EXTRA, + LocationData("Zero Hour (Terran)", "Zero Hour (Terran): Hold Just a Little Longer", SC2WOL_LOC_ID_OFFSET + 309, LocationType.EXTRA, lambda state: logic.terran_common_unit(state) and logic.terran_defense_rating(state, True) >= 2), - LocationData("Zero Hour (T)", "Zero Hour (Terran): Cavalry's on the Way", SC2WOL_LOC_ID_OFFSET + 310, LocationType.EXTRA, + LocationData("Zero Hour (Terran)", "Zero Hour (Terran): Cavalry's on the Way", SC2WOL_LOC_ID_OFFSET + 310, LocationType.EXTRA, lambda state: logic.terran_common_unit(state) and logic.terran_defense_rating(state, True) >= 2), LocationData("Evacuation", "Evacuation: Victory", SC2WOL_LOC_ID_OFFSET + 400, LocationType.VICTORY, @@ -239,25 +239,25 @@ def get_locations(world: Optional['SC2World']) -> Tuple[LocationData, ...]: lambda state: logic.terran_common_unit(state) and logic.terran_competent_anti_air(state) and logic.terran_defense_rating(state, True) >= 3), - LocationData("Smash and Grab", "Smash and Grab: Victory", SC2WOL_LOC_ID_OFFSET + 800, LocationType.VICTORY, + LocationData("Smash and Grab (Terran)", "Smash and Grab (Terran): Victory", SC2WOL_LOC_ID_OFFSET + 800, LocationType.VICTORY, lambda state: logic.terran_common_unit(state) and (adv_tactics and logic.terran_basic_anti_air(state) or logic.terran_competent_anti_air(state))), - LocationData("Smash and Grab", "Smash and Grab: First Relic", SC2WOL_LOC_ID_OFFSET + 801, LocationType.VANILLA), - LocationData("Smash and Grab", "Smash and Grab: Second Relic", SC2WOL_LOC_ID_OFFSET + 802, LocationType.VANILLA), - LocationData("Smash and Grab", "Smash and Grab: Third Relic", SC2WOL_LOC_ID_OFFSET + 803, LocationType.VANILLA, + LocationData("Smash and Grab (Terran)", "Smash and Grab (Terran): First Relic", SC2WOL_LOC_ID_OFFSET + 801, LocationType.VANILLA), + LocationData("Smash and Grab (Terran)", "Smash and Grab (Terran): Second Relic", SC2WOL_LOC_ID_OFFSET + 802, LocationType.VANILLA), + LocationData("Smash and Grab (Terran)", "Smash and Grab (Terran): Third Relic", SC2WOL_LOC_ID_OFFSET + 803, LocationType.VANILLA, lambda state: logic.terran_common_unit(state) and (adv_tactics and logic.terran_basic_anti_air(state) or logic.terran_competent_anti_air(state))), - LocationData("Smash and Grab", "Smash and Grab: Fourth Relic", SC2WOL_LOC_ID_OFFSET + 804, LocationType.VANILLA, + LocationData("Smash and Grab (Terran)", "Smash and Grab (Terran): Fourth Relic", SC2WOL_LOC_ID_OFFSET + 804, LocationType.VANILLA, lambda state: logic.terran_common_unit(state) and (adv_tactics and logic.terran_basic_anti_air(state) or logic.terran_competent_anti_air(state))), - LocationData("Smash and Grab", "Smash and Grab: First Forcefield Area Busted", SC2WOL_LOC_ID_OFFSET + 805, LocationType.EXTRA, + LocationData("Smash and Grab (Terran)", "Smash and Grab (Terran): First Forcefield Area Busted", SC2WOL_LOC_ID_OFFSET + 805, LocationType.EXTRA, lambda state: logic.terran_common_unit(state) and (adv_tactics and logic.terran_basic_anti_air(state) or logic.terran_competent_anti_air(state))), - LocationData("Smash and Grab", "Smash and Grab: Second Forcefield Area Busted", SC2WOL_LOC_ID_OFFSET + 806, LocationType.EXTRA, + LocationData("Smash and Grab (Terran)", "Smash and Grab (Terran): Second Forcefield Area Busted", SC2WOL_LOC_ID_OFFSET + 806, LocationType.EXTRA, lambda state: logic.terran_common_unit(state) and (adv_tactics and logic.terran_basic_anti_air(state) or logic.terran_competent_anti_air(state))), @@ -1623,115 +1623,115 @@ def get_locations(world: Optional['SC2World']) -> Tuple[LocationData, ...]: # Mission Variants # 10X/20X - Liberation Day - LocationData("The Outlaws (Z)", "The Outlaws (Zerg): Victory", SC2_RACESWAP_LOC_ID_OFFSET + 300, LocationType.VICTORY, + LocationData("The Outlaws (Zerg)", "The Outlaws (Zerg): Victory", SC2_RACESWAP_LOC_ID_OFFSET + 300, LocationType.VICTORY, lambda state: logic.zerg_common_unit(state)), - LocationData("The Outlaws (Z)", "The Outlaws (Zerg): Rebel Base", SC2_RACESWAP_LOC_ID_OFFSET + 301, LocationType.VANILLA, + LocationData("The Outlaws (Zerg)", "The Outlaws (Zerg): Rebel Base", SC2_RACESWAP_LOC_ID_OFFSET + 301, LocationType.VANILLA, lambda state: logic.zerg_common_unit(state)), - LocationData("The Outlaws (Z)", "The Outlaws (Zerg): North Resource Pickups", SC2_RACESWAP_LOC_ID_OFFSET + 302, LocationType.EXTRA, + LocationData("The Outlaws (Zerg)", "The Outlaws (Zerg): North Resource Pickups", SC2_RACESWAP_LOC_ID_OFFSET + 302, LocationType.EXTRA, lambda state: logic.zerg_common_unit(state)), - LocationData("The Outlaws (Z)", "The Outlaws (Zerg): Bunker", SC2_RACESWAP_LOC_ID_OFFSET + 303, LocationType.VANILLA, + LocationData("The Outlaws (Zerg)", "The Outlaws (Zerg): Bunker", SC2_RACESWAP_LOC_ID_OFFSET + 303, LocationType.VANILLA, lambda state: logic.zerg_common_unit(state)), - LocationData("The Outlaws (Z)", "The Outlaws (Zerg): Close Resource Pickups", SC2_RACESWAP_LOC_ID_OFFSET + 304, LocationType.EXTRA), - LocationData("The Outlaws (P)", "The Outlaws (Protoss): Victory", SC2_RACESWAP_LOC_ID_OFFSET + 400, LocationType.VICTORY, + LocationData("The Outlaws (Zerg)", "The Outlaws (Zerg): Close Resource Pickups", SC2_RACESWAP_LOC_ID_OFFSET + 304, LocationType.EXTRA), + LocationData("The Outlaws (Protoss)", "The Outlaws (Protoss): Victory", SC2_RACESWAP_LOC_ID_OFFSET + 400, LocationType.VICTORY, lambda state: logic.protoss_common_unit(state)), - LocationData("The Outlaws (P)", "The Outlaws (Protoss): Rebel Base", SC2_RACESWAP_LOC_ID_OFFSET + 401, LocationType.VANILLA, + LocationData("The Outlaws (Protoss)", "The Outlaws (Protoss): Rebel Base", SC2_RACESWAP_LOC_ID_OFFSET + 401, LocationType.VANILLA, lambda state: logic.protoss_common_unit(state)), - LocationData("The Outlaws (P)", "The Outlaws (Protoss): North Resource Pickups", SC2_RACESWAP_LOC_ID_OFFSET + 402, LocationType.EXTRA, + LocationData("The Outlaws (Protoss)", "The Outlaws (Protoss): North Resource Pickups", SC2_RACESWAP_LOC_ID_OFFSET + 402, LocationType.EXTRA, lambda state: logic.protoss_common_unit(state)), - LocationData("The Outlaws (P)", "The Outlaws (Protoss): Bunker", SC2_RACESWAP_LOC_ID_OFFSET + 403, LocationType.VANILLA, + LocationData("The Outlaws (Protoss)", "The Outlaws (Protoss): Bunker", SC2_RACESWAP_LOC_ID_OFFSET + 403, LocationType.VANILLA, lambda state: logic.protoss_common_unit(state)), - LocationData("The Outlaws (P)", "The Outlaws (Protoss): Close Resource Pickups", SC2_RACESWAP_LOC_ID_OFFSET + 404, LocationType.EXTRA), - LocationData("Zero Hour (Z)", "Zero Hour (Zerg): Victory", SC2_RACESWAP_LOC_ID_OFFSET + 500, LocationType.VICTORY, + LocationData("The Outlaws (Protoss)", "The Outlaws (Protoss): Close Resource Pickups", SC2_RACESWAP_LOC_ID_OFFSET + 404, LocationType.EXTRA), + LocationData("Zero Hour (Zerg)", "Zero Hour (Zerg): Victory", SC2_RACESWAP_LOC_ID_OFFSET + 500, LocationType.VICTORY, lambda state: logic.zerg_competent_defense(state) and logic.zerg_basic_kerriganless_anti_air(state)), - LocationData("Zero Hour (Z)", "Zero Hour (Zerg): First Group Rescued", SC2_RACESWAP_LOC_ID_OFFSET + 501, LocationType.VANILLA), - LocationData("Zero Hour (Z)", "Zero Hour (Zerg): Second Group Rescued", SC2_RACESWAP_LOC_ID_OFFSET + 502, LocationType.VANILLA, + LocationData("Zero Hour (Zerg)", "Zero Hour (Zerg): First Group Rescued", SC2_RACESWAP_LOC_ID_OFFSET + 501, LocationType.VANILLA), + LocationData("Zero Hour (Zerg)", "Zero Hour (Zerg): Second Group Rescued", SC2_RACESWAP_LOC_ID_OFFSET + 502, LocationType.VANILLA, lambda state: logic.zerg_common_unit(state)), - LocationData("Zero Hour (Z)", "Zero Hour (Zerg): Third Group Rescued", SC2_RACESWAP_LOC_ID_OFFSET + 503, LocationType.VANILLA, + LocationData("Zero Hour (Zerg)", "Zero Hour (Zerg): Third Group Rescued", SC2_RACESWAP_LOC_ID_OFFSET + 503, LocationType.VANILLA, lambda state: logic.zerg_competent_defense(state)), - LocationData("Zero Hour (Z)", "Zero Hour (Zerg): First Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 504, LocationType.CHALLENGE, + LocationData("Zero Hour (Zerg)", "Zero Hour (Zerg): First Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 504, LocationType.CHALLENGE, lambda state: logic.zerg_competent_comp(state)), - LocationData("Zero Hour (Z)", "Zero Hour (Zerg): Second Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 505, LocationType.CHALLENGE, + LocationData("Zero Hour (Zerg)", "Zero Hour (Zerg): Second Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 505, LocationType.CHALLENGE, lambda state: logic.zerg_competent_comp(state)), - LocationData("Zero Hour (Z)", "Zero Hour (Zerg): Third Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 506, LocationType.CHALLENGE, + LocationData("Zero Hour (Zerg)", "Zero Hour (Zerg): Third Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 506, LocationType.CHALLENGE, lambda state: logic.zerg_competent_comp(state)), - LocationData("Zero Hour (Z)", "Zero Hour (Zerg): Fourth Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 507, LocationType.CHALLENGE, + LocationData("Zero Hour (Zerg)", "Zero Hour (Zerg): Fourth Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 507, LocationType.CHALLENGE, lambda state: logic.zerg_competent_comp(state)), - LocationData("Zero Hour (Z)", "Zero Hour (Zerg): Ride's on its Way", SC2_RACESWAP_LOC_ID_OFFSET + 508, LocationType.EXTRA, + LocationData("Zero Hour (Zerg)", "Zero Hour (Zerg): Ride's on its Way", SC2_RACESWAP_LOC_ID_OFFSET + 508, LocationType.EXTRA, lambda state: logic.zerg_common_unit(state)), - LocationData("Zero Hour (Z)", "Zero Hour (Zerg): Hold Just a Little Longer", SC2_RACESWAP_LOC_ID_OFFSET + 509, + LocationData("Zero Hour (Zerg)", "Zero Hour (Zerg): Hold Just a Little Longer", SC2_RACESWAP_LOC_ID_OFFSET + 509, LocationType.EXTRA, lambda state: logic.zerg_competent_defense(state)), - LocationData("Zero Hour (Z)", "Zero Hour (Zerg): Cavalry's on the Way", SC2_RACESWAP_LOC_ID_OFFSET + 510, LocationType.EXTRA, + LocationData("Zero Hour (Zerg)", "Zero Hour (Zerg): Cavalry's on the Way", SC2_RACESWAP_LOC_ID_OFFSET + 510, LocationType.EXTRA, lambda state: logic.zerg_competent_defense(state)), - LocationData("Zero Hour (P)", "Zero Hour (Protoss): Victory", SC2_RACESWAP_LOC_ID_OFFSET + 600, LocationType.VICTORY, + LocationData("Zero Hour (Protoss)", "Zero Hour (Protoss): Victory", SC2_RACESWAP_LOC_ID_OFFSET + 600, LocationType.VICTORY, lambda state: logic.protoss_common_unit(state) and (adv_tactics or logic.protoss_basic_anti_air(state))), - LocationData("Zero Hour (P)", "Zero Hour (Protoss): First Group Rescued", SC2_RACESWAP_LOC_ID_OFFSET + 601, LocationType.VANILLA), - LocationData("Zero Hour (P)", "Zero Hour (Protoss): Second Group Rescued", SC2_RACESWAP_LOC_ID_OFFSET + 602, LocationType.VANILLA, + LocationData("Zero Hour (Protoss)", "Zero Hour (Protoss): First Group Rescued", SC2_RACESWAP_LOC_ID_OFFSET + 601, LocationType.VANILLA), + LocationData("Zero Hour (Protoss)", "Zero Hour (Protoss): Second Group Rescued", SC2_RACESWAP_LOC_ID_OFFSET + 602, LocationType.VANILLA, lambda state: logic.protoss_common_unit(state)), - LocationData("Zero Hour (P)", "Zero Hour (Protoss): Third Group Rescued", SC2_RACESWAP_LOC_ID_OFFSET + 603, LocationType.VANILLA, + LocationData("Zero Hour (Protoss)", "Zero Hour (Protoss): Third Group Rescued", SC2_RACESWAP_LOC_ID_OFFSET + 603, LocationType.VANILLA, lambda state: logic.protoss_common_unit(state)), - LocationData("Zero Hour (P)", "Zero Hour (Protoss): First Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 604, LocationType.CHALLENGE, + LocationData("Zero Hour (Protoss)", "Zero Hour (Protoss): First Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 604, LocationType.CHALLENGE, lambda state: logic.protoss_competent_comp(state)), - LocationData("Zero Hour (P)", "Zero Hour (Protoss): Second Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 605, LocationType.CHALLENGE, + LocationData("Zero Hour (Protoss)", "Zero Hour (Protoss): Second Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 605, LocationType.CHALLENGE, lambda state: logic.protoss_competent_comp(state)), - LocationData("Zero Hour (P)", "Zero Hour (Protoss): Third Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 606, LocationType.CHALLENGE, + LocationData("Zero Hour (Protoss)", "Zero Hour (Protoss): Third Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 606, LocationType.CHALLENGE, lambda state: logic.protoss_competent_comp(state)), - LocationData("Zero Hour (P)", "Zero Hour (Protoss): Fourth Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 607, LocationType.CHALLENGE, + LocationData("Zero Hour (Protoss)", "Zero Hour (Protoss): Fourth Hatchery", SC2_RACESWAP_LOC_ID_OFFSET + 607, LocationType.CHALLENGE, lambda state: logic.protoss_competent_comp(state)), - LocationData("Zero Hour (P)", "Zero Hour (Protoss): Ride's on its Way", SC2_RACESWAP_LOC_ID_OFFSET + 608, LocationType.EXTRA, + LocationData("Zero Hour (Protoss)", "Zero Hour (Protoss): Ride's on its Way", SC2_RACESWAP_LOC_ID_OFFSET + 608, LocationType.EXTRA, lambda state: logic.protoss_common_unit(state)), - LocationData("Zero Hour (P)", "Zero Hour (Protoss): Hold Just a Little Longer", SC2_RACESWAP_LOC_ID_OFFSET + 609, + LocationData("Zero Hour (Protoss)", "Zero Hour (Protoss): Hold Just a Little Longer", SC2_RACESWAP_LOC_ID_OFFSET + 609, LocationType.EXTRA, lambda state: logic.protoss_common_unit(state)), - LocationData("Zero Hour (P)", "Zero Hour (Protoss): Cavalry's on the Way", SC2_RACESWAP_LOC_ID_OFFSET + 610, LocationType.EXTRA, + LocationData("Zero Hour (Protoss)", "Zero Hour (Protoss): Cavalry's on the Way", SC2_RACESWAP_LOC_ID_OFFSET + 610, LocationType.EXTRA, lambda state: logic.protoss_common_unit(state)), # 70X/80X - Evacuation # 90X/100X - Outbreak # 110X/120X - Safe Haven # 130X/140X - Haven's Fall - LocationData("Smash and Grab (Z)", "Smash and Grab (Zerg): Victory", SC2_RACESWAP_LOC_ID_OFFSET + 1500, LocationType.VICTORY, + LocationData("Smash and Grab (Zerg)", "Smash and Grab (Zerg): Victory", SC2_RACESWAP_LOC_ID_OFFSET + 1500, LocationType.VICTORY, lambda state: logic.zerg_common_unit(state) and (adv_tactics and logic.zerg_basic_anti_air(state) or logic.zerg_competent_anti_air(state))), - LocationData("Smash and Grab (Z)", "Smash and Grab (Zerg): First Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1501, LocationType.VANILLA), - LocationData("Smash and Grab (Z)", "Smash and Grab (Zerg): Second Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1502, LocationType.VANILLA), - LocationData("Smash and Grab (Z)", "Smash and Grab (Zerg): Third Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1503, LocationType.VANILLA, + LocationData("Smash and Grab (Zerg)", "Smash and Grab (Zerg): First Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1501, LocationType.VANILLA), + LocationData("Smash and Grab (Zerg)", "Smash and Grab (Zerg): Second Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1502, LocationType.VANILLA), + LocationData("Smash and Grab (Zerg)", "Smash and Grab (Zerg): Third Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1503, LocationType.VANILLA, lambda state: logic.zerg_common_unit(state) and (adv_tactics and logic.zerg_basic_kerriganless_anti_air(state) or logic.zerg_competent_anti_air(state))), - LocationData("Smash and Grab (Z)", "Smash and Grab (Zerg): Fourth Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1504, LocationType.VANILLA, + LocationData("Smash and Grab (Zerg)", "Smash and Grab (Zerg): Fourth Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1504, LocationType.VANILLA, lambda state: logic.zerg_common_unit(state) and (adv_tactics and logic.zerg_basic_kerriganless_anti_air(state) or logic.zerg_competent_anti_air(state))), - LocationData("Smash and Grab (Z)", "Smash and Grab (Zerg): First Forcefield Area Busted", SC2_RACESWAP_LOC_ID_OFFSET + 1505, LocationType.EXTRA, + LocationData("Smash and Grab (Zerg)", "Smash and Grab (Zerg): First Forcefield Area Busted", SC2_RACESWAP_LOC_ID_OFFSET + 1505, LocationType.EXTRA, lambda state: logic.zerg_common_unit(state) and (adv_tactics and logic.zerg_basic_kerriganless_anti_air(state) or logic.zerg_competent_anti_air(state))), - LocationData("Smash and Grab (Z)", "Smash and Grab (Zerg): Second Forcefield Area Busted", SC2_RACESWAP_LOC_ID_OFFSET + 1506, LocationType.EXTRA, + LocationData("Smash and Grab (Zerg)", "Smash and Grab (Zerg): Second Forcefield Area Busted", SC2_RACESWAP_LOC_ID_OFFSET + 1506, LocationType.EXTRA, lambda state: logic.zerg_common_unit(state) and (adv_tactics and logic.zerg_basic_kerriganless_anti_air(state) or logic.zerg_competent_anti_air(state))), - LocationData("Smash and Grab (P)", "Smash and Grab (Protoss): Victory", SC2_RACESWAP_LOC_ID_OFFSET + 1600, LocationType.VICTORY, + LocationData("Smash and Grab (Protoss)", "Smash and Grab (Protoss): Victory", SC2_RACESWAP_LOC_ID_OFFSET + 1600, LocationType.VICTORY, lambda state: logic.protoss_common_unit(state) and (adv_tactics and logic.protoss_basic_anti_air(state) or logic.protoss_competent_anti_air(state))), - LocationData("Smash and Grab (P)", "Smash and Grab (Protoss): First Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1601, LocationType.VANILLA), - LocationData("Smash and Grab (P)", "Smash and Grab (Protoss): Second Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1602, LocationType.VANILLA), - LocationData("Smash and Grab (P)", "Smash and Grab (Protoss): Third Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1603, LocationType.VANILLA, + LocationData("Smash and Grab (Protoss)", "Smash and Grab (Protoss): First Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1601, LocationType.VANILLA), + LocationData("Smash and Grab (Protoss)", "Smash and Grab (Protoss): Second Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1602, LocationType.VANILLA), + LocationData("Smash and Grab (Protoss)", "Smash and Grab (Protoss): Third Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1603, LocationType.VANILLA, lambda state: logic.protoss_common_unit(state) and (adv_tactics and logic.protoss_basic_anti_air(state) or logic.protoss_competent_anti_air(state))), - LocationData("Smash and Grab (P)", "Smash and Grab (Protoss): Fourth Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1604, LocationType.VANILLA, + LocationData("Smash and Grab (Protoss)", "Smash and Grab (Protoss): Fourth Relic", SC2_RACESWAP_LOC_ID_OFFSET + 1604, LocationType.VANILLA, lambda state: logic.protoss_common_unit(state) and (adv_tactics and logic.protoss_basic_anti_air(state) or logic.protoss_competent_anti_air(state))), - LocationData("Smash and Grab (P)", "Smash and Grab (Protoss): First Forcefield Area Busted", SC2_RACESWAP_LOC_ID_OFFSET + 1605, LocationType.EXTRA, + LocationData("Smash and Grab (Protoss)", "Smash and Grab (Protoss): First Forcefield Area Busted", SC2_RACESWAP_LOC_ID_OFFSET + 1605, LocationType.EXTRA, lambda state: logic.protoss_common_unit(state) and (adv_tactics and logic.protoss_basic_anti_air(state) or logic.protoss_competent_anti_air(state))), - LocationData("Smash and Grab (P)", "Smash and Grab (Protoss): Second Forcefield Area Busted", SC2_RACESWAP_LOC_ID_OFFSET + 1606, LocationType.EXTRA, + LocationData("Smash and Grab (Protoss)", "Smash and Grab (Protoss): Second Forcefield Area Busted", SC2_RACESWAP_LOC_ID_OFFSET + 1606, LocationType.EXTRA, lambda state: logic.protoss_common_unit(state) and (adv_tactics and logic.protoss_basic_anti_air(state) or logic.protoss_competent_anti_air(state))), diff --git a/worlds/sc2/mission_tables.py b/worlds/sc2/mission_tables.py index 01305d8ae7a6..8569c659283c 100644 --- a/worlds/sc2/mission_tables.py +++ b/worlds/sc2/mission_tables.py @@ -101,13 +101,13 @@ def __init__(self, mission_id: int, name: str, campaign: SC2Campaign, area: str, # Wings of Liberty LIBERATION_DAY = 1, "Liberation Day", SC2Campaign.WOL, "Mar Sara", SC2Race.ANY, MissionPools.STARTER, "ap_liberation_day", MissionFlag.Terran|MissionFlag.NoBuild|MissionFlag.VsTerran - THE_OUTLAWS = 2, "The Outlaws (T)", SC2Campaign.WOL, "Mar Sara", SC2Race.TERRAN, MissionPools.EASY, "ap_the_outlaws", MissionFlag.Terran|MissionFlag.VsTerran|MissionFlag.HasRaceSwap - ZERO_HOUR = 3, "Zero Hour (T)", SC2Campaign.WOL, "Mar Sara", SC2Race.TERRAN, MissionPools.EASY, "ap_zero_hour", MissionFlag.Terran|MissionFlag.TimedDefense|MissionFlag.VsZerg|MissionFlag.HasRaceSwap + THE_OUTLAWS = 2, "The Outlaws (Terran)", SC2Campaign.WOL, "Mar Sara", SC2Race.TERRAN, MissionPools.EASY, "ap_the_outlaws", MissionFlag.Terran|MissionFlag.VsTerran|MissionFlag.HasRaceSwap + ZERO_HOUR = 3, "Zero Hour (Terran)", SC2Campaign.WOL, "Mar Sara", SC2Race.TERRAN, MissionPools.EASY, "ap_zero_hour", MissionFlag.Terran|MissionFlag.TimedDefense|MissionFlag.VsZerg|MissionFlag.HasRaceSwap EVACUATION = 4, "Evacuation", SC2Campaign.WOL, "Colonist", SC2Race.TERRAN, MissionPools.EASY, "ap_evacuation", MissionFlag.Terran|MissionFlag.AutoScroller|MissionFlag.VsZerg OUTBREAK = 5, "Outbreak", SC2Campaign.WOL, "Colonist", SC2Race.TERRAN, MissionPools.EASY, "ap_outbreak", MissionFlag.Terran|MissionFlag.Defense|MissionFlag.VsZerg SAFE_HAVEN = 6, "Safe Haven", SC2Campaign.WOL, "Colonist", SC2Race.TERRAN, MissionPools.MEDIUM, "ap_safe_haven", MissionFlag.Terran|MissionFlag.Countdown|MissionFlag.VsProtoss HAVENS_FALL = 7, "Haven's Fall", SC2Campaign.WOL, "Colonist", SC2Race.TERRAN, MissionPools.MEDIUM, "ap_havens_fall", MissionFlag.Terran|MissionFlag.VsZerg - SMASH_AND_GRAB = 8, "Smash and Grab (T)", SC2Campaign.WOL, "Artifact", SC2Race.TERRAN, MissionPools.EASY, "ap_smash_and_grab", MissionFlag.Terran|MissionFlag.Countdown|MissionFlag.VsPZ|MissionFlag.HasRaceSwap + SMASH_AND_GRAB = 8, "Smash and Grab (Terran)", SC2Campaign.WOL, "Artifact", SC2Race.TERRAN, MissionPools.EASY, "ap_smash_and_grab", MissionFlag.Terran|MissionFlag.Countdown|MissionFlag.VsPZ|MissionFlag.HasRaceSwap THE_DIG = 9, "The Dig", SC2Campaign.WOL, "Artifact", SC2Race.TERRAN, MissionPools.MEDIUM, "ap_the_dig", MissionFlag.Terran|MissionFlag.TimedDefense|MissionFlag.VsProtoss THE_MOEBIUS_FACTOR = 10, "The Moebius Factor", SC2Campaign.WOL, "Artifact", SC2Race.TERRAN, MissionPools.MEDIUM, "ap_the_moebius_factor", MissionFlag.Terran|MissionFlag.Countdown|MissionFlag.VsZerg SUPERNOVA = 11, "Supernova", SC2Campaign.WOL, "Artifact", SC2Race.TERRAN, MissionPools.HARD, "ap_supernova", MissionFlag.Terran|MissionFlag.Countdown|MissionFlag.VsProtoss @@ -198,16 +198,16 @@ def __init__(self, mission_id: int, name: str, campaign: SC2Campaign, area: str, # Race-Swapped Variants # 84/85 - Liberation Day - THE_OUTLAWS_Z = 86, "The Outlaws (Z)", SC2Campaign.WOL, "Mar Sara", SC2Race.ZERG, MissionPools.EASY, "ap_the_outlaws", MissionFlag.Zerg|MissionFlag.VsTerran|MissionFlag.RaceSwap - THE_OUTLAWS_P = 87, "The Outlaws (P)", SC2Campaign.WOL, "Mar Sara", SC2Race.PROTOSS, MissionPools.EASY, "ap_the_outlaws", MissionFlag.Protoss|MissionFlag.VsTerran|MissionFlag.RaceSwap - ZERO_HOUR_Z = 88, "Zero Hour (Z)", SC2Campaign.WOL, "Mar Sara", SC2Race.ZERG, MissionPools.EASY, "ap_zero_hour", MissionFlag.Zerg|MissionFlag.TimedDefense|MissionFlag.VsZerg|MissionFlag.RaceSwap - ZERO_HOUR_P = 89, "Zero Hour (P)", SC2Campaign.WOL, "Mar Sara", SC2Race.PROTOSS, MissionPools.EASY, "ap_zero_hour", MissionFlag.Protoss|MissionFlag.TimedDefense|MissionFlag.VsZerg|MissionFlag.RaceSwap + THE_OUTLAWS_Z = 86, "The Outlaws (Zerg)", SC2Campaign.WOL, "Mar Sara", SC2Race.ZERG, MissionPools.EASY, "ap_the_outlaws", MissionFlag.Zerg|MissionFlag.VsTerran|MissionFlag.RaceSwap + THE_OUTLAWS_P = 87, "The Outlaws (Protoss)", SC2Campaign.WOL, "Mar Sara", SC2Race.PROTOSS, MissionPools.EASY, "ap_the_outlaws", MissionFlag.Protoss|MissionFlag.VsTerran|MissionFlag.RaceSwap + ZERO_HOUR_Z = 88, "Zero Hour (Zerg)", SC2Campaign.WOL, "Mar Sara", SC2Race.ZERG, MissionPools.EASY, "ap_zero_hour", MissionFlag.Zerg|MissionFlag.TimedDefense|MissionFlag.VsZerg|MissionFlag.RaceSwap + ZERO_HOUR_P = 89, "Zero Hour (Protoss)", SC2Campaign.WOL, "Mar Sara", SC2Race.PROTOSS, MissionPools.EASY, "ap_zero_hour", MissionFlag.Protoss|MissionFlag.TimedDefense|MissionFlag.VsZerg|MissionFlag.RaceSwap # 90/91 - Evacuation # 92/93 - Outbreak # 94/95 - Safe Haven # 96/97 - Haven's Fall - SMASH_AND_GRAB_Z = 98, "Smash and Grab (Z)", SC2Campaign.WOL, "Artifact", SC2Race.ZERG, MissionPools.EASY, "ap_smash_and_grab", MissionFlag.Zerg|MissionFlag.Countdown|MissionFlag.VsPZ|MissionFlag.RaceSwap - SMASH_AND_GRAB_P = 99, "Smash and Grab (P)", SC2Campaign.WOL, "Artifact", SC2Race.PROTOSS, MissionPools.EASY, "ap_smash_and_grab", MissionFlag.Protoss|MissionFlag.Countdown|MissionFlag.VsPZ|MissionFlag.RaceSwap + SMASH_AND_GRAB_Z = 98, "Smash and Grab (Zerg)", SC2Campaign.WOL, "Artifact", SC2Race.ZERG, MissionPools.EASY, "ap_smash_and_grab", MissionFlag.Zerg|MissionFlag.Countdown|MissionFlag.VsPZ|MissionFlag.RaceSwap + SMASH_AND_GRAB_P = 99, "Smash and Grab (Protoss)", SC2Campaign.WOL, "Artifact", SC2Race.PROTOSS, MissionPools.EASY, "ap_smash_and_grab", MissionFlag.Protoss|MissionFlag.Countdown|MissionFlag.VsPZ|MissionFlag.RaceSwap class MissionConnection: diff --git a/worlds/sc2/regions.py b/worlds/sc2/regions.py index 52169db25fcb..4fc8c20f4d8e 100644 --- a/worlds/sc2/regions.py +++ b/worlds/sc2/regions.py @@ -66,38 +66,38 @@ def wol_cleared_missions(state: CollectionState, mission_count: int) -> bool: player: int = world.player if SC2Campaign.WOL in enabled_campaigns: connect(world, names, 'Menu', 'Liberation Day') - connect(world, names, 'Liberation Day', 'The Outlaws (T)', + connect(world, names, 'Liberation Day', 'The Outlaws (Terran)', lambda state: state.has("Beat Liberation Day", player)) - connect(world, names, 'The Outlaws (T)', 'Zero Hour (T)', - lambda state: state.has("Beat The Outlaws", player)) - connect(world, names, 'Zero Hour (T)', 'Evacuation', - lambda state: state.has("Beat Zero Hour", player)) + connect(world, names, 'The Outlaws (Terran)', 'Zero Hour (Terran)', + lambda state: state.has("Beat The Outlaws (Terran)", player)) + connect(world, names, 'Zero Hour (Terran)', 'Evacuation', + lambda state: state.has("Beat Zero Hour (Terran)", player)) connect(world, names, 'Evacuation', 'Outbreak', lambda state: state.has("Beat Evacuation", player)) connect(world, names, "Outbreak", "Safe Haven", lambda state: wol_cleared_missions(state, 7) and state.has("Beat Outbreak", player)) connect(world, names, "Outbreak", "Haven's Fall", lambda state: wol_cleared_missions(state, 7) and state.has("Beat Outbreak", player)) - connect(world, names, 'Zero Hour (T)', 'Smash and Grab (T)', - lambda state: state.has("Beat Zero Hour", player)) - connect(world, names, 'Smash and Grab (T)', 'The Dig', - lambda state: wol_cleared_missions(state, 8) and state.has("Beat Smash and Grab", player)) + connect(world, names, 'Zero Hour (Terran)', 'Smash and Grab (Terran)', + lambda state: state.has("Beat Zero Hour (Terran)", player)) + connect(world, names, 'Smash and Grab (Terran)', 'The Dig', + lambda state: wol_cleared_missions(state, 8) and state.has("Beat Smash and Grab (Terran)", player)) connect(world, names, 'The Dig', 'The Moebius Factor', lambda state: wol_cleared_missions(state, 11) and state.has("Beat The Dig", player)) connect(world, names, 'The Moebius Factor', 'Supernova', lambda state: wol_cleared_missions(state, 14) and state.has("Beat The Moebius Factor", player)) connect(world, names, 'Supernova', 'Maw of the Void', lambda state: state.has("Beat Supernova", player)) - connect(world, names, 'Zero Hour (T)', "Devil's Playground", - lambda state: wol_cleared_missions(state, 4) and state.has("Beat Zero Hour", player)) + connect(world, names, 'Zero Hour (Terran)', "Devil's Playground", + lambda state: wol_cleared_missions(state, 4) and state.has("Beat Zero Hour (Terran)", player)) connect(world, names, "Devil's Playground", 'Welcome to the Jungle', lambda state: state.has("Beat Devil's Playground", player)) connect(world, names, "Welcome to the Jungle", 'Breakout', lambda state: wol_cleared_missions(state, 8) and state.has("Beat Welcome to the Jungle", player)) connect(world, names, "Welcome to the Jungle", 'Ghost of a Chance', lambda state: wol_cleared_missions(state, 8) and state.has("Beat Welcome to the Jungle", player)) - connect(world, names, "Zero Hour (T)", 'The Great Train Robbery', - lambda state: wol_cleared_missions(state, 6) and state.has("Beat Zero Hour", player)) + connect(world, names, "Zero Hour (Terran)", 'The Great Train Robbery', + lambda state: wol_cleared_missions(state, 6) and state.has("Beat Zero Hour (Terran)", player)) connect(world, names, 'The Great Train Robbery', 'Cutthroat', lambda state: state.has("Beat The Great Train Robbery", player)) connect(world, names, 'Cutthroat', 'Engine of Destruction',