LADX: reorganize options page (#4851)

* init

* merge upstream/main

* improve option tooltips, clean up file a bit

* ladx feels like more of an ocean game

* one more

* more cleanup

* some reorg

* Apply suggestions from code review

Co-authored-by: Scipio Wright <scipiowright@gmail.com>

* clean up accidental newlines

* rewording

* dont do the ohko alias

---------

Co-authored-by: Scipio Wright <scipiowright@gmail.com>
This commit is contained in:
threeandthreee
2025-09-30 12:39:53 -04:00
committed by GitHub
parent 448f214cdb
commit 5cec3f45f5
2 changed files with 233 additions and 189 deletions

View File

@@ -23,11 +23,24 @@ class LADXROption:
class Logic(Choice, LADXROption): class Logic(Choice, LADXROption):
""" """
Affects where items are allowed to be placed. Affects where items are allowed to be placed.
[Normal] Playable without using any tricks or glitches. Can require knowledge from a vanilla playthrough, such as how to open Color Dungeon.
[Hard] More advanced techniques may be required, but glitches are not. Examples include tricky jumps, killing enemies with only pots. **Normal:** Playable without using any tricks or glitches. Can require
[Glitched] Advanced glitches and techniques may be required, but extremely difficult or tedious tricks are not required. Examples include Bomb Triggers, Super Jumps and Jesus Jumps. knowledge from a vanilla playthrough, such as how to open Color Dungeon.
[Hell] Obscure knowledge and hard techniques may be required. Examples include featherless jumping with boots and/or hookshot, sequential pit buffers and unclipped superjumps. Things in here can be extremely hard to do or very time consuming."""
**Hard:** More advanced techniques may be required, but glitches are not.
Examples include tricky jumps, killing enemies with only pots.
**Glitched:** Advanced glitches and techniques may be required, but
extremely difficult or tedious tricks are not required. Examples include
Bomb Triggers, Super Jumps and Jesus Jumps.
**Hell:** Obscure knowledge and hard techniques may be required. Examples
include featherless jumping with boots and/or hookshot, sequential pit
buffers and unclipped superjumps. Things in here can be extremely hard to do
or very time consuming.
"""
display_name = "Logic" display_name = "Logic"
rich_text_doc = True
ladxr_name = "logic" ladxr_name = "logic"
# option_casual = 0 # option_casual = 0
option_normal = 1 option_normal = 1
@@ -40,8 +53,8 @@ class Logic(Choice, LADXROption):
class TradeQuest(DefaultOffToggle, LADXROption): class TradeQuest(DefaultOffToggle, LADXROption):
""" """
[On] adds the trade items to the pool (the trade locations will always be local items) Trade quest items are randomized. Each NPC takes its normal trade quest
[Off] (default) doesn't add them item and gives a randomized item in return.
""" """
display_name = "Trade Quest" display_name = "Trade Quest"
ladxr_name = "tradequest" ladxr_name = "tradequest"
@@ -49,40 +62,32 @@ class TradeQuest(DefaultOffToggle, LADXROption):
class TextShuffle(DefaultOffToggle): class TextShuffle(DefaultOffToggle):
""" """
[On] Shuffles all the text in the game Shuffles all text in the game.
[Off] (default) doesn't shuffle them.
""" """
display_name = "Text Shuffle" display_name = "Text Shuffle"
class Rooster(DefaultOnToggle, LADXROption): class Rooster(DefaultOnToggle, LADXROption):
""" """
[On] Adds the rooster to the item pool. Adds the rooster to the item pool. If disabled, the overworld will be
[Off] The rooster spot is still a check giving an item. But you will never find the rooster. In that case, any rooster spot is accessible without rooster by other means. modified so that any location requiring the rooster is accessible by other
means.
""" """
display_name = "Rooster" display_name = "Rooster"
ladxr_name = "rooster" ladxr_name = "rooster"
class Boomerang(Choice):
"""
[Normal] requires Magnifying Lens to get the boomerang.
[Gift] The boomerang salesman will give you a random item, and the boomerang is shuffled.
"""
display_name = "Boomerang"
normal = 0
gift = 1
default = gift
class EntranceShuffle(Choice, LADXROption): class EntranceShuffle(Choice, LADXROption):
""" """
[WARNING] Experimental, may fail to fill Randomizes where overworld entrances lead.
Randomizes where overworld entrances lead to.
[Simple] Single-entrance caves/houses that have items are shuffled amongst each other. **Simple:** Single-entrance caves/houses that have items are shuffled
If random start location and/or dungeon shuffle is enabled, then these will be shuffled with all the non-connector entrance pool. amongst each other.
Note, some entrances can lead into water, use the warp-to-home from the save&quit menu to escape this."""
If *Dungeon Shuffle* is enabled, then dungeons will be shuffled with all the
non-connector entrances in the pool. Note, some entrances can lead into water, use
the warp-to-home from the save&quit menu to escape this.
"""
# [Advanced] Simple, but two-way connector caves are shuffled in their own pool as well. # [Advanced] Simple, but two-way connector caves are shuffled in their own pool as well.
# [Expert] Advanced, but caves/houses without items are also shuffled into the Simple entrance pool. # [Expert] Advanced, but caves/houses without items are also shuffled into the Simple entrance pool.
@@ -94,22 +99,22 @@ class EntranceShuffle(Choice, LADXROption):
# option_expert = 3 # option_expert = 3
# option_insanity = 4 # option_insanity = 4
default = option_none default = option_none
display_name = "Experimental Entrance Shuffle" display_name = "Entrance Shuffle"
ladxr_name = "entranceshuffle" ladxr_name = "entranceshuffle"
rich_text_doc = True
class DungeonShuffle(DefaultOffToggle, LADXROption): class DungeonShuffle(DefaultOffToggle, LADXROption):
""" """
[WARNING] Experimental, may fail to fill Randomizes dungeon entrances with each other.
Randomizes dungeon entrances within eachother
""" """
display_name = "Experimental Dungeon Shuffle" display_name = "Dungeon Shuffle"
ladxr_name = "dungeonshuffle" ladxr_name = "dungeonshuffle"
class APTitleScreen(DefaultOnToggle): class APTitleScreen(DefaultOnToggle):
""" """
Enables AP specific title screen and disables the intro cutscene Enables AP specific title screen and disables the intro cutscene.
""" """
display_name = "AP Title Screen" display_name = "AP Title Screen"
@@ -124,6 +129,7 @@ class BossShuffle(Choice):
class DungeonItemShuffle(Choice): class DungeonItemShuffle(Choice):
display_name = "Dungeon Item Shuffle" display_name = "Dungeon Item Shuffle"
rich_text_doc = True
option_original_dungeon = 0 option_original_dungeon = 0
option_own_dungeons = 1 option_own_dungeons = 1
option_own_world = 2 option_own_world = 2
@@ -138,12 +144,15 @@ class DungeonItemShuffle(Choice):
class ShuffleNightmareKeys(DungeonItemShuffle): class ShuffleNightmareKeys(DungeonItemShuffle):
""" """
Shuffle Nightmare Keys **Original Dungeon:** The item will be within its original dungeon.
[Original Dungeon] The item will be within its original dungeon
[Own Dungeons] The item will be within a dungeon in your world **Own Dungeons:** The item will be within a dungeon in your world.
[Own World] The item will be somewhere in your world
[Any World] The item could be anywhere **Own World:** The item will be somewhere in your world.
[Different World] The item will be somewhere in another world
**Any World:** The item could be anywhere.
**Different World:** The item will be somewhere in another world.
""" """
display_name = "Shuffle Nightmare Keys" display_name = "Shuffle Nightmare Keys"
ladxr_item = "NIGHTMARE_KEY" ladxr_item = "NIGHTMARE_KEY"
@@ -151,12 +160,15 @@ class ShuffleNightmareKeys(DungeonItemShuffle):
class ShuffleSmallKeys(DungeonItemShuffle): class ShuffleSmallKeys(DungeonItemShuffle):
""" """
Shuffle Small Keys **Original Dungeon:** The item will be within its original dungeon.
[Original Dungeon] The item will be within its original dungeon
[Own Dungeons] The item will be within a dungeon in your world **Own Dungeons:** The item will be within a dungeon in your world.
[Own World] The item will be somewhere in your world
[Any World] The item could be anywhere **Own World:** The item will be somewhere in your world.
[Different World] The item will be somewhere in another world
**Any World:** The item could be anywhere.
**Different World:** The item will be somewhere in another world.
""" """
display_name = "Shuffle Small Keys" display_name = "Shuffle Small Keys"
ladxr_item = "KEY" ladxr_item = "KEY"
@@ -164,12 +176,15 @@ class ShuffleSmallKeys(DungeonItemShuffle):
class ShuffleMaps(DungeonItemShuffle): class ShuffleMaps(DungeonItemShuffle):
""" """
Shuffle Dungeon Maps **Original Dungeon:** The item will be within its original dungeon.
[Original Dungeon] The item will be within its original dungeon
[Own Dungeons] The item will be within a dungeon in your world **Own Dungeons:** The item will be within a dungeon in your world.
[Own World] The item will be somewhere in your world
[Any World] The item could be anywhere **Own World:** The item will be somewhere in your world.
[Different World] The item will be somewhere in another world
**Any World:** The item could be anywhere.
**Different World:** The item will be somewhere in another world.
""" """
display_name = "Shuffle Maps" display_name = "Shuffle Maps"
ladxr_item = "MAP" ladxr_item = "MAP"
@@ -177,12 +192,15 @@ class ShuffleMaps(DungeonItemShuffle):
class ShuffleCompasses(DungeonItemShuffle): class ShuffleCompasses(DungeonItemShuffle):
""" """
Shuffle Dungeon Compasses **Original Dungeon:** The item will be within its original dungeon.
[Original Dungeon] The item will be within its original dungeon
[Own Dungeons] The item will be within a dungeon in your world **Own Dungeons:** The item will be within a dungeon in your world.
[Own World] The item will be somewhere in your world
[Any World] The item could be anywhere **Own World:** The item will be somewhere in your world.
[Different World] The item will be somewhere in another world
**Any World:** The item could be anywhere.
**Different World:** The item will be somewhere in another world.
""" """
display_name = "Shuffle Compasses" display_name = "Shuffle Compasses"
ladxr_item = "COMPASS" ladxr_item = "COMPASS"
@@ -190,12 +208,15 @@ class ShuffleCompasses(DungeonItemShuffle):
class ShuffleStoneBeaks(DungeonItemShuffle): class ShuffleStoneBeaks(DungeonItemShuffle):
""" """
Shuffle Owl Beaks **Original Dungeon:** The item will be within its original dungeon.
[Original Dungeon] The item will be within its original dungeon
[Own Dungeons] The item will be within a dungeon in your world **Own Dungeons:** The item will be within a dungeon in your world.
[Own World] The item will be somewhere in your world
[Any World] The item could be anywhere **Own World:** The item will be somewhere in your world.
[Different World] The item will be somewhere in another world
**Any World:** The item could be anywhere.
**Different World:** The item will be somewhere in another world.
""" """
display_name = "Shuffle Stone Beaks" display_name = "Shuffle Stone Beaks"
ladxr_item = "STONE_BEAK" ladxr_item = "STONE_BEAK"
@@ -203,13 +224,17 @@ class ShuffleStoneBeaks(DungeonItemShuffle):
class ShuffleInstruments(DungeonItemShuffle): class ShuffleInstruments(DungeonItemShuffle):
""" """
Shuffle Instruments **Original Dungeon:** The item will be within its original dungeon.
[Original Dungeon] The item will be within its original dungeon
[Own Dungeons] The item will be within a dungeon in your world **Own Dungeons:** The item will be within a dungeon in your world.
[Own World] The item will be somewhere in your world
[Any World] The item could be anywhere **Own World:** The item will be somewhere in your world.
[Different World] The item will be somewhere in another world
[Vanilla] The item will be in its vanilla location in your world **Any World:** The item could be anywhere.
**Different World:** The item will be somewhere in another world.
**Vanilla:** The item will be in its vanilla location in your world.
""" """
display_name = "Shuffle Instruments" display_name = "Shuffle Instruments"
ladxr_item = "INSTRUMENT" ladxr_item = "INSTRUMENT"
@@ -220,12 +245,18 @@ class ShuffleInstruments(DungeonItemShuffle):
class Goal(Choice, LADXROption): class Goal(Choice, LADXROption):
""" """
The Goal of the game The Goal of the game.
[Instruments] The Wind Fish's Egg will only open if you have the required number of Instruments of the Sirens, and play the Ballad of the Wind Fish.
[Seashells] The Egg will open when you bring 20 seashells. The Ballad and Ocarina are not needed. **Instruments:** The Wind Fish's Egg will only open if you have the required
[Open] The Egg will start pre-opened. number of Instruments of the Sirens, and play the Ballad of the Wind Fish.
**Seashells:** The Egg will open when you bring 20 seashells. The Ballad and
Ocarina are not needed.
**Open:** The Egg will start pre-opened.
""" """
display_name = "Goal" display_name = "Goal"
rich_text_doc = True
ladxr_name = "goal" ladxr_name = "goal"
option_instruments = 1 option_instruments = 1
option_seashells = 2 option_seashells = 2
@@ -242,7 +273,7 @@ class Goal(Choice, LADXROption):
class InstrumentCount(Range, LADXROption): class InstrumentCount(Range, LADXROption):
""" """
Sets the number of instruments required to open the Egg Sets the number of instruments required to open the Egg.
""" """
display_name = "Instrument Count" display_name = "Instrument Count"
ladxr_name = None ladxr_name = None
@@ -253,7 +284,8 @@ class InstrumentCount(Range, LADXROption):
class NagMessages(DefaultOffToggle, LADXROption): class NagMessages(DefaultOffToggle, LADXROption):
""" """
Controls if nag messages are shown when rocks and crystals are touched. Useful for glitches, annoying for everyone else. Controls if nag messages are shown when rocks and crystals are touched.
Useful for glitches, annoying for everything else.
""" """
display_name = "Nag Messages" display_name = "Nag Messages"
ladxr_name = "nagmessages" ladxr_name = "nagmessages"
@@ -262,31 +294,30 @@ class NagMessages(DefaultOffToggle, LADXROption):
class MusicChangeCondition(Choice): class MusicChangeCondition(Choice):
""" """
Controls how the music changes. Controls how the music changes.
[Sword] When you pick up a sword, the music changes
[Always] You always have the post-sword music **Sword:** When you pick up a sword, the music changes.
**Always:** You always have the post-sword music.
""" """
display_name = "Music Change Condition" display_name = "Music Change Condition"
rich_text_doc = True
option_sword = 0 option_sword = 0
option_always = 1 option_always = 1
default = option_always default = option_always
# Setting('hpmode', 'Gameplay', 'm', 'Health mode', options=[('default', '', 'Normal'), ('inverted', 'i', 'Inverted'), ('1', '1', 'Start with 1 heart'), ('low', 'l', 'Low max')], default='default',
# description="""
# [Normal} health works as you would expect.
# [Inverted] you start with 9 heart containers, but killing a boss will take a heartcontainer instead of giving one.
# [Start with 1] normal game, you just start with 1 heart instead of 3.
# [Low max] replace heart containers with heart pieces."""),
class HardMode(Choice, LADXROption): class HardMode(Choice, LADXROption):
""" """
[Oracle] Less iframes and health from drops. Bombs damage yourself. Water damages you without flippers. No piece of power or acorn. **Oracle:** Less iframes and health from drops. Bombs damage yourself. Water
[Hero] Switch version hero mode, double damage, no heart/fairy drops. damages you without flippers. No pieces of power or acorns.
[One hit KO] You die on a single hit, always.
**Hero:** Switch version hero mode, double damage, no heart/fairy drops.
**OHKO:** You die on a single hit, always.
""" """
display_name = "Hard Mode" display_name = "Hard Mode"
ladxr_name = "hardmode" ladxr_name = "hardmode"
rich_text_doc = True
option_none = 0 option_none = 0
option_oracle = 1 option_oracle = 1
option_hero = 2 option_hero = 2
@@ -294,44 +325,26 @@ class HardMode(Choice, LADXROption):
default = option_none default = option_none
# Setting('steal', 'Gameplay', 't', 'Stealing from the shop',
# options=[('always', 'a', 'Always'), ('never', 'n', 'Never'), ('default', '', 'Normal')], default='default',
# description="""Effects when you can steal from the shop. Stealing is bad and never in logic.
# [Normal] requires the sword before you can steal.
# [Always] you can always steal from the shop
# [Never] you can never steal from the shop."""),
class Bowwow(Choice):
"""Allows BowWow to be taken into any area. Certain enemies and bosses are given a new weakness to BowWow.
[Normal] BowWow is in the item pool, but can be logically expected as a damage source.
[Swordless] The progressive swords are removed from the item pool.
"""
display_name = "BowWow"
normal = 0
swordless = 1
default = normal
class Overworld(Choice, LADXROption): class Overworld(Choice, LADXROption):
""" """
[Open Mabe] Replaces rock on the east side of Mabe Village with bushes, allowing access to Ukuku Prairie without Power Bracelet. **Open Mabe:** Replaces rock on the east side of Mabe Village with bushes,
allowing access to Ukuku Prairie without Power Bracelet.
""" """
display_name = "Overworld" display_name = "Overworld"
ladxr_name = "overworld" ladxr_name = "overworld"
rich_text_doc = True
option_normal = 0 option_normal = 0
option_open_mabe = 1 option_open_mabe = 1
default = option_normal default = option_normal
# Setting('superweapons', 'Special', 'q', 'Enable super weapons', default=False,
# description='All items will be more powerful, faster, harder, bigger stronger. You name it.'),
class Quickswap(Choice, LADXROption): class Quickswap(Choice, LADXROption):
""" """
Adds that the SELECT button swaps with either A or B. The item is swapped with the top inventory slot. The map is not available when quickswap is enabled. Instead of opening the map, the *SELECT* button swaps the top item of your inventory on to your *A* or *B* button.
""" """
display_name = "Quickswap" display_name = "Quickswap"
ladxr_name = "quickswap" ladxr_name = "quickswap"
rich_text_doc = True
option_none = 0 option_none = 0
option_a = 1 option_a = 1
option_b = 2 option_b = 2
@@ -340,10 +353,11 @@ class Quickswap(Choice, LADXROption):
class TextMode(Choice, LADXROption): class TextMode(Choice, LADXROption):
""" """
[Fast] Makes text appear twice as fast **Fast:** Makes text appear twice as fast.
""" """
display_name = "Text Mode" display_name = "Text Mode"
ladxr_name = "textmode" ladxr_name = "textmode"
rich_text_doc = True
option_normal = 0 option_normal = 0
option_fast = 1 option_fast = 1
default = option_fast default = option_fast
@@ -363,7 +377,8 @@ class LowHpBeep(Choice, LADXROption):
class NoFlash(DefaultOnToggle, LADXROption): class NoFlash(DefaultOnToggle, LADXROption):
""" """
Remove the flashing light effects from Mamu, shopkeeper and MadBatter. Useful for capture cards and people that are sensitive to these things. Remove the flashing light effects from Mamu, shopkeeper and MadBatter.
Useful for capture cards and people that are sensitive to these things.
""" """
display_name = "No Flash" display_name = "No Flash"
ladxr_name = "noflash" ladxr_name = "noflash"
@@ -371,23 +386,34 @@ class NoFlash(DefaultOnToggle, LADXROption):
class BootsControls(Choice): class BootsControls(Choice):
""" """
Adds additional button to activate Pegasus Boots (does nothing if you haven't picked up your boots!) Adds an additional button to activate Pegasus Boots (does nothing if you
[Vanilla] Nothing changes, you have to equip the boots to use them haven't picked up your boots!)
[Bracelet] Holding down the button for the bracelet also activates boots (somewhat like Link to the Past)
[Press A] Holding down A activates boots **Vanilla:** Nothing changes, you have to equip the boots to use them.
[Press B] Holding down B activates boots
**Bracelet:** Holding down the button for the bracelet also activates boots
(somewhat like Link to the Past).
**Press A:** Holding down A activates boots.
**Press B:** Holding down B activates boots.
""" """
display_name = "Boots Controls" display_name = "Boots Controls"
rich_text_doc = True
option_vanilla = 0 option_vanilla = 0
option_bracelet = 1 option_bracelet = 1
option_press_a = 2 option_press_a = 2
alias_a = 2
option_press_b = 3 option_press_b = 3
alias_b = 3
class LinkPalette(Choice, LADXROption): class LinkPalette(Choice, LADXROption):
""" """
Sets link's palette Sets Link's palette.
A-D are color palettes usually used during the damage animation and can change based on where you are.
A-D are color palettes usually used during the damage animation and can
change based on where you are.
""" """
display_name = "Link's Palette" display_name = "Link's Palette"
ladxr_name = "linkspalette" ladxr_name = "linkspalette"
@@ -408,14 +434,21 @@ class LinkPalette(Choice, LADXROption):
class TrendyGame(Choice): class TrendyGame(Choice):
""" """
[Easy] All of the items hold still for you **Easy:** All of the items hold still for you.
[Normal] The vanilla behavior
[Hard] The trade item also moves **Normal:** The vanilla behavior.
[Harder] The items move faster
[Hardest] The items move diagonally **Hard:** The trade item also moves.
[Impossible] The items move impossibly fast, may scroll on and off the screen
**Harder:** The items move faster.
**Hardest:** The items move diagonally.
**Impossible:** The items move impossibly fast, may scroll on and off the
screen.
""" """
display_name = "Trendy Game" display_name = "Trendy Game"
rich_text_doc = True
option_easy = 0 option_easy = 0
option_normal = 1 option_normal = 1
option_hard = 2 option_hard = 2
@@ -435,15 +468,24 @@ class GfxMod(DefaultOffToggle):
class Palette(Choice): class Palette(Choice):
""" """
Sets the palette for the game. Sets the palette for the game.
Note: A few places aren't patched, such as the menu and a few color dungeon tiles.
[Normal] The vanilla palette Note: A few places aren't patched, such as the menu and a few color dungeon
[1-Bit] One bit of color per channel tiles.
[2-Bit] Two bits of color per channel
[Greyscale] Shades of grey **Normal:** The vanilla palette.
[Pink] Aesthetic
[Inverted] Inverted **1-Bit:** One bit of color per channel.
**2-Bit:** Two bits of color per channel.
**Greyscale:** Shades of grey.
**Pink:** Aesthetic.
**Inverted:** Inverted.
""" """
display_name = "Palette" display_name = "Palette"
rich_text_doc = True
option_normal = 0 option_normal = 0
option_1bit = 1 option_1bit = 1
option_2bit = 2 option_2bit = 2
@@ -454,12 +496,15 @@ class Palette(Choice):
class Music(Choice, LADXROption): class Music(Choice, LADXROption):
""" """
[Vanilla] Regular Music **Vanilla:** Regular Music
[Shuffled] Shuffled Music
[Off] No music **Shuffled:** Shuffled Music
**Off:** No music
""" """
display_name = "Music" display_name = "Music"
ladxr_name = "music" ladxr_name = "music"
rich_text_doc = True
option_vanilla = 0 option_vanilla = 0
option_shuffled = 1 option_shuffled = 1
option_off = 2 option_off = 2
@@ -475,10 +520,14 @@ class Music(Choice, LADXROption):
class Warps(Choice): class Warps(Choice):
""" """
[Improved] Adds remake style warp screen to the game. Choose your warp destination on the map after jumping in a portal and press B to select. **Improved:** Adds remake style warp screen to the game. Choose your warp
[Improved Additional] Improved warps, and adds a warp point at Crazy Tracy's house (the Mambo teleport spot) and Eagle's Tower. destination on the map after jumping in a portal and press *B* to select.
**Improved Additional:** Improved warps, and adds a warp point at Crazy
Tracy's house (the Mambo teleport spot) and Eagle's Tower.
""" """
display_name = "Warps" display_name = "Warps"
rich_text_doc = True
option_vanilla = 0 option_vanilla = 0
option_improved = 1 option_improved = 1
option_improved_additional = 2 option_improved_additional = 2
@@ -487,19 +536,24 @@ class Warps(Choice):
class InGameHints(DefaultOnToggle): class InGameHints(DefaultOnToggle):
""" """
When enabled, owl statues and library books may indicate the location of your items in the multiworld. When enabled, owl statues and library books may indicate the location of
your items in the multiworld.
""" """
display_name = "In-game Hints" display_name = "In-game Hints"
class TarinsGift(Choice): class TarinsGift(Choice):
""" """
[Local Progression] Forces Tarin's gift to be an item that immediately opens up local checks. **Local Progression:** Forces Tarin's gift to be an item that immediately
Has little effect in single player games, and isn't always necessary with randomized entrances. opens up local checks. Has little effect in single player games, and isn't
[Bush Breaker] Forces Tarin's gift to be an item that can destroy bushes. always necessary with randomized entrances.
[Any Item] Tarin's gift can be any item for any world
**Bush Breaker:** Forces Tarin's gift to be an item that can destroy bushes.
**Any Item:** Tarin's gift can be any item for any world
""" """
display_name = "Tarin's Gift" display_name = "Tarin's Gift"
rich_text_doc = True
option_local_progression = 0 option_local_progression = 0
option_bush_breaker = 1 option_bush_breaker = 1
option_any_item = 2 option_any_item = 2
@@ -508,67 +562,69 @@ class TarinsGift(Choice):
class StabilizeItemPool(DefaultOffToggle): class StabilizeItemPool(DefaultOffToggle):
""" """
By default, rupees in the item pool may be randomly swapped with bombs, arrows, powders, or capacity upgrades. This option disables that swapping, which is useful for plando. By default, some rupees in the item pool are randomly swapped with bombs,
arrows, powders, or capacity upgrades. This set of items is also used as
filler. This option disables that swapping and makes *Nothing* the filler
item.
""" """
display_name = "Stabilize Item Pool" display_name = "Stabilize Item Pool"
rich_text_doc = True
class ForeignItemIcons(Choice): class ForeignItemIcons(Choice):
""" """
Choose how to display foreign items. Choose how to display foreign items.
[Guess By Name] Foreign items can look like any Link's Awakening item.
[Indicate Progression] Foreign items are either a Piece of Power (progression) or Guardian Acorn (non-progression). **Guess By Name:** Foreign items can look like any Link's Awakening item.
**Indicate Progression:** Foreign items are either a Piece of Power
(progression) or Guardian Acorn (non-progression).
""" """
display_name = "Foreign Item Icons" display_name = "Foreign Item Icons"
rich_text_doc = True
option_guess_by_name = 0 option_guess_by_name = 0
option_indicate_progression = 1 option_indicate_progression = 1
default = option_guess_by_name default = option_guess_by_name
ladx_option_groups = [ ladx_option_groups = [
OptionGroup("Goal Options", [ OptionGroup("Gameplay Adjustments", [
Goal, InGameHints,
InstrumentCount, TarinsGift,
HardMode,
TrendyGame,
]), ]),
OptionGroup("Shuffles", [ OptionGroup("World Layout", [
Overworld,
Warps,
DungeonShuffle,
EntranceShuffle,
]),
OptionGroup("Item Pool", [
ShuffleInstruments, ShuffleInstruments,
ShuffleNightmareKeys, ShuffleNightmareKeys,
ShuffleSmallKeys, ShuffleSmallKeys,
ShuffleMaps, ShuffleMaps,
ShuffleCompasses, ShuffleCompasses,
ShuffleStoneBeaks ShuffleStoneBeaks,
]),
OptionGroup("Warp Points", [
Warps,
]),
OptionGroup("Miscellaneous", [
TradeQuest, TradeQuest,
Rooster, Rooster,
TarinsGift,
Overworld,
TrendyGame,
InGameHints,
NagMessages,
StabilizeItemPool, StabilizeItemPool,
]),
OptionGroup("Quality of Life & Aesthetic", [
NagMessages,
Quickswap, Quickswap,
HardMode, BootsControls,
BootsControls ForeignItemIcons,
]), GfxMod,
OptionGroup("Experimental", [
DungeonShuffle,
EntranceShuffle
]),
OptionGroup("Visuals & Sound", [
LinkPalette, LinkPalette,
Palette, Palette,
TextShuffle,
ForeignItemIcons,
APTitleScreen, APTitleScreen,
GfxMod, TextShuffle,
TextMode,
Music, Music,
MusicChangeCondition, MusicChangeCondition,
LowHpBeep, LowHpBeep,
TextMode,
NoFlash, NoFlash,
]) ])
] ]
@@ -576,24 +632,12 @@ ladx_option_groups = [
@dataclass @dataclass
class LinksAwakeningOptions(PerGameCommonOptions): class LinksAwakeningOptions(PerGameCommonOptions):
logic: Logic logic: Logic
# 'heartpiece': DefaultOnToggle, # description='Includes heart pieces in the item pool'), tradequest: TradeQuest
# 'seashells': DefaultOnToggle, # description='Randomizes the secret sea shells hiding in the ground/trees. (chest are always randomized)'), rooster: Rooster
# 'heartcontainers': DefaultOnToggle, # description='Includes boss heart container drops in the item pool'), experimental_dungeon_shuffle: DungeonShuffle
# 'instruments': DefaultOffToggle, # description='Instruments are placed on random locations, dungeon goal will just contain a random item.'),
tradequest: TradeQuest # description='Trade quest items are randomized, each NPC takes its normal trade quest item, but gives a random item'),
# 'witch': DefaultOnToggle, # description='Adds both the toadstool and the reward for giving the toadstool to the witch to the item pool'),
rooster: Rooster # description='Adds the rooster to the item pool. Without this option, the rooster spot is still a check giving an item. But you will never find the rooster. Any rooster spot is accessible without rooster by other means.'),
# 'boomerang': Boomerang,
# 'randomstartlocation': DefaultOffToggle, # 'Randomize where your starting house is located'),
experimental_dungeon_shuffle: DungeonShuffle # 'Randomizes the dungeon that each dungeon entrance leads to'),
experimental_entrance_shuffle: EntranceShuffle experimental_entrance_shuffle: EntranceShuffle
# 'bossshuffle': BossShuffle,
# 'minibossshuffle': BossShuffle,
goal: Goal goal: Goal
instrument_count: InstrumentCount instrument_count: InstrumentCount
# 'itempool': ItemPool,
# 'bowwow': Bowwow,
# 'overworld': Overworld,
link_palette: LinkPalette link_palette: LinkPalette
warps: Warps warps: Warps
trendy_game: TrendyGame trendy_game: TrendyGame

View File

@@ -71,7 +71,7 @@ class LinksAwakeningWebWorld(WebWorld):
"setup/en", "setup/en",
["zig"] ["zig"]
)] )]
theme = "dirt" theme = "ocean"
option_groups = ladx_option_groups option_groups = ladx_option_groups
options_presets: typing.Dict[str, typing.Dict[str, typing.Any]] = { options_presets: typing.Dict[str, typing.Dict[str, typing.Any]] = {
"Keysanity": { "Keysanity": {