181 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from typing import Dict
 | |
| from Options import Toggle, Option, Range, Choice, DeathLink, ItemSet, OptionSet, PerGameCommonOptions
 | |
| from dataclasses import dataclass
 | |
| 
 | |
| from .MuseDashCollection import MuseDashCollections
 | |
| 
 | |
| 
 | |
| class AllowJustAsPlannedDLCSongs(Toggle):
 | |
|     """Whether [Muse Plus] DLC Songs, and all the albums included in it, can be chosen as randomised songs.
 | |
|     Note: The [Just As Planned] DLC contains all [Muse Plus] songs."""
 | |
|     display_name = "Allow [Muse Plus] DLC Songs"
 | |
| 
 | |
| 
 | |
| class DLCMusicPacks(OptionSet):
 | |
|     """Which non-[Muse Plus] DLC packs can be chosen as randomised songs."""
 | |
|     display_name = "DLC Packs"
 | |
|     default = {}
 | |
|     valid_keys = [dlc for dlc in MuseDashCollections.DLC]
 | |
| 
 | |
| 
 | |
| class StreamerModeEnabled(Toggle):
 | |
|     """In Muse Dash, an option named 'Streamer Mode' removes songs which may trigger copyright issues when streaming.
 | |
|     If this is enabled, only songs available under Streamer Mode will be available for randomization."""
 | |
|     display_name = "Streamer Mode Only Songs"
 | |
| 
 | |
| 
 | |
| class StartingSongs(Range):
 | |
|     """The number of songs that will be automatically unlocked at the start of a run."""
 | |
|     range_start = 3
 | |
|     range_end = 10
 | |
|     default = 5
 | |
|     display_name = "Starting Song Count"
 | |
| 
 | |
| 
 | |
| class AdditionalSongs(Range):
 | |
|     """The total number of songs that will be placed in the randomization pool.
 | |
|     - This does not count any starting songs or the goal song.
 | |
|     - The final song count may be lower due to other settings.
 | |
|     """
 | |
|     range_start = 15
 | |
|     range_end = 528  # Note will probably not reach this high if any other settings are done.
 | |
|     default = 40
 | |
|     display_name = "Additional Song Count"
 | |
| 
 | |
| 
 | |
| class DifficultyMode(Choice):
 | |
|     """Ensures that at any chosen song has at least 1 value falling within these values.
 | |
|     - Any: All songs are available
 | |
|     - Easy: 1, 2 or 3
 | |
|     - Medium: 4, 5
 | |
|     - Hard: 6, 7
 | |
|     - Expert: 8, 9
 | |
|     - Master: 10+
 | |
|     - Manual: Uses the provided minimum and maximum range.
 | |
|     """
 | |
|     display_name = "Song Difficulty"
 | |
|     option_Any = 0
 | |
|     option_Easy = 1
 | |
|     option_Medium = 2
 | |
|     option_Hard = 3
 | |
|     option_Expert = 4
 | |
|     option_Master = 5
 | |
|     option_Manual = 6
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| # Todo: Investigate options to make this non randomizable
 | |
| class DifficultyModeOverrideMin(Range):
 | |
|     """Ensures that 1 difficulty has at least 1 this value or higher per song.
 | |
|     - Difficulty Mode must be set to Manual."""
 | |
|     display_name = "Manual Difficulty Min"
 | |
|     range_start = 1
 | |
|     range_end = 11
 | |
|     default = 4
 | |
| 
 | |
| 
 | |
| # Todo: Investigate options to make this non randomizable
 | |
| class DifficultyModeOverrideMax(Range):
 | |
|     """Ensures that 1 difficulty has at least 1 this value or lower per song.
 | |
|     - Difficulty Mode must be set to Manual."""
 | |
|     display_name = "Manual Difficulty Max"
 | |
|     range_start = 1
 | |
|     range_end = 11
 | |
|     default = 8
 | |
| 
 | |
| 
 | |
| class GradeNeeded(Choice):
 | |
|     """Completing a song will require a grade of this value or higher in order to unlock items.
 | |
|     The grades are as follows:
 | |
|     - Silver S (SS): >= 95% accuracy
 | |
|     - Pink S (S): >= 90% accuracy
 | |
|     - A: >= 80% or a Full Combo
 | |
|     - B: >= 70%
 | |
|     - C: >= 60%
 | |
|     """
 | |
|     display_name = "Grade Needed"
 | |
|     option_Any = 0
 | |
|     option_C = 1
 | |
|     option_B = 2
 | |
|     option_A = 3
 | |
|     option_PinkS = 4
 | |
|     option_SilverS = 5
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class MusicSheetCountPercentage(Range):
 | |
|     """Controls how many music sheets are added to the pool based on the number of songs, including starting songs.
 | |
|     Higher numbers leads to more consistent game lengths, but will cause individual music sheets to be less important.
 | |
|     """
 | |
|     range_start = 10
 | |
|     range_end = 40
 | |
|     default = 20
 | |
|     display_name = "Music Sheet Percentage"
 | |
| 
 | |
| 
 | |
| class MusicSheetWinCountPercentage(Range):
 | |
|     """The percentage of Music Sheets in the item pool that are needed to unlock the winning song."""
 | |
|     range_start = 50
 | |
|     range_end = 100
 | |
|     default = 80
 | |
|     display_name = "Music Sheets Needed to Win"
 | |
| 
 | |
| 
 | |
| class TrapTypes(Choice):
 | |
|     """This controls the types of traps that can be added to the pool.
 | |
|     - VFX Traps consist of visual effects that play over the song. (i.e. Grayscale.)
 | |
|     - SFX Traps consist of changing your sfx setting to one possibly more annoying sfx.
 | |
|     Traps last the length of a song, or until you die.
 | |
|     Note: SFX traps are only available if [Just as Planned] DLC songs are enabled.
 | |
|     """
 | |
|     display_name = "Available Trap Types"
 | |
|     option_None = 0
 | |
|     option_VFX = 1
 | |
|     option_SFX = 2
 | |
|     option_All = 3
 | |
|     default = 3
 | |
| 
 | |
| 
 | |
| class TrapCountPercentage(Range):
 | |
|     """This controls how many traps to add into the pool, based the total number of songs."""
 | |
|     range_start = 0
 | |
|     range_end = 35
 | |
|     default = 15
 | |
|     display_name = "Trap Percentage"
 | |
| 
 | |
| 
 | |
| class IncludeSongs(ItemSet):
 | |
|     """Any song listed here will be guaranteed to be included as part of the seed.
 | |
|     - Difficulty options will be skipped for these songs.
 | |
|     - If there being too many included songs, songs will be randomly chosen without regard for difficulty.
 | |
|     - If you want these songs immediately, use start_inventory instead.
 | |
|     """
 | |
|     verify_item_name = True
 | |
|     display_name = "Include Songs"
 | |
| 
 | |
| 
 | |
| class ExcludeSongs(ItemSet):
 | |
|     """Any song listed here will be excluded from being a part of the seed."""
 | |
|     verify_item_name = True
 | |
|     display_name = "Exclude Songs"
 | |
| 
 | |
| 
 | |
| @dataclass
 | |
| class MuseDashOptions(PerGameCommonOptions):
 | |
|     allow_just_as_planned_dlc_songs: AllowJustAsPlannedDLCSongs
 | |
|     dlc_packs: DLCMusicPacks
 | |
|     streamer_mode_enabled: StreamerModeEnabled
 | |
|     starting_song_count: StartingSongs
 | |
|     additional_song_count: AdditionalSongs
 | |
|     song_difficulty_mode: DifficultyMode
 | |
|     song_difficulty_min: DifficultyModeOverrideMin
 | |
|     song_difficulty_max: DifficultyModeOverrideMax
 | |
|     grade_needed: GradeNeeded
 | |
|     music_sheet_count_percentage: MusicSheetCountPercentage
 | |
|     music_sheet_win_count_percentage: MusicSheetWinCountPercentage
 | |
|     available_trap_types: TrapTypes
 | |
|     trap_count_percentage: TrapCountPercentage
 | |
|     death_link: DeathLink
 | |
|     include_songs: IncludeSongs
 | |
|     exclude_songs: ExcludeSongs
 | 
