From 6e9d949439c5df5933d19052764d85cb774365c7 Mon Sep 17 00:00:00 2001 From: Catobat <69204835+Catobat@users.noreply.github.com> Date: Mon, 13 Jun 2022 20:38:24 +0200 Subject: [PATCH 1/3] Shuffle Back of Tavern --- BaseClasses.py | 7 ++- CLI.py | 5 +- ER_hint_reference.txt | 2 + EntranceShuffle.py | 4 +- Main.py | 3 +- README.md | 5 ++ Rom.py | 6 ++- data/base2current.bps | Bin 93021 -> 93118 bytes mystery_testsuite.yml | 3 ++ resources/app/cli/args.json | 4 ++ resources/app/cli/lang/en.json | 3 ++ resources/app/gui/lang/en.json | 1 + .../app/gui/randomize/entrando/widgets.json | 1 + source/classes/CustomSettings.py | 2 + source/classes/constants.py | 1 + source/overworld/EntranceShuffle2.py | 44 ++++++++++-------- source/tools/MysteryUtils.py | 1 + 17 files changed, 64 insertions(+), 28 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 2b56d39f..fd9e0c9c 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -2460,6 +2460,7 @@ class Spoiler(object): 'goal': self.world.goal, 'shuffle': self.world.shuffle, 'shufflelinks': self.world.shufflelinks, + 'shuffletavern': self.world.shuffletavern, 'door_shuffle': self.world.doorShuffle, 'intensity': self.world.intensity, 'item_pool': self.world.difficulty, @@ -2541,7 +2542,8 @@ class Spoiler(object): outfile.write('Difficulty: %s\n' % self.metadata['item_pool'][player]) outfile.write('Item Functionality: %s\n' % self.metadata['item_functionality'][player]) outfile.write('Entrance Shuffle: %s\n' % self.metadata['shuffle'][player]) - outfile.write(f"Link's House Shuffled: {yn(self.metadata['shufflelinks'])}\n") + outfile.write(f"Link's House Shuffled: {yn(self.metadata['shufflelinks'][player])}\n") + outfile.write(f"Back of Tavern Shuffled: {yn(self.metadata['shuffletavern'][player])}\n") outfile.write('Door Shuffle: %s\n' % self.metadata['door_shuffle'][player]) outfile.write('Intensity: %s\n' % self.metadata['intensity'][player]) outfile.write(f"Drop Shuffle: {yn(self.metadata['dropshuffle'][player])}\n") @@ -2827,7 +2829,7 @@ class Settings(object): (0x80 if w.bigkeyshuffle[p] else 0) | (0x40 if w.keyshuffle[p] else 0) | (0x20 if w.mapshuffle[p] else 0) | (0x10 if w.compassshuffle[p] else 0) - | (enemy_mode[w.enemy_shuffle[p]]), + | (0x8 if w.shuffletavern[p] else 0) | (enemy_mode[w.enemy_shuffle[p]]), (e_health[w.enemy_health[p]] << 5) | (e_dmg[w.enemy_damage[p]] << 3) | (0x4 if w.potshuffle[p] else 0) | (0x2 if w.bombbag[p] else 0) | (1 if w.shufflelinks[p] else 0), @@ -2885,6 +2887,7 @@ class Settings(object): args.mapshuffle[p] = True if settings[7] & 0x20 else False args.compassshuffle[p] = True if settings[7] & 0x10 else False # args.shufflebosses[p] = r(boss_mode)[(settings[7] & 0xc) >> 2] + args.shuffletavern[p] = True if settings[7] & 0x8 else False args.shuffleenemies[p] = r(enemy_mode)[settings[7] & 0x3] args.enemy_health[p] = r(e_health)[(settings[8] & 0xE0) >> 5] diff --git a/CLI.py b/CLI.py index c659d3b5..62fee1b3 100644 --- a/CLI.py +++ b/CLI.py @@ -119,8 +119,8 @@ def parse_cli(argv, no_defaults=False): 'mapshuffle', 'compassshuffle', 'keyshuffle', 'bigkeyshuffle', 'startinventory', 'usestartinventory', 'bombbag', 'overworld_map', 'restrict_boss_items', 'triforce_pool_min', 'triforce_pool_max', 'triforce_goal_min', 'triforce_goal_max', - 'triforce_min_difference', 'triforce_goal', 'triforce_pool', 'shufflelinks', 'pseudoboots', - 'retro', 'accessibility', 'hints', 'beemizer', 'experimental', 'dungeon_counters', + 'triforce_min_difference', 'triforce_goal', 'triforce_pool', 'shufflelinks', 'shuffletavern', + 'pseudoboots', 'retro', 'accessibility', 'hints', 'beemizer', 'experimental', 'dungeon_counters', 'shufflebosses', 'shuffleenemies', 'enemy_health', 'enemy_damage', 'shufflepots', 'ow_palettes', 'uw_palettes', 'sprite', 'disablemusic', 'quickswap', 'fastmenu', 'heartcolor', 'heartbeep', 'remote_items', 'shopsanity', 'dropshuffle', 'pottery', 'keydropshuffle', @@ -170,6 +170,7 @@ def parse_settings(): "shuffleganon": True, "shuffle": "vanilla", "shufflelinks": False, + "shuffletavern": False, "overworld_map": "default", "pseudoboots": False, diff --git a/ER_hint_reference.txt b/ER_hint_reference.txt index 999fb436..018dfb3a 100644 --- a/ER_hint_reference.txt +++ b/ER_hint_reference.txt @@ -91,6 +91,7 @@ While the exact verbage of location names and item names can be found in the sou Overworld Entrance naming: +Links House: The hero's old residence Turtle Rock: Turtle Rock Main Misery Mire: Misery Mire Ice Palace: Ice Palace @@ -141,6 +142,7 @@ Lake Hylia Fairy: A cave NE of Lake Hylia Light Hype Fairy: The cave south of your house Desert Fairy: The cave near the desert Chicken House: The chicken lady's house +Tavern North: A backdoor Aginahs Cave: The open desert cave Sahasrahlas Hut: The house near armos Cave Shop (Lake Hylia): The cave NW Lake Hylia diff --git a/EntranceShuffle.py b/EntranceShuffle.py index 0d3f502b..2899b28b 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -3364,7 +3364,7 @@ door_addresses = {'Links House': (0x00, (0x0104, 0x2c, 0x0506, 0x0a9a, 0x0832, 0 'Light Hype Fairy': (0x6B, (0x0115, 0x34, 0x00a0, 0x0c04, 0x0900, 0x0c58, 0x0988, 0x0c73, 0x0985, 0x0a, 0xf6, 0x0000, 0x0000)), 'Desert Fairy': (0x71, (0x0115, 0x3a, 0x0000, 0x0e00, 0x0400, 0x0e26, 0x0468, 0x0e6d, 0x0485, 0x00, 0x00, 0x0000, 0x0000)), 'Kings Grave': (0x5A, (0x0113, 0x14, 0x0320, 0x0456, 0x0900, 0x04a6, 0x0998, 0x04c3, 0x097d, 0x0a, 0xf6, 0x0000, 0x0000)), - 'Tavern North': (0x42, (0x0103, 0x18, 0x1440, 0x08a7, 0x0206, 0x08f9, 0x0288, 0x0914, 0x0293, 0xf7, 0x09, 0xFFFF, 0x0000)), # do not use, buggy + 'Tavern North': (0x42, (0x0103, 0x18, 0x1440, 0x08a7, 0x0206, 0x091b, 0x0288, 0x0914, 0x0293, 0xf7, 0x09, 0xFFFF, 0x0000)), 'Chicken House': (0x4A, (0x0108, 0x18, 0x1120, 0x0837, 0x0106, 0x0888, 0x0188, 0x08a4, 0x0193, 0x07, 0xf9, 0x1530, 0x0000)), 'Aginahs Cave': (0x70, (0x010a, 0x30, 0x0656, 0x0cc6, 0x02aa, 0x0d18, 0x0328, 0x0d33, 0x032f, 0x08, 0xf8, 0x0000, 0x0000)), 'Sahasrahlas Hut': (0x44, (0x0105, 0x1e, 0x0610, 0x06d4, 0x0c76, 0x0727, 0x0cf0, 0x0743, 0x0cfb, 0x0a, 0xf6, 0x0000, 0x0000)), @@ -3653,7 +3653,7 @@ ow_prize_table = {'Links House': (0x8b1, 0xb2d), 'Inverted Big Bomb Shop': (0x8b 'Light Hype Fairy': (0x940, 0xc80), 'Desert Fairy': (0x420, 0xe00), 'Kings Grave': (0x920, 0x520), - 'Tavern North': None, # can't mark this one technically + 'Tavern North': (0x270, 0x900), 'Chicken House': (0x120, 0x880), 'Aginahs Cave': (0x2e0, 0xd00), 'Sahasrahlas Hut': (0xcf0, 0x6c0), diff --git a/Main.py b/Main.py index 1c2357bb..19515022 100644 --- a/Main.py +++ b/Main.py @@ -118,6 +118,7 @@ def main(args, seed=None, fish=None): world.treasure_hunt_count = {k: int(v) for k, v in args.triforce_goal.items()} world.treasure_hunt_total = {k: int(v) for k, v in args.triforce_pool.items()} world.shufflelinks = args.shufflelinks.copy() + world.shuffletavern = args.shuffletavern.copy() world.pseudoboots = args.pseudoboots.copy() world.overworld_map = args.overworld_map.copy() world.restrict_boss_items = args.restrict_boss_items.copy() @@ -192,7 +193,7 @@ def main(args, seed=None, fish=None): logger.info(world.fish.translate("cli","cli","shuffling.world")) for player in range(1, world.players + 1): - if world.experimental[player] or (world.customizer and world.customizer.get_entrances()): + if world.experimental[player] or world.shuffle[player] in ['lite', 'lean'] or world.shuffletavern[player] or (world.customizer and world.customizer.get_entrances()): link_entrances_new(world, player) else: if world.mode[player] != 'inverted': diff --git a/README.md b/README.md index f419292f..f2980840 100644 --- a/README.md +++ b/README.md @@ -333,6 +333,11 @@ Start with dash ability, but no way to use boots to accomplish checks Whether to shuffle links house in most ER modes. +``` +--shuffletavern +``` + +Whether to shuffle the back of the tavern in most ER modes. ``` --bombbag diff --git a/Rom.py b/Rom.py index 616b7978..6289874a 100644 --- a/Rom.py +++ b/Rom.py @@ -37,7 +37,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '01166fb16b38b49ef79acc9993dc4f02' +RANDOMIZERBASEHASH = 'e5556450b16f74709c666e419f2a42ad' class JsonRom(object): @@ -730,6 +730,8 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): else: # patch door table rom.write_byte(0xDBB73 + exit.addresses, exit.target) + if exit.name == 'Tavern North': + rom.write_byte(0x157D0, exit.target) if world.mode[player] == 'inverted': patch_shuffled_dark_sanc(world, rom, player) @@ -2048,6 +2050,8 @@ def write_strings(rom, world, player, team): entrances_to_hint.update({'Inverted Links House': 'The hero\'s old residence'}) else: entrances_to_hint.update({'Links House': 'The hero\'s old residence'}) + if world.shuffletavern[player] and world.shuffle[player] not in ['vanilla', 'dungeonssimple', 'dungeonsfull']: + entrances_to_hint.update({'Tavern North': 'A backdoor'}) if world.mode[player] == 'inverted': entrances_to_hint.update({'Inverted Dark Sanctuary': 'The dark sanctuary cave'}) entrances_to_hint.update({'Inverted Big Bomb Shop': 'The old hero\'s dark home'}) diff --git a/data/base2current.bps b/data/base2current.bps index bd6417a47ef665eabc70d7f6055e50cdcb4562a4..d44d2e2d89935611c1bbf1e5eee7fb9a50bb251f 100644 GIT binary patch delta 7654 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 K{mEBG82=AhtZ_&H delta 7235 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 Date: Mon, 13 Jun 2022 20:51:11 +0200 Subject: [PATCH 2/3] Fix Insanity --- source/overworld/EntranceShuffle2.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/overworld/EntranceShuffle2.py b/source/overworld/EntranceShuffle2.py index 79687b38..66c5c131 100644 --- a/source/overworld/EntranceShuffle2.py +++ b/source/overworld/EntranceShuffle2.py @@ -542,8 +542,8 @@ def figure_out_must_exits_same_world(entrances, exits, avail): def must_exits_helper(avail, lw_entrances, dw_entrances): - must_exit_lw = Inverted_LW_Must_Exit if avail.inverted else LW_Must_Exit - must_exit_dw = Inverted_DW_Must_Exit if avail.inverted else DW_Must_Exit + must_exit_lw = (Inverted_LW_Must_Exit if avail.inverted else LW_Must_Exit).copy() + must_exit_dw = (Inverted_DW_Must_Exit if avail.inverted else DW_Must_Exit).copy() if not avail.inverted and not avail.skull_handled: must_exit_dw.append(('Skull Woods Second Section Door (West)', 'Skull Woods Final Section')) must_exit_lw = must_exit_filter(avail, must_exit_lw, lw_entrances) @@ -554,8 +554,8 @@ def must_exits_helper(avail, lw_entrances, dw_entrances): def figure_out_must_exits_cross_world(entrances, exits, avail): multi_exit_caves = figure_out_connectors(exits) - must_exit_lw = Inverted_LW_Must_Exit if avail.inverted else LW_Must_Exit - must_exit_dw = Inverted_DW_Must_Exit if avail.inverted else DW_Must_Exit + must_exit_lw = (Inverted_LW_Must_Exit if avail.inverted else LW_Must_Exit).copy() + must_exit_dw = (Inverted_DW_Must_Exit if avail.inverted else DW_Must_Exit).copy() if not avail.inverted and not avail.skull_handled: must_exit_dw.append(('Skull Woods Second Section Door (West)', 'Skull Woods Final Section')) must_exit = must_exit_filter(avail, must_exit_lw + must_exit_dw, entrances) From 5dd9403afd988e1b0d395296f435cd96f3d12f61 Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 11 Aug 2022 15:38:15 -0600 Subject: [PATCH 3/3] Correct rom for tavern work --- Rom.py | 2 +- data/base2current.bps | Bin 93041 -> 93253 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index d63ac585..2b76e5e4 100644 --- a/Rom.py +++ b/Rom.py @@ -37,7 +37,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'e33204b6023f07025eba16874308f57d' +RANDOMIZERBASEHASH = 'a8b35a6396c104e9419ff1e46342e4db' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index fc22d9c3956780075f6752188bd52fca2ae6c189..a5f9cc86e0647cb500a73cc56d94863bd395834d 100644 GIT binary patch delta 16205 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