From 64b0740e502862b53c09074b7f1bbc77565efeeb Mon Sep 17 00:00:00 2001 From: aerinon Date: Sat, 12 Mar 2022 12:33:14 -0700 Subject: [PATCH] Various shuffled links house fixes --- DoorShuffle.py | 4 ++-- EntranceShuffle.py | 8 +++++++- RELEASENOTES.md | 2 +- Regions.py | 12 ++++++------ Rules.py | 3 +++ 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 956a91f4..f4ee9cfa 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -414,7 +414,7 @@ def choose_portals(world, player): info.sole_entrance = inaccessible_portals[0] info.required_passage.clear() else: - raise Exception('please inspect this case') + raise Exception(f'No reachable entrances for {dungeon}') if len(reachable_portals) == 1: info.sole_entrance = reachable_portals[0] info_map[dungeon] = info @@ -521,7 +521,7 @@ def analyze_portals(world, player): info.sole_entrance = inaccessible_portals[0] info.required_passage.clear() else: - raise Exception('please inspect this case') + raise Exception(f'No reachable entrances for {dungeon}') if len(reachable_portals) == 1: info.sole_entrance = reachable_portals[0] if world.intensity[player] < 2 and world.doorShuffle[player] == 'basic' and dungeon == 'Desert Palace': diff --git a/EntranceShuffle.py b/EntranceShuffle.py index 7ed9ac44..d1bfdbb8 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -3186,7 +3186,13 @@ mandatory_connections = [('Links House S&Q', 'Links House'), ('Graveyard Ledge Mirror Spot', 'Graveyard Ledge'), ('Ganon Drop', 'Bottom of Pyramid'), ('Pyramid Drop', 'East Dark World'), - ('Maze Race Ledge Drop', 'Light World') + ('Maze Race Ledge Drop', 'Light World'), + ('Graveyard Ledge Drop', 'Light World'), + ('Cave 45 Ledge Drop', 'Light World'), + ('Checkerboard Ledge Drop', 'Light World'), + ('Desert Ledge Drop', 'Light World'), + ('Hyrule Castle Main Gate (North)', 'Light World'), + ('Hyrule Castle Ledge Drop', 'Light World'), ] inverted_mandatory_connections = [('Links House S&Q', 'Inverted Links House'), diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 02c5f53f..b67ae9bf 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -152,7 +152,7 @@ Same as above but both small keys and bigs keys of the dungeon are not allowed o * Added MSU Resume option * Ensured pots in TR Dark Ride need lamp * Fix for GT Crystal Conveyor not requiring Somaria/Bombs to get through - * Fix for Links House being at Maze Race (did not generate) + * Fixes for Links House being at certain entrances (did not generate) * 1.0.1.10 * More location count fixes * Add major_only algorithm to code diff --git a/Regions.py b/Regions.py index 30075c66..f8cb447b 100644 --- a/Regions.py +++ b/Regions.py @@ -74,9 +74,9 @@ def create_regions(world, player): create_cave_region(player, 'Lost Woods Hideout (bottom)', 'a drop\'s exit', None, ['Lost Woods Hideout Exit']), create_cave_region(player, 'Lumberjack Tree (top)', 'a drop\'s exit', ['Lumberjack Tree'], ['Lumberjack Tree (top to bottom)']), create_cave_region(player, 'Lumberjack Tree (bottom)', 'a drop\'s exit', None, ['Lumberjack Tree Exit']), - create_lw_region(player, 'Cave 45 Ledge', None, ['Cave 45']), + create_lw_region(player, 'Cave 45 Ledge', None, ['Cave 45', 'Cave 45 Ledge Drop']), create_cave_region(player, 'Cave 45', 'a cave with an item', ['Cave 45']), - create_lw_region(player, 'Graveyard Ledge', None, ['Graveyard Cave']), + create_lw_region(player, 'Graveyard Ledge', None, ['Graveyard Cave', 'Graveyard Ledge Drop']), create_cave_region(player, 'Graveyard Cave', 'a cave with an item', ['Graveyard Cave']), create_cave_region(player, 'Checkerboard Cave', 'a cave with an item', ['Checkerboard Cave']), create_cave_region(player, 'Long Fairy Cave', 'a fairy fountain'), @@ -96,15 +96,15 @@ def create_regions(world, player): create_cave_region(player, 'Two Brothers House', 'a connector', None, ['Two Brothers House Exit (East)', 'Two Brothers House Exit (West)']), create_lw_region(player, 'Maze Race Ledge', ['Maze Race'], ['Two Brothers House (West)', 'Maze Race Ledge Drop'], 'a race against time'), create_cave_region(player, '50 Rupee Cave', 'a cave with some cash'), - create_lw_region(player, 'Desert Ledge', ['Desert Ledge'], ['Desert Palace Entrance (North) Rocks', 'Desert Palace Entrance (West)'], 'the desert ledge'), - create_lw_region(player, 'Desert Ledge (Northeast)', None, ['Checkerboard Cave']), + create_lw_region(player, 'Desert Ledge', ['Desert Ledge'], ['Desert Palace Entrance (North) Rocks', 'Desert Palace Entrance (West)', 'Desert Ledge Drop'], 'the desert ledge'), + create_lw_region(player, 'Desert Ledge (Northeast)', None, ['Checkerboard Cave', 'Checkerboard Ledge Drop']), create_lw_region(player, 'Desert Palace Stairs', None, ['Desert Palace Entrance (South)']), create_lw_region(player, 'Desert Palace Lone Stairs', None, ['Desert Palace Stairs Drop', 'Desert Palace Entrance (East)'], 'a sandy vista'), create_lw_region(player, 'Desert Palace Entrance (North) Spot', None, ['Desert Palace Entrance (North)', 'Desert Ledge Return Rocks'], 'the desert ledge'), create_lw_region(player, 'Master Sword Meadow', ['Master Sword Pedestal']), create_cave_region(player, 'Lost Woods Gamble', 'a game of chance'), - create_lw_region(player, 'Hyrule Castle Courtyard', None, ['Hyrule Castle Secret Entrance Stairs', 'Hyrule Castle Entrance (South)']), - create_lw_region(player, 'Hyrule Castle Ledge', None, ['Hyrule Castle Entrance (East)', 'Hyrule Castle Entrance (West)', 'Agahnims Tower', 'Hyrule Castle Ledge Courtyard Drop'], 'the castle rampart'), + create_lw_region(player, 'Hyrule Castle Courtyard', None, ['Hyrule Castle Secret Entrance Stairs', 'Hyrule Castle Entrance (South)', 'Hyrule Castle Main Gate (North)']), + create_lw_region(player, 'Hyrule Castle Ledge', None, ['Hyrule Castle Entrance (East)', 'Hyrule Castle Entrance (West)', 'Agahnims Tower', 'Hyrule Castle Ledge Courtyard Drop', 'Hyrule Castle Ledge Drop'], 'the castle rampart'), create_dungeon_region(player, 'Sewer Drop', 'a drop\'s exit', None, ['Sewer Drop']), # This exists only to be referenced for access checks create_cave_region(player, 'Old Man Cave', 'a connector', ['Old Man'], ['Old Man Cave Exit (East)']), diff --git a/Rules.py b/Rules.py index 05f05f70..aa39a467 100644 --- a/Rules.py +++ b/Rules.py @@ -817,6 +817,7 @@ def default_rules(world, player): set_rule(world.get_entrance('Palace of Darkness', player), lambda state: state.has_Pearl(player)) # kiki needs pearl set_rule(world.get_entrance('Hyrule Castle Ledge Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Hyrule Castle Main Gate', player), lambda state: state.has_Mirror(player)) + set_rule(world.get_entrance('Hyrule Castle Main Gate (North)', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Dark Lake Hylia Drop (East)', player), lambda state: (state.has_Pearl(player) and state.has('Flippers', player) or state.has_Mirror(player))) # Overworld Bunny Revival set_rule(world.get_location('Bombos Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player)) set_rule(world.get_entrance('Dark Lake Hylia Drop (South)', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # ToDo any fake flipper set up? @@ -1245,6 +1246,8 @@ def standard_rules(world, player): entrance = world.get_portal(portal_name, player).door.entrance set_rule(entrance, lambda state: state.has('Zelda Delivered', player)) set_rule(world.get_entrance('Sanctuary Exit', player), lambda state: state.has('Zelda Delivered', player)) + set_rule(world.get_entrance('Hyrule Castle Ledge Drop', player), lambda state: state.has('Zelda Delivered', player)) + set_rule(world.get_entrance('Hyrule Castle Main Gate (North)', player), lambda state: state.has('Zelda Delivered', player)) # zelda should be saved before agahnim is in play add_rule(world.get_location('Agahnim 1', player), lambda state: state.has('Zelda Delivered', player))