Sc2: [performance] change default options (#5424)

* sc2: Changing default campaign options to something more performative and desirable for new players

* sc2: Fixing broken test that was missed in roundup

* SC2: Update tests for new defaults

* SC2: Fix incomplete test

* sc2: Updating description for enabled campaigns to mention which are free to play

* sc2: PR comments; Updating additional unit tests that were affected by a default change

* sc2: Adding a comment to the Enabled Campaigns option to list all the valid campaign names

* sc2: Adding quotes wrapping sample values in enabled_campaigns comment to aid copy-pasting

---------

Co-authored-by: Salzkorn <salzkitty@gmail.com>
This commit is contained in:
Phaneros
2025-09-30 09:36:41 -07:00
committed by GitHub
parent 897d5ab089
commit 49f2d30587
7 changed files with 98 additions and 18 deletions

View File

@@ -63,7 +63,7 @@ class Sc2MissionSet(OptionSet):
return self.value.__len__() return self.value.__len__()
class SelectRaces(OptionSet): class SelectedRaces(OptionSet):
""" """
Pick which factions' missions and items can be shuffled into the world. Pick which factions' missions and items can be shuffled into the world.
""" """
@@ -152,6 +152,7 @@ class MissionOrder(Choice):
option_golden_path = 10 option_golden_path = 10
option_hopscotch = 11 option_hopscotch = 11
option_custom = 99 option_custom = 99
default = option_golden_path
class MaximumCampaignSize(Range): class MaximumCampaignSize(Range):
@@ -251,10 +252,21 @@ class PlayerColorNova(ColorChoice):
class EnabledCampaigns(OptionSet): class EnabledCampaigns(OptionSet):
"""Determines which campaign's missions will be used""" """
Determines which campaign's missions will be used.
Wings of Liberty, Prophecy, and Prologue are the only free-to-play campaigns.
Valid campaign names:
- 'Wings of Liberty'
- 'Prophecy'
- 'Heart of the Swarm'
- 'Whispers of Oblivion (Legacy of the Void: Prologue)'
- 'Legacy of the Void'
- 'Into the Void (Legacy of the Void: Epilogue)'
- 'Nova Covert Ops'
"""
display_name = "Enabled Campaigns" display_name = "Enabled Campaigns"
valid_keys = {campaign.campaign_name for campaign in SC2Campaign if campaign != SC2Campaign.GLOBAL} valid_keys = {campaign.campaign_name for campaign in SC2Campaign if campaign != SC2Campaign.GLOBAL}
default = valid_keys default = set((SC2Campaign.WOL.campaign_name,))
class EnableRaceSwapVariants(Choice): class EnableRaceSwapVariants(Choice):
@@ -1342,7 +1354,7 @@ class Starcraft2Options(PerGameCommonOptions):
player_color_zerg: PlayerColorZerg player_color_zerg: PlayerColorZerg
player_color_zerg_primal: PlayerColorZergPrimal player_color_zerg_primal: PlayerColorZergPrimal
player_color_nova: PlayerColorNova player_color_nova: PlayerColorNova
selected_races: SelectRaces selected_races: SelectedRaces
enabled_campaigns: EnabledCampaigns enabled_campaigns: EnabledCampaigns
enable_race_swap: EnableRaceSwapVariants enable_race_swap: EnableRaceSwapVariants
mission_race_balancing: EnableMissionRaceBalancing mission_race_balancing: EnableMissionRaceBalancing
@@ -1436,7 +1448,7 @@ option_groups = [
ShuffleCampaigns, ShuffleCampaigns,
AllInMap, AllInMap,
TwoStartPositions, TwoStartPositions,
SelectRaces, SelectedRaces,
ExcludeVeryHardMissions, ExcludeVeryHardMissions,
EnableMissionRaceBalancing, EnableMissionRaceBalancing,
]), ]),
@@ -1548,7 +1560,7 @@ def get_option_value(world: Union['SC2World', None], name: str) -> int:
def get_enabled_races(world: Optional['SC2World']) -> Set[SC2Race]: def get_enabled_races(world: Optional['SC2World']) -> Set[SC2Race]:
race_names = world.options.selected_races.value if world and len(world.options.selected_races.value) > 0 else SelectRaces.valid_keys race_names = world.options.selected_races.value if world and len(world.options.selected_races.value) > 0 else SelectedRaces.valid_keys
return {race for race in SC2Race if race.get_title() in race_names} return {race for race in SC2Race if race.get_title() in race_names}

View File

@@ -8,8 +8,9 @@ from worlds import AutoWorld
from test.general import gen_steps, call_all from test.general import gen_steps, call_all
from test.bases import WorldTestBase from test.bases import WorldTestBase
from .. import SC2World from .. import SC2World, SC2Campaign
from .. import client from .. import client
from .. import options
class Sc2TestBase(WorldTestBase): class Sc2TestBase(WorldTestBase):
game = client.SC2Context.game game = client.SC2Context.game
@@ -24,6 +25,18 @@ class Sc2SetupTestBase(unittest.TestCase):
This allows potentially generating multiple worlds in one test case, useful for tracking down a rare / sporadic This allows potentially generating multiple worlds in one test case, useful for tracking down a rare / sporadic
crash. crash.
""" """
ALL_CAMPAIGNS = {
'enabled_campaigns': options.EnabledCampaigns.valid_keys,
}
TERRAN_CAMPAIGNS = {
'enabled_campaigns': {SC2Campaign.WOL.campaign_name, SC2Campaign.NCO.campaign_name,}
}
ZERG_CAMPAIGNS = {
'enabled_campaigns': {SC2Campaign.HOTS.campaign_name,}
}
PROTOSS_CAMPAIGNS = {
'enabled_campaigns': {SC2Campaign.PROPHECY.campaign_name, SC2Campaign.PROLOGUE.campaign_name, SC2Campaign.LOTV.campaign_name,}
}
seed: Optional[int] = None seed: Optional[int] = None
game = SC2World.game game = SC2World.game
player = 1 player = 1

View File

@@ -6,10 +6,12 @@ from .test_base import Sc2SetupTestBase
from .. import MissionFlag from .. import MissionFlag
from ..item import item_tables, item_names from ..item import item_tables, item_names
from BaseClasses import ItemClassification from BaseClasses import ItemClassification
from .. import options
class TestCustomMissionOrders(Sc2SetupTestBase): class TestCustomMissionOrders(Sc2SetupTestBase):
def test_mini_wol_generates(self): def test_mini_wol_generates(self):
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': 'custom', 'mission_order': 'custom',
'custom_mission_order': { 'custom_mission_order': {
'Mini Wings of Liberty': { 'Mini Wings of Liberty': {
@@ -137,6 +139,7 @@ class TestCustomMissionOrders(Sc2SetupTestBase):
test_item = item_names.ZERGLING_METABOLIC_BOOST test_item = item_names.ZERGLING_METABOLIC_BOOST
world_options = { world_options = {
'mission_order': 'custom', 'mission_order': 'custom',
'enabled_campaigns': set(options.EnabledCampaigns.valid_keys),
'start_inventory': { test_item: 1 }, 'start_inventory': { test_item: 1 },
'custom_mission_order': { 'custom_mission_order': {
'test': { 'test': {
@@ -164,6 +167,7 @@ class TestCustomMissionOrders(Sc2SetupTestBase):
test_item = item_names.ZERGLING_METABOLIC_BOOST test_item = item_names.ZERGLING_METABOLIC_BOOST
world_options = { world_options = {
'mission_order': 'custom', 'mission_order': 'custom',
'enabled_campaigns': set(options.EnabledCampaigns.valid_keys),
'start_inventory': { test_item: 1 }, 'start_inventory': { test_item: 1 },
'locked_items': { test_item: 1 }, 'locked_items': { test_item: 1 },
'custom_mission_order': { 'custom_mission_order': {
@@ -192,6 +196,7 @@ class TestCustomMissionOrders(Sc2SetupTestBase):
test_item = item_names.ZERGLING test_item = item_names.ZERGLING
test_amount = 3 test_amount = 3
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': 'custom', 'mission_order': 'custom',
'locked_items': { test_item: 1 }, # Make sure it is generated as normal 'locked_items': { test_item: 1 }, # Make sure it is generated as normal
'custom_mission_order': { 'custom_mission_order': {

View File

@@ -16,6 +16,7 @@ from ..options import EnabledCampaigns, NovaGhostOfAChanceVariant, MissionOrder,
class TestItemFiltering(Sc2SetupTestBase): class TestItemFiltering(Sc2SetupTestBase):
def test_explicit_locks_excludes_interact_and_set_flags(self): def test_explicit_locks_excludes_interact_and_set_flags(self):
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'locked_items': { 'locked_items': {
item_names.MARINE: 0, item_names.MARINE: 0,
item_names.MARAUDER: 0, item_names.MARAUDER: 0,
@@ -116,6 +117,8 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_excluding_mission_groups_excludes_all_missions_in_group(self): def test_excluding_mission_groups_excludes_all_missions_in_group(self):
world_options = { world_options = {
**self.ZERG_CAMPAIGNS,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'excluded_missions': [ 'excluded_missions': [
mission_groups.MissionGroupNames.HOTS_ZERUS_MISSIONS, mission_groups.MissionGroupNames.HOTS_ZERUS_MISSIONS,
], ],
@@ -158,6 +161,8 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_excluding_all_terran_missions_excludes_all_terran_items(self) -> None: def test_excluding_all_terran_missions_excludes_all_terran_items(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
'excluded_missions': [ 'excluded_missions': [
@@ -173,6 +178,8 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_excluding_all_terran_build_missions_excludes_all_terran_units(self) -> None: def test_excluding_all_terran_build_missions_excludes_all_terran_units(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
'excluded_missions': [ 'excluded_missions': [
@@ -191,6 +198,8 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_excluding_all_zerg_and_kerrigan_missions_excludes_all_zerg_items(self) -> None: def test_excluding_all_zerg_and_kerrigan_missions_excludes_all_zerg_items(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
'excluded_missions': [ 'excluded_missions': [
@@ -206,6 +215,8 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_excluding_all_zerg_build_missions_excludes_zerg_units(self) -> None: def test_excluding_all_zerg_build_missions_excludes_zerg_units(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
'excluded_missions': [ 'excluded_missions': [
@@ -225,6 +236,8 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_excluding_all_protoss_missions_excludes_all_protoss_items(self) -> None: def test_excluding_all_protoss_missions_excludes_all_protoss_items(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
'accessibility': 'locations', 'accessibility': 'locations',
@@ -242,6 +255,8 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_excluding_all_protoss_build_missions_excludes_protoss_units(self) -> None: def test_excluding_all_protoss_build_missions_excludes_protoss_units(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
'accessibility': 'locations', 'accessibility': 'locations',
@@ -287,6 +302,7 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_vanilla_items_only_includes_only_nova_equipment_and_vanilla_and_filler_items(self) -> None: def test_vanilla_items_only_includes_only_nova_equipment_and_vanilla_and_filler_items(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
# Avoid options that lock non-vanilla items for logic # Avoid options that lock non-vanilla items for logic
@@ -516,6 +532,7 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_nco_and_wol_picks_correct_starting_mission(self): def test_nco_and_wol_picks_correct_starting_mission(self):
world_options = { world_options = {
'mission_order': MissionOrder.option_vanilla,
'enabled_campaigns': { 'enabled_campaigns': {
SC2Campaign.WOL.campaign_name, SC2Campaign.WOL.campaign_name,
SC2Campaign.NCO.campaign_name SC2Campaign.NCO.campaign_name
@@ -530,7 +547,7 @@ class TestItemFiltering(Sc2SetupTestBase):
mission_tables.SC2Mission.ZERO_HOUR.mission_name.split(" (")[0] mission_tables.SC2Mission.ZERO_HOUR.mission_name.split(" (")[0]
], ],
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'selected_races': options.SelectRaces.valid_keys, 'selected_races': options.SelectedRaces.valid_keys,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all, 'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'enabled_campaigns': { 'enabled_campaigns': {
SC2Campaign.WOL.campaign_name, SC2Campaign.WOL.campaign_name,
@@ -549,7 +566,7 @@ class TestItemFiltering(Sc2SetupTestBase):
mission_tables.SC2Mission.ZERO_HOUR.mission_name mission_tables.SC2Mission.ZERO_HOUR.mission_name
], ],
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'selected_races': options.SelectRaces.valid_keys, 'selected_races': options.SelectedRaces.valid_keys,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all, 'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'enabled_campaigns': { 'enabled_campaigns': {
SC2Campaign.WOL.campaign_name, SC2Campaign.WOL.campaign_name,
@@ -757,7 +774,7 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_kerrigan_levels_per_mission_triggering_pre_fill(self): def test_kerrigan_levels_per_mission_triggering_pre_fill(self):
world_options = { world_options = {
# Vanilla WoL with all missions **self.ALL_CAMPAIGNS,
'mission_order': options.MissionOrder.option_custom, 'mission_order': options.MissionOrder.option_custom,
'custom_mission_order': { 'custom_mission_order': {
'campaign': { 'campaign': {
@@ -798,7 +815,7 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_kerrigan_levels_per_mission_and_generic_upgrades_both_triggering_pre_fill(self): def test_kerrigan_levels_per_mission_and_generic_upgrades_both_triggering_pre_fill(self):
world_options = { world_options = {
# Vanilla WoL with all missions **self.ALL_CAMPAIGNS,
'mission_order': options.MissionOrder.option_custom, 'mission_order': options.MissionOrder.option_custom,
'custom_mission_order': { 'custom_mission_order': {
'campaign': { 'campaign': {
@@ -843,10 +860,9 @@ class TestItemFiltering(Sc2SetupTestBase):
self.assertNotIn(item_names.KERRIGAN_LEVELS_70, itempool) self.assertNotIn(item_names.KERRIGAN_LEVELS_70, itempool)
self.assertNotIn(item_names.KERRIGAN_LEVELS_70, starting_inventory) self.assertNotIn(item_names.KERRIGAN_LEVELS_70, starting_inventory)
def test_locking_required_items(self): def test_locking_required_items(self):
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': options.MissionOrder.option_custom, 'mission_order': options.MissionOrder.option_custom,
'custom_mission_order': { 'custom_mission_order': {
'campaign': { 'campaign': {
@@ -892,7 +908,7 @@ class TestItemFiltering(Sc2SetupTestBase):
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': campaign_size, 'maximum_campaign_size': campaign_size,
'enabled_campaigns': EnabledCampaigns.valid_keys, 'enabled_campaigns': EnabledCampaigns.valid_keys,
'selected_races': options.SelectRaces.valid_keys, 'selected_races': options.SelectedRaces.valid_keys,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all, 'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'mission_race_balancing': options.EnableMissionRaceBalancing.option_fully_balanced, 'mission_race_balancing': options.EnableMissionRaceBalancing.option_fully_balanced,
} }
@@ -924,6 +940,7 @@ class TestItemFiltering(Sc2SetupTestBase):
}, },
'max_number_of_upgrades': 2, 'max_number_of_upgrades': 2,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
**self.ALL_CAMPAIGNS,
'selected_races': { 'selected_races': {
SC2Race.TERRAN.get_title(), SC2Race.TERRAN.get_title(),
}, },
@@ -960,6 +977,7 @@ class TestItemFiltering(Sc2SetupTestBase):
}, },
'max_number_of_upgrades': 2, 'max_number_of_upgrades': 2,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
**self.ALL_CAMPAIGNS,
'selected_races': { 'selected_races': {
SC2Race.TERRAN.get_title(), SC2Race.TERRAN.get_title(),
SC2Race.ZERG.get_title(), SC2Race.ZERG.get_title(),
@@ -990,6 +1008,7 @@ class TestItemFiltering(Sc2SetupTestBase):
}, },
'max_upgrade_level': MAX_LEVEL, 'max_upgrade_level': MAX_LEVEL,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
**self.ALL_CAMPAIGNS,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all, 'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'generic_upgrade_items': options.GenericUpgradeItems.option_bundle_weapon_and_armor 'generic_upgrade_items': options.GenericUpgradeItems.option_bundle_weapon_and_armor
} }
@@ -1016,12 +1035,13 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_ghost_of_a_chance_generates_without_nco(self) -> None: def test_ghost_of_a_chance_generates_without_nco(self) -> None:
world_options = { world_options = {
**self.TERRAN_CAMPAIGNS,
'mission_order': MissionOrder.option_custom, 'mission_order': MissionOrder.option_custom,
'nova_ghost_of_a_chance_variant': NovaGhostOfAChanceVariant.option_auto, 'nova_ghost_of_a_chance_variant': NovaGhostOfAChanceVariant.option_auto,
'custom_mission_order': { 'custom_mission_order': {
'test': { 'test': {
'type': 'column', 'type': 'column',
'size': 1, # Give the generator some space to place the key 'size': 1,
'mission_pool': [ 'mission_pool': [
SC2Mission.GHOST_OF_A_CHANCE.mission_name SC2Mission.GHOST_OF_A_CHANCE.mission_name
] ]
@@ -1037,12 +1057,13 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_ghost_of_a_chance_generates_using_nco_nova(self) -> None: def test_ghost_of_a_chance_generates_using_nco_nova(self) -> None:
world_options = { world_options = {
**self.TERRAN_CAMPAIGNS,
'mission_order': MissionOrder.option_custom, 'mission_order': MissionOrder.option_custom,
'nova_ghost_of_a_chance_variant': NovaGhostOfAChanceVariant.option_nco, 'nova_ghost_of_a_chance_variant': NovaGhostOfAChanceVariant.option_nco,
'custom_mission_order': { 'custom_mission_order': {
'test': { 'test': {
'type': 'column', 'type': 'column',
'size': 2, # Give the generator some space to place the key 'size': 2,
'mission_pool': [ 'mission_pool': [
SC2Mission.LIBERATION_DAY.mission_name, # Starter mission SC2Mission.LIBERATION_DAY.mission_name, # Starter mission
SC2Mission.GHOST_OF_A_CHANCE.mission_name, SC2Mission.GHOST_OF_A_CHANCE.mission_name,
@@ -1058,12 +1079,13 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_ghost_of_a_chance_generates_with_nco(self) -> None: def test_ghost_of_a_chance_generates_with_nco(self) -> None:
world_options = { world_options = {
**self.TERRAN_CAMPAIGNS,
'mission_order': MissionOrder.option_custom, 'mission_order': MissionOrder.option_custom,
'nova_ghost_of_a_chance_variant': NovaGhostOfAChanceVariant.option_auto, 'nova_ghost_of_a_chance_variant': NovaGhostOfAChanceVariant.option_auto,
'custom_mission_order': { 'custom_mission_order': {
'test': { 'test': {
'type': 'column', 'type': 'column',
'size': 3, # Give the generator some space to place the key 'size': 3,
'mission_pool': [ 'mission_pool': [
SC2Mission.LIBERATION_DAY.mission_name, # Starter mission SC2Mission.LIBERATION_DAY.mission_name, # Starter mission
SC2Mission.GHOST_OF_A_CHANCE.mission_name, SC2Mission.GHOST_OF_A_CHANCE.mission_name,
@@ -1080,7 +1102,9 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_exclude_overpowered_items(self) -> None: def test_exclude_overpowered_items(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': MissionOrder.option_grid, 'mission_order': MissionOrder.option_grid,
'maximum_campaign_size': MaximumCampaignSize.range_end,
'exclude_overpowered_items': ExcludeOverpoweredItems.option_true, 'exclude_overpowered_items': ExcludeOverpoweredItems.option_true,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all, 'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'selected_races': [SC2Race.TERRAN.get_title()], 'selected_races': [SC2Race.TERRAN.get_title()],
@@ -1096,7 +1120,9 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_exclude_overpowered_items_not_excluded(self) -> None: def test_exclude_overpowered_items_not_excluded(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': MissionOrder.option_grid, 'mission_order': MissionOrder.option_grid,
'maximum_campaign_size': MaximumCampaignSize.range_end,
'exclude_overpowered_items': ExcludeOverpoweredItems.option_false, 'exclude_overpowered_items': ExcludeOverpoweredItems.option_false,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all, 'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'selected_races': [SC2Race.TERRAN.get_title()], 'selected_races': [SC2Race.TERRAN.get_title()],
@@ -1112,7 +1138,9 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_exclude_overpowered_items_vanilla_only(self) -> None: def test_exclude_overpowered_items_vanilla_only(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': MissionOrder.option_grid, 'mission_order': MissionOrder.option_grid,
'maximum_campaign_size': MaximumCampaignSize.range_end,
'exclude_overpowered_items': ExcludeOverpoweredItems.option_true, 'exclude_overpowered_items': ExcludeOverpoweredItems.option_true,
'vanilla_items_only': VanillaItemsOnly.option_true, 'vanilla_items_only': VanillaItemsOnly.option_true,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all, 'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
@@ -1129,7 +1157,9 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_exclude_locked_overpowered_items(self) -> None: def test_exclude_locked_overpowered_items(self) -> None:
locked_item = item_names.BATTLECRUISER_ATX_LASER_BATTERY locked_item = item_names.BATTLECRUISER_ATX_LASER_BATTERY
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': MissionOrder.option_grid, 'mission_order': MissionOrder.option_grid,
'maximum_campaign_size': MaximumCampaignSize.range_end,
'exclude_overpowered_items': ExcludeOverpoweredItems.option_true, 'exclude_overpowered_items': ExcludeOverpoweredItems.option_true,
'locked_items': [locked_item], 'locked_items': [locked_item],
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all, 'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
@@ -1147,7 +1177,9 @@ class TestItemFiltering(Sc2SetupTestBase):
Checks if all unreleased items are marked properly not to generate Checks if all unreleased items are marked properly not to generate
""" """
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': MissionOrder.option_grid, 'mission_order': MissionOrder.option_grid,
'maximum_campaign_size': MaximumCampaignSize.range_end,
'exclude_overpowered_items': ExcludeOverpoweredItems.option_false, 'exclude_overpowered_items': ExcludeOverpoweredItems.option_false,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all, 'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
} }
@@ -1165,7 +1197,9 @@ class TestItemFiltering(Sc2SetupTestBase):
Locking overrides this behavior - if they're locked, they must appear Locking overrides this behavior - if they're locked, they must appear
""" """
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': MissionOrder.option_grid, 'mission_order': MissionOrder.option_grid,
'maximum_campaign_size': MaximumCampaignSize.range_end,
'exclude_overpowered_items': ExcludeOverpoweredItems.option_false, 'exclude_overpowered_items': ExcludeOverpoweredItems.option_false,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all, 'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'locked_items': {item_name: 0 for item_name in unreleased_items}, 'locked_items': {item_name: 0 for item_name in unreleased_items},
@@ -1180,10 +1214,12 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_merc_excluded_excludes_merc_upgrades(self) -> None: def test_merc_excluded_excludes_merc_upgrades(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': MissionOrder.option_grid, 'mission_order': MissionOrder.option_grid,
'maximum_campaign_size': MaximumCampaignSize.range_end, 'maximum_campaign_size': MaximumCampaignSize.range_end,
'excluded_items': [item_name for item_name in item_groups.terran_mercenaries], 'excluded_items': [item_name for item_name in item_groups.terran_mercenaries],
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all, 'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'selected_races': [SC2Race.TERRAN.get_title()],
} }
self.generate_world(world_options) self.generate_world(world_options)
@@ -1193,6 +1229,7 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_unexcluded_items_applies_over_op_items(self) -> None: def test_unexcluded_items_applies_over_op_items(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': MissionOrder.option_grid, 'mission_order': MissionOrder.option_grid,
'maximum_campaign_size': MaximumCampaignSize.range_end, 'maximum_campaign_size': MaximumCampaignSize.range_end,
'exclude_overpowered_items': ExcludeOverpoweredItems.option_true, 'exclude_overpowered_items': ExcludeOverpoweredItems.option_true,
@@ -1216,11 +1253,13 @@ class TestItemFiltering(Sc2SetupTestBase):
def test_exclude_overpowered_items_and_not_allow_unit_nerfs(self) -> None: def test_exclude_overpowered_items_and_not_allow_unit_nerfs(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': MissionOrder.option_grid, 'mission_order': MissionOrder.option_grid,
'maximum_campaign_size': MaximumCampaignSize.range_end, 'maximum_campaign_size': MaximumCampaignSize.range_end,
'exclude_overpowered_items': ExcludeOverpoweredItems.option_true, 'exclude_overpowered_items': ExcludeOverpoweredItems.option_true,
'war_council_nerfs': options.WarCouncilNerfs.option_false, 'war_council_nerfs': options.WarCouncilNerfs.option_false,
'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all, 'enable_race_swap': options.EnableRaceSwapVariants.option_shuffle_all,
'selected_races': [SC2Race.PROTOSS.get_title()],
} }
self.generate_world(world_options) self.generate_world(world_options)

View File

@@ -15,6 +15,7 @@ class ItemFilterTests(Sc2SetupTestBase):
}, },
'required_tactics': 'standard', 'required_tactics': 'standard',
'min_number_of_upgrades': 1, 'min_number_of_upgrades': 1,
**self.TERRAN_CAMPAIGNS,
'selected_races': { 'selected_races': {
SC2Race.TERRAN.get_title() SC2Race.TERRAN.get_title()
}, },
@@ -54,6 +55,7 @@ class ItemFilterTests(Sc2SetupTestBase):
}, },
'min_number_of_upgrades': 2, 'min_number_of_upgrades': 2,
'required_tactics': 'standard', 'required_tactics': 'standard',
**self.ALL_CAMPAIGNS,
'selected_races': { 'selected_races': {
SC2Race.PROTOSS.get_title() SC2Race.PROTOSS.get_title()
}, },
@@ -75,6 +77,7 @@ class ItemFilterTests(Sc2SetupTestBase):
}, },
'min_number_of_upgrades': 2, 'min_number_of_upgrades': 2,
'required_tactics': 'standard', 'required_tactics': 'standard',
**self.PROTOSS_CAMPAIGNS,
'selected_races': { 'selected_races': {
SC2Race.PROTOSS.get_title() SC2Race.PROTOSS.get_title()
}, },

View File

@@ -116,6 +116,7 @@ class TestRules(unittest.TestCase):
test_world.options.take_over_ai_allies.value = take_over_ai_allies test_world.options.take_over_ai_allies.value = take_over_ai_allies
test_world.options.kerrigan_presence.value = kerrigan_presence test_world.options.kerrigan_presence.value = kerrigan_presence
test_world.options.spear_of_adun_passive_ability_presence.value = spear_of_adun_passive_presence test_world.options.spear_of_adun_passive_ability_presence.value = spear_of_adun_passive_presence
test_world.options.enabled_campaigns.value = set(options.EnabledCampaigns.valid_keys)
test_world.logic = SC2Logic(test_world) # type: ignore test_world.logic = SC2Logic(test_world) # type: ignore
return test_world return test_world

View File

@@ -272,7 +272,7 @@ class TestSupportedUseCases(Sc2SetupTestBase):
def test_race_swap_pick_one_has_correct_length_and_includes_swaps(self) -> None: def test_race_swap_pick_one_has_correct_length_and_includes_swaps(self) -> None:
world_options = { world_options = {
'selected_races': options.SelectRaces.valid_keys, 'selected_races': options.SelectedRaces.valid_keys,
'enable_race_swap': options.EnableRaceSwapVariants.option_pick_one, 'enable_race_swap': options.EnableRaceSwapVariants.option_pick_one,
'enabled_campaigns': { 'enabled_campaigns': {
SC2Campaign.WOL.campaign_name, SC2Campaign.WOL.campaign_name,
@@ -343,6 +343,7 @@ class TestSupportedUseCases(Sc2SetupTestBase):
def test_kerrigan_max_active_abilities(self): def test_kerrigan_max_active_abilities(self):
target_number: int = 8 target_number: int = 8
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
'selected_races': { 'selected_races': {
@@ -361,6 +362,7 @@ class TestSupportedUseCases(Sc2SetupTestBase):
def test_kerrigan_max_passive_abilities(self): def test_kerrigan_max_passive_abilities(self):
target_number: int = 3 target_number: int = 3
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
'selected_races': { 'selected_races': {
@@ -379,6 +381,7 @@ class TestSupportedUseCases(Sc2SetupTestBase):
def test_spear_of_adun_max_active_abilities(self): def test_spear_of_adun_max_active_abilities(self):
target_number: int = 8 target_number: int = 8
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
'selected_races': { 'selected_races': {
@@ -398,6 +401,7 @@ class TestSupportedUseCases(Sc2SetupTestBase):
def test_spear_of_adun_max_autocasts(self): def test_spear_of_adun_max_autocasts(self):
target_number: int = 2 target_number: int = 2
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
'selected_races': { 'selected_races': {
@@ -417,6 +421,7 @@ class TestSupportedUseCases(Sc2SetupTestBase):
def test_nova_max_weapons(self): def test_nova_max_weapons(self):
target_number: int = 3 target_number: int = 3
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
'selected_races': { 'selected_races': {
@@ -436,6 +441,7 @@ class TestSupportedUseCases(Sc2SetupTestBase):
def test_nova_max_gadgets(self): def test_nova_max_gadgets(self):
target_number: int = 3 target_number: int = 3
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'mission_order': options.MissionOrder.option_grid, 'mission_order': options.MissionOrder.option_grid,
'maximum_campaign_size': options.MaximumCampaignSize.range_end, 'maximum_campaign_size': options.MaximumCampaignSize.range_end,
'selected_races': { 'selected_races': {
@@ -453,6 +459,7 @@ class TestSupportedUseCases(Sc2SetupTestBase):
def test_mercs_only(self) -> None: def test_mercs_only(self) -> None:
world_options = { world_options = {
**self.ALL_CAMPAIGNS,
'selected_races': [ 'selected_races': [
SC2Race.TERRAN.get_title(), SC2Race.TERRAN.get_title(),
SC2Race.ZERG.get_title(), SC2Race.ZERG.get_title(),