Files
Grinch-AP/worlds/sc2/locations.py
Phaneros 76b0197462 SC2: any_unit and item parent bugfixes (#5480)
* sc2: Fixing a Reaver item being classified as a scout item

* sc2: any_units now requires any AA in the first 5 units
* Fixing Shoot the Messenger not requiring AA in a hard rule
* Fixing any_unit zerg still allowing unupgraded mercs

* sc2: Fixed an issue where terran was requiring zerg anti-air in any_units
2025-09-30 22:18:42 +02:00

14179 lines
520 KiB
Python

import enum
from typing import List, Tuple, Optional, Callable, NamedTuple, Set, TYPE_CHECKING
from .item import item_names
from .item.item_groups import kerrigan_logic_ultimates
from .options import (
get_option_value,
RequiredTactics,
LocationInclusion,
KerriganPresence,
GrantStoryTech,
get_enabled_campaigns,
)
from .mission_tables import SC2Mission, SC2Campaign
from BaseClasses import Location
from worlds.AutoWorld import World
if TYPE_CHECKING:
from BaseClasses import CollectionState
from . import SC2World
SC2WOL_LOC_ID_OFFSET = 1000
SC2HOTS_LOC_ID_OFFSET = 20000000 # Avoid clashes with The Legend of Zelda
SC2LOTV_LOC_ID_OFFSET = SC2HOTS_LOC_ID_OFFSET + 2000
SC2NCO_LOC_ID_OFFSET = SC2LOTV_LOC_ID_OFFSET + 2500
SC2_RACESWAP_LOC_ID_OFFSET = SC2NCO_LOC_ID_OFFSET + 900
VICTORY_CACHE_OFFSET = 90
class SC2Location(Location):
game: str = "Starcraft2"
class LocationType(enum.IntEnum):
VICTORY = 0 # Winning a mission
VANILLA = 1 # Objectives that provided metaprogression in the original campaign, along with a few other locations for a balanced experience
EXTRA = 2 # Additional locations based on mission progression, collecting in-mission rewards, etc. that do not significantly increase the challenge.
CHALLENGE = 3 # Challenging objectives, often harder than just completing a mission, and often associated with Achievements
MASTERY = 4 # Extremely challenging objectives often associated with Masteries and Feats of Strength in the original campaign
VICTORY_CACHE = 5 # Bonus locations for beating a mission
class LocationFlag(enum.IntFlag):
NONE = 0
BASEBUST = enum.auto()
"""Locations about killing challenging bases"""
SPEEDRUN = enum.auto()
"""Locations that are about doing something fast"""
PREVENTATIVE = enum.auto()
"""Locations that are about preventing something from happening"""
def values(self):
"""Hacky iterator for backwards-compatibility with Python <= 3.10. Not necessary on Python 3.11+"""
return tuple(
val
for val in (
LocationFlag.SPEEDRUN,
LocationFlag.PREVENTATIVE,
)
if val in self
)
class LocationData(NamedTuple):
region: str
name: str
code: int
type: LocationType
rule: Callable[["CollectionState"], bool] = Location.access_rule
flags: LocationFlag = LocationFlag.NONE
hard_rule: Optional[Callable[["CollectionState"], bool]] = None
def make_location_data(
region: str,
name: str,
code: int,
type: LocationType,
rule: Callable[["CollectionState"], bool] = Location.access_rule,
flags: LocationFlag = LocationFlag.NONE,
hard_rule: Optional[Callable[["CollectionState"], bool]] = None,
) -> LocationData:
return LocationData(region, f"{region}: {name}", code, type, rule, flags, hard_rule)
def get_location_types(world: "SC2World", inclusion_type: int) -> Set[LocationType]:
"""
:param world: The starcraft 2 world object
:param inclusion_type: Level of inclusion to check for
:return: A list of location types that match the inclusion type
"""
exclusion_options = [
("vanilla_locations", LocationType.VANILLA),
("extra_locations", LocationType.EXTRA),
("challenge_locations", LocationType.CHALLENGE),
("mastery_locations", LocationType.MASTERY),
]
excluded_location_types = set()
for option_name, location_type in exclusion_options:
if get_option_value(world, option_name) is inclusion_type:
excluded_location_types.add(location_type)
return excluded_location_types
def get_location_flags(world: "SC2World", inclusion_type: int) -> LocationFlag:
"""
:param world: The starcraft 2 world object
:param inclusion_type: Level of inclusion to check for
:return: A list of location types that match the inclusion type
"""
matching_location_flags = LocationFlag.NONE
if world.options.basebust_locations.value == inclusion_type:
matching_location_flags |= LocationFlag.BASEBUST
if world.options.speedrun_locations.value == inclusion_type:
matching_location_flags |= LocationFlag.SPEEDRUN
if world.options.preventative_locations.value == inclusion_type:
matching_location_flags |= LocationFlag.PREVENTATIVE
return matching_location_flags
def get_plando_locations(world: World) -> List[str]:
"""
:param multiworld:
:param player:
:return: A list of locations affected by a plando in a world
"""
if world is None:
return []
plando_locations = []
for plando_setting in world.options.plando_items:
plando_locations += plando_setting.locations
return plando_locations
def get_locations(world: Optional["SC2World"]) -> Tuple[LocationData, ...]:
# Note: rules which are ended with or True are rules identified as needed later when restricted units is an option
if world is None:
logic_level = int(RequiredTactics.default)
kerriganless = False
else:
logic_level = world.options.required_tactics.value
kerriganless = (
world.options.kerrigan_presence.value != KerriganPresence.option_vanilla
or SC2Campaign.HOTS not in get_enabled_campaigns(world)
)
adv_tactics = logic_level != RequiredTactics.option_standard
if world is not None and world.logic is not None:
logic = world.logic
else:
from .rules import SC2Logic
logic = SC2Logic(world)
player = 1 if world is None else world.player
location_table: List[LocationData] = [
# WoL
make_location_data(
SC2Mission.LIBERATION_DAY.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 100,
LocationType.VICTORY,
),
make_location_data(
SC2Mission.LIBERATION_DAY.mission_name,
"First Statue",
SC2WOL_LOC_ID_OFFSET + 101,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.LIBERATION_DAY.mission_name,
"Second Statue",
SC2WOL_LOC_ID_OFFSET + 102,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.LIBERATION_DAY.mission_name,
"Third Statue",
SC2WOL_LOC_ID_OFFSET + 103,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.LIBERATION_DAY.mission_name,
"Fourth Statue",
SC2WOL_LOC_ID_OFFSET + 104,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.LIBERATION_DAY.mission_name,
"Fifth Statue",
SC2WOL_LOC_ID_OFFSET + 105,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.LIBERATION_DAY.mission_name,
"Sixth Statue",
SC2WOL_LOC_ID_OFFSET + 106,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.LIBERATION_DAY.mission_name,
"Special Delivery",
SC2WOL_LOC_ID_OFFSET + 107,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.LIBERATION_DAY.mission_name,
"Transport",
SC2WOL_LOC_ID_OFFSET + 108,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_OUTLAWS.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 200,
LocationType.VICTORY,
logic.terran_early_tech,
),
make_location_data(
SC2Mission.THE_OUTLAWS.mission_name,
"Rebel Base",
SC2WOL_LOC_ID_OFFSET + 201,
LocationType.VANILLA,
logic.terran_early_tech,
),
make_location_data(
SC2Mission.THE_OUTLAWS.mission_name,
"North Resource Pickups",
SC2WOL_LOC_ID_OFFSET + 202,
LocationType.EXTRA,
logic.terran_early_tech,
),
make_location_data(
SC2Mission.THE_OUTLAWS.mission_name,
"Bunker",
SC2WOL_LOC_ID_OFFSET + 203,
LocationType.VANILLA,
logic.terran_early_tech,
),
make_location_data(
SC2Mission.THE_OUTLAWS.mission_name,
"Close Resource Pickups",
SC2WOL_LOC_ID_OFFSET + 204,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.ZERO_HOUR.mission_name,
"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))
),
),
make_location_data(
SC2Mission.ZERO_HOUR.mission_name,
"First Group Rescued",
SC2WOL_LOC_ID_OFFSET + 301,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.ZERO_HOUR.mission_name,
"Second Group Rescued",
SC2WOL_LOC_ID_OFFSET + 302,
LocationType.VANILLA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.ZERO_HOUR.mission_name,
"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
),
),
make_location_data(
SC2Mission.ZERO_HOUR.mission_name,
"First Hatchery",
SC2WOL_LOC_ID_OFFSET + 304,
LocationType.CHALLENGE,
logic.terran_competent_comp,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ZERO_HOUR.mission_name,
"Second Hatchery",
SC2WOL_LOC_ID_OFFSET + 305,
LocationType.CHALLENGE,
logic.terran_competent_comp,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ZERO_HOUR.mission_name,
"Third Hatchery",
SC2WOL_LOC_ID_OFFSET + 306,
LocationType.CHALLENGE,
logic.terran_competent_comp,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ZERO_HOUR.mission_name,
"Fourth Hatchery",
SC2WOL_LOC_ID_OFFSET + 307,
LocationType.CHALLENGE,
logic.terran_competent_comp,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ZERO_HOUR.mission_name,
"Ride's on its Way",
SC2WOL_LOC_ID_OFFSET + 308,
LocationType.EXTRA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.ZERO_HOUR.mission_name,
"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
),
),
make_location_data(
SC2Mission.ZERO_HOUR.mission_name,
"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
),
),
make_location_data(
SC2Mission.EVACUATION.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 400,
LocationType.VICTORY,
lambda state: (
logic.terran_early_tech(state)
and (
(adv_tactics and logic.terran_basic_anti_air(state))
or logic.terran_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.EVACUATION.mission_name,
"North Chrysalis",
SC2WOL_LOC_ID_OFFSET + 401,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.EVACUATION.mission_name,
"West Chrysalis",
SC2WOL_LOC_ID_OFFSET + 402,
LocationType.VANILLA,
logic.terran_early_tech,
),
make_location_data(
SC2Mission.EVACUATION.mission_name,
"East Chrysalis",
SC2WOL_LOC_ID_OFFSET + 403,
LocationType.VANILLA,
logic.terran_early_tech,
),
make_location_data(
SC2Mission.EVACUATION.mission_name,
"Reach Hanson",
SC2WOL_LOC_ID_OFFSET + 404,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.EVACUATION.mission_name,
"Secret Resource Stash",
SC2WOL_LOC_ID_OFFSET + 405,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.EVACUATION.mission_name,
"Flawless",
SC2WOL_LOC_ID_OFFSET + 406,
LocationType.CHALLENGE,
lambda state: (
logic.terran_early_tech(state)
and logic.terran_defense_rating(state, True, False) >= 2
and (
(adv_tactics and logic.terran_basic_anti_air(state))
or logic.terran_competent_anti_air(state)
)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.EVACUATION.mission_name,
"Western Zerg Base",
SC2WOL_LOC_ID_OFFSET + 407,
LocationType.MASTERY,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_base_trasher(state)
and logic.terran_competent_anti_air(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.EVACUATION.mission_name,
"Eastern Zerg Base",
SC2WOL_LOC_ID_OFFSET + 408,
LocationType.MASTERY,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_base_trasher(state)
and logic.terran_competent_anti_air(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.OUTBREAK.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 500,
LocationType.VICTORY,
logic.terran_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK.mission_name,
"Left Infestor",
SC2WOL_LOC_ID_OFFSET + 501,
LocationType.VANILLA,
logic.terran_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK.mission_name,
"Right Infestor",
SC2WOL_LOC_ID_OFFSET + 502,
LocationType.VANILLA,
logic.terran_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK.mission_name,
"North Infested Command Center",
SC2WOL_LOC_ID_OFFSET + 503,
LocationType.EXTRA,
logic.terran_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK.mission_name,
"South Infested Command Center",
SC2WOL_LOC_ID_OFFSET + 504,
LocationType.EXTRA,
logic.terran_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK.mission_name,
"Northwest Bar",
SC2WOL_LOC_ID_OFFSET + 505,
LocationType.EXTRA,
logic.terran_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK.mission_name,
"North Bar",
SC2WOL_LOC_ID_OFFSET + 506,
LocationType.EXTRA,
logic.terran_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK.mission_name,
"South Bar",
SC2WOL_LOC_ID_OFFSET + 507,
LocationType.EXTRA,
logic.terran_outbreak_requirement,
),
make_location_data(
SC2Mission.SAFE_HAVEN.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 600,
LocationType.VICTORY,
logic.terran_safe_haven_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.SAFE_HAVEN.mission_name,
"North Nexus",
SC2WOL_LOC_ID_OFFSET + 601,
LocationType.EXTRA,
logic.terran_safe_haven_requirement,
),
make_location_data(
SC2Mission.SAFE_HAVEN.mission_name,
"East Nexus",
SC2WOL_LOC_ID_OFFSET + 602,
LocationType.EXTRA,
logic.terran_safe_haven_requirement,
),
make_location_data(
SC2Mission.SAFE_HAVEN.mission_name,
"South Nexus",
SC2WOL_LOC_ID_OFFSET + 603,
LocationType.EXTRA,
logic.terran_safe_haven_requirement,
),
make_location_data(
SC2Mission.SAFE_HAVEN.mission_name,
"First Terror Fleet",
SC2WOL_LOC_ID_OFFSET + 604,
LocationType.VANILLA,
logic.terran_safe_haven_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.SAFE_HAVEN.mission_name,
"Second Terror Fleet",
SC2WOL_LOC_ID_OFFSET + 605,
LocationType.VANILLA,
logic.terran_safe_haven_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.SAFE_HAVEN.mission_name,
"Third Terror Fleet",
SC2WOL_LOC_ID_OFFSET + 606,
LocationType.VANILLA,
logic.terran_safe_haven_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.HAVENS_FALL.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 700,
LocationType.VICTORY,
logic.terran_havens_fall_requirement,
hard_rule=logic.terran_any_anti_air_or_science_vessels,
),
make_location_data(
SC2Mission.HAVENS_FALL.mission_name,
"North Hive",
SC2WOL_LOC_ID_OFFSET + 701,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.HAVENS_FALL.mission_name,
"East Hive",
SC2WOL_LOC_ID_OFFSET + 702,
LocationType.VANILLA,
logic.terran_havens_fall_requirement,
),
make_location_data(
SC2Mission.HAVENS_FALL.mission_name,
"South Hive",
SC2WOL_LOC_ID_OFFSET + 703,
LocationType.VANILLA,
logic.terran_havens_fall_requirement,
),
make_location_data(
SC2Mission.HAVENS_FALL.mission_name,
"Northeast Colony Base",
SC2WOL_LOC_ID_OFFSET + 704,
LocationType.CHALLENGE,
logic.terran_respond_to_colony_infestations,
hard_rule=logic.terran_any_anti_air_or_science_vessels,
),
make_location_data(
SC2Mission.HAVENS_FALL.mission_name,
"East Colony Base",
SC2WOL_LOC_ID_OFFSET + 705,
LocationType.CHALLENGE,
logic.terran_respond_to_colony_infestations,
hard_rule=logic.terran_any_anti_air_or_science_vessels,
),
make_location_data(
SC2Mission.HAVENS_FALL.mission_name,
"Middle Colony Base",
SC2WOL_LOC_ID_OFFSET + 706,
LocationType.CHALLENGE,
logic.terran_respond_to_colony_infestations,
hard_rule=logic.terran_any_anti_air_or_science_vessels,
),
make_location_data(
SC2Mission.HAVENS_FALL.mission_name,
"Southeast Colony Base",
SC2WOL_LOC_ID_OFFSET + 707,
LocationType.CHALLENGE,
logic.terran_respond_to_colony_infestations,
hard_rule=logic.terran_any_anti_air_or_science_vessels,
),
make_location_data(
SC2Mission.HAVENS_FALL.mission_name,
"Southwest Colony Base",
SC2WOL_LOC_ID_OFFSET + 708,
LocationType.CHALLENGE,
logic.terran_respond_to_colony_infestations,
hard_rule=logic.terran_any_anti_air_or_science_vessels,
),
make_location_data(
SC2Mission.HAVENS_FALL.mission_name,
"Southwest Gas Pickups",
SC2WOL_LOC_ID_OFFSET + 709,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.HAVENS_FALL.mission_name,
"East Gas Pickups",
SC2WOL_LOC_ID_OFFSET + 710,
LocationType.EXTRA,
logic.terran_havens_fall_requirement,
),
make_location_data(
SC2Mission.HAVENS_FALL.mission_name,
"Southeast Gas Pickups",
SC2WOL_LOC_ID_OFFSET + 711,
LocationType.EXTRA,
logic.terran_havens_fall_requirement,
),
make_location_data(
SC2Mission.SMASH_AND_GRAB.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 800,
LocationType.VICTORY,
lambda state: (
logic.terran_common_unit(state)
and (
adv_tactics
and logic.terran_moderate_anti_air(state)
or logic.terran_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB.mission_name,
"First Relic",
SC2WOL_LOC_ID_OFFSET + 801,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.SMASH_AND_GRAB.mission_name,
"Second Relic",
SC2WOL_LOC_ID_OFFSET + 802,
LocationType.VANILLA,
lambda state: (adv_tactics or logic.terran_common_unit(state)),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB.mission_name,
"Third Relic",
SC2WOL_LOC_ID_OFFSET + 803,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and (
adv_tactics
and logic.terran_moderate_anti_air(state)
or logic.terran_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB.mission_name,
"Fourth Relic",
SC2WOL_LOC_ID_OFFSET + 804,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and (
adv_tactics
and logic.terran_moderate_anti_air(state)
or logic.terran_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB.mission_name,
"First Forcefield Area Busted",
SC2WOL_LOC_ID_OFFSET + 805,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and (
adv_tactics
and logic.terran_moderate_anti_air(state)
or logic.terran_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB.mission_name,
"Second Forcefield Area Busted",
SC2WOL_LOC_ID_OFFSET + 806,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and (
adv_tactics
and logic.terran_moderate_anti_air(state)
or logic.terran_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB.mission_name,
"Defeat Kerrigan",
SC2WOL_LOC_ID_OFFSET + 807,
LocationType.MASTERY,
lambda state: (
logic.terran_common_unit(state) and logic.terran_base_trasher(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.THE_DIG.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 900,
LocationType.VICTORY,
lambda state: (
(
logic.terran_competent_anti_air(state)
or adv_tactics
and logic.terran_moderate_anti_air(state)
)
and logic.terran_defense_rating(state, False, True) >= 8
and logic.terran_common_unit(state)
and (logic.marine_medic_upgrade(state) or adv_tactics)
),
),
make_location_data(
SC2Mission.THE_DIG.mission_name,
"Left Relic",
SC2WOL_LOC_ID_OFFSET + 901,
LocationType.VANILLA,
lambda state: (
logic.terran_defense_rating(state, False, False) >= 6
and logic.terran_common_unit(state)
and (logic.marine_medic_upgrade(state) or adv_tactics)
),
),
make_location_data(
SC2Mission.THE_DIG.mission_name,
"Right Ground Relic",
SC2WOL_LOC_ID_OFFSET + 902,
LocationType.VANILLA,
lambda state: (
logic.terran_defense_rating(state, False, False) >= 6
and logic.terran_common_unit(state)
and (logic.marine_medic_upgrade(state) or adv_tactics)
),
),
make_location_data(
SC2Mission.THE_DIG.mission_name,
"Right Cliff Relic",
SC2WOL_LOC_ID_OFFSET + 903,
LocationType.VANILLA,
lambda state: (
logic.terran_defense_rating(state, False, False) >= 6
and logic.terran_common_unit(state)
and (logic.marine_medic_upgrade(state) or adv_tactics)
),
),
make_location_data(
SC2Mission.THE_DIG.mission_name,
"Moebius Base",
SC2WOL_LOC_ID_OFFSET + 904,
LocationType.EXTRA,
lambda state: logic.marine_medic_upgrade(state) or adv_tactics,
),
make_location_data(
SC2Mission.THE_DIG.mission_name,
"Door Outer Layer",
SC2WOL_LOC_ID_OFFSET + 905,
LocationType.EXTRA,
lambda state: (
logic.terran_defense_rating(state, False, False) >= 6
and logic.terran_common_unit(state)
and (logic.marine_medic_upgrade(state) or adv_tactics)
),
),
make_location_data(
SC2Mission.THE_DIG.mission_name,
"Door Thermal Barrier",
SC2WOL_LOC_ID_OFFSET + 906,
LocationType.EXTRA,
lambda state: (
(
logic.terran_competent_anti_air(state)
or adv_tactics
and logic.terran_moderate_anti_air(state)
)
and logic.terran_defense_rating(state, False, True) >= 8
and logic.terran_common_unit(state)
and (logic.marine_medic_upgrade(state) or adv_tactics)
),
),
make_location_data(
SC2Mission.THE_DIG.mission_name,
"Cutting Through the Core",
SC2WOL_LOC_ID_OFFSET + 907,
LocationType.EXTRA,
lambda state: (
(
logic.terran_competent_anti_air(state)
or adv_tactics
and logic.terran_moderate_anti_air(state)
)
and logic.terran_defense_rating(state, False, True) >= 8
and logic.terran_common_unit(state)
and (logic.marine_medic_upgrade(state) or adv_tactics)
),
),
make_location_data(
SC2Mission.THE_DIG.mission_name,
"Structure Access Imminent",
SC2WOL_LOC_ID_OFFSET + 908,
LocationType.EXTRA,
lambda state: (
(
logic.terran_competent_anti_air(state)
or adv_tactics
and logic.terran_moderate_anti_air(state)
)
and logic.terran_defense_rating(state, False, True) >= 8
and logic.terran_common_unit(state)
and (logic.marine_medic_upgrade(state) or adv_tactics)
),
),
make_location_data(
SC2Mission.THE_DIG.mission_name,
"Northwestern Protoss Base",
SC2WOL_LOC_ID_OFFSET + 909,
LocationType.MASTERY,
lambda state: (
logic.terran_beats_protoss_deathball(state)
and logic.terran_defense_rating(state, False, True) >= 8
and logic.terran_common_unit(state)
and (logic.marine_medic_upgrade(state) or adv_tactics)
and logic.terran_base_trasher(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.THE_DIG.mission_name,
"Northeastern Protoss Base",
SC2WOL_LOC_ID_OFFSET + 910,
LocationType.MASTERY,
lambda state: (
logic.terran_beats_protoss_deathball(state)
and logic.terran_defense_rating(state, False, True) >= 8
and logic.terran_common_unit(state)
and (logic.marine_medic_upgrade(state) or adv_tactics)
and logic.terran_base_trasher(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.THE_DIG.mission_name,
"Eastern Protoss Base",
SC2WOL_LOC_ID_OFFSET + 911,
LocationType.MASTERY,
lambda state: (
logic.terran_beats_protoss_deathball(state)
and logic.terran_defense_rating(state, False, True) >= 8
and logic.terran_common_unit(state)
and logic.terran_base_trasher(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 1000,
LocationType.VICTORY,
lambda state: (
(
logic.terran_moderate_anti_air(state)
and state.has_any({item_names.MEDIVAC, item_names.HERCULES}, player)
or logic.terran_air_anti_air(state)
)
and (
logic.terran_air(state)
or state.has_any({item_names.MEDIVAC, item_names.HERCULES}, player)
and logic.terran_common_unit(state)
)
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR.mission_name,
"1st Data Core",
SC2WOL_LOC_ID_OFFSET + 1001,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR.mission_name,
"2nd Data Core",
SC2WOL_LOC_ID_OFFSET + 1002,
LocationType.VANILLA,
lambda state: (
logic.terran_air(state)
or (
state.has_any({item_names.MEDIVAC, item_names.HERCULES}, player)
and logic.terran_common_unit(state)
)
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR.mission_name,
"South Rescue",
SC2WOL_LOC_ID_OFFSET + 1003,
LocationType.EXTRA,
logic.terran_can_rescue,
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR.mission_name,
"Wall Rescue",
SC2WOL_LOC_ID_OFFSET + 1004,
LocationType.EXTRA,
logic.terran_can_rescue,
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR.mission_name,
"Mid Rescue",
SC2WOL_LOC_ID_OFFSET + 1005,
LocationType.EXTRA,
logic.terran_can_rescue,
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR.mission_name,
"Nydus Roof Rescue",
SC2WOL_LOC_ID_OFFSET + 1006,
LocationType.EXTRA,
logic.terran_can_rescue,
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR.mission_name,
"Alive Inside Rescue",
SC2WOL_LOC_ID_OFFSET + 1007,
LocationType.EXTRA,
logic.terran_can_rescue,
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR.mission_name,
"Brutalisk",
SC2WOL_LOC_ID_OFFSET + 1008,
LocationType.VANILLA,
lambda state: (
(
logic.terran_moderate_anti_air(state)
and state.has_any({item_names.MEDIVAC, item_names.HERCULES}, player)
or logic.terran_air_anti_air(state)
)
and (
logic.terran_air(state)
or state.has_any({item_names.MEDIVAC, item_names.HERCULES}, player)
and logic.terran_common_unit(state)
)
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR.mission_name,
"3rd Data Core",
SC2WOL_LOC_ID_OFFSET + 1009,
LocationType.VANILLA,
lambda state: (
(
logic.terran_moderate_anti_air(state)
and state.has_any({item_names.MEDIVAC, item_names.HERCULES}, player)
or logic.terran_air_anti_air(state)
)
and (
logic.terran_air(state)
or state.has_any({item_names.MEDIVAC, item_names.HERCULES}, player)
and logic.terran_common_unit(state)
)
),
),
make_location_data(
SC2Mission.SUPERNOVA.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 1100,
LocationType.VICTORY,
logic.terran_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA.mission_name,
"West Relic",
SC2WOL_LOC_ID_OFFSET + 1101,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.SUPERNOVA.mission_name,
"North Relic",
SC2WOL_LOC_ID_OFFSET + 1102,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.SUPERNOVA.mission_name,
"South Relic",
SC2WOL_LOC_ID_OFFSET + 1103,
LocationType.VANILLA,
logic.terran_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA.mission_name,
"East Relic",
SC2WOL_LOC_ID_OFFSET + 1104,
LocationType.VANILLA,
logic.terran_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA.mission_name,
"Landing Zone Cleared",
SC2WOL_LOC_ID_OFFSET + 1105,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.SUPERNOVA.mission_name,
"Middle Base",
SC2WOL_LOC_ID_OFFSET + 1106,
LocationType.EXTRA,
logic.terran_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA.mission_name,
"Southeast Base",
SC2WOL_LOC_ID_OFFSET + 1107,
LocationType.EXTRA,
logic.terran_supernova_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 1200,
LocationType.VICTORY,
logic.terran_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"Landing Zone Cleared",
SC2WOL_LOC_ID_OFFSET + 1201,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"Expansion Prisoners",
SC2WOL_LOC_ID_OFFSET + 1202,
LocationType.VANILLA,
lambda state: adv_tactics or logic.terran_maw_requirement(state),
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"South Close Prisoners",
SC2WOL_LOC_ID_OFFSET + 1203,
LocationType.VANILLA,
lambda state: adv_tactics or logic.terran_maw_requirement(state),
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"South Far Prisoners",
SC2WOL_LOC_ID_OFFSET + 1204,
LocationType.VANILLA,
logic.terran_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"North Prisoners",
SC2WOL_LOC_ID_OFFSET + 1205,
LocationType.VANILLA,
logic.terran_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"Mothership",
SC2WOL_LOC_ID_OFFSET + 1206,
LocationType.EXTRA,
logic.terran_maw_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"Expansion Rip Field Generator",
SC2WOL_LOC_ID_OFFSET + 1207,
LocationType.EXTRA,
lambda state: adv_tactics or logic.terran_maw_requirement(state),
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"Middle Rip Field Generator",
SC2WOL_LOC_ID_OFFSET + 1208,
LocationType.EXTRA,
logic.terran_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"Southeast Rip Field Generator",
SC2WOL_LOC_ID_OFFSET + 1209,
LocationType.EXTRA,
logic.terran_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"Stargate Rip Field Generator",
SC2WOL_LOC_ID_OFFSET + 1210,
LocationType.EXTRA,
logic.terran_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"Northwest Rip Field Generator",
SC2WOL_LOC_ID_OFFSET + 1211,
LocationType.CHALLENGE,
logic.terran_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"West Rip Field Generator",
SC2WOL_LOC_ID_OFFSET + 1212,
LocationType.CHALLENGE,
logic.terran_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID.mission_name,
"Southwest Rip Field Generator",
SC2WOL_LOC_ID_OFFSET + 1213,
LocationType.CHALLENGE,
logic.terran_maw_requirement,
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 1300,
LocationType.VICTORY,
lambda state: (
adv_tactics
or logic.terran_moderate_anti_air(state)
and (
logic.terran_common_unit(state)
or state.has(item_names.REAPER, player)
)
),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND.mission_name,
"Tosh's Miners",
SC2WOL_LOC_ID_OFFSET + 1301,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND.mission_name,
"Brutalisk",
SC2WOL_LOC_ID_OFFSET + 1302,
LocationType.VANILLA,
lambda state: adv_tactics
or logic.terran_common_unit(state)
or state.has(item_names.REAPER, player),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND.mission_name,
"North Reapers",
SC2WOL_LOC_ID_OFFSET + 1303,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND.mission_name,
"Middle Reapers",
SC2WOL_LOC_ID_OFFSET + 1304,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND.mission_name,
"Southwest Reapers",
SC2WOL_LOC_ID_OFFSET + 1305,
LocationType.EXTRA,
lambda state: adv_tactics
or logic.terran_common_unit(state)
or state.has(item_names.REAPER, player),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND.mission_name,
"Southeast Reapers",
SC2WOL_LOC_ID_OFFSET + 1306,
LocationType.EXTRA,
lambda state: (
adv_tactics
or logic.terran_moderate_anti_air(state)
and (
logic.terran_common_unit(state)
or state.has(item_names.REAPER, player)
)
),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND.mission_name,
"East Reapers",
SC2WOL_LOC_ID_OFFSET + 1307,
LocationType.EXTRA,
lambda state: (
logic.terran_moderate_anti_air(state)
and (
adv_tactics
or logic.terran_common_unit(state)
or state.has(item_names.REAPER, player)
)
),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND.mission_name,
"Zerg Cleared",
SC2WOL_LOC_ID_OFFSET + 1308,
LocationType.CHALLENGE,
lambda state: (
logic.terran_competent_anti_air(state)
and (
logic.terran_common_unit(state)
or state.has(item_names.REAPER, player)
)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 1400,
LocationType.VICTORY,
logic.terran_welcome_to_the_jungle_requirement,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE.mission_name,
"Close Relic",
SC2WOL_LOC_ID_OFFSET + 1401,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE.mission_name,
"West Relic",
SC2WOL_LOC_ID_OFFSET + 1402,
LocationType.VANILLA,
logic.terran_welcome_to_the_jungle_requirement,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE.mission_name,
"North-East Relic",
SC2WOL_LOC_ID_OFFSET + 1403,
LocationType.VANILLA,
logic.terran_welcome_to_the_jungle_requirement,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE.mission_name,
"Middle Base",
SC2WOL_LOC_ID_OFFSET + 1404,
LocationType.EXTRA,
logic.terran_welcome_to_the_jungle_requirement,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE.mission_name,
"Protoss Cleared",
SC2WOL_LOC_ID_OFFSET + 1405,
LocationType.MASTERY,
lambda state: (
logic.terran_welcome_to_the_jungle_requirement(state)
and logic.terran_beats_protoss_deathball(state)
and logic.terran_base_trasher(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE.mission_name,
"No Terrazine Nodes Sealed",
SC2WOL_LOC_ID_OFFSET + 1406,
LocationType.CHALLENGE,
lambda state: (
logic.terran_welcome_to_the_jungle_requirement(state)
and logic.terran_competent_ground_to_air(state)
and logic.terran_beats_protoss_deathball(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE.mission_name,
"Up to 1 Terrazine Node Sealed",
SC2WOL_LOC_ID_OFFSET + 1407,
LocationType.CHALLENGE,
lambda state: (
logic.terran_welcome_to_the_jungle_requirement(state)
and logic.terran_competent_ground_to_air(state)
and logic.terran_beats_protoss_deathball(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE.mission_name,
"Up to 2 Terrazine Nodes Sealed",
SC2WOL_LOC_ID_OFFSET + 1408,
LocationType.CHALLENGE,
lambda state: (
logic.terran_welcome_to_the_jungle_requirement(state)
and logic.terran_beats_protoss_deathball(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE.mission_name,
"Up to 3 Terrazine Nodes Sealed",
SC2WOL_LOC_ID_OFFSET + 1409,
LocationType.CHALLENGE,
lambda state: (
logic.terran_welcome_to_the_jungle_requirement(state)
and logic.terran_competent_comp(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE.mission_name,
"Up to 4 Terrazine Nodes Sealed",
SC2WOL_LOC_ID_OFFSET + 1410,
LocationType.EXTRA,
logic.terran_welcome_to_the_jungle_requirement,
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE.mission_name,
"Up to 5 Terrazine Nodes Sealed",
SC2WOL_LOC_ID_OFFSET + 1411,
LocationType.EXTRA,
logic.terran_welcome_to_the_jungle_requirement,
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.BREAKOUT.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 1500,
LocationType.VICTORY,
),
make_location_data(
SC2Mission.BREAKOUT.mission_name,
"Diamondback Prison",
SC2WOL_LOC_ID_OFFSET + 1501,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.BREAKOUT.mission_name,
"Siege Tank Prison",
SC2WOL_LOC_ID_OFFSET + 1502,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.BREAKOUT.mission_name,
"First Checkpoint",
SC2WOL_LOC_ID_OFFSET + 1503,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.BREAKOUT.mission_name,
"Second Checkpoint",
SC2WOL_LOC_ID_OFFSET + 1504,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.GHOST_OF_A_CHANCE.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 1600,
LocationType.VICTORY,
logic.ghost_of_a_chance_requirement,
hard_rule=logic.ghost_of_a_chance_requirement,
),
make_location_data(
SC2Mission.GHOST_OF_A_CHANCE.mission_name,
"Terrazine Tank",
SC2WOL_LOC_ID_OFFSET + 1601,
LocationType.EXTRA,
logic.ghost_of_a_chance_requirement,
hard_rule=logic.ghost_of_a_chance_requirement,
),
make_location_data(
SC2Mission.GHOST_OF_A_CHANCE.mission_name,
"Jorium Stockpile",
SC2WOL_LOC_ID_OFFSET + 1602,
LocationType.EXTRA,
logic.ghost_of_a_chance_requirement,
hard_rule=logic.ghost_of_a_chance_requirement,
),
make_location_data(
SC2Mission.GHOST_OF_A_CHANCE.mission_name,
"First Island Spectres",
SC2WOL_LOC_ID_OFFSET + 1603,
LocationType.VANILLA,
logic.ghost_of_a_chance_requirement,
hard_rule=logic.ghost_of_a_chance_requirement,
),
make_location_data(
SC2Mission.GHOST_OF_A_CHANCE.mission_name,
"Second Island Spectres",
SC2WOL_LOC_ID_OFFSET + 1604,
LocationType.VANILLA,
logic.ghost_of_a_chance_requirement,
hard_rule=logic.ghost_of_a_chance_requirement,
),
make_location_data(
SC2Mission.GHOST_OF_A_CHANCE.mission_name,
"Third Island Spectres",
SC2WOL_LOC_ID_OFFSET + 1605,
LocationType.VANILLA,
logic.ghost_of_a_chance_requirement,
hard_rule=logic.ghost_of_a_chance_requirement,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 1700,
LocationType.VICTORY,
lambda state: (
logic.terran_great_train_robbery_train_stopper(state)
and logic.terran_basic_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"North Defiler",
SC2WOL_LOC_ID_OFFSET + 1701,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"Mid Defiler",
SC2WOL_LOC_ID_OFFSET + 1702,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"South Defiler",
SC2WOL_LOC_ID_OFFSET + 1703,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"Close Diamondback",
SC2WOL_LOC_ID_OFFSET + 1704,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"Northwest Diamondback",
SC2WOL_LOC_ID_OFFSET + 1705,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"North Diamondback",
SC2WOL_LOC_ID_OFFSET + 1706,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"Northeast Diamondback",
SC2WOL_LOC_ID_OFFSET + 1707,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"Southwest Diamondback",
SC2WOL_LOC_ID_OFFSET + 1708,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"Southeast Diamondback",
SC2WOL_LOC_ID_OFFSET + 1709,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"Kill Team",
SC2WOL_LOC_ID_OFFSET + 1710,
LocationType.CHALLENGE,
lambda state: (
(adv_tactics or logic.terran_common_unit(state))
and logic.terran_great_train_robbery_train_stopper(state)
and logic.terran_basic_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"Flawless",
SC2WOL_LOC_ID_OFFSET + 1711,
LocationType.CHALLENGE,
lambda state: (
logic.terran_great_train_robbery_train_stopper(state)
and logic.terran_basic_anti_air(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"2 Trains Destroyed",
SC2WOL_LOC_ID_OFFSET + 1712,
LocationType.EXTRA,
logic.terran_great_train_robbery_train_stopper,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"4 Trains Destroyed",
SC2WOL_LOC_ID_OFFSET + 1713,
LocationType.EXTRA,
lambda state: (
logic.terran_great_train_robbery_train_stopper(state)
and logic.terran_basic_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY.mission_name,
"6 Trains Destroyed",
SC2WOL_LOC_ID_OFFSET + 1714,
LocationType.EXTRA,
lambda state: (
logic.terran_great_train_robbery_train_stopper(state)
and logic.terran_basic_anti_air(state)
),
),
make_location_data(
SC2Mission.CUTTHROAT.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 1800,
LocationType.VICTORY,
lambda state: (
logic.terran_common_unit(state)
and (adv_tactics or logic.terran_moderate_anti_air(state))
),
),
make_location_data(
SC2Mission.CUTTHROAT.mission_name,
"Mira Han",
SC2WOL_LOC_ID_OFFSET + 1801,
LocationType.EXTRA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT.mission_name,
"North Relic",
SC2WOL_LOC_ID_OFFSET + 1802,
LocationType.VANILLA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT.mission_name,
"Mid Relic",
SC2WOL_LOC_ID_OFFSET + 1803,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.CUTTHROAT.mission_name,
"Southwest Relic",
SC2WOL_LOC_ID_OFFSET + 1804,
LocationType.VANILLA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT.mission_name,
"North Command Center",
SC2WOL_LOC_ID_OFFSET + 1805,
LocationType.EXTRA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT.mission_name,
"South Command Center",
SC2WOL_LOC_ID_OFFSET + 1806,
LocationType.EXTRA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT.mission_name,
"West Command Center",
SC2WOL_LOC_ID_OFFSET + 1807,
LocationType.EXTRA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 1900,
LocationType.VICTORY,
logic.terran_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION.mission_name,
"Odin",
SC2WOL_LOC_ID_OFFSET + 1901,
LocationType.EXTRA,
logic.marine_medic_upgrade,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION.mission_name,
"Loki",
SC2WOL_LOC_ID_OFFSET + 1902,
LocationType.CHALLENGE,
logic.terran_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION.mission_name,
"Lab Devourer",
SC2WOL_LOC_ID_OFFSET + 1903,
LocationType.VANILLA,
logic.marine_medic_upgrade,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION.mission_name,
"North Devourer",
SC2WOL_LOC_ID_OFFSET + 1904,
LocationType.VANILLA,
logic.terran_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION.mission_name,
"Southeast Devourer",
SC2WOL_LOC_ID_OFFSET + 1905,
LocationType.VANILLA,
logic.terran_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION.mission_name,
"West Base",
SC2WOL_LOC_ID_OFFSET + 1906,
LocationType.EXTRA,
logic.terran_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION.mission_name,
"Northwest Base",
SC2WOL_LOC_ID_OFFSET + 1907,
LocationType.EXTRA,
logic.terran_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION.mission_name,
"Northeast Base",
SC2WOL_LOC_ID_OFFSET + 1908,
LocationType.EXTRA,
logic.terran_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION.mission_name,
"Southeast Base",
SC2WOL_LOC_ID_OFFSET + 1909,
LocationType.EXTRA,
logic.terran_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.MEDIA_BLITZ.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 2000,
LocationType.VICTORY,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ.mission_name,
"Tower 1",
SC2WOL_LOC_ID_OFFSET + 2001,
LocationType.VANILLA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ.mission_name,
"Tower 2",
SC2WOL_LOC_ID_OFFSET + 2002,
LocationType.VANILLA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ.mission_name,
"Tower 3",
SC2WOL_LOC_ID_OFFSET + 2003,
LocationType.VANILLA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ.mission_name,
"Science Facility",
SC2WOL_LOC_ID_OFFSET + 2004,
LocationType.VANILLA,
lambda state: adv_tactics or logic.terran_competent_comp(state),
),
make_location_data(
SC2Mission.MEDIA_BLITZ.mission_name,
"All Barracks",
SC2WOL_LOC_ID_OFFSET + 2005,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ.mission_name,
"All Factories",
SC2WOL_LOC_ID_OFFSET + 2006,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ.mission_name,
"All Starports",
SC2WOL_LOC_ID_OFFSET + 2007,
LocationType.EXTRA,
lambda state: adv_tactics or logic.terran_competent_comp(state),
),
make_location_data(
SC2Mission.MEDIA_BLITZ.mission_name,
"Odin Not Trashed",
SC2WOL_LOC_ID_OFFSET + 2008,
LocationType.CHALLENGE,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ.mission_name,
"Surprise Attack Ends",
SC2WOL_LOC_ID_OFFSET + 2009,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.PIERCING_OF_THE_SHROUD.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 2100,
LocationType.VICTORY,
logic.marine_medic_upgrade,
),
make_location_data(
SC2Mission.PIERCING_OF_THE_SHROUD.mission_name,
"Holding Cell Relic",
SC2WOL_LOC_ID_OFFSET + 2101,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.PIERCING_OF_THE_SHROUD.mission_name,
"Brutalisk Relic",
SC2WOL_LOC_ID_OFFSET + 2102,
LocationType.VANILLA,
logic.marine_medic_upgrade,
),
make_location_data(
SC2Mission.PIERCING_OF_THE_SHROUD.mission_name,
"First Escape Relic",
SC2WOL_LOC_ID_OFFSET + 2103,
LocationType.VANILLA,
logic.marine_medic_upgrade,
),
make_location_data(
SC2Mission.PIERCING_OF_THE_SHROUD.mission_name,
"Second Escape Relic",
SC2WOL_LOC_ID_OFFSET + 2104,
LocationType.VANILLA,
logic.marine_medic_upgrade,
),
make_location_data(
SC2Mission.PIERCING_OF_THE_SHROUD.mission_name,
"Brutalisk",
SC2WOL_LOC_ID_OFFSET + 2105,
LocationType.VANILLA,
logic.marine_medic_upgrade,
),
make_location_data(
SC2Mission.PIERCING_OF_THE_SHROUD.mission_name,
"Fusion Reactor",
SC2WOL_LOC_ID_OFFSET + 2106,
LocationType.EXTRA,
logic.marine_medic_upgrade,
),
make_location_data(
SC2Mission.PIERCING_OF_THE_SHROUD.mission_name,
"Entrance Holding Pen",
SC2WOL_LOC_ID_OFFSET + 2107,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.PIERCING_OF_THE_SHROUD.mission_name,
"Cargo Bay Warbot",
SC2WOL_LOC_ID_OFFSET + 2108,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.PIERCING_OF_THE_SHROUD.mission_name,
"Escape Warbot",
SC2WOL_LOC_ID_OFFSET + 2109,
LocationType.EXTRA,
logic.marine_medic_upgrade,
),
make_location_data(
SC2Mission.WHISPERS_OF_DOOM.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 2200,
LocationType.VICTORY,
),
make_location_data(
SC2Mission.WHISPERS_OF_DOOM.mission_name,
"First Hatchery",
SC2WOL_LOC_ID_OFFSET + 2201,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.WHISPERS_OF_DOOM.mission_name,
"Second Hatchery",
SC2WOL_LOC_ID_OFFSET + 2202,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.WHISPERS_OF_DOOM.mission_name,
"Third Hatchery",
SC2WOL_LOC_ID_OFFSET + 2203,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.WHISPERS_OF_DOOM.mission_name,
"First Prophecy Fragment",
SC2WOL_LOC_ID_OFFSET + 2204,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.WHISPERS_OF_DOOM.mission_name,
"Second Prophecy Fragment",
SC2WOL_LOC_ID_OFFSET + 2205,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.WHISPERS_OF_DOOM.mission_name,
"Third Prophecy Fragment",
SC2WOL_LOC_ID_OFFSET + 2206,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.A_SINISTER_TURN.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 2300,
LocationType.VICTORY,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_competent_anti_air(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN.mission_name,
"Robotics Facility",
SC2WOL_LOC_ID_OFFSET + 2301,
LocationType.VANILLA,
lambda state: adv_tactics or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN.mission_name,
"Dark Shrine",
SC2WOL_LOC_ID_OFFSET + 2302,
LocationType.VANILLA,
lambda state: adv_tactics or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN.mission_name,
"Templar Archives",
SC2WOL_LOC_ID_OFFSET + 2303,
LocationType.VANILLA,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_competent_anti_air(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN.mission_name,
"Northeast Base",
SC2WOL_LOC_ID_OFFSET + 2304,
LocationType.EXTRA,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_competent_anti_air(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN.mission_name,
"Southwest Base",
SC2WOL_LOC_ID_OFFSET + 2305,
LocationType.CHALLENGE,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_competent_anti_air(state),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.A_SINISTER_TURN.mission_name,
"Maar",
SC2WOL_LOC_ID_OFFSET + 2306,
LocationType.EXTRA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.A_SINISTER_TURN.mission_name,
"Northwest Preserver",
SC2WOL_LOC_ID_OFFSET + 2307,
LocationType.EXTRA,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_competent_anti_air(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN.mission_name,
"Southwest Preserver",
SC2WOL_LOC_ID_OFFSET + 2308,
LocationType.EXTRA,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_competent_anti_air(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN.mission_name,
"East Preserver",
SC2WOL_LOC_ID_OFFSET + 2309,
LocationType.EXTRA,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_competent_anti_air(state),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 2400,
LocationType.VICTORY,
lambda state: (
(adv_tactics and logic.protoss_static_defense(state))
or (
logic.protoss_common_unit(state)
and logic.protoss_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE.mission_name,
"Close Obelisk",
SC2WOL_LOC_ID_OFFSET + 2401,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE.mission_name,
"West Obelisk",
SC2WOL_LOC_ID_OFFSET + 2402,
LocationType.VANILLA,
lambda state: adv_tactics or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE.mission_name,
"Base",
SC2WOL_LOC_ID_OFFSET + 2403,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE.mission_name,
"Southwest Tendril",
SC2WOL_LOC_ID_OFFSET + 2404,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE.mission_name,
"Southeast Tendril",
SC2WOL_LOC_ID_OFFSET + 2405,
LocationType.EXTRA,
lambda state: adv_tactics
and logic.protoss_static_defense(state)
or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE.mission_name,
"Northeast Tendril",
SC2WOL_LOC_ID_OFFSET + 2406,
LocationType.EXTRA,
lambda state: adv_tactics
and logic.protoss_static_defense(state)
or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE.mission_name,
"Northwest Tendril",
SC2WOL_LOC_ID_OFFSET + 2407,
LocationType.EXTRA,
lambda state: adv_tactics
and logic.protoss_static_defense(state)
or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS.mission_name,
"Defeat",
SC2WOL_LOC_ID_OFFSET + 2500,
LocationType.VICTORY,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS.mission_name,
"Protoss Archive",
SC2WOL_LOC_ID_OFFSET + 2501,
LocationType.VANILLA,
logic.protoss_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS.mission_name,
"Kills",
SC2WOL_LOC_ID_OFFSET + 2502,
LocationType.VANILLA,
logic.protoss_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS.mission_name,
"Urun",
SC2WOL_LOC_ID_OFFSET + 2503,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS.mission_name,
"Mohandar",
SC2WOL_LOC_ID_OFFSET + 2504,
LocationType.EXTRA,
logic.protoss_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS.mission_name,
"Selendis",
SC2WOL_LOC_ID_OFFSET + 2505,
LocationType.EXTRA,
logic.protoss_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS.mission_name,
"Artanis",
SC2WOL_LOC_ID_OFFSET + 2506,
LocationType.EXTRA,
logic.protoss_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 2600,
LocationType.VICTORY,
logic.terran_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL.mission_name,
"Large Army",
SC2WOL_LOC_ID_OFFSET + 2601,
LocationType.VANILLA,
logic.terran_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL.mission_name,
"2 Drop Pods",
SC2WOL_LOC_ID_OFFSET + 2602,
LocationType.VANILLA,
logic.terran_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL.mission_name,
"4 Drop Pods",
SC2WOL_LOC_ID_OFFSET + 2603,
LocationType.VANILLA,
logic.terran_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL.mission_name,
"6 Drop Pods",
SC2WOL_LOC_ID_OFFSET + 2604,
LocationType.EXTRA,
logic.terran_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL.mission_name,
"8 Drop Pods",
SC2WOL_LOC_ID_OFFSET + 2605,
LocationType.CHALLENGE,
logic.terran_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL.mission_name,
"Southwest Spore Cannon",
SC2WOL_LOC_ID_OFFSET + 2606,
LocationType.EXTRA,
logic.terran_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL.mission_name,
"Northwest Spore Cannon",
SC2WOL_LOC_ID_OFFSET + 2607,
LocationType.EXTRA,
logic.terran_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL.mission_name,
"Northeast Spore Cannon",
SC2WOL_LOC_ID_OFFSET + 2608,
LocationType.EXTRA,
logic.terran_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL.mission_name,
"East Spore Cannon",
SC2WOL_LOC_ID_OFFSET + 2609,
LocationType.EXTRA,
logic.terran_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL.mission_name,
"Southeast Spore Cannon",
SC2WOL_LOC_ID_OFFSET + 2610,
LocationType.EXTRA,
logic.terran_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL.mission_name,
"Expansion Spore Cannon",
SC2WOL_LOC_ID_OFFSET + 2611,
LocationType.EXTRA,
logic.terran_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.BELLY_OF_THE_BEAST.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 2700,
LocationType.VICTORY,
lambda state: adv_tactics or logic.marine_medic_firebat_upgrade(state),
),
make_location_data(
SC2Mission.BELLY_OF_THE_BEAST.mission_name,
"First Charge",
SC2WOL_LOC_ID_OFFSET + 2701,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.BELLY_OF_THE_BEAST.mission_name,
"Second Charge",
SC2WOL_LOC_ID_OFFSET + 2702,
LocationType.EXTRA,
lambda state: adv_tactics or logic.marine_medic_firebat_upgrade(state),
),
make_location_data(
SC2Mission.BELLY_OF_THE_BEAST.mission_name,
"Third Charge",
SC2WOL_LOC_ID_OFFSET + 2703,
LocationType.EXTRA,
lambda state: adv_tactics or logic.marine_medic_firebat_upgrade(state),
),
make_location_data(
SC2Mission.BELLY_OF_THE_BEAST.mission_name,
"First Group Rescued",
SC2WOL_LOC_ID_OFFSET + 2704,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.BELLY_OF_THE_BEAST.mission_name,
"Second Group Rescued",
SC2WOL_LOC_ID_OFFSET + 2705,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.BELLY_OF_THE_BEAST.mission_name,
"Third Group Rescued",
SC2WOL_LOC_ID_OFFSET + 2706,
LocationType.VANILLA,
lambda state: adv_tactics or logic.marine_medic_firebat_upgrade(state),
),
make_location_data(
SC2Mission.SHATTER_THE_SKY.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 2800,
LocationType.VICTORY,
lambda state: logic.terran_competent_comp(state, 2),
),
make_location_data(
SC2Mission.SHATTER_THE_SKY.mission_name,
"Close Coolant Tower",
SC2WOL_LOC_ID_OFFSET + 2801,
LocationType.VANILLA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY.mission_name,
"Northwest Coolant Tower",
SC2WOL_LOC_ID_OFFSET + 2802,
LocationType.VANILLA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY.mission_name,
"Southeast Coolant Tower",
SC2WOL_LOC_ID_OFFSET + 2803,
LocationType.VANILLA,
lambda state: logic.terran_competent_comp(state, 2),
),
make_location_data(
SC2Mission.SHATTER_THE_SKY.mission_name,
"Southwest Coolant Tower",
SC2WOL_LOC_ID_OFFSET + 2804,
LocationType.VANILLA,
lambda state: logic.terran_competent_comp(state, 2),
),
make_location_data(
SC2Mission.SHATTER_THE_SKY.mission_name,
"Leviathan",
SC2WOL_LOC_ID_OFFSET + 2805,
LocationType.VANILLA,
lambda state: logic.terran_competent_comp(state, 2),
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY.mission_name,
"East Hatchery",
SC2WOL_LOC_ID_OFFSET + 2806,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY.mission_name,
"North Hatchery",
SC2WOL_LOC_ID_OFFSET + 2807,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY.mission_name,
"Mid Hatchery",
SC2WOL_LOC_ID_OFFSET + 2808,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.ALL_IN.mission_name,
"Victory",
SC2WOL_LOC_ID_OFFSET + 2900,
LocationType.VICTORY,
logic.terran_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN.mission_name,
"First Kerrigan Attack",
SC2WOL_LOC_ID_OFFSET + 2901,
LocationType.EXTRA,
logic.terran_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN.mission_name,
"Second Kerrigan Attack",
SC2WOL_LOC_ID_OFFSET + 2902,
LocationType.EXTRA,
logic.terran_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN.mission_name,
"Third Kerrigan Attack",
SC2WOL_LOC_ID_OFFSET + 2903,
LocationType.EXTRA,
logic.terran_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN.mission_name,
"Fourth Kerrigan Attack",
SC2WOL_LOC_ID_OFFSET + 2904,
LocationType.EXTRA,
logic.terran_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN.mission_name,
"Fifth Kerrigan Attack",
SC2WOL_LOC_ID_OFFSET + 2905,
LocationType.EXTRA,
logic.terran_all_in_requirement,
),
# HotS
make_location_data(
SC2Mission.LAB_RAT.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 100,
LocationType.VICTORY,
lambda state: (
logic.zerg_common_unit(state)
or state.has_any((item_names.ZERGLING, item_names.PYGALISK), player)
),
),
make_location_data(
SC2Mission.LAB_RAT.mission_name,
"Gather Minerals",
SC2HOTS_LOC_ID_OFFSET + 101,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.LAB_RAT.mission_name,
"South Zergling Group",
SC2HOTS_LOC_ID_OFFSET + 102,
LocationType.VANILLA,
lambda state: adv_tactics
or (
logic.zerg_common_unit(state)
or state.has_any((item_names.ZERGLING, item_names.PYGALISK), player)
),
),
make_location_data(
SC2Mission.LAB_RAT.mission_name,
"East Zergling Group",
SC2HOTS_LOC_ID_OFFSET + 103,
LocationType.VANILLA,
lambda state: adv_tactics
or (
logic.zerg_common_unit(state)
or state.has_any((item_names.ZERGLING, item_names.PYGALISK), player)
),
),
make_location_data(
SC2Mission.LAB_RAT.mission_name,
"West Zergling Group",
SC2HOTS_LOC_ID_OFFSET + 104,
LocationType.VANILLA,
lambda state: adv_tactics
or (
logic.zerg_common_unit(state)
or state.has_any((item_names.ZERGLING, item_names.PYGALISK), player)
),
),
make_location_data(
SC2Mission.LAB_RAT.mission_name,
"Hatchery",
SC2HOTS_LOC_ID_OFFSET + 105,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.LAB_RAT.mission_name,
"Overlord",
SC2HOTS_LOC_ID_OFFSET + 106,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.LAB_RAT.mission_name,
"Gas Turrets",
SC2HOTS_LOC_ID_OFFSET + 107,
LocationType.EXTRA,
lambda state: adv_tactics
or (
logic.zerg_common_unit(state)
or state.has_any((item_names.ZERGLING, item_names.PYGALISK), player)
),
),
make_location_data(
SC2Mission.LAB_RAT.mission_name,
"Win In Under 10 Minutes",
SC2HOTS_LOC_ID_OFFSET + 108,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_common_unit(state)
or state.has_any((item_names.ZERGLING, item_names.PYGALISK), player)
),
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.BACK_IN_THE_SADDLE.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 200,
LocationType.VICTORY,
lambda state: logic.basic_kerrigan(state)
or kerriganless,
hard_rule=logic.zerg_any_units_back_in_the_saddle_requirement,
),
make_location_data(
SC2Mission.BACK_IN_THE_SADDLE.mission_name,
"Defend the Tram",
SC2HOTS_LOC_ID_OFFSET + 201,
LocationType.EXTRA,
lambda state: logic.basic_kerrigan(state)
or kerriganless,
hard_rule=logic.zerg_any_units_back_in_the_saddle_requirement,
),
make_location_data(
SC2Mission.BACK_IN_THE_SADDLE.mission_name,
"Kinetic Blast",
SC2HOTS_LOC_ID_OFFSET + 202,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.BACK_IN_THE_SADDLE.mission_name,
"Crushing Grip",
SC2HOTS_LOC_ID_OFFSET + 203,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.BACK_IN_THE_SADDLE.mission_name,
"Reach the Sublevel",
SC2HOTS_LOC_ID_OFFSET + 204,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.BACK_IN_THE_SADDLE.mission_name,
"Door Section Cleared",
SC2HOTS_LOC_ID_OFFSET + 205,
LocationType.EXTRA,
lambda state: logic.basic_kerrigan(state)
or kerriganless,
hard_rule=logic.zerg_any_units_back_in_the_saddle_requirement,
),
make_location_data(
SC2Mission.RENDEZVOUS.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 300,
LocationType.VICTORY,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_basic_anti_air(state)
and logic.zerg_defense_rating(state, False, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS.mission_name,
"Right Queen",
SC2HOTS_LOC_ID_OFFSET + 301,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_basic_anti_air(state)
and logic.zerg_defense_rating(state, False, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS.mission_name,
"Center Queen",
SC2HOTS_LOC_ID_OFFSET + 302,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_basic_anti_air(state)
and logic.zerg_defense_rating(state, False, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS.mission_name,
"Left Queen",
SC2HOTS_LOC_ID_OFFSET + 303,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_basic_anti_air(state)
and logic.zerg_defense_rating(state, False, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS.mission_name,
"Hold Out Finished",
SC2HOTS_LOC_ID_OFFSET + 304,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_basic_anti_air(state)
and logic.zerg_defense_rating(state, False, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS.mission_name,
"Kill All Buildings Before Reinforcements",
SC2HOTS_LOC_ID_OFFSET + 305,
LocationType.MASTERY,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_competent_anti_air(state)
and (logic.basic_kerrigan(state, False) or kerriganless)
and logic.zerg_defense_rating(state, False, False) >= 3
and logic.zerg_power_rating(state) >= 5
),
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 400,
LocationType.VICTORY,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS.mission_name,
"First Ursadon Matriarch",
SC2HOTS_LOC_ID_OFFSET + 401,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS.mission_name,
"North Ursadon Matriarch",
SC2HOTS_LOC_ID_OFFSET + 402,
LocationType.VANILLA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS.mission_name,
"West Ursadon Matriarch",
SC2HOTS_LOC_ID_OFFSET + 403,
LocationType.VANILLA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS.mission_name,
"Lost Brood",
SC2HOTS_LOC_ID_OFFSET + 404,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS.mission_name,
"Northeast Psi-link Spire",
SC2HOTS_LOC_ID_OFFSET + 405,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS.mission_name,
"Northwest Psi-link Spire",
SC2HOTS_LOC_ID_OFFSET + 406,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_moderate_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS.mission_name,
"Southwest Psi-link Spire",
SC2HOTS_LOC_ID_OFFSET + 407,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS.mission_name,
"Nafash",
SC2HOTS_LOC_ID_OFFSET + 408,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_moderate_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS.mission_name,
"20 Unfrozen Structures",
SC2HOTS_LOC_ID_OFFSET + 409,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_moderate_anti_air(state)
),
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 500,
LocationType.VICTORY,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_competent_anti_air(state)
),
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"East Stasis Chamber",
SC2HOTS_LOC_ID_OFFSET + 501,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"Center Stasis Chamber",
SC2HOTS_LOC_ID_OFFSET + 502,
LocationType.VANILLA,
lambda state: logic.zerg_common_unit(state) or adv_tactics,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"West Stasis Chamber",
SC2HOTS_LOC_ID_OFFSET + 503,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"Destroy 4 Shuttles",
SC2HOTS_LOC_ID_OFFSET + 504,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_competent_anti_air(state)
),
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"Frozen Expansion",
SC2HOTS_LOC_ID_OFFSET + 505,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"Southwest Frozen Zerg",
SC2HOTS_LOC_ID_OFFSET + 506,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"Southeast Frozen Zerg",
SC2HOTS_LOC_ID_OFFSET + 507,
LocationType.EXTRA,
lambda state: logic.zerg_common_unit(state) or adv_tactics,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"West Frozen Zerg",
SC2HOTS_LOC_ID_OFFSET + 508,
LocationType.EXTRA,
logic.zerg_common_unit_competent_aa,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"East Frozen Zerg",
SC2HOTS_LOC_ID_OFFSET + 509,
LocationType.EXTRA,
logic.zerg_common_unit_competent_aa,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"West Launch Bay",
SC2HOTS_LOC_ID_OFFSET + 510,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
hard_rule=logic.zerg_any_anti_air,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"Center Launch Bay",
SC2HOTS_LOC_ID_OFFSET + 511,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
hard_rule=logic.zerg_any_anti_air,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER.mission_name,
"East Launch Bay",
SC2HOTS_LOC_ID_OFFSET + 512,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
hard_rule=logic.zerg_any_anti_air,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ENEMY_WITHIN.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 600,
LocationType.VICTORY,
lambda state: (
logic.zerg_pass_vents(state)
and (
logic.grant_story_tech == GrantStoryTech.option_grant
or state.has_any(
{
item_names.ZERGLING_RAPTOR_STRAIN,
item_names.ROACH,
item_names.HYDRALISK,
item_names.INFESTOR,
},
player,
)
)
),
hard_rule=logic.zerg_pass_vents,
),
make_location_data(
SC2Mission.ENEMY_WITHIN.mission_name,
"Infest Giant Ursadon",
SC2HOTS_LOC_ID_OFFSET + 601,
LocationType.VANILLA,
logic.zerg_pass_vents,
hard_rule=logic.zerg_pass_vents,
),
make_location_data(
SC2Mission.ENEMY_WITHIN.mission_name,
"First Niadra Evolution",
SC2HOTS_LOC_ID_OFFSET + 602,
LocationType.VANILLA,
logic.zerg_pass_vents,
),
make_location_data(
SC2Mission.ENEMY_WITHIN.mission_name,
"Second Niadra Evolution",
SC2HOTS_LOC_ID_OFFSET + 603,
LocationType.VANILLA,
logic.zerg_pass_vents,
hard_rule=logic.zerg_pass_vents,
),
make_location_data(
SC2Mission.ENEMY_WITHIN.mission_name,
"Third Niadra Evolution",
SC2HOTS_LOC_ID_OFFSET + 604,
LocationType.VANILLA,
logic.zerg_pass_vents,
hard_rule=logic.zerg_pass_vents,
),
make_location_data(
SC2Mission.ENEMY_WITHIN.mission_name,
"Warp Drive",
SC2HOTS_LOC_ID_OFFSET + 605,
LocationType.EXTRA,
logic.zerg_pass_vents,
hard_rule=logic.zerg_pass_vents,
),
make_location_data(
SC2Mission.ENEMY_WITHIN.mission_name,
"Stasis Quadrant",
SC2HOTS_LOC_ID_OFFSET + 606,
LocationType.EXTRA,
logic.zerg_pass_vents,
hard_rule=logic.zerg_pass_vents,
),
make_location_data(
SC2Mission.DOMINATION.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 700,
LocationType.VICTORY,
logic.zerg_common_unit_basic_aa,
),
make_location_data(
SC2Mission.DOMINATION.mission_name,
"Center Infested Command Center",
SC2HOTS_LOC_ID_OFFSET + 701,
LocationType.VANILLA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.DOMINATION.mission_name,
"North Infested Command Center",
SC2HOTS_LOC_ID_OFFSET + 702,
LocationType.VANILLA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.DOMINATION.mission_name,
"Repel Zagara",
SC2HOTS_LOC_ID_OFFSET + 703,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.DOMINATION.mission_name,
"Close Baneling Nest",
SC2HOTS_LOC_ID_OFFSET + 704,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.DOMINATION.mission_name,
"South Baneling Nest",
SC2HOTS_LOC_ID_OFFSET + 705,
LocationType.EXTRA,
lambda state: adv_tactics or logic.zerg_common_unit(state),
),
make_location_data(
SC2Mission.DOMINATION.mission_name,
"Southwest Baneling Nest",
SC2HOTS_LOC_ID_OFFSET + 706,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.DOMINATION.mission_name,
"Southeast Baneling Nest",
SC2HOTS_LOC_ID_OFFSET + 707,
LocationType.EXTRA,
logic.zerg_common_unit_basic_aa,
),
make_location_data(
SC2Mission.DOMINATION.mission_name,
"North Baneling Nest",
SC2HOTS_LOC_ID_OFFSET + 708,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.DOMINATION.mission_name,
"Northeast Baneling Nest",
SC2HOTS_LOC_ID_OFFSET + 709,
LocationType.EXTRA,
logic.zerg_common_unit_basic_aa,
),
make_location_data(
SC2Mission.DOMINATION.mission_name,
"Win Without 100 Eggs",
SC2HOTS_LOC_ID_OFFSET + 710,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 800,
LocationType.VICTORY,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state)
and logic.spread_creep(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"West Biomass",
SC2HOTS_LOC_ID_OFFSET + 801,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"North Biomass",
SC2HOTS_LOC_ID_OFFSET + 802,
LocationType.VANILLA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state)
and logic.spread_creep(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"South Biomass",
SC2HOTS_LOC_ID_OFFSET + 803,
LocationType.VANILLA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state)
and logic.spread_creep(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"Destroy 3 Gorgons",
SC2HOTS_LOC_ID_OFFSET + 804,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state)
and logic.spread_creep(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"Close Zerg Rescue",
SC2HOTS_LOC_ID_OFFSET + 805,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"South Zerg Rescue",
SC2HOTS_LOC_ID_OFFSET + 806,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"North Zerg Rescue",
SC2HOTS_LOC_ID_OFFSET + 807,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state)
and logic.spread_creep(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"West Queen Rescue",
SC2HOTS_LOC_ID_OFFSET + 808,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state)
and logic.spread_creep(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"East Queen Rescue",
SC2HOTS_LOC_ID_OFFSET + 809,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state)
and logic.spread_creep(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"South Orbital Command Center",
SC2HOTS_LOC_ID_OFFSET + 810,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_competent_comp(state) and logic.zerg_moderate_anti_air(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"Northwest Orbital Command Center",
SC2HOTS_LOC_ID_OFFSET + 811,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_competent_comp(state) and logic.zerg_moderate_anti_air(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY.mission_name,
"Southeast Orbital Command Center",
SC2HOTS_LOC_ID_OFFSET + 812,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_competent_comp(state) and logic.zerg_moderate_anti_air(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.OLD_SOLDIERS.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 900,
LocationType.VICTORY,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.OLD_SOLDIERS.mission_name,
"East Science Lab",
SC2HOTS_LOC_ID_OFFSET + 901,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.OLD_SOLDIERS.mission_name,
"North Science Lab",
SC2HOTS_LOC_ID_OFFSET + 902,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.OLD_SOLDIERS.mission_name,
"Get Nuked",
SC2HOTS_LOC_ID_OFFSET + 903,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.OLD_SOLDIERS.mission_name,
"Entrance Gate",
SC2HOTS_LOC_ID_OFFSET + 904,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.OLD_SOLDIERS.mission_name,
"Citadel Gate",
SC2HOTS_LOC_ID_OFFSET + 905,
LocationType.EXTRA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.OLD_SOLDIERS.mission_name,
"South Expansion",
SC2HOTS_LOC_ID_OFFSET + 906,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.OLD_SOLDIERS.mission_name,
"Rich Mineral Expansion",
SC2HOTS_LOC_ID_OFFSET + 907,
LocationType.EXTRA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 1000,
LocationType.VICTORY,
logic.zerg_competent_comp_competent_aa,
hard_rule=logic.zerg_kerrigan_or_any_anti_air,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT.mission_name,
"Center Essence Pool",
SC2HOTS_LOC_ID_OFFSET + 1001,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT.mission_name,
"East Essence Pool",
SC2HOTS_LOC_ID_OFFSET + 1002,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state)
and (
adv_tactics
and logic.zerg_basic_anti_air(state)
or logic.zerg_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT.mission_name,
"South Essence Pool",
SC2HOTS_LOC_ID_OFFSET + 1003,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state)
and (
adv_tactics
and logic.zerg_basic_anti_air(state)
or logic.zerg_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT.mission_name,
"Finish Feeding",
SC2HOTS_LOC_ID_OFFSET + 1004,
LocationType.EXTRA,
logic.zerg_competent_comp_competent_aa,
hard_rule=logic.zerg_kerrigan_or_any_anti_air,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT.mission_name,
"South Proxy Primal Hive",
SC2HOTS_LOC_ID_OFFSET + 1005,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT.mission_name,
"East Proxy Primal Hive",
SC2HOTS_LOC_ID_OFFSET + 1006,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT.mission_name,
"South Main Primal Hive",
SC2HOTS_LOC_ID_OFFSET + 1007,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
flags=LocationFlag.BASEBUST,
hard_rule=logic.zerg_kerrigan_or_any_anti_air,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT.mission_name,
"East Main Primal Hive",
SC2HOTS_LOC_ID_OFFSET + 1008,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
flags=LocationFlag.BASEBUST,
hard_rule=logic.zerg_kerrigan_or_any_anti_air,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT.mission_name,
"Flawless",
SC2HOTS_LOC_ID_OFFSET + 1009,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
flags=LocationFlag.PREVENTATIVE,
hard_rule=logic.zerg_kerrigan_or_any_anti_air,
),
make_location_data(
SC2Mission.THE_CRUCIBLE.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 1100,
LocationType.VICTORY,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_defense_rating(state, True, True) >= 7
and logic.zerg_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE.mission_name,
"Tyrannozor",
SC2HOTS_LOC_ID_OFFSET + 1101,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_defense_rating(state, True, True) >= 7
and logic.zerg_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE.mission_name,
"Reach the Pool",
SC2HOTS_LOC_ID_OFFSET + 1102,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_CRUCIBLE.mission_name,
"15 Minutes Remaining",
SC2HOTS_LOC_ID_OFFSET + 1103,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_defense_rating(state, True, True) >= 7
and logic.zerg_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE.mission_name,
"5 Minutes Remaining",
SC2HOTS_LOC_ID_OFFSET + 1104,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_defense_rating(state, True, True) >= 7
and logic.zerg_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE.mission_name,
"Pincer Attack",
SC2HOTS_LOC_ID_OFFSET + 1105,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_defense_rating(state, True, True) >= 7
and logic.zerg_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE.mission_name,
"Yagdra Claims Brakk's Pack",
SC2HOTS_LOC_ID_OFFSET + 1106,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_defense_rating(state, True, True) >= 7
and logic.zerg_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.SUPREME.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 1200,
LocationType.VICTORY,
logic.supreme_requirement,
hard_rule=logic.supreme_requirement,
),
make_location_data(
SC2Mission.SUPREME.mission_name,
"First Relic",
SC2HOTS_LOC_ID_OFFSET + 1201,
LocationType.VANILLA,
logic.supreme_requirement,
hard_rule=logic.supreme_requirement,
),
make_location_data(
SC2Mission.SUPREME.mission_name,
"Second Relic",
SC2HOTS_LOC_ID_OFFSET + 1202,
LocationType.VANILLA,
logic.supreme_requirement,
hard_rule=logic.supreme_requirement,
),
make_location_data(
SC2Mission.SUPREME.mission_name,
"Third Relic",
SC2HOTS_LOC_ID_OFFSET + 1203,
LocationType.VANILLA,
logic.supreme_requirement,
hard_rule=logic.supreme_requirement,
),
make_location_data(
SC2Mission.SUPREME.mission_name,
"Fourth Relic",
SC2HOTS_LOC_ID_OFFSET + 1204,
LocationType.VANILLA,
logic.supreme_requirement,
hard_rule=logic.supreme_requirement,
),
make_location_data(
SC2Mission.SUPREME.mission_name,
"Yagdra",
SC2HOTS_LOC_ID_OFFSET + 1205,
LocationType.EXTRA,
logic.supreme_requirement,
hard_rule=logic.supreme_requirement,
),
make_location_data(
SC2Mission.SUPREME.mission_name,
"Kraith",
SC2HOTS_LOC_ID_OFFSET + 1206,
LocationType.EXTRA,
logic.supreme_requirement,
hard_rule=logic.supreme_requirement,
),
make_location_data(
SC2Mission.SUPREME.mission_name,
"Slivan",
SC2HOTS_LOC_ID_OFFSET + 1207,
LocationType.EXTRA,
logic.supreme_requirement,
hard_rule=logic.supreme_requirement,
),
make_location_data(
SC2Mission.INFESTED.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 1300,
LocationType.VICTORY,
lambda state: (
logic.zerg_common_unit(state)
and (
(
logic.zerg_competent_anti_air(state)
and state.has(item_names.INFESTOR, player)
)
or (adv_tactics and logic.zerg_moderate_anti_air(state))
)
),
hard_rule=logic.zerg_kerrigan_or_any_anti_air,
),
make_location_data(
SC2Mission.INFESTED.mission_name,
"East Science Facility",
SC2HOTS_LOC_ID_OFFSET + 1301,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_moderate_anti_air(state)
and logic.spread_creep(state)
),
),
make_location_data(
SC2Mission.INFESTED.mission_name,
"Center Science Facility",
SC2HOTS_LOC_ID_OFFSET + 1302,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_moderate_anti_air(state)
and logic.spread_creep(state)
),
),
make_location_data(
SC2Mission.INFESTED.mission_name,
"West Science Facility",
SC2HOTS_LOC_ID_OFFSET + 1303,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_moderate_anti_air(state)
and logic.spread_creep(state)
),
),
make_location_data(
SC2Mission.INFESTED.mission_name,
"First Intro Garrison",
SC2HOTS_LOC_ID_OFFSET + 1304,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.INFESTED.mission_name,
"Second Intro Garrison",
SC2HOTS_LOC_ID_OFFSET + 1305,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.INFESTED.mission_name,
"Base Garrison",
SC2HOTS_LOC_ID_OFFSET + 1306,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.INFESTED.mission_name,
"East Garrison",
SC2HOTS_LOC_ID_OFFSET + 1307,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_moderate_anti_air(state)
and (adv_tactics or state.has(item_names.INFESTOR, player))
),
),
make_location_data(
SC2Mission.INFESTED.mission_name,
"Mid Garrison",
SC2HOTS_LOC_ID_OFFSET + 1308,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_moderate_anti_air(state)
and (adv_tactics or state.has(item_names.INFESTOR, player))
),
),
make_location_data(
SC2Mission.INFESTED.mission_name,
"North Garrison",
SC2HOTS_LOC_ID_OFFSET + 1309,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_moderate_anti_air(state)
and (adv_tactics or state.has(item_names.INFESTOR, player))
),
),
make_location_data(
SC2Mission.INFESTED.mission_name,
"Close Southwest Garrison",
SC2HOTS_LOC_ID_OFFSET + 1310,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_moderate_anti_air(state)
and (adv_tactics or state.has(item_names.INFESTOR, player))
),
),
make_location_data(
SC2Mission.INFESTED.mission_name,
"Far Southwest Garrison",
SC2HOTS_LOC_ID_OFFSET + 1311,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_moderate_anti_air(state)
and (adv_tactics or state.has(item_names.INFESTOR, player))
),
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 1400,
LocationType.VICTORY,
logic.zerg_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS.mission_name,
"North Brutalisk",
SC2HOTS_LOC_ID_OFFSET + 1401,
LocationType.VANILLA,
logic.zerg_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS.mission_name,
"South Brutalisk",
SC2HOTS_LOC_ID_OFFSET + 1402,
LocationType.VANILLA,
logic.zerg_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS.mission_name,
"Kill 1 Hybrid",
SC2HOTS_LOC_ID_OFFSET + 1403,
LocationType.EXTRA,
logic.zerg_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS.mission_name,
"Kill 2 Hybrid",
SC2HOTS_LOC_ID_OFFSET + 1404,
LocationType.EXTRA,
logic.zerg_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS.mission_name,
"Kill 3 Hybrid",
SC2HOTS_LOC_ID_OFFSET + 1405,
LocationType.EXTRA,
logic.zerg_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS.mission_name,
"Kill 4 Hybrid",
SC2HOTS_LOC_ID_OFFSET + 1406,
LocationType.EXTRA,
logic.zerg_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS.mission_name,
"Kill 5 Hybrid",
SC2HOTS_LOC_ID_OFFSET + 1407,
LocationType.EXTRA,
logic.zerg_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS.mission_name,
"Kill 6 Hybrid",
SC2HOTS_LOC_ID_OFFSET + 1408,
LocationType.EXTRA,
logic.zerg_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS.mission_name,
"Kill 7 Hybrid",
SC2HOTS_LOC_ID_OFFSET + 1409,
LocationType.EXTRA,
logic.zerg_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 1500,
LocationType.VICTORY,
lambda state: (
logic.zerg_competent_comp(state)
and (
logic.zerg_competent_anti_air(state)
or (adv_tactics and logic.zerg_moderate_anti_air(state))
)
),
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID.mission_name,
"Northwest Crystal",
SC2HOTS_LOC_ID_OFFSET + 1501,
LocationType.VANILLA,
lambda state: (
logic.zerg_competent_comp(state)
and (
logic.zerg_competent_anti_air(state)
or (adv_tactics and logic.zerg_moderate_anti_air(state))
)
),
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID.mission_name,
"Northeast Crystal",
SC2HOTS_LOC_ID_OFFSET + 1502,
LocationType.VANILLA,
lambda state: (
logic.zerg_competent_comp(state)
and (
logic.zerg_competent_anti_air(state)
or (adv_tactics and logic.zerg_moderate_anti_air(state))
)
),
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID.mission_name,
"South Crystal",
SC2HOTS_LOC_ID_OFFSET + 1503,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID.mission_name,
"Base Established",
SC2HOTS_LOC_ID_OFFSET + 1504,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID.mission_name,
"Close Temple",
SC2HOTS_LOC_ID_OFFSET + 1505,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and (
logic.zerg_competent_anti_air(state)
or (adv_tactics and logic.zerg_moderate_anti_air(state))
)
),
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID.mission_name,
"Mid Temple",
SC2HOTS_LOC_ID_OFFSET + 1506,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and (
logic.zerg_competent_anti_air(state)
or (adv_tactics and logic.zerg_moderate_anti_air(state))
)
),
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID.mission_name,
"Southeast Temple",
SC2HOTS_LOC_ID_OFFSET + 1507,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and (
logic.zerg_competent_anti_air(state)
or (adv_tactics and logic.zerg_moderate_anti_air(state))
)
),
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID.mission_name,
"Northeast Temple",
SC2HOTS_LOC_ID_OFFSET + 1508,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and (
logic.zerg_competent_anti_air(state)
or (adv_tactics and logic.zerg_moderate_anti_air(state))
)
),
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID.mission_name,
"Northwest Temple",
SC2HOTS_LOC_ID_OFFSET + 1509,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and (
logic.zerg_competent_anti_air(state)
or (adv_tactics and logic.zerg_moderate_anti_air(state))
)
),
),
make_location_data(
SC2Mission.WITH_FRIENDS_LIKE_THESE.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 1600,
LocationType.VICTORY,
),
make_location_data(
SC2Mission.WITH_FRIENDS_LIKE_THESE.mission_name,
"Pirate Capital Ship",
SC2HOTS_LOC_ID_OFFSET + 1601,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.WITH_FRIENDS_LIKE_THESE.mission_name,
"First Mineral Patch",
SC2HOTS_LOC_ID_OFFSET + 1602,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.WITH_FRIENDS_LIKE_THESE.mission_name,
"Second Mineral Patch",
SC2HOTS_LOC_ID_OFFSET + 1603,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.WITH_FRIENDS_LIKE_THESE.mission_name,
"Third Mineral Patch",
SC2HOTS_LOC_ID_OFFSET + 1604,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.CONVICTION.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 1700,
LocationType.VICTORY,
lambda state: (
kerriganless
or (
logic.two_kerrigan_actives(state)
and logic.basic_kerrigan(state)
and logic.kerrigan_levels(state, 25)
)
),
),
make_location_data(
SC2Mission.CONVICTION.mission_name,
"First Secret Documents",
SC2HOTS_LOC_ID_OFFSET + 1701,
LocationType.VANILLA,
lambda state: (
logic.two_kerrigan_actives(state) and logic.kerrigan_levels(state, 25)
)
or kerriganless,
),
make_location_data(
SC2Mission.CONVICTION.mission_name,
"Second Secret Documents",
SC2HOTS_LOC_ID_OFFSET + 1702,
LocationType.VANILLA,
lambda state: (
kerriganless
or (
logic.two_kerrigan_actives(state)
and logic.basic_kerrigan(state)
and logic.kerrigan_levels(state, 25)
)
),
),
make_location_data(
SC2Mission.CONVICTION.mission_name,
"Power Coupling",
SC2HOTS_LOC_ID_OFFSET + 1703,
LocationType.EXTRA,
lambda state: (
logic.two_kerrigan_actives(state) and logic.kerrigan_levels(state, 25)
)
or kerriganless,
),
make_location_data(
SC2Mission.CONVICTION.mission_name,
"Door Blasted",
SC2HOTS_LOC_ID_OFFSET + 1704,
LocationType.EXTRA,
lambda state: (
logic.two_kerrigan_actives(state) and logic.kerrigan_levels(state, 25)
)
or kerriganless,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 1800,
LocationType.VICTORY,
logic.zerg_planetfall_requirement,
hard_rule=logic.zerg_kerrigan_or_any_anti_air,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"East Gate",
SC2HOTS_LOC_ID_OFFSET + 1801,
LocationType.VANILLA,
logic.zerg_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"Northwest Gate",
SC2HOTS_LOC_ID_OFFSET + 1802,
LocationType.VANILLA,
logic.zerg_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"North Gate",
SC2HOTS_LOC_ID_OFFSET + 1803,
LocationType.VANILLA,
logic.zerg_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"1 Bile Launcher Deployed",
SC2HOTS_LOC_ID_OFFSET + 1804,
LocationType.EXTRA,
logic.zerg_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"2 Bile Launchers Deployed",
SC2HOTS_LOC_ID_OFFSET + 1805,
LocationType.EXTRA,
logic.zerg_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"3 Bile Launchers Deployed",
SC2HOTS_LOC_ID_OFFSET + 1806,
LocationType.EXTRA,
logic.zerg_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"4 Bile Launchers Deployed",
SC2HOTS_LOC_ID_OFFSET + 1807,
LocationType.EXTRA,
logic.zerg_planetfall_requirement,
hard_rule=logic.zerg_kerrigan_or_any_anti_air,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"5 Bile Launchers Deployed",
SC2HOTS_LOC_ID_OFFSET + 1808,
LocationType.EXTRA,
logic.zerg_planetfall_requirement,
hard_rule=logic.zerg_kerrigan_or_any_anti_air,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"Sons of Korhal",
SC2HOTS_LOC_ID_OFFSET + 1809,
LocationType.EXTRA,
logic.zerg_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"Night Wolves",
SC2HOTS_LOC_ID_OFFSET + 1810,
LocationType.EXTRA,
logic.zerg_planetfall_requirement,
hard_rule=logic.zerg_kerrigan_or_any_anti_air,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"West Expansion",
SC2HOTS_LOC_ID_OFFSET + 1811,
LocationType.EXTRA,
logic.zerg_planetfall_requirement,
hard_rule=logic.zerg_kerrigan_or_any_anti_air,
),
make_location_data(
SC2Mission.PLANETFALL.mission_name,
"Mid Expansion",
SC2HOTS_LOC_ID_OFFSET + 1812,
LocationType.EXTRA,
logic.zerg_planetfall_requirement,
hard_rule=logic.zerg_kerrigan_or_any_anti_air,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 1900,
LocationType.VICTORY,
lambda state: logic.zerg_competent_comp_competent_aa(state)
and (adv_tactics or logic.zerg_base_buster(state)),
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE.mission_name,
"First Power Link",
SC2HOTS_LOC_ID_OFFSET + 1901,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE.mission_name,
"Second Power Link",
SC2HOTS_LOC_ID_OFFSET + 1902,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE.mission_name,
"Third Power Link",
SC2HOTS_LOC_ID_OFFSET + 1903,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE.mission_name,
"Expansion Command Center",
SC2HOTS_LOC_ID_OFFSET + 1904,
LocationType.EXTRA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE.mission_name,
"Main Path Command Center",
SC2HOTS_LOC_ID_OFFSET + 1905,
LocationType.EXTRA,
lambda state: logic.zerg_competent_comp_competent_aa(state)
and (adv_tactics or logic.zerg_base_buster(state)),
),
make_location_data(
SC2Mission.THE_RECKONING.mission_name,
"Victory",
SC2HOTS_LOC_ID_OFFSET + 2000,
LocationType.VICTORY,
logic.zerg_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING.mission_name,
"South Lane",
SC2HOTS_LOC_ID_OFFSET + 2001,
LocationType.VANILLA,
logic.zerg_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING.mission_name,
"North Lane",
SC2HOTS_LOC_ID_OFFSET + 2002,
LocationType.VANILLA,
logic.zerg_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING.mission_name,
"East Lane",
SC2HOTS_LOC_ID_OFFSET + 2003,
LocationType.VANILLA,
logic.zerg_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING.mission_name,
"Odin",
SC2HOTS_LOC_ID_OFFSET + 2004,
LocationType.EXTRA,
logic.zerg_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING.mission_name,
"Trash the Odin Early",
SC2HOTS_LOC_ID_OFFSET + 2005,
LocationType.MASTERY,
lambda state: (
logic.zerg_the_reckoning_requirement(state)
and (
kerriganless
or (
logic.kerrigan_levels(state, 50, False)
and state.has_any(kerrigan_logic_ultimates, player)
)
)
and logic.zerg_power_rating(state) >= 10
),
flags=LocationFlag.SPEEDRUN,
),
# LotV Prologue
make_location_data(
SC2Mission.DARK_WHISPERS.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 100,
LocationType.VICTORY,
logic.protoss_common_unit_basic_aa,
),
make_location_data(
SC2Mission.DARK_WHISPERS.mission_name,
"First Prisoner Group",
SC2LOTV_LOC_ID_OFFSET + 101,
LocationType.VANILLA,
logic.protoss_common_unit_basic_aa,
),
make_location_data(
SC2Mission.DARK_WHISPERS.mission_name,
"Second Prisoner Group",
SC2LOTV_LOC_ID_OFFSET + 102,
LocationType.VANILLA,
logic.protoss_common_unit_basic_aa,
),
make_location_data(
SC2Mission.DARK_WHISPERS.mission_name,
"First Pylon",
SC2LOTV_LOC_ID_OFFSET + 103,
LocationType.VANILLA,
logic.protoss_common_unit_basic_aa,
),
make_location_data(
SC2Mission.DARK_WHISPERS.mission_name,
"Second Pylon",
SC2LOTV_LOC_ID_OFFSET + 104,
LocationType.VANILLA,
logic.protoss_common_unit_basic_aa,
),
make_location_data(
SC2Mission.DARK_WHISPERS.mission_name,
"Zerg Base",
SC2LOTV_LOC_ID_OFFSET + 105,
LocationType.MASTERY,
lambda state: logic.protoss_deathball(state)
and logic.protoss_power_rating(state) >= 6,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.GHOSTS_IN_THE_FOG.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 200,
LocationType.VICTORY,
lambda state: logic.protoss_competent_comp(state)
and logic.protoss_mineral_dump(state),
),
make_location_data(
SC2Mission.GHOSTS_IN_THE_FOG.mission_name,
"South Rock Formation",
SC2LOTV_LOC_ID_OFFSET + 201,
LocationType.VANILLA,
lambda state: logic.protoss_competent_comp(state)
and logic.protoss_mineral_dump(state),
),
make_location_data(
SC2Mission.GHOSTS_IN_THE_FOG.mission_name,
"West Rock Formation",
SC2LOTV_LOC_ID_OFFSET + 202,
LocationType.VANILLA,
lambda state: logic.protoss_competent_comp(state)
and logic.protoss_mineral_dump(state),
),
make_location_data(
SC2Mission.GHOSTS_IN_THE_FOG.mission_name,
"East Rock Formation",
SC2LOTV_LOC_ID_OFFSET + 203,
LocationType.VANILLA,
lambda state: (
logic.protoss_competent_comp(state)
and logic.protoss_mineral_dump(state)
and logic.protoss_can_attack_behind_chasm(state)
),
),
make_location_data(
SC2Mission.EVIL_AWOKEN.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 300,
LocationType.VICTORY,
lambda state: adv_tactics
or state.has_any((
item_names.STALKER_PHASE_REACTOR,
item_names.STALKER_INSTIGATOR_SLAYER_DISINTEGRATING_PARTICLES,
item_names.STALKER_INSTIGATOR_SLAYER_PARTICLE_REFLECTION,
), player),
),
make_location_data(
SC2Mission.EVIL_AWOKEN.mission_name,
"Temple Investigated",
SC2LOTV_LOC_ID_OFFSET + 301,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.EVIL_AWOKEN.mission_name,
"Void Catalyst",
SC2LOTV_LOC_ID_OFFSET + 302,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.EVIL_AWOKEN.mission_name,
"First Particle Cannon",
SC2LOTV_LOC_ID_OFFSET + 303,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.EVIL_AWOKEN.mission_name,
"Second Particle Cannon",
SC2LOTV_LOC_ID_OFFSET + 304,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.EVIL_AWOKEN.mission_name,
"Third Particle Cannon",
SC2LOTV_LOC_ID_OFFSET + 305,
LocationType.VANILLA,
),
# LotV
make_location_data(
SC2Mission.FOR_AIUR.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 400,
LocationType.VICTORY,
),
make_location_data(
SC2Mission.FOR_AIUR.mission_name,
"Southwest Hive",
SC2LOTV_LOC_ID_OFFSET + 401,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.FOR_AIUR.mission_name,
"Northwest Hive",
SC2LOTV_LOC_ID_OFFSET + 402,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.FOR_AIUR.mission_name,
"Northeast Hive",
SC2LOTV_LOC_ID_OFFSET + 403,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.FOR_AIUR.mission_name,
"East Hive",
SC2LOTV_LOC_ID_OFFSET + 404,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.FOR_AIUR.mission_name,
"West Conduit",
SC2LOTV_LOC_ID_OFFSET + 405,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.FOR_AIUR.mission_name,
"Middle Conduit",
SC2LOTV_LOC_ID_OFFSET + 406,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.FOR_AIUR.mission_name,
"Northeast Conduit",
SC2LOTV_LOC_ID_OFFSET + 407,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 500,
LocationType.VICTORY,
lambda state: logic.protoss_common_unit(state)
and (adv_tactics or logic.protoss_moderate_anti_air(state)),
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW.mission_name,
"Close Pylon",
SC2LOTV_LOC_ID_OFFSET + 501,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW.mission_name,
"East Pylon",
SC2LOTV_LOC_ID_OFFSET + 502,
LocationType.VANILLA,
lambda state: logic.protoss_common_unit(state)
and (adv_tactics or logic.protoss_moderate_anti_air(state)),
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW.mission_name,
"West Pylon",
SC2LOTV_LOC_ID_OFFSET + 503,
LocationType.VANILLA,
lambda state: logic.protoss_common_unit(state)
and (adv_tactics or logic.protoss_moderate_anti_air(state)),
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW.mission_name,
"Nexus",
SC2LOTV_LOC_ID_OFFSET + 504,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW.mission_name,
"Templar Base",
SC2LOTV_LOC_ID_OFFSET + 505,
LocationType.EXTRA,
lambda state: logic.protoss_common_unit(state)
and (adv_tactics or logic.protoss_moderate_anti_air(state)),
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 600,
LocationType.VICTORY,
logic.protoss_spear_of_adun_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN.mission_name,
"Close Warp Gate",
SC2LOTV_LOC_ID_OFFSET + 601,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN.mission_name,
"West Warp Gate",
SC2LOTV_LOC_ID_OFFSET + 602,
LocationType.VANILLA,
logic.protoss_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN.mission_name,
"North Warp Gate",
SC2LOTV_LOC_ID_OFFSET + 603,
LocationType.VANILLA,
logic.protoss_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN.mission_name,
"North Power Cell",
SC2LOTV_LOC_ID_OFFSET + 604,
LocationType.EXTRA,
logic.protoss_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN.mission_name,
"East Power Cell",
SC2LOTV_LOC_ID_OFFSET + 605,
LocationType.EXTRA,
logic.protoss_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN.mission_name,
"South Power Cell",
SC2LOTV_LOC_ID_OFFSET + 606,
LocationType.EXTRA,
logic.protoss_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN.mission_name,
"Southeast Power Cell",
SC2LOTV_LOC_ID_OFFSET + 607,
LocationType.EXTRA,
logic.protoss_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 700,
LocationType.VICTORY,
logic.protoss_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD.mission_name,
"Mid EMP Scrambler",
SC2LOTV_LOC_ID_OFFSET + 701,
LocationType.VANILLA,
logic.protoss_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD.mission_name,
"Southeast EMP Scrambler",
SC2LOTV_LOC_ID_OFFSET + 702,
LocationType.VANILLA,
logic.protoss_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD.mission_name,
"North EMP Scrambler",
SC2LOTV_LOC_ID_OFFSET + 703,
LocationType.VANILLA,
logic.protoss_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD.mission_name,
"Mid Stabilizer",
SC2LOTV_LOC_ID_OFFSET + 704,
LocationType.EXTRA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.SKY_SHIELD.mission_name,
"Southwest Stabilizer",
SC2LOTV_LOC_ID_OFFSET + 705,
LocationType.EXTRA,
logic.protoss_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD.mission_name,
"Northwest Stabilizer",
SC2LOTV_LOC_ID_OFFSET + 706,
LocationType.EXTRA,
logic.protoss_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD.mission_name,
"Northeast Stabilizer",
SC2LOTV_LOC_ID_OFFSET + 707,
LocationType.EXTRA,
logic.protoss_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD.mission_name,
"Southeast Stabilizer",
SC2LOTV_LOC_ID_OFFSET + 708,
LocationType.EXTRA,
logic.protoss_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD.mission_name,
"West Raynor Base",
SC2LOTV_LOC_ID_OFFSET + 709,
LocationType.EXTRA,
logic.protoss_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD.mission_name,
"East Raynor Base",
SC2LOTV_LOC_ID_OFFSET + 710,
LocationType.EXTRA,
logic.protoss_sky_shield_requirement,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 800,
LocationType.VICTORY,
logic.protoss_brothers_in_arms_requirement,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS.mission_name,
"Mid Science Facility",
SC2LOTV_LOC_ID_OFFSET + 801,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS.mission_name,
"North Science Facility",
SC2LOTV_LOC_ID_OFFSET + 802,
LocationType.VANILLA,
lambda state: (
logic.protoss_brothers_in_arms_requirement(state)
or (
logic.take_over_ai_allies
and logic.advanced_tactics
and (
logic.terran_common_unit(state)
or logic.protoss_common_unit(state)
)
)
),
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS.mission_name,
"South Science Facility",
SC2LOTV_LOC_ID_OFFSET + 803,
LocationType.VANILLA,
logic.protoss_brothers_in_arms_requirement,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS.mission_name,
"Raynor Forward Positions",
SC2LOTV_LOC_ID_OFFSET + 804,
LocationType.EXTRA,
logic.protoss_brothers_in_arms_requirement,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS.mission_name,
"Valerian Forward Positions",
SC2LOTV_LOC_ID_OFFSET + 805,
LocationType.EXTRA,
logic.protoss_brothers_in_arms_requirement,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS.mission_name,
"Win in under 15 minutes",
SC2LOTV_LOC_ID_OFFSET + 806,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_brothers_in_arms_requirement(state)
and logic.protoss_deathball(state)
and logic.protoss_power_rating(state) >= 8
),
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.AMON_S_REACH.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 900,
LocationType.VICTORY,
logic.protoss_common_unit_anti_light_air,
),
make_location_data(
SC2Mission.AMON_S_REACH.mission_name,
"Close Solarite Reserve",
SC2LOTV_LOC_ID_OFFSET + 901,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.AMON_S_REACH.mission_name,
"North Solarite Reserve",
SC2LOTV_LOC_ID_OFFSET + 902,
LocationType.VANILLA,
logic.protoss_common_unit_anti_light_air,
),
make_location_data(
SC2Mission.AMON_S_REACH.mission_name,
"East Solarite Reserve",
SC2LOTV_LOC_ID_OFFSET + 903,
LocationType.VANILLA,
logic.protoss_common_unit_anti_light_air,
),
make_location_data(
SC2Mission.AMON_S_REACH.mission_name,
"West Launch Bay",
SC2LOTV_LOC_ID_OFFSET + 904,
LocationType.EXTRA,
logic.protoss_common_unit_anti_light_air,
),
make_location_data(
SC2Mission.AMON_S_REACH.mission_name,
"South Launch Bay",
SC2LOTV_LOC_ID_OFFSET + 905,
LocationType.EXTRA,
logic.protoss_common_unit_anti_light_air,
),
make_location_data(
SC2Mission.AMON_S_REACH.mission_name,
"Northwest Launch Bay",
SC2LOTV_LOC_ID_OFFSET + 906,
LocationType.EXTRA,
logic.protoss_common_unit_anti_light_air,
),
make_location_data(
SC2Mission.AMON_S_REACH.mission_name,
"East Launch Bay",
SC2LOTV_LOC_ID_OFFSET + 907,
LocationType.EXTRA,
logic.protoss_common_unit_anti_light_air,
),
make_location_data(
SC2Mission.LAST_STAND.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 1000,
LocationType.VICTORY,
logic.protoss_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND.mission_name,
"West Zenith Stone",
SC2LOTV_LOC_ID_OFFSET + 1001,
LocationType.VANILLA,
logic.protoss_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND.mission_name,
"North Zenith Stone",
SC2LOTV_LOC_ID_OFFSET + 1002,
LocationType.VANILLA,
logic.protoss_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND.mission_name,
"East Zenith Stone",
SC2LOTV_LOC_ID_OFFSET + 1003,
LocationType.VANILLA,
logic.protoss_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND.mission_name,
"1 Billion Zerg",
SC2LOTV_LOC_ID_OFFSET + 1004,
LocationType.EXTRA,
logic.protoss_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND.mission_name,
"1.5 Billion Zerg",
SC2LOTV_LOC_ID_OFFSET + 1005,
LocationType.VANILLA,
lambda state: (
logic.protoss_last_stand_requirement(state)
and (
state.has_all(
{
item_names.KHAYDARIN_MONOLITH,
item_names.PHOTON_CANNON,
item_names.SHIELD_BATTERY,
},
player,
)
or state.has_any(
{item_names.SOA_SOLAR_LANCE, item_names.SOA_DEPLOY_FENIX},
player,
)
)
and logic.protoss_defense_rating(state, False) >= 13
),
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 1100,
LocationType.VICTORY,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON.mission_name,
"South Solarite",
SC2LOTV_LOC_ID_OFFSET + 1101,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON.mission_name,
"North Solarite",
SC2LOTV_LOC_ID_OFFSET + 1102,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON.mission_name,
"Northwest Solarite",
SC2LOTV_LOC_ID_OFFSET + 1103,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON.mission_name,
"Rescue Sentries",
SC2LOTV_LOC_ID_OFFSET + 1104,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON.mission_name,
"Destroy Gateways",
SC2LOTV_LOC_ID_OFFSET + 1105,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 1200,
LocationType.VICTORY,
logic.protoss_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION.mission_name,
"Mid Celestial Lock",
SC2LOTV_LOC_ID_OFFSET + 1201,
LocationType.EXTRA,
logic.protoss_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION.mission_name,
"West Celestial Lock",
SC2LOTV_LOC_ID_OFFSET + 1202,
LocationType.EXTRA,
logic.protoss_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION.mission_name,
"South Celestial Lock",
SC2LOTV_LOC_ID_OFFSET + 1203,
LocationType.EXTRA,
logic.protoss_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION.mission_name,
"East Celestial Lock",
SC2LOTV_LOC_ID_OFFSET + 1204,
LocationType.EXTRA,
logic.protoss_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION.mission_name,
"North Celestial Lock",
SC2LOTV_LOC_ID_OFFSET + 1205,
LocationType.EXTRA,
logic.protoss_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION.mission_name,
"Titanic Warp Prism",
SC2LOTV_LOC_ID_OFFSET + 1206,
LocationType.VANILLA,
logic.protoss_temple_of_unification_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION.mission_name,
"Terran Main Base",
SC2LOTV_LOC_ID_OFFSET + 1207,
LocationType.MASTERY,
lambda state: logic.protoss_temple_of_unification_requirement(state)
and logic.protoss_deathball(state),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION.mission_name,
"Protoss Main Base",
SC2LOTV_LOC_ID_OFFSET + 1208,
LocationType.MASTERY,
lambda state: logic.protoss_temple_of_unification_requirement(state)
and logic.protoss_deathball(state),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.THE_INFINITE_CYCLE.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 1300,
LocationType.VICTORY,
logic.the_infinite_cycle_requirement,
),
make_location_data(
SC2Mission.THE_INFINITE_CYCLE.mission_name,
"First Hall of Revelation",
SC2LOTV_LOC_ID_OFFSET + 1301,
LocationType.EXTRA,
logic.the_infinite_cycle_requirement,
),
make_location_data(
SC2Mission.THE_INFINITE_CYCLE.mission_name,
"Second Hall of Revelation",
SC2LOTV_LOC_ID_OFFSET + 1302,
LocationType.EXTRA,
logic.the_infinite_cycle_requirement,
),
make_location_data(
SC2Mission.THE_INFINITE_CYCLE.mission_name,
"First Xel'Naga Device",
SC2LOTV_LOC_ID_OFFSET + 1303,
LocationType.VANILLA,
logic.the_infinite_cycle_requirement,
),
make_location_data(
SC2Mission.THE_INFINITE_CYCLE.mission_name,
"Second Xel'Naga Device",
SC2LOTV_LOC_ID_OFFSET + 1304,
LocationType.VANILLA,
logic.the_infinite_cycle_requirement,
),
make_location_data(
SC2Mission.THE_INFINITE_CYCLE.mission_name,
"Third Xel'Naga Device",
SC2LOTV_LOC_ID_OFFSET + 1305,
LocationType.VANILLA,
logic.the_infinite_cycle_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 1400,
LocationType.VICTORY,
logic.protoss_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION.mission_name,
"Artanis",
SC2LOTV_LOC_ID_OFFSET + 1401,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION.mission_name,
"Northwest Void Crystal",
SC2LOTV_LOC_ID_OFFSET + 1402,
LocationType.EXTRA,
logic.protoss_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION.mission_name,
"Northeast Void Crystal",
SC2LOTV_LOC_ID_OFFSET + 1403,
LocationType.EXTRA,
logic.protoss_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION.mission_name,
"Southwest Void Crystal",
SC2LOTV_LOC_ID_OFFSET + 1404,
LocationType.EXTRA,
logic.protoss_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION.mission_name,
"Southeast Void Crystal",
SC2LOTV_LOC_ID_OFFSET + 1405,
LocationType.EXTRA,
logic.protoss_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION.mission_name,
"South Xel'Naga Vessel",
SC2LOTV_LOC_ID_OFFSET + 1406,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION.mission_name,
"Mid Xel'Naga Vessel",
SC2LOTV_LOC_ID_OFFSET + 1407,
LocationType.VANILLA,
logic.protoss_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION.mission_name,
"North Xel'Naga Vessel",
SC2LOTV_LOC_ID_OFFSET + 1408,
LocationType.VANILLA,
logic.protoss_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 1500,
LocationType.VICTORY,
lambda state: (
logic.protoss_deathball(state)
and logic.protoss_power_rating(state) >= 6
),
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST.mission_name,
"Zerg Cleared",
SC2LOTV_LOC_ID_OFFSET + 1501,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST.mission_name,
"First Stasis Lock",
SC2LOTV_LOC_ID_OFFSET + 1502,
LocationType.EXTRA,
lambda state: (
logic.protoss_deathball(state)
and logic.protoss_power_rating(state) >= 6
),
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST.mission_name,
"Second Stasis Lock",
SC2LOTV_LOC_ID_OFFSET + 1503,
LocationType.EXTRA,
lambda state: (
logic.protoss_deathball(state)
and logic.protoss_power_rating(state) >= 6
),
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST.mission_name,
"Third Stasis Lock",
SC2LOTV_LOC_ID_OFFSET + 1504,
LocationType.EXTRA,
lambda state: (
logic.protoss_deathball(state)
and logic.protoss_power_rating(state) >= 6
),
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST.mission_name,
"Fourth Stasis Lock",
SC2LOTV_LOC_ID_OFFSET + 1505,
LocationType.EXTRA,
lambda state: (
logic.protoss_deathball(state)
and logic.protoss_power_rating(state) >= 6
),
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST.mission_name,
"South Power Core",
SC2LOTV_LOC_ID_OFFSET + 1506,
LocationType.VANILLA,
lambda state: (
logic.protoss_deathball(state)
and logic.protoss_power_rating(state) >= 6
and (adv_tactics or logic.protoss_unsealing_the_past_ledge_requirement(state))
),
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST.mission_name,
"East Power Core",
SC2LOTV_LOC_ID_OFFSET + 1507,
LocationType.VANILLA,
lambda state: (
logic.protoss_deathball(state)
and logic.protoss_power_rating(state) >= 6
and (adv_tactics or logic.protoss_unsealing_the_past_ledge_requirement(state))
),
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 1600,
LocationType.VICTORY,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"North Sector: West Null Circuit",
SC2LOTV_LOC_ID_OFFSET + 1601,
LocationType.VANILLA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"North Sector: Northeast Null Circuit",
SC2LOTV_LOC_ID_OFFSET + 1602,
LocationType.EXTRA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"North Sector: Southeast Null Circuit",
SC2LOTV_LOC_ID_OFFSET + 1603,
LocationType.EXTRA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"South Sector: West Null Circuit",
SC2LOTV_LOC_ID_OFFSET + 1604,
LocationType.VANILLA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"South Sector: North Null Circuit",
SC2LOTV_LOC_ID_OFFSET + 1605,
LocationType.EXTRA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"South Sector: East Null Circuit",
SC2LOTV_LOC_ID_OFFSET + 1606,
LocationType.EXTRA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"West Sector: West Null Circuit",
SC2LOTV_LOC_ID_OFFSET + 1607,
LocationType.VANILLA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"West Sector: Mid Null Circuit",
SC2LOTV_LOC_ID_OFFSET + 1608,
LocationType.EXTRA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"West Sector: East Null Circuit",
SC2LOTV_LOC_ID_OFFSET + 1609,
LocationType.EXTRA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"East Sector: North Null Circuit",
SC2LOTV_LOC_ID_OFFSET + 1610,
LocationType.VANILLA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"East Sector: West Null Circuit",
SC2LOTV_LOC_ID_OFFSET + 1611,
LocationType.EXTRA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"East Sector: South Null Circuit",
SC2LOTV_LOC_ID_OFFSET + 1612,
LocationType.EXTRA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.PURIFICATION.mission_name,
"Purifier Warden",
SC2LOTV_LOC_ID_OFFSET + 1613,
LocationType.VANILLA,
logic.protoss_deathball,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 1700,
LocationType.VICTORY,
logic.protoss_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE.mission_name,
"First Terrazine Fog",
SC2LOTV_LOC_ID_OFFSET + 1701,
LocationType.EXTRA,
logic.protoss_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE.mission_name,
"Southwest Guardian",
SC2LOTV_LOC_ID_OFFSET + 1702,
LocationType.EXTRA,
logic.protoss_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE.mission_name,
"West Guardian",
SC2LOTV_LOC_ID_OFFSET + 1703,
LocationType.EXTRA,
logic.protoss_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE.mission_name,
"Northwest Guardian",
SC2LOTV_LOC_ID_OFFSET + 1704,
LocationType.EXTRA,
logic.protoss_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE.mission_name,
"Northeast Guardian",
SC2LOTV_LOC_ID_OFFSET + 1705,
LocationType.EXTRA,
logic.protoss_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE.mission_name,
"North Mothership",
SC2LOTV_LOC_ID_OFFSET + 1706,
LocationType.VANILLA,
logic.protoss_steps_of_the_rite_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE.mission_name,
"South Mothership",
SC2LOTV_LOC_ID_OFFSET + 1707,
LocationType.VANILLA,
logic.protoss_steps_of_the_rite_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa,
),
make_location_data(
SC2Mission.RAK_SHIR.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 1800,
LocationType.VICTORY,
logic.protoss_rak_shir_requirement,
),
make_location_data(
SC2Mission.RAK_SHIR.mission_name,
"North Slayn Elemental",
SC2LOTV_LOC_ID_OFFSET + 1801,
LocationType.VANILLA,
logic.protoss_rak_shir_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa,
),
make_location_data(
SC2Mission.RAK_SHIR.mission_name,
"Southwest Slayn Elemental",
SC2LOTV_LOC_ID_OFFSET + 1802,
LocationType.VANILLA,
logic.protoss_rak_shir_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa,
),
make_location_data(
SC2Mission.RAK_SHIR.mission_name,
"East Slayn Elemental",
SC2LOTV_LOC_ID_OFFSET + 1803,
LocationType.VANILLA,
logic.protoss_rak_shir_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa,
),
make_location_data(
SC2Mission.RAK_SHIR.mission_name,
"Resource Pickups",
SC2LOTV_LOC_ID_OFFSET + 1804,
LocationType.EXTRA,
logic.protoss_rak_shir_requirement,
),
make_location_data(
SC2Mission.RAK_SHIR.mission_name,
"Destroy Nexuses",
SC2LOTV_LOC_ID_OFFSET + 1805,
LocationType.CHALLENGE,
logic.protoss_rak_shir_requirement,
),
make_location_data(
SC2Mission.RAK_SHIR.mission_name,
"Win in under 15 minutes",
SC2LOTV_LOC_ID_OFFSET + 1806,
LocationType.MASTERY,
logic.protoss_rak_shir_requirement,
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 1900,
LocationType.VICTORY,
logic.protoss_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE.mission_name,
"Northwest Power Core",
SC2LOTV_LOC_ID_OFFSET + 1901,
LocationType.EXTRA,
logic.protoss_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE.mission_name,
"Northeast Power Core",
SC2LOTV_LOC_ID_OFFSET + 1902,
LocationType.EXTRA,
logic.protoss_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE.mission_name,
"Southeast Power Core",
SC2LOTV_LOC_ID_OFFSET + 1903,
LocationType.EXTRA,
logic.protoss_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE.mission_name,
"West Hybrid Stasis Chamber",
SC2LOTV_LOC_ID_OFFSET + 1904,
LocationType.VANILLA,
logic.protoss_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE.mission_name,
"Southeast Hybrid Stasis Chamber",
SC2LOTV_LOC_ID_OFFSET + 1905,
LocationType.VANILLA,
logic.protoss_fleet,
),
make_location_data(
SC2Mission.TEMPLAR_S_RETURN.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 2000,
LocationType.VICTORY,
logic.templars_return_phase_3_reach_dts_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_RETURN.mission_name,
"Citadel: First Gate",
SC2LOTV_LOC_ID_OFFSET + 2001,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.TEMPLAR_S_RETURN.mission_name,
"Citadel: Second Gate",
SC2LOTV_LOC_ID_OFFSET + 2002,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.TEMPLAR_S_RETURN.mission_name,
"Citadel: Power Structure",
SC2LOTV_LOC_ID_OFFSET + 2003,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.TEMPLAR_S_RETURN.mission_name,
"Temple Grounds: Gather Army",
SC2LOTV_LOC_ID_OFFSET + 2004,
LocationType.VANILLA,
logic.templars_return_phase_2_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_RETURN.mission_name,
"Temple Grounds: Power Structure",
SC2LOTV_LOC_ID_OFFSET + 2005,
LocationType.VANILLA,
logic.templars_return_phase_2_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_RETURN.mission_name,
"Caverns: Purifier",
SC2LOTV_LOC_ID_OFFSET + 2006,
LocationType.EXTRA,
logic.templars_return_phase_3_reach_colossus_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_RETURN.mission_name,
"Caverns: Dark Templar",
SC2LOTV_LOC_ID_OFFSET + 2007,
LocationType.EXTRA,
logic.templars_return_phase_3_reach_dts_requirement,
),
make_location_data(
SC2Mission.THE_HOST.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 2100,
LocationType.VICTORY,
logic.protoss_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST.mission_name,
"Southeast Void Shard",
SC2LOTV_LOC_ID_OFFSET + 2101,
LocationType.EXTRA,
logic.protoss_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST.mission_name,
"South Void Shard",
SC2LOTV_LOC_ID_OFFSET + 2102,
LocationType.EXTRA,
logic.protoss_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST.mission_name,
"Southwest Void Shard",
SC2LOTV_LOC_ID_OFFSET + 2103,
LocationType.EXTRA,
logic.protoss_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST.mission_name,
"North Void Shard",
SC2LOTV_LOC_ID_OFFSET + 2104,
LocationType.EXTRA,
logic.protoss_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST.mission_name,
"Northwest Void Shard",
SC2LOTV_LOC_ID_OFFSET + 2105,
LocationType.EXTRA,
logic.protoss_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST.mission_name,
"Nerazim Warp in Zone",
SC2LOTV_LOC_ID_OFFSET + 2106,
LocationType.VANILLA,
logic.protoss_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST.mission_name,
"Tal'darim Warp in Zone",
SC2LOTV_LOC_ID_OFFSET + 2107,
LocationType.VANILLA,
logic.protoss_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST.mission_name,
"Purifier Warp in Zone",
SC2LOTV_LOC_ID_OFFSET + 2108,
LocationType.VANILLA,
logic.protoss_the_host_requirement,
),
make_location_data(
SC2Mission.SALVATION.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 2200,
LocationType.VICTORY,
logic.protoss_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION.mission_name,
"Fabrication Matrix",
SC2LOTV_LOC_ID_OFFSET + 2201,
LocationType.EXTRA,
logic.protoss_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION.mission_name,
"Assault Cluster",
SC2LOTV_LOC_ID_OFFSET + 2202,
LocationType.EXTRA,
logic.protoss_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION.mission_name,
"Hull Breach",
SC2LOTV_LOC_ID_OFFSET + 2203,
LocationType.EXTRA,
logic.protoss_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION.mission_name,
"Core Critical",
SC2LOTV_LOC_ID_OFFSET + 2204,
LocationType.EXTRA,
logic.protoss_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION.mission_name,
"Kill Brutalisk",
SC2LOTV_LOC_ID_OFFSET + 2205,
LocationType.MASTERY,
logic.protoss_salvation_requirement,
),
# Epilogue
make_location_data(
SC2Mission.INTO_THE_VOID.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 2300,
LocationType.VICTORY,
logic.into_the_void_requirement,
),
make_location_data(
SC2Mission.INTO_THE_VOID.mission_name,
"Corruption Source",
SC2LOTV_LOC_ID_OFFSET + 2301,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.INTO_THE_VOID.mission_name,
"Southwest Forward Position",
SC2LOTV_LOC_ID_OFFSET + 2302,
LocationType.VANILLA,
logic.into_the_void_requirement,
),
make_location_data(
SC2Mission.INTO_THE_VOID.mission_name,
"Northwest Forward Position",
SC2LOTV_LOC_ID_OFFSET + 2303,
LocationType.VANILLA,
logic.into_the_void_requirement,
),
make_location_data(
SC2Mission.INTO_THE_VOID.mission_name,
"Southeast Forward Position",
SC2LOTV_LOC_ID_OFFSET + 2304,
LocationType.VANILLA,
logic.into_the_void_requirement,
),
make_location_data(
SC2Mission.INTO_THE_VOID.mission_name,
"Northeast Forward Position",
SC2LOTV_LOC_ID_OFFSET + 2305,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_ESSENCE_OF_ETERNITY.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 2400,
LocationType.VICTORY,
logic.essence_of_eternity_requirement,
),
make_location_data(
SC2Mission.THE_ESSENCE_OF_ETERNITY.mission_name,
"Initial Void Thrashers",
SC2LOTV_LOC_ID_OFFSET + 2401,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_ESSENCE_OF_ETERNITY.mission_name,
"Void Thrasher Wave 1",
SC2LOTV_LOC_ID_OFFSET + 2402,
LocationType.EXTRA,
logic.essence_of_eternity_requirement,
),
make_location_data(
SC2Mission.THE_ESSENCE_OF_ETERNITY.mission_name,
"Void Thrasher Wave 2",
SC2LOTV_LOC_ID_OFFSET + 2403,
LocationType.EXTRA,
logic.essence_of_eternity_requirement,
),
make_location_data(
SC2Mission.THE_ESSENCE_OF_ETERNITY.mission_name,
"Void Thrasher Wave 3",
SC2LOTV_LOC_ID_OFFSET + 2404,
LocationType.EXTRA,
logic.essence_of_eternity_requirement,
),
make_location_data(
SC2Mission.THE_ESSENCE_OF_ETERNITY.mission_name,
"Void Thrasher Wave 4",
SC2LOTV_LOC_ID_OFFSET + 2405,
LocationType.EXTRA,
logic.essence_of_eternity_requirement,
),
make_location_data(
SC2Mission.THE_ESSENCE_OF_ETERNITY.mission_name,
"No more than 15 Kerrigan Kills",
SC2LOTV_LOC_ID_OFFSET + 2406,
LocationType.MASTERY,
logic.essence_of_eternity_requirement,
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.AMON_S_FALL.mission_name,
"Victory",
SC2LOTV_LOC_ID_OFFSET + 2500,
LocationType.VICTORY,
logic.amons_fall_requirement,
),
make_location_data(
SC2Mission.AMON_S_FALL.mission_name,
"Destroy 1 Crystal",
SC2LOTV_LOC_ID_OFFSET + 2501,
LocationType.EXTRA,
logic.amons_fall_requirement,
),
make_location_data(
SC2Mission.AMON_S_FALL.mission_name,
"Destroy 2 Crystals",
SC2LOTV_LOC_ID_OFFSET + 2502,
LocationType.EXTRA,
logic.amons_fall_requirement,
),
make_location_data(
SC2Mission.AMON_S_FALL.mission_name,
"Destroy 3 Crystals",
SC2LOTV_LOC_ID_OFFSET + 2503,
LocationType.EXTRA,
logic.amons_fall_requirement,
),
make_location_data(
SC2Mission.AMON_S_FALL.mission_name,
"Destroy 4 Crystals",
SC2LOTV_LOC_ID_OFFSET + 2504,
LocationType.EXTRA,
logic.amons_fall_requirement,
),
make_location_data(
SC2Mission.AMON_S_FALL.mission_name,
"Destroy 5 Crystals",
SC2LOTV_LOC_ID_OFFSET + 2505,
LocationType.EXTRA,
logic.amons_fall_requirement,
),
make_location_data(
SC2Mission.AMON_S_FALL.mission_name,
"Destroy 6 Crystals",
SC2LOTV_LOC_ID_OFFSET + 2506,
LocationType.EXTRA,
logic.amons_fall_requirement,
),
make_location_data(
SC2Mission.AMON_S_FALL.mission_name,
"Clear Void Chasms",
SC2LOTV_LOC_ID_OFFSET + 2507,
LocationType.MASTERY,
lambda state: logic.amons_fall_requirement(state)
and logic.spread_creep(state, False)
and logic.zerg_big_monsters(state),
),
# Nova Covert Ops
make_location_data(
SC2Mission.THE_ESCAPE.mission_name,
"Victory",
SC2NCO_LOC_ID_OFFSET + 100,
LocationType.VICTORY,
logic.the_escape_requirement,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.THE_ESCAPE.mission_name,
"Rifle",
SC2NCO_LOC_ID_OFFSET + 101,
LocationType.VANILLA,
logic.the_escape_first_stage_requirement,
),
make_location_data(
SC2Mission.THE_ESCAPE.mission_name,
"Grenades",
SC2NCO_LOC_ID_OFFSET + 102,
LocationType.VANILLA,
logic.the_escape_first_stage_requirement,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.THE_ESCAPE.mission_name,
"Agent Delta",
SC2NCO_LOC_ID_OFFSET + 103,
LocationType.VANILLA,
logic.the_escape_requirement,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.THE_ESCAPE.mission_name,
"Agent Pierce",
SC2NCO_LOC_ID_OFFSET + 104,
LocationType.VANILLA,
logic.the_escape_requirement,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.THE_ESCAPE.mission_name,
"Agent Stone",
SC2NCO_LOC_ID_OFFSET + 105,
LocationType.VANILLA,
logic.the_escape_requirement,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.SUDDEN_STRIKE.mission_name,
"Victory",
SC2NCO_LOC_ID_OFFSET + 200,
LocationType.VICTORY,
logic.sudden_strike_requirement,
),
make_location_data(
SC2Mission.SUDDEN_STRIKE.mission_name,
"Research Center",
SC2NCO_LOC_ID_OFFSET + 201,
LocationType.VANILLA,
logic.sudden_strike_requirement,
),
make_location_data(
SC2Mission.SUDDEN_STRIKE.mission_name,
"Weaponry Labs",
SC2NCO_LOC_ID_OFFSET + 202,
LocationType.VANILLA,
logic.sudden_strike_requirement,
),
make_location_data(
SC2Mission.SUDDEN_STRIKE.mission_name,
"Brutalisk",
SC2NCO_LOC_ID_OFFSET + 203,
LocationType.EXTRA,
logic.sudden_strike_requirement,
),
make_location_data(
SC2Mission.SUDDEN_STRIKE.mission_name,
"Gas Pickups",
SC2NCO_LOC_ID_OFFSET + 204,
LocationType.EXTRA,
lambda state: (
logic.advanced_tactics or logic.sudden_strike_requirement(state)
),
),
make_location_data(
SC2Mission.SUDDEN_STRIKE.mission_name,
"Protect Buildings",
SC2NCO_LOC_ID_OFFSET + 205,
LocationType.CHALLENGE,
logic.sudden_strike_requirement,
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.SUDDEN_STRIKE.mission_name,
"Zerg Base",
SC2NCO_LOC_ID_OFFSET + 206,
LocationType.MASTERY,
lambda state: (
logic.sudden_strike_requirement(state)
and logic.terran_competent_comp(state)
and logic.terran_base_trasher(state)
and logic.terran_power_rating(state) >= 8
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ENEMY_INTELLIGENCE.mission_name,
"Victory",
SC2NCO_LOC_ID_OFFSET + 300,
LocationType.VICTORY,
logic.enemy_intelligence_third_stage_requirement,
hard_rule=logic.enemy_intelligence_cliff_garrison_and_nova_mobility,
),
make_location_data(
SC2Mission.ENEMY_INTELLIGENCE.mission_name,
"West Garrison",
SC2NCO_LOC_ID_OFFSET + 301,
LocationType.EXTRA,
logic.enemy_intelligence_first_stage_requirement,
hard_rule=logic.enemy_intelligence_garrisonable_unit,
),
make_location_data(
SC2Mission.ENEMY_INTELLIGENCE.mission_name,
"Close Garrison",
SC2NCO_LOC_ID_OFFSET + 302,
LocationType.EXTRA,
logic.enemy_intelligence_first_stage_requirement,
hard_rule=logic.enemy_intelligence_garrisonable_unit,
),
make_location_data(
SC2Mission.ENEMY_INTELLIGENCE.mission_name,
"Northeast Garrison",
SC2NCO_LOC_ID_OFFSET + 303,
LocationType.EXTRA,
logic.enemy_intelligence_first_stage_requirement,
hard_rule=logic.enemy_intelligence_garrisonable_unit,
),
make_location_data(
SC2Mission.ENEMY_INTELLIGENCE.mission_name,
"Southeast Garrison",
SC2NCO_LOC_ID_OFFSET + 304,
LocationType.EXTRA,
lambda state: (
logic.enemy_intelligence_first_stage_requirement(state)
and logic.enemy_intelligence_cliff_garrison(state)
),
hard_rule=logic.enemy_intelligence_cliff_garrison,
),
make_location_data(
SC2Mission.ENEMY_INTELLIGENCE.mission_name,
"South Garrison",
SC2NCO_LOC_ID_OFFSET + 305,
LocationType.EXTRA,
logic.enemy_intelligence_first_stage_requirement,
hard_rule=logic.enemy_intelligence_garrisonable_unit,
),
make_location_data(
SC2Mission.ENEMY_INTELLIGENCE.mission_name,
"All Garrisons",
SC2NCO_LOC_ID_OFFSET + 306,
LocationType.VANILLA,
lambda state: (
logic.enemy_intelligence_first_stage_requirement(state)
and logic.enemy_intelligence_cliff_garrison(state)
),
hard_rule=logic.enemy_intelligence_cliff_garrison,
),
make_location_data(
SC2Mission.ENEMY_INTELLIGENCE.mission_name,
"Forces Rescued",
SC2NCO_LOC_ID_OFFSET + 307,
LocationType.VANILLA,
logic.enemy_intelligence_first_stage_requirement,
),
make_location_data(
SC2Mission.ENEMY_INTELLIGENCE.mission_name,
"Communications Hub",
SC2NCO_LOC_ID_OFFSET + 308,
LocationType.VANILLA,
logic.enemy_intelligence_second_stage_requirement,
hard_rule=logic.enemy_intelligence_cliff_garrison_and_nova_mobility,
),
make_location_data(
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
"Victory",
SC2NCO_LOC_ID_OFFSET + 400,
LocationType.VICTORY,
logic.trouble_in_paradise_requirement,
),
make_location_data(
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
"North Base: West Hatchery",
SC2NCO_LOC_ID_OFFSET + 401,
LocationType.VANILLA,
logic.trouble_in_paradise_requirement,
),
make_location_data(
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
"North Base: North Hatchery",
SC2NCO_LOC_ID_OFFSET + 402,
LocationType.VANILLA,
logic.trouble_in_paradise_requirement,
),
make_location_data(
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
"North Base: East Hatchery",
SC2NCO_LOC_ID_OFFSET + 403,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
"South Base: Northwest Hatchery",
SC2NCO_LOC_ID_OFFSET + 404,
LocationType.VANILLA,
logic.trouble_in_paradise_requirement,
),
make_location_data(
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
"South Base: Southwest Hatchery",
SC2NCO_LOC_ID_OFFSET + 405,
LocationType.VANILLA,
logic.trouble_in_paradise_requirement,
),
make_location_data(
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
"South Base: East Hatchery",
SC2NCO_LOC_ID_OFFSET + 406,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
"North Shield Projector",
SC2NCO_LOC_ID_OFFSET + 407,
LocationType.EXTRA,
logic.trouble_in_paradise_requirement,
),
make_location_data(
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
"East Shield Projector",
SC2NCO_LOC_ID_OFFSET + 408,
LocationType.EXTRA,
logic.trouble_in_paradise_requirement,
),
make_location_data(
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
"South Shield Projector",
SC2NCO_LOC_ID_OFFSET + 409,
LocationType.EXTRA,
logic.trouble_in_paradise_requirement,
),
make_location_data(
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
"West Shield Projector",
SC2NCO_LOC_ID_OFFSET + 410,
LocationType.EXTRA,
logic.trouble_in_paradise_requirement,
),
make_location_data(
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
"Fleet Beacon",
SC2NCO_LOC_ID_OFFSET + 411,
LocationType.VANILLA,
logic.trouble_in_paradise_requirement,
),
make_location_data(
SC2Mission.NIGHT_TERRORS.mission_name,
"Victory",
SC2NCO_LOC_ID_OFFSET + 500,
LocationType.VICTORY,
logic.night_terrors_requirement,
),
make_location_data(
SC2Mission.NIGHT_TERRORS.mission_name,
"1 Terrazine Node Collected",
SC2NCO_LOC_ID_OFFSET + 501,
LocationType.EXTRA,
logic.night_terrors_requirement,
),
make_location_data(
SC2Mission.NIGHT_TERRORS.mission_name,
"2 Terrazine Nodes Collected",
SC2NCO_LOC_ID_OFFSET + 502,
LocationType.EXTRA,
logic.night_terrors_requirement,
),
make_location_data(
SC2Mission.NIGHT_TERRORS.mission_name,
"3 Terrazine Nodes Collected",
SC2NCO_LOC_ID_OFFSET + 503,
LocationType.EXTRA,
logic.night_terrors_requirement,
),
make_location_data(
SC2Mission.NIGHT_TERRORS.mission_name,
"4 Terrazine Nodes Collected",
SC2NCO_LOC_ID_OFFSET + 504,
LocationType.EXTRA,
logic.night_terrors_requirement,
),
make_location_data(
SC2Mission.NIGHT_TERRORS.mission_name,
"5 Terrazine Nodes Collected",
SC2NCO_LOC_ID_OFFSET + 505,
LocationType.EXTRA,
logic.night_terrors_requirement,
),
make_location_data(
SC2Mission.NIGHT_TERRORS.mission_name,
"HERC Outpost",
SC2NCO_LOC_ID_OFFSET + 506,
LocationType.VANILLA,
logic.night_terrors_requirement,
),
make_location_data(
SC2Mission.NIGHT_TERRORS.mission_name,
"Umojan Mine",
SC2NCO_LOC_ID_OFFSET + 507,
LocationType.EXTRA,
logic.night_terrors_requirement,
),
make_location_data(
SC2Mission.NIGHT_TERRORS.mission_name,
"Blightbringer",
SC2NCO_LOC_ID_OFFSET + 508,
LocationType.VANILLA,
lambda state: (
logic.night_terrors_requirement(state)
and logic.nova_ranged_weapon(state)
and state.has_any(
{
item_names.NOVA_HELLFIRE_SHOTGUN,
item_names.NOVA_PULSE_GRENADES,
item_names.NOVA_STIM_INFUSION,
item_names.NOVA_HOLO_DECOY,
},
player,
)
),
),
make_location_data(
SC2Mission.NIGHT_TERRORS.mission_name,
"Science Facility",
SC2NCO_LOC_ID_OFFSET + 509,
LocationType.EXTRA,
logic.night_terrors_requirement,
),
make_location_data(
SC2Mission.NIGHT_TERRORS.mission_name,
"Eradicators",
SC2NCO_LOC_ID_OFFSET + 510,
LocationType.VANILLA,
lambda state: (
logic.night_terrors_requirement(state) and logic.nova_any_weapon(state)
),
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Victory",
SC2NCO_LOC_ID_OFFSET + 600,
LocationType.VICTORY,
logic.flashpoint_far_requirement,
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Close North Evidence Coordinates",
SC2NCO_LOC_ID_OFFSET + 601,
LocationType.EXTRA,
lambda state: (
state.has_any(
{
item_names.LIBERATOR_RAID_ARTILLERY,
item_names.RAVEN_HUNTER_SEEKER_WEAPON,
},
player,
)
or logic.terran_common_unit(state)
),
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Close East Evidence Coordinates",
SC2NCO_LOC_ID_OFFSET + 602,
LocationType.EXTRA,
lambda state: (
state.has_any(
{
item_names.LIBERATOR_RAID_ARTILLERY,
item_names.RAVEN_HUNTER_SEEKER_WEAPON,
},
player,
)
or logic.terran_common_unit(state)
),
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Far North Evidence Coordinates",
SC2NCO_LOC_ID_OFFSET + 603,
LocationType.EXTRA,
logic.flashpoint_far_requirement,
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Far East Evidence Coordinates",
SC2NCO_LOC_ID_OFFSET + 604,
LocationType.EXTRA,
logic.flashpoint_far_requirement,
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Experimental Weapon",
SC2NCO_LOC_ID_OFFSET + 605,
LocationType.VANILLA,
logic.flashpoint_far_requirement,
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Northwest Subway Entrance",
SC2NCO_LOC_ID_OFFSET + 606,
LocationType.VANILLA,
lambda state: (
state.has_any(
{
item_names.LIBERATOR_RAID_ARTILLERY,
item_names.RAVEN_HUNTER_SEEKER_WEAPON,
},
player,
)
and logic.terran_common_unit(state)
or logic.flashpoint_far_requirement(state)
),
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Southeast Subway Entrance",
SC2NCO_LOC_ID_OFFSET + 607,
LocationType.VANILLA,
lambda state: state.has_any(
{
item_names.LIBERATOR_RAID_ARTILLERY,
item_names.RAVEN_HUNTER_SEEKER_WEAPON,
},
player,
)
and logic.terran_common_unit(state)
or logic.flashpoint_far_requirement(state),
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Northeast Subway Entrance",
SC2NCO_LOC_ID_OFFSET + 608,
LocationType.VANILLA,
logic.flashpoint_far_requirement,
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Expansion Hatchery",
SC2NCO_LOC_ID_OFFSET + 609,
LocationType.EXTRA,
lambda state: state.has(item_names.LIBERATOR_RAID_ARTILLERY, player)
and logic.terran_common_unit(state)
or logic.flashpoint_far_requirement(state),
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Baneling Spawns",
SC2NCO_LOC_ID_OFFSET + 610,
LocationType.EXTRA,
logic.flashpoint_far_requirement,
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Mutalisk Spawns",
SC2NCO_LOC_ID_OFFSET + 611,
LocationType.EXTRA,
logic.flashpoint_far_requirement,
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Nydus Worm Spawns",
SC2NCO_LOC_ID_OFFSET + 612,
LocationType.EXTRA,
logic.flashpoint_far_requirement,
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Lurker Spawns",
SC2NCO_LOC_ID_OFFSET + 613,
LocationType.EXTRA,
logic.flashpoint_far_requirement,
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Brood Lord Spawns",
SC2NCO_LOC_ID_OFFSET + 614,
LocationType.EXTRA,
logic.flashpoint_far_requirement,
),
make_location_data(
SC2Mission.FLASHPOINT.mission_name,
"Ultralisk Spawns",
SC2NCO_LOC_ID_OFFSET + 615,
LocationType.EXTRA,
logic.flashpoint_far_requirement,
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Victory",
SC2NCO_LOC_ID_OFFSET + 700,
LocationType.VICTORY,
logic.enemy_shadow_victory,
hard_rule=lambda state: logic.nova_beat_stone(state)
and logic.enemy_shadow_door_unlocks_tool(state),
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Sewers: Domination Visor",
SC2NCO_LOC_ID_OFFSET + 701,
LocationType.VANILLA,
logic.enemy_shadow_domination,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Sewers: Resupply Crate",
SC2NCO_LOC_ID_OFFSET + 702,
LocationType.EXTRA,
logic.enemy_shadow_first_stage,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Sewers: Facility Access",
SC2NCO_LOC_ID_OFFSET + 703,
LocationType.VANILLA,
logic.enemy_shadow_first_stage,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Facility: Northwest Door Lock",
SC2NCO_LOC_ID_OFFSET + 704,
LocationType.VANILLA,
logic.enemy_shadow_door_controls,
hard_rule=lambda state: logic.nova_any_nobuild_damage(state)
and logic.enemy_shadow_door_unlocks_tool(state),
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Facility: Southeast Door Lock",
SC2NCO_LOC_ID_OFFSET + 705,
LocationType.VANILLA,
logic.enemy_shadow_door_controls,
hard_rule=lambda state: logic.nova_any_nobuild_damage(state)
and logic.enemy_shadow_door_unlocks_tool(state),
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Facility: Blazefire Gunblade",
SC2NCO_LOC_ID_OFFSET + 706,
LocationType.VANILLA,
lambda state: (
logic.enemy_shadow_second_stage(state)
and (
logic.grant_story_tech == GrantStoryTech.option_grant
or state.has(item_names.NOVA_BLINK, player)
or (
adv_tactics
and state.has_all(
{
item_names.NOVA_DOMINATION,
item_names.NOVA_HOLO_DECOY,
item_names.NOVA_JUMP_SUIT_MODULE,
},
player,
)
)
)
),
hard_rule=logic.enemy_shadow_nova_damage_and_blazefire_unlock,
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Facility: Blink Suit",
SC2NCO_LOC_ID_OFFSET + 707,
LocationType.VANILLA,
logic.enemy_shadow_second_stage,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Facility: Advanced Weaponry",
SC2NCO_LOC_ID_OFFSET + 708,
LocationType.VANILLA,
logic.enemy_shadow_second_stage,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Facility: Entrance Resupply Crate",
SC2NCO_LOC_ID_OFFSET + 709,
LocationType.EXTRA,
logic.enemy_shadow_first_stage,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Facility: West Resupply Crate",
SC2NCO_LOC_ID_OFFSET + 710,
LocationType.EXTRA,
logic.enemy_shadow_second_stage,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Facility: North Resupply Crate",
SC2NCO_LOC_ID_OFFSET + 711,
LocationType.EXTRA,
logic.enemy_shadow_second_stage,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Facility: East Resupply Crate",
SC2NCO_LOC_ID_OFFSET + 712,
LocationType.EXTRA,
logic.enemy_shadow_second_stage,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
"Facility: South Resupply Crate",
SC2NCO_LOC_ID_OFFSET + 713,
LocationType.EXTRA,
logic.enemy_shadow_second_stage,
hard_rule=logic.nova_any_nobuild_damage,
),
make_location_data(
SC2Mission.DARK_SKIES.mission_name,
"Victory",
SC2NCO_LOC_ID_OFFSET + 800,
LocationType.VICTORY,
logic.dark_skies_requirement,
),
make_location_data(
SC2Mission.DARK_SKIES.mission_name,
"First Squadron of Dominion Fleet",
SC2NCO_LOC_ID_OFFSET + 801,
LocationType.EXTRA,
logic.dark_skies_requirement,
),
make_location_data(
SC2Mission.DARK_SKIES.mission_name,
"Remainder of Dominion Fleet",
SC2NCO_LOC_ID_OFFSET + 802,
LocationType.EXTRA,
logic.dark_skies_requirement,
),
make_location_data(
SC2Mission.DARK_SKIES.mission_name,
"Ji'nara",
SC2NCO_LOC_ID_OFFSET + 803,
LocationType.EXTRA,
logic.dark_skies_requirement,
),
make_location_data(
SC2Mission.DARK_SKIES.mission_name,
"Science Facility",
SC2NCO_LOC_ID_OFFSET + 804,
LocationType.VANILLA,
logic.dark_skies_requirement,
),
make_location_data(
SC2Mission.END_GAME.mission_name,
"Victory",
SC2NCO_LOC_ID_OFFSET + 900,
LocationType.VICTORY,
lambda state: logic.end_game_requirement(state)
and logic.nova_any_weapon(state),
),
make_location_data(
SC2Mission.END_GAME.mission_name,
"Destroy the Xanthos",
SC2NCO_LOC_ID_OFFSET + 901,
LocationType.VANILLA,
logic.end_game_requirement,
),
make_location_data(
SC2Mission.END_GAME.mission_name,
"Disable Xanthos Railgun",
SC2NCO_LOC_ID_OFFSET + 902,
LocationType.EXTRA,
logic.end_game_requirement,
),
make_location_data(
SC2Mission.END_GAME.mission_name,
"Disable Xanthos Flamethrower",
SC2NCO_LOC_ID_OFFSET + 903,
LocationType.EXTRA,
logic.end_game_requirement,
),
make_location_data(
SC2Mission.END_GAME.mission_name,
"Disable Xanthos Fighter Bay",
SC2NCO_LOC_ID_OFFSET + 904,
LocationType.EXTRA,
logic.end_game_requirement,
),
make_location_data(
SC2Mission.END_GAME.mission_name,
"Disable Xanthos Missile Pods",
SC2NCO_LOC_ID_OFFSET + 905,
LocationType.EXTRA,
logic.end_game_requirement,
),
make_location_data(
SC2Mission.END_GAME.mission_name,
"Protect Hyperion",
SC2NCO_LOC_ID_OFFSET + 906,
LocationType.CHALLENGE,
logic.end_game_requirement,
),
make_location_data(
SC2Mission.END_GAME.mission_name,
"Destroy Orbital Commands",
SC2NCO_LOC_ID_OFFSET + 907,
LocationType.CHALLENGE,
logic.end_game_requirement,
flags=LocationFlag.BASEBUST,
),
# Mission Variants
# 10X/20X - Liberation Day
make_location_data(
SC2Mission.THE_OUTLAWS_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 300,
LocationType.VICTORY,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.THE_OUTLAWS_Z.mission_name,
"Rebel Base",
SC2_RACESWAP_LOC_ID_OFFSET + 301,
LocationType.VANILLA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.THE_OUTLAWS_Z.mission_name,
"North Resource Pickups",
SC2_RACESWAP_LOC_ID_OFFSET + 302,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.THE_OUTLAWS_Z.mission_name,
"Bunker",
SC2_RACESWAP_LOC_ID_OFFSET + 303,
LocationType.VANILLA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.THE_OUTLAWS_Z.mission_name,
"Close Resource Pickups",
SC2_RACESWAP_LOC_ID_OFFSET + 304,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_OUTLAWS_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 400,
LocationType.VICTORY,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.THE_OUTLAWS_P.mission_name,
"Rebel Base",
SC2_RACESWAP_LOC_ID_OFFSET + 401,
LocationType.VANILLA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.THE_OUTLAWS_P.mission_name,
"North Resource Pickups",
SC2_RACESWAP_LOC_ID_OFFSET + 402,
LocationType.EXTRA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.THE_OUTLAWS_P.mission_name,
"Bunker",
SC2_RACESWAP_LOC_ID_OFFSET + 403,
LocationType.VANILLA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.THE_OUTLAWS_P.mission_name,
"Close Resource Pickups",
SC2_RACESWAP_LOC_ID_OFFSET + 404,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.ZERO_HOUR_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 500,
LocationType.VICTORY,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_defense_rating(state, True, True) >= 5
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.ZERO_HOUR_Z.mission_name,
"First Group Rescued",
SC2_RACESWAP_LOC_ID_OFFSET + 501,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.ZERO_HOUR_Z.mission_name,
"Second Group Rescued",
SC2_RACESWAP_LOC_ID_OFFSET + 502,
LocationType.VANILLA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.ZERO_HOUR_Z.mission_name,
"Third Group Rescued",
SC2_RACESWAP_LOC_ID_OFFSET + 503,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_defense_rating(state, True, True) >= 5
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.ZERO_HOUR_Z.mission_name,
"First Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 504,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ZERO_HOUR_Z.mission_name,
"Second Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 505,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ZERO_HOUR_Z.mission_name,
"Third Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 506,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ZERO_HOUR_Z.mission_name,
"Fourth Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 507,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ZERO_HOUR_Z.mission_name,
"Ride's on its Way",
SC2_RACESWAP_LOC_ID_OFFSET + 508,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_defense_rating(state, True, True) >= 5
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.ZERO_HOUR_Z.mission_name,
"Hold Just a Little Longer",
SC2_RACESWAP_LOC_ID_OFFSET + 509,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_defense_rating(state, True, True) >= 5
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.ZERO_HOUR_Z.mission_name,
"Cavalry's on the Way",
SC2_RACESWAP_LOC_ID_OFFSET + 510,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_defense_rating(state, True, True) >= 5
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.ZERO_HOUR_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 600,
LocationType.VICTORY,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_light_anti_air(state)
and (
state.has(item_names.PHOTON_CANNON, player)
or logic.protoss_basic_splash(state)
)
),
),
make_location_data(
SC2Mission.ZERO_HOUR_P.mission_name,
"First Group Rescued",
SC2_RACESWAP_LOC_ID_OFFSET + 601,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.ZERO_HOUR_P.mission_name,
"Second Group Rescued",
SC2_RACESWAP_LOC_ID_OFFSET + 602,
LocationType.VANILLA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.ZERO_HOUR_P.mission_name,
"Third Group Rescued",
SC2_RACESWAP_LOC_ID_OFFSET + 603,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_light_anti_air(state)
and (
state.has(item_names.PHOTON_CANNON, player)
or logic.protoss_basic_splash(state)
)
),
),
make_location_data(
SC2Mission.ZERO_HOUR_P.mission_name,
"First Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 604,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ZERO_HOUR_P.mission_name,
"Second Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 605,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ZERO_HOUR_P.mission_name,
"Third Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 606,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ZERO_HOUR_P.mission_name,
"Fourth Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 607,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.ZERO_HOUR_P.mission_name,
"Ride's on its Way",
SC2_RACESWAP_LOC_ID_OFFSET + 608,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_light_anti_air(state)
and (
state.has(item_names.PHOTON_CANNON, player)
or logic.protoss_basic_splash(state)
)
),
),
make_location_data(
SC2Mission.ZERO_HOUR_P.mission_name,
"Hold Just a Little Longer",
SC2_RACESWAP_LOC_ID_OFFSET + 609,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_light_anti_air(state)
and (
state.has(item_names.PHOTON_CANNON, player)
or logic.protoss_basic_splash(state)
)
),
),
make_location_data(
SC2Mission.ZERO_HOUR_P.mission_name,
"Cavalry's on the Way",
SC2_RACESWAP_LOC_ID_OFFSET + 610,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_light_anti_air(state)
and (
state.has(item_names.PHOTON_CANNON, player)
or logic.protoss_basic_splash(state)
)
),
),
make_location_data(
SC2Mission.EVACUATION_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 700,
LocationType.VICTORY,
lambda state: (
logic.zerg_common_unit(state)
and (
logic.zerg_competent_anti_air(state)
or (adv_tactics and logic.zerg_basic_kerriganless_anti_air(state))
)
),
),
make_location_data(
SC2Mission.EVACUATION_Z.mission_name,
"North Chrysalis",
SC2_RACESWAP_LOC_ID_OFFSET + 701,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.EVACUATION_Z.mission_name,
"West Chrysalis",
SC2_RACESWAP_LOC_ID_OFFSET + 702,
LocationType.VANILLA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.EVACUATION_Z.mission_name,
"East Chrysalis",
SC2_RACESWAP_LOC_ID_OFFSET + 703,
LocationType.VANILLA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.EVACUATION_Z.mission_name,
"Reach Hanson",
SC2_RACESWAP_LOC_ID_OFFSET + 704,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.EVACUATION_Z.mission_name,
"Secret Resource Stash",
SC2_RACESWAP_LOC_ID_OFFSET + 705,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.EVACUATION_Z.mission_name,
"Flawless",
SC2_RACESWAP_LOC_ID_OFFSET + 706,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_common_unit(state)
and logic.zerg_defense_rating(state, True, False) >= 5
and (
(adv_tactics and logic.zerg_basic_kerriganless_anti_air(state))
or logic.zerg_competent_anti_air(state)
)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.EVACUATION_Z.mission_name,
"Western Zerg Base",
SC2_RACESWAP_LOC_ID_OFFSET + 707,
LocationType.MASTERY,
lambda state: (
logic.zerg_common_unit_competent_aa(state)
and logic.zerg_base_buster(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.EVACUATION_Z.mission_name,
"Eastern Zerg Base",
SC2_RACESWAP_LOC_ID_OFFSET + 708,
LocationType.MASTERY,
lambda state: (
logic.zerg_common_unit_competent_aa(state)
and logic.zerg_base_buster(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.EVACUATION_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 800,
LocationType.VICTORY,
lambda state: (
logic.protoss_common_unit(state)
and (
(adv_tactics and logic.protoss_basic_anti_air(state))
or logic.protoss_anti_light_anti_air(state)
)
),
),
make_location_data(
SC2Mission.EVACUATION_P.mission_name,
"North Chrysalis",
SC2_RACESWAP_LOC_ID_OFFSET + 801,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.EVACUATION_P.mission_name,
"West Chrysalis",
SC2_RACESWAP_LOC_ID_OFFSET + 802,
LocationType.VANILLA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.EVACUATION_P.mission_name,
"East Chrysalis",
SC2_RACESWAP_LOC_ID_OFFSET + 803,
LocationType.VANILLA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.EVACUATION_P.mission_name,
"Reach Hanson",
SC2_RACESWAP_LOC_ID_OFFSET + 804,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.EVACUATION_P.mission_name,
"Secret Resource Stash",
SC2_RACESWAP_LOC_ID_OFFSET + 805,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.EVACUATION_P.mission_name,
"Flawless",
SC2_RACESWAP_LOC_ID_OFFSET + 806,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_defense_rating(state, True) >= 2
and logic.protoss_common_unit(state)
and (
(adv_tactics and logic.protoss_basic_anti_air(state))
or logic.protoss_anti_light_anti_air(state)
)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.EVACUATION_P.mission_name,
"Western Zerg Base",
SC2_RACESWAP_LOC_ID_OFFSET + 807,
LocationType.MASTERY,
logic.protoss_competent_comp,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.EVACUATION_P.mission_name,
"Eastern Zerg Base",
SC2_RACESWAP_LOC_ID_OFFSET + 808,
LocationType.MASTERY,
logic.protoss_competent_comp,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.OUTBREAK_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 900,
LocationType.VICTORY,
logic.zerg_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_Z.mission_name,
"Left Infestor",
SC2_RACESWAP_LOC_ID_OFFSET + 901,
LocationType.VANILLA,
logic.zerg_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_Z.mission_name,
"Right Infestor",
SC2_RACESWAP_LOC_ID_OFFSET + 902,
LocationType.VANILLA,
logic.zerg_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_Z.mission_name,
"North Infested Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 903,
LocationType.EXTRA,
logic.zerg_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_Z.mission_name,
"South Infested Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 904,
LocationType.EXTRA,
logic.zerg_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_Z.mission_name,
"Northwest Bar",
SC2_RACESWAP_LOC_ID_OFFSET + 905,
LocationType.EXTRA,
logic.zerg_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_Z.mission_name,
"North Bar",
SC2_RACESWAP_LOC_ID_OFFSET + 906,
LocationType.EXTRA,
logic.zerg_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_Z.mission_name,
"South Bar",
SC2_RACESWAP_LOC_ID_OFFSET + 907,
LocationType.EXTRA,
logic.zerg_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 1000,
LocationType.VICTORY,
logic.protoss_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_P.mission_name,
"Left Infestor",
SC2_RACESWAP_LOC_ID_OFFSET + 1001,
LocationType.VANILLA,
logic.protoss_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_P.mission_name,
"Right Infestor",
SC2_RACESWAP_LOC_ID_OFFSET + 1002,
LocationType.VANILLA,
logic.protoss_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_P.mission_name,
"North Infested Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 1003,
LocationType.EXTRA,
logic.protoss_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_P.mission_name,
"South Infested Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 1004,
LocationType.EXTRA,
logic.protoss_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_P.mission_name,
"Northwest Bar",
SC2_RACESWAP_LOC_ID_OFFSET + 1005,
LocationType.EXTRA,
logic.protoss_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_P.mission_name,
"North Bar",
SC2_RACESWAP_LOC_ID_OFFSET + 1006,
LocationType.EXTRA,
logic.protoss_outbreak_requirement,
),
make_location_data(
SC2Mission.OUTBREAK_P.mission_name,
"South Bar",
SC2_RACESWAP_LOC_ID_OFFSET + 1007,
LocationType.EXTRA,
logic.protoss_outbreak_requirement,
),
make_location_data(
SC2Mission.SAFE_HAVEN_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 1100,
LocationType.VICTORY,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state),
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.SAFE_HAVEN_Z.mission_name,
"North Nexus",
SC2_RACESWAP_LOC_ID_OFFSET + 1101,
LocationType.EXTRA,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state),
),
make_location_data(
SC2Mission.SAFE_HAVEN_Z.mission_name,
"East Nexus",
SC2_RACESWAP_LOC_ID_OFFSET + 1102,
LocationType.EXTRA,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state),
),
make_location_data(
SC2Mission.SAFE_HAVEN_Z.mission_name,
"South Nexus",
SC2_RACESWAP_LOC_ID_OFFSET + 1103,
LocationType.EXTRA,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state),
),
make_location_data(
SC2Mission.SAFE_HAVEN_Z.mission_name,
"First Terror Fleet",
SC2_RACESWAP_LOC_ID_OFFSET + 1104,
LocationType.VANILLA,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state),
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.SAFE_HAVEN_Z.mission_name,
"Second Terror Fleet",
SC2_RACESWAP_LOC_ID_OFFSET + 1105,
LocationType.VANILLA,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state),
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.SAFE_HAVEN_Z.mission_name,
"Third Terror Fleet",
SC2_RACESWAP_LOC_ID_OFFSET + 1106,
LocationType.VANILLA,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state),
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.SAFE_HAVEN_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 1200,
LocationType.VICTORY,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state),
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.SAFE_HAVEN_P.mission_name,
"North Nexus",
SC2_RACESWAP_LOC_ID_OFFSET + 1201,
LocationType.EXTRA,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state),
),
make_location_data(
SC2Mission.SAFE_HAVEN_P.mission_name,
"East Nexus",
SC2_RACESWAP_LOC_ID_OFFSET + 1202,
LocationType.EXTRA,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state),
),
make_location_data(
SC2Mission.SAFE_HAVEN_P.mission_name,
"South Nexus",
SC2_RACESWAP_LOC_ID_OFFSET + 1203,
LocationType.EXTRA,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state),
),
make_location_data(
SC2Mission.SAFE_HAVEN_P.mission_name,
"First Terror Fleet",
SC2_RACESWAP_LOC_ID_OFFSET + 1204,
LocationType.VANILLA,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state),
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.SAFE_HAVEN_P.mission_name,
"Second Terror Fleet",
SC2_RACESWAP_LOC_ID_OFFSET + 1205,
LocationType.VANILLA,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state),
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.SAFE_HAVEN_P.mission_name,
"Third Terror Fleet",
SC2_RACESWAP_LOC_ID_OFFSET + 1206,
LocationType.VANILLA,
lambda state: logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state),
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.HAVENS_FALL_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 1300,
LocationType.VICTORY,
logic.zerg_havens_fall_requirement,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.HAVENS_FALL_Z.mission_name,
"North Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 1301,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.HAVENS_FALL_Z.mission_name,
"East Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 1302,
LocationType.VANILLA,
logic.zerg_havens_fall_requirement,
),
make_location_data(
SC2Mission.HAVENS_FALL_Z.mission_name,
"South Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 1303,
LocationType.VANILLA,
logic.zerg_havens_fall_requirement,
),
make_location_data(
SC2Mission.HAVENS_FALL_Z.mission_name,
"Northeast Colony Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1304,
LocationType.CHALLENGE,
logic.zerg_havens_fall_requirement,
),
make_location_data(
SC2Mission.HAVENS_FALL_Z.mission_name,
"East Colony Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1305,
LocationType.CHALLENGE,
logic.zerg_respond_to_colony_infestations,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.HAVENS_FALL_Z.mission_name,
"Middle Colony Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1306,
LocationType.CHALLENGE,
logic.zerg_respond_to_colony_infestations,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.HAVENS_FALL_Z.mission_name,
"Southeast Colony Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1307,
LocationType.CHALLENGE,
logic.zerg_respond_to_colony_infestations,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.HAVENS_FALL_Z.mission_name,
"Southwest Colony Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1308,
LocationType.CHALLENGE,
logic.zerg_respond_to_colony_infestations,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.HAVENS_FALL_Z.mission_name,
"Southwest Gas Pickups",
SC2_RACESWAP_LOC_ID_OFFSET + 1309,
LocationType.EXTRA,
lambda state: state.has_any(
(item_names.OVERLORD_VENTRAL_SACS, item_names.YGGDRASIL), player
)
or adv_tactics
and state.has_all(
(
item_names.INFESTED_BANSHEE,
item_names.INFESTED_BANSHEE_RAPID_HIBERNATION,
),
player,
),
hard_rule=logic.zerg_can_collect_pickup_across_gap,
),
make_location_data(
SC2Mission.HAVENS_FALL_Z.mission_name,
"East Gas Pickups",
SC2_RACESWAP_LOC_ID_OFFSET + 1310,
LocationType.EXTRA,
lambda state: (
logic.zerg_havens_fall_requirement(state)
and (
state.has(item_names.OVERLORD_VENTRAL_SACS, player)
or adv_tactics
and (
state.has_all(
(
item_names.INFESTED_BANSHEE,
item_names.INFESTED_BANSHEE_RAPID_HIBERNATION,
),
player,
)
or state.has(item_names.YGGDRASIL, player)
or logic.morph_viper(state)
)
)
),
),
make_location_data(
SC2Mission.HAVENS_FALL_Z.mission_name,
"Southeast Gas Pickups",
SC2_RACESWAP_LOC_ID_OFFSET + 1311,
LocationType.EXTRA,
lambda state: (
logic.zerg_havens_fall_requirement(state)
and (
state.has(item_names.OVERLORD_VENTRAL_SACS, player)
or adv_tactics
and (
state.has_all(
(
item_names.INFESTED_BANSHEE,
item_names.INFESTED_BANSHEE_RAPID_HIBERNATION,
),
player,
)
or state.has(item_names.YGGDRASIL, player)
)
)
),
),
make_location_data(
SC2Mission.HAVENS_FALL_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 1400,
LocationType.VICTORY,
logic.protoss_havens_fall_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.HAVENS_FALL_P.mission_name,
"North Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 1401,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.HAVENS_FALL_P.mission_name,
"East Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 1402,
LocationType.VANILLA,
logic.protoss_havens_fall_requirement,
),
make_location_data(
SC2Mission.HAVENS_FALL_P.mission_name,
"South Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 1403,
LocationType.VANILLA,
logic.protoss_havens_fall_requirement,
),
make_location_data(
SC2Mission.HAVENS_FALL_P.mission_name,
"Northeast Colony Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1404,
LocationType.CHALLENGE,
logic.protoss_respond_to_colony_infestations,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.HAVENS_FALL_P.mission_name,
"East Colony Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1405,
LocationType.CHALLENGE,
logic.protoss_respond_to_colony_infestations,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.HAVENS_FALL_P.mission_name,
"Middle Colony Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1406,
LocationType.CHALLENGE,
logic.protoss_respond_to_colony_infestations,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.HAVENS_FALL_P.mission_name,
"Southeast Colony Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1407,
LocationType.CHALLENGE,
logic.protoss_respond_to_colony_infestations,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.HAVENS_FALL_P.mission_name,
"Southwest Colony Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1408,
LocationType.CHALLENGE,
logic.protoss_respond_to_colony_infestations,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.HAVENS_FALL_P.mission_name,
"Southwest Gas Pickups",
SC2_RACESWAP_LOC_ID_OFFSET + 1409,
LocationType.EXTRA,
lambda state: (
state.has(item_names.WARP_PRISM, player)
or adv_tactics
and (
state.has_all(
(item_names.MISTWING, item_names.MISTWING_PILOT), player
)
or state.has(item_names.ARBITER, player)
)
),
hard_rule=logic.protoss_any_gap_transport,
),
make_location_data(
SC2Mission.HAVENS_FALL_P.mission_name,
"East Gas Pickups",
SC2_RACESWAP_LOC_ID_OFFSET + 1410,
LocationType.EXTRA,
lambda state: (
logic.protoss_havens_fall_requirement(state)
and (
state.has(item_names.WARP_PRISM, player)
or adv_tactics
and (
state.has_all(
(item_names.MISTWING, item_names.MISTWING_PILOT), player
)
or state.has(item_names.ARBITER, player)
)
)
),
hard_rule=logic.protoss_any_gap_transport,
),
make_location_data(
SC2Mission.HAVENS_FALL_P.mission_name,
"Southeast Gas Pickups",
SC2_RACESWAP_LOC_ID_OFFSET + 1411,
LocationType.EXTRA,
lambda state: (
logic.protoss_havens_fall_requirement(state)
and (
state.has(item_names.WARP_PRISM, player)
or adv_tactics
and (
state.has_all(
(item_names.MISTWING, item_names.MISTWING_PILOT), player
)
or state.has(item_names.ARBITER, player)
)
)
),
hard_rule=logic.protoss_any_gap_transport,
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 1500,
LocationType.VICTORY,
lambda state: (
logic.zerg_common_unit(state)
and (
(adv_tactics and logic.zerg_moderate_anti_air(state))
or logic.zerg_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_Z.mission_name,
"First Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 1501,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_Z.mission_name,
"Second Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 1502,
LocationType.VANILLA,
lambda state: logic.zerg_common_unit(state)
or state.has(item_names.OVERLORD_VENTRAL_SACS, player),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_Z.mission_name,
"Third Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 1503,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state)
and (
(adv_tactics and logic.zerg_moderate_anti_air(state))
or logic.zerg_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_Z.mission_name,
"Fourth Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 1504,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state)
and (
(adv_tactics and logic.zerg_moderate_anti_air(state))
or logic.zerg_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_Z.mission_name,
"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_moderate_anti_air(state))
or logic.zerg_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_Z.mission_name,
"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_moderate_anti_air(state))
or logic.zerg_competent_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_Z.mission_name,
"Defeat Kerrigan",
SC2_RACESWAP_LOC_ID_OFFSET + 1507,
LocationType.MASTERY,
lambda state: (
logic.zerg_common_unit_competent_aa(state)
and logic.zerg_base_buster(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_P.mission_name,
"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_anti_light_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_P.mission_name,
"First Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 1601,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_P.mission_name,
"Second Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 1602,
LocationType.VANILLA,
lambda state: adv_tactics or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_P.mission_name,
"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_anti_light_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_P.mission_name,
"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_anti_light_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_P.mission_name,
"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_anti_light_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_P.mission_name,
"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_anti_light_anti_air(state)
)
),
),
make_location_data(
SC2Mission.SMASH_AND_GRAB_P.mission_name,
"Defeat Kerrigan",
SC2_RACESWAP_LOC_ID_OFFSET + 1607,
LocationType.MASTERY,
logic.protoss_deathball,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.THE_DIG_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 1700,
LocationType.VICTORY,
lambda state: (
(
logic.zerg_competent_anti_air(state)
or adv_tactics
and logic.zerg_moderate_anti_air(state)
)
and logic.zerg_defense_rating(state, False, True) >= 8
and logic.zerg_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_Z.mission_name,
"Left Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 1701,
LocationType.VANILLA,
lambda state: (
logic.zerg_defense_rating(state, False, False) >= 6
and logic.zerg_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_Z.mission_name,
"Right Ground Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 1702,
LocationType.VANILLA,
lambda state: (
logic.zerg_defense_rating(state, False, False) >= 6
and logic.zerg_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_Z.mission_name,
"Right Cliff Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 1703,
LocationType.VANILLA,
lambda state: (
logic.zerg_defense_rating(state, False, False) >= 6
and logic.zerg_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_Z.mission_name,
"Moebius Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1704,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_DIG_Z.mission_name,
"Door Outer Layer",
SC2_RACESWAP_LOC_ID_OFFSET + 1705,
LocationType.EXTRA,
lambda state: (
logic.zerg_defense_rating(state, False, False) >= 6
and logic.zerg_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_Z.mission_name,
"Door Thermal Barrier",
SC2_RACESWAP_LOC_ID_OFFSET + 1706,
LocationType.EXTRA,
lambda state: (
(
logic.zerg_competent_anti_air(state)
or adv_tactics
and logic.zerg_moderate_anti_air(state)
)
and logic.zerg_defense_rating(state, False, True) >= 8
and logic.zerg_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_Z.mission_name,
"Cutting Through the Core",
SC2_RACESWAP_LOC_ID_OFFSET + 1707,
LocationType.EXTRA,
lambda state: (
(
logic.zerg_competent_anti_air(state)
or adv_tactics
and logic.zerg_moderate_anti_air(state)
)
and logic.zerg_defense_rating(state, False, True) >= 8
and logic.zerg_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_Z.mission_name,
"Structure Access Imminent",
SC2_RACESWAP_LOC_ID_OFFSET + 1708,
LocationType.EXTRA,
lambda state: (
(
logic.zerg_competent_anti_air(state)
or adv_tactics
and logic.zerg_moderate_anti_air(state)
)
and logic.zerg_defense_rating(state, False, True) >= 8
and logic.zerg_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_Z.mission_name,
"Northwestern Protoss Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1709,
LocationType.MASTERY,
lambda state: (
logic.zerg_competent_anti_air(state)
and logic.zerg_defense_rating(state, False, True) >= 8
and logic.zerg_common_unit(state)
and logic.zerg_base_buster(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.THE_DIG_Z.mission_name,
"Northeastern Protoss Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1710,
LocationType.MASTERY,
lambda state: (
logic.zerg_competent_anti_air(state)
and logic.zerg_defense_rating(state, False, True) >= 8
and logic.zerg_common_unit(state)
and logic.zerg_base_buster(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.THE_DIG_Z.mission_name,
"Eastern Protoss Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1711,
LocationType.MASTERY,
lambda state: (
logic.zerg_competent_anti_air(state)
and logic.zerg_defense_rating(state, False, True) >= 8
and logic.zerg_common_unit(state)
and logic.zerg_base_buster(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.THE_DIG_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 1800,
LocationType.VICTORY,
lambda state: (
(
logic.protoss_anti_armor_anti_air(state)
or adv_tactics
and logic.protoss_moderate_anti_air(state)
)
and logic.protoss_defense_rating(state, False) >= 6
and logic.protoss_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_P.mission_name,
"Left Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 1801,
LocationType.VANILLA,
lambda state: (
logic.protoss_defense_rating(state, False) >= 6
and logic.protoss_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_P.mission_name,
"Right Ground Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 1802,
LocationType.VANILLA,
lambda state: (
logic.protoss_defense_rating(state, False) >= 6
and logic.protoss_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_P.mission_name,
"Right Cliff Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 1803,
LocationType.VANILLA,
lambda state: (
logic.protoss_defense_rating(state, False) >= 6
and logic.protoss_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_P.mission_name,
"Moebius Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1804,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_DIG_P.mission_name,
"Door Outer Layer",
SC2_RACESWAP_LOC_ID_OFFSET + 1805,
LocationType.EXTRA,
lambda state: (
logic.protoss_defense_rating(state, False) >= 6
and logic.protoss_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_P.mission_name,
"Door Thermal Barrier",
SC2_RACESWAP_LOC_ID_OFFSET + 1806,
LocationType.EXTRA,
lambda state: (
(
logic.protoss_anti_armor_anti_air(state)
or adv_tactics
and logic.protoss_moderate_anti_air(state)
)
and logic.protoss_defense_rating(state, False) >= 6
and logic.protoss_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_P.mission_name,
"Cutting Through the Core",
SC2_RACESWAP_LOC_ID_OFFSET + 1807,
LocationType.EXTRA,
lambda state: (
(
logic.protoss_anti_armor_anti_air(state)
or adv_tactics
and logic.protoss_moderate_anti_air(state)
)
and logic.protoss_defense_rating(state, False) >= 6
and logic.protoss_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_P.mission_name,
"Structure Access Imminent",
SC2_RACESWAP_LOC_ID_OFFSET + 1808,
LocationType.EXTRA,
lambda state: (
(
logic.protoss_anti_armor_anti_air(state)
or adv_tactics
and logic.protoss_moderate_anti_air(state)
)
and logic.protoss_defense_rating(state, False) >= 6
and logic.protoss_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_DIG_P.mission_name,
"Northwestern Protoss Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1809,
LocationType.MASTERY,
lambda state: (
logic.protoss_anti_armor_anti_air(state)
and logic.protoss_defense_rating(state, False) >= 6
and logic.protoss_common_unit(state)
and logic.protoss_deathball(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.THE_DIG_P.mission_name,
"Northeastern Protoss Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1810,
LocationType.MASTERY,
lambda state: (
logic.protoss_anti_armor_anti_air(state)
and logic.protoss_defense_rating(state, False) >= 6
and logic.protoss_common_unit(state)
and logic.protoss_deathball(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.THE_DIG_P.mission_name,
"Eastern Protoss Base",
SC2_RACESWAP_LOC_ID_OFFSET + 1811,
LocationType.MASTERY,
lambda state: (
logic.protoss_anti_armor_anti_air(state)
and logic.protoss_defense_rating(state, False) >= 6
and logic.protoss_common_unit(state)
and logic.protoss_deathball(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 1900,
LocationType.VICTORY,
lambda state: (
logic.zerg_moderate_anti_air(state)
and (
logic.zerg_versatile_air(state)
or state.has_any(
{
item_names.YGGDRASIL,
item_names.OVERLORD_VENTRAL_SACS,
item_names.NYDUS_WORM,
item_names.BULLFROG,
},
player,
)
and logic.zerg_common_unit(state)
)
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_Z.mission_name,
"1st Data Core",
SC2_RACESWAP_LOC_ID_OFFSET + 1901,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_Z.mission_name,
"2nd Data Core",
SC2_RACESWAP_LOC_ID_OFFSET + 1902,
LocationType.VANILLA,
lambda state: (
logic.zerg_versatile_air(state)
or state.has_any(
{
item_names.YGGDRASIL,
item_names.OVERLORD_VENTRAL_SACS,
item_names.NYDUS_WORM,
item_names.BULLFROG,
},
player,
)
and logic.zerg_common_unit(state)
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_Z.mission_name,
"South Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 1903,
LocationType.EXTRA,
lambda state: state.has_any(
{
item_names.YGGDRASIL,
item_names.OVERLORD_VENTRAL_SACS,
item_names.NYDUS_WORM,
item_names.BULLFROG,
},
player,
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_Z.mission_name,
"Wall Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 1904,
LocationType.EXTRA,
lambda state: state.has_any(
{
item_names.YGGDRASIL,
item_names.OVERLORD_VENTRAL_SACS,
item_names.NYDUS_WORM,
item_names.BULLFROG,
},
player,
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_Z.mission_name,
"Mid Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 1905,
LocationType.EXTRA,
lambda state: state.has_any(
{
item_names.YGGDRASIL,
item_names.OVERLORD_VENTRAL_SACS,
item_names.NYDUS_WORM,
item_names.BULLFROG,
},
player,
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_Z.mission_name,
"Nydus Roof Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 1906,
LocationType.EXTRA,
lambda state: state.has_any(
{
item_names.YGGDRASIL,
item_names.OVERLORD_VENTRAL_SACS,
item_names.NYDUS_WORM,
item_names.BULLFROG,
},
player,
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_Z.mission_name,
"Alive Inside Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 1907,
LocationType.EXTRA,
lambda state: state.has_any(
{
item_names.YGGDRASIL,
item_names.OVERLORD_VENTRAL_SACS,
item_names.NYDUS_WORM,
item_names.BULLFROG,
},
player,
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_Z.mission_name,
"Brutalisk",
SC2_RACESWAP_LOC_ID_OFFSET + 1908,
LocationType.VANILLA,
lambda state: (
logic.zerg_moderate_anti_air(state)
and (
logic.zerg_versatile_air(state)
or state.has_any(
{
item_names.YGGDRASIL,
item_names.OVERLORD_VENTRAL_SACS,
item_names.NYDUS_WORM,
item_names.BULLFROG,
},
player,
)
and logic.zerg_common_unit(state)
)
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_Z.mission_name,
"3rd Data Core",
SC2_RACESWAP_LOC_ID_OFFSET + 1909,
LocationType.VANILLA,
lambda state: (
logic.zerg_moderate_anti_air(state)
and (
logic.zerg_versatile_air(state)
or state.has_any(
{
item_names.YGGDRASIL,
item_names.OVERLORD_VENTRAL_SACS,
item_names.NYDUS_WORM,
item_names.BULLFROG,
},
player,
)
and logic.zerg_common_unit(state)
)
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 2000,
LocationType.VICTORY,
lambda state: (
logic.protoss_moderate_anti_air(state)
and (
logic.protoss_fleet(state)
or state.has(item_names.WARP_PRISM, player)
and logic.protoss_common_unit(state)
)
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_P.mission_name,
"1st Data Core",
SC2_RACESWAP_LOC_ID_OFFSET + 2001,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_P.mission_name,
"2nd Data Core",
SC2_RACESWAP_LOC_ID_OFFSET + 2002,
LocationType.VANILLA,
lambda state: (
logic.protoss_fleet(state)
or (
state.has(item_names.WARP_PRISM, player)
and logic.protoss_common_unit(state)
)
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_P.mission_name,
"South Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 2003,
LocationType.EXTRA,
lambda state: adv_tactics or state.has(item_names.WARP_PRISM, player),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_P.mission_name,
"Wall Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 2004,
LocationType.EXTRA,
lambda state: adv_tactics or state.has(item_names.WARP_PRISM, player),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_P.mission_name,
"Mid Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 2005,
LocationType.EXTRA,
lambda state: adv_tactics or state.has(item_names.WARP_PRISM, player),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_P.mission_name,
"Nydus Roof Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 2006,
LocationType.EXTRA,
lambda state: adv_tactics or state.has(item_names.WARP_PRISM, player),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_P.mission_name,
"Alive Inside Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 2007,
LocationType.EXTRA,
lambda state: adv_tactics or state.has(item_names.WARP_PRISM, player),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_P.mission_name,
"Brutalisk",
SC2_RACESWAP_LOC_ID_OFFSET + 2008,
LocationType.VANILLA,
lambda state: (
logic.protoss_moderate_anti_air(state)
and (
logic.protoss_fleet(state)
or state.has(item_names.WARP_PRISM, player)
and logic.protoss_common_unit(state)
)
),
),
make_location_data(
SC2Mission.THE_MOEBIUS_FACTOR_P.mission_name,
"3rd Data Core",
SC2_RACESWAP_LOC_ID_OFFSET + 2009,
LocationType.VANILLA,
lambda state: (
logic.protoss_moderate_anti_air(state)
and (
logic.protoss_fleet(state)
or state.has(item_names.WARP_PRISM, player)
and logic.protoss_common_unit(state)
)
),
),
make_location_data(
SC2Mission.SUPERNOVA_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 2100,
LocationType.VICTORY,
logic.zerg_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA_Z.mission_name,
"West Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2101,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.SUPERNOVA_Z.mission_name,
"North Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2102,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.SUPERNOVA_Z.mission_name,
"South Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2103,
LocationType.VANILLA,
logic.zerg_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA_Z.mission_name,
"East Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2104,
LocationType.VANILLA,
logic.zerg_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA_Z.mission_name,
"Landing Zone Cleared",
SC2_RACESWAP_LOC_ID_OFFSET + 2105,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.SUPERNOVA_Z.mission_name,
"Middle Base",
SC2_RACESWAP_LOC_ID_OFFSET + 2106,
LocationType.EXTRA,
logic.zerg_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA_Z.mission_name,
"Southeast Base",
SC2_RACESWAP_LOC_ID_OFFSET + 2107,
LocationType.EXTRA,
logic.zerg_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 2200,
LocationType.VICTORY,
logic.protoss_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA_P.mission_name,
"West Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2201,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.SUPERNOVA_P.mission_name,
"North Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2202,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.SUPERNOVA_P.mission_name,
"South Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2203,
LocationType.VANILLA,
logic.protoss_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA_P.mission_name,
"East Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2204,
LocationType.VANILLA,
logic.protoss_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA_P.mission_name,
"Landing Zone Cleared",
SC2_RACESWAP_LOC_ID_OFFSET + 2205,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.SUPERNOVA_P.mission_name,
"Middle Base",
SC2_RACESWAP_LOC_ID_OFFSET + 2206,
LocationType.EXTRA,
logic.protoss_supernova_requirement,
),
make_location_data(
SC2Mission.SUPERNOVA_P.mission_name,
"Southeast Base",
SC2_RACESWAP_LOC_ID_OFFSET + 2207,
LocationType.EXTRA,
logic.protoss_supernova_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 2300,
LocationType.VICTORY,
logic.zerg_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"Landing Zone Cleared",
SC2_RACESWAP_LOC_ID_OFFSET + 2301,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"Expansion Prisoners",
SC2_RACESWAP_LOC_ID_OFFSET + 2302,
LocationType.VANILLA,
logic.zerg_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"South Close Prisoners",
SC2_RACESWAP_LOC_ID_OFFSET + 2303,
LocationType.VANILLA,
logic.zerg_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"South Far Prisoners",
SC2_RACESWAP_LOC_ID_OFFSET + 2304,
LocationType.VANILLA,
logic.zerg_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"North Prisoners",
SC2_RACESWAP_LOC_ID_OFFSET + 2305,
LocationType.VANILLA,
logic.zerg_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"Mothership",
SC2_RACESWAP_LOC_ID_OFFSET + 2306,
LocationType.EXTRA,
logic.zerg_maw_requirement,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"Expansion Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2307,
LocationType.EXTRA,
logic.zerg_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"Middle Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2308,
LocationType.EXTRA,
logic.zerg_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"Southeast Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2309,
LocationType.EXTRA,
logic.zerg_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"Stargate Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2310,
LocationType.EXTRA,
logic.zerg_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"Northwest Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2311,
LocationType.CHALLENGE,
logic.zerg_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"West Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2312,
LocationType.CHALLENGE,
logic.zerg_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_Z.mission_name,
"Southwest Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2313,
LocationType.CHALLENGE,
logic.zerg_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 2400,
LocationType.VICTORY,
logic.protoss_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"Landing Zone Cleared",
SC2_RACESWAP_LOC_ID_OFFSET + 2401,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"Expansion Prisoners",
SC2_RACESWAP_LOC_ID_OFFSET + 2402,
LocationType.VANILLA,
lambda state: adv_tactics or logic.protoss_maw_requirement(state),
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"South Close Prisoners",
SC2_RACESWAP_LOC_ID_OFFSET + 2403,
LocationType.VANILLA,
lambda state: adv_tactics or logic.protoss_maw_requirement(state),
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"South Far Prisoners",
SC2_RACESWAP_LOC_ID_OFFSET + 2404,
LocationType.VANILLA,
logic.protoss_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"North Prisoners",
SC2_RACESWAP_LOC_ID_OFFSET + 2405,
LocationType.VANILLA,
logic.protoss_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"Mothership",
SC2_RACESWAP_LOC_ID_OFFSET + 2406,
LocationType.EXTRA,
logic.protoss_maw_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"Expansion Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2407,
LocationType.EXTRA,
lambda state: adv_tactics or logic.protoss_maw_requirement(state),
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"Middle Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2408,
LocationType.EXTRA,
logic.protoss_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"Southeast Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2409,
LocationType.EXTRA,
logic.protoss_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"Stargate Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2410,
LocationType.EXTRA,
logic.protoss_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"Northwest Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2411,
LocationType.CHALLENGE,
logic.protoss_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"West Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2412,
LocationType.CHALLENGE,
logic.protoss_maw_requirement,
),
make_location_data(
SC2Mission.MAW_OF_THE_VOID_P.mission_name,
"Southwest Rip Field Generator",
SC2_RACESWAP_LOC_ID_OFFSET + 2413,
LocationType.CHALLENGE,
logic.protoss_maw_requirement,
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 2500,
LocationType.VICTORY,
lambda state: (
logic.zerg_moderate_anti_air(state)
and logic.zerg_common_unit(state)
),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_Z.mission_name,
"Tosh's Miners",
SC2_RACESWAP_LOC_ID_OFFSET + 2501,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_Z.mission_name,
"Brutalisk",
SC2_RACESWAP_LOC_ID_OFFSET + 2502,
LocationType.VANILLA,
lambda state: logic.zerg_common_unit(state),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_Z.mission_name,
"North Reinforcements",
SC2_RACESWAP_LOC_ID_OFFSET + 2503,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_Z.mission_name,
"Middle Reinforcements",
SC2_RACESWAP_LOC_ID_OFFSET + 2504,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_Z.mission_name,
"Southwest Reinforcements",
SC2_RACESWAP_LOC_ID_OFFSET + 2505,
LocationType.EXTRA,
lambda state: logic.zerg_common_unit(state),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_Z.mission_name,
"Southeast Reinforcements",
SC2_RACESWAP_LOC_ID_OFFSET + 2506,
LocationType.EXTRA,
lambda state: (
logic.zerg_moderate_anti_air(state)
and logic.zerg_common_unit(state)
),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_Z.mission_name,
"East Reinforcements",
SC2_RACESWAP_LOC_ID_OFFSET + 2507,
LocationType.EXTRA,
lambda state: (
logic.zerg_moderate_anti_air(state)
and logic.zerg_common_unit(state)
),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_Z.mission_name,
"Zerg Cleared",
SC2_RACESWAP_LOC_ID_OFFSET + 2508,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_competent_anti_air(state)
and logic.zerg_common_unit(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 2600,
LocationType.VICTORY,
lambda state: (
adv_tactics
or logic.protoss_basic_anti_air(state)
and logic.protoss_common_unit(state)
),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_P.mission_name,
"Tosh's Miners",
SC2_RACESWAP_LOC_ID_OFFSET + 2601,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_P.mission_name,
"Brutalisk",
SC2_RACESWAP_LOC_ID_OFFSET + 2602,
LocationType.VANILLA,
lambda state: adv_tactics or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_P.mission_name,
"North Reinforcements",
SC2_RACESWAP_LOC_ID_OFFSET + 2603,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_P.mission_name,
"Middle Reinforcements",
SC2_RACESWAP_LOC_ID_OFFSET + 2604,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_P.mission_name,
"Southwest Reinforcements",
SC2_RACESWAP_LOC_ID_OFFSET + 2605,
LocationType.EXTRA,
lambda state: adv_tactics or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_P.mission_name,
"Southeast Reinforcements",
SC2_RACESWAP_LOC_ID_OFFSET + 2606,
LocationType.EXTRA,
lambda state: (
adv_tactics
or logic.protoss_basic_anti_air(state)
and logic.protoss_common_unit(state)
),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_P.mission_name,
"East Reinforcements",
SC2_RACESWAP_LOC_ID_OFFSET + 2607,
LocationType.EXTRA,
lambda state: (
adv_tactics
or logic.protoss_basic_anti_air(state)
and logic.protoss_common_unit(state)
),
),
make_location_data(
SC2Mission.DEVILS_PLAYGROUND_P.mission_name,
"Zerg Cleared",
SC2_RACESWAP_LOC_ID_OFFSET + 2608,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_competent_anti_air(state)
and (logic.protoss_common_unit(state))
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 2700,
LocationType.VICTORY,
logic.zerg_welcome_to_the_jungle_requirement,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_Z.mission_name,
"Close Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2701,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_Z.mission_name,
"West Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2702,
LocationType.VANILLA,
logic.zerg_welcome_to_the_jungle_requirement,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_Z.mission_name,
"North-East Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2703,
LocationType.VANILLA,
logic.zerg_welcome_to_the_jungle_requirement,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_Z.mission_name,
"Middle Base",
SC2_RACESWAP_LOC_ID_OFFSET + 2704,
LocationType.EXTRA,
logic.zerg_welcome_to_the_jungle_requirement,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_Z.mission_name,
"Protoss Cleared",
SC2_RACESWAP_LOC_ID_OFFSET + 2705,
LocationType.MASTERY,
lambda state: (
logic.zerg_welcome_to_the_jungle_requirement(state)
and logic.zerg_competent_anti_air(state)
and logic.zerg_base_buster(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_Z.mission_name,
"No Terrazine Nodes Sealed",
SC2_RACESWAP_LOC_ID_OFFSET + 2706,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_welcome_to_the_jungle_requirement(state)
and logic.zerg_competent_anti_air(state)
and logic.zerg_big_monsters(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_Z.mission_name,
"Up to 1 Terrazine Node Sealed",
SC2_RACESWAP_LOC_ID_OFFSET + 2707,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_welcome_to_the_jungle_requirement(state)
and logic.zerg_competent_anti_air(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_Z.mission_name,
"Up to 2 Terrazine Nodes Sealed",
SC2_RACESWAP_LOC_ID_OFFSET + 2708,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_welcome_to_the_jungle_requirement(state)
and logic.zerg_competent_anti_air(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_Z.mission_name,
"Up to 3 Terrazine Nodes Sealed",
SC2_RACESWAP_LOC_ID_OFFSET + 2709,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_welcome_to_the_jungle_requirement(state)
and logic.zerg_competent_anti_air(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_Z.mission_name,
"Up to 4 Terrazine Nodes Sealed",
SC2_RACESWAP_LOC_ID_OFFSET + 2710,
LocationType.EXTRA,
logic.zerg_welcome_to_the_jungle_requirement,
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_Z.mission_name,
"Up to 5 Terrazine Nodes Sealed",
SC2_RACESWAP_LOC_ID_OFFSET + 2711,
LocationType.EXTRA,
logic.zerg_welcome_to_the_jungle_requirement,
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 2800,
LocationType.VICTORY,
logic.protoss_welcome_to_the_jungle_requirement,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_P.mission_name,
"Close Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2801,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_P.mission_name,
"West Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2802,
LocationType.VANILLA,
logic.protoss_welcome_to_the_jungle_requirement,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_P.mission_name,
"North-East Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 2803,
LocationType.VANILLA,
logic.protoss_welcome_to_the_jungle_requirement,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_P.mission_name,
"Middle Base",
SC2_RACESWAP_LOC_ID_OFFSET + 2804,
LocationType.EXTRA,
logic.protoss_welcome_to_the_jungle_requirement,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_P.mission_name,
"Protoss Cleared",
SC2_RACESWAP_LOC_ID_OFFSET + 2805,
LocationType.MASTERY,
lambda state: (
logic.protoss_welcome_to_the_jungle_requirement(state)
and logic.protoss_competent_comp(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_P.mission_name,
"No Terrazine Nodes Sealed",
SC2_RACESWAP_LOC_ID_OFFSET + 2806,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_welcome_to_the_jungle_requirement(state)
and logic.protoss_competent_comp(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_P.mission_name,
"Up to 1 Terrazine Node Sealed",
SC2_RACESWAP_LOC_ID_OFFSET + 2807,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_welcome_to_the_jungle_requirement(state)
and logic.protoss_competent_comp(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_P.mission_name,
"Up to 2 Terrazine Nodes Sealed",
SC2_RACESWAP_LOC_ID_OFFSET + 2808,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_welcome_to_the_jungle_requirement(state)
and logic.protoss_basic_splash(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_P.mission_name,
"Up to 3 Terrazine Nodes Sealed",
SC2_RACESWAP_LOC_ID_OFFSET + 2809,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_welcome_to_the_jungle_requirement(state)
and logic.protoss_basic_splash(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_P.mission_name,
"Up to 4 Terrazine Nodes Sealed",
SC2_RACESWAP_LOC_ID_OFFSET + 2810,
LocationType.EXTRA,
logic.protoss_welcome_to_the_jungle_requirement,
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.WELCOME_TO_THE_JUNGLE_P.mission_name,
"Up to 5 Terrazine Nodes Sealed",
SC2_RACESWAP_LOC_ID_OFFSET + 2811,
LocationType.EXTRA,
logic.protoss_welcome_to_the_jungle_requirement,
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 3300,
LocationType.VICTORY,
lambda state: (
logic.zerg_great_train_robbery_train_stopper(state)
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"North Defiler",
SC2_RACESWAP_LOC_ID_OFFSET + 3301,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"Mid Defiler",
SC2_RACESWAP_LOC_ID_OFFSET + 3302,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"South Defiler",
SC2_RACESWAP_LOC_ID_OFFSET + 3303,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"Close Infested Diamondback",
SC2_RACESWAP_LOC_ID_OFFSET + 3304,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"Northwest Infested Diamondback",
SC2_RACESWAP_LOC_ID_OFFSET + 3305,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"North Infested Diamondback",
SC2_RACESWAP_LOC_ID_OFFSET + 3306,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"Northeast Infested Diamondback",
SC2_RACESWAP_LOC_ID_OFFSET + 3307,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"Southwest Infested Diamondback",
SC2_RACESWAP_LOC_ID_OFFSET + 3308,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"Southeast Infested Diamondback",
SC2_RACESWAP_LOC_ID_OFFSET + 3309,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"Kill Team",
SC2_RACESWAP_LOC_ID_OFFSET + 3310,
LocationType.CHALLENGE,
lambda state: (
(adv_tactics or logic.zerg_common_unit(state))
and logic.zerg_great_train_robbery_train_stopper(state)
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"Flawless",
SC2_RACESWAP_LOC_ID_OFFSET + 3311,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_great_train_robbery_train_stopper(state)
and logic.zerg_basic_kerriganless_anti_air(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"2 Trains Destroyed",
SC2_RACESWAP_LOC_ID_OFFSET + 3312,
LocationType.EXTRA,
logic.zerg_great_train_robbery_train_stopper,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"4 Trains Destroyed",
SC2_RACESWAP_LOC_ID_OFFSET + 3313,
LocationType.EXTRA,
lambda state: (
logic.zerg_great_train_robbery_train_stopper(state)
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_Z.mission_name,
"6 Trains Destroyed",
SC2_RACESWAP_LOC_ID_OFFSET + 3314,
LocationType.EXTRA,
lambda state: (
logic.zerg_great_train_robbery_train_stopper(state)
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 3400,
LocationType.VICTORY,
lambda state: (
logic.protoss_great_train_robbery_train_stopper(state)
and logic.protoss_basic_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"North Defiler",
SC2_RACESWAP_LOC_ID_OFFSET + 3401,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"Mid Defiler",
SC2_RACESWAP_LOC_ID_OFFSET + 3402,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"South Defiler",
SC2_RACESWAP_LOC_ID_OFFSET + 3403,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"Close Immortal",
SC2_RACESWAP_LOC_ID_OFFSET + 3404,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"Northwest Immortal",
SC2_RACESWAP_LOC_ID_OFFSET + 3405,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"North Instigator",
SC2_RACESWAP_LOC_ID_OFFSET + 3406,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"Northeast Instigator",
SC2_RACESWAP_LOC_ID_OFFSET + 3407,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"Southwest Instigator",
SC2_RACESWAP_LOC_ID_OFFSET + 3408,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"Southeast Immortal",
SC2_RACESWAP_LOC_ID_OFFSET + 3409,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"Kill Team",
SC2_RACESWAP_LOC_ID_OFFSET + 3410,
LocationType.CHALLENGE,
lambda state: (
(adv_tactics or logic.protoss_common_unit(state))
and logic.protoss_great_train_robbery_train_stopper(state)
and logic.protoss_basic_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"Flawless",
SC2_RACESWAP_LOC_ID_OFFSET + 3411,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_great_train_robbery_train_stopper(state)
and logic.protoss_basic_anti_air(state)
),
flags=LocationFlag.PREVENTATIVE,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"2 Trains Destroyed",
SC2_RACESWAP_LOC_ID_OFFSET + 3412,
LocationType.EXTRA,
logic.protoss_great_train_robbery_train_stopper,
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"4 Trains Destroyed",
SC2_RACESWAP_LOC_ID_OFFSET + 3413,
LocationType.EXTRA,
lambda state: (
logic.protoss_great_train_robbery_train_stopper(state)
and logic.protoss_basic_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GREAT_TRAIN_ROBBERY_P.mission_name,
"6 Trains Destroyed",
SC2_RACESWAP_LOC_ID_OFFSET + 3414,
LocationType.EXTRA,
lambda state: (
logic.protoss_great_train_robbery_train_stopper(state)
and logic.protoss_basic_anti_air(state)
),
),
make_location_data(
SC2Mission.CUTTHROAT_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 3500,
LocationType.VICTORY,
lambda state: (
logic.zerg_common_unit(state)
and (adv_tactics or logic.zerg_moderate_anti_air(state))
),
),
make_location_data(
SC2Mission.CUTTHROAT_Z.mission_name,
"Mira Han",
SC2_RACESWAP_LOC_ID_OFFSET + 3501,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT_Z.mission_name,
"North Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 3502,
LocationType.VANILLA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT_Z.mission_name,
"Mid Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 3503,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.CUTTHROAT_Z.mission_name,
"Southwest Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 3504,
LocationType.VANILLA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT_Z.mission_name,
"North Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 3505,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT_Z.mission_name,
"South Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 3506,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT_Z.mission_name,
"West Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 3507,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 3600,
LocationType.VICTORY,
lambda state: (
logic.protoss_common_unit(state)
and (adv_tactics or logic.protoss_basic_anti_air(state))
),
),
make_location_data(
SC2Mission.CUTTHROAT_P.mission_name,
"Mira Han",
SC2_RACESWAP_LOC_ID_OFFSET + 3601,
LocationType.EXTRA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT_P.mission_name,
"North Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 3602,
LocationType.VANILLA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT_P.mission_name,
"Mid Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 3603,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.CUTTHROAT_P.mission_name,
"Southwest Relic",
SC2_RACESWAP_LOC_ID_OFFSET + 3604,
LocationType.VANILLA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT_P.mission_name,
"North Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 3605,
LocationType.EXTRA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT_P.mission_name,
"South Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 3606,
LocationType.EXTRA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.CUTTHROAT_P.mission_name,
"West Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 3607,
LocationType.EXTRA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 3700,
LocationType.VICTORY,
logic.zerg_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_Z.mission_name,
"Odin",
SC2_RACESWAP_LOC_ID_OFFSET + 3701,
LocationType.EXTRA,
logic.zergling_hydra_roach_start,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_Z.mission_name,
"Loki",
SC2_RACESWAP_LOC_ID_OFFSET + 3702,
LocationType.CHALLENGE,
logic.zerg_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_Z.mission_name,
"Lab Devourer",
SC2_RACESWAP_LOC_ID_OFFSET + 3703,
LocationType.VANILLA,
logic.zergling_hydra_roach_start,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_Z.mission_name,
"North Devourer",
SC2_RACESWAP_LOC_ID_OFFSET + 3704,
LocationType.VANILLA,
logic.zerg_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_Z.mission_name,
"Southeast Devourer",
SC2_RACESWAP_LOC_ID_OFFSET + 3705,
LocationType.VANILLA,
logic.zerg_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_Z.mission_name,
"West Base",
SC2_RACESWAP_LOC_ID_OFFSET + 3706,
LocationType.EXTRA,
logic.zerg_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_Z.mission_name,
"Northwest Base",
SC2_RACESWAP_LOC_ID_OFFSET + 3707,
LocationType.EXTRA,
logic.zerg_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_Z.mission_name,
"Northeast Base",
SC2_RACESWAP_LOC_ID_OFFSET + 3708,
LocationType.EXTRA,
logic.zerg_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_Z.mission_name,
"Southeast Base",
SC2_RACESWAP_LOC_ID_OFFSET + 3709,
LocationType.EXTRA,
logic.zerg_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 3800,
LocationType.VICTORY,
logic.protoss_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_P.mission_name,
"Odin",
SC2_RACESWAP_LOC_ID_OFFSET + 3801,
LocationType.EXTRA,
logic.zealot_sentry_slayer_start,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_P.mission_name,
"Loki",
SC2_RACESWAP_LOC_ID_OFFSET + 3802,
LocationType.CHALLENGE,
logic.protoss_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_P.mission_name,
"Lab Devourer",
SC2_RACESWAP_LOC_ID_OFFSET + 3803,
LocationType.VANILLA,
logic.zealot_sentry_slayer_start,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_P.mission_name,
"North Devourer",
SC2_RACESWAP_LOC_ID_OFFSET + 3804,
LocationType.VANILLA,
logic.protoss_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_P.mission_name,
"Southeast Devourer",
SC2_RACESWAP_LOC_ID_OFFSET + 3805,
LocationType.VANILLA,
logic.protoss_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_P.mission_name,
"West Base",
SC2_RACESWAP_LOC_ID_OFFSET + 3806,
LocationType.EXTRA,
logic.protoss_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_P.mission_name,
"Northwest Base",
SC2_RACESWAP_LOC_ID_OFFSET + 3807,
LocationType.EXTRA,
logic.protoss_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_P.mission_name,
"Northeast Base",
SC2_RACESWAP_LOC_ID_OFFSET + 3808,
LocationType.EXTRA,
logic.protoss_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.ENGINE_OF_DESTRUCTION_P.mission_name,
"Southeast Base",
SC2_RACESWAP_LOC_ID_OFFSET + 3809,
LocationType.EXTRA,
logic.protoss_engine_of_destruction_requirement,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 3900,
LocationType.VICTORY,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_Z.mission_name,
"Tower 1",
SC2_RACESWAP_LOC_ID_OFFSET + 3901,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_Z.mission_name,
"Tower 2",
SC2_RACESWAP_LOC_ID_OFFSET + 3902,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_Z.mission_name,
"Tower 3",
SC2_RACESWAP_LOC_ID_OFFSET + 3903,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_Z.mission_name,
"Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 3904,
LocationType.VANILLA,
lambda state: (
logic.advanced_tactics or logic.zerg_competent_comp_competent_aa(state)
),
),
make_location_data(
SC2Mission.MEDIA_BLITZ_Z.mission_name,
"All Barracks",
SC2_RACESWAP_LOC_ID_OFFSET + 3905,
LocationType.EXTRA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_Z.mission_name,
"All Factories",
SC2_RACESWAP_LOC_ID_OFFSET + 3906,
LocationType.EXTRA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_Z.mission_name,
"All Starports",
SC2_RACESWAP_LOC_ID_OFFSET + 3907,
LocationType.EXTRA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_Z.mission_name,
"Odin Not Trashed",
SC2_RACESWAP_LOC_ID_OFFSET + 3908,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_competent_comp_competent_aa(state)
and logic.zerg_repair_odin(state)
),
),
make_location_data(
SC2Mission.MEDIA_BLITZ_Z.mission_name,
"Surprise Attack Ends",
SC2_RACESWAP_LOC_ID_OFFSET + 3909,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 4000,
LocationType.VICTORY,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_P.mission_name,
"Tower 1",
SC2_RACESWAP_LOC_ID_OFFSET + 4001,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_P.mission_name,
"Tower 2",
SC2_RACESWAP_LOC_ID_OFFSET + 4002,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_P.mission_name,
"Tower 3",
SC2_RACESWAP_LOC_ID_OFFSET + 4003,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_P.mission_name,
"Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 4004,
LocationType.VANILLA,
lambda state: adv_tactics or logic.protoss_competent_comp(state),
),
make_location_data(
SC2Mission.MEDIA_BLITZ_P.mission_name,
"All Barracks",
SC2_RACESWAP_LOC_ID_OFFSET + 4005,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_P.mission_name,
"All Factories",
SC2_RACESWAP_LOC_ID_OFFSET + 4006,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.MEDIA_BLITZ_P.mission_name,
"All Starports",
SC2_RACESWAP_LOC_ID_OFFSET + 4007,
LocationType.EXTRA,
lambda state: adv_tactics or logic.protoss_competent_comp(state),
),
make_location_data(
SC2Mission.MEDIA_BLITZ_P.mission_name,
"Odin Not Trashed",
SC2_RACESWAP_LOC_ID_OFFSET + 4008,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_competent_comp(state) and logic.protoss_repair_odin(state)
),
),
make_location_data(
SC2Mission.MEDIA_BLITZ_P.mission_name,
"Surprise Attack Ends",
SC2_RACESWAP_LOC_ID_OFFSET + 4009,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.A_SINISTER_TURN_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 4500,
LocationType.VICTORY,
lambda state: (
logic.terran_competent_comp(state)
and logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_T.mission_name,
"Factory",
SC2_RACESWAP_LOC_ID_OFFSET + 4501,
LocationType.VANILLA,
lambda state: adv_tactics or logic.terran_common_unit(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_T.mission_name,
"Armory",
SC2_RACESWAP_LOC_ID_OFFSET + 4502,
LocationType.VANILLA,
lambda state: adv_tactics or logic.terran_common_unit(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_T.mission_name,
"Shadow Ops",
SC2_RACESWAP_LOC_ID_OFFSET + 4503,
LocationType.VANILLA,
lambda state: logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_T.mission_name,
"Northeast Base",
SC2_RACESWAP_LOC_ID_OFFSET + 4504,
LocationType.EXTRA,
lambda state: logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_T.mission_name,
"Southwest Base",
SC2_RACESWAP_LOC_ID_OFFSET + 4505,
LocationType.CHALLENGE,
lambda state: (
logic.terran_competent_comp(state)
and logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.A_SINISTER_TURN_T.mission_name,
"Maar",
SC2_RACESWAP_LOC_ID_OFFSET + 4506,
LocationType.EXTRA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.A_SINISTER_TURN_T.mission_name,
"Northwest Preserver",
SC2_RACESWAP_LOC_ID_OFFSET + 4507,
LocationType.EXTRA,
lambda state: (
logic.terran_competent_comp(state)
and logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_T.mission_name,
"Southwest Preserver",
SC2_RACESWAP_LOC_ID_OFFSET + 4508,
LocationType.EXTRA,
lambda state: (
logic.terran_competent_comp(state)
and logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_T.mission_name,
"East Preserver",
SC2_RACESWAP_LOC_ID_OFFSET + 4509,
LocationType.EXTRA,
lambda state: (
logic.terran_competent_comp(state)
and logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 4600,
LocationType.VICTORY,
lambda state: logic.zerg_competent_comp(state)
and logic.zerg_competent_anti_air(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_Z.mission_name,
"Ultralisk Cavern",
SC2_RACESWAP_LOC_ID_OFFSET + 4601,
LocationType.VANILLA,
lambda state: (adv_tactics or logic.zerg_common_unit(state))
and logic.spread_creep(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_Z.mission_name,
"Hydralisk Den",
SC2_RACESWAP_LOC_ID_OFFSET + 4602,
LocationType.VANILLA,
lambda state: (adv_tactics or logic.zerg_common_unit(state))
and logic.spread_creep(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_Z.mission_name,
"Infestation Pit",
SC2_RACESWAP_LOC_ID_OFFSET + 4603,
LocationType.VANILLA,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state)
and logic.spread_creep(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_Z.mission_name,
"Northeast Base",
SC2_RACESWAP_LOC_ID_OFFSET + 4604,
LocationType.EXTRA,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_Z.mission_name,
"Southwest Base",
SC2_RACESWAP_LOC_ID_OFFSET + 4605,
LocationType.CHALLENGE,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.A_SINISTER_TURN_Z.mission_name,
"Maar",
SC2_RACESWAP_LOC_ID_OFFSET + 4606,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.A_SINISTER_TURN_Z.mission_name,
"Northwest Preserver",
SC2_RACESWAP_LOC_ID_OFFSET + 4607,
LocationType.EXTRA,
lambda state: logic.zerg_competent_comp(state)
and logic.zerg_competent_anti_air(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_Z.mission_name,
"Southwest Preserver",
SC2_RACESWAP_LOC_ID_OFFSET + 4608,
LocationType.EXTRA,
lambda state: logic.zerg_competent_comp(state)
and logic.zerg_competent_anti_air(state),
),
make_location_data(
SC2Mission.A_SINISTER_TURN_Z.mission_name,
"East Preserver",
SC2_RACESWAP_LOC_ID_OFFSET + 4609,
LocationType.EXTRA,
lambda state: logic.zerg_competent_comp(state)
and logic.zerg_competent_anti_air(state),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 4700,
LocationType.VICTORY,
lambda state: logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_T.mission_name,
"Close Obelisk",
SC2_RACESWAP_LOC_ID_OFFSET + 4701,
LocationType.VANILLA,
lambda state: adv_tactics or logic.terran_common_unit(state),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_T.mission_name,
"West Obelisk",
SC2_RACESWAP_LOC_ID_OFFSET + 4702,
LocationType.VANILLA,
lambda state: adv_tactics
or (logic.terran_common_unit(state) and logic.terran_basic_anti_air(state)),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_T.mission_name,
"Base",
SC2_RACESWAP_LOC_ID_OFFSET + 4703,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_T.mission_name,
"Southwest Tendril",
SC2_RACESWAP_LOC_ID_OFFSET + 4704,
LocationType.EXTRA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_T.mission_name,
"Southeast Tendril",
SC2_RACESWAP_LOC_ID_OFFSET + 4705,
LocationType.EXTRA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_T.mission_name,
"Northeast Tendril",
SC2_RACESWAP_LOC_ID_OFFSET + 4706,
LocationType.EXTRA,
lambda state: logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_T.mission_name,
"Northwest Tendril",
SC2_RACESWAP_LOC_ID_OFFSET + 4707,
LocationType.EXTRA,
lambda state: logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 4800,
LocationType.VICTORY,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_Z.mission_name,
"Close Obelisk",
SC2_RACESWAP_LOC_ID_OFFSET + 4801,
LocationType.VANILLA,
lambda state: adv_tactics or logic.zerg_common_unit(state),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_Z.mission_name,
"West Obelisk",
SC2_RACESWAP_LOC_ID_OFFSET + 4802,
LocationType.VANILLA,
lambda state: (
adv_tactics
or (
logic.zerg_common_unit(state)
and logic.zerg_basic_kerriganless_anti_air(state)
and logic.spread_creep(state)
)
),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_Z.mission_name,
"Base",
SC2_RACESWAP_LOC_ID_OFFSET + 4803,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_Z.mission_name,
"Southwest Tendril",
SC2_RACESWAP_LOC_ID_OFFSET + 4804,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_Z.mission_name,
"Southeast Tendril",
SC2_RACESWAP_LOC_ID_OFFSET + 4805,
LocationType.EXTRA,
logic.zerg_common_unit,
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_Z.mission_name,
"Northeast Tendril",
SC2_RACESWAP_LOC_ID_OFFSET + 4806,
LocationType.EXTRA,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state),
),
make_location_data(
SC2Mission.ECHOES_OF_THE_FUTURE_Z.mission_name,
"Northwest Tendril",
SC2_RACESWAP_LOC_ID_OFFSET + 4807,
LocationType.EXTRA,
lambda state: logic.zerg_common_unit(state)
and logic.zerg_competent_anti_air(state),
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_T.mission_name,
"Defeat",
SC2_RACESWAP_LOC_ID_OFFSET + 4900,
LocationType.VICTORY,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_T.mission_name,
"Protoss Archive",
SC2_RACESWAP_LOC_ID_OFFSET + 4901,
LocationType.VANILLA,
logic.terran_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_T.mission_name,
"Kills",
SC2_RACESWAP_LOC_ID_OFFSET + 4902,
LocationType.VANILLA,
logic.terran_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_T.mission_name,
"Urun",
SC2_RACESWAP_LOC_ID_OFFSET + 4903,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_T.mission_name,
"Mohandar",
SC2_RACESWAP_LOC_ID_OFFSET + 4904,
LocationType.EXTRA,
logic.terran_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_T.mission_name,
"Selendis",
SC2_RACESWAP_LOC_ID_OFFSET + 4905,
LocationType.EXTRA,
logic.terran_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_T.mission_name,
"Artanis",
SC2_RACESWAP_LOC_ID_OFFSET + 4906,
LocationType.EXTRA,
logic.terran_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_Z.mission_name,
"Defeat",
SC2_RACESWAP_LOC_ID_OFFSET + 5000,
LocationType.VICTORY,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_Z.mission_name,
"Protoss Archive",
SC2_RACESWAP_LOC_ID_OFFSET + 5001,
LocationType.VANILLA,
logic.zerg_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_Z.mission_name,
"Kills",
SC2_RACESWAP_LOC_ID_OFFSET + 5002,
LocationType.VANILLA,
logic.zerg_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_Z.mission_name,
"Urun",
SC2_RACESWAP_LOC_ID_OFFSET + 5003,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_Z.mission_name,
"Mohandar",
SC2_RACESWAP_LOC_ID_OFFSET + 5004,
LocationType.EXTRA,
logic.zerg_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_Z.mission_name,
"Selendis",
SC2_RACESWAP_LOC_ID_OFFSET + 5005,
LocationType.EXTRA,
logic.zerg_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.IN_UTTER_DARKNESS_Z.mission_name,
"Artanis",
SC2_RACESWAP_LOC_ID_OFFSET + 5006,
LocationType.EXTRA,
logic.zerg_in_utter_darkness_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 5100,
LocationType.VICTORY,
logic.zerg_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_Z.mission_name,
"Large Army",
SC2_RACESWAP_LOC_ID_OFFSET + 5101,
LocationType.VANILLA,
logic.zerg_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_Z.mission_name,
"2 Drop Pods",
SC2_RACESWAP_LOC_ID_OFFSET + 5102,
LocationType.VANILLA,
logic.zerg_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_Z.mission_name,
"4 Drop Pods",
SC2_RACESWAP_LOC_ID_OFFSET + 5103,
LocationType.VANILLA,
logic.zerg_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_Z.mission_name,
"6 Drop Pods",
SC2_RACESWAP_LOC_ID_OFFSET + 5104,
LocationType.EXTRA,
logic.zerg_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_Z.mission_name,
"8 Drop Pods",
SC2_RACESWAP_LOC_ID_OFFSET + 5105,
LocationType.CHALLENGE,
logic.zerg_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_Z.mission_name,
"Southwest Spore Cannon",
SC2_RACESWAP_LOC_ID_OFFSET + 5106,
LocationType.EXTRA,
logic.zerg_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_Z.mission_name,
"Northwest Spore Cannon",
SC2_RACESWAP_LOC_ID_OFFSET + 5107,
LocationType.EXTRA,
logic.zerg_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_Z.mission_name,
"Northeast Spore Cannon",
SC2_RACESWAP_LOC_ID_OFFSET + 5108,
LocationType.EXTRA,
logic.zerg_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_Z.mission_name,
"East Spore Cannon",
SC2_RACESWAP_LOC_ID_OFFSET + 5109,
LocationType.EXTRA,
logic.zerg_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_Z.mission_name,
"Southeast Spore Cannon",
SC2_RACESWAP_LOC_ID_OFFSET + 5110,
LocationType.EXTRA,
logic.zerg_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_Z.mission_name,
"Expansion Spore Cannon",
SC2_RACESWAP_LOC_ID_OFFSET + 5111,
LocationType.EXTRA,
logic.zerg_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 5200,
LocationType.VICTORY,
logic.protoss_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_P.mission_name,
"Large Army",
SC2_RACESWAP_LOC_ID_OFFSET + 5201,
LocationType.VANILLA,
logic.protoss_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_P.mission_name,
"2 Drop Pods",
SC2_RACESWAP_LOC_ID_OFFSET + 5202,
LocationType.VANILLA,
logic.protoss_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_P.mission_name,
"4 Drop Pods",
SC2_RACESWAP_LOC_ID_OFFSET + 5203,
LocationType.VANILLA,
logic.protoss_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_P.mission_name,
"6 Drop Pods",
SC2_RACESWAP_LOC_ID_OFFSET + 5204,
LocationType.EXTRA,
logic.protoss_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_P.mission_name,
"8 Drop Pods",
SC2_RACESWAP_LOC_ID_OFFSET + 5205,
LocationType.CHALLENGE,
logic.protoss_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_P.mission_name,
"Southwest Spore Cannon",
SC2_RACESWAP_LOC_ID_OFFSET + 5206,
LocationType.EXTRA,
logic.protoss_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_P.mission_name,
"Northwest Spore Cannon",
SC2_RACESWAP_LOC_ID_OFFSET + 5207,
LocationType.EXTRA,
logic.protoss_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_P.mission_name,
"Northeast Spore Cannon",
SC2_RACESWAP_LOC_ID_OFFSET + 5208,
LocationType.EXTRA,
logic.protoss_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_P.mission_name,
"East Spore Cannon",
SC2_RACESWAP_LOC_ID_OFFSET + 5209,
LocationType.EXTRA,
logic.protoss_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_P.mission_name,
"Southeast Spore Cannon",
SC2_RACESWAP_LOC_ID_OFFSET + 5210,
LocationType.EXTRA,
logic.protoss_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.GATES_OF_HELL_P.mission_name,
"Expansion Spore Cannon",
SC2_RACESWAP_LOC_ID_OFFSET + 5211,
LocationType.EXTRA,
logic.protoss_gates_of_hell_requirement,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 5500,
LocationType.VICTORY,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_Z.mission_name,
"Close Coolant Tower",
SC2_RACESWAP_LOC_ID_OFFSET + 5501,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_Z.mission_name,
"Northwest Coolant Tower",
SC2_RACESWAP_LOC_ID_OFFSET + 5502,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_Z.mission_name,
"Southeast Coolant Tower",
SC2_RACESWAP_LOC_ID_OFFSET + 5503,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_Z.mission_name,
"Southwest Coolant Tower",
SC2_RACESWAP_LOC_ID_OFFSET + 5504,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_Z.mission_name,
"Leviathan",
SC2_RACESWAP_LOC_ID_OFFSET + 5505,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_Z.mission_name,
"East Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 5506,
LocationType.EXTRA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_Z.mission_name,
"North Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 5507,
LocationType.EXTRA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_Z.mission_name,
"Mid Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 5508,
LocationType.EXTRA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 5600,
LocationType.VICTORY,
lambda state: logic.protoss_competent_comp(state)
and logic.protoss_army_weapon_armor_upgrade_min_level(state) >= 2,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_P.mission_name,
"Close Coolant Tower",
SC2_RACESWAP_LOC_ID_OFFSET + 5601,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_P.mission_name,
"Northwest Coolant Tower",
SC2_RACESWAP_LOC_ID_OFFSET + 5602,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_P.mission_name,
"Southeast Coolant Tower",
SC2_RACESWAP_LOC_ID_OFFSET + 5603,
LocationType.VANILLA,
lambda state: logic.protoss_competent_comp(state)
and logic.protoss_army_weapon_armor_upgrade_min_level(state) >= 2,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_P.mission_name,
"Southwest Coolant Tower",
SC2_RACESWAP_LOC_ID_OFFSET + 5604,
LocationType.VANILLA,
lambda state: logic.protoss_competent_comp(state)
and logic.protoss_army_weapon_armor_upgrade_min_level(state) >= 2,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_P.mission_name,
"Leviathan",
SC2_RACESWAP_LOC_ID_OFFSET + 5605,
LocationType.VANILLA,
lambda state: logic.protoss_competent_comp(state)
and logic.protoss_army_weapon_armor_upgrade_min_level(state) >= 2,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_P.mission_name,
"East Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 5606,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_P.mission_name,
"North Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 5607,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.SHATTER_THE_SKY_P.mission_name,
"Mid Hatchery",
SC2_RACESWAP_LOC_ID_OFFSET + 5608,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.ALL_IN_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 5700,
LocationType.VICTORY,
logic.zerg_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN_Z.mission_name,
"First Kerrigan Attack",
SC2_RACESWAP_LOC_ID_OFFSET + 5701,
LocationType.EXTRA,
logic.zerg_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN_Z.mission_name,
"Second Kerrigan Attack",
SC2_RACESWAP_LOC_ID_OFFSET + 5702,
LocationType.EXTRA,
logic.zerg_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN_Z.mission_name,
"Third Kerrigan Attack",
SC2_RACESWAP_LOC_ID_OFFSET + 5703,
LocationType.EXTRA,
logic.zerg_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN_Z.mission_name,
"Fourth Kerrigan Attack",
SC2_RACESWAP_LOC_ID_OFFSET + 5704,
LocationType.EXTRA,
logic.zerg_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN_Z.mission_name,
"Fifth Kerrigan Attack",
SC2_RACESWAP_LOC_ID_OFFSET + 5705,
LocationType.EXTRA,
logic.zerg_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 5800,
LocationType.VICTORY,
logic.protoss_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN_P.mission_name,
"First Kerrigan Attack",
SC2_RACESWAP_LOC_ID_OFFSET + 5801,
LocationType.EXTRA,
logic.protoss_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN_P.mission_name,
"Second Kerrigan Attack",
SC2_RACESWAP_LOC_ID_OFFSET + 5802,
LocationType.EXTRA,
logic.protoss_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN_P.mission_name,
"Third Kerrigan Attack",
SC2_RACESWAP_LOC_ID_OFFSET + 5803,
LocationType.EXTRA,
logic.protoss_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN_P.mission_name,
"Fourth Kerrigan Attack",
SC2_RACESWAP_LOC_ID_OFFSET + 5804,
LocationType.EXTRA,
logic.protoss_all_in_requirement,
),
make_location_data(
SC2Mission.ALL_IN_P.mission_name,
"Fifth Kerrigan Attack",
SC2_RACESWAP_LOC_ID_OFFSET + 5805,
LocationType.EXTRA,
logic.protoss_all_in_requirement,
),
make_location_data(
SC2Mission.LAB_RAT_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 5900,
LocationType.VICTORY,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.LAB_RAT_T.mission_name,
"Gather Minerals",
SC2_RACESWAP_LOC_ID_OFFSET + 5901,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.LAB_RAT_T.mission_name,
"South Marine Group",
SC2_RACESWAP_LOC_ID_OFFSET + 5902,
LocationType.VANILLA,
lambda state: adv_tactics or logic.terran_common_unit(state),
),
make_location_data(
SC2Mission.LAB_RAT_T.mission_name,
"East Marine Group",
SC2_RACESWAP_LOC_ID_OFFSET + 5903,
LocationType.VANILLA,
lambda state: adv_tactics or logic.terran_common_unit(state),
),
make_location_data(
SC2Mission.LAB_RAT_T.mission_name,
"West Marine Group",
SC2_RACESWAP_LOC_ID_OFFSET + 5904,
LocationType.VANILLA,
lambda state: adv_tactics or logic.terran_common_unit(state),
),
make_location_data(
SC2Mission.LAB_RAT_T.mission_name,
"Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 5905,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.LAB_RAT_T.mission_name,
"Supply Depot",
SC2_RACESWAP_LOC_ID_OFFSET + 5906,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.LAB_RAT_T.mission_name,
"Gas Turrets",
SC2_RACESWAP_LOC_ID_OFFSET + 5907,
LocationType.EXTRA,
lambda state: adv_tactics or logic.terran_common_unit(state),
),
make_location_data(
SC2Mission.LAB_RAT_T.mission_name,
"Win In Under 10 Minutes",
SC2_RACESWAP_LOC_ID_OFFSET + 5908,
LocationType.CHALLENGE,
lambda state: logic.terran_common_unit(state)
and logic.terran_early_tech(state),
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.LAB_RAT_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 6000,
LocationType.VICTORY,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.LAB_RAT_P.mission_name,
"Gather Minerals",
SC2_RACESWAP_LOC_ID_OFFSET + 6001,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.LAB_RAT_P.mission_name,
"South Zealot Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6002,
LocationType.VANILLA,
lambda state: adv_tactics or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.LAB_RAT_P.mission_name,
"East Zealot Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6003,
LocationType.VANILLA,
lambda state: adv_tactics or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.LAB_RAT_P.mission_name,
"West Zealot Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6004,
LocationType.VANILLA,
lambda state: adv_tactics or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.LAB_RAT_P.mission_name,
"Nexus",
SC2_RACESWAP_LOC_ID_OFFSET + 6005,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.LAB_RAT_P.mission_name,
"Pylon",
SC2_RACESWAP_LOC_ID_OFFSET + 6006,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.LAB_RAT_P.mission_name,
"Gas Turrets",
SC2_RACESWAP_LOC_ID_OFFSET + 6007,
LocationType.EXTRA,
lambda state: adv_tactics or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.LAB_RAT_P.mission_name,
"Win In Under 10 Minutes",
SC2_RACESWAP_LOC_ID_OFFSET + 6008,
LocationType.CHALLENGE,
logic.protoss_common_unit,
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.RENDEZVOUS_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 6300,
LocationType.VICTORY,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_basic_anti_air(state)
and logic.terran_defense_rating(state, False, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS_T.mission_name,
"Right Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6301,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_basic_anti_air(state)
and logic.terran_defense_rating(state, False, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS_T.mission_name,
"Center Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6302,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_basic_anti_air(state)
and logic.terran_defense_rating(state, False, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS_T.mission_name,
"Left Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6303,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_basic_anti_air(state)
and logic.terran_defense_rating(state, False, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS_T.mission_name,
"Hold Out Finished",
SC2_RACESWAP_LOC_ID_OFFSET + 6304,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_basic_anti_air(state)
and logic.terran_defense_rating(state, False, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS_T.mission_name,
"Kill All Buildings Before Reinforcements",
SC2_RACESWAP_LOC_ID_OFFSET + 6305,
LocationType.MASTERY,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_comp(state)
and logic.terran_defense_rating(state, False, False) >= 3
and logic.terran_power_rating(state) >= 5
),
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.RENDEZVOUS_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 6400,
LocationType.VICTORY,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_basic_anti_air(state)
and logic.protoss_defense_rating(state, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS_P.mission_name,
"Right Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6401,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_basic_anti_air(state)
and logic.protoss_defense_rating(state, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS_P.mission_name,
"Center Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6402,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_basic_anti_air(state)
and logic.protoss_defense_rating(state, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS_P.mission_name,
"Left Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6403,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_basic_anti_air(state)
and logic.protoss_defense_rating(state, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS_P.mission_name,
"Hold Out Finished",
SC2_RACESWAP_LOC_ID_OFFSET + 6404,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_basic_anti_air(state)
and logic.protoss_defense_rating(state, False) >= 3
),
),
make_location_data(
SC2Mission.RENDEZVOUS_P.mission_name,
"Kill All Buildings Before Reinforcements",
SC2_RACESWAP_LOC_ID_OFFSET + 6405,
LocationType.MASTERY,
lambda state: (
logic.protoss_competent_comp(state)
and logic.protoss_defense_rating(state, False) >= 3
and logic.protoss_power_rating(state) >= 5
),
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 6500,
LocationType.VICTORY,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_T.mission_name,
"First Ursadon Matriarch",
SC2_RACESWAP_LOC_ID_OFFSET + 6501,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_T.mission_name,
"North Ursadon Matriarch",
SC2_RACESWAP_LOC_ID_OFFSET + 6502,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_moderate_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_T.mission_name,
"West Ursadon Matriarch",
SC2_RACESWAP_LOC_ID_OFFSET + 6503,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_moderate_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_T.mission_name,
"Lost Base",
SC2_RACESWAP_LOC_ID_OFFSET + 6504,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_T.mission_name,
"Northeast Psi-link Spire",
SC2_RACESWAP_LOC_ID_OFFSET + 6505,
LocationType.EXTRA,
lambda state: logic.terran_common_unit(state) or adv_tactics,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_T.mission_name,
"Northwest Psi-link Spire",
SC2_RACESWAP_LOC_ID_OFFSET + 6506,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_moderate_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_T.mission_name,
"Southwest Psi-link Spire",
SC2_RACESWAP_LOC_ID_OFFSET + 6507,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_T.mission_name,
"Nafash",
SC2_RACESWAP_LOC_ID_OFFSET + 6508,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_moderate_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_T.mission_name,
"20 Unfrozen Structures",
SC2_RACESWAP_LOC_ID_OFFSET + 6509,
LocationType.CHALLENGE,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 6600,
LocationType.VICTORY,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_P.mission_name,
"First Ursadon Matriarch",
SC2_RACESWAP_LOC_ID_OFFSET + 6601,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_P.mission_name,
"North Ursadon Matriarch",
SC2_RACESWAP_LOC_ID_OFFSET + 6602,
LocationType.VANILLA,
logic.protoss_common_unit_basic_aa,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_P.mission_name,
"West Ursadon Matriarch",
SC2_RACESWAP_LOC_ID_OFFSET + 6603,
LocationType.VANILLA,
logic.protoss_common_unit_basic_aa,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_P.mission_name,
"Lost Base",
SC2_RACESWAP_LOC_ID_OFFSET + 6604,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_P.mission_name,
"Northeast Psi-link Spire",
SC2_RACESWAP_LOC_ID_OFFSET + 6605,
LocationType.EXTRA,
lambda state: logic.protoss_common_unit(state) or adv_tactics,
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_P.mission_name,
"Northwest Psi-link Spire",
SC2_RACESWAP_LOC_ID_OFFSET + 6606,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_basic_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_P.mission_name,
"Southwest Psi-link Spire",
SC2_RACESWAP_LOC_ID_OFFSET + 6607,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_P.mission_name,
"Nafash",
SC2_RACESWAP_LOC_ID_OFFSET + 6608,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_basic_anti_air(state)
),
),
make_location_data(
SC2Mission.HARVEST_OF_SCREAMS_P.mission_name,
"20 Unfrozen Structures",
SC2_RACESWAP_LOC_ID_OFFSET + 6609,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_basic_anti_air(state)
),
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 6700,
LocationType.VICTORY,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"East Stasis Chamber",
SC2_RACESWAP_LOC_ID_OFFSET + 6701,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"Center Stasis Chamber",
SC2_RACESWAP_LOC_ID_OFFSET + 6702,
LocationType.VANILLA,
lambda state: logic.terran_common_unit(state) or adv_tactics,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"West Stasis Chamber",
SC2_RACESWAP_LOC_ID_OFFSET + 6703,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"Destroy 4 Shuttles",
SC2_RACESWAP_LOC_ID_OFFSET + 6704,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state)
),
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"Frozen Expansion",
SC2_RACESWAP_LOC_ID_OFFSET + 6705,
LocationType.EXTRA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"Southwest Frozen Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6706,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"Southeast Frozen Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6707,
LocationType.EXTRA,
lambda state: logic.terran_common_unit(state) or adv_tactics,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"West Frozen Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6708,
LocationType.EXTRA,
lambda state: logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state),
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"East Frozen Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6709,
LocationType.EXTRA,
lambda state: logic.terran_common_unit(state)
and logic.terran_competent_anti_air(state),
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"West Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 6710,
LocationType.CHALLENGE,
lambda state: logic.terran_beats_protoss_deathball(state)
and logic.terran_common_unit(state),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"Center Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 6711,
LocationType.CHALLENGE,
lambda state: logic.terran_beats_protoss_deathball(state)
and logic.terran_competent_ground_to_air(state)
and logic.terran_common_unit(state),
hard_rule=logic.terran_any_anti_air,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_T.mission_name,
"East Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 6712,
LocationType.CHALLENGE,
lambda state: logic.terran_beats_protoss_deathball(state)
and logic.terran_competent_ground_to_air(state)
and logic.terran_common_unit(state),
hard_rule=logic.terran_any_anti_air,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 6800,
LocationType.VICTORY,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state)
),
hard_rule=logic.protoss_any_anti_air_unit,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"East Stasis Chamber",
SC2_RACESWAP_LOC_ID_OFFSET + 6801,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state)
),
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"Center Stasis Chamber",
SC2_RACESWAP_LOC_ID_OFFSET + 6802,
LocationType.VANILLA,
lambda state: logic.protoss_common_unit(state) or adv_tactics,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"West Stasis Chamber",
SC2_RACESWAP_LOC_ID_OFFSET + 6803,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state)
),
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"Destroy 4 Shuttles",
SC2_RACESWAP_LOC_ID_OFFSET + 6804,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state)
),
hard_rule=logic.protoss_any_anti_air_unit,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"Frozen Expansion",
SC2_RACESWAP_LOC_ID_OFFSET + 6805,
LocationType.EXTRA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"Southwest Frozen Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6806,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"Southeast Frozen Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6807,
LocationType.EXTRA,
lambda state: logic.protoss_common_unit(state) or adv_tactics,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"West Frozen Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6808,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state)
),
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"East Frozen Group",
SC2_RACESWAP_LOC_ID_OFFSET + 6809,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_armor_anti_air(state)
),
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"West Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 6810,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
hard_rule=logic.protoss_any_anti_air_unit,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"Center Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 6811,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
hard_rule=logic.protoss_any_anti_air_unit,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.SHOOT_THE_MESSENGER_P.mission_name,
"East Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 6812,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
hard_rule=logic.protoss_any_anti_air_unit,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.DOMINATION_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 7100,
LocationType.VICTORY,
lambda state: logic.terran_common_unit(state)
and (logic.terran_basic_anti_air(state) or adv_tactics),
),
make_location_data(
SC2Mission.DOMINATION_T.mission_name,
"Center Infested Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 7101,
LocationType.VANILLA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.DOMINATION_T.mission_name,
"North Infested Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 7102,
LocationType.VANILLA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.DOMINATION_T.mission_name,
"Repel Zagara",
SC2_RACESWAP_LOC_ID_OFFSET + 7103,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.DOMINATION_T.mission_name,
"Close Bunker",
SC2_RACESWAP_LOC_ID_OFFSET + 7104,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.DOMINATION_T.mission_name,
"South Bunker",
SC2_RACESWAP_LOC_ID_OFFSET + 7105,
LocationType.EXTRA,
lambda state: adv_tactics or logic.terran_common_unit(state),
),
make_location_data(
SC2Mission.DOMINATION_T.mission_name,
"Southwest Bunker",
SC2_RACESWAP_LOC_ID_OFFSET + 7106,
LocationType.EXTRA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.DOMINATION_T.mission_name,
"Southeast Bunker",
SC2_RACESWAP_LOC_ID_OFFSET + 7107,
LocationType.EXTRA,
lambda state: logic.terran_common_unit(state)
and (logic.terran_basic_anti_air(state) or adv_tactics),
),
make_location_data(
SC2Mission.DOMINATION_T.mission_name,
"North Bunker",
SC2_RACESWAP_LOC_ID_OFFSET + 7108,
LocationType.EXTRA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.DOMINATION_T.mission_name,
"Northeast Bunker",
SC2_RACESWAP_LOC_ID_OFFSET + 7109,
LocationType.EXTRA,
lambda state: logic.terran_common_unit(state)
and (logic.terran_basic_anti_air(state) or adv_tactics),
),
make_location_data(
SC2Mission.DOMINATION_T.mission_name,
"Win Without 100 Eggs",
SC2_RACESWAP_LOC_ID_OFFSET + 7110,
LocationType.CHALLENGE,
logic.terran_competent_comp,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.DOMINATION_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 7200,
LocationType.VICTORY,
lambda state: logic.protoss_common_unit(state)
and (adv_tactics or logic.protoss_basic_anti_air(state)),
),
make_location_data(
SC2Mission.DOMINATION_P.mission_name,
"Center Infested Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 7201,
LocationType.VANILLA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.DOMINATION_P.mission_name,
"North Infested Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 7202,
LocationType.VANILLA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.DOMINATION_P.mission_name,
"Repel Zagara",
SC2_RACESWAP_LOC_ID_OFFSET + 7203,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.DOMINATION_P.mission_name,
"Close Templar",
SC2_RACESWAP_LOC_ID_OFFSET + 7204,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.DOMINATION_P.mission_name,
"South Templar",
SC2_RACESWAP_LOC_ID_OFFSET + 7205,
LocationType.EXTRA,
lambda state: adv_tactics or logic.protoss_common_unit(state),
),
make_location_data(
SC2Mission.DOMINATION_P.mission_name,
"Southwest Templar",
SC2_RACESWAP_LOC_ID_OFFSET + 7206,
LocationType.EXTRA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.DOMINATION_P.mission_name,
"Southeast Templar",
SC2_RACESWAP_LOC_ID_OFFSET + 7207,
LocationType.EXTRA,
lambda state: logic.protoss_common_unit(state)
and (adv_tactics or logic.protoss_basic_anti_air(state)),
),
make_location_data(
SC2Mission.DOMINATION_P.mission_name,
"North Templar",
SC2_RACESWAP_LOC_ID_OFFSET + 7208,
LocationType.EXTRA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.DOMINATION_P.mission_name,
"Northeast Templar",
SC2_RACESWAP_LOC_ID_OFFSET + 7209,
LocationType.EXTRA,
lambda state: logic.protoss_common_unit(state)
and (adv_tactics or logic.protoss_basic_anti_air(state)),
),
make_location_data(
SC2Mission.DOMINATION_P.mission_name,
"Win Without 100 Eggs",
SC2_RACESWAP_LOC_ID_OFFSET + 7210,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 7300,
LocationType.VICTORY,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"West Biomass",
SC2_RACESWAP_LOC_ID_OFFSET + 7301,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"North Biomass",
SC2_RACESWAP_LOC_ID_OFFSET + 7302,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"South Biomass",
SC2_RACESWAP_LOC_ID_OFFSET + 7303,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"Destroy 3 Gorgons",
SC2_RACESWAP_LOC_ID_OFFSET + 7304,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"Close Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 7305,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"South Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 7306,
LocationType.EXTRA,
logic.terran_common_unit,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"North Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 7307,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"West Medic Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 7308,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"East Medic Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 7309,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"South Orbital Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 7310,
LocationType.CHALLENGE,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"Northwest Orbital Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 7311,
LocationType.CHALLENGE,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_T.mission_name,
"Southeast Orbital Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 7312,
LocationType.CHALLENGE,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 7400,
LocationType.VICTORY,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"West Biomass",
SC2_RACESWAP_LOC_ID_OFFSET + 7401,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"North Biomass",
SC2_RACESWAP_LOC_ID_OFFSET + 7402,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"South Biomass",
SC2_RACESWAP_LOC_ID_OFFSET + 7403,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"Destroy 3 Gorgons",
SC2_RACESWAP_LOC_ID_OFFSET + 7404,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"Close Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 7405,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"South Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 7406,
LocationType.EXTRA,
logic.protoss_common_unit,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"North Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 7407,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"West Energizer Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 7408,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"East Energizer Rescue",
SC2_RACESWAP_LOC_ID_OFFSET + 7409,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_competent_comp(state)
),
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"South Orbital Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 7410,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_competent_comp(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"Northwest Orbital Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 7411,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_competent_comp(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.FIRE_IN_THE_SKY_P.mission_name,
"Southeast Orbital Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 7412,
LocationType.CHALLENGE,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_competent_comp(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 7500,
LocationType.VICTORY,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_T.mission_name,
"East Science Lab",
SC2_RACESWAP_LOC_ID_OFFSET + 7501,
LocationType.VANILLA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_T.mission_name,
"North Science Lab",
SC2_RACESWAP_LOC_ID_OFFSET + 7502,
LocationType.VANILLA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_T.mission_name,
"Get Nuked",
SC2_RACESWAP_LOC_ID_OFFSET + 7503,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_T.mission_name,
"Entrance Gate",
SC2_RACESWAP_LOC_ID_OFFSET + 7504,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_T.mission_name,
"Citadel Gate",
SC2_RACESWAP_LOC_ID_OFFSET + 7505,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_T.mission_name,
"South Expansion",
SC2_RACESWAP_LOC_ID_OFFSET + 7506,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_T.mission_name,
"Rich Mineral Expansion",
SC2_RACESWAP_LOC_ID_OFFSET + 7507,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 7600,
LocationType.VICTORY,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_P.mission_name,
"East Science Lab",
SC2_RACESWAP_LOC_ID_OFFSET + 7601,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_P.mission_name,
"North Science Lab",
SC2_RACESWAP_LOC_ID_OFFSET + 7602,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_P.mission_name,
"Get Nuked",
SC2_RACESWAP_LOC_ID_OFFSET + 7603,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_P.mission_name,
"Entrance Gate",
SC2_RACESWAP_LOC_ID_OFFSET + 7604,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_P.mission_name,
"Citadel Gate",
SC2_RACESWAP_LOC_ID_OFFSET + 7605,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_P.mission_name,
"South Expansion",
SC2_RACESWAP_LOC_ID_OFFSET + 7606,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.OLD_SOLDIERS_P.mission_name,
"Rich Mineral Expansion",
SC2_RACESWAP_LOC_ID_OFFSET + 7607,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 7700,
LocationType.VICTORY,
lambda state: (
logic.terran_competent_comp(state) and logic.terran_common_unit(state)
),
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_T.mission_name,
"Center Essence Pool",
SC2_RACESWAP_LOC_ID_OFFSET + 7701,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_T.mission_name,
"East Essence Pool",
SC2_RACESWAP_LOC_ID_OFFSET + 7702,
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)
)
),
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_T.mission_name,
"South Essence Pool",
SC2_RACESWAP_LOC_ID_OFFSET + 7703,
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)
)
),
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_T.mission_name,
"Finish Feeding",
SC2_RACESWAP_LOC_ID_OFFSET + 7704,
LocationType.EXTRA,
lambda state: (
logic.terran_competent_comp(state) and logic.terran_common_unit(state)
),
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_T.mission_name,
"South Proxy Primal Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 7705,
LocationType.CHALLENGE,
lambda state: (
logic.terran_competent_comp(state) and logic.terran_common_unit(state)
),
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_T.mission_name,
"East Proxy Primal Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 7706,
LocationType.CHALLENGE,
lambda state: (
logic.terran_competent_comp(state) and logic.terran_common_unit(state)
),
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_T.mission_name,
"South Main Primal Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 7707,
LocationType.CHALLENGE,
lambda state: (
logic.terran_competent_comp(state) and logic.terran_common_unit(state)
),
flags=LocationFlag.BASEBUST,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_T.mission_name,
"East Main Primal Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 7708,
LocationType.CHALLENGE,
lambda state: (
logic.terran_competent_comp(state) and logic.terran_common_unit(state)
),
flags=LocationFlag.BASEBUST,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_T.mission_name,
"Flawless",
SC2_RACESWAP_LOC_ID_OFFSET + 7709,
LocationType.CHALLENGE,
lambda state: (
logic.terran_competent_comp(state)
and logic.terran_common_unit(state)
and (
# Fast unit
state.has_any(
(
item_names.BANSHEE,
item_names.VULTURE,
item_names.DIAMONDBACK,
item_names.WARHOUND,
item_names.CYCLONE,
),
player,
)
or state.has_all(
(item_names.VALKYRIE, item_names.VALKYRIE_FLECHETTE_MISSILES),
player,
)
or state.has_all(
(
item_names.WRAITH,
item_names.WRAITH_ADVANCED_LASER_TECHNOLOGY,
),
player,
)
)
),
flags=LocationFlag.PREVENTATIVE,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 7800,
LocationType.VICTORY,
logic.protoss_competent_comp,
hard_rule=logic.protoss_any_anti_air_unit,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_P.mission_name,
"Center Essence Pool",
SC2_RACESWAP_LOC_ID_OFFSET + 7801,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_P.mission_name,
"East Essence Pool",
SC2_RACESWAP_LOC_ID_OFFSET + 7802,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_light_anti_air(state)
),
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_P.mission_name,
"South Essence Pool",
SC2_RACESWAP_LOC_ID_OFFSET + 7803,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_anti_light_anti_air(state)
),
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_P.mission_name,
"Finish Feeding",
SC2_RACESWAP_LOC_ID_OFFSET + 7804,
LocationType.EXTRA,
logic.protoss_competent_comp,
hard_rule=logic.protoss_any_anti_air_unit,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_P.mission_name,
"South Proxy Primal Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 7805,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_P.mission_name,
"East Proxy Primal Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 7806,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_P.mission_name,
"South Main Primal Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 7807,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
flags=LocationFlag.BASEBUST,
hard_rule=logic.protoss_any_anti_air_unit,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_P.mission_name,
"East Main Primal Hive",
SC2_RACESWAP_LOC_ID_OFFSET + 7808,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
flags=LocationFlag.BASEBUST,
hard_rule=logic.protoss_any_anti_air_unit,
),
make_location_data(
SC2Mission.WAKING_THE_ANCIENT_P.mission_name,
"Flawless",
SC2_RACESWAP_LOC_ID_OFFSET + 7809,
LocationType.CHALLENGE,
logic.protoss_competent_comp,
flags=LocationFlag.PREVENTATIVE,
hard_rule=logic.protoss_any_anti_air_unit,
),
make_location_data(
SC2Mission.THE_CRUCIBLE_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 7900,
LocationType.VICTORY,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_defense_rating(state, True, True) >= 7
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE_T.mission_name,
"Tyrannozor",
SC2_RACESWAP_LOC_ID_OFFSET + 7901,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_defense_rating(state, True, True) >= 7
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE_T.mission_name,
"Reach the Pool",
SC2_RACESWAP_LOC_ID_OFFSET + 7902,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_CRUCIBLE_T.mission_name,
"15 Minutes Remaining",
SC2_RACESWAP_LOC_ID_OFFSET + 7903,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_defense_rating(state, True, True) >= 7
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE_T.mission_name,
"5 Minutes Remaining",
SC2_RACESWAP_LOC_ID_OFFSET + 7904,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_defense_rating(state, True, True) >= 7
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE_T.mission_name,
"Pincer Attack",
SC2_RACESWAP_LOC_ID_OFFSET + 7905,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_defense_rating(state, True, True) >= 7
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE_T.mission_name,
"Yagdra Claims Brakk's Pack",
SC2_RACESWAP_LOC_ID_OFFSET + 7906,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_defense_rating(state, True, True) >= 7
and logic.terran_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 8000,
LocationType.VICTORY,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_defense_rating(state, True) >= 7
and logic.protoss_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE_P.mission_name,
"Tyrannozor",
SC2_RACESWAP_LOC_ID_OFFSET + 8001,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_defense_rating(state, True) >= 7
and logic.protoss_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE_P.mission_name,
"Reach the Pool",
SC2_RACESWAP_LOC_ID_OFFSET + 8002,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_CRUCIBLE_P.mission_name,
"15 Minutes Remaining",
SC2_RACESWAP_LOC_ID_OFFSET + 8003,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_defense_rating(state, True) >= 7
and logic.protoss_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE_P.mission_name,
"5 Minutes Remaining",
SC2_RACESWAP_LOC_ID_OFFSET + 8004,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_defense_rating(state, True) >= 7
and logic.protoss_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE_P.mission_name,
"Pincer Attack",
SC2_RACESWAP_LOC_ID_OFFSET + 8005,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_defense_rating(state, True) >= 7
and logic.protoss_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_CRUCIBLE_P.mission_name,
"Yagdra Claims Brakk's Pack",
SC2_RACESWAP_LOC_ID_OFFSET + 8006,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_defense_rating(state, True) >= 7
and logic.protoss_competent_anti_air(state)
),
),
make_location_data(
SC2Mission.INFESTED_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 8300,
LocationType.VICTORY,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.INFESTED_T.mission_name,
"East Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 8301,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_moderate_anti_air(state)
),
),
make_location_data(
SC2Mission.INFESTED_T.mission_name,
"Center Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 8302,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.INFESTED_T.mission_name,
"West Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 8303,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.INFESTED_T.mission_name,
"First Intro Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8304,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.INFESTED_T.mission_name,
"Second Intro Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8305,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.INFESTED_T.mission_name,
"Base Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8306,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.INFESTED_T.mission_name,
"East Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8307,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_moderate_anti_air(state)
and (adv_tactics or logic.terran_infested_garrison_claimer(state))
),
),
make_location_data(
SC2Mission.INFESTED_T.mission_name,
"Mid Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8308,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_moderate_anti_air(state)
and (adv_tactics or logic.terran_infested_garrison_claimer(state))
),
),
make_location_data(
SC2Mission.INFESTED_T.mission_name,
"North Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8309,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_comp(state)
and (adv_tactics or logic.terran_infested_garrison_claimer(state))
),
),
make_location_data(
SC2Mission.INFESTED_T.mission_name,
"Close Southwest Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8310,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_comp(state)
and (adv_tactics or logic.terran_infested_garrison_claimer(state))
),
),
make_location_data(
SC2Mission.INFESTED_T.mission_name,
"Far Southwest Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8311,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_comp(state)
and (adv_tactics or logic.terran_infested_garrison_claimer(state))
),
),
make_location_data(
SC2Mission.INFESTED_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 8400,
LocationType.VICTORY,
logic.protoss_competent_comp,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.INFESTED_P.mission_name,
"East Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 8401,
LocationType.VANILLA,
lambda state: (
logic.protoss_common_unit(state) and logic.protoss_basic_anti_air(state)
),
),
make_location_data(
SC2Mission.INFESTED_P.mission_name,
"Center Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 8402,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.INFESTED_P.mission_name,
"West Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 8403,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.INFESTED_P.mission_name,
"First Intro Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8404,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.INFESTED_P.mission_name,
"Second Intro Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8405,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.INFESTED_P.mission_name,
"Base Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8406,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.INFESTED_P.mission_name,
"East Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8407,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_basic_anti_air(state)
and (adv_tactics or logic.protoss_infested_garrison_claimer(state))
),
),
make_location_data(
SC2Mission.INFESTED_P.mission_name,
"Mid Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8408,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_basic_anti_air(state)
and (adv_tactics or logic.protoss_infested_garrison_claimer(state))
),
),
make_location_data(
SC2Mission.INFESTED_P.mission_name,
"North Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8409,
LocationType.EXTRA,
lambda state: (
logic.protoss_common_unit(state)
and logic.protoss_competent_anti_air(state)
and (adv_tactics or logic.protoss_infested_garrison_claimer(state))
),
),
make_location_data(
SC2Mission.INFESTED_P.mission_name,
"Close Southwest Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8410,
LocationType.EXTRA,
lambda state: (
logic.protoss_competent_comp(state)
and (adv_tactics or logic.protoss_infested_garrison_claimer(state))
),
),
make_location_data(
SC2Mission.INFESTED_P.mission_name,
"Far Southwest Garrison",
SC2_RACESWAP_LOC_ID_OFFSET + 8411,
LocationType.EXTRA,
lambda state: (
logic.protoss_competent_comp(state)
and (adv_tactics or logic.protoss_infested_garrison_claimer(state))
),
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 8500,
LocationType.VICTORY,
logic.terran_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_T.mission_name,
"North War Bot",
SC2_RACESWAP_LOC_ID_OFFSET + 8501,
LocationType.VANILLA,
logic.terran_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_T.mission_name,
"South War Bot",
SC2_RACESWAP_LOC_ID_OFFSET + 8502,
LocationType.VANILLA,
logic.terran_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_T.mission_name,
"Kill 1 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8503,
LocationType.EXTRA,
logic.terran_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_T.mission_name,
"Kill 2 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8504,
LocationType.EXTRA,
logic.terran_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_T.mission_name,
"Kill 3 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8505,
LocationType.EXTRA,
logic.terran_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_T.mission_name,
"Kill 4 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8506,
LocationType.EXTRA,
logic.terran_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_T.mission_name,
"Kill 5 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8507,
LocationType.EXTRA,
logic.terran_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_T.mission_name,
"Kill 6 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8508,
LocationType.EXTRA,
logic.terran_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_T.mission_name,
"Kill 7 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8509,
LocationType.EXTRA,
logic.terran_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 8600,
LocationType.VICTORY,
logic.protoss_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_P.mission_name,
"North Stone Zealot",
SC2_RACESWAP_LOC_ID_OFFSET + 8601,
LocationType.VANILLA,
logic.protoss_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_P.mission_name,
"South Stone Zealot",
SC2_RACESWAP_LOC_ID_OFFSET + 8602,
LocationType.VANILLA,
logic.protoss_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_P.mission_name,
"Kill 1 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8603,
LocationType.EXTRA,
logic.protoss_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_P.mission_name,
"Kill 2 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8604,
LocationType.EXTRA,
logic.protoss_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_P.mission_name,
"Kill 3 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8605,
LocationType.EXTRA,
logic.protoss_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_P.mission_name,
"Kill 4 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8606,
LocationType.EXTRA,
logic.protoss_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_P.mission_name,
"Kill 5 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8607,
LocationType.EXTRA,
logic.protoss_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_P.mission_name,
"Kill 6 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8608,
LocationType.EXTRA,
logic.protoss_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.HAND_OF_DARKNESS_P.mission_name,
"Kill 7 Hybrid",
SC2_RACESWAP_LOC_ID_OFFSET + 8609,
LocationType.EXTRA,
logic.protoss_hand_of_darkness_requirement,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 8700,
LocationType.VICTORY,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_T.mission_name,
"Northwest Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 8701,
LocationType.VANILLA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_T.mission_name,
"Northeast Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 8702,
LocationType.VANILLA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_T.mission_name,
"South Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 8703,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_T.mission_name,
"Base Established",
SC2_RACESWAP_LOC_ID_OFFSET + 8704,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_T.mission_name,
"Close Temple",
SC2_RACESWAP_LOC_ID_OFFSET + 8705,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_T.mission_name,
"Mid Temple",
SC2_RACESWAP_LOC_ID_OFFSET + 8706,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_T.mission_name,
"Southeast Temple",
SC2_RACESWAP_LOC_ID_OFFSET + 8707,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_T.mission_name,
"Northeast Temple",
SC2_RACESWAP_LOC_ID_OFFSET + 8708,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_T.mission_name,
"Northwest Temple",
SC2_RACESWAP_LOC_ID_OFFSET + 8709,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 8800,
LocationType.VICTORY,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_P.mission_name,
"Northwest Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 8801,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_P.mission_name,
"Northeast Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 8802,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_P.mission_name,
"South Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 8803,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_P.mission_name,
"Base Established",
SC2_RACESWAP_LOC_ID_OFFSET + 8804,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_P.mission_name,
"Close Temple",
SC2_RACESWAP_LOC_ID_OFFSET + 8805,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_P.mission_name,
"Mid Temple",
SC2_RACESWAP_LOC_ID_OFFSET + 8806,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_P.mission_name,
"Southeast Temple",
SC2_RACESWAP_LOC_ID_OFFSET + 8807,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_P.mission_name,
"Northeast Temple",
SC2_RACESWAP_LOC_ID_OFFSET + 8808,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.PHANTOMS_OF_THE_VOID_P.mission_name,
"Northwest Temple",
SC2_RACESWAP_LOC_ID_OFFSET + 8809,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 9300,
LocationType.VICTORY,
logic.terran_planetfall_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"East Gate",
SC2_RACESWAP_LOC_ID_OFFSET + 9301,
LocationType.VANILLA,
logic.terran_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"Northwest Gate",
SC2_RACESWAP_LOC_ID_OFFSET + 9302,
LocationType.VANILLA,
logic.terran_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"North Gate",
SC2_RACESWAP_LOC_ID_OFFSET + 9303,
LocationType.VANILLA,
logic.terran_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"1 Laser Drill Deployed",
SC2_RACESWAP_LOC_ID_OFFSET + 9304,
LocationType.EXTRA,
logic.terran_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"2 Laser Drills Deployed",
SC2_RACESWAP_LOC_ID_OFFSET + 9305,
LocationType.EXTRA,
logic.terran_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"3 Laser Drills Deployed",
SC2_RACESWAP_LOC_ID_OFFSET + 9306,
LocationType.EXTRA,
logic.terran_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"4 Laser Drills Deployed",
SC2_RACESWAP_LOC_ID_OFFSET + 9307,
LocationType.EXTRA,
logic.terran_planetfall_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"5 Laser Drills Deployed",
SC2_RACESWAP_LOC_ID_OFFSET + 9308,
LocationType.EXTRA,
logic.terran_planetfall_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"Sons of Korhal",
SC2_RACESWAP_LOC_ID_OFFSET + 9309,
LocationType.EXTRA,
logic.terran_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"Night Wolves",
SC2_RACESWAP_LOC_ID_OFFSET + 9310,
LocationType.EXTRA,
logic.terran_planetfall_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"West Expansion",
SC2_RACESWAP_LOC_ID_OFFSET + 9311,
LocationType.EXTRA,
logic.terran_planetfall_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.PLANETFALL_T.mission_name,
"Mid Expansion",
SC2_RACESWAP_LOC_ID_OFFSET + 9312,
LocationType.EXTRA,
logic.terran_planetfall_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 9400,
LocationType.VICTORY,
logic.protoss_planetfall_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"East Gate",
SC2_RACESWAP_LOC_ID_OFFSET + 9401,
LocationType.VANILLA,
logic.protoss_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"Northwest Gate",
SC2_RACESWAP_LOC_ID_OFFSET + 9402,
LocationType.VANILLA,
logic.protoss_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"North Gate",
SC2_RACESWAP_LOC_ID_OFFSET + 9403,
LocationType.VANILLA,
logic.protoss_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"1 Particle Cannon Deployed",
SC2_RACESWAP_LOC_ID_OFFSET + 9404,
LocationType.EXTRA,
logic.protoss_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"2 Particle Cannons Deployed",
SC2_RACESWAP_LOC_ID_OFFSET + 9405,
LocationType.EXTRA,
logic.protoss_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"3 Particle Cannons Deployed",
SC2_RACESWAP_LOC_ID_OFFSET + 9406,
LocationType.EXTRA,
logic.protoss_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"4 Particle Cannons Deployed",
SC2_RACESWAP_LOC_ID_OFFSET + 9407,
LocationType.EXTRA,
logic.protoss_planetfall_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"5 Particle Cannons Deployed",
SC2_RACESWAP_LOC_ID_OFFSET + 9408,
LocationType.EXTRA,
logic.protoss_planetfall_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"Sons of Korhal",
SC2_RACESWAP_LOC_ID_OFFSET + 9409,
LocationType.EXTRA,
logic.protoss_planetfall_requirement,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"Night Wolves",
SC2_RACESWAP_LOC_ID_OFFSET + 9410,
LocationType.EXTRA,
logic.protoss_planetfall_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"West Expansion",
SC2_RACESWAP_LOC_ID_OFFSET + 9411,
LocationType.EXTRA,
logic.protoss_planetfall_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.PLANETFALL_P.mission_name,
"Mid Expansion",
SC2_RACESWAP_LOC_ID_OFFSET + 9412,
LocationType.EXTRA,
logic.protoss_planetfall_requirement,
hard_rule=logic.protoss_any_anti_air_unit_or_soa_any_protoss,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 9500,
LocationType.VICTORY,
logic.terran_base_trasher,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE_T.mission_name,
"First Power Link",
SC2_RACESWAP_LOC_ID_OFFSET + 9501,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE_T.mission_name,
"Second Power Link",
SC2_RACESWAP_LOC_ID_OFFSET + 9502,
LocationType.VANILLA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE_T.mission_name,
"Third Power Link",
SC2_RACESWAP_LOC_ID_OFFSET + 9503,
LocationType.VANILLA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE_T.mission_name,
"Expansion Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 9504,
LocationType.EXTRA,
logic.terran_competent_comp,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE_T.mission_name,
"Main Path Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 9505,
LocationType.EXTRA,
logic.terran_base_trasher,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 9600,
LocationType.VICTORY,
lambda state: logic.protoss_deathball(state)
or (adv_tactics and logic.protoss_competent_comp(state)),
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE_P.mission_name,
"First Power Link",
SC2_RACESWAP_LOC_ID_OFFSET + 9601,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE_P.mission_name,
"Second Power Link",
SC2_RACESWAP_LOC_ID_OFFSET + 9602,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE_P.mission_name,
"Third Power Link",
SC2_RACESWAP_LOC_ID_OFFSET + 9603,
LocationType.VANILLA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE_P.mission_name,
"Expansion Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 9604,
LocationType.EXTRA,
logic.protoss_competent_comp,
),
make_location_data(
SC2Mission.DEATH_FROM_ABOVE_P.mission_name,
"Main Path Command Center",
SC2_RACESWAP_LOC_ID_OFFSET + 9605,
LocationType.EXTRA,
lambda state: logic.protoss_deathball(state)
or (adv_tactics and logic.protoss_competent_comp(state)),
),
make_location_data(
SC2Mission.THE_RECKONING_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 9700,
LocationType.VICTORY,
logic.terran_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING_T.mission_name,
"South Lane",
SC2_RACESWAP_LOC_ID_OFFSET + 9701,
LocationType.VANILLA,
logic.terran_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING_T.mission_name,
"North Lane",
SC2_RACESWAP_LOC_ID_OFFSET + 9702,
LocationType.VANILLA,
logic.terran_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING_T.mission_name,
"East Lane",
SC2_RACESWAP_LOC_ID_OFFSET + 9703,
LocationType.VANILLA,
logic.terran_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING_T.mission_name,
"Odin",
SC2_RACESWAP_LOC_ID_OFFSET + 9704,
LocationType.EXTRA,
logic.terran_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING_T.mission_name,
"Trash the Odin Early",
SC2_RACESWAP_LOC_ID_OFFSET + 9705,
LocationType.MASTERY,
lambda state: (
logic.terran_the_reckoning_requirement(state)
and logic.terran_power_rating(state) >= 10
),
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.THE_RECKONING_P.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 9800,
LocationType.VICTORY,
logic.protoss_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING_P.mission_name,
"South Lane",
SC2_RACESWAP_LOC_ID_OFFSET + 9801,
LocationType.VANILLA,
logic.protoss_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING_P.mission_name,
"North Lane",
SC2_RACESWAP_LOC_ID_OFFSET + 9802,
LocationType.VANILLA,
logic.protoss_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING_P.mission_name,
"East Lane",
SC2_RACESWAP_LOC_ID_OFFSET + 9803,
LocationType.VANILLA,
logic.protoss_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING_P.mission_name,
"Odin",
SC2_RACESWAP_LOC_ID_OFFSET + 9804,
LocationType.EXTRA,
logic.protoss_the_reckoning_requirement,
),
make_location_data(
SC2Mission.THE_RECKONING_P.mission_name,
"Trash the Odin Early",
SC2_RACESWAP_LOC_ID_OFFSET + 9805,
LocationType.MASTERY,
lambda state: (
logic.protoss_the_reckoning_requirement(state)
and (
logic.protoss_fleet(state)
or logic.protoss_power_rating(state) >= 10
)
),
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_T.mission_name,
"Zerg Base",
SC2_RACESWAP_LOC_ID_OFFSET + 9905,
LocationType.MASTERY,
lambda state: (
logic.terran_competent_comp(state)
and logic.terran_base_trasher(state)
and logic.terran_power_rating(state) >= 6
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.DARK_WHISPERS_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 10000,
LocationType.VICTORY,
lambda state: logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state),
),
make_location_data(
SC2Mission.DARK_WHISPERS_Z.mission_name,
"First Prisoner Group",
SC2_RACESWAP_LOC_ID_OFFSET + 10001,
LocationType.VANILLA,
lambda state: logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state),
),
make_location_data(
SC2Mission.DARK_WHISPERS_Z.mission_name,
"Second Prisoner Group",
SC2_RACESWAP_LOC_ID_OFFSET + 10002,
LocationType.VANILLA,
lambda state: logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state),
),
make_location_data(
SC2Mission.DARK_WHISPERS_Z.mission_name,
"First Pylon",
SC2_RACESWAP_LOC_ID_OFFSET + 10003,
LocationType.VANILLA,
lambda state: logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state),
),
make_location_data(
SC2Mission.DARK_WHISPERS_Z.mission_name,
"Second Pylon",
SC2_RACESWAP_LOC_ID_OFFSET + 10004,
LocationType.VANILLA,
lambda state: logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state),
),
make_location_data(
SC2Mission.DARK_WHISPERS_Z.mission_name,
"Zerg Base",
SC2_RACESWAP_LOC_ID_OFFSET + 10005,
LocationType.MASTERY,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_moderate_anti_air(state)
and logic.zerg_base_buster(state)
and logic.zerg_power_rating(state) >= 6
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.GHOSTS_IN_THE_FOG_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 10100,
LocationType.VICTORY,
lambda state: (
logic.terran_beats_protoss_deathball(state)
and logic.terran_mineral_dump(state)
),
),
make_location_data(
SC2Mission.GHOSTS_IN_THE_FOG_T.mission_name,
"South Rock Formation",
SC2_RACESWAP_LOC_ID_OFFSET + 10101,
LocationType.VANILLA,
lambda state: (
logic.terran_beats_protoss_deathball(state)
and logic.terran_mineral_dump(state)
),
),
make_location_data(
SC2Mission.GHOSTS_IN_THE_FOG_T.mission_name,
"West Rock Formation",
SC2_RACESWAP_LOC_ID_OFFSET + 10102,
LocationType.VANILLA,
lambda state: (
logic.terran_beats_protoss_deathball(state)
and logic.terran_mineral_dump(state)
),
),
make_location_data(
SC2Mission.GHOSTS_IN_THE_FOG_T.mission_name,
"East Rock Formation",
SC2_RACESWAP_LOC_ID_OFFSET + 10103,
LocationType.VANILLA,
lambda state: (
logic.terran_beats_protoss_deathball(state)
and logic.terran_mineral_dump(state)
and logic.terran_can_grab_ghosts_in_the_fog_east_rock_formation(state)
),
),
make_location_data(
SC2Mission.GHOSTS_IN_THE_FOG_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 10200,
LocationType.VICTORY,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_competent_anti_air(state)
and logic.zerg_mineral_dump(state)
),
),
make_location_data(
SC2Mission.GHOSTS_IN_THE_FOG_Z.mission_name,
"South Rock Formation",
SC2_RACESWAP_LOC_ID_OFFSET + 10201,
LocationType.VANILLA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_competent_anti_air(state)
and logic.zerg_mineral_dump(state)
),
),
make_location_data(
SC2Mission.GHOSTS_IN_THE_FOG_Z.mission_name,
"West Rock Formation",
SC2_RACESWAP_LOC_ID_OFFSET + 10202,
LocationType.VANILLA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_competent_anti_air(state)
and logic.zerg_mineral_dump(state)
),
),
make_location_data(
SC2Mission.GHOSTS_IN_THE_FOG_Z.mission_name,
"East Rock Formation",
SC2_RACESWAP_LOC_ID_OFFSET + 10203,
LocationType.VANILLA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_competent_anti_air(state)
and logic.zerg_mineral_dump(state)
and logic.zerg_can_grab_ghosts_in_the_fog_east_rock_formation(state)
),
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 10700,
LocationType.VICTORY,
lambda state: (
logic.terran_common_unit(state)
and (adv_tactics or logic.terran_moderate_anti_air(state))
),
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW_T.mission_name,
"Close Pylon",
SC2_RACESWAP_LOC_ID_OFFSET + 10701,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW_T.mission_name,
"East Pylon",
SC2_RACESWAP_LOC_ID_OFFSET + 10702,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and (
adv_tactics
or (
logic.terran_moderate_anti_air(state)
and logic.terran_any_air_unit(state)
)
)
),
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW_T.mission_name,
"West Pylon",
SC2_RACESWAP_LOC_ID_OFFSET + 10703,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and (adv_tactics or logic.terran_moderate_anti_air(state))
),
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW_T.mission_name,
"Base",
SC2_RACESWAP_LOC_ID_OFFSET + 10704,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW_T.mission_name,
"Templar Base",
SC2_RACESWAP_LOC_ID_OFFSET + 10705,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state)
and (adv_tactics or logic.terran_moderate_anti_air(state))
),
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 10800,
LocationType.VICTORY,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_moderate_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW_Z.mission_name,
"Close Pylon",
SC2_RACESWAP_LOC_ID_OFFSET + 10801,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW_Z.mission_name,
"East Pylon",
SC2_RACESWAP_LOC_ID_OFFSET + 10802,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_moderate_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW_Z.mission_name,
"West Pylon",
SC2_RACESWAP_LOC_ID_OFFSET + 10803,
LocationType.VANILLA,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_moderate_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW_Z.mission_name,
"Base",
SC2_RACESWAP_LOC_ID_OFFSET + 10804,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.THE_GROWING_SHADOW_Z.mission_name,
"Templar Base",
SC2_RACESWAP_LOC_ID_OFFSET + 10805,
LocationType.EXTRA,
lambda state: (
logic.zerg_common_unit(state) and logic.zerg_moderate_anti_air(state)
),
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 10900,
LocationType.VICTORY,
logic.terran_spear_of_adun_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_T.mission_name,
"Factory",
SC2_RACESWAP_LOC_ID_OFFSET + 10901,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_T.mission_name,
"Armory",
SC2_RACESWAP_LOC_ID_OFFSET + 10902,
LocationType.VANILLA,
logic.terran_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_T.mission_name,
"Starport",
SC2_RACESWAP_LOC_ID_OFFSET + 10903,
LocationType.VANILLA,
logic.terran_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_T.mission_name,
"North Power Cell",
SC2_RACESWAP_LOC_ID_OFFSET + 10904,
LocationType.EXTRA,
logic.terran_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_T.mission_name,
"East Power Cell",
SC2_RACESWAP_LOC_ID_OFFSET + 10905,
LocationType.EXTRA,
logic.terran_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_T.mission_name,
"South Power Cell",
SC2_RACESWAP_LOC_ID_OFFSET + 10906,
LocationType.EXTRA,
logic.terran_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_T.mission_name,
"Southeast Power Cell",
SC2_RACESWAP_LOC_ID_OFFSET + 10907,
LocationType.EXTRA,
logic.terran_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 11000,
LocationType.VICTORY,
logic.zerg_competent_comp_competent_aa,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_Z.mission_name,
"Baneling Nest",
SC2_RACESWAP_LOC_ID_OFFSET + 11001,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_Z.mission_name,
"Roach Warren",
SC2_RACESWAP_LOC_ID_OFFSET + 11002,
LocationType.VANILLA,
lambda state: (
logic.zerg_spear_of_adun_requirement(state)
and logic.spread_creep(state)
),
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_Z.mission_name,
"Infestation Pit",
SC2_RACESWAP_LOC_ID_OFFSET + 11003,
LocationType.VANILLA,
lambda state: (
logic.zerg_spear_of_adun_requirement(state)
and logic.spread_creep(state)
),
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_Z.mission_name,
"North Power Cell",
SC2_RACESWAP_LOC_ID_OFFSET + 11004,
LocationType.EXTRA,
logic.zerg_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_Z.mission_name,
"East Power Cell",
SC2_RACESWAP_LOC_ID_OFFSET + 11005,
LocationType.EXTRA,
logic.zerg_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_Z.mission_name,
"South Power Cell",
SC2_RACESWAP_LOC_ID_OFFSET + 11006,
LocationType.EXTRA,
logic.zerg_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.THE_SPEAR_OF_ADUN_Z.mission_name,
"Southeast Power Cell",
SC2_RACESWAP_LOC_ID_OFFSET + 11007,
LocationType.EXTRA,
logic.zerg_spear_of_adun_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 11100,
LocationType.VICTORY,
logic.terran_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_T.mission_name,
"Mid EMP Scrambler",
SC2_RACESWAP_LOC_ID_OFFSET + 11101,
LocationType.VANILLA,
logic.terran_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_T.mission_name,
"Southeast EMP Scrambler",
SC2_RACESWAP_LOC_ID_OFFSET + 11102,
LocationType.VANILLA,
logic.terran_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_T.mission_name,
"North EMP Scrambler",
SC2_RACESWAP_LOC_ID_OFFSET + 11103,
LocationType.VANILLA,
logic.terran_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_T.mission_name,
"Mid Stabilizer",
SC2_RACESWAP_LOC_ID_OFFSET + 11104,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.SKY_SHIELD_T.mission_name,
"Southwest Stabilizer",
SC2_RACESWAP_LOC_ID_OFFSET + 11105,
LocationType.EXTRA,
logic.terran_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_T.mission_name,
"Northwest Stabilizer",
SC2_RACESWAP_LOC_ID_OFFSET + 11106,
LocationType.EXTRA,
logic.terran_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_T.mission_name,
"Northeast Stabilizer",
SC2_RACESWAP_LOC_ID_OFFSET + 11107,
LocationType.EXTRA,
logic.terran_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_T.mission_name,
"Southeast Stabilizer",
SC2_RACESWAP_LOC_ID_OFFSET + 11108,
LocationType.EXTRA,
logic.terran_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_T.mission_name,
"West Raynor Base",
SC2_RACESWAP_LOC_ID_OFFSET + 11109,
LocationType.EXTRA,
logic.terran_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_T.mission_name,
"East Raynor Base",
SC2_RACESWAP_LOC_ID_OFFSET + 11110,
LocationType.EXTRA,
logic.terran_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 11200,
LocationType.VICTORY,
logic.zerg_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_Z.mission_name,
"Mid EMP Scrambler",
SC2_RACESWAP_LOC_ID_OFFSET + 11201,
LocationType.VANILLA,
logic.zerg_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_Z.mission_name,
"Southeast EMP Scrambler",
SC2_RACESWAP_LOC_ID_OFFSET + 11202,
LocationType.VANILLA,
logic.zerg_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_Z.mission_name,
"North EMP Scrambler",
SC2_RACESWAP_LOC_ID_OFFSET + 11203,
LocationType.VANILLA,
logic.zerg_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_Z.mission_name,
"Mid Stabilizer",
SC2_RACESWAP_LOC_ID_OFFSET + 11204,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.SKY_SHIELD_Z.mission_name,
"Southwest Stabilizer",
SC2_RACESWAP_LOC_ID_OFFSET + 11205,
LocationType.EXTRA,
logic.zerg_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_Z.mission_name,
"Northwest Stabilizer",
SC2_RACESWAP_LOC_ID_OFFSET + 11206,
LocationType.EXTRA,
logic.zerg_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_Z.mission_name,
"Northeast Stabilizer",
SC2_RACESWAP_LOC_ID_OFFSET + 11207,
LocationType.EXTRA,
logic.zerg_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_Z.mission_name,
"Southeast Stabilizer",
SC2_RACESWAP_LOC_ID_OFFSET + 11208,
LocationType.EXTRA,
logic.zerg_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_Z.mission_name,
"West Raynor Base",
SC2_RACESWAP_LOC_ID_OFFSET + 11209,
LocationType.EXTRA,
logic.zerg_sky_shield_requirement,
),
make_location_data(
SC2Mission.SKY_SHIELD_Z.mission_name,
"East Raynor Base",
SC2_RACESWAP_LOC_ID_OFFSET + 11210,
LocationType.EXTRA,
logic.zerg_sky_shield_requirement,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 11300,
LocationType.VICTORY,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_T.mission_name,
"Mid Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 11301,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_T.mission_name,
"North Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 11302,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_competent_comp(state)
or (
logic.take_over_ai_allies
and logic.advanced_tactics
and logic.terran_common_unit(state)
)
),
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_T.mission_name,
"South Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 11303,
LocationType.VANILLA,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_T.mission_name,
"Raynor Forward Positions",
SC2_RACESWAP_LOC_ID_OFFSET + 11304,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_T.mission_name,
"Valerian Forward Positions",
SC2_RACESWAP_LOC_ID_OFFSET + 11305,
LocationType.EXTRA,
lambda state: (
logic.terran_common_unit(state) and logic.terran_competent_comp(state)
),
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_T.mission_name,
"Win in under 15 Minutes",
SC2_RACESWAP_LOC_ID_OFFSET + 11306,
LocationType.CHALLENGE,
lambda state: (
logic.terran_common_unit(state)
and logic.terran_base_trasher(state)
and logic.terran_power_rating(state) >= 8
),
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 11400,
LocationType.VICTORY,
logic.zerg_brothers_in_arms_requirement,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_Z.mission_name,
"Mid Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 11401,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_Z.mission_name,
"North Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 11402,
LocationType.VANILLA,
lambda state: (
logic.zerg_brothers_in_arms_requirement(state)
or (
logic.take_over_ai_allies
and logic.advanced_tactics
and (
logic.zerg_common_unit(state) or logic.terran_common_unit(state)
)
)
),
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_Z.mission_name,
"South Science Facility",
SC2_RACESWAP_LOC_ID_OFFSET + 11403,
LocationType.VANILLA,
logic.zerg_brothers_in_arms_requirement,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_Z.mission_name,
"Raynor Forward Positions",
SC2_RACESWAP_LOC_ID_OFFSET + 11404,
LocationType.EXTRA,
logic.zerg_brothers_in_arms_requirement,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_Z.mission_name,
"Valerian Forward Positions",
SC2_RACESWAP_LOC_ID_OFFSET + 11405,
LocationType.EXTRA,
logic.zerg_brothers_in_arms_requirement,
),
make_location_data(
SC2Mission.BROTHERS_IN_ARMS_Z.mission_name,
"Win in under 15 Minutes",
SC2_RACESWAP_LOC_ID_OFFSET + 11406,
LocationType.CHALLENGE,
lambda state: (
logic.zerg_brothers_in_arms_requirement(state)
and logic.zerg_base_buster(state)
and logic.zerg_power_rating(state) >= 8
),
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.AMON_S_REACH_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 11500,
LocationType.VICTORY,
lambda state: (logic.terran_competent_comp(state)),
),
make_location_data(
SC2Mission.AMON_S_REACH_T.mission_name,
"Close Solarite Reserve",
SC2_RACESWAP_LOC_ID_OFFSET + 11501,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.AMON_S_REACH_T.mission_name,
"North Solarite Reserve",
SC2_RACESWAP_LOC_ID_OFFSET + 11502,
LocationType.VANILLA,
lambda state: (logic.terran_competent_comp(state)),
),
make_location_data(
SC2Mission.AMON_S_REACH_T.mission_name,
"East Solarite Reserve",
SC2_RACESWAP_LOC_ID_OFFSET + 11503,
LocationType.VANILLA,
lambda state: (logic.terran_competent_comp(state)),
),
make_location_data(
SC2Mission.AMON_S_REACH_T.mission_name,
"West Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 11504,
LocationType.EXTRA,
lambda state: (logic.terran_competent_comp(state)),
),
make_location_data(
SC2Mission.AMON_S_REACH_T.mission_name,
"South Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 11505,
LocationType.EXTRA,
lambda state: (logic.terran_competent_comp(state)),
),
make_location_data(
SC2Mission.AMON_S_REACH_T.mission_name,
"Northwest Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 11506,
LocationType.EXTRA,
lambda state: (logic.terran_competent_comp(state)),
),
make_location_data(
SC2Mission.AMON_S_REACH_T.mission_name,
"East Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 11507,
LocationType.EXTRA,
lambda state: (logic.terran_competent_comp(state)),
),
make_location_data(
SC2Mission.AMON_S_REACH_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 11600,
LocationType.VICTORY,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.AMON_S_REACH_Z.mission_name,
"Close Solarite Reserve",
SC2_RACESWAP_LOC_ID_OFFSET + 11601,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.AMON_S_REACH_Z.mission_name,
"North Solarite Reserve",
SC2_RACESWAP_LOC_ID_OFFSET + 11602,
LocationType.VANILLA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.AMON_S_REACH_Z.mission_name,
"East Solarite Reserve",
SC2_RACESWAP_LOC_ID_OFFSET + 11603,
LocationType.VANILLA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.AMON_S_REACH_Z.mission_name,
"West Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 11604,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.AMON_S_REACH_Z.mission_name,
"South Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 11605,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.AMON_S_REACH_Z.mission_name,
"Northwest Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 11606,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.AMON_S_REACH_Z.mission_name,
"East Launch Bay",
SC2_RACESWAP_LOC_ID_OFFSET + 11607,
LocationType.EXTRA,
lambda state: (
logic.zerg_competent_comp(state)
and logic.zerg_basic_kerriganless_anti_air(state)
),
),
make_location_data(
SC2Mission.LAST_STAND_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 11700,
LocationType.VICTORY,
logic.terran_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND_T.mission_name,
"West Zenith Stone",
SC2_RACESWAP_LOC_ID_OFFSET + 11701,
LocationType.VANILLA,
logic.terran_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND_T.mission_name,
"North Zenith Stone",
SC2_RACESWAP_LOC_ID_OFFSET + 11702,
LocationType.VANILLA,
logic.terran_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND_T.mission_name,
"East Zenith Stone",
SC2_RACESWAP_LOC_ID_OFFSET + 11703,
LocationType.VANILLA,
logic.terran_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND_T.mission_name,
"1 Billion Zerg",
SC2_RACESWAP_LOC_ID_OFFSET + 11704,
LocationType.EXTRA,
logic.terran_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND_T.mission_name,
"1.5 Billion Zerg",
SC2_RACESWAP_LOC_ID_OFFSET + 11705,
LocationType.VANILLA,
lambda state: logic.terran_last_stand_requirement(state)
and logic.terran_defense_rating(state, True, True) >= 13,
),
make_location_data(
SC2Mission.LAST_STAND_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 11800,
LocationType.VICTORY,
logic.zerg_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND_Z.mission_name,
"West Zenith Stone",
SC2_RACESWAP_LOC_ID_OFFSET + 11801,
LocationType.VANILLA,
logic.zerg_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND_Z.mission_name,
"North Zenith Stone",
SC2_RACESWAP_LOC_ID_OFFSET + 11802,
LocationType.VANILLA,
logic.zerg_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND_Z.mission_name,
"East Zenith Stone",
SC2_RACESWAP_LOC_ID_OFFSET + 11803,
LocationType.VANILLA,
logic.zerg_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND_Z.mission_name,
"1 Billion Zerg",
SC2_RACESWAP_LOC_ID_OFFSET + 11804,
LocationType.EXTRA,
logic.zerg_last_stand_requirement,
),
make_location_data(
SC2Mission.LAST_STAND_Z.mission_name,
"1.5 Billion Zerg",
SC2_RACESWAP_LOC_ID_OFFSET + 11805,
LocationType.VANILLA,
logic.zerg_last_stand_requirement,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 11900,
LocationType.VICTORY,
logic.terran_beats_protoss_deathball,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON_T.mission_name,
"South Solarite",
SC2_RACESWAP_LOC_ID_OFFSET + 11901,
LocationType.VANILLA,
logic.terran_beats_protoss_deathball,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON_T.mission_name,
"North Solarite",
SC2_RACESWAP_LOC_ID_OFFSET + 11902,
LocationType.VANILLA,
logic.terran_beats_protoss_deathball,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON_T.mission_name,
"Northwest Solarite",
SC2_RACESWAP_LOC_ID_OFFSET + 11903,
LocationType.VANILLA,
logic.terran_beats_protoss_deathball,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON_T.mission_name,
"Rescue Medics",
SC2_RACESWAP_LOC_ID_OFFSET + 11904,
LocationType.EXTRA,
logic.terran_beats_protoss_deathball,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON_T.mission_name,
"Destroy Gateways",
SC2_RACESWAP_LOC_ID_OFFSET + 11905,
LocationType.CHALLENGE,
logic.terran_beats_protoss_deathball,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 12000,
LocationType.VICTORY,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON_Z.mission_name,
"South Solarite",
SC2_RACESWAP_LOC_ID_OFFSET + 12001,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON_Z.mission_name,
"North Solarite",
SC2_RACESWAP_LOC_ID_OFFSET + 12002,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON_Z.mission_name,
"Northwest Solarite",
SC2_RACESWAP_LOC_ID_OFFSET + 12003,
LocationType.VANILLA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON_Z.mission_name,
"Rescue Infested Medics",
SC2_RACESWAP_LOC_ID_OFFSET + 12004,
LocationType.EXTRA,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.FORBIDDEN_WEAPON_Z.mission_name,
"Destroy Gateways",
SC2_RACESWAP_LOC_ID_OFFSET + 12005,
LocationType.CHALLENGE,
logic.zerg_competent_comp_competent_aa,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 12100,
LocationType.VICTORY,
logic.terran_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_T.mission_name,
"Mid Celestial Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12101,
LocationType.EXTRA,
logic.terran_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_T.mission_name,
"West Celestial Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12102,
LocationType.EXTRA,
logic.terran_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_T.mission_name,
"South Celestial Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12103,
LocationType.EXTRA,
logic.terran_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_T.mission_name,
"East Celestial Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12104,
LocationType.EXTRA,
logic.terran_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_T.mission_name,
"North Celestial Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12105,
LocationType.EXTRA,
logic.terran_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_T.mission_name,
"Titanic Warp Prism",
SC2_RACESWAP_LOC_ID_OFFSET + 12106,
LocationType.VANILLA,
logic.terran_temple_of_unification_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_T.mission_name,
"Terran Main Base",
SC2_RACESWAP_LOC_ID_OFFSET + 12107,
LocationType.MASTERY,
lambda state: (
logic.terran_temple_of_unification_requirement(state)
and logic.terran_base_trasher(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_T.mission_name,
"Protoss Main Base",
SC2_RACESWAP_LOC_ID_OFFSET + 12108,
LocationType.MASTERY,
lambda state: (
logic.terran_temple_of_unification_requirement(state)
and logic.terran_base_trasher(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 12200,
LocationType.VICTORY,
logic.zerg_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_Z.mission_name,
"Mid Celestial Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12201,
LocationType.EXTRA,
logic.zerg_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_Z.mission_name,
"West Celestial Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12202,
LocationType.EXTRA,
logic.zerg_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_Z.mission_name,
"South Celestial Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12203,
LocationType.EXTRA,
logic.zerg_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_Z.mission_name,
"East Celestial Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12204,
LocationType.EXTRA,
logic.zerg_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_Z.mission_name,
"North Celestial Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12205,
LocationType.EXTRA,
logic.zerg_temple_of_unification_requirement,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_Z.mission_name,
"Titanic Warp Prism",
SC2_RACESWAP_LOC_ID_OFFSET + 12206,
LocationType.VANILLA,
logic.zerg_temple_of_unification_requirement,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_Z.mission_name,
"Terran Main Base",
SC2_RACESWAP_LOC_ID_OFFSET + 12207,
LocationType.MASTERY,
lambda state: (
logic.zerg_temple_of_unification_requirement(state)
and logic.zerg_base_buster(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.TEMPLE_OF_UNIFICATION_Z.mission_name,
"Protoss Main Base",
SC2_RACESWAP_LOC_ID_OFFSET + 12208,
LocationType.MASTERY,
lambda state: (
logic.zerg_temple_of_unification_requirement(state)
and logic.zerg_base_buster(state)
),
flags=LocationFlag.BASEBUST,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 12500,
LocationType.VICTORY,
logic.terran_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_T.mission_name,
"Artanis",
SC2_RACESWAP_LOC_ID_OFFSET + 12501,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_T.mission_name,
"Northwest Void Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 12502,
LocationType.EXTRA,
logic.terran_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_T.mission_name,
"Northeast Void Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 12503,
LocationType.EXTRA,
logic.terran_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_T.mission_name,
"Southwest Void Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 12504,
LocationType.EXTRA,
logic.terran_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_T.mission_name,
"Southeast Void Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 12505,
LocationType.EXTRA,
logic.terran_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_T.mission_name,
"South Xel'Naga Vessel",
SC2_RACESWAP_LOC_ID_OFFSET + 12506,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_T.mission_name,
"Mid Xel'Naga Vessel",
SC2_RACESWAP_LOC_ID_OFFSET + 12507,
LocationType.VANILLA,
logic.terran_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_T.mission_name,
"North Xel'Naga Vessel",
SC2_RACESWAP_LOC_ID_OFFSET + 12508,
LocationType.VANILLA,
logic.terran_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 12600,
LocationType.VICTORY,
logic.zerg_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_Z.mission_name,
"Artanis",
SC2_RACESWAP_LOC_ID_OFFSET + 12601,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_Z.mission_name,
"Northwest Void Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 12602,
LocationType.EXTRA,
logic.zerg_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_Z.mission_name,
"Northeast Void Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 12603,
LocationType.EXTRA,
logic.zerg_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_Z.mission_name,
"Southwest Void Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 12604,
LocationType.EXTRA,
logic.zerg_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_Z.mission_name,
"Southeast Void Crystal",
SC2_RACESWAP_LOC_ID_OFFSET + 12605,
LocationType.EXTRA,
logic.zerg_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_Z.mission_name,
"South Xel'Naga Vessel",
SC2_RACESWAP_LOC_ID_OFFSET + 12606,
LocationType.VANILLA,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_Z.mission_name,
"Mid Xel'Naga Vessel",
SC2_RACESWAP_LOC_ID_OFFSET + 12607,
LocationType.VANILLA,
logic.zerg_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.HARBINGER_OF_OBLIVION_Z.mission_name,
"North Xel'Naga Vessel",
SC2_RACESWAP_LOC_ID_OFFSET + 12608,
LocationType.VANILLA,
logic.zerg_harbinger_of_oblivion_requirement,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 12700,
LocationType.VICTORY,
logic.terran_unsealing_the_past_requirement,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_T.mission_name,
"Zerg Cleared",
SC2_RACESWAP_LOC_ID_OFFSET + 12701,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_T.mission_name,
"First Stasis Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12702,
LocationType.EXTRA,
lambda state: (
logic.advanced_tactics
or logic.terran_unsealing_the_past_requirement(state)
),
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_T.mission_name,
"Second Stasis Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12703,
LocationType.EXTRA,
logic.terran_unsealing_the_past_requirement,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_T.mission_name,
"Third Stasis Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12704,
LocationType.EXTRA,
logic.terran_unsealing_the_past_requirement,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_T.mission_name,
"Fourth Stasis Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12705,
LocationType.EXTRA,
logic.terran_unsealing_the_past_requirement,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_T.mission_name,
"South Power Core",
SC2_RACESWAP_LOC_ID_OFFSET + 12706,
LocationType.VANILLA,
lambda state: (
logic.terran_unsealing_the_past_requirement(state)
and (
adv_tactics
or logic.terran_air(state)
or state.has_all(
{item_names.GOLIATH, item_names.GOLIATH_JUMP_JETS}, player
)
)
),
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_T.mission_name,
"East Power Core",
SC2_RACESWAP_LOC_ID_OFFSET + 12707,
LocationType.VANILLA,
lambda state: (
logic.terran_unsealing_the_past_requirement(state)
and (
adv_tactics
or logic.terran_air(state)
or state.has_all(
{item_names.GOLIATH, item_names.GOLIATH_JUMP_JETS}, player
)
)
),
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 12800,
LocationType.VICTORY,
logic.zerg_unsealing_the_past_requirement,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_Z.mission_name,
"Zerg Cleared",
SC2_RACESWAP_LOC_ID_OFFSET + 12801,
LocationType.EXTRA,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_Z.mission_name,
"First Stasis Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12802,
LocationType.EXTRA,
lambda state: (
logic.advanced_tactics
or logic.zerg_unsealing_the_past_requirement(state)
),
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_Z.mission_name,
"Second Stasis Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12803,
LocationType.EXTRA,
logic.zerg_unsealing_the_past_requirement,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_Z.mission_name,
"Third Stasis Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12804,
LocationType.EXTRA,
logic.zerg_unsealing_the_past_requirement,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_Z.mission_name,
"Fourth Stasis Lock",
SC2_RACESWAP_LOC_ID_OFFSET + 12805,
LocationType.EXTRA,
logic.zerg_unsealing_the_past_requirement,
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_Z.mission_name,
"South Power Core",
SC2_RACESWAP_LOC_ID_OFFSET + 12806,
LocationType.VANILLA,
lambda state: (
logic.zerg_unsealing_the_past_requirement(state)
and (
adv_tactics
or (
state.has(item_names.MUTALISK, player)
or logic.morph_brood_lord(state)
or logic.morph_guardian(state)
)
)
),
),
make_location_data(
SC2Mission.UNSEALING_THE_PAST_Z.mission_name,
"East Power Core",
SC2_RACESWAP_LOC_ID_OFFSET + 12807,
LocationType.VANILLA,
lambda state: (
logic.zerg_unsealing_the_past_requirement(state)
and (
adv_tactics
or (
state.has(item_names.MUTALISK, player)
or logic.morph_brood_lord(state)
or logic.morph_guardian(state)
)
)
),
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 12900,
LocationType.VICTORY,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"North Sector: West Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 12901,
LocationType.VANILLA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"North Sector: Northeast Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 12902,
LocationType.EXTRA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"North Sector: Southeast Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 12903,
LocationType.EXTRA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"South Sector: West Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 12904,
LocationType.VANILLA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"South Sector: North Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 12905,
LocationType.EXTRA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"South Sector: East Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 12906,
LocationType.EXTRA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"West Sector: West Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 12907,
LocationType.VANILLA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"West Sector: Mid Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 12908,
LocationType.EXTRA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"West Sector: East Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 12909,
LocationType.EXTRA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"East Sector: North Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 12910,
LocationType.VANILLA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"East Sector: West Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 12911,
LocationType.EXTRA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"East Sector: South Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 12912,
LocationType.EXTRA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_T.mission_name,
"Purifier Warden",
SC2_RACESWAP_LOC_ID_OFFSET + 12913,
LocationType.VANILLA,
logic.terran_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 13000,
LocationType.VICTORY,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"North Sector: West Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 13001,
LocationType.VANILLA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"North Sector: Northeast Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 13002,
LocationType.EXTRA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"North Sector: Southeast Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 13003,
LocationType.EXTRA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"South Sector: West Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 13004,
LocationType.VANILLA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"South Sector: North Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 13005,
LocationType.EXTRA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"South Sector: East Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 13006,
LocationType.EXTRA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"West Sector: West Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 13007,
LocationType.VANILLA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"West Sector: Mid Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 13008,
LocationType.EXTRA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"West Sector: East Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 13009,
LocationType.EXTRA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"East Sector: North Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 13010,
LocationType.VANILLA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"East Sector: West Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 13011,
LocationType.EXTRA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"East Sector: South Null Circuit",
SC2_RACESWAP_LOC_ID_OFFSET + 13012,
LocationType.EXTRA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.PURIFICATION_Z.mission_name,
"Purifier Warden",
SC2_RACESWAP_LOC_ID_OFFSET + 13013,
LocationType.VANILLA,
logic.zerg_purification_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 13100,
LocationType.VICTORY,
logic.terran_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_T.mission_name,
"First Terrazine Fog",
SC2_RACESWAP_LOC_ID_OFFSET + 13101,
LocationType.EXTRA,
logic.terran_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_T.mission_name,
"Southwest Guardian",
SC2_RACESWAP_LOC_ID_OFFSET + 13102,
LocationType.EXTRA,
logic.terran_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_T.mission_name,
"West Guardian",
SC2_RACESWAP_LOC_ID_OFFSET + 13103,
LocationType.EXTRA,
logic.terran_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_T.mission_name,
"Northwest Guardian",
SC2_RACESWAP_LOC_ID_OFFSET + 13104,
LocationType.EXTRA,
logic.terran_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_T.mission_name,
"Northeast Guardian",
SC2_RACESWAP_LOC_ID_OFFSET + 13105,
LocationType.EXTRA,
logic.terran_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_T.mission_name,
"North Mothership",
SC2_RACESWAP_LOC_ID_OFFSET + 13106,
LocationType.VANILLA,
logic.terran_steps_of_the_rite_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_T.mission_name,
"South Mothership",
SC2_RACESWAP_LOC_ID_OFFSET + 13107,
LocationType.VANILLA,
logic.terran_steps_of_the_rite_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 13200,
LocationType.VICTORY,
logic.zerg_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_Z.mission_name,
"First Terrazine Fog",
SC2_RACESWAP_LOC_ID_OFFSET + 13201,
LocationType.EXTRA,
logic.zerg_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_Z.mission_name,
"Southwest Guardian",
SC2_RACESWAP_LOC_ID_OFFSET + 13202,
LocationType.EXTRA,
logic.zerg_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_Z.mission_name,
"West Guardian",
SC2_RACESWAP_LOC_ID_OFFSET + 13203,
LocationType.EXTRA,
logic.zerg_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_Z.mission_name,
"Northwest Guardian",
SC2_RACESWAP_LOC_ID_OFFSET + 13204,
LocationType.EXTRA,
logic.zerg_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_Z.mission_name,
"Northeast Guardian",
SC2_RACESWAP_LOC_ID_OFFSET + 13205,
LocationType.EXTRA,
logic.zerg_steps_of_the_rite_requirement,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_Z.mission_name,
"North Mothership",
SC2_RACESWAP_LOC_ID_OFFSET + 13206,
LocationType.VANILLA,
logic.zerg_steps_of_the_rite_requirement,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.STEPS_OF_THE_RITE_Z.mission_name,
"South Mothership",
SC2_RACESWAP_LOC_ID_OFFSET + 13207,
LocationType.VANILLA,
logic.zerg_steps_of_the_rite_requirement,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.RAK_SHIR_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 13300,
LocationType.VICTORY,
logic.terran_rak_shir_requirement,
),
make_location_data(
SC2Mission.RAK_SHIR_T.mission_name,
"North Slayn Elemental",
SC2_RACESWAP_LOC_ID_OFFSET + 13301,
LocationType.VANILLA,
logic.terran_rak_shir_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.RAK_SHIR_T.mission_name,
"Southwest Slayn Elemental",
SC2_RACESWAP_LOC_ID_OFFSET + 13302,
LocationType.VANILLA,
logic.terran_rak_shir_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.RAK_SHIR_T.mission_name,
"East Slayn Elemental",
SC2_RACESWAP_LOC_ID_OFFSET + 13303,
LocationType.VANILLA,
logic.terran_rak_shir_requirement,
hard_rule=logic.terran_any_anti_air,
),
make_location_data(
SC2Mission.RAK_SHIR_T.mission_name,
"Resource Pickups",
SC2_RACESWAP_LOC_ID_OFFSET + 13304,
LocationType.EXTRA,
logic.terran_rak_shir_requirement,
),
make_location_data(
SC2Mission.RAK_SHIR_T.mission_name,
"Destroy Nexuses",
SC2_RACESWAP_LOC_ID_OFFSET + 13305,
LocationType.CHALLENGE,
logic.terran_rak_shir_requirement,
),
make_location_data(
SC2Mission.RAK_SHIR_T.mission_name,
"Win in under 15 minutes",
SC2_RACESWAP_LOC_ID_OFFSET + 13306,
LocationType.MASTERY,
logic.terran_rak_shir_requirement,
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.RAK_SHIR_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 13400,
LocationType.VICTORY,
logic.zerg_rak_shir_requirement,
),
make_location_data(
SC2Mission.RAK_SHIR_Z.mission_name,
"North Slayn Elemental",
SC2_RACESWAP_LOC_ID_OFFSET + 13401,
LocationType.VANILLA,
logic.zerg_rak_shir_requirement,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.RAK_SHIR_Z.mission_name,
"Southwest Slayn Elemental",
SC2_RACESWAP_LOC_ID_OFFSET + 13402,
LocationType.VANILLA,
logic.zerg_rak_shir_requirement,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.RAK_SHIR_Z.mission_name,
"East Slayn Elemental",
SC2_RACESWAP_LOC_ID_OFFSET + 13403,
LocationType.VANILLA,
logic.zerg_rak_shir_requirement,
hard_rule=logic.zerg_any_anti_air,
),
make_location_data(
SC2Mission.RAK_SHIR_Z.mission_name,
"Resource Pickups",
SC2_RACESWAP_LOC_ID_OFFSET + 13404,
LocationType.EXTRA,
logic.zerg_rak_shir_requirement,
),
make_location_data(
SC2Mission.RAK_SHIR_Z.mission_name,
"Destroy Nexuses",
SC2_RACESWAP_LOC_ID_OFFSET + 13405,
LocationType.CHALLENGE,
logic.zerg_rak_shir_requirement,
),
make_location_data(
SC2Mission.RAK_SHIR_Z.mission_name,
"Win in under 15 minutes",
SC2_RACESWAP_LOC_ID_OFFSET + 13406,
LocationType.MASTERY,
logic.zerg_rak_shir_requirement,
flags=LocationFlag.SPEEDRUN,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 13500,
LocationType.VICTORY,
logic.terran_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE_T.mission_name,
"Northwest Power Core",
SC2_RACESWAP_LOC_ID_OFFSET + 13501,
LocationType.EXTRA,
logic.terran_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE_T.mission_name,
"Northeast Power Core",
SC2_RACESWAP_LOC_ID_OFFSET + 13502,
LocationType.EXTRA,
logic.terran_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE_T.mission_name,
"Southeast Power Core",
SC2_RACESWAP_LOC_ID_OFFSET + 13503,
LocationType.EXTRA,
logic.terran_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE_T.mission_name,
"West Hybrid Stasis Chamber",
SC2_RACESWAP_LOC_ID_OFFSET + 13504,
LocationType.VANILLA,
logic.terran_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE_T.mission_name,
"Southeast Hybrid Stasis Chamber",
SC2_RACESWAP_LOC_ID_OFFSET + 13505,
LocationType.VANILLA,
lambda state: (
logic.terran_templars_charge_requirement(state)
and logic.terran_air(state)
),
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 13600,
LocationType.VICTORY,
logic.zerg_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE_Z.mission_name,
"Northwest Power Core",
SC2_RACESWAP_LOC_ID_OFFSET + 13601,
LocationType.EXTRA,
logic.zerg_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE_Z.mission_name,
"Northeast Power Core",
SC2_RACESWAP_LOC_ID_OFFSET + 13602,
LocationType.EXTRA,
logic.zerg_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE_Z.mission_name,
"Southeast Power Core",
SC2_RACESWAP_LOC_ID_OFFSET + 13603,
LocationType.EXTRA,
logic.zerg_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE_Z.mission_name,
"West Hybrid Stasis Chamber",
SC2_RACESWAP_LOC_ID_OFFSET + 13604,
LocationType.VANILLA,
logic.zerg_templars_charge_requirement,
),
make_location_data(
SC2Mission.TEMPLAR_S_CHARGE_Z.mission_name,
"Southeast Hybrid Stasis Chamber",
SC2_RACESWAP_LOC_ID_OFFSET + 13605,
LocationType.VANILLA,
logic.zerg_templars_charge_requirement,
),
make_location_data(
SC2Mission.THE_HOST_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 13900,
LocationType.VICTORY,
logic.terran_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_T.mission_name,
"Southeast Void Shard",
SC2_RACESWAP_LOC_ID_OFFSET + 13901,
LocationType.EXTRA,
logic.terran_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_T.mission_name,
"South Void Shard",
SC2_RACESWAP_LOC_ID_OFFSET + 13902,
LocationType.EXTRA,
logic.terran_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_T.mission_name,
"Southwest Void Shard",
SC2_RACESWAP_LOC_ID_OFFSET + 13903,
LocationType.EXTRA,
logic.terran_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_T.mission_name,
"North Void Shard",
SC2_RACESWAP_LOC_ID_OFFSET + 13904,
LocationType.EXTRA,
logic.terran_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_T.mission_name,
"Northwest Void Shard",
SC2_RACESWAP_LOC_ID_OFFSET + 13905,
LocationType.EXTRA,
logic.terran_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_T.mission_name,
"Nerazim Warp in Zone",
SC2_RACESWAP_LOC_ID_OFFSET + 13906,
LocationType.VANILLA,
logic.terran_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_T.mission_name,
"Tal'darim Warp in Zone",
SC2_RACESWAP_LOC_ID_OFFSET + 13907,
LocationType.VANILLA,
logic.terran_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_T.mission_name,
"Purifier Warp in Zone",
SC2_RACESWAP_LOC_ID_OFFSET + 13908,
LocationType.VANILLA,
logic.terran_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 14000,
LocationType.VICTORY,
logic.zerg_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_Z.mission_name,
"Southeast Void Shard",
SC2_RACESWAP_LOC_ID_OFFSET + 14001,
LocationType.EXTRA,
logic.zerg_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_Z.mission_name,
"South Void Shard",
SC2_RACESWAP_LOC_ID_OFFSET + 14002,
LocationType.EXTRA,
logic.zerg_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_Z.mission_name,
"Southwest Void Shard",
SC2_RACESWAP_LOC_ID_OFFSET + 14003,
LocationType.EXTRA,
logic.zerg_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_Z.mission_name,
"North Void Shard",
SC2_RACESWAP_LOC_ID_OFFSET + 14004,
LocationType.EXTRA,
logic.zerg_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_Z.mission_name,
"Northwest Void Shard",
SC2_RACESWAP_LOC_ID_OFFSET + 14005,
LocationType.EXTRA,
logic.zerg_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_Z.mission_name,
"Nerazim Warp in Zone",
SC2_RACESWAP_LOC_ID_OFFSET + 14006,
LocationType.VANILLA,
logic.zerg_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_Z.mission_name,
"Tal'darim Warp in Zone",
SC2_RACESWAP_LOC_ID_OFFSET + 14007,
LocationType.VANILLA,
logic.zerg_the_host_requirement,
),
make_location_data(
SC2Mission.THE_HOST_Z.mission_name,
"Purifier Warp in Zone",
SC2_RACESWAP_LOC_ID_OFFSET + 14008,
LocationType.VANILLA,
logic.zerg_the_host_requirement,
),
make_location_data(
SC2Mission.SALVATION_T.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 14100,
LocationType.VICTORY,
logic.terran_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION_T.mission_name,
"Fabrication Matrix",
SC2_RACESWAP_LOC_ID_OFFSET + 14101,
LocationType.EXTRA,
logic.terran_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION_T.mission_name,
"Assault Cluster",
SC2_RACESWAP_LOC_ID_OFFSET + 14102,
LocationType.EXTRA,
logic.terran_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION_T.mission_name,
"Hull Breach",
SC2_RACESWAP_LOC_ID_OFFSET + 14103,
LocationType.EXTRA,
logic.terran_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION_T.mission_name,
"Core Critical",
SC2_RACESWAP_LOC_ID_OFFSET + 14104,
LocationType.EXTRA,
logic.terran_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION_T.mission_name,
"Kill Brutalisk",
SC2_RACESWAP_LOC_ID_OFFSET + 14105,
LocationType.MASTERY,
logic.terran_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION_Z.mission_name,
"Victory",
SC2_RACESWAP_LOC_ID_OFFSET + 14200,
LocationType.VICTORY,
logic.zerg_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION_Z.mission_name,
"Fabrication Matrix",
SC2_RACESWAP_LOC_ID_OFFSET + 14201,
LocationType.EXTRA,
logic.zerg_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION_Z.mission_name,
"Assault Cluster",
SC2_RACESWAP_LOC_ID_OFFSET + 14202,
LocationType.EXTRA,
logic.zerg_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION_Z.mission_name,
"Hull Breach",
SC2_RACESWAP_LOC_ID_OFFSET + 14203,
LocationType.EXTRA,
logic.zerg_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION_Z.mission_name,
"Core Critical",
SC2_RACESWAP_LOC_ID_OFFSET + 14204,
LocationType.EXTRA,
logic.zerg_salvation_requirement,
),
make_location_data(
SC2Mission.SALVATION_Z.mission_name,
"Kill Brutalisk",
SC2_RACESWAP_LOC_ID_OFFSET + 14205,
LocationType.MASTERY,
logic.zerg_salvation_requirement,
),
]
# Filtering out excluded locations
if world is not None:
excluded_location_types = get_location_types(
world, LocationInclusion.option_disabled
)
excluded_location_flags = get_location_flags(
world, LocationInclusion.option_disabled
)
chance_location_types = get_location_types(
world, LocationInclusion.option_half_chance
)
chance_location_flags = get_location_flags(
world, LocationInclusion.option_half_chance
)
plando_locations = get_plando_locations(world)
exclude_locations = world.options.exclude_locations.value
def include_location(location: LocationData) -> bool:
if location.type is LocationType.VICTORY:
return True
if location.name in plando_locations:
return True
if location.name in exclude_locations:
return False
if location.flags & excluded_location_flags:
return False
if location.type in excluded_location_types:
return False
if location.flags & chance_location_flags:
if world.random.random() < 0.5:
return False
if location.type in chance_location_types:
if world.random.random() < 0.5:
return False
return True
location_table = [
location for location in location_table if include_location(location)
]
beat_events: List[LocationData] = []
victory_caches: List[LocationData] = []
VICTORY_CACHE_SIZE = 10
for location_data in location_table:
# Generating Beat event and Victory Cache locations
if location_data.type == LocationType.VICTORY:
beat_events.append(
location_data._replace(name="Beat " + location_data.region, code=None) # type: ignore
)
for v in range(VICTORY_CACHE_SIZE):
victory_caches.append(
location_data._replace(
name=location_data.name + f" Cache ({v + 1})",
code=location_data.code + VICTORY_CACHE_OFFSET + v,
type=LocationType.VICTORY_CACHE,
)
)
return tuple(location_table + beat_events + victory_caches)
DEFAULT_LOCATION_LIST = get_locations(None)
"""A location table with `None` as the input world; does not contain logic rules"""
lookup_location_id_to_type = {
loc.code: loc.type for loc in DEFAULT_LOCATION_LIST if loc.code is not None
}
lookup_location_id_to_flags = {
loc.code: loc.flags for loc in DEFAULT_LOCATION_LIST if loc.code is not None
}