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-04-11 01:43:29 +00:00
from Options import DefaultOnToggle , Toggle , Range , Choice , OptionSet
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
overcooked_options = {
2023-02-17 08:21:56 +00:00
# generator options
" location_balancing " : LocationBalancing ,
2023-03-20 16:16:19 +00:00
" ramp_tricks " : RampTricks ,
2023-02-17 08:21:56 +00:00
2023-02-24 07:32:15 +00:00
# deathlink
" deathlink " : DeathLink ,
2022-10-13 17:57:50 +00:00
# randomization options
" shuffle_level_order " : ShuffleLevelOrder ,
2023-04-11 01:43:29 +00:00
" include_dlcs " : DLCOptionSet ,
2022-10-13 17:57:50 +00:00
" include_horde_levels " : IncludeHordeLevels ,
" prep_levels " : PrepLevels ,
" kevin_levels " : KevinLevels ,
# quality of life options
" fix_bugs " : FixBugs ,
" shorter_level_duration " : ShorterLevelDuration ,
2022-12-16 15:52:15 +00:00
" short_horde_levels " : ShortHordeLevels ,
2022-10-13 17:57:50 +00:00
" always_preserve_cooking_progress " : AlwaysPreserveCookingProgress ,
" always_serve_oldest_order " : AlwaysServeOldestOrder ,
" display_leaderboard_scores " : DisplayLeaderboardScores ,
# difficulty settings
" stars_to_win " : StarsToWin ,
" star_threshold_scale " : StarThresholdScale ,
}
OC2Options = TypedDict ( " OC2Options " , { option . __name__ : option for option in overcooked_options . values ( ) } )