From 578c4d8065015e10822d1d5fed223f9c28b5fc64 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sat, 30 Jul 2022 09:35:25 -0500 Subject: [PATCH 1/5] Lite/Lean now considers Cave Pottery options --- EntranceShuffle.py | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/EntranceShuffle.py b/EntranceShuffle.py index dc48acdc..b15a7438 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -73,7 +73,7 @@ def link_entrances(world, player): # if we do not shuffle, set default connections if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull']: - for entrancename, exitname in default_connections + drop_connections + default_item_connections + default_shop_connections: + for entrancename, exitname in default_connections + default_pot_connections + drop_connections + default_item_connections + default_shop_connections: connect_logical(world, entrancename, exitname, player, exitname.endswith(' Exit')) for entrancename, exitname in default_connector_connections + dropexit_connections: connect_logical(world, entrancename, exitname, player, True) @@ -341,7 +341,7 @@ def link_entrances(world, player): # place remaining doors connect_doors(world, list(entrance_pool), list(exit_pool), player) elif world.shuffle[player] == 'lite': - for entrancename, exitname in default_connections + ([] if world.shopsanity[player] else default_shop_connections): + for entrancename, exitname in default_connections + ([] if world.shopsanity[player] else default_shop_connections) + ([] if world.pottery[player] not in ['none', 'keys', 'dungeon'] else default_pot_connections): connect_logical(world, entrancename, exitname, player, False) if invFlag: world.get_entrance('Dark Sanctuary Hint Exit', player).connect(world.get_entrance('Dark Sanctuary Hint', player).parent_region) @@ -433,7 +433,7 @@ def link_entrances(world, player): # place remaining doors connect_doors(world, list(entrance_pool), list(exit_pool), player) elif world.shuffle[player] == 'lean': - for entrancename, exitname in default_connections + ([] if world.shopsanity[player] else default_shop_connections): + for entrancename, exitname in default_connections + ([] if world.shopsanity[player] else default_shop_connections) + ([] if world.pottery[player] not in ['none', 'keys', 'dungeon'] else default_pot_connections): connect_logical(world, entrancename, exitname, player, False) if invFlag: world.get_entrance('Dark Sanctuary Hint Exit', player).connect(world.get_entrance('Dark Sanctuary Hint', player).parent_region) @@ -1356,7 +1356,7 @@ def place_links_house(world, player, ignore_list=[]): else: links_house_doors = [i for i in get_starting_entrances(world, player, world.shuffle[player] != 'insanity') if i in entrance_pool] if world.shuffle[player] in ['lite', 'lean']: - links_house_doors = [e for e in links_house_doors if e in list(zip(*(default_item_connections + (default_shop_connections if world.shopsanity[player] else []))))[0]] + links_house_doors = [e for e in links_house_doors if e in list(zip(*(default_item_connections + (default_shop_connections if world.shopsanity[player] else []) + (default_pot_connections if world.pottery[player] not in ['none', 'keys', 'dungeon'] else []))))[0]] #TODO: Need to improve Links House placement to choose a better sector or eliminate entrances that are after ledge drops links_house_doors = [e for e in links_house_doors if e not in ignore_list] @@ -1404,7 +1404,7 @@ def place_blacksmith(world, links_house, player): sanc_region = world.get_entrance('Sanctuary Exit', player).connected_region.name blacksmith_doors = list(OrderedDict.fromkeys(blacksmith_doors + list(build_accessible_entrance_list(world, sanc_region, player, assumed_inventory, False, True, True)))) if world.shuffle[player] in ['lite', 'lean']: - blacksmith_doors = [e for e in blacksmith_doors if e in list(zip(*(default_item_connections + (default_shop_connections if world.shopsanity[player] else []))))[0]] + blacksmith_doors = [e for e in blacksmith_doors if e in list(zip(*(default_item_connections + (default_shop_connections if world.shopsanity[player] else []) + (default_pot_connections if world.pottery[player] not in ['none', 'keys', 'dungeon'] else []))))[0]] assert len(blacksmith_doors), 'No valid candidates to place Blacksmiths Hut' blacksmith_hut = random.choice(blacksmith_doors) @@ -1472,7 +1472,7 @@ def junk_fill_inaccessible(world, player): if not exit.connected_region and exit.name in entrance_pool: inaccessible_entrances.append(exit.name) - junk_locations = [e for e in list(zip(*default_connections))[1] if e in exit_pool] + junk_locations = [e for e in list(zip(*(default_connections + ([] if world.pottery[player] not in ['none', 'keys', 'dungeon'] else default_pot_connections))))[1] if e in exit_pool] random.shuffle(junk_locations) for entrance in inaccessible_entrances: connect_entrance(world, entrance, junk_locations.pop(), player) @@ -2089,41 +2089,43 @@ mandatory_connections = [('Old Man S&Q', 'Old Man House'), ] # non-shuffled entrance links -default_connections = [('Lumberjack House', 'Lumberjack House'), - ('Bonk Fairy (Light)', 'Bonk Fairy (Light)'), +default_connections = [('Bonk Fairy (Light)', 'Bonk Fairy (Light)'), ('Lake Hylia Fairy', 'Lake Hylia Healer Fairy'), ('Lake Hylia Fortune Teller', 'Lake Hylia Fortune Teller'), ('Light Hype Fairy', 'Swamp Healer Fairy'), ('Desert Fairy', 'Desert Healer Fairy'), ('Lost Woods Gamble', 'Lost Woods Gamble'), ('Fortune Teller (Light)', 'Fortune Teller (Light)'), - ('Snitch Lady (East)', 'Snitch Lady (East)'), - ('Snitch Lady (West)', 'Snitch Lady (West)'), ('Bush Covered House', 'Bush Covered House'), - ('Tavern (Front)', 'Tavern (Front)'), - ('Light World Bomb Hut', 'Light World Bomb Hut'), ('Long Fairy Cave', 'Long Fairy Cave'), # near East Light World Teleporter ('Good Bee Cave', 'Good Bee Cave'), - ('20 Rupee Cave', '20 Rupee Cave'), - ('50 Rupee Cave', '50 Rupee Cave'), ('Kakariko Gamble Game', 'Kakariko Gamble Game'), - ('Hookshot Fairy', 'Hookshot Fairy'), ('East Dark World Hint', 'East Dark World Hint'), - ('Palace of Darkness Hint', 'Palace of Darkness Hint'), ('Dark Lake Hylia Fairy', 'Dark Lake Hylia Healer Fairy'), ('Dark Lake Hylia Ledge Fairy', 'Dark Lake Hylia Ledge Healer Fairy'), - ('Dark Lake Hylia Ledge Spike Cave', 'Dark Lake Hylia Ledge Spike Cave'), ('Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Ledge Hint'), ('Bonk Fairy (Dark)', 'Bonk Fairy (Dark)'), ('Dark Sanctuary Hint', 'Dark Sanctuary Hint'), ('Fortune Teller (Dark)', 'Fortune Teller (Dark)'), ('Archery Game', 'Archery Game'), - ('Dark Desert Hint', 'Dark Desert Hint'), ('Dark Desert Fairy', 'Dark Desert Healer Fairy'), ('Dark Death Mountain Fairy', 'Dark Death Mountain Healer Fairy'), ] +default_pot_connections = [('Lumberjack House', 'Lumberjack House'), + ('Snitch Lady (East)', 'Snitch Lady (East)'), + ('Snitch Lady (West)', 'Snitch Lady (West)'), + ('Tavern (Front)', 'Tavern (Front)'), + ('Light World Bomb Hut', 'Light World Bomb Hut'), + ('20 Rupee Cave', '20 Rupee Cave'), + ('50 Rupee Cave', '50 Rupee Cave'), + ('Hookshot Fairy', 'Hookshot Fairy'), + ('Palace of Darkness Hint', 'Palace of Darkness Hint'), + ('Dark Lake Hylia Ledge Spike Cave', 'Dark Lake Hylia Ledge Spike Cave'), + ('Dark Desert Hint', 'Dark Desert Hint') + ] + default_connector_connections = [('Old Man Cave (West)', 'Old Man Cave Exit (West)'), ('Old Man Cave (East)', 'Old Man Cave Exit (East)'), ('Old Man House (Bottom)', 'Old Man House Exit (Bottom)'), From 2c9efecd3835f01b5efad1f31cc49874a5b41531 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 31 Jul 2022 21:56:21 -0500 Subject: [PATCH 2/5] Ensure GT Bosses are unique in Unique Boss Shuffle --- Bosses.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Bosses.py b/Bosses.py index 53393d5f..a42b5176 100644 --- a/Bosses.py +++ b/Bosses.py @@ -202,12 +202,14 @@ def place_bosses(world, player): place_boss(boss, level, loc, loc_text, world, player) elif world.boss_shuffle[player] == 'unique': bosses = list(placeable_bosses) + gt_bosses = list() for [loc, level] in boss_locations: loc_text = loc + (' ('+level+')' if level else '') try: if level: - boss = random.choice([b for b in placeable_bosses if can_place_boss(world, player, b, loc, level)]) + boss = random.choice([b for b in placeable_bosses if can_place_boss(world, player, b, loc, level) and b not in gt_bosses]) + gt_bosses.append(boss) else: boss = random.choice([b for b in bosses if can_place_boss(world, player, b, loc, level)]) bosses.remove(boss) From 57209296e8a5c76da16473c62bc4496bd3c6f625 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 31 Jul 2022 22:35:00 -0500 Subject: [PATCH 3/5] Necessary ROM Fixes - Changed Inverted MSU-1 to trigger opposite world track changes - Fixed mirror portal issue in Inverted - Fixed TR Peg Puzzle issue --- Rom.py | 2 +- asm/owrando.asm | 8 ++++---- data/base2current.bps | Bin 104326 -> 104342 bytes 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Rom.py b/Rom.py index 688c0274..63b5577c 100644 --- a/Rom.py +++ b/Rom.py @@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '0574a782e225a87b90637db0847c5ae0' +RANDOMIZERBASEHASH = '92a390672efafb652774c1514ac66c4b' class JsonRom(object): diff --git a/asm/owrando.asm b/asm/owrando.asm index 07ab9f55..04ffd047 100644 --- a/asm/owrando.asm +++ b/asm/owrando.asm @@ -270,11 +270,11 @@ OWMirrorSpriteRestore: } OWLightWorldOrCrossed: { - lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq + + lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq ++ lda.l InvertedMode : beq + - lda #$40 : rtl - + lda #$00 : rtl - + jsl OWWorldCheck : rtl + lda #$40 + + rtl + ++ jsl OWWorldCheck : rtl } OWFluteCancel: diff --git a/data/base2current.bps b/data/base2current.bps index b48472f343c2e495ca98cb4f09ae31edac2e3b87..c6d73f6506521d127b1a55f7967369a005601735 100644 GIT binary patch delta 3836 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 delta 3828 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 From baaa6fcfc7ff1097ab05483cd525ed1657cb3d43 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 31 Jul 2022 22:55:36 -0500 Subject: [PATCH 4/5] Prevent unwanted 'allowed' Crossed OWR option --- BaseClasses.py | 2 +- Mystery.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/BaseClasses.py b/BaseClasses.py index 551d4957..e37b8d47 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -3123,7 +3123,7 @@ class Spoiler(object): outfile.write('Pseudoboots:'.ljust(line_width) + '%s\n' % yn(self.metadata['pseudoboots'][player])) outfile.write('Overworld Layout Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['ow_shuffle'][player]) outfile.write('Crossed OW:'.ljust(line_width) + '%s\n' % self.metadata['ow_crossed'][player]) - if self.metadata['ow_shuffle'][player] != 'vanilla' or self.metadata['ow_crossed'][player] not in ['none', 'allowed']: + if self.metadata['ow_shuffle'][player] != 'vanilla' or self.metadata['ow_crossed'][player] != 'none': outfile.write('Keep Similar OW Edges Together:'.ljust(line_width) + '%s\n' % yn(self.metadata['ow_keepsimilar'][player])) outfile.write('Swapped OW (Mixed):'.ljust(line_width) + '%s\n' % yn(self.metadata['ow_mixed'][player])) outfile.write('Whirlpool Shuffle:'.ljust(line_width) + '%s\n' % yn(self.metadata['ow_whirlpool'][player])) diff --git a/Mystery.py b/Mystery.py index 1a02d10d..e1be0eb7 100644 --- a/Mystery.py +++ b/Mystery.py @@ -168,7 +168,9 @@ def roll_settings(weights): overworld_shuffle = get_choice('overworld_shuffle') ret.ow_shuffle = overworld_shuffle if overworld_shuffle != 'none' else 'vanilla' + valid_options = {'none', 'polar', 'grouped', 'limited', 'chaos'} ret.ow_crossed = get_choice('overworld_crossed') + ret.ow_crossed = ret.ow_crossed if ret.ow_crossed in valid_options else 'none' ret.ow_keepsimilar = get_choice('overworld_keepsimilar') == 'on' ret.ow_mixed = get_choice('overworld_swap') == 'on' ret.ow_whirlpool = get_choice('whirlpool_shuffle') == 'on' From ae9ba04f248e4460471c5b3ccda660cf38a6ee59 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 31 Jul 2022 23:05:38 -0500 Subject: [PATCH 5/5] Version bump 0.2.9.1 --- CHANGELOG.md | 8 ++++++++ OverworldShuffle.py | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe3f74df..1755913e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +### 0.2.9.1 +- Lite/Lean ER now includes Cave Pot locations with various Pottery options +- Changed Unique Boss Shuffle so that GT Bosses are unique amongst themselves +- Changed MSU-1 in Inverted to trigger DW2 track with Aga1 kill and LW2 with 7 crystals +- Fixed disappearing mirror portal issue in Inverted (Hopefully for good) +- Fixed issue with TR Peg Puzzle not spawning portal in some Mixed OWR scenarios +- Removed ability to roll Myserty with phantom Crossed OWR options + ### 0.2.9.0 - Added Bonk Drop Shuffle - Fixed disappearing mirror portal issue in Inverted+Crossed OWR diff --git a/OverworldShuffle.py b/OverworldShuffle.py index f5812ffc..1e819ae4 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -6,8 +6,10 @@ from Regions import mark_dark_world_regions, mark_light_world_regions from OWEdges import OWTileRegions, OWEdgeGroups, OWExitTypes, OpenStd, parallel_links, IsParallel from Utils import bidict -version_number = '0.2.9.0' +version_number = '0.2.9.1' +# branch indicator is intentionally different across branches version_branch = '-u' + __version__ = '%s%s' % (version_number, version_branch) def link_overworld(world, player):