From 5a933a160afeeb0e4bb3bde6aa575bffb2d464ce Mon Sep 17 00:00:00 2001 From: Snarky Date: Tue, 7 Oct 2025 17:25:08 +0200 Subject: [PATCH] SC2: Add option presets (#5436) * SC2: Add option presets * SC2: Address reviews * SC2: Fix import * SC2: Update key mode * SC2: Update renamed option * sc2: PR comment; switching from __dataclass_fields__ to dataclasses.fields() * sc2: Changing quote style to match AP standard * sc2: PR comments; Switching to Starcraft2.type_hints --------- Co-authored-by: Snarky Co-authored-by: MatthewMarinets --- worlds/sc2/__init__.py | 2 + worlds/sc2/mission_order/presets.py | 446 ++++++++++++++++++++++++++++ worlds/sc2/options.py | 6 +- 3 files changed, 453 insertions(+), 1 deletion(-) create mode 100644 worlds/sc2/mission_order/presets.py diff --git a/worlds/sc2/__init__.py b/worlds/sc2/__init__.py index 9bf2f791..b5c7b5f0 100644 --- a/worlds/sc2/__init__.py +++ b/worlds/sc2/__init__.py @@ -35,6 +35,7 @@ from .mission_tables import SC2Campaign, SC2Mission, SC2Race, MissionFlag from .regions import create_mission_order from .mission_order import SC2MissionOrder from worlds.LauncherComponents import components, Component, launch as launch_component +from .mission_order.presets import sc2_options_presets logger = logging.getLogger("Starcraft 2") VICTORY_MODULO = 100 @@ -75,6 +76,7 @@ class Starcraft2WebWorld(WebWorld): tutorials = [setup_en, setup_fr, custom_mission_orders_en] game_info_languages = ["en", "fr"] + options_presets = sc2_options_presets option_groups = option_groups diff --git a/worlds/sc2/mission_order/presets.py b/worlds/sc2/mission_order/presets.py new file mode 100644 index 00000000..2910ca24 --- /dev/null +++ b/worlds/sc2/mission_order/presets.py @@ -0,0 +1,446 @@ +from typing import Any, Dict + +import Options as ap_options +from .. import options +from Options import Accessibility, ProgressionBalancing +from .. import item_names +from ..mission_tables import SC2Race, SC2Campaign + +from ..options import ( + # avoid import * + GameDifficulty, DifficultyDamageModifier, GameSpeed, DisableForcedCamera, SkipCutscenes, AllInMap, MissionOrder, + MaximumCampaignSize, TwoStartPositions, KeyMode, PlayerColorTerranRaynor, PlayerColorProtoss, PlayerColorZerg, + PlayerColorZergPrimal, PlayerColorNova, SelectedRaces, EnabledCampaigns, EnableRaceSwapVariants, EnableMissionRaceBalancing, + ShuffleCampaigns, ShuffleNoBuild, StarterUnit, RequiredTactics, EnableVoidTrade, VoidTradeAgeLimit, VoidTradeWorkers, + EnsureGenericItems, MinNumberOfUpgrades, MaxNumberOfUpgrades, MercenaryHighlanders, MaxUpgradeLevel, GenericUpgradeMissions, + GenericUpgradeResearch, GenericUpgradeResearchSpeedup, GenericUpgradeItems, KerriganPresence, KerriganLevelsPerMissionCompleted, + KerriganLevelsPerMissionCompletedCap, KerriganLevelItemSum, KerriganLevelItemDistribution, KerriganTotalLevelCap, StartPrimaryAbilities, + KerriganPrimalStatus, KerriganMaxActiveAbilities, KerriganMaxPassiveAbilities, EnableMorphling, WarCouncilNerfs, SpearOfAdunPresence, + SpearOfAdunPresentInNoBuild, SpearOfAdunPassiveAbilityPresence, SpearOfAdunPassivesPresentInNoBuild, SpearOfAdunMaxActiveAbilities, + SpearOfAdunMaxAutocastAbilities, GrantStoryTech, GrantStoryLevels, NovaMaxWeapons, NovaMaxGadgets, NovaGhostOfAChanceVariant, + TakeOverAIAllies, LockedItems, ExcludedItems, UnexcludedItems, ExcludedMissions, DifficultyCurve, ExcludeVeryHardMissions, VanillaItemsOnly, + ExcludeOverpoweredItems, VictoryCache, VanillaLocations, ExtraLocations, ChallengeLocations, MasteryLocations, BasebustLocations, + SpeedrunLocations, PreventativeLocations, FillerPercentage, MineralsPerItem, VespenePerItem, StartingSupplyPerItem, MaximumSupplyPerItem, + MaximumSupplyReductionPerItem, LowestMaximumSupply, ResearchCostReductionPerItem, FillerItemsDistribution, MissionOrderScouting, + CustomMissionOrder, OPTION_NAME +) + +template_settings = { + # Free to play, 25 WoL missions, Terran only Golden Path. Matches the template.yaml. + OPTION_NAME[Accessibility]: Accessibility.option_full, + OPTION_NAME[ProgressionBalancing]: ProgressionBalancing.default, + OPTION_NAME[GameDifficulty]: GameDifficulty.option_normal, + OPTION_NAME[SelectedRaces]: {SC2Race.TERRAN.get_title()}, + OPTION_NAME[MissionOrder]: MissionOrder.option_golden_path, + OPTION_NAME[RequiredTactics]: RequiredTactics.option_standard, + OPTION_NAME[EnabledCampaigns]: {SC2Campaign.WOL.campaign_name}, + OPTION_NAME[EnableRaceSwapVariants]: EnableRaceSwapVariants.option_disabled, + OPTION_NAME[KeyMode]: KeyMode.option_disabled, + OPTION_NAME[MaximumCampaignSize]: 25, + OPTION_NAME[StarterUnit]: StarterUnit.option_balanced, + OPTION_NAME[NovaGhostOfAChanceVariant]: NovaGhostOfAChanceVariant.option_wol, + OPTION_NAME[TakeOverAIAllies]: TakeOverAIAllies.option_false, + OPTION_NAME[DifficultyCurve]: DifficultyCurve.option_standard, + OPTION_NAME[MasteryLocations]: MasteryLocations.option_disabled, + OPTION_NAME[MissionOrderScouting]: MissionOrderScouting.option_completed, + OPTION_NAME[MineralsPerItem]: 10, + OPTION_NAME[VespenePerItem]: 10, + OPTION_NAME[StartingSupplyPerItem]: 2, + OPTION_NAME[MaximumSupplyPerItem]: 1, + OPTION_NAME[ResearchCostReductionPerItem]: 2, +} + + + +f2p_big_settings = { + # Free to play, all race 7x7 Grid + OPTION_NAME[Accessibility]: Accessibility.option_full, + OPTION_NAME[ProgressionBalancing]: ProgressionBalancing.default, + OPTION_NAME[GameDifficulty]: GameDifficulty.option_normal, + OPTION_NAME[SelectedRaces]: SelectedRaces.valid_keys, + OPTION_NAME[MissionOrder]: MissionOrder.option_grid, + OPTION_NAME[RequiredTactics]: RequiredTactics.option_standard, + OPTION_NAME[EnabledCampaigns]: { + SC2Campaign.WOL.campaign_name, + SC2Campaign.PROPHECY.campaign_name, + SC2Campaign.PROLOGUE.campaign_name + }, + OPTION_NAME[EnableRaceSwapVariants]: EnableRaceSwapVariants.option_shuffle_all, + OPTION_NAME[EnableMissionRaceBalancing]: EnableMissionRaceBalancing.option_semi_balanced, + OPTION_NAME[KeyMode]: KeyMode.option_disabled, + OPTION_NAME[MaximumCampaignSize]: 48, + OPTION_NAME[TwoStartPositions]: TwoStartPositions.option_true, + OPTION_NAME[StarterUnit]: StarterUnit.option_balanced, + OPTION_NAME[EnableMorphling]: EnableMorphling.option_true, + OPTION_NAME[TakeOverAIAllies]: TakeOverAIAllies.option_false, + OPTION_NAME[DifficultyCurve]: DifficultyCurve.option_standard, + OPTION_NAME[VanillaLocations]: VanillaLocations.option_enabled, + OPTION_NAME[ExtraLocations]: ExtraLocations.option_enabled, + OPTION_NAME[ChallengeLocations]: ChallengeLocations.option_enabled, + OPTION_NAME[MasteryLocations]: MasteryLocations.option_disabled, + OPTION_NAME[KerriganPrimalStatus]: KerriganPrimalStatus.option_item, + OPTION_NAME[WarCouncilNerfs]: WarCouncilNerfs.option_false, + OPTION_NAME[SpearOfAdunPresence]: SpearOfAdunPresence.option_everywhere, + OPTION_NAME[SpearOfAdunPresentInNoBuild]: SpearOfAdunPresentInNoBuild.option_false, + OPTION_NAME[SpearOfAdunPassiveAbilityPresence]: SpearOfAdunPassiveAbilityPresence.option_everywhere, + OPTION_NAME[SpearOfAdunPassivesPresentInNoBuild]: SpearOfAdunPassivesPresentInNoBuild.option_false, + OPTION_NAME[MissionOrderScouting]: MissionOrderScouting.option_completed, + OPTION_NAME[MineralsPerItem]: 5, + OPTION_NAME[VespenePerItem]: 5, + OPTION_NAME[StartingSupplyPerItem]: 2, + OPTION_NAME[MaximumSupplyPerItem]: 1, + OPTION_NAME[ResearchCostReductionPerItem]: 2, +} + +zerg_rush_settings = { + # Zerg only, Blitz, short (5 required, 15 total). Sync-friendly + OPTION_NAME[Accessibility]: Accessibility.option_full, + OPTION_NAME[ProgressionBalancing]: ProgressionBalancing.default, + OPTION_NAME[GameDifficulty]: GameDifficulty.option_hard, + OPTION_NAME[SelectedRaces]: {SC2Race.ZERG.get_title()}, + OPTION_NAME[MissionOrder]: MissionOrder.option_blitz, + OPTION_NAME[RequiredTactics]: RequiredTactics.option_advanced, + OPTION_NAME[EnabledCampaigns]: EnabledCampaigns.valid_keys, + OPTION_NAME[EnableRaceSwapVariants]: EnableRaceSwapVariants.option_shuffle_all, + OPTION_NAME[KeyMode]: KeyMode.option_disabled, + OPTION_NAME[MaximumCampaignSize]: 15, + OPTION_NAME[StarterUnit]: StarterUnit.option_balanced, + OPTION_NAME[EnableMorphling]: EnableMorphling.option_true, + OPTION_NAME[TakeOverAIAllies]: TakeOverAIAllies.option_false, + OPTION_NAME[DifficultyCurve]: DifficultyCurve.option_standard, + OPTION_NAME[VictoryCache]: 3, + OPTION_NAME[GenericUpgradeItems]: GenericUpgradeItems.option_bundle_all, + OPTION_NAME[VanillaLocations]: VanillaLocations.option_enabled, + OPTION_NAME[ExtraLocations]: ExtraLocations.option_enabled, + OPTION_NAME[ChallengeLocations]: ChallengeLocations.option_enabled, + OPTION_NAME[MasteryLocations]: MasteryLocations.option_disabled, + OPTION_NAME[ExcludeVeryHardMissions]: ExcludeVeryHardMissions.option_true, + OPTION_NAME[KerriganPrimalStatus]: KerriganPrimalStatus.option_item, + OPTION_NAME[MissionOrderScouting]: MissionOrderScouting.option_all, + OPTION_NAME[GrantStoryTech]: GrantStoryTech.option_grant, + OPTION_NAME[GrantStoryLevels]: GrantStoryLevels.option_minimum, + OPTION_NAME[MineralsPerItem]: 25, + OPTION_NAME[VespenePerItem]: 25, + OPTION_NAME[StartingSupplyPerItem]: 5, + OPTION_NAME[MaximumSupplyPerItem]: 2, + OPTION_NAME[ResearchCostReductionPerItem]: 5, +} + +classic_grid_settings = { + # Short-ish 5x5 Grid (8 required, 24 total), all races. Sync-friendly + OPTION_NAME[Accessibility]: Accessibility.option_full, + OPTION_NAME[ProgressionBalancing]: ProgressionBalancing.default, + OPTION_NAME[GameDifficulty]: GameDifficulty.option_hard, + OPTION_NAME[SelectedRaces]: SelectedRaces.valid_keys, + OPTION_NAME[MissionOrder]: MissionOrder.option_grid, + OPTION_NAME[RequiredTactics]: RequiredTactics.option_standard, + OPTION_NAME[EnabledCampaigns]: EnabledCampaigns.valid_keys, + OPTION_NAME[EnableRaceSwapVariants]: EnableRaceSwapVariants.option_shuffle_all, + OPTION_NAME[EnableMissionRaceBalancing]: EnableMissionRaceBalancing.option_fully_balanced, + OPTION_NAME[KeyMode]: KeyMode.option_disabled, + OPTION_NAME[MaximumCampaignSize]: 24, + OPTION_NAME[TwoStartPositions]: TwoStartPositions.option_true, + OPTION_NAME[StarterUnit]: StarterUnit.option_balanced, + OPTION_NAME[EnableMorphling]: EnableMorphling.option_true, + OPTION_NAME[TakeOverAIAllies]: TakeOverAIAllies.option_false, + OPTION_NAME[DifficultyCurve]: DifficultyCurve.option_standard, + OPTION_NAME[VictoryCache]: 5, + OPTION_NAME[GenericUpgradeItems]: GenericUpgradeItems.option_bundle_all, + OPTION_NAME[VanillaLocations]: VanillaLocations.option_enabled, + OPTION_NAME[ExtraLocations]: ExtraLocations.option_enabled, + OPTION_NAME[ChallengeLocations]: ChallengeLocations.option_enabled, + OPTION_NAME[MasteryLocations]: MasteryLocations.option_disabled, + OPTION_NAME[ExcludeVeryHardMissions]: ExcludeVeryHardMissions.option_true, + OPTION_NAME[KerriganPrimalStatus]: KerriganPrimalStatus.option_item, + OPTION_NAME[WarCouncilNerfs]: WarCouncilNerfs.option_false, + OPTION_NAME[SpearOfAdunPresence]: SpearOfAdunPresence.option_any_race_lotv, + OPTION_NAME[SpearOfAdunPresentInNoBuild]: SpearOfAdunPresentInNoBuild.option_false, + OPTION_NAME[SpearOfAdunPassiveAbilityPresence]: SpearOfAdunPassiveAbilityPresence.option_any_race_lotv, + OPTION_NAME[SpearOfAdunPassivesPresentInNoBuild]: SpearOfAdunPassivesPresentInNoBuild.option_false, + OPTION_NAME[MissionOrderScouting]: MissionOrderScouting.option_all, + OPTION_NAME[GrantStoryTech]: GrantStoryTech.option_grant, + OPTION_NAME[GrantStoryLevels]: GrantStoryLevels.option_minimum, + OPTION_NAME[MineralsPerItem]: 25, + OPTION_NAME[VespenePerItem]: 25, + OPTION_NAME[StartingSupplyPerItem]: 5, + OPTION_NAME[MaximumSupplyPerItem]: 2, + OPTION_NAME[ResearchCostReductionPerItem]: 5, +} + +raceswap_blitz_settings = { + # medium-sized Blitz (10 required, 50 total), all races, forced raceswaps + OPTION_NAME[Accessibility]: Accessibility.option_full, + OPTION_NAME[ProgressionBalancing]: ProgressionBalancing.default, + OPTION_NAME[GameDifficulty]: GameDifficulty.option_hard, + OPTION_NAME[SelectedRaces]: SelectedRaces.valid_keys, + OPTION_NAME[MissionOrder]: MissionOrder.option_blitz, + OPTION_NAME[RequiredTactics]: RequiredTactics.option_advanced, + OPTION_NAME[EnabledCampaigns]: EnabledCampaigns.valid_keys, + OPTION_NAME[EnableRaceSwapVariants]: EnableRaceSwapVariants.option_pick_one_non_vanilla, + OPTION_NAME[EnableMissionRaceBalancing]: EnableMissionRaceBalancing.option_semi_balanced, + OPTION_NAME[KeyMode]: KeyMode.option_disabled, + OPTION_NAME[MaximumCampaignSize]: 50, + OPTION_NAME[StarterUnit]: StarterUnit.option_off, + OPTION_NAME[EnableMorphling]: EnableMorphling.option_true, + OPTION_NAME[TakeOverAIAllies]: TakeOverAIAllies.option_false, + OPTION_NAME[DifficultyCurve]: DifficultyCurve.option_standard, + OPTION_NAME[VanillaLocations]: VanillaLocations.option_enabled, + OPTION_NAME[ExtraLocations]: ExtraLocations.option_enabled, + OPTION_NAME[ChallengeLocations]: ChallengeLocations.option_enabled, + OPTION_NAME[MasteryLocations]: MasteryLocations.option_disabled, + OPTION_NAME[KerriganPrimalStatus]: KerriganPrimalStatus.option_item, + OPTION_NAME[WarCouncilNerfs]: WarCouncilNerfs.option_true, + OPTION_NAME[SpearOfAdunPresence]: SpearOfAdunPresence.option_protoss, + OPTION_NAME[SpearOfAdunPresentInNoBuild]: SpearOfAdunPresentInNoBuild.option_false, + OPTION_NAME[SpearOfAdunPassiveAbilityPresence]: SpearOfAdunPassiveAbilityPresence.option_protoss, + OPTION_NAME[SpearOfAdunPassivesPresentInNoBuild]: SpearOfAdunPassivesPresentInNoBuild.option_false, + OPTION_NAME[ExcludeOverpoweredItems]: ExcludeOverpoweredItems.option_true, + OPTION_NAME[MissionOrderScouting]: MissionOrderScouting.option_completed, + OPTION_NAME[MineralsPerItem]: 10, + OPTION_NAME[VespenePerItem]: 10, + OPTION_NAME[StartingSupplyPerItem]: 2, + OPTION_NAME[MaximumSupplyPerItem]: 1, + OPTION_NAME[ResearchCostReductionPerItem]: 2, +} + +bread_and_butter_settings = { + # 50 mission Golden Path, all races, limits on Upgrades per Unit/Kerrigan/Nova/SoA + OPTION_NAME[Accessibility]: Accessibility.option_full, + OPTION_NAME[ProgressionBalancing]: ProgressionBalancing.default, + OPTION_NAME[GameDifficulty]: GameDifficulty.option_normal, + OPTION_NAME[SelectedRaces]: SelectedRaces.valid_keys, + OPTION_NAME[MissionOrder]: MissionOrder.option_blitz, + OPTION_NAME[RequiredTactics]: RequiredTactics.option_standard, + OPTION_NAME[EnabledCampaigns]: EnabledCampaigns.valid_keys, + OPTION_NAME[EnableRaceSwapVariants]: EnableRaceSwapVariants.option_pick_one, + OPTION_NAME[EnableMissionRaceBalancing]: EnableMissionRaceBalancing.option_semi_balanced, + OPTION_NAME[KeyMode]: KeyMode.option_progressive_questlines, + OPTION_NAME[MaximumCampaignSize]: 50, + OPTION_NAME[StarterUnit]: StarterUnit.option_off, + OPTION_NAME[EnableMorphling]: EnableMorphling.option_true, + OPTION_NAME[TakeOverAIAllies]: TakeOverAIAllies.option_false, + OPTION_NAME[DifficultyCurve]: DifficultyCurve.option_standard, + OPTION_NAME[VanillaLocations]: VanillaLocations.option_enabled, + OPTION_NAME[ExtraLocations]: ExtraLocations.option_enabled, + OPTION_NAME[ChallengeLocations]: ChallengeLocations.option_enabled, + OPTION_NAME[MasteryLocations]: MasteryLocations.option_disabled, + OPTION_NAME[WarCouncilNerfs]: WarCouncilNerfs.option_true, + OPTION_NAME[NovaGhostOfAChanceVariant]: NovaGhostOfAChanceVariant.option_nco, + OPTION_NAME[GenericUpgradeItems]: GenericUpgradeItems.option_individual_items, + OPTION_NAME[MinNumberOfUpgrades]: 1, + OPTION_NAME[MaxNumberOfUpgrades]: 4, + OPTION_NAME[NovaMaxWeapons]: 2, + OPTION_NAME[NovaMaxGadgets]: 2, + OPTION_NAME[KerriganPrimalStatus]: KerriganPrimalStatus.option_item, + OPTION_NAME[KerriganMaxActiveAbilities]: 4, + OPTION_NAME[KerriganMaxPassiveAbilities]: 2, + OPTION_NAME[SpearOfAdunPresence]: SpearOfAdunPresence.option_protoss, + OPTION_NAME[SpearOfAdunPresentInNoBuild]: SpearOfAdunPresentInNoBuild.option_false, + OPTION_NAME[SpearOfAdunPassiveAbilityPresence]: SpearOfAdunPassiveAbilityPresence.option_protoss, + OPTION_NAME[SpearOfAdunPassivesPresentInNoBuild]: SpearOfAdunPassivesPresentInNoBuild.option_false, + OPTION_NAME[SpearOfAdunMaxActiveAbilities]: 3, + OPTION_NAME[SpearOfAdunMaxAutocastAbilities]: 1, + OPTION_NAME[MissionOrderScouting]: MissionOrderScouting.option_completed, + OPTION_NAME[ExcludeOverpoweredItems]: ExcludeOverpoweredItems.option_true, + OPTION_NAME[GrantStoryTech]: GrantStoryTech.option_allow_substitutes, + OPTION_NAME[MineralsPerItem]: 10, + OPTION_NAME[VespenePerItem]: 10, + OPTION_NAME[StartingSupplyPerItem]: 2, + OPTION_NAME[MaximumSupplyPerItem]: 1, + OPTION_NAME[ResearchCostReductionPerItem]: 2, + OPTION_NAME[FillerPercentage]: 30, + OPTION_NAME[FillerItemsDistribution]: { + item_names.STARTING_MINERALS: 10, + item_names.STARTING_VESPENE: 10, + item_names.STARTING_SUPPLY: 10, + item_names.MAX_SUPPLY: 10, + item_names.SHIELD_REGENERATION: 5, + item_names.BUILDING_CONSTRUCTION_SPEED: 10, + item_names.KERRIGAN_LEVELS_1: 0, + item_names.UPGRADE_RESEARCH_SPEED: 10, + item_names.UPGRADE_RESEARCH_COST: 10, + item_names.REDUCED_MAX_SUPPLY: 0, + } + +} + +all_protoss_settings = { + # Vanilla campaign, but full Protoss. 62 missions, huge for one race, reduced locations, low values for fillers + OPTION_NAME[Accessibility]: Accessibility.option_full, + OPTION_NAME[ProgressionBalancing]: ProgressionBalancing.default, + OPTION_NAME[GameDifficulty]: GameDifficulty.option_normal, + OPTION_NAME[SelectedRaces]: {SC2Race.PROTOSS.get_title()}, + OPTION_NAME[MissionOrder]: MissionOrder.option_vanilla_shuffled, + OPTION_NAME[RequiredTactics]: RequiredTactics.option_standard, + OPTION_NAME[EnabledCampaigns]: { + SC2Campaign.WOL.campaign_name, + SC2Campaign.PROPHECY.campaign_name, + SC2Campaign.HOTS.campaign_name, + SC2Campaign.PROLOGUE.campaign_name, + SC2Campaign.LOTV.campaign_name, + # SC2Campaign.EPILOGUE.campaign_name, enable once Epilogue gets race-swaps + # SC2Campaign.NCO.campaign_name, enable once NCO gets race-swaps + }, + OPTION_NAME[EnableRaceSwapVariants]: EnableRaceSwapVariants.option_shuffle_all, + OPTION_NAME[KeyMode]: KeyMode.option_progressive_questlines, + OPTION_NAME[MaximumCampaignSize]: 61, + OPTION_NAME[StarterUnit]: StarterUnit.option_off, + OPTION_NAME[GrantStoryTech]: GrantStoryTech.option_grant, + OPTION_NAME[GrantStoryLevels]: GrantStoryLevels.option_minimum, + OPTION_NAME[TakeOverAIAllies]: TakeOverAIAllies.option_false, + OPTION_NAME[DifficultyCurve]: DifficultyCurve.option_standard, + OPTION_NAME[VanillaLocations]: VanillaLocations.option_enabled, + OPTION_NAME[ExtraLocations]: ExtraLocations.option_enabled, + OPTION_NAME[ChallengeLocations]: ChallengeLocations.option_disabled, + OPTION_NAME[MasteryLocations]: MasteryLocations.option_disabled, + OPTION_NAME[WarCouncilNerfs]: WarCouncilNerfs.option_true, + OPTION_NAME[GenericUpgradeItems]: GenericUpgradeItems.option_individual_items, + OPTION_NAME[MinNumberOfUpgrades]: 2, + OPTION_NAME[MaxNumberOfUpgrades]: 4, + OPTION_NAME[SpearOfAdunPresence]: SpearOfAdunPresence.option_protoss, + OPTION_NAME[SpearOfAdunPresentInNoBuild]: SpearOfAdunPresentInNoBuild.option_false, + OPTION_NAME[SpearOfAdunPassiveAbilityPresence]: SpearOfAdunPassiveAbilityPresence.option_protoss, + OPTION_NAME[SpearOfAdunPassivesPresentInNoBuild]: SpearOfAdunPassivesPresentInNoBuild.option_false, + OPTION_NAME[SpearOfAdunMaxActiveAbilities]: 3, + OPTION_NAME[SpearOfAdunMaxAutocastAbilities]: 1, + OPTION_NAME[MissionOrderScouting]: MissionOrderScouting.option_completed, + OPTION_NAME[MineralsPerItem]: 5, + OPTION_NAME[VespenePerItem]: 5, + OPTION_NAME[StartingSupplyPerItem]: 1, + OPTION_NAME[MaximumSupplyPerItem]: 1, + OPTION_NAME[ResearchCostReductionPerItem]: 1, + OPTION_NAME[FillerPercentage]: 30, + OPTION_NAME[FillerItemsDistribution]: { + item_names.STARTING_MINERALS: 1, + item_names.STARTING_VESPENE: 1, + item_names.STARTING_SUPPLY: 1, + item_names.MAX_SUPPLY: 1, + item_names.SHIELD_REGENERATION: 1, + item_names.BUILDING_CONSTRUCTION_SPEED: 1, + item_names.KERRIGAN_LEVELS_1: 0, + item_names.UPGRADE_RESEARCH_SPEED: 1, + item_names.UPGRADE_RESEARCH_COST: 1, + item_names.REDUCED_MAX_SUPPLY: 0, + } +} + +evil_logic_settings = { + # 6x6 grid on any_unit. High difficulty, disabled Kerrigan, harsh limits, trap items. any_unit has a chance to be unbeatable + OPTION_NAME[Accessibility]: Accessibility.option_full, + OPTION_NAME[ProgressionBalancing]: ProgressionBalancing.default, + OPTION_NAME[GameDifficulty]: GameDifficulty.option_brutal, + OPTION_NAME[SelectedRaces]: SelectedRaces.valid_keys, + OPTION_NAME[MissionOrder]: MissionOrder.option_grid, + OPTION_NAME[RequiredTactics]: RequiredTactics.option_standard, + OPTION_NAME[EnabledCampaigns]: EnabledCampaigns.valid_keys, + OPTION_NAME[EnableRaceSwapVariants]: EnableRaceSwapVariants.option_pick_one, + OPTION_NAME[EnableMissionRaceBalancing]: EnableMissionRaceBalancing.option_semi_balanced, + OPTION_NAME[KeyMode]: KeyMode.option_progressive_questlines, + OPTION_NAME[MaximumCampaignSize]: 35, + OPTION_NAME[StarterUnit]: StarterUnit.option_off, + OPTION_NAME[EnableMorphling]: EnableMorphling.option_true, + OPTION_NAME[TakeOverAIAllies]: TakeOverAIAllies.option_false, + OPTION_NAME[DifficultyCurve]: DifficultyCurve.option_standard, + OPTION_NAME[VanillaLocations]: VanillaLocations.option_enabled, + OPTION_NAME[ExtraLocations]: ExtraLocations.option_enabled, + OPTION_NAME[ChallengeLocations]: ChallengeLocations.option_enabled, + OPTION_NAME[MasteryLocations]: MasteryLocations.option_enabled, + OPTION_NAME[WarCouncilNerfs]: WarCouncilNerfs.option_true, + OPTION_NAME[NovaGhostOfAChanceVariant]: NovaGhostOfAChanceVariant.option_nco, + OPTION_NAME[GenericUpgradeItems]: GenericUpgradeItems.option_individual_items, + OPTION_NAME[MinNumberOfUpgrades]: 1, + OPTION_NAME[MaxNumberOfUpgrades]: 2, + OPTION_NAME[NovaMaxWeapons]: 1, + OPTION_NAME[NovaMaxGadgets]: 1, + OPTION_NAME[KerriganPresence]: KerriganPresence.option_not_present, + OPTION_NAME[SpearOfAdunPresence]: SpearOfAdunPresence.option_any_race_lotv, + OPTION_NAME[SpearOfAdunPresentInNoBuild]: SpearOfAdunPresentInNoBuild.option_false, + OPTION_NAME[SpearOfAdunPassiveAbilityPresence]: SpearOfAdunPassiveAbilityPresence.option_any_race_lotv, + OPTION_NAME[SpearOfAdunPassivesPresentInNoBuild]: SpearOfAdunPassivesPresentInNoBuild.option_false, + OPTION_NAME[SpearOfAdunMaxActiveAbilities]: 2, + OPTION_NAME[SpearOfAdunMaxAutocastAbilities]: 1, + OPTION_NAME[MissionOrderScouting]: MissionOrderScouting.option_completed, + OPTION_NAME[ExcludeOverpoweredItems]: ExcludeOverpoweredItems.option_true, + OPTION_NAME[GrantStoryTech]: GrantStoryTech.option_allow_substitutes, + OPTION_NAME[MineralsPerItem]: 10, + OPTION_NAME[VespenePerItem]: 10, + OPTION_NAME[StartingSupplyPerItem]: 2, + OPTION_NAME[MaximumSupplyPerItem]: 1, + OPTION_NAME[ResearchCostReductionPerItem]: 2, + OPTION_NAME[MaximumSupplyReductionPerItem]: 10, + OPTION_NAME[FillerPercentage]: 20, + OPTION_NAME[FillerItemsDistribution]: { + item_names.STARTING_MINERALS: 10, + item_names.STARTING_VESPENE: 10, + item_names.STARTING_SUPPLY: 10, + item_names.MAX_SUPPLY: 0, + item_names.SHIELD_REGENERATION: 5, + item_names.BUILDING_CONSTRUCTION_SPEED: 10, + item_names.KERRIGAN_LEVELS_1: 0, + item_names.UPGRADE_RESEARCH_SPEED: 10, + item_names.UPGRADE_RESEARCH_COST: 10, + item_names.REDUCED_MAX_SUPPLY: 2, + } +} + +full_campaign_settings = { + # mandatory full campaign, not recommended, but will be expected. 195 mission grid, all races. Reduced locations and filler values + OPTION_NAME[Accessibility]: Accessibility.option_full, + OPTION_NAME[ProgressionBalancing]: ProgressionBalancing.default, + OPTION_NAME[GameDifficulty]: GameDifficulty.option_normal, + OPTION_NAME[SelectedRaces]: SelectedRaces.valid_keys, + OPTION_NAME[MissionOrder]: MissionOrder.option_grid, + OPTION_NAME[RequiredTactics]: RequiredTactics.option_standard, + OPTION_NAME[EnabledCampaigns]: EnabledCampaigns.valid_keys, + OPTION_NAME[EnableRaceSwapVariants]: EnableRaceSwapVariants.option_shuffle_all, + OPTION_NAME[KeyMode]: KeyMode.option_progressive_missions, + OPTION_NAME[MaximumCampaignSize]: MaximumCampaignSize.range_end, + OPTION_NAME[TwoStartPositions]: TwoStartPositions.option_true, + OPTION_NAME[StarterUnit]: StarterUnit.option_off, + OPTION_NAME[EnableMorphling]: EnableMorphling.option_true, + OPTION_NAME[NovaGhostOfAChanceVariant]: NovaGhostOfAChanceVariant.option_nco, + OPTION_NAME[GrantStoryTech]: GrantStoryTech.option_allow_substitutes, + OPTION_NAME[TakeOverAIAllies]: TakeOverAIAllies.option_false, + OPTION_NAME[DifficultyCurve]: DifficultyCurve.option_standard, + OPTION_NAME[VanillaLocations]: VanillaLocations.option_enabled, + OPTION_NAME[ExtraLocations]: ExtraLocations.option_half_chance, + OPTION_NAME[ChallengeLocations]: ChallengeLocations.option_disabled, + OPTION_NAME[MasteryLocations]: MasteryLocations.option_disabled, + OPTION_NAME[KerriganPrimalStatus]: KerriganPrimalStatus.option_item, + OPTION_NAME[WarCouncilNerfs]: WarCouncilNerfs.option_true, + OPTION_NAME[MaxUpgradeLevel]: 5, + OPTION_NAME[SpearOfAdunPresence]: SpearOfAdunPresence.option_everywhere, + OPTION_NAME[SpearOfAdunPresentInNoBuild]: SpearOfAdunPresentInNoBuild.option_false, + OPTION_NAME[SpearOfAdunPassiveAbilityPresence]: SpearOfAdunPassiveAbilityPresence.option_everywhere, + OPTION_NAME[SpearOfAdunPassivesPresentInNoBuild]: SpearOfAdunPassivesPresentInNoBuild.option_false, + OPTION_NAME[MissionOrderScouting]: MissionOrderScouting.option_completed, + OPTION_NAME[MineralsPerItem]: 5, + OPTION_NAME[VespenePerItem]: 5, + OPTION_NAME[StartingSupplyPerItem]: 1, + OPTION_NAME[MaximumSupplyPerItem]: 1, + OPTION_NAME[ResearchCostReductionPerItem]: 1, + OPTION_NAME[FillerItemsDistribution]: { + item_names.STARTING_MINERALS: 10, + item_names.STARTING_VESPENE: 10, + item_names.STARTING_SUPPLY: 10, + item_names.MAX_SUPPLY: 10, + item_names.SHIELD_REGENERATION: 5, + item_names.BUILDING_CONSTRUCTION_SPEED: 10, + item_names.KERRIGAN_LEVELS_1: 5, + item_names.UPGRADE_RESEARCH_SPEED: 10, + item_names.UPGRADE_RESEARCH_COST: 10, + item_names.REDUCED_MAX_SUPPLY: 0, + } +} + +sc2_options_presets: Dict[str, Dict[str, Any]] = { + "F2P Terran [~7 hours]": template_settings, + "F2P Big [~10 hours]": f2p_big_settings, + "Zerg Rush [~3 hours]": zerg_rush_settings, + "Classic Grid [~4 hours]": classic_grid_settings, + "Raceswap Blitz [~8 hours]": raceswap_blitz_settings, + "Bread and Butter [~12 hours]": bread_and_butter_settings, + "Pure Protoss [~15 hours]": all_protoss_settings, + "Evil Logic [~6 hours]": evil_logic_settings, + "Giant Grid Game [30+ hours]": full_campaign_settings, +} diff --git a/worlds/sc2/options.py b/worlds/sc2/options.py index 74ea67c0..1df082fe 100644 --- a/worlds/sc2/options.py +++ b/worlds/sc2/options.py @@ -6,7 +6,8 @@ from datetime import timedelta from Options import ( Choice, Toggle, DefaultOnToggle, OptionSet, Range, PerGameCommonOptions, Option, VerifyKeys, StartInventory, - is_iterable_except_str, OptionGroup, Visibility, ItemDict + is_iterable_except_str, OptionGroup, Visibility, ItemDict, + Accessibility, ProgressionBalancing ) from Utils import get_fuzzy_results from BaseClasses import PlandoOptions @@ -1756,3 +1757,6 @@ void_trade_age_limits_ms: Dict[int, int] = { VoidTradeAgeLimit.option_1_day: 1000 * int(timedelta(days = 1).total_seconds()), VoidTradeAgeLimit.option_1_week: 1000 * int(timedelta(weeks = 1).total_seconds()), } + +# Store the names of all options +OPTION_NAME = {option_type: name for name, option_type in Starcraft2Options.type_hints.items()}