Feature highlights: - Adds many content to the SC2 game - Allows custom mission order - Adds race-swapped missions for build missions (except Epilogue and NCO) - Allows War Council Nerfs (Protoss units can get pre - War Council State, alternative units get another custom nerf to match the power level of base units) - Revamps Predator's upgrade tree (never was considered strategically important) - Adds some units and upgrades - Locked and excluded items can specify quantity - Key mode (if opt-in, missions require keys to be unlocked on top of their regular regular requirements - Victory caches - Victory locations can grant multiple items to the multiworld instead of one - The generator is more resilient for generator failures as it validates logic for item excludes - Fixes the following issues: - https://github.com/ArchipelagoMW/Archipelago/issues/3531 - https://github.com/ArchipelagoMW/Archipelago/issues/3548
195 lines
8.6 KiB
Python
195 lines
8.6 KiB
Python
"""
|
|
Mission group aliases for use in yaml options.
|
|
"""
|
|
|
|
from typing import Dict, List, Set
|
|
from .mission_tables import SC2Mission, MissionFlag, SC2Campaign
|
|
|
|
|
|
class MissionGroupNames:
|
|
ALL_MISSIONS = "All Missions"
|
|
WOL_MISSIONS = "WoL Missions"
|
|
HOTS_MISSIONS = "HotS Missions"
|
|
LOTV_MISSIONS = "LotV Missions"
|
|
NCO_MISSIONS = "NCO Missions"
|
|
PROPHECY_MISSIONS = "Prophecy Missions"
|
|
PROLOGUE_MISSIONS = "Prologue Missions"
|
|
EPILOGUE_MISSIONS = "Epilogue Missions"
|
|
|
|
TERRAN_MISSIONS = "Terran Missions"
|
|
ZERG_MISSIONS = "Zerg Missions"
|
|
PROTOSS_MISSIONS = "Protoss Missions"
|
|
NOBUILD_MISSIONS = "No-Build Missions"
|
|
DEFENSE_MISSIONS = "Defense Missions"
|
|
AUTO_SCROLLER_MISSIONS = "Auto-Scroller Missions"
|
|
COUNTDOWN_MISSIONS = "Countdown Missions"
|
|
KERRIGAN_MISSIONS = "Kerrigan Missions"
|
|
VANILLA_SOA_MISSIONS = "Vanilla SOA Missions"
|
|
TERRAN_ALLY_MISSIONS = "Controllable Terran Ally Missions"
|
|
ZERG_ALLY_MISSIONS = "Controllable Zerg Ally Missions"
|
|
PROTOSS_ALLY_MISSIONS = "Controllable Protoss Ally Missions"
|
|
VS_TERRAN_MISSIONS = "Vs Terran Missions"
|
|
VS_ZERG_MISSIONS = "Vs Zerg Missions"
|
|
VS_PROTOSS_MISSIONS = "Vs Protoss Missions"
|
|
RACESWAP_MISSIONS = "Raceswap Missions"
|
|
|
|
# By planet
|
|
PLANET_MAR_SARA_MISSIONS = "Planet Mar Sara"
|
|
PLANET_CHAR_MISSIONS = "Planet Char"
|
|
PLANET_KORHAL_MISSIONS = "Planet Korhal"
|
|
PLANET_AIUR_MISSIONS = "Planet Aiur"
|
|
|
|
# By quest chain
|
|
WOL_MAR_SARA_MISSIONS = "WoL Mar Sara"
|
|
WOL_COLONIST_MISSIONS = "WoL Colonist"
|
|
WOL_ARTIFACT_MISSIONS = "WoL Artifact"
|
|
WOL_COVERT_MISSIONS = "WoL Covert"
|
|
WOL_REBELLION_MISSIONS = "WoL Rebellion"
|
|
WOL_CHAR_MISSIONS = "WoL Char"
|
|
|
|
HOTS_UMOJA_MISSIONS = "HotS Umoja"
|
|
HOTS_KALDIR_MISSIONS = "HotS Kaldir"
|
|
HOTS_CHAR_MISSIONS = "HotS Char"
|
|
HOTS_ZERUS_MISSIONS = "HotS Zerus"
|
|
HOTS_SKYGEIRR_MISSIONS = "HotS Skygeirr Station"
|
|
HOTS_DOMINION_SPACE_MISSIONS = "HotS Dominion Space"
|
|
HOTS_KORHAL_MISSIONS = "HotS Korhal"
|
|
|
|
LOTV_AIUR_MISSIONS = "LotV Aiur"
|
|
LOTV_KORHAL_MISSIONS = "LotV Korhal"
|
|
LOTV_SHAKURAS_MISSIONS = "LotV Shakuras"
|
|
LOTV_ULNAR_MISSIONS = "LotV Ulnar"
|
|
LOTV_PURIFIER_MISSIONS = "LotV Purifier"
|
|
LOTV_TALDARIM_MISSIONS = "LotV Tal'darim"
|
|
LOTV_MOEBIUS_MISSIONS = "LotV Moebius"
|
|
LOTV_RETURN_TO_AIUR_MISSIONS = "LotV Return to Aiur"
|
|
|
|
NCO_MISSION_PACK_1 = "NCO Mission Pack 1"
|
|
NCO_MISSION_PACK_2 = "NCO Mission Pack 2"
|
|
NCO_MISSION_PACK_3 = "NCO Mission Pack 3"
|
|
|
|
@classmethod
|
|
def get_all_group_names(cls) -> Set[str]:
|
|
return {
|
|
name
|
|
for identifier, name in cls.__dict__.items()
|
|
if not identifier.startswith("_") and not identifier.startswith("get_")
|
|
}
|
|
|
|
|
|
mission_groups: Dict[str, List[str]] = {}
|
|
|
|
mission_groups[MissionGroupNames.ALL_MISSIONS] = [mission.mission_name for mission in SC2Mission]
|
|
for group_name, campaign in (
|
|
(MissionGroupNames.WOL_MISSIONS, SC2Campaign.WOL),
|
|
(MissionGroupNames.HOTS_MISSIONS, SC2Campaign.HOTS),
|
|
(MissionGroupNames.LOTV_MISSIONS, SC2Campaign.LOTV),
|
|
(MissionGroupNames.NCO_MISSIONS, SC2Campaign.NCO),
|
|
(MissionGroupNames.PROPHECY_MISSIONS, SC2Campaign.PROPHECY),
|
|
(MissionGroupNames.PROLOGUE_MISSIONS, SC2Campaign.PROLOGUE),
|
|
(MissionGroupNames.EPILOGUE_MISSIONS, SC2Campaign.EPILOGUE),
|
|
):
|
|
mission_groups[group_name] = [mission.mission_name for mission in SC2Mission if mission.campaign == campaign]
|
|
|
|
for group_name, flags in (
|
|
(MissionGroupNames.TERRAN_MISSIONS, MissionFlag.Terran),
|
|
(MissionGroupNames.ZERG_MISSIONS, MissionFlag.Zerg),
|
|
(MissionGroupNames.PROTOSS_MISSIONS, MissionFlag.Protoss),
|
|
(MissionGroupNames.NOBUILD_MISSIONS, MissionFlag.NoBuild),
|
|
(MissionGroupNames.DEFENSE_MISSIONS, MissionFlag.Defense),
|
|
(MissionGroupNames.AUTO_SCROLLER_MISSIONS, MissionFlag.AutoScroller),
|
|
(MissionGroupNames.COUNTDOWN_MISSIONS, MissionFlag.Countdown),
|
|
(MissionGroupNames.KERRIGAN_MISSIONS, MissionFlag.Kerrigan),
|
|
(MissionGroupNames.VANILLA_SOA_MISSIONS, MissionFlag.VanillaSoa),
|
|
(MissionGroupNames.TERRAN_ALLY_MISSIONS, MissionFlag.AiTerranAlly),
|
|
(MissionGroupNames.ZERG_ALLY_MISSIONS, MissionFlag.AiZergAlly),
|
|
(MissionGroupNames.PROTOSS_ALLY_MISSIONS, MissionFlag.AiProtossAlly),
|
|
(MissionGroupNames.VS_TERRAN_MISSIONS, MissionFlag.VsTerran),
|
|
(MissionGroupNames.VS_ZERG_MISSIONS, MissionFlag.VsZerg),
|
|
(MissionGroupNames.VS_PROTOSS_MISSIONS, MissionFlag.VsProtoss),
|
|
(MissionGroupNames.RACESWAP_MISSIONS, MissionFlag.RaceSwap),
|
|
):
|
|
mission_groups[group_name] = [mission.mission_name for mission in SC2Mission if flags in mission.flags]
|
|
|
|
for group_name, campaign, chain_name in (
|
|
(MissionGroupNames.WOL_MAR_SARA_MISSIONS, SC2Campaign.WOL, "Mar Sara"),
|
|
(MissionGroupNames.WOL_COLONIST_MISSIONS, SC2Campaign.WOL, "Colonist"),
|
|
(MissionGroupNames.WOL_ARTIFACT_MISSIONS, SC2Campaign.WOL, "Artifact"),
|
|
(MissionGroupNames.WOL_COVERT_MISSIONS, SC2Campaign.WOL, "Covert"),
|
|
(MissionGroupNames.WOL_REBELLION_MISSIONS, SC2Campaign.WOL, "Rebellion"),
|
|
(MissionGroupNames.WOL_CHAR_MISSIONS, SC2Campaign.WOL, "Char"),
|
|
(MissionGroupNames.HOTS_UMOJA_MISSIONS, SC2Campaign.HOTS, "Umoja"),
|
|
(MissionGroupNames.HOTS_KALDIR_MISSIONS, SC2Campaign.HOTS, "Kaldir"),
|
|
(MissionGroupNames.HOTS_CHAR_MISSIONS, SC2Campaign.HOTS, "Char"),
|
|
(MissionGroupNames.HOTS_ZERUS_MISSIONS, SC2Campaign.HOTS, "Zerus"),
|
|
(MissionGroupNames.HOTS_SKYGEIRR_MISSIONS, SC2Campaign.HOTS, "Skygeirr Station"),
|
|
(MissionGroupNames.HOTS_DOMINION_SPACE_MISSIONS, SC2Campaign.HOTS, "Dominion Space"),
|
|
(MissionGroupNames.HOTS_KORHAL_MISSIONS, SC2Campaign.HOTS, "Korhal"),
|
|
(MissionGroupNames.LOTV_AIUR_MISSIONS, SC2Campaign.LOTV, "Aiur"),
|
|
(MissionGroupNames.LOTV_KORHAL_MISSIONS, SC2Campaign.LOTV, "Korhal"),
|
|
(MissionGroupNames.LOTV_SHAKURAS_MISSIONS, SC2Campaign.LOTV, "Shakuras"),
|
|
(MissionGroupNames.LOTV_ULNAR_MISSIONS, SC2Campaign.LOTV, "Ulnar"),
|
|
(MissionGroupNames.LOTV_PURIFIER_MISSIONS, SC2Campaign.LOTV, "Purifier"),
|
|
(MissionGroupNames.LOTV_TALDARIM_MISSIONS, SC2Campaign.LOTV, "Tal'darim"),
|
|
(MissionGroupNames.LOTV_MOEBIUS_MISSIONS, SC2Campaign.LOTV, "Moebius"),
|
|
(MissionGroupNames.LOTV_RETURN_TO_AIUR_MISSIONS, SC2Campaign.LOTV, "Return to Aiur"),
|
|
):
|
|
mission_groups[group_name] = [
|
|
mission.mission_name for mission in SC2Mission if mission.campaign == campaign and mission.area == chain_name
|
|
]
|
|
|
|
mission_groups[MissionGroupNames.NCO_MISSION_PACK_1] = [
|
|
SC2Mission.THE_ESCAPE.mission_name,
|
|
SC2Mission.SUDDEN_STRIKE.mission_name,
|
|
SC2Mission.ENEMY_INTELLIGENCE.mission_name,
|
|
]
|
|
mission_groups[MissionGroupNames.NCO_MISSION_PACK_2] = [
|
|
SC2Mission.TROUBLE_IN_PARADISE.mission_name,
|
|
SC2Mission.NIGHT_TERRORS.mission_name,
|
|
SC2Mission.FLASHPOINT.mission_name,
|
|
]
|
|
mission_groups[MissionGroupNames.NCO_MISSION_PACK_3] = [
|
|
SC2Mission.IN_THE_ENEMY_S_SHADOW.mission_name,
|
|
SC2Mission.DARK_SKIES.mission_name,
|
|
SC2Mission.END_GAME.mission_name,
|
|
]
|
|
|
|
mission_groups[MissionGroupNames.PLANET_MAR_SARA_MISSIONS] = [
|
|
SC2Mission.LIBERATION_DAY.mission_name,
|
|
SC2Mission.THE_OUTLAWS.mission_name,
|
|
SC2Mission.ZERO_HOUR.mission_name,
|
|
]
|
|
mission_groups[MissionGroupNames.PLANET_CHAR_MISSIONS] = [
|
|
SC2Mission.GATES_OF_HELL.mission_name,
|
|
SC2Mission.BELLY_OF_THE_BEAST.mission_name,
|
|
SC2Mission.SHATTER_THE_SKY.mission_name,
|
|
SC2Mission.ALL_IN.mission_name,
|
|
SC2Mission.DOMINATION.mission_name,
|
|
SC2Mission.FIRE_IN_THE_SKY.mission_name,
|
|
SC2Mission.OLD_SOLDIERS.mission_name,
|
|
]
|
|
mission_groups[MissionGroupNames.PLANET_KORHAL_MISSIONS] = [
|
|
SC2Mission.MEDIA_BLITZ.mission_name,
|
|
SC2Mission.PLANETFALL.mission_name,
|
|
SC2Mission.DEATH_FROM_ABOVE.mission_name,
|
|
SC2Mission.THE_RECKONING.mission_name,
|
|
SC2Mission.SKY_SHIELD.mission_name,
|
|
SC2Mission.BROTHERS_IN_ARMS.mission_name,
|
|
]
|
|
mission_groups[MissionGroupNames.PLANET_AIUR_MISSIONS] = [
|
|
SC2Mission.ECHOES_OF_THE_FUTURE.mission_name,
|
|
SC2Mission.FOR_AIUR.mission_name,
|
|
SC2Mission.THE_GROWING_SHADOW.mission_name,
|
|
SC2Mission.THE_SPEAR_OF_ADUN.mission_name,
|
|
SC2Mission.TEMPLAR_S_RETURN.mission_name,
|
|
SC2Mission.THE_HOST.mission_name,
|
|
SC2Mission.SALVATION.mission_name,
|
|
]
|
|
|
|
for mission in SC2Mission:
|
|
if mission.flags & MissionFlag.HasRaceSwap:
|
|
short_name = mission.get_short_name()
|
|
mission_groups[short_name] = [
|
|
mission_var.mission_name for mission_var in SC2Mission if short_name in mission_var.mission_name
|
|
]
|