| 
									
										
										
										
											2021-07-04 16:18:21 +02:00
										 |  |  | import typing | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-14 02:39:53 -05:00
										 |  |  | from BaseClasses import MultiWorld | 
					
						
							| 
									
										
										
										
											2023-04-10 21:13:33 +02:00
										 |  |  | from Options import Choice, Range, Option, Toggle, DefaultOnToggle, DeathLink, StartInventoryPool, PlandoBosses | 
					
						
							| 
									
										
										
										
											2021-07-04 16:18:21 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Logic(Choice): | 
					
						
							|  |  |  |     option_no_glitches = 0 | 
					
						
							|  |  |  |     option_minor_glitches = 1 | 
					
						
							|  |  |  |     option_overworld_glitches = 2 | 
					
						
							|  |  |  |     option_hybrid_major_glitches = 3 | 
					
						
							|  |  |  |     option_no_logic = 4 | 
					
						
							|  |  |  |     alias_owg = 2 | 
					
						
							|  |  |  |     alias_hmg = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Objective(Choice): | 
					
						
							|  |  |  |     option_crystals = 0 | 
					
						
							|  |  |  |     # option_pendants = 1 | 
					
						
							|  |  |  |     option_triforce_pieces = 2 | 
					
						
							|  |  |  |     option_pedestal = 3 | 
					
						
							|  |  |  |     option_bingo = 4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Goal(Choice): | 
					
						
							|  |  |  |     option_kill_ganon = 0 | 
					
						
							|  |  |  |     option_kill_ganon_and_gt_agahnim = 1 | 
					
						
							|  |  |  |     option_hand_in = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-14 02:39:53 -05:00
										 |  |  | class OpenPyramid(Choice): | 
					
						
							|  |  |  |     """Determines whether the hole at the top of pyramid is open.
 | 
					
						
							|  |  |  |     Goal will open the pyramid if the goal requires you to kill Ganon, without needing to kill Agahnim 2. | 
					
						
							|  |  |  |     Auto is the same as goal except if Ganon's dropdown is in another location, the hole will be closed.""" | 
					
						
							|  |  |  |     display_name = "Open Pyramid Hole" | 
					
						
							|  |  |  |     option_closed = 0 | 
					
						
							|  |  |  |     option_open = 1 | 
					
						
							|  |  |  |     option_goal = 2 | 
					
						
							|  |  |  |     option_auto = 3 | 
					
						
							|  |  |  |     default = option_goal | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-27 19:29:18 -06:00
										 |  |  |     alias_true = option_open | 
					
						
							|  |  |  |     alias_false = option_closed | 
					
						
							| 
									
										
										
										
											2022-07-14 02:39:53 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def to_bool(self, world: MultiWorld, player: int) -> bool: | 
					
						
							|  |  |  |         if self.value == self.option_goal: | 
					
						
							|  |  |  |             return world.goal[player] in {'crystals', 'ganontriforcehunt', 'localganontriforcehunt', 'ganonpedestal'} | 
					
						
							|  |  |  |         elif self.value == self.option_auto: | 
					
						
							|  |  |  |             return world.goal[player] in {'crystals', 'ganontriforcehunt', 'localganontriforcehunt', 'ganonpedestal'} \ | 
					
						
							|  |  |  |             and (world.shuffle[player] in {'vanilla', 'dungeonssimple', 'dungeonsfull', 'dungeonscrossed'} or not | 
					
						
							|  |  |  |                  world.shuffle_ganon) | 
					
						
							|  |  |  |         elif self.value == self.option_open: | 
					
						
							|  |  |  |             return True | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-30 16:31:56 +02:00
										 |  |  | class DungeonItem(Choice): | 
					
						
							|  |  |  |     value: int | 
					
						
							|  |  |  |     option_original_dungeon = 0 | 
					
						
							|  |  |  |     option_own_dungeons = 1 | 
					
						
							|  |  |  |     option_own_world = 2 | 
					
						
							|  |  |  |     option_any_world = 3 | 
					
						
							|  |  |  |     option_different_world = 4 | 
					
						
							| 
									
										
										
										
											2021-12-23 12:31:44 -05:00
										 |  |  |     option_start_with = 6 | 
					
						
							| 
									
										
										
										
											2021-08-30 16:31:56 +02:00
										 |  |  |     alias_true = 3 | 
					
						
							|  |  |  |     alias_false = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @property | 
					
						
							|  |  |  |     def in_dungeon(self): | 
					
						
							|  |  |  |         return self.value in {0, 1} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-03 10:41:31 +01:00
										 |  |  |     @property | 
					
						
							|  |  |  |     def hints_useful(self): | 
					
						
							|  |  |  |         """Indicates if hints for this Item are useful in any way.""" | 
					
						
							|  |  |  |         return self.value in {1, 2, 3, 4} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-30 16:31:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-30 18:00:39 +02:00
										 |  |  | class bigkey_shuffle(DungeonItem): | 
					
						
							| 
									
										
										
										
											2021-08-30 16:31:56 +02:00
										 |  |  |     """Big Key Placement""" | 
					
						
							|  |  |  |     item_name_group = "Big Keys" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Big Key Shuffle" | 
					
						
							| 
									
										
										
										
											2021-08-30 16:31:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-30 18:00:39 +02:00
										 |  |  | class smallkey_shuffle(DungeonItem): | 
					
						
							| 
									
										
										
										
											2021-08-30 16:31:56 +02:00
										 |  |  |     """Small Key Placement""" | 
					
						
							|  |  |  |     option_universal = 5 | 
					
						
							|  |  |  |     item_name_group = "Small Keys" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Small Key Shuffle" | 
					
						
							| 
									
										
										
										
											2021-08-30 16:31:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-30 18:00:39 +02:00
										 |  |  | class compass_shuffle(DungeonItem): | 
					
						
							| 
									
										
										
										
											2021-08-30 16:31:56 +02:00
										 |  |  |     """Compass Placement""" | 
					
						
							|  |  |  |     item_name_group = "Compasses" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Compass Shuffle" | 
					
						
							| 
									
										
										
										
											2021-08-30 16:31:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-30 18:00:39 +02:00
										 |  |  | class map_shuffle(DungeonItem): | 
					
						
							| 
									
										
										
										
											2021-08-30 16:31:56 +02:00
										 |  |  |     """Map Placement""" | 
					
						
							|  |  |  |     item_name_group = "Maps" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Map Shuffle" | 
					
						
							| 
									
										
										
										
											2021-08-30 16:31:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-26 23:24:10 -04:00
										 |  |  | class key_drop_shuffle(Toggle): | 
					
						
							|  |  |  |     """Shuffle keys found in pots and dropped from killed enemies.""" | 
					
						
							|  |  |  |     display_name = "Key Drop Shuffle" | 
					
						
							|  |  |  |     default = False | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-04 16:18:21 +02:00
										 |  |  | class Crystals(Range): | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 7 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CrystalsTower(Crystals): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """Number of crystals needed to open Ganon's Tower""" | 
					
						
							|  |  |  |     display_name = "Crystals for GT" | 
					
						
							| 
									
										
										
										
											2021-07-04 16:18:21 +02:00
										 |  |  |     default = 7 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CrystalsGanon(Crystals): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """Number of crystals needed to damage Ganon""" | 
					
						
							|  |  |  |     display_name = "Crystals for Ganon" | 
					
						
							| 
									
										
										
										
											2021-07-04 16:18:21 +02:00
										 |  |  |     default = 7 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TriforcePieces(Range): | 
					
						
							|  |  |  |     default = 30 | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 90 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ShopItemSlots(Range): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """Number of slots in all shops available to have items from the multiworld""" | 
					
						
							|  |  |  |     display_name = "Available Shop Slots" | 
					
						
							| 
									
										
										
										
											2021-07-04 16:18:21 +02:00
										 |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 30 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-12 17:13:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-02 21:07:43 -05:00
										 |  |  | class ShopPriceModifier(Range): | 
					
						
							|  |  |  |     """Percentage modifier for shuffled item prices in shops""" | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     display_name = "Shop Price Cost Percent" | 
					
						
							| 
									
										
										
										
											2022-01-02 21:07:43 -05:00
										 |  |  |     range_start = 0 | 
					
						
							|  |  |  |     default = 100 | 
					
						
							| 
									
										
										
										
											2022-01-07 22:45:57 -05:00
										 |  |  |     range_end = 400 | 
					
						
							| 
									
										
										
										
											2021-07-04 16:18:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-12 17:13:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-04 16:18:21 +02:00
										 |  |  | class WorldState(Choice): | 
					
						
							|  |  |  |     option_standard = 1 | 
					
						
							|  |  |  |     option_open = 0 | 
					
						
							|  |  |  |     option_inverted = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-12 13:28:32 -05:00
										 |  |  | class LTTPBosses(PlandoBosses): | 
					
						
							| 
									
										
										
										
											2022-09-16 19:55:33 -05:00
										 |  |  |     """Shuffles bosses around to different locations.
 | 
					
						
							|  |  |  |     Basic will shuffle all bosses except Ganon and Agahnim anywhere they can be placed. | 
					
						
							|  |  |  |     Full chooses 3 bosses at random to be placed twice instead of Lanmolas, Moldorm, and Helmasaur. | 
					
						
							|  |  |  |     Chaos allows any boss to appear any number of times. | 
					
						
							|  |  |  |     Singularity places a single boss in as many places as possible, and a second boss in any remaining locations. | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     Supports plando placement."""
 | 
					
						
							| 
									
										
										
										
											2022-09-16 19:55:33 -05:00
										 |  |  |     display_name = "Boss Shuffle" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_basic = 1 | 
					
						
							| 
									
										
										
										
											2021-07-04 16:18:21 +02:00
										 |  |  |     option_full = 2 | 
					
						
							|  |  |  |     option_chaos = 3 | 
					
						
							|  |  |  |     option_singularity = 4 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-12 13:28:32 -05:00
										 |  |  |     duplicate_bosses = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bosses = { | 
					
						
							| 
									
										
										
										
											2022-09-16 19:55:33 -05:00
										 |  |  |         "Armos Knights", | 
					
						
							|  |  |  |         "Lanmolas", | 
					
						
							|  |  |  |         "Moldorm", | 
					
						
							|  |  |  |         "Helmasaur King", | 
					
						
							|  |  |  |         "Arrghus", | 
					
						
							|  |  |  |         "Mothula", | 
					
						
							|  |  |  |         "Blind", | 
					
						
							|  |  |  |         "Kholdstare", | 
					
						
							|  |  |  |         "Vitreous", | 
					
						
							|  |  |  |         "Trinexx", | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-12 13:28:32 -05:00
										 |  |  |     locations = { | 
					
						
							| 
									
										
										
										
											2022-09-16 19:55:33 -05:00
										 |  |  |         "Ganons Tower Top", | 
					
						
							|  |  |  |         "Tower of Hera", | 
					
						
							|  |  |  |         "Skull Woods", | 
					
						
							|  |  |  |         "Ganons Tower Middle", | 
					
						
							|  |  |  |         "Eastern Palace", | 
					
						
							|  |  |  |         "Desert Palace", | 
					
						
							|  |  |  |         "Palace of Darkness", | 
					
						
							|  |  |  |         "Swamp Palace", | 
					
						
							|  |  |  |         "Thieves Town", | 
					
						
							|  |  |  |         "Ice Palace", | 
					
						
							|  |  |  |         "Misery Mire", | 
					
						
							|  |  |  |         "Turtle Rock", | 
					
						
							|  |  |  |         "Ganons Tower Bottom" | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							| 
									
										
										
										
											2022-10-12 13:28:32 -05:00
										 |  |  |     def can_place_boss(cls, boss: str, location: str) -> bool: | 
					
						
							|  |  |  |         from worlds.alttp.Bosses import can_place_boss | 
					
						
							|  |  |  |         level = '' | 
					
						
							|  |  |  |         words = location.split(" ") | 
					
						
							|  |  |  |         if words[-1] in ("top", "middle", "bottom"): | 
					
						
							|  |  |  |             level = words[-1] | 
					
						
							|  |  |  |             location = " ".join(words[:-1]) | 
					
						
							|  |  |  |         location = location.title().replace("Of", "of") | 
					
						
							|  |  |  |         return can_place_boss(boss.title(), location, level) | 
					
						
							| 
									
										
										
										
											2022-09-16 19:55:33 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-04 16:18:21 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Enemies(Choice): | 
					
						
							|  |  |  |     option_vanilla = 0 | 
					
						
							|  |  |  |     option_shuffled = 1 | 
					
						
							|  |  |  |     option_chaos = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Progressive(Choice): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """How item types that have multiple tiers (armor, bows, gloves, shields, and swords) should be rewarded""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Progressive Items" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  |     option_off = 0 | 
					
						
							|  |  |  |     option_grouped_random = 1 | 
					
						
							|  |  |  |     option_on = 2 | 
					
						
							|  |  |  |     default = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def want_progressives(self, random): | 
					
						
							| 
									
										
										
										
											2021-08-09 10:05:45 +02:00
										 |  |  |         return random.choice([True, False]) if self.value == self.option_grouped_random else bool(self.value) | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-29 20:21:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  | class Swordless(Toggle): | 
					
						
							| 
									
										
										
										
											2022-09-16 19:55:33 -05:00
										 |  |  |     """No swords. Curtains in Skull Woods and Agahnim's
 | 
					
						
							|  |  |  |     Tower are removed, Agahnim's Tower barrier can be | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  |     destroyed with hammer. Misery Mire and Turtle Rock | 
					
						
							|  |  |  |     can be opened without a sword. Hammer damages Ganon. | 
					
						
							|  |  |  |     Ether and Bombos Tablet can be activated with Hammer | 
					
						
							|  |  |  |     (and Book)."""
 | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Swordless" | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-17 03:48:54 +02:00
										 |  |  | # Might be a decent idea to split "Bow" into its own option with choices of | 
					
						
							|  |  |  | # Defer to Progressive Option (default), Progressive, Non-Progressive, Bow + Silvers, Retro | 
					
						
							| 
									
										
										
										
											2022-06-01 17:29:21 +02:00
										 |  |  | class RetroBow(Toggle): | 
					
						
							|  |  |  |     """Zelda-1 like mode. You have to purchase a quiver to shoot arrows using rupees.""" | 
					
						
							|  |  |  |     display_name = "Retro Bow" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RetroCaves(Toggle): | 
					
						
							|  |  |  |     """Zelda-1 like mode. There are randomly placed take-any caves that contain one Sword and
 | 
					
						
							|  |  |  |     choices of Heart Container/Blue Potion."""
 | 
					
						
							|  |  |  |     display_name = "Retro Caves" | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RestrictBossItem(Toggle): | 
					
						
							|  |  |  |     """Don't place dungeon-native items on the dungeon's boss.""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Prevent Dungeon Item on Boss" | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-27 22:57:54 +01:00
										 |  |  | class Hints(Choice): | 
					
						
							| 
									
										
										
										
											2022-05-28 20:08:06 +02:00
										 |  |  |     """On/Full: Put item and entrance placement hints on telepathic tiles and some NPCs, Full removes joke hints.""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Hints" | 
					
						
							| 
									
										
										
										
											2021-11-27 22:57:54 +01:00
										 |  |  |     option_off = 0 | 
					
						
							|  |  |  |     option_on = 2 | 
					
						
							|  |  |  |     option_full = 3 | 
					
						
							|  |  |  |     default = 2 | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-28 20:08:06 +02:00
										 |  |  | class Scams(Choice): | 
					
						
							|  |  |  |     """If on, these Merchants will no longer tell you what they're selling.""" | 
					
						
							|  |  |  |     display_name = "Scams" | 
					
						
							|  |  |  |     option_off = 0 | 
					
						
							|  |  |  |     option_king_zora = 1 | 
					
						
							|  |  |  |     option_bottle_merchant = 2 | 
					
						
							|  |  |  |     option_all = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-22 00:04:41 -05:00
										 |  |  |     @property | 
					
						
							| 
									
										
										
										
											2022-05-28 20:08:06 +02:00
										 |  |  |     def gives_king_zora_hint(self): | 
					
						
							|  |  |  |         return self.value in {0, 2} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-22 00:04:41 -05:00
										 |  |  |     @property | 
					
						
							| 
									
										
										
										
											2022-05-28 20:08:06 +02:00
										 |  |  |     def gives_bottle_merchant_hint(self): | 
					
						
							|  |  |  |         return self.value in {0, 1} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  | class EnemyShuffle(Toggle): | 
					
						
							|  |  |  |     """Randomize every enemy spawn.
 | 
					
						
							|  |  |  |     If mode is Standard, Hyrule Castle is left out (may result in visually wrong enemy sprites in that area.)"""
 | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Enemy Shuffle" | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KillableThieves(Toggle): | 
					
						
							|  |  |  |     """Makes Thieves killable.""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Killable Thieves" | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BushShuffle(Toggle): | 
					
						
							|  |  |  |     """Randomize chance that a bush contains an enemy as well as which enemy may spawn.""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Bush Shuffle" | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TileShuffle(Toggle): | 
					
						
							|  |  |  |     """Randomize flying tiles floor patterns.""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Tile Shuffle" | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PotShuffle(Toggle): | 
					
						
							|  |  |  |     """Shuffle contents of pots within "supertiles" (item will still be nearby original placement).""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Pot Shuffle" | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | class Palette(Choice): | 
					
						
							|  |  |  |     option_default = 0 | 
					
						
							|  |  |  |     option_good = 1 | 
					
						
							|  |  |  |     option_blackout = 2 | 
					
						
							|  |  |  |     option_puke = 3 | 
					
						
							|  |  |  |     option_classic = 4 | 
					
						
							|  |  |  |     option_grayscale = 5 | 
					
						
							|  |  |  |     option_negative = 6 | 
					
						
							|  |  |  |     option_dizzy = 7 | 
					
						
							|  |  |  |     option_sick = 8 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class OWPalette(Palette): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """The type of palette shuffle to use for the overworld""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Overworld Palette" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class UWPalette(Palette): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """The type of palette shuffle to use for the underworld (caves, dungeons, etc.)""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Underworld Palette" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HUDPalette(Palette): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """The type of palette shuffle to use for the HUD""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Menu Palette" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SwordPalette(Palette): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """The type of palette shuffle to use for the sword""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Sword Palette" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ShieldPalette(Palette): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """The type of palette shuffle to use for the shield""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Shield Palette" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-07 11:16:32 -07:00
										 |  |  | # class LinkPalette(Palette): | 
					
						
							|  |  |  | #     display_name = "Link Palette" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HeartBeep(Choice): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """How quickly the heart beep sound effect will play""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Heart Beep Rate" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  |     option_normal = 0 | 
					
						
							|  |  |  |     option_double = 1 | 
					
						
							| 
									
										
										
										
											2021-08-29 15:43:16 +02:00
										 |  |  |     option_half = 2 | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  |     option_quarter = 3 | 
					
						
							|  |  |  |     option_off = 4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HeartColor(Choice): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """The color of hearts in the HUD""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Heart Color" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  |     option_red = 0 | 
					
						
							|  |  |  |     option_blue = 1 | 
					
						
							|  |  |  |     option_green = 2 | 
					
						
							|  |  |  |     option_yellow = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-15 02:32:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | class QuickSwap(DefaultOnToggle): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """Allows you to quickly swap items while playing with L/R""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "L/R Quickswapping" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MenuSpeed(Choice): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """How quickly the menu appears/disappears""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Menu Speed" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  |     option_normal = 0 | 
					
						
							|  |  |  |     option_instant = 1, | 
					
						
							|  |  |  |     option_double = 2 | 
					
						
							|  |  |  |     option_triple = 3 | 
					
						
							|  |  |  |     option_quadruple = 4 | 
					
						
							|  |  |  |     option_half = 5 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Music(DefaultOnToggle): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """Whether background music will play in game""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Play music" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-15 02:32:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | class ReduceFlashing(DefaultOnToggle): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """Reduces flashing for certain scenes such as the Misery Mire and Ganon's Tower opening cutscenes""" | 
					
						
							| 
									
										
										
										
											2022-03-18 18:17:19 +01:00
										 |  |  |     display_name = "Reduce Screen Flashes" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-15 02:32:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | class TriforceHud(Choice): | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     """When and how the triforce hunt HUD should display""" | 
					
						
							| 
									
										
										
										
											2022-03-18 18:17:19 +01:00
										 |  |  |     display_name = "Display Method for Triforce Hunt" | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  |     option_normal = 0 | 
					
						
							|  |  |  |     option_hide_goal = 1 | 
					
						
							|  |  |  |     option_hide_required = 2 | 
					
						
							|  |  |  |     option_hide_both = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-15 02:32:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  | class GlitchBoots(DefaultOnToggle): | 
					
						
							|  |  |  |     """If this is enabled, the player will start with Pegasus Boots when playing with overworld glitches or harder logic.""" | 
					
						
							|  |  |  |     display_name = "Glitched Starting Boots" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-03 05:34:11 +00:00
										 |  |  | class BeemizerRange(Range): | 
					
						
							|  |  |  |     value: int | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 100 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BeemizerTotalChance(BeemizerRange): | 
					
						
							|  |  |  |     """Percentage chance for each junk-fill item (rupees, bombs, arrows) to be
 | 
					
						
							|  |  |  |     replaced with either a bee swarm trap or a single bottle-filling bee."""
 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							| 
									
										
										
										
											2022-03-18 18:17:19 +01:00
										 |  |  |     display_name = "Beemizer Total Chance" | 
					
						
							| 
									
										
										
										
											2021-11-03 05:34:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BeemizerTrapChance(BeemizerRange): | 
					
						
							|  |  |  |     """Percentage chance for each replaced junk-fill item to be a bee swarm
 | 
					
						
							|  |  |  |     trap; all other replaced items are single bottle-filling bees."""
 | 
					
						
							|  |  |  |     default = 60 | 
					
						
							| 
									
										
										
										
											2022-03-18 18:17:19 +01:00
										 |  |  |     display_name = "Beemizer Trap Chance" | 
					
						
							| 
									
										
										
										
											2021-11-03 05:34:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-04 18:54:49 -07:00
										 |  |  | class AllowCollect(Toggle): | 
					
						
							|  |  |  |     """Allows for !collect / co-op to auto-open chests containing items for other players.
 | 
					
						
							|  |  |  |     Off by default, because it currently crashes on real hardware."""
 | 
					
						
							|  |  |  |     display_name = "Allow Collection of checks for other players" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-04 16:18:21 +02:00
										 |  |  | alttp_options: typing.Dict[str, type(Option)] = { | 
					
						
							|  |  |  |     "crystals_needed_for_gt": CrystalsTower, | 
					
						
							|  |  |  |     "crystals_needed_for_ganon": CrystalsGanon, | 
					
						
							| 
									
										
										
										
											2022-07-14 02:39:53 -05:00
										 |  |  |     "open_pyramid": OpenPyramid, | 
					
						
							| 
									
										
										
										
											2021-08-30 18:00:39 +02:00
										 |  |  |     "bigkey_shuffle": bigkey_shuffle, | 
					
						
							|  |  |  |     "smallkey_shuffle": smallkey_shuffle, | 
					
						
							| 
									
										
										
										
											2023-09-26 23:24:10 -04:00
										 |  |  |     "key_drop_shuffle": key_drop_shuffle, | 
					
						
							| 
									
										
										
										
											2021-08-30 18:00:39 +02:00
										 |  |  |     "compass_shuffle": compass_shuffle, | 
					
						
							|  |  |  |     "map_shuffle": map_shuffle, | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  |     "progressive": Progressive, | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  |     "swordless": Swordless, | 
					
						
							| 
									
										
										
										
											2022-06-01 17:29:21 +02:00
										 |  |  |     "retro_bow": RetroBow, | 
					
						
							|  |  |  |     "retro_caves": RetroCaves, | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  |     "hints": Hints, | 
					
						
							| 
									
										
										
										
											2022-05-28 20:08:06 +02:00
										 |  |  |     "scams": Scams, | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  |     "restrict_dungeon_item_on_boss": RestrictBossItem, | 
					
						
							| 
									
										
										
										
											2022-10-12 13:28:32 -05:00
										 |  |  |     "boss_shuffle": LTTPBosses, | 
					
						
							| 
									
										
										
										
											2021-09-13 01:32:32 +02:00
										 |  |  |     "pot_shuffle": PotShuffle, | 
					
						
							|  |  |  |     "enemy_shuffle": EnemyShuffle, | 
					
						
							|  |  |  |     "killable_thieves": KillableThieves, | 
					
						
							|  |  |  |     "bush_shuffle": BushShuffle, | 
					
						
							| 
									
										
										
										
											2021-07-04 16:18:21 +02:00
										 |  |  |     "shop_item_slots": ShopItemSlots, | 
					
						
							| 
									
										
										
										
											2022-01-02 21:07:43 -05:00
										 |  |  |     "shop_price_modifier": ShopPriceModifier, | 
					
						
							| 
									
										
										
										
											2021-09-13 02:01:15 +02:00
										 |  |  |     "tile_shuffle": TileShuffle, | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  |     "ow_palettes": OWPalette, | 
					
						
							|  |  |  |     "uw_palettes": UWPalette, | 
					
						
							|  |  |  |     "hud_palettes": HUDPalette, | 
					
						
							|  |  |  |     "sword_palettes": SwordPalette, | 
					
						
							|  |  |  |     "shield_palettes": ShieldPalette, | 
					
						
							| 
									
										
										
										
											2022-09-07 11:16:32 -07:00
										 |  |  |     # "link_palettes": LinkPalette, | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  |     "heartbeep": HeartBeep, | 
					
						
							|  |  |  |     "heartcolor": HeartColor, | 
					
						
							|  |  |  |     "quickswap": QuickSwap, | 
					
						
							|  |  |  |     "menuspeed": MenuSpeed, | 
					
						
							|  |  |  |     "music": Music, | 
					
						
							|  |  |  |     "reduceflashing": ReduceFlashing, | 
					
						
							| 
									
										
										
										
											2021-08-30 16:31:56 +02:00
										 |  |  |     "triforcehud": TriforceHud, | 
					
						
							| 
									
										
										
										
											2023-03-10 00:59:47 -06:00
										 |  |  |     "glitch_boots": GlitchBoots, | 
					
						
							| 
									
										
										
										
											2021-11-03 05:34:11 +00:00
										 |  |  |     "beemizer_total_chance": BeemizerTotalChance, | 
					
						
							|  |  |  |     "beemizer_trap_chance": BeemizerTrapChance, | 
					
						
							| 
									
										
										
										
											2022-04-04 18:54:49 -07:00
										 |  |  |     "death_link": DeathLink, | 
					
						
							| 
									
										
										
										
											2023-04-10 21:13:33 +02:00
										 |  |  |     "allow_collect": AllowCollect, | 
					
						
							|  |  |  |     "start_inventory_from_pool": StartInventoryPool, | 
					
						
							| 
									
										
										
										
											2021-08-09 09:15:41 +02:00
										 |  |  | } |