| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  | from dataclasses import dataclass | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | from Options import Choice, Range, Toggle, DeathLink, DefaultOnToggle, OptionGroup, PerGameCommonOptions | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Goal(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines the goal of the seed | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     Bowser: Defeat Koopalings, reach Bowser's Castle and defeat Bowser | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     Yoshi Egg Hunt: Find a certain number of Yoshi Eggs | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Goal" | 
					
						
							|  |  |  |     option_bowser = 0 | 
					
						
							|  |  |  |     option_yoshi_egg_hunt = 1 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BossesRequired(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     How many Bosses (Koopalings or Reznor) must be defeated in order to defeat Bowser | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Bosses Required" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 11 | 
					
						
							|  |  |  |     default = 7 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NumberOfYoshiEggs(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     Maximum possible number of Yoshi Eggs that will be in the item pool | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     If fewer available locations exist in the pool than this number, the number of available locations will be used instead. | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     Required Percentage of Yoshi Eggs will be calculated based off of that number. | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     display_name = "Max Number of Yoshi Eggs" | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     range_start = 1 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     range_end = 255 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     default = 50 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PercentageOfYoshiEggs(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     What Percentage of Yoshi Eggs are required to finish Yoshi Egg Hunt | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Required Percentage of Yoshi Eggs" | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 100 | 
					
						
							|  |  |  |     default = 100 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DragonCoinChecks(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Whether collecting 5 Dragon Coins in each level will grant a check | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Dragon Coin Checks" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  | class MoonChecks(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Whether collecting a 3-Up Moon in a level will grant a check | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "3up Moon Checks" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Hidden1UpChecks(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Whether collecting a hidden 1-Up mushroom in a level will grant a check | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     These checks are considered cryptic as there's no actual indicator that they're in their respective places | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     Enable this option at your own risk | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Hidden 1-Up Checks" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BonusBlockChecks(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Whether collecting a 1-Up mushroom from a Bonus Block in a level will grant a check | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Bonus Block Checks" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Blocksanity(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Whether hitting a block with an item or coin inside will grant a check | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     Note that some blocks are excluded due to how the option and the game works! | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     Exclusion list: | 
					
						
							|  |  |  |       * Blocks in Top Secret Area & Front Door/Bowser Castle | 
					
						
							|  |  |  |       * Blocks that are unreachable unless you glitch your way in | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Blocksanity" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | class BowserCastleDoors(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     How the doors of Bowser's Castle behave | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     Vanilla: Front and Back Doors behave as vanilla | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     Fast: Both doors behave as the Back Door | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     Slow: Both doors behave as the Front Door | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     "Front Door" rooms depend on the `bowser_castle_rooms` option | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     "Back Door" only requires going through the dark hallway to Bowser | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Bowser Castle Doors" | 
					
						
							|  |  |  |     option_vanilla = 0 | 
					
						
							|  |  |  |     option_fast = 1 | 
					
						
							|  |  |  |     option_slow = 2 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  | class BowserCastleRooms(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     How the rooms of Bowser's Castle Front Door behave | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     Vanilla: You can choose which rooms to enter, as in vanilla | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     Random Two Room: Two random rooms are chosen | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     Random Five Room: Five random rooms are chosen | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     Gauntlet: All eight rooms must be cleared | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     Labyrinth: Which room leads to Bowser? | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Bowser Castle Rooms" | 
					
						
							|  |  |  |     option_vanilla = 0 | 
					
						
							|  |  |  |     option_random_two_room = 1 | 
					
						
							|  |  |  |     option_random_five_room = 2 | 
					
						
							|  |  |  |     option_gauntlet = 3 | 
					
						
							|  |  |  |     option_labyrinth = 4 | 
					
						
							|  |  |  |     default = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BossShuffle(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-04-01 21:54:07 -04:00
										 |  |  |     How bosses are shuffled | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     None: Bosses are not shuffled | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     Simple: Four Reznors and the seven Koopalings are shuffled around | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     Full: Each boss location gets a fully random boss | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     Singularity: One or two bosses are chosen and placed at every boss location | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Boss Shuffle" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_simple = 1 | 
					
						
							|  |  |  |     option_full = 2 | 
					
						
							|  |  |  |     option_singularity = 3 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | class LevelShuffle(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Whether levels are shuffled | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Level Shuffle" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  | class ExcludeSpecialZone(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     If active, this option will prevent any progression items from being placed in Special Zone levels. | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     Additionally, if Level Shuffle is active, Special Zone levels will not be shuffled away from their vanilla tiles. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Exclude Special Zone" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | class SwapDonutGhostHouseExits(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  |     If enabled, this option will swap which overworld direction the two exits of the level at the Donut Ghost House overworld tile go: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     False: Normal Exit goes up, Secret Exit goes right. | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     True: Normal Exit goes right, Secret Exit goes up. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Swap Donut GH Exits" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DisplayReceivedItemPopups(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     What messages to display in-game for items received | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Display Received Item Popups" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_all = 1 | 
					
						
							|  |  |  |     option_progression = 2 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     option_progression_minus_yoshi_eggs = 3 | 
					
						
							|  |  |  |     default = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class JunkFillPercentage(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Replace a percentage of non-required Yoshi Eggs in the item pool with random junk items (only applicable on Yoshi Egg Hunt goal) | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Junk Fill Percentage" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 100 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TrapFillPercentage(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Replace a percentage of junk items in the item pool with random traps | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Trap Fill Percentage" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 100 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BaseTrapWeight(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Base Class for Trap Weights | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_low = 1 | 
					
						
							|  |  |  |     option_medium = 2 | 
					
						
							|  |  |  |     option_high = 4 | 
					
						
							|  |  |  |     default = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class IceTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Likelihood of a receiving a trap which causes the level to become slippery | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Ice Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class StunTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Likelihood of a receiving a trap which briefly stuns Mario | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Stun Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LiteratureTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Likelihood of a receiving a trap which causes the player to read literature | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Literature Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  | class TimerTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Likelihood of a receiving a trap which causes the timer to run low | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Timer Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  | class ReverseTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Likelihood of a receiving a trap which causes the controls to be reversed in the current level | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Reverse Trap Weight" | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  | class ThwimpTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Likelihood of a receiving a trap which causes a Thwimp to spawn above the player | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Thwimp Trap Weight" | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | class Autosave(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Whether a save prompt will appear after every level | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Autosave" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  | class EarlyClimb(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Force Climb to appear early in the seed as a local item. | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     This is particularly useful to prevent BK when Level Shuffle is disabled | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Early Climb" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class OverworldSpeed(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     How fast Mario moves on the overworld | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Overworld Speed" | 
					
						
							|  |  |  |     option_slow = 0 | 
					
						
							|  |  |  |     option_vanilla = 1 | 
					
						
							|  |  |  |     option_fast = 2 | 
					
						
							|  |  |  |     default = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | class MusicShuffle(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Music shuffle type | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     None: No Music is shuffled | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     Consistent: Each music track is consistently shuffled throughout the game | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     Full: Each individual level has a random music track | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     Singularity: The entire game uses one song for overworld and one song for levels | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Music Shuffle" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_consistent = 1 | 
					
						
							|  |  |  |     option_full = 2 | 
					
						
							|  |  |  |     option_singularity = 3 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  | class SFXShuffle(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Shuffles almost every instance of sound effect playback | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     Archipelago elements that play sound effects aren't randomized | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     None: No SFX are shuffled | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     Full: Each individual SFX call has a random SFX | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     Singularity: The entire game uses one SFX for every SFX call | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Sound Effect Shuffle" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_full = 1 | 
					
						
							|  |  |  |     option_singularity = 2 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | class MarioPalette(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Mario palette color | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Mario Palette" | 
					
						
							|  |  |  |     option_mario = 0 | 
					
						
							|  |  |  |     option_luigi = 1 | 
					
						
							|  |  |  |     option_wario = 2 | 
					
						
							|  |  |  |     option_waluigi = 3 | 
					
						
							|  |  |  |     option_geno = 4 | 
					
						
							|  |  |  |     option_princess = 5 | 
					
						
							|  |  |  |     option_dark = 6 | 
					
						
							|  |  |  |     option_sponge = 7 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  | class LevelPaletteShuffle(Choice): | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     Whether to shuffle level palettes | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     Off: Do not shuffle palettes | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     On Legacy: Uses only the palette sets from the original game | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     On Curated: Uses custom, hand-crafted palette sets | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     display_name = "Level Palette Shuffle" | 
					
						
							|  |  |  |     option_off = 0 | 
					
						
							|  |  |  |     option_on_legacy = 1 | 
					
						
							|  |  |  |     option_on_curated = 2 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  | class OverworldPaletteShuffle(Choice): | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     Whether to shuffle overworld palettes | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     Off: Do not shuffle palettes | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     On Legacy: Uses only the palette sets from the original game | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     On Curated: Uses custom, hand-crafted palette sets | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Overworld Palette Shuffle" | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     option_off = 0 | 
					
						
							|  |  |  |     option_on_legacy = 1 | 
					
						
							|  |  |  |     option_on_curated = 2 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							| 
									
										
										
										
											2023-01-29 23:53:56 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | class StartingLifeCount(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     How many extra lives to start the game with | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Starting Life Count" | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 99 | 
					
						
							|  |  |  |     default = 5 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-21 18:09:05 -04:00
										 |  |  | smw_option_groups = [ | 
					
						
							|  |  |  |     OptionGroup("Goal Options", [ | 
					
						
							|  |  |  |         Goal, | 
					
						
							|  |  |  |         BossesRequired, | 
					
						
							|  |  |  |         NumberOfYoshiEggs, | 
					
						
							|  |  |  |         PercentageOfYoshiEggs, | 
					
						
							|  |  |  |     ]), | 
					
						
							|  |  |  |     OptionGroup("Sanity Options", [ | 
					
						
							|  |  |  |         DragonCoinChecks, | 
					
						
							|  |  |  |         MoonChecks, | 
					
						
							|  |  |  |         Hidden1UpChecks, | 
					
						
							|  |  |  |         BonusBlockChecks, | 
					
						
							|  |  |  |         Blocksanity, | 
					
						
							|  |  |  |     ]), | 
					
						
							|  |  |  |     OptionGroup("Level Shuffling", [ | 
					
						
							|  |  |  |         LevelShuffle, | 
					
						
							|  |  |  |         ExcludeSpecialZone, | 
					
						
							|  |  |  |         BowserCastleDoors, | 
					
						
							|  |  |  |         BowserCastleRooms, | 
					
						
							|  |  |  |         BossShuffle, | 
					
						
							|  |  |  |         SwapDonutGhostHouseExits, | 
					
						
							|  |  |  |     ]), | 
					
						
							|  |  |  |     OptionGroup("Junk and Traps", [ | 
					
						
							|  |  |  |         JunkFillPercentage, | 
					
						
							|  |  |  |         TrapFillPercentage, | 
					
						
							|  |  |  |         IceTrapWeight, | 
					
						
							|  |  |  |         StunTrapWeight, | 
					
						
							|  |  |  |         LiteratureTrapWeight, | 
					
						
							|  |  |  |         TimerTrapWeight, | 
					
						
							|  |  |  |         ReverseTrapWeight, | 
					
						
							|  |  |  |         ThwimpTrapWeight, | 
					
						
							|  |  |  |     ]), | 
					
						
							|  |  |  |     OptionGroup("Aesthetics", [ | 
					
						
							|  |  |  |         DisplayReceivedItemPopups, | 
					
						
							|  |  |  |         Autosave, | 
					
						
							|  |  |  |         OverworldSpeed, | 
					
						
							|  |  |  |         MusicShuffle, | 
					
						
							|  |  |  |         SFXShuffle, | 
					
						
							|  |  |  |         MarioPalette, | 
					
						
							|  |  |  |         LevelPaletteShuffle, | 
					
						
							|  |  |  |         OverworldPaletteShuffle, | 
					
						
							|  |  |  |         StartingLifeCount, | 
					
						
							|  |  |  |     ]), | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  | @dataclass | 
					
						
							|  |  |  | class SMWOptions(PerGameCommonOptions): | 
					
						
							|  |  |  |     death_link: DeathLink | 
					
						
							|  |  |  |     goal: Goal | 
					
						
							|  |  |  |     bosses_required: BossesRequired | 
					
						
							|  |  |  |     max_yoshi_egg_cap: NumberOfYoshiEggs | 
					
						
							|  |  |  |     percentage_of_yoshi_eggs: PercentageOfYoshiEggs | 
					
						
							|  |  |  |     dragon_coin_checks: DragonCoinChecks | 
					
						
							|  |  |  |     moon_checks: MoonChecks | 
					
						
							|  |  |  |     hidden_1up_checks: Hidden1UpChecks | 
					
						
							|  |  |  |     bonus_block_checks: BonusBlockChecks | 
					
						
							|  |  |  |     blocksanity: Blocksanity | 
					
						
							|  |  |  |     bowser_castle_doors: BowserCastleDoors | 
					
						
							|  |  |  |     bowser_castle_rooms: BowserCastleRooms | 
					
						
							|  |  |  |     level_shuffle: LevelShuffle | 
					
						
							|  |  |  |     exclude_special_zone: ExcludeSpecialZone | 
					
						
							|  |  |  |     boss_shuffle: BossShuffle | 
					
						
							|  |  |  |     swap_donut_gh_exits: SwapDonutGhostHouseExits | 
					
						
							|  |  |  |     display_received_item_popups: DisplayReceivedItemPopups | 
					
						
							|  |  |  |     junk_fill_percentage: JunkFillPercentage | 
					
						
							|  |  |  |     trap_fill_percentage: TrapFillPercentage | 
					
						
							|  |  |  |     ice_trap_weight: IceTrapWeight | 
					
						
							|  |  |  |     stun_trap_weight: StunTrapWeight | 
					
						
							|  |  |  |     literature_trap_weight: LiteratureTrapWeight | 
					
						
							|  |  |  |     timer_trap_weight: TimerTrapWeight | 
					
						
							|  |  |  |     reverse_trap_weight: ReverseTrapWeight | 
					
						
							|  |  |  |     thwimp_trap_weight: ThwimpTrapWeight | 
					
						
							|  |  |  |     autosave: Autosave | 
					
						
							|  |  |  |     early_climb: EarlyClimb | 
					
						
							|  |  |  |     overworld_speed: OverworldSpeed | 
					
						
							|  |  |  |     music_shuffle: MusicShuffle | 
					
						
							|  |  |  |     sfx_shuffle: SFXShuffle | 
					
						
							|  |  |  |     mario_palette: MarioPalette | 
					
						
							|  |  |  |     level_palette_shuffle: LevelPaletteShuffle | 
					
						
							|  |  |  |     overworld_palette_shuffle: OverworldPaletteShuffle | 
					
						
							|  |  |  |     starting_life_count: StartingLifeCount |