forked from tanjo3/tww_apworld
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Options.py
803 lines (556 loc) · 25.9 KB
/
Options.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
from dataclasses import dataclass
from typing import List
from Options import (
Choice,
DeathLink,
DefaultOnToggle,
OptionGroup,
OptionSet,
PerGameCommonOptions,
Range,
StartInventoryPool,
Toggle,
)
from .Locations import DUNGEON_NAMES
class Dungeons(DefaultOnToggle):
"""This controls whether dungeons can contain progress items.
If off, dungeons will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Dungeons"
class TingleChests(Toggle):
"""Tingle Chests that are hidden in dungeons and must be bombed to make them appear. (2 in DRC, 1 each in FW, TotG,
ET, and WT).
If off, they will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Tingle Chests"
class DungeonSecrets(Toggle):
"""DRC, FW, TotG, ET, and WT each have 2-3 secret items within them (11 in total). This controls whether they can be
progress items.
The items are fairly well-hidden (they aren't in chests), so don't select this option unless you're
prepared to search each dungeon high and low!
For a list of the dungeon secrets, refer to this Google doc:
https://docs.google.com/document/d/1LrjGr6W9970XEA-pzl8OhwnqMqTbQaxCX--M-kdsLos/edit
"""
display_name = "Dungeon Secrets"
class PuzzleSecretCaves(DefaultOnToggle):
"""This controls whether puzzle-focused secret caves can contain progress items.
If off, they will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Puzzle Secret Caves"
class CombatSecretCaves(Toggle):
"""This controls whether combat-focused secret caves (besides Savage Labyrinth) can contain progress items.
If off, they will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Combat Secret Caves"
class SavageLabyrinth(Toggle):
"""This controls whether the Savage Labyrinth can contain progress items.
If off, it will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Savage Labyrinth"
class GreatFairies(DefaultOnToggle):
"""This controls whether the items given by Great Fairies can be progress items.
If off, they will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Great Fairies"
class ShortSidequests(Toggle):
"""This controls whether sidequests that can be completed quickly can reward progress items.
If off, they will still be randomized, but will only reward optional items you don't need to beat the game.
"""
display_name = "Short Sidequests"
class LongSidequests(Toggle):
"""This controls whether long sidequests (e.g. Lenzo's assistant, withered trees, goron trading) can reward progress
items.
If off, they will still be randomized, but will only reward optional items you don't need to beat the game.
"""
display_name = "Long Sidequests"
class SpoilsTrading(Toggle):
"""This controls whether the items you get by trading in spoils to NPCs can be progress items.
If off, they will still be randomized</u>, but will only reward optional items you don't need to beat the game.
"""
display_name = "Spoils Trading"
class Minigames(Toggle):
"""This controls whether most minigames can reward progress items (auctions, mail sorting, barrel shooting, bird-man
contest).
If off, minigames will still be randomized, but will only reward optional items you don't need to beat the game.
"""
display_name = "Minigames"
class Battlesquid(Toggle):
"""This controls whether the Windfall battleship minigame can reward progress items.
If off, it will still be randomized, but will only reward optional items you don't need to beat the game.
"""
display_name = "Battlesquid Minigame"
class FreeGifts(DefaultOnToggle):
"""This controls whether gifts freely given by NPCs can be progress items (Tott, Salvage Corp, imprisoned Tingle).
If off, they will still be randomized, but will only be optional items you don't need to beat the game.
"""
display_name = "Free Gifts"
class Mail(Toggle):
"""This controls whether mail can contain progress items.
If off, mail will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Mail"
class PlatformsRafts(Toggle):
"""This controls whether lookout platforms and rafts can contain progress items.
If off, they will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Lookout Platforms and Rafts"
class Submarines(Toggle):
"""This controls whether submarines can contain progress items.
If off, submarines will still be randomized, but will only contain optional items you don't need to beat the
game."""
display_name = "Submarines"
class EyeReefChests(Toggle):
"""This controls whether the chests that appear after clearing out the eye reefs can contain progress items.
If off, they will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Eye Reef Chests"
class BigOctosGunboats(Toggle):
"""This controls whether the items dropped by Big Octos and Gunboats can contain progress items.
If off, they will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Big Octos and Gunboats"
class TriforceCharts(Toggle):
"""This controls whether the sunken treasure chests marked on Triforce Charts can contain progress items.
If off, they will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Sunken Treasure (From Triforce Charts)"
class TreasureCharts(Toggle):
"""This controls whether the sunken treasure chests marked on Treasure Charts can contain progress items.
If off, they will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Sunken Treasure (From Treasure Charts)"
class ExpensivePurchases(DefaultOnToggle):
"""This controls whether items that cost a lot of rupees can be progress items (Rock Spire shop, auctions, Tingle's
letter, trading quest).
If off, they will still be randomized, but will only be optional items you don't need to beat the game.
"""
display_name = "Expensive Purchases"
class IslandPuzzles(Toggle):
"""This controls whether various island puzzles can contain progress items (e.g. chests hidden in unusual places).
If off, they will still be randomized, but will only contain optional items you don't need to beat the game.
"""
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).
If off, they will still be randomized, but will only contain optional items you don't need to beat the game.
"""
display_name = "Miscellaneous"
class DungeonItem(Choice):
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 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 which 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 which 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 with 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):
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,
),
]