mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
The Wind Waker: Implement New Game (#4458)
Adds The Legend of Zelda: The Wind Waker as a supported game in Archipelago. The game uses [LagoLunatic's randomizer](https://github.com/LagoLunatic/wwrando) as its base (regarding logic, options, etc.) and builds from there.
This commit is contained in:
854
worlds/tww/Options.py
Normal file
854
worlds/tww/Options.py
Normal file
@@ -0,0 +1,854 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
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.
|
||||
"""
|
||||
|
||||
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
|
||||
|
||||
|
||||
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,
|
||||
),
|
||||
]
|
Reference in New Issue
Block a user