diff --git a/EntranceShuffle.py b/EntranceShuffle.py index 69926ee5..25963fb9 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -1910,9 +1910,7 @@ def connect_random(world, exitlist, targetlist, player, two_way=False): def connect_mandatory_exits(world, entrances, caves, must_be_exits, player): - """This works inplace""" - random.shuffle(entrances) - random.shuffle(caves) + # Keeps track of entrances that cannot be used to access each exit / cave if world.mode[player] == 'inverted': invalid_connections = Inverted_Must_Exit_Invalid_Connections.copy() @@ -1920,6 +1918,18 @@ def connect_mandatory_exits(world, entrances, caves, must_be_exits, player): invalid_connections = Must_Exit_Invalid_Connections.copy() invalid_cave_connections = defaultdict(set) + if world.logic[player] in ['owglitches', 'nologic']: + import OverworldGlitchRules + for entrance in OverworldGlitchRules.get_non_mandatory_exits(world.mode[player] == 'inverted'): + invalid_connections[entrance] = set() + if entrance in must_be_exits: + must_be_exits.remove(entrance) + entrances.append(entrance) + + """This works inplace""" + random.shuffle(entrances) + random.shuffle(caves) + # Handle inverted Aga Tower - if it depends on connections, then so does Hyrule Castle Ledge if world.mode[player] == 'inverted': for entrance in invalid_connections: diff --git a/OverworldGlitchRules.py b/OverworldGlitchRules.py index 5c8cd156..9b1250d3 100644 --- a/OverworldGlitchRules.py +++ b/OverworldGlitchRules.py @@ -92,6 +92,37 @@ def get_superbunny_accessible_locations(): yield location +def get_non_mandatory_exits(inverted): + """ + Entrances that can be reached with full equipment using overworld glitches and don't need to be an exit. + The following are still be mandatory exits: + + Open: + Turtle Rock Isolated Ledge Entrance + Skull Woods Second Section Door (West) (or Skull Woods Final Section) + + Inverted: + Two Brothers House (West) + Desert Palace Entrance (East) + """ + + yield 'Bumper Cave (Top)' + yield 'Death Mountain Return Cave (West)' + yield 'Hookshot Cave Back Entrance' + + if inverted: + yield 'Desert Palace Entrance (North)' + yield 'Desert Palace Entrance (West)' + yield 'Inverted Ganons Tower' + yield 'Hyrule Castle Entrance (West)' + yield 'Hyrule Castle Entrance (East)' + else: + yield 'Dark Death Mountain Ledge (West)' + yield 'Dark Death Mountain Ledge (East)' + yield 'Mimic Cave' + yield 'Desert Palace Entrance (East)' + + def get_boots_clip_exits_lw(inverted = False): """ Special Light World region exits that require boots clips.