forked from ArchipelagoMW/Archipelago
-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #201 from MatthewMarinets/mm/mission_groups
Mm/mission groups
- Loading branch information
Showing
6 changed files
with
278 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,192 @@ | ||
""" | ||
Mission group aliases for use in yaml options. | ||
""" | ||
from typing import Dict, List, Set | ||
from .MissionTables 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" | ||
|
||
# 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 == SC2Campaign.WOL | ||
] | ||
|
||
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), | ||
): | ||
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, | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
|
||
import unittest | ||
from .. import mission_groups | ||
|
||
class TestMissionGroups(unittest.TestCase): | ||
def test_all_mission_groups_are_defined_and_nonempty(self) -> None: | ||
for mission_group_name in mission_groups.MissionGroupNames.get_all_group_names(): | ||
self.assertIn(mission_group_name, mission_groups.mission_groups) | ||
self.assertTrue(mission_groups.mission_groups[mission_group_name]) |