| 
									
										
										
										
											2022-05-14 06:00:49 -04:00
										 |  |  | import typing | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from Options import Choice, Range, Option, Toggle, DeathLink, DefaultOnToggle, OptionList | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  | class Goal(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines the goal of the seed | 
					
						
							|  |  |  |     Biolizard: Finish Cannon's Core and defeat the Biolizard and Finalhazard | 
					
						
							|  |  |  |     Chaos Emerald Hunt: Find the Seven Chaos Emeralds and reach Green Hill Zone | 
					
						
							|  |  |  |     Finalhazard Chaos Emerald Hunt: Find the Seven Chaos Emeralds and reach Green Hill Zone, then defeat Finalhazard | 
					
						
							| 
									
										
										
										
											2023-03-21 16:26:13 -04:00
										 |  |  |     Grand Prix: Win every race in Kart Race Mode (all standard levels are disabled) | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     Boss Rush: Beat all of the bosses in the Boss Rush, ending with Finalhazard | 
					
						
							|  |  |  |     Cannon's Core Boss Rush: Beat Cannon's Core, then beat all of the bosses in the Boss Rush, ending with Finalhazard | 
					
						
							|  |  |  |     Boss Rush Chaos Emerald Hunt: Find the Seven Chaos Emeralds, then beat all of the bosses in the Boss Rush, ending with Finalhazard | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Chaos Chao: Raise a Chaos Chao to win | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Goal" | 
					
						
							|  |  |  |     option_biolizard = 0 | 
					
						
							|  |  |  |     option_chaos_emerald_hunt = 1 | 
					
						
							|  |  |  |     option_finalhazard_chaos_emerald_hunt = 2 | 
					
						
							| 
									
										
										
										
											2023-03-21 16:26:13 -04:00
										 |  |  |     option_grand_prix = 3 | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     option_boss_rush = 4 | 
					
						
							|  |  |  |     option_cannons_core_boss_rush = 5 | 
					
						
							|  |  |  |     option_boss_rush_chaos_emerald_hunt = 6 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     option_chaos_chao = 7 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def get_option_name(cls, value) -> str: | 
					
						
							|  |  |  |         if cls.auto_display_name and value == 5: | 
					
						
							|  |  |  |             return "Cannon's Core Boss Rush" | 
					
						
							|  |  |  |         elif cls.auto_display_name: | 
					
						
							|  |  |  |             return cls.name_lookup[value].replace("_", " ").title() | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return cls.name_lookup[value] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | class MissionShuffle(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether missions order will be shuffled per level | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Mission Shuffle" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  | class BossRushShuffle(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines how bosses in Boss Rush Mode are shuffled | 
					
						
							|  |  |  |     Vanilla: Bosses appear in the Vanilla ordering | 
					
						
							|  |  |  |     Shuffled: The same bosses appear, but in a random order | 
					
						
							|  |  |  |     Chaos: Each boss is randomly chosen separately (one will always be King Boom Boo) | 
					
						
							|  |  |  |     Singularity: One boss is chosen and placed in every slot (one will always be replaced with King Boom Boo) | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Boss Rush Shuffle" | 
					
						
							|  |  |  |     option_vanilla = 0 | 
					
						
							|  |  |  |     option_shuffled = 1 | 
					
						
							|  |  |  |     option_chaos = 2 | 
					
						
							|  |  |  |     option_singularity = 3 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  | class BaseTrapWeight(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Base Class for Trap Weights | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_low = 1 | 
					
						
							|  |  |  |     option_medium = 2 | 
					
						
							|  |  |  |     option_high = 4 | 
					
						
							|  |  |  |     default = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class OmochaoTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Likelihood of receiving a trap which spawns several Omochao around the player | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "OmoTrap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TimestopTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Likelihood of receiving a trap which briefly stops time | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Chaos Control Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ConfusionTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Likelihood of receiving a trap which causes the controls to be skewed for a period of time | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Confusion Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TinyTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Likelihood of receiving a trap which causes the player to become tiny | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Tiny Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  | class GravityTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Likelihood of receiving a trap which increases gravity | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Gravity Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ExpositionTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Likelihood of receiving a trap which tells you the story | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Exposition Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DarknessTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Likelihood of receiving a trap which makes the world dark | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Darkness Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  | class IceTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Likelihood of receiving a trap which makes the world slippery | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Ice Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SlowTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Likelihood of receiving a trap which makes you gotta go slow | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Slow Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CutsceneTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Likelihood of receiving a trap which makes you watch an unskippable cutscene | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Cutscene Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | class ReverseTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Likelihood of receiving a trap which reverses your controls | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Reverse Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-21 16:26:13 -04:00
										 |  |  | class PongTrapWeight(BaseTrapWeight): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Likelihood of receiving a trap which forces you to play a Pong minigame | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Pong Trap Weight" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MinigameTrapDifficulty(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     How difficult any Minigame-style traps are | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Minigame Trap Difficulty" | 
					
						
							|  |  |  |     option_easy = 0 | 
					
						
							|  |  |  |     option_medium = 1 | 
					
						
							|  |  |  |     option_hard = 2 | 
					
						
							|  |  |  |     default = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  | class JunkFillPercentage(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Replace a percentage of non-required emblems in the item pool with random junk items | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Junk Fill Percentage" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 100 | 
					
						
							|  |  |  |     default = 50 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  | class Keysanity(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether picking up Chao Keys grants checks | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     (86 Locations) | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Keysanity" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Whistlesanity(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether whistling at various spots grants checks | 
					
						
							|  |  |  |     None: No Whistle Spots grant checks | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     Pipes: Whistling at Pipes grants checks (97 Locations) | 
					
						
							|  |  |  |     Hidden: Whistling at Hidden Whistle Spots grants checks (32 Locations) | 
					
						
							|  |  |  |     Both: Whistling at both Pipes and Hidden Whistle Spots grants checks (129 Locations) | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Whistlesanity" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_pipes = 1 | 
					
						
							|  |  |  |     option_hidden = 2 | 
					
						
							|  |  |  |     option_both = 3 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Beetlesanity(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether destroying Gold Beetles grants checks | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     (27 Locations) | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Beetlesanity" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-21 16:26:13 -04:00
										 |  |  | class Omosanity(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether activating Omochao grants checks | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     (192 Locations) | 
					
						
							| 
									
										
										
										
											2023-03-21 16:26:13 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Omosanity" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  | class Animalsanity(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether picking up counted small animals grants checks | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     (421 Locations) | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Animalsanity" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-21 16:26:13 -04:00
										 |  |  | class KartRaceChecks(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether Kart Race Mode grants checks | 
					
						
							|  |  |  |     None: No Kart Races grant checks | 
					
						
							|  |  |  |     Mini: Each Kart Race difficulty must be beaten only once | 
					
						
							|  |  |  |     Full: Every Character must separately beat each Kart Race difficulty | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Kart Race Checks" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_mini = 1 | 
					
						
							|  |  |  |     option_full = 2 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-14 06:00:49 -04:00
										 |  |  | class EmblemPercentageForCannonsCore(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Allows logic to gate the final mission behind a number of Emblems | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     display_name = "Emblem Percentage for Cannon's Core" | 
					
						
							| 
									
										
										
										
											2022-05-14 06:00:49 -04:00
										 |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 75 | 
					
						
							|  |  |  |     default = 50 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NumberOfLevelGates(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     The number emblem-locked gates which lock sets of levels | 
					
						
							| 
									
										
										
										
											2022-05-14 06:00:49 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Number of Level Gates" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 5 | 
					
						
							|  |  |  |     default = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LevelGateDistribution(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines how levels are distributed between level gate regions | 
					
						
							|  |  |  |     Early: Earlier regions will have more levels than later regions | 
					
						
							|  |  |  |     Even: Levels will be evenly distributed between all regions | 
					
						
							|  |  |  |     Late: Later regions will have more levels than earlier regions | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Level Gate Distribution" | 
					
						
							|  |  |  |     option_early = 0 | 
					
						
							|  |  |  |     option_even = 1 | 
					
						
							|  |  |  |     option_late = 2 | 
					
						
							|  |  |  |     default = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  | class LevelGateCosts(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines how many emblems are required to unlock level gates | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Level Gate Costs" | 
					
						
							|  |  |  |     option_low = 0 | 
					
						
							|  |  |  |     option_medium = 1 | 
					
						
							|  |  |  |     option_high = 2 | 
					
						
							|  |  |  |     default = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  | class MaximumEmblemCap(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines the maximum number of emblems that can be in the item pool. | 
					
						
							|  |  |  |     If fewer available locations exist in the pool than this number, the number of available locations will be used instead. | 
					
						
							|  |  |  |     Gate and Cannon's Core costs will be calculated based off of that number. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Max Emblem Cap" | 
					
						
							|  |  |  |     range_start = 50 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     range_end = 1000 | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     default = 180 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  | class RequiredRank(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines what minimum Rank is required to send a check for a mission | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Required Rank" | 
					
						
							|  |  |  |     option_e = 0 | 
					
						
							|  |  |  |     option_d = 1 | 
					
						
							|  |  |  |     option_c = 2 | 
					
						
							|  |  |  |     option_b = 3 | 
					
						
							|  |  |  |     option_a = 4 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | class ChaoRaceDifficulty(Choice): | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Determines the number of Chao Race difficulty levels included. Easier difficulty settings means fewer Chao Race checks | 
					
						
							|  |  |  |     None: No Chao Races have checks | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     Beginner: Beginner Races | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     Intermediate: Beginner, Challenge, Hero, and Dark Races | 
					
						
							|  |  |  |     Expert: Beginner, Challenge, Hero, Dark and Jewel Races | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     display_name = "Chao Race Difficulty" | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_beginner = 1 | 
					
						
							|  |  |  |     option_intermediate = 2 | 
					
						
							|  |  |  |     option_expert = 3 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | class ChaoKarateDifficulty(Choice): | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Determines the number of Chao Karate difficulty levels included. (Note: This setting requires purchase of the "Battle" DLC) | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     display_name = "Chao Karate Difficulty" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_beginner = 1 | 
					
						
							|  |  |  |     option_standard = 2 | 
					
						
							|  |  |  |     option_expert = 3 | 
					
						
							|  |  |  |     option_super = 4 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | class ChaoStadiumChecks(Choice): | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     Determines which Chao Stadium activities grant checks | 
					
						
							|  |  |  |     All: Each individual race and karate fight grants a check | 
					
						
							| 
									
										
										
										
											2022-11-06 08:28:16 -06:00
										 |  |  |     Prize: Only the races which grant Chao Toys grant checks (final race of each Beginner and Jewel cup, 4th, 8th, and | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |            12th Challenge Races, 2nd and 4th Hero and Dark Races, final fight of each Karate difficulty) | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     display_name = "Chao Stadium Checks" | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     option_all = 0 | 
					
						
							|  |  |  |     option_prize = 1 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | class ChaoStats(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines the highest level in each Chao Stat that grants checks | 
					
						
							|  |  |  |     (Swim, Fly, Run, Power) | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Chao Stats" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 99 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ChaoStatsFrequency(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines how many levels in each Chao Stat grant checks (up to the maximum set in the `chao_stats` option) | 
					
						
							|  |  |  |     `1` means every level is included, `2` means every other level is included, `3` means every third, and so on | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Chao Stats Frequency" | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 20 | 
					
						
							|  |  |  |     default = 5 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ChaoStatsStamina(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether Stamina is included in the `chao_stats` option | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Chao Stats - Stamina" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ChaoStatsHidden(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether the hidden stats (Luck and Intelligence) are included in the `chao_stats` option | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Chao Stats - Luck and Intelligence" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ChaoAnimalParts(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether giving Chao various animal parts grants checks | 
					
						
							|  |  |  |     (73 Locations) | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Chao Animal Parts" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ChaoKindergarten(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether learning the lessons from the Kindergarten Classroom grants checks | 
					
						
							|  |  |  |     (WARNING: VERY SLOW) | 
					
						
							|  |  |  |     None: No Kindergarten classes have checks | 
					
						
							|  |  |  |     Basics: One class from each category (Drawing, Dance, Song, and Instrument) is a check (4 Locations) | 
					
						
							|  |  |  |     Full: Every class is a check (23 Locations) | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Chao Kindergarten Checks" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_basics = 1 | 
					
						
							|  |  |  |     option_full = 2 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BlackMarketSlots(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines how many multiworld items are available to purchase from the Black Market | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Black Market Slots" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 64 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BlackMarketUnlockCosts(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines how many Chao Coins are required to unlock sets of Black Market items | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Black Market Unlock Costs" | 
					
						
							|  |  |  |     option_low = 0 | 
					
						
							|  |  |  |     option_medium = 1 | 
					
						
							|  |  |  |     option_high = 2 | 
					
						
							|  |  |  |     default = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BlackMarketPriceMultiplier(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines how many rings the Black Market items cost | 
					
						
							|  |  |  |     The base ring costs of items in the Black Market range from 50-100, | 
					
						
							|  |  |  |     and are then multiplied by this value | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Black Market Price Multiplier" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 40 | 
					
						
							|  |  |  |     default = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ShuffleStartingChaoEggs(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether the starting Chao eggs in the gardens are random | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Shuffle Starting Chao Eggs" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ChaoEntranceRandomization(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines whether entrances in Chao World are randomized | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Chao Entrance Randomization" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  | class RequiredCannonsCoreMissions(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     Determines how many Cannon's Core missions must be completed (for Biolizard or Cannon's Core goals) | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     First: Only the first mission must be completed | 
					
						
							|  |  |  |     All Active: All active Cannon's Core missions must be completed | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Required Cannon's Core Missions" | 
					
						
							|  |  |  |     option_first = 0 | 
					
						
							|  |  |  |     option_all_active = 1 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BaseMissionCount(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Base class for mission count options | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 5 | 
					
						
							|  |  |  |     default = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SpeedMissionCount(BaseMissionCount): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     The number of active missions to include for Sonic and Shadow stages | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Speed Mission Count" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SpeedMission2(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Sonic and Shadow 100 rings missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Speed Mission 2" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SpeedMission3(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Sonic and Shadow lost chao missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Speed Mission 3" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SpeedMission4(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Sonic and Shadow time trial missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Speed Mission 4" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SpeedMission5(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Sonic and Shadow hard missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Speed Mission 5" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MechMissionCount(BaseMissionCount): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     The number of active missions to include for Tails and Eggman stages | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Mech Mission Count" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MechMission2(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Tails and Eggman 100 rings missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Mech Mission 2" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MechMission3(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Tails and Eggman lost chao missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Mech Mission 3" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MechMission4(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Tails and Eggman time trial missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Mech Mission 4" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MechMission5(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Tails and Eggman hard missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Mech Mission 5" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HuntMissionCount(BaseMissionCount): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     The number of active missions to include for Knuckles and Rouge stages | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Hunt Mission Count" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HuntMission2(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Knuckles and Rouge 100 rings missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Hunt Mission 2" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HuntMission3(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Knuckles and Rouge lost chao missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Hunt Mission 3" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HuntMission4(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Knuckles and Rouge time trial missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Hunt Mission 4" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HuntMission5(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Knuckles and Rouge hard missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Hunt Mission 5" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KartMissionCount(BaseMissionCount): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     The number of active missions to include for Route 101 and 280 | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Kart Mission Count" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KartMission2(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Route 101 and 280 100 rings missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Kart Mission 2" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KartMission3(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Route 101 and 280 avoid cars missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Kart Mission 3" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KartMission4(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Route 101 and 280 avoid walls missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Kart Mission 4" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KartMission5(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Route 101 and 280 hard missions should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Kart Mission 5" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CannonsCoreMissionCount(BaseMissionCount): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     The number of active missions to include for Cannon's Core | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Cannon's Core Mission Count" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CannonsCoreMission2(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Cannon's Core 100 rings mission should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Cannon's Core Mission 2" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CannonsCoreMission3(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Cannon's Core lost chao mission should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Cannon's Core Mission 3" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CannonsCoreMission4(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Cannon's Core time trial mission should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Cannon's Core Mission 4" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CannonsCoreMission5(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Determines if the Cannon's Core hard mission should be included | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Cannon's Core Mission 5" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-21 16:26:13 -04:00
										 |  |  | class RingLoss(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     How taking damage is handled | 
					
						
							|  |  |  |     Classic: You lose all of your rings when hit | 
					
						
							|  |  |  |     Modern: You lose 20 rings when hit | 
					
						
							| 
									
										
										
										
											2023-03-24 19:22:47 -04:00
										 |  |  |     OHKO: You die immediately when hit (NOTE: Some Hard Logic tricks may require damage boosts!) | 
					
						
							| 
									
										
										
										
											2023-03-21 16:26:13 -04:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2023-03-24 19:22:47 -04:00
										 |  |  |     display_name = "Ring Loss" | 
					
						
							| 
									
										
										
										
											2023-03-21 16:26:13 -04:00
										 |  |  |     option_classic = 0 | 
					
						
							|  |  |  |     option_modern = 1 | 
					
						
							|  |  |  |     option_ohko = 2 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def get_option_name(cls, value) -> str: | 
					
						
							|  |  |  |         if cls.auto_display_name and value == 2: | 
					
						
							|  |  |  |             return cls.name_lookup[value].upper() | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return cls.name_lookup[value] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  | class RingLink(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Whether your in-level ring gain/loss is linked to other players | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Ring Link" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  | class SADXMusic(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Whether the randomizer will include Sonic Adventure DX Music in the music pool | 
					
						
							|  |  |  |     SA2B: Only SA2B music will be played | 
					
						
							|  |  |  |     SADX: Only SADX music will be played | 
					
						
							|  |  |  |     Both: Both SA2B and SADX music will be played | 
					
						
							|  |  |  |     NOTE: This option requires the player to own a PC copy of SADX and to follow the addition steps in the setup guide. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "SADX Music" | 
					
						
							|  |  |  |     option_sa2b = 0 | 
					
						
							|  |  |  |     option_sadx = 1 | 
					
						
							|  |  |  |     option_both = 2 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def get_option_name(cls, value) -> str: | 
					
						
							|  |  |  |         if cls.auto_display_name and value != 2: | 
					
						
							|  |  |  |             return cls.name_lookup[value].upper() | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return cls.name_lookup[value] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-14 06:00:49 -04:00
										 |  |  | class MusicShuffle(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     What type of Music Shuffle is used | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     None: No music is shuffled. | 
					
						
							| 
									
										
										
										
											2022-05-14 06:00:49 -04:00
										 |  |  |     Levels: Level music is shuffled. | 
					
						
							|  |  |  |     Full: Level, Menu, and Additional music is shuffled. | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     Singularity: Level, Menu, and Additional music is all replaced with a single random song. | 
					
						
							| 
									
										
										
										
											2022-05-14 06:00:49 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Music Shuffle Type" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_levels = 1 | 
					
						
							|  |  |  |     option_full = 2 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     option_singularity = 3 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  | class VoiceShuffle(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     What type of Voice Shuffle is used | 
					
						
							|  |  |  |     None: No voices are shuffled. | 
					
						
							|  |  |  |     Shuffled: Voices are shuffled. | 
					
						
							|  |  |  |     Rude: Voices are shuffled, but some are replaced with rude words. | 
					
						
							|  |  |  |     Chao: All voices are replaced with chao sounds. | 
					
						
							|  |  |  |     Singularity: All voices are replaced with a single random voice. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Voice Shuffle Type" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_shuffled = 1 | 
					
						
							|  |  |  |     option_rude = 2 | 
					
						
							|  |  |  |     option_chao = 3 | 
					
						
							|  |  |  |     option_singularity = 4 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  | class Narrator(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Which menu narrator is used | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Narrator" | 
					
						
							|  |  |  |     option_default = 0 | 
					
						
							|  |  |  |     option_shadow = 1 | 
					
						
							|  |  |  |     option_rouge = 2 | 
					
						
							|  |  |  |     option_eggman = 3 | 
					
						
							|  |  |  |     option_maria = 4 | 
					
						
							|  |  |  |     option_secretary = 5 | 
					
						
							|  |  |  |     option_omochao = 6 | 
					
						
							|  |  |  |     option_amy = 7 | 
					
						
							|  |  |  |     option_tails = 8 | 
					
						
							|  |  |  |     option_knuckles = 9 | 
					
						
							|  |  |  |     option_sonic = 10 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LogicDifficulty(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     What set of Upgrade Requirement logic to use | 
					
						
							|  |  |  |     Standard: The logic assumes the "intended" usage of Upgrades to progress through levels | 
					
						
							|  |  |  |     Hard: Some simple skips or sequence breaks may be required | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Logic Difficulty" | 
					
						
							|  |  |  |     option_standard = 0 | 
					
						
							|  |  |  |     option_hard = 1 | 
					
						
							| 
									
										
										
										
											2022-05-14 06:00:49 -04:00
										 |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | sa2b_options: typing.Dict[str, type(Option)] = { | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     "goal": Goal, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     "mission_shuffle": MissionShuffle, | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     "boss_rush_shuffle": BossRushShuffle, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     "keysanity": Keysanity, | 
					
						
							|  |  |  |     "whistlesanity": Whistlesanity, | 
					
						
							|  |  |  |     "beetlesanity": Beetlesanity, | 
					
						
							| 
									
										
										
										
											2023-03-21 16:26:13 -04:00
										 |  |  |     "omosanity": Omosanity, | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     "animalsanity": Animalsanity, | 
					
						
							| 
									
										
										
										
											2023-03-21 16:26:13 -04:00
										 |  |  |     "kart_race_checks": KartRaceChecks, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     "logic_difficulty": LogicDifficulty, | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     "required_rank": RequiredRank, | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     "required_cannons_core_missions": RequiredCannonsCoreMissions, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     "emblem_percentage_for_cannons_core": EmblemPercentageForCannonsCore, | 
					
						
							| 
									
										
										
										
											2022-05-18 08:56:43 -04:00
										 |  |  |     "number_of_level_gates": NumberOfLevelGates, | 
					
						
							|  |  |  |     "level_gate_distribution": LevelGateDistribution, | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     "level_gate_costs": LevelGateCosts, | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     "max_emblem_cap": MaximumEmblemCap, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     "chao_race_difficulty": ChaoRaceDifficulty, | 
					
						
							|  |  |  |     "chao_karate_difficulty": ChaoKarateDifficulty, | 
					
						
							|  |  |  |     "chao_stadium_checks": ChaoStadiumChecks, | 
					
						
							|  |  |  |     "chao_stats": ChaoStats, | 
					
						
							|  |  |  |     "chao_stats_frequency": ChaoStatsFrequency, | 
					
						
							|  |  |  |     "chao_stats_stamina": ChaoStatsStamina, | 
					
						
							|  |  |  |     "chao_stats_hidden": ChaoStatsHidden, | 
					
						
							|  |  |  |     "chao_animal_parts": ChaoAnimalParts, | 
					
						
							|  |  |  |     "chao_kindergarten": ChaoKindergarten, | 
					
						
							|  |  |  |     "black_market_slots": BlackMarketSlots, | 
					
						
							|  |  |  |     "black_market_unlock_costs": BlackMarketUnlockCosts, | 
					
						
							|  |  |  |     "black_market_price_multiplier": BlackMarketPriceMultiplier, | 
					
						
							|  |  |  |     "shuffle_starting_chao_eggs": ShuffleStartingChaoEggs, | 
					
						
							|  |  |  |     "chao_entrance_randomization": ChaoEntranceRandomization, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     "junk_fill_percentage": JunkFillPercentage, | 
					
						
							|  |  |  |     "trap_fill_percentage": TrapFillPercentage, | 
					
						
							|  |  |  |     "omochao_trap_weight": OmochaoTrapWeight, | 
					
						
							|  |  |  |     "timestop_trap_weight": TimestopTrapWeight, | 
					
						
							|  |  |  |     "confusion_trap_weight": ConfusionTrapWeight, | 
					
						
							|  |  |  |     "tiny_trap_weight": TinyTrapWeight, | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     "gravity_trap_weight": GravityTrapWeight, | 
					
						
							|  |  |  |     "exposition_trap_weight": ExpositionTrapWeight, | 
					
						
							|  |  |  |     #"darkness_trap_weight": DarknessTrapWeight, | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     "ice_trap_weight": IceTrapWeight, | 
					
						
							|  |  |  |     "slow_trap_weight": SlowTrapWeight, | 
					
						
							|  |  |  |     "cutscene_trap_weight": CutsceneTrapWeight, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     "reverse_trap_weight": ReverseTrapWeight, | 
					
						
							| 
									
										
										
										
											2023-03-21 16:26:13 -04:00
										 |  |  |     "pong_trap_weight": PongTrapWeight, | 
					
						
							|  |  |  |     "minigame_trap_difficulty": MinigameTrapDifficulty, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     "sadx_music": SADXMusic, | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     "music_shuffle": MusicShuffle, | 
					
						
							| 
									
										
										
										
											2023-06-27 17:38:58 -04:00
										 |  |  |     "voice_shuffle": VoiceShuffle, | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     "narrator": Narrator, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  |     "ring_loss": RingLoss, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     "speed_mission_count": SpeedMissionCount, | 
					
						
							|  |  |  |     "speed_mission_2": SpeedMission2, | 
					
						
							|  |  |  |     "speed_mission_3": SpeedMission3, | 
					
						
							|  |  |  |     "speed_mission_4": SpeedMission4, | 
					
						
							|  |  |  |     "speed_mission_5": SpeedMission5, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     "mech_mission_count": MechMissionCount, | 
					
						
							|  |  |  |     "mech_mission_2": MechMission2, | 
					
						
							|  |  |  |     "mech_mission_3": MechMission3, | 
					
						
							|  |  |  |     "mech_mission_4": MechMission4, | 
					
						
							|  |  |  |     "mech_mission_5": MechMission5, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     "hunt_mission_count": HuntMissionCount, | 
					
						
							|  |  |  |     "hunt_mission_2": HuntMission2, | 
					
						
							|  |  |  |     "hunt_mission_3": HuntMission3, | 
					
						
							|  |  |  |     "hunt_mission_4": HuntMission4, | 
					
						
							|  |  |  |     "hunt_mission_5": HuntMission5, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     "kart_mission_count": KartMissionCount, | 
					
						
							|  |  |  |     "kart_mission_2": KartMission2, | 
					
						
							|  |  |  |     "kart_mission_3": KartMission3, | 
					
						
							|  |  |  |     "kart_mission_4": KartMission4, | 
					
						
							|  |  |  |     "kart_mission_5": KartMission5, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 00:20:02 -05:00
										 |  |  |     "cannons_core_mission_count": CannonsCoreMissionCount, | 
					
						
							|  |  |  |     "cannons_core_mission_2": CannonsCoreMission2, | 
					
						
							|  |  |  |     "cannons_core_mission_3": CannonsCoreMission3, | 
					
						
							|  |  |  |     "cannons_core_mission_4": CannonsCoreMission4, | 
					
						
							|  |  |  |     "cannons_core_mission_5": CannonsCoreMission5, | 
					
						
							| 
									
										
										
										
											2023-11-16 02:08:38 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     "ring_link": RingLink, | 
					
						
							| 
									
										
										
										
											2022-06-20 15:12:13 -04:00
										 |  |  |     "death_link": DeathLink, | 
					
						
							| 
									
										
										
										
											2022-05-14 06:00:49 -04:00
										 |  |  | } |