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
}
