| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  | import typing | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  | from Options import Option, DefaultOnToggle, Range, Toggle, DeathLink, Choice | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  | from .Items import action_item_table | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  | class EnableCoinStars(DefaultOnToggle): | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     """Disable to Ignore 100 Coin Stars. You can still collect them, but they don't do anything.
 | 
					
						
							|  |  |  |     Removes 15 locations from the pool."""
 | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Enable 100 Coin Stars" | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  | class StrictCapRequirements(DefaultOnToggle): | 
					
						
							|  |  |  |     """If disabled, Stars that expect special caps may have to be acquired without the caps""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Strict Cap Requirements" | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-15 19:56:10 +01:00
										 |  |  | class StrictCannonRequirements(DefaultOnToggle): | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     """If disabled, Stars that expect cannons may have to be acquired without them.
 | 
					
						
							|  |  |  |     Has no effect if Buddy Checks and Move Randomizer are disabled"""
 | 
					
						
							| 
									
										
										
										
											2022-02-15 19:56:10 +01:00
										 |  |  |     display_name = "Strict Cannon Requirements" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-14 18:37:14 +02:00
										 |  |  | class FirstBowserStarDoorCost(Range): | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     """What percent of the total stars are required at the Star Door to Bowser in the Dark World""" | 
					
						
							|  |  |  |     display_name = "First Star Door Cost %" | 
					
						
							| 
									
										
										
										
											2022-07-14 18:37:14 +02:00
										 |  |  |     range_start = 0 | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     range_end = 40 | 
					
						
							|  |  |  |     default = 7 | 
					
						
							| 
									
										
										
										
											2022-07-14 18:37:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-14 18:37:14 +02:00
										 |  |  | class BasementStarDoorCost(Range): | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     """What percent of the total stars are required at the Star Door in the Basement""" | 
					
						
							|  |  |  |     display_name = "Basement Star Door %" | 
					
						
							| 
									
										
										
										
											2022-07-14 18:37:14 +02:00
										 |  |  |     range_start = 0 | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     range_end = 50 | 
					
						
							|  |  |  |     default = 25 | 
					
						
							| 
									
										
										
										
											2022-07-14 18:37:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-14 18:37:14 +02:00
										 |  |  | class SecondFloorStarDoorCost(Range): | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     """What percent of the total stars are required to access the third floor""" | 
					
						
							|  |  |  |     display_name = 'Second Floor Star Door %' | 
					
						
							| 
									
										
										
										
											2022-07-14 18:37:14 +02:00
										 |  |  |     range_start = 0 | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     range_end = 70 | 
					
						
							|  |  |  |     default = 42 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  | class MIPS1Cost(Range): | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     """What percent of the total stars are required to spawn MIPS the first time""" | 
					
						
							|  |  |  |     display_name = "MIPS 1 Star %" | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     range_start = 0 | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     range_end = 35 | 
					
						
							|  |  |  |     default = 12 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  | class MIPS2Cost(Range): | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     """What percent of the total stars are required to spawn MIPS the second time.""" | 
					
						
							|  |  |  |     display_name = "MIPS 2 Star %" | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     range_start = 0 | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     range_end = 70 | 
					
						
							|  |  |  |     default = 42 | 
					
						
							| 
									
										
										
										
											2022-07-14 18:37:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  | class StarsToFinish(Range): | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     """What percent of the total stars are required at the infinite stairs""" | 
					
						
							|  |  |  |     display_name = "Endless Stairs Star %" | 
					
						
							| 
									
										
										
										
											2022-07-14 18:37:14 +02:00
										 |  |  |     range_start = 0 | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     range_end = 90 | 
					
						
							|  |  |  |     default = 58 | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  | class AmountOfStars(Range): | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     """How many stars exist.
 | 
					
						
							|  |  |  |     If there aren't enough locations to hold the given total, the total will be reduced.""" | 
					
						
							|  |  |  |     display_name = "Total Power Stars" | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     range_start = 35 | 
					
						
							|  |  |  |     range_end = 120 | 
					
						
							|  |  |  |     default = 120 | 
					
						
							| 
									
										
										
										
											2022-01-30 19:12:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  | class AreaRandomizer(Choice): | 
					
						
							|  |  |  |     """Randomize Entrances""" | 
					
						
							|  |  |  |     display_name = "Entrance Randomizer" | 
					
						
							|  |  |  |     option_Off = 0 | 
					
						
							|  |  |  |     option_Courses_Only = 1 | 
					
						
							| 
									
										
										
										
											2022-10-27 19:43:02 -04:00
										 |  |  |     option_Courses_and_Secrets_Separate = 2 | 
					
						
							|  |  |  |     option_Courses_and_Secrets = 3 | 
					
						
							| 
									
										
										
										
											2022-02-09 20:57:38 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-15 19:56:10 +01:00
										 |  |  | class BuddyChecks(Toggle): | 
					
						
							|  |  |  |     """Bob-omb Buddies are checks, Cannon Unlocks are items""" | 
					
						
							|  |  |  |     display_name = "Bob-omb Buddy Checks" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-21 20:45:39 +02:00
										 |  |  | class ExclamationBoxes(Choice): | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     """Include 1Up Exclamation Boxes during randomization.
 | 
					
						
							|  |  |  |     Adds 29 locations to the pool."""
 | 
					
						
							| 
									
										
										
										
											2022-08-21 20:45:39 +02:00
										 |  |  |     display_name = "Randomize 1Up !-Blocks" | 
					
						
							|  |  |  |     option_Off = 0 | 
					
						
							|  |  |  |     option_1Ups_Only = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-28 21:44:16 +02:00
										 |  |  | class CompletionType(Choice): | 
					
						
							|  |  |  |     """Set goal for game completion""" | 
					
						
							|  |  |  |     display_name = "Completion Goal" | 
					
						
							|  |  |  |     option_Last_Bowser_Stage = 0 | 
					
						
							|  |  |  |     option_All_Bowser_Stages = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-09 20:57:38 +01:00
										 |  |  | class ProgressiveKeys(DefaultOnToggle): | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     """Keys will first grant you access to the Basement, then to the Second Floor""" | 
					
						
							| 
									
										
										
										
											2022-02-09 20:57:38 +01:00
										 |  |  |     display_name = "Progressive Keys" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  | class StrictMoveRequirements(DefaultOnToggle): | 
					
						
							|  |  |  |     """If disabled, Stars that expect certain moves may have to be acquired without them. Only makes a difference
 | 
					
						
							|  |  |  |     if Move Randomization is enabled"""
 | 
					
						
							|  |  |  |     display_name = "Strict Move Requirements" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def getMoveRandomizerOption(action: str): | 
					
						
							|  |  |  |     class MoveRandomizerOption(Toggle): | 
					
						
							|  |  |  |         """Mario is unable to perform this action until a corresponding item is picked up.
 | 
					
						
							|  |  |  |         This option is incompatible with builds using a 'nomoverando' branch."""
 | 
					
						
							|  |  |  |         display_name = f"Randomize {action}" | 
					
						
							|  |  |  |     return MoveRandomizerOption | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | sm64_options: typing.Dict[str, type(Option)] = { | 
					
						
							| 
									
										
										
										
											2022-02-09 20:57:38 +01:00
										 |  |  |     "AreaRandomizer": AreaRandomizer, | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     "BuddyChecks": BuddyChecks, | 
					
						
							|  |  |  |     "ExclamationBoxes": ExclamationBoxes, | 
					
						
							| 
									
										
										
										
											2022-02-09 20:57:38 +01:00
										 |  |  |     "ProgressiveKeys": ProgressiveKeys, | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     "EnableCoinStars": EnableCoinStars, | 
					
						
							|  |  |  |     "StrictCapRequirements": StrictCapRequirements, | 
					
						
							| 
									
										
										
										
											2022-02-15 19:56:10 +01:00
										 |  |  |     "StrictCannonRequirements": StrictCannonRequirements, | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     "StrictMoveRequirements": StrictMoveRequirements, | 
					
						
							|  |  |  |     "AmountOfStars": AmountOfStars, | 
					
						
							| 
									
										
										
										
											2022-07-14 18:37:14 +02:00
										 |  |  |     "FirstBowserStarDoorCost": FirstBowserStarDoorCost, | 
					
						
							|  |  |  |     "BasementStarDoorCost": BasementStarDoorCost, | 
					
						
							|  |  |  |     "SecondFloorStarDoorCost": SecondFloorStarDoorCost, | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     "MIPS1Cost": MIPS1Cost, | 
					
						
							|  |  |  |     "MIPS2Cost": MIPS2Cost, | 
					
						
							| 
									
										
										
										
											2022-01-30 19:12:52 +01:00
										 |  |  |     "StarsToFinish": StarsToFinish, | 
					
						
							| 
									
										
										
										
											2022-05-25 19:53:36 +02:00
										 |  |  |     "death_link": DeathLink, | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  |     "CompletionType": CompletionType, | 
					
						
							| 
									
										
										
										
											2022-09-16 00:32:30 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2024-02-13 00:14:21 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | for action in action_item_table: | 
					
						
							|  |  |  |     # HACK: Disable randomization of double jump | 
					
						
							|  |  |  |     if action == 'Double Jump': continue | 
					
						
							|  |  |  |     sm64_options[f"MoveRandomizer{action.replace(' ','')}"] = getMoveRandomizerOption(action) |