2023-10-10 20:30:20 +00:00
from dataclasses import dataclass
2023-02-24 07:32:15 +00:00
from enum import IntEnum
2022-10-13 17:57:50 +00:00
from typing import TypedDict
2023-10-10 20:30:20 +00:00
from Options import DefaultOnToggle , PerGameCommonOptions , Toggle , Range , Choice , OptionSet
2023-04-11 01:43:29 +00:00
from . Overcooked2Levels import Overcooked2Dlc
2022-10-13 17:57:50 +00:00
2023-02-24 07:32:15 +00:00
class LocationBalancingMode ( IntEnum ) :
2023-02-17 08:21:56 +00:00
disabled = 0
compromise = 1
full = 2
2023-02-24 07:32:15 +00:00
class DeathLinkMode ( IntEnum ) :
disabled = 0
death_only = 1
death_and_overcook = 2
2022-10-13 17:57:50 +00:00
class OC2OnToggle ( DefaultOnToggle ) :
@property
def result ( self ) - > bool :
return bool ( self . value )
2023-03-20 16:16:19 +00:00
class OC2Toggle ( Toggle ) :
@property
def result ( self ) - > bool :
return bool ( self . value )
2023-02-17 08:21:56 +00:00
class LocationBalancing ( Choice ) :
2023-04-04 00:25:59 +00:00
""" Location balancing affects the density of progression items found in your world relative to other worlds. This setting changes nothing for solo games.
2023-02-17 08:21:56 +00:00
- Disabled : Location density in your world can fluctuate greatly depending on the settings of other players . In extreme cases , your world may be entirely populated with filler items
- Compromise : Locations are balanced to a midpoint between " fair " and " natural "
- Full : Locations are balanced in an attempt to make the number of progression items sent out and received equal over the entire game """
auto_display_name = True
display_name = " Location Balancing "
option_disabled = LocationBalancingMode . disabled . value
option_compromise = LocationBalancingMode . compromise . value
option_full = LocationBalancingMode . full . value
default = LocationBalancingMode . compromise . value
2023-03-20 16:16:19 +00:00
class RampTricks ( OC2Toggle ) :
""" If enabled, generated games may require sequence breaks on the overworld map. This includes crossing small gaps and escaping out of bounds. """
display_name = " Overworld Tricks "
2023-02-17 08:21:56 +00:00
2023-02-24 07:32:15 +00:00
class DeathLink ( Choice ) :
2023-04-04 00:25:59 +00:00
""" DeathLink is an opt-in feature for Multiworlds where individual death events are propagated to all games with DeathLink enabled.
2023-02-24 07:32:15 +00:00
- Disabled : Death will behave as it does in the original game .
- Death Only : A DeathLink broadcast will be sent every time a chef falls into a stage hazard . All local chefs will be killed when any one perishes .
- Death and Overcook : Same as above , but an additional broadcast will be sent whenever the kitchen catches on fire from burnt food .
"""
auto_display_name = True
display_name = " DeathLink "
option_disabled = DeathLinkMode . disabled . value
option_death_only = DeathLinkMode . death_only . value
option_death_and_overcook = DeathLinkMode . death_and_overcook . value
default = DeathLinkMode . disabled . value
2022-10-13 17:57:50 +00:00
class AlwaysServeOldestOrder ( OC2OnToggle ) :
2022-11-06 14:28:16 +00:00
""" Modifies the game so that serving an expired order doesn ' t target the ticket with the highest tip. This helps
players dig out of a broken tip combo faster . """
2022-10-13 17:57:50 +00:00
display_name = " Always Serve Oldest Order "
class AlwaysPreserveCookingProgress ( OC2OnToggle ) :
2022-11-06 14:28:16 +00:00
""" Modifies the game to behave more like AYCE, where adding an item to an in-progress container doesn ' t reset the
entire progress bar . """
2022-10-13 17:57:50 +00:00
display_name = " Preserve Cooking/Mixing Progress "
2023-03-20 16:16:19 +00:00
class DisplayLeaderboardScores ( OC2Toggle ) :
2022-11-06 14:28:16 +00:00
""" Modifies the Overworld map to fetch and display the current world records for each level. Press number keys 1-4
to view leaderboard scores for that number of players . """
2022-10-13 17:57:50 +00:00
display_name = " Display Leaderboard Scores "
class ShuffleLevelOrder ( OC2OnToggle ) :
""" Shuffles the order of kitchens on the overworld map. Also draws from DLC maps. """
display_name = " Shuffle Level Order "
2023-04-11 01:43:29 +00:00
class DLCOptionSet ( OptionSet ) :
""" Which DLCs should be included when ' Shuffle Level Order ' is enabled? ' """
display_name = " Enabled DLC "
default = { " Story " , " Seasonal " }
valid_keys = [ dlc . value for dlc in Overcooked2Dlc ]
2022-10-13 17:57:50 +00:00
class IncludeHordeLevels ( OC2OnToggle ) :
2023-04-04 00:25:59 +00:00
""" Includes " Horde Defense " levels in the pool of possible kitchens when Shuffle Level Order is enabled. Also adds
2022-11-06 14:28:16 +00:00
two horde - specific items into the item pool . """
2022-10-13 17:57:50 +00:00
display_name = " Include Horde Levels "
class KevinLevels ( OC2OnToggle ) :
""" Includes the 8 Kevin level locations on the map as unlockables. Turn off to make games shorter. """
display_name = " Kevin Level Checks "
class FixBugs ( OC2OnToggle ) :
""" Fixes Bugs Present in the base game:
- Double Serving Exploit
- Sink Bug
- Control Stick Cancel / Throw Bug
- Can ' t Throw Near Empty Burner Bug " " "
display_name = " Fix Bugs "
class ShorterLevelDuration ( OC2OnToggle ) :
2022-11-06 14:28:16 +00:00
""" Modifies level duration to be about 1/3rd shorter than in the original game, thus bringing the item discovery
pace in line with other popular Archipelago games .
2022-10-13 17:57:50 +00:00
2022-11-06 14:28:16 +00:00
Points required to earn stars are scaled accordingly . ( " Boss Levels " which change scenery mid - game are not
affected . ) """
2022-10-13 17:57:50 +00:00
display_name = " Shorter Level Duration "
2022-12-16 15:52:15 +00:00
class ShortHordeLevels ( OC2OnToggle ) :
""" Modifies horde levels to contain roughly 1/3rd fewer waves than in the original game.
2023-04-04 00:25:59 +00:00
The kitchen ' s health is scaled appropriately to preserve the same approximate difficulty. " " "
2022-12-16 15:52:15 +00:00
display_name = " Shorter Horde Levels "
2022-10-13 17:57:50 +00:00
class PrepLevels ( Choice ) :
""" Choose How " Prep Levels " are handled (levels where the timer does not start until the first order is served):
- Original : Prep Levels may appear
- Excluded : Prep Levels are excluded from the pool during level shuffling
2022-11-06 14:28:16 +00:00
- All You Can Eat : Prep Levels may appear , but the timer automatically starts . The star score requirements are also
adjusted to use the All You Can Eat World Record ( if it exists ) """
2022-10-13 17:57:50 +00:00
auto_display_name = True
display_name = " Prep Level Behavior "
option_original = 0
option_excluded = 1
option_all_you_can_eat = 2
default = 1
class StarsToWin ( Range ) :
""" Number of stars required to unlock 6-6.
2022-11-06 14:28:16 +00:00
Level purchase requirements between 1 - 1 and 6 - 6 will be spread between these two numbers . Using too high of a number
may result in more frequent generation failures , especially when horde levels are enabled . """
2022-10-13 17:57:50 +00:00
display_name = " Stars to Win "
range_start = 0
range_end = 100
2023-01-25 00:04:13 +00:00
default = 60
2022-10-13 17:57:50 +00:00
class StarThresholdScale ( Range ) :
2022-11-06 14:28:16 +00:00
""" How difficult should the third star for each level be on a scale of 1-100 % , where 100 % i s the current world
record score and 45 % is the average vanilla 4 - star score . """
2022-10-13 17:57:50 +00:00
display_name = " Star Difficulty % "
range_start = 1
range_end = 100
2023-01-25 00:04:13 +00:00
default = 35
2022-10-13 17:57:50 +00:00
2023-10-10 20:30:20 +00:00
@dataclass
class OC2Options ( PerGameCommonOptions ) :
2023-02-17 08:21:56 +00:00
# generator options
2023-10-10 20:30:20 +00:00
location_balancing : LocationBalancing
ramp_tricks : RampTricks
2023-02-24 07:32:15 +00:00
# deathlink
2023-10-10 20:30:20 +00:00
deathlink : DeathLink
2022-10-13 17:57:50 +00:00
# randomization options
2023-10-10 20:30:20 +00:00
shuffle_level_order : ShuffleLevelOrder
include_dlcs : DLCOptionSet
include_horde_levels : IncludeHordeLevels
prep_levels : PrepLevels
kevin_levels : KevinLevels
2022-10-13 17:57:50 +00:00
# quality of life options
2023-10-10 20:30:20 +00:00
fix_bugs : FixBugs
shorter_level_duration : ShorterLevelDuration
short_horde_levels : ShortHordeLevels
always_preserve_cooking_progress : AlwaysPreserveCookingProgress
always_serve_oldest_order : AlwaysServeOldestOrder
display_leaderboard_scores : DisplayLeaderboardScores
2022-10-13 17:57:50 +00:00
# difficulty settings
2023-10-10 20:30:20 +00:00
stars_to_win : StarsToWin
star_threshold_scale : StarThresholdScale