LADX: Open Mabe Option (#3964)

* open mabe option
swaps east mabe rocks for bushes

* add open mabe to slot data

* use upstream overworld option
Instead of a standalone option, use upstream's "overworld" option, which we don't use yet but it leaves better space for the future

* use ladxr_setting for consistency

* newline
This commit is contained in:
threeandthreee 2024-12-20 07:55:32 -05:00 committed by GitHub
parent 7c8d102c17
commit e1a1cd1067
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 36 additions and 22 deletions

View File

@ -58,7 +58,6 @@ from . import hints
from .patches import bank34 from .patches import bank34
from .utils import formatText from .utils import formatText
from ..Options import TrendyGame, Palette, Warps
from .roomEditor import RoomEditor, Object from .roomEditor import RoomEditor, Object
from .patches.aesthetics import rgb_to_bin, bin_to_rgb from .patches.aesthetics import rgb_to_bin, bin_to_rgb
@ -66,7 +65,7 @@ from .locations.keyLocation import KeyLocation
from BaseClasses import ItemClassification from BaseClasses import ItemClassification
from ..Locations import LinksAwakeningLocation from ..Locations import LinksAwakeningLocation
from ..Options import TrendyGame, Palette, MusicChangeCondition, BootsControls from ..Options import TrendyGame, Palette, MusicChangeCondition, Warps
if TYPE_CHECKING: if TYPE_CHECKING:
from .. import LinksAwakeningWorld from .. import LinksAwakeningWorld
@ -156,6 +155,8 @@ def generateRom(args, world: "LinksAwakeningWorld"):
if not world.ladxr_settings.rooster: if not world.ladxr_settings.rooster:
patches.maptweaks.tweakMap(rom) patches.maptweaks.tweakMap(rom)
patches.maptweaks.tweakBirdKeyRoom(rom) patches.maptweaks.tweakBirdKeyRoom(rom)
if world.ladxr_settings.overworld == "openmabe":
patches.maptweaks.openMabe(rom)
patches.chest.fixChests(rom) patches.chest.fixChests(rom)
patches.shop.fixShop(rom) patches.shop.fixShop(rom)
patches.rooster.patchRooster(rom) patches.rooster.patchRooster(rom)

View File

@ -144,7 +144,12 @@ class World:
self._addEntrance("moblin_cave", graveyard, moblin_cave, None) self._addEntrance("moblin_cave", graveyard, moblin_cave, None)
# "Ukuku Prairie" # "Ukuku Prairie"
ukuku_prairie = Location().connect(mabe_village, POWER_BRACELET).connect(graveyard, POWER_BRACELET) ukuku_prairie = Location()
if options.overworld == "openmabe":
ukuku_prairie.connect(mabe_village, r.bush)
else:
ukuku_prairie.connect(mabe_village, POWER_BRACELET)
ukuku_prairie.connect(graveyard, POWER_BRACELET)
ukuku_prairie.connect(Location().add(TradeSequenceItem(0x07B, TRADING_ITEM_STICK)), TRADING_ITEM_BANANAS) ukuku_prairie.connect(Location().add(TradeSequenceItem(0x07B, TRADING_ITEM_STICK)), TRADING_ITEM_BANANAS)
ukuku_prairie.connect(Location().add(TradeSequenceItem(0x087, TRADING_ITEM_HONEYCOMB)), TRADING_ITEM_STICK) ukuku_prairie.connect(Location().add(TradeSequenceItem(0x087, TRADING_ITEM_HONEYCOMB)), TRADING_ITEM_STICK)
self._addEntrance("prairie_left_phone", ukuku_prairie, None, None) self._addEntrance("prairie_left_phone", ukuku_prairie, None, None)

View File

@ -38,3 +38,12 @@ def tweakBirdKeyRoom(rom):
re.moveObject(2, 5, 3, 6) re.moveObject(2, 5, 3, 6)
re.addEntity(3, 5, 0x9D) re.addEntity(3, 5, 0x9D)
re.store(rom) re.store(rom)
def openMabe(rom):
# replaces rocks on east side of Mabe Village with bushes
re = RoomEditor(rom, 0x094)
re.changeObject(5, 1, 0x5C)
re.overlay[5 + 1 * 10] = 0x5C
re.overlay[5 + 2 * 10] = 0x5C
re.store(rom)

View File

@ -169,7 +169,7 @@ Note, some entrances can lead into water, use the warp-to-home from the save&qui
[Never] you can never steal from the shop."""), [Never] you can never steal from the shop."""),
Setting('bowwow', 'Special', 'g', 'Good boy mode', options=[('normal', '', 'Disabled'), ('always', 'a', 'Enabled'), ('swordless', 's', 'Enabled (swordless)')], default='normal', Setting('bowwow', 'Special', 'g', 'Good boy mode', options=[('normal', '', 'Disabled'), ('always', 'a', 'Enabled'), ('swordless', 's', 'Enabled (swordless)')], default='normal',
description='Allows BowWow to be taken into any area, damage bosses and more enemies. If enabled you always start with bowwow. Swordless option removes the swords from the game and requires you to beat the game without a sword and just bowwow.'), description='Allows BowWow to be taken into any area, damage bosses and more enemies. If enabled you always start with bowwow. Swordless option removes the swords from the game and requires you to beat the game without a sword and just bowwow.'),
Setting('overworld', 'Special', 'O', 'Overworld', options=[('normal', '', 'Normal'), ('dungeondive', 'D', 'Dungeon dive'), ('nodungeons', 'N', 'No dungeons'), ('random', 'R', 'Randomized')], default='normal', Setting('overworld', 'Special', 'O', 'Overworld', options=[('normal', '', 'Normal'), ('dungeondive', 'D', 'Dungeon dive'), ('nodungeons', 'N', 'No dungeons'), ('random', 'R', 'Randomized'), ('openmabe', 'M', 'Open Mabe')], default='normal',
description=""" description="""
[Dungeon Dive] Create a different overworld where all the dungeons are directly accessible and almost no chests are located in the overworld. [Dungeon Dive] Create a different overworld where all the dungeons are directly accessible and almost no chests are located in the overworld.
[No dungeons] All dungeons only consist of a boss fight and a instrument reward. Rest of the dungeon is removed. [No dungeons] All dungeons only consist of a boss fight and a instrument reward. Rest of the dungeon is removed.

View File

@ -313,15 +313,12 @@ class Bowwow(Choice):
class Overworld(Choice, LADXROption): class Overworld(Choice, LADXROption):
""" """
[Dungeon Dive] Create a different overworld where all the dungeons are directly accessible and almost no chests are located in the overworld. [Open Mabe] Replaces rock on the east side of Mabe Village with bushes, allowing access to Ukuku Prairie without Power Bracelet.
[Tiny dungeons] All dungeons only consist of a boss fight and a instrument reward. Rest of the dungeon is removed.
""" """
display_name = "Overworld" display_name = "Overworld"
ladxr_name = "overworld" ladxr_name = "overworld"
option_normal = 0 option_normal = 0
option_dungeon_dive = 1 option_open_mabe = 1
option_tiny_dungeons = 2
# option_shuffled = 3
default = option_normal default = option_normal
@ -530,7 +527,6 @@ class InGameHints(DefaultOnToggle):
display_name = "In-game Hints" display_name = "In-game Hints"
class ForeignItemIcons(Choice): class ForeignItemIcons(Choice):
""" """
Choose how to display foreign items. Choose how to display foreign items.
@ -562,6 +558,7 @@ ladx_option_groups = [
OptionGroup("Miscellaneous", [ OptionGroup("Miscellaneous", [
TradeQuest, TradeQuest,
Rooster, Rooster,
Overworld,
TrendyGame, TrendyGame,
InGameHints, InGameHints,
NagMessages, NagMessages,
@ -633,6 +630,7 @@ class LinksAwakeningOptions(PerGameCommonOptions):
text_mode: TextMode text_mode: TextMode
no_flash: NoFlash no_flash: NoFlash
in_game_hints: InGameHints in_game_hints: InGameHints
overworld: Overworld
warp_improvements: Removed warp_improvements: Removed
additional_warp_points: Removed additional_warp_points: Removed

View File

@ -530,6 +530,7 @@ class LinksAwakeningWorld(World):
"shuffle_instruments", "shuffle_instruments",
"nag_messages", "nag_messages",
"hard_mode", "hard_mode",
"overworld",
] ]
# use the default behaviour to grab options # use the default behaviour to grab options