180 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			180 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from typing import Dict | ||
|  | from Options import Toggle, Option, Range, Choice, DeathLink, ItemSet | ||
|  | 
 | ||
|  | 
 | ||
|  | class AllowJustAsPlannedDLCSongs(Toggle): | ||
|  |     """Whether 'Just as Planned DLC' songs, and all the DLCs along with it, will be included in the randomizer.""" | ||
|  |     display_name = "Allow Just As Planned DLC Songs" | ||
|  | 
 | ||
|  | 
 | ||
|  | 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 = 500  # 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 AdditionalItemPercentage(Range): | ||
|  |     """The percentage of songs that will have 2 items instead of 1 when completing them.
 | ||
|  |     - Starting Songs will always have 2 items. | ||
|  |     - Locations will be filled with duplicate songs if there are not enough items. | ||
|  |     """
 | ||
|  |     display_name = "Additional Item %" | ||
|  |     range_start = 50 | ||
|  |     default = 80 | ||
|  |     range_end = 100 | ||
|  | 
 | ||
|  | 
 | ||
|  | class MusicSheetCountPercentage(Range): | ||
|  |     """Collecting enough Music Sheets will unlock the goal song needed for completion.
 | ||
|  |     This option controls how many are in the item pool, based on the total number of songs."""
 | ||
|  |     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 with Just As Planned dlc songs. | ||
|  |     """
 | ||
|  |     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" | ||
|  | 
 | ||
|  | 
 | ||
|  | musedash_options: Dict[str, type(Option)] = { | ||
|  |     "allow_just_as_planned_dlc_songs": AllowJustAsPlannedDLCSongs, | ||
|  |     "streamer_mode_enabled": StreamerModeEnabled, | ||
|  |     "starting_song_count": StartingSongs, | ||
|  |     "additional_song_count": AdditionalSongs, | ||
|  |     "additional_item_percentage": AdditionalItemPercentage, | ||
|  |     "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 | ||
|  | } |