| 
									
										
										
										
											2025-03-22 19:42:17 -04:00
										 |  |  | from dataclasses import dataclass | 
					
						
							| 
									
										
										
										
											2025-04-27 03:43:24 -04:00
										 |  |  | from typing import Any | 
					
						
							| 
									
										
										
										
											2025-03-22 19:42:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | from Options import ( | 
					
						
							|  |  |  |     Choice, | 
					
						
							|  |  |  |     DeathLink, | 
					
						
							|  |  |  |     DefaultOnToggle, | 
					
						
							|  |  |  |     OptionGroup, | 
					
						
							|  |  |  |     OptionSet, | 
					
						
							|  |  |  |     PerGameCommonOptions, | 
					
						
							|  |  |  |     Range, | 
					
						
							|  |  |  |     StartInventoryPool, | 
					
						
							|  |  |  |     Toggle, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .Locations import DUNGEON_NAMES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Dungeons(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether dungeon locations are randomized. | 
					
						
							| 
									
										
										
										
											2025-05-03 20:06:16 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     This means the items found in dungeons will be randomized, not that the entrances to dungeons will be randomized. | 
					
						
							| 
									
										
										
										
											2025-03-22 19:42:17 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Dungeons" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TingleChests(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Tingle Chests are hidden in dungeons and must be bombed to make them appear. (2 in DRC, 1 each in FW, TotG, ET, and | 
					
						
							|  |  |  |     WT). This controls whether they are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Tingle Chests" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DungeonSecrets(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     DRC, FW, TotG, ET, and WT each contain 2-3 secret items (11 in total). This controls whether these are randomized. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The items are relatively well-hidden (they aren't in chests), so don't select this option unless you're prepared to | 
					
						
							|  |  |  |     search each dungeon high and low! | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Dungeon Secrets" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PuzzleSecretCaves(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether the rewards from puzzle-focused secret caves are randomized locations. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Puzzle Secret Caves" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CombatSecretCaves(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether the rewards from combat-focused secret caves (besides Savage Labyrinth) are randomized | 
					
						
							|  |  |  |     locations. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Combat Secret Caves" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SavageLabyrinth(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether the two locations in Savage Labyrinth are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Savage Labyrinth" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class GreatFairies(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether the items given by Great Fairies are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Great Fairies" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ShortSidequests(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether sidequests that can be completed quickly are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Short Sidequests" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LongSidequests(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether long sidequests (e.g., Lenzo's assistant, withered trees, goron trading) are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Long Sidequests" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SpoilsTrading(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether the items you get by trading in spoils to NPCs are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Spoils Trading" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Minigames(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether most minigames are randomized (auctions, mail sorting, barrel shooting, bird-man contest). | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Minigames" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Battlesquid(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether the Windfall battleship minigame is randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Battlesquid Minigame" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FreeGifts(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether gifts freely given by NPCs are randomized (Tott, Salvage Corp, imprisoned Tingle). | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Free Gifts" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Mail(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether items received from the mail are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Mail" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PlatformsRafts(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether lookout platforms and rafts are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Lookout Platforms and Rafts" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Submarines(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether submarines are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Submarines" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class EyeReefChests(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether the chests that appear after clearing out the eye reefs are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Eye Reef Chests" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BigOctosGunboats(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether the items dropped by Big Octos and Gunboats are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Big Octos and Gunboats" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TriforceCharts(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether the sunken treasure chests marked on Triforce Charts are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Sunken Treasure (From Triforce Charts)" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TreasureCharts(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether the sunken treasure chests marked on Treasure Charts are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Sunken Treasure (From Treasure Charts)" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ExpensivePurchases(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether items that cost many Rupees are randomized (Rock Spire shop, auctions, Tingle's letter, | 
					
						
							|  |  |  |     trading quest). | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Expensive Purchases" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class IslandPuzzles(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This controls whether various island puzzles are randomized (e.g., chests hidden in unusual places). | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Island Puzzles" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Misc(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Miscellaneous locations that don't fit into any of the above categories (outdoors chests, wind shrine, Cyclos, etc). | 
					
						
							|  |  |  |     This controls whether these are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Miscellaneous" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DungeonItem(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This is the base class for the shuffle options for dungeon items. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     value: int | 
					
						
							|  |  |  |     option_startwith = 0 | 
					
						
							|  |  |  |     option_vanilla = 1 | 
					
						
							|  |  |  |     option_dungeon = 2 | 
					
						
							|  |  |  |     option_any_dungeon = 3 | 
					
						
							|  |  |  |     option_local = 4 | 
					
						
							|  |  |  |     option_keylunacy = 5 | 
					
						
							|  |  |  |     default = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @property | 
					
						
							|  |  |  |     def in_dungeon(self) -> bool: | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Return whether the item should be shuffled into a dungeon. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :return: Whether the item is shuffled into a dungeon. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         return self.value in (2, 3) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomizeMapCompass(DungeonItem): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Controls how dungeon maps and compasses are randomized. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     - **Start With Maps & Compasses:** You will start the game with the dungeon maps and compasses for all dungeons. | 
					
						
							|  |  |  |     - **Vanilla Maps & Compasses:** Dungeon maps and compasses will be kept in their vanilla location (non-randomized). | 
					
						
							|  |  |  |     - **Own Dungeon Maps & Compasses:** Dungeon maps and compasses will be randomized locally within their own dungeon. | 
					
						
							|  |  |  |     - **Any Dungeon Maps & Compasses:** Dungeon maps and compasses will be randomized locally within any dungeon. | 
					
						
							|  |  |  |     - **Local Maps & Compasses:** Dungeon maps and compasses will be randomized locally anywhere. | 
					
						
							|  |  |  |     - **Key-Lunacy:** Dungeon maps and compasses can be found anywhere, without restriction. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     item_name_group = "Dungeon Items" | 
					
						
							|  |  |  |     display_name = "Randomize Maps & Compasses" | 
					
						
							|  |  |  |     default = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomizeSmallKeys(DungeonItem): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Controls how small keys are randomized. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     - **Start With Small Keys:** You will start the game with the small keys for all dungeons. | 
					
						
							|  |  |  |     - **Vanilla Small Keys:** Small keys will be kept in their vanilla location (non-randomized). | 
					
						
							|  |  |  |     - **Own Dungeon Small Keys:** Small keys will be randomized locally within their own dungeon. | 
					
						
							|  |  |  |     - **Any Dungeon Small Keys:** Small keys will be randomized locally within any dungeon. | 
					
						
							|  |  |  |     - **Local Small Keys:** Small keys will be randomized locally anywhere. | 
					
						
							|  |  |  |     - **Key-Lunacy:** Small keys can be found in any progression location, if dungeons are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     item_name_group = "Small Keys" | 
					
						
							|  |  |  |     display_name = "Randomize Small Keys" | 
					
						
							|  |  |  |     default = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomizeBigKeys(DungeonItem): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Controls how big keys are randomized. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     - **Start With Big Keys:** You will start the game with the big keys for all dungeons. | 
					
						
							|  |  |  |     - **Vanilla Big Keys:** Big keys will be kept in their vanilla location (non-randomized). | 
					
						
							|  |  |  |     - **Own Dungeon Big Keys:** Big keys will be randomized locally within their own dungeon. | 
					
						
							|  |  |  |     - **Any Dungeon Big Keys:** Big keys will be randomized locally within any dungeon. | 
					
						
							|  |  |  |     - **Local Big Keys:** Big keys will be randomized locally anywhere. | 
					
						
							|  |  |  |     - **Key-Lunacy:** Big keys can be found in any progression location, if dungeons are randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     item_name_group = "Big Keys" | 
					
						
							|  |  |  |     display_name = "Randomize Big Keys" | 
					
						
							|  |  |  |     default = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SwordMode(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Controls whether you start with the Hero's Sword, the Hero's Sword is randomized, or if there are no swords in the | 
					
						
							|  |  |  |     entire game. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     - **Start with Hero's Sword:** You will start the game with the basic Hero's Sword already in your inventory. | 
					
						
							|  |  |  |     - **No Starting Sword:** You will start the game with no sword, and have to find it somewhere in the world like | 
					
						
							|  |  |  |       other randomized items. | 
					
						
							|  |  |  |     - **Swords Optional:** You will start the game with no sword, but they'll still be randomized. However, they are not | 
					
						
							|  |  |  |       necessary to beat the game. The Hyrule Barrier will be gone, Phantom Ganon in FF is vulnerable to Skull Hammer, | 
					
						
							|  |  |  |       and the logic does not expect you to have a sword. | 
					
						
							|  |  |  |     - **Swordless:** You will start the game with no sword, and won't be able to find it anywhere. You have to beat the | 
					
						
							|  |  |  |       entire game using other items as weapons instead of the sword. (Note that Phantom Ganon in FF becomes vulnerable | 
					
						
							|  |  |  |       to Skull Hammer in this mode.) | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Sword Mode" | 
					
						
							|  |  |  |     option_start_with_sword = 0 | 
					
						
							|  |  |  |     option_no_starting_sword = 1 | 
					
						
							|  |  |  |     option_swords_optional = 2 | 
					
						
							|  |  |  |     option_swordless = 3 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RequiredBosses(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     In this mode, you will not be allowed to beat the game until certain randomly-chosen bosses are defeated. Nothing in | 
					
						
							|  |  |  |     dungeons for other bosses will ever be required. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     You can see which islands have the required bosses on them by opening the sea chart and checking which islands have | 
					
						
							|  |  |  |     blue quest markers. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Required Bosses Mode" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NumRequiredBosses(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Select the number of randomly-chosen bosses that are required in Required Bosses Mode. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The door to Puppet Ganon will not unlock until you've defeated all of these bosses. Nothing in dungeons for other | 
					
						
							|  |  |  |     bosses will ever be required. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Number of Required Bosses" | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 6 | 
					
						
							|  |  |  |     default = 4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class IncludedDungeons(OptionSet): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     A list of dungeons that should always be included when required bosses mode is on. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Included Dungeons" | 
					
						
							|  |  |  |     valid_keys = frozenset(DUNGEON_NAMES) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ExcludedDungeons(OptionSet): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     A list of dungeons that should always be excluded when required bosses mode is on. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Excluded Dungeons" | 
					
						
							|  |  |  |     valid_keys = frozenset(DUNGEON_NAMES) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ChestTypeMatchesContents(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Changes the chest type to reflect its contents. A metal chest has a progress item, a wooden chest has a non-progress | 
					
						
							|  |  |  |     item or a consumable, and a green chest has a potentially required dungeon key. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Chest Type Matches Contents" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TrapChests(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     **DEV NOTE:** This option is currently unimplemented and will be ignored. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Allows the randomizer to place several trapped chests across the game that do not give you items. Perfect for | 
					
						
							|  |  |  |     spicing up any run! | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Enable Trap Chests" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HeroMode(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     In Hero Mode, you take four times more damage than normal and heart refills will not drop. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Hero Mode" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LogicObscurity(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Obscure tricks are ways of obtaining items that are not obvious and may involve thinking outside the box. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     This option controls the maximum difficulty of obscure tricks the randomizer will require you to do to beat the | 
					
						
							|  |  |  |     game. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Obscure Tricks Required" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_normal = 1 | 
					
						
							|  |  |  |     option_hard = 2 | 
					
						
							|  |  |  |     option_very_hard = 3 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LogicPrecision(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Precise tricks are ways of obtaining items that involve difficult inputs such as accurate aiming or perfect timing. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     This option controls the maximum difficulty of precise tricks the randomizer will require you to do to beat the | 
					
						
							|  |  |  |     game. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Precise Tricks Required" | 
					
						
							|  |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_normal = 1 | 
					
						
							|  |  |  |     option_hard = 2 | 
					
						
							|  |  |  |     option_very_hard = 3 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class EnableTunerLogic(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     If enabled, the randomizer can logically expect the Tingle Tuner for Tingle Chests. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The randomizer behavior of logically expecting Bombs/bomb flowers to spawn in Tingle Chests remains unchanged. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Enable Tuner Logic" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomizeDungeonEntrances(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Shuffles around which dungeon entrances take you into which dungeons. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     (No effect on Forsaken Fortress or Ganon's Tower.) | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Randomize Dungeons" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomizeSecretCavesEntrances(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Shuffles around which secret cave entrances take you into which secret caves. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Randomize Secret Caves" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomizeMinibossEntrances(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Allows dungeon miniboss doors to act as entrances to be randomized. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     If on with random dungeon entrances, dungeons may nest within each other, forming chains of connected dungeons. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Randomize Nested Minibosses" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomizeBossEntrances(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Allows dungeon boss doors to act as entrances to be randomized. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     If on with random dungeon entrances, dungeons may nest within each other, forming chains of connected dungeons. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Randomize Nested Bosses" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomizeSecretCaveInnerEntrances(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Allows the pit in Ice Ring Isle's secret cave and the rear exit out of Cliff Plateau Isles' secret cave to act as | 
					
						
							|  |  |  |     entrances to be randomized."""
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Randomize Inner Secret Caves" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomizeFairyFountainEntrances(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Allows the pits that lead down into Fairy Fountains to act as entrances to be randomized. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Randomize Fairy Fountains" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MixEntrances(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Controls how the different types (pools) of randomized entrances should be shuffled. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     - **Separate Pools:** Each pool of randomized entrances will shuffle into itself (e.g., dungeons into dungeons). | 
					
						
							|  |  |  |     - **Mix Pools:** All pools of randomized entrances will be combined into one pool to be shuffled. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Mix Entrances" | 
					
						
							|  |  |  |     option_separate_pools = 0 | 
					
						
							|  |  |  |     option_mix_pools = 1 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomizeEnemies(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Randomizes the placement of non-boss enemies. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     This option is an *incomplete* option from the base randomizer and **may result in unbeatable seeds! Use at your own | 
					
						
							|  |  |  |     risk!** | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Randomize Enemies" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # class RandomizeMusic(Toggle): | 
					
						
							|  |  |  | #     """ | 
					
						
							|  |  |  | #     Shuffles around all the music in the game. This affects background music, combat music, fanfares, etc. | 
					
						
							|  |  |  | #     """ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #     display_name = "Randomize Music" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomizeStartingIsland(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Randomizes which island you start the game on. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Randomize Starting Island" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomizeCharts(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Randomizes which sector is drawn on each Triforce/Treasure Chart. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Randomize Charts" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HoHoHints(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     **DEV NOTE:** This option is currently unimplemented and will be ignored. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Places hints on Old Man Ho Ho. Old Man Ho Ho appears at 10 different islands in the game. Talk to Old Man Ho Ho to | 
					
						
							|  |  |  |     get hints. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Place Hints on Old Man Ho Ho" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FishmenHints(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     **DEV NOTE:** This option is currently unimplemented and will be ignored. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Places hints on the fishmen. There is one fishman at each of the 49 islands of the Great Sea. Each fishman must be | 
					
						
							|  |  |  |     fed an All-Purpose Bait before he will give a hint. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Place Hints on Fishmen" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KoRLHints(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     **DEV NOTE:** This option is currently unimplemented and will be ignored. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Places hints on the King of Red Lions. Talk to the King of Red Lions to get hints. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Place Hints on King of Red Lions" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NumItemHints(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     **DEV NOTE:** This option is currently unimplemented and will be ignored. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The number of item hints that will be placed. Item hints tell you which area contains a particular progress item in | 
					
						
							|  |  |  |     this seed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     If multiple hint placement options are selected, the hint count will be split evenly among the placement options. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Item Hints" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 15 | 
					
						
							|  |  |  |     default = 15 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NumLocationHints(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     **DEV NOTE:** This option is currently unimplemented and will be ignored. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The number of location hints that will be placed. Location hints tell you what item is at a specific location in | 
					
						
							|  |  |  |     this seed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     If multiple hint placement options are selected, the hint count will be split evenly among the placement options. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Location Hints" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 15 | 
					
						
							|  |  |  |     default = 5 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NumBarrenHints(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     **DEV NOTE:** This option is currently unimplemented and will be ignored. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The number of barren hints that will be placed. Barren hints tell you that an area does not contain any required | 
					
						
							|  |  |  |     items in this seed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     If multiple hint placement options are selected, the hint count will be split evenly among the placement options. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Barren Hints" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 15 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NumPathHints(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     **DEV NOTE:** This option is currently unimplemented and will be ignored. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The number of path hints that will be placed. Path hints tell you that an area contains an item that is required to | 
					
						
							|  |  |  |     reach a particular goal in this seed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     If multiple hint placement options are selected, the hint count will be split evenly among the placement options. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Path Hints" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 15 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PrioritizeRemoteHints(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     **DEV NOTE:** This option is currently unimplemented and will be ignored. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     When this option is selected, certain locations that are out of the way and time-consuming to complete will take | 
					
						
							|  |  |  |     precedence over normal location hints."""
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Prioritize Remote Location Hints" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SwiftSail(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Sailing speed is doubled and the direction of the wind is always at your back as long as the sail is out. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Swift Sail" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class InstantTextBoxes(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Text appears instantly. Also, the B button is changed to instantly skip through text as long as you hold it down. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Instant Text Boxes" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RevealFullSeaChart(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Start the game with the sea chart fully drawn out. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Reveal Full Sea Chart" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AddShortcutWarpsBetweenDungeons(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Adds new warp pots that act as shortcuts connecting dungeons to each other directly. (DRC, FW, TotG, and separately | 
					
						
							|  |  |  |     FF, ET, WT.) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Each pot must be unlocked before it can be used, so you cannot use them to access dungeons | 
					
						
							|  |  |  |     you wouldn't already have access to. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Add Shortcut Warps Between Dungeons" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SkipRematchBosses(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Removes the door in Ganon's Tower that only unlocks when you defeat the rematch versions of Gohma, Kalle Demos, | 
					
						
							|  |  |  |     Jalhalla, and Molgera. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Skip Boss Rematches" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RemoveMusic(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Mutes all ingame music. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     display_name = "Remove Music" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @dataclass | 
					
						
							|  |  |  | class TWWOptions(PerGameCommonOptions): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     A data class that encapsulates all configuration options for The Wind Waker. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     start_inventory_from_pool: StartInventoryPool | 
					
						
							|  |  |  |     progression_dungeons: Dungeons | 
					
						
							|  |  |  |     progression_tingle_chests: TingleChests | 
					
						
							|  |  |  |     progression_dungeon_secrets: DungeonSecrets | 
					
						
							|  |  |  |     progression_puzzle_secret_caves: PuzzleSecretCaves | 
					
						
							|  |  |  |     progression_combat_secret_caves: CombatSecretCaves | 
					
						
							|  |  |  |     progression_savage_labyrinth: SavageLabyrinth | 
					
						
							|  |  |  |     progression_great_fairies: GreatFairies | 
					
						
							|  |  |  |     progression_short_sidequests: ShortSidequests | 
					
						
							|  |  |  |     progression_long_sidequests: LongSidequests | 
					
						
							|  |  |  |     progression_spoils_trading: SpoilsTrading | 
					
						
							|  |  |  |     progression_minigames: Minigames | 
					
						
							|  |  |  |     progression_battlesquid: Battlesquid | 
					
						
							|  |  |  |     progression_free_gifts: FreeGifts | 
					
						
							|  |  |  |     progression_mail: Mail | 
					
						
							|  |  |  |     progression_platforms_rafts: PlatformsRafts | 
					
						
							|  |  |  |     progression_submarines: Submarines | 
					
						
							|  |  |  |     progression_eye_reef_chests: EyeReefChests | 
					
						
							|  |  |  |     progression_big_octos_gunboats: BigOctosGunboats | 
					
						
							|  |  |  |     progression_triforce_charts: TriforceCharts | 
					
						
							|  |  |  |     progression_treasure_charts: TreasureCharts | 
					
						
							|  |  |  |     progression_expensive_purchases: ExpensivePurchases | 
					
						
							|  |  |  |     progression_island_puzzles: IslandPuzzles | 
					
						
							|  |  |  |     progression_misc: Misc | 
					
						
							|  |  |  |     randomize_mapcompass: RandomizeMapCompass | 
					
						
							|  |  |  |     randomize_smallkeys: RandomizeSmallKeys | 
					
						
							|  |  |  |     randomize_bigkeys: RandomizeBigKeys | 
					
						
							|  |  |  |     sword_mode: SwordMode | 
					
						
							|  |  |  |     required_bosses: RequiredBosses | 
					
						
							|  |  |  |     num_required_bosses: NumRequiredBosses | 
					
						
							|  |  |  |     included_dungeons: IncludedDungeons | 
					
						
							|  |  |  |     excluded_dungeons: ExcludedDungeons | 
					
						
							|  |  |  |     chest_type_matches_contents: ChestTypeMatchesContents | 
					
						
							|  |  |  |     # trap_chests: TrapChests | 
					
						
							|  |  |  |     hero_mode: HeroMode | 
					
						
							|  |  |  |     logic_obscurity: LogicObscurity | 
					
						
							|  |  |  |     logic_precision: LogicPrecision | 
					
						
							|  |  |  |     enable_tuner_logic: EnableTunerLogic | 
					
						
							|  |  |  |     randomize_dungeon_entrances: RandomizeDungeonEntrances | 
					
						
							|  |  |  |     randomize_secret_cave_entrances: RandomizeSecretCavesEntrances | 
					
						
							|  |  |  |     randomize_miniboss_entrances: RandomizeMinibossEntrances | 
					
						
							|  |  |  |     randomize_boss_entrances: RandomizeBossEntrances | 
					
						
							|  |  |  |     randomize_secret_cave_inner_entrances: RandomizeSecretCaveInnerEntrances | 
					
						
							|  |  |  |     randomize_fairy_fountain_entrances: RandomizeFairyFountainEntrances | 
					
						
							|  |  |  |     mix_entrances: MixEntrances | 
					
						
							|  |  |  |     randomize_enemies: RandomizeEnemies | 
					
						
							|  |  |  |     # randomize_music: RandomizeMusic | 
					
						
							|  |  |  |     randomize_starting_island: RandomizeStartingIsland | 
					
						
							|  |  |  |     randomize_charts: RandomizeCharts | 
					
						
							|  |  |  |     # hoho_hints: HoHoHints | 
					
						
							|  |  |  |     # fishmen_hints: FishmenHints | 
					
						
							|  |  |  |     # korl_hints: KoRLHints | 
					
						
							|  |  |  |     # num_item_hints: NumItemHints | 
					
						
							|  |  |  |     # num_location_hints: NumLocationHints | 
					
						
							|  |  |  |     # num_barren_hints: NumBarrenHints | 
					
						
							|  |  |  |     # num_path_hints: NumPathHints | 
					
						
							|  |  |  |     # prioritize_remote_hints: PrioritizeRemoteHints | 
					
						
							|  |  |  |     swift_sail: SwiftSail | 
					
						
							|  |  |  |     instant_text_boxes: InstantTextBoxes | 
					
						
							|  |  |  |     reveal_full_sea_chart: RevealFullSeaChart | 
					
						
							|  |  |  |     add_shortcut_warps_between_dungeons: AddShortcutWarpsBetweenDungeons | 
					
						
							|  |  |  |     skip_rematch_bosses: SkipRematchBosses | 
					
						
							|  |  |  |     remove_music: RemoveMusic | 
					
						
							|  |  |  |     death_link: DeathLink | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-27 03:43:24 -04:00
										 |  |  |     def get_output_dict(self) -> dict[str, Any]: | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Returns a dictionary of option name to value to be placed in | 
					
						
							|  |  |  |         the output APTWW file. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :return: Dictionary of option name to value for the output file. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Note: these options' values must be able to be passed through | 
					
						
							|  |  |  |         # `yaml.safe_dump`. | 
					
						
							|  |  |  |         return self.as_dict( | 
					
						
							|  |  |  |             "progression_dungeons", | 
					
						
							|  |  |  |             "progression_tingle_chests", | 
					
						
							|  |  |  |             "progression_dungeon_secrets", | 
					
						
							|  |  |  |             "progression_puzzle_secret_caves", | 
					
						
							|  |  |  |             "progression_combat_secret_caves", | 
					
						
							|  |  |  |             "progression_savage_labyrinth", | 
					
						
							|  |  |  |             "progression_great_fairies", | 
					
						
							|  |  |  |             "progression_short_sidequests", | 
					
						
							|  |  |  |             "progression_long_sidequests", | 
					
						
							|  |  |  |             "progression_spoils_trading", | 
					
						
							|  |  |  |             "progression_minigames", | 
					
						
							|  |  |  |             "progression_battlesquid", | 
					
						
							|  |  |  |             "progression_free_gifts", | 
					
						
							|  |  |  |             "progression_mail", | 
					
						
							|  |  |  |             "progression_platforms_rafts", | 
					
						
							|  |  |  |             "progression_submarines", | 
					
						
							|  |  |  |             "progression_eye_reef_chests", | 
					
						
							|  |  |  |             "progression_big_octos_gunboats", | 
					
						
							|  |  |  |             "progression_triforce_charts", | 
					
						
							|  |  |  |             "progression_treasure_charts", | 
					
						
							|  |  |  |             "progression_expensive_purchases", | 
					
						
							|  |  |  |             "progression_island_puzzles", | 
					
						
							|  |  |  |             "progression_misc", | 
					
						
							|  |  |  |             "randomize_mapcompass", | 
					
						
							|  |  |  |             "randomize_smallkeys", | 
					
						
							|  |  |  |             "randomize_bigkeys", | 
					
						
							|  |  |  |             "sword_mode", | 
					
						
							|  |  |  |             "required_bosses", | 
					
						
							|  |  |  |             "num_required_bosses", | 
					
						
							|  |  |  |             "chest_type_matches_contents", | 
					
						
							|  |  |  |             "hero_mode", | 
					
						
							|  |  |  |             "logic_obscurity", | 
					
						
							|  |  |  |             "logic_precision", | 
					
						
							|  |  |  |             "randomize_dungeon_entrances", | 
					
						
							|  |  |  |             "randomize_secret_cave_entrances", | 
					
						
							|  |  |  |             "randomize_miniboss_entrances", | 
					
						
							|  |  |  |             "randomize_boss_entrances", | 
					
						
							|  |  |  |             "randomize_secret_cave_inner_entrances", | 
					
						
							|  |  |  |             "randomize_fairy_fountain_entrances", | 
					
						
							|  |  |  |             "mix_entrances", | 
					
						
							|  |  |  |             "randomize_enemies", | 
					
						
							|  |  |  |             "randomize_starting_island", | 
					
						
							|  |  |  |             "randomize_charts", | 
					
						
							|  |  |  |             "swift_sail", | 
					
						
							|  |  |  |             "instant_text_boxes", | 
					
						
							|  |  |  |             "reveal_full_sea_chart", | 
					
						
							|  |  |  |             "add_shortcut_warps_between_dungeons", | 
					
						
							|  |  |  |             "skip_rematch_bosses", | 
					
						
							|  |  |  |             "remove_music", | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-22 19:42:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | tww_option_groups: list[OptionGroup] = [ | 
					
						
							|  |  |  |     OptionGroup( | 
					
						
							|  |  |  |         "Progression Locations", | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             Dungeons, | 
					
						
							|  |  |  |             DungeonSecrets, | 
					
						
							|  |  |  |             TingleChests, | 
					
						
							|  |  |  |             PuzzleSecretCaves, | 
					
						
							|  |  |  |             CombatSecretCaves, | 
					
						
							|  |  |  |             SavageLabyrinth, | 
					
						
							|  |  |  |             IslandPuzzles, | 
					
						
							|  |  |  |             GreatFairies, | 
					
						
							|  |  |  |             Submarines, | 
					
						
							|  |  |  |             PlatformsRafts, | 
					
						
							|  |  |  |             ShortSidequests, | 
					
						
							|  |  |  |             LongSidequests, | 
					
						
							|  |  |  |             SpoilsTrading, | 
					
						
							|  |  |  |             EyeReefChests, | 
					
						
							|  |  |  |             BigOctosGunboats, | 
					
						
							|  |  |  |             Misc, | 
					
						
							|  |  |  |             Minigames, | 
					
						
							|  |  |  |             Battlesquid, | 
					
						
							|  |  |  |             FreeGifts, | 
					
						
							|  |  |  |             Mail, | 
					
						
							|  |  |  |             ExpensivePurchases, | 
					
						
							|  |  |  |             TriforceCharts, | 
					
						
							|  |  |  |             TreasureCharts, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     OptionGroup( | 
					
						
							|  |  |  |         "Item Randomizer Modes", | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             SwordMode, | 
					
						
							|  |  |  |             RandomizeMapCompass, | 
					
						
							|  |  |  |             RandomizeSmallKeys, | 
					
						
							|  |  |  |             RandomizeBigKeys, | 
					
						
							|  |  |  |             ChestTypeMatchesContents, | 
					
						
							|  |  |  |             # TrapChests, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     OptionGroup( | 
					
						
							|  |  |  |         "Entrance Randomizer Options", | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             RandomizeDungeonEntrances, | 
					
						
							|  |  |  |             RandomizeBossEntrances, | 
					
						
							|  |  |  |             RandomizeMinibossEntrances, | 
					
						
							|  |  |  |             RandomizeSecretCavesEntrances, | 
					
						
							|  |  |  |             RandomizeSecretCaveInnerEntrances, | 
					
						
							|  |  |  |             RandomizeFairyFountainEntrances, | 
					
						
							|  |  |  |             MixEntrances, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     OptionGroup( | 
					
						
							|  |  |  |         "Other Randomizers", | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             RandomizeStartingIsland, | 
					
						
							|  |  |  |             RandomizeCharts, | 
					
						
							|  |  |  |             # RandomizeMusic, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     OptionGroup( | 
					
						
							|  |  |  |         "Convenience Tweaks", | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             SwiftSail, | 
					
						
							|  |  |  |             InstantTextBoxes, | 
					
						
							|  |  |  |             RevealFullSeaChart, | 
					
						
							|  |  |  |             SkipRematchBosses, | 
					
						
							|  |  |  |             AddShortcutWarpsBetweenDungeons, | 
					
						
							|  |  |  |             RemoveMusic, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     OptionGroup( | 
					
						
							|  |  |  |         "Required Bosses", | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             RequiredBosses, | 
					
						
							|  |  |  |             NumRequiredBosses, | 
					
						
							|  |  |  |             IncludedDungeons, | 
					
						
							|  |  |  |             ExcludedDungeons, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         start_collapsed=True, | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     OptionGroup( | 
					
						
							|  |  |  |         "Difficulty Options", | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             HeroMode, | 
					
						
							|  |  |  |             LogicObscurity, | 
					
						
							|  |  |  |             LogicPrecision, | 
					
						
							|  |  |  |             EnableTunerLogic, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         start_collapsed=True, | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     OptionGroup( | 
					
						
							|  |  |  |         "Work-in-Progress Options", | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             RandomizeEnemies, | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         start_collapsed=True, | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  | ] |