From 712188251d4c16dba541d9caa514a4c94a2236cd Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 4 Sep 2023 19:32:34 -0500 Subject: [PATCH] Restructuring parallel_links in OWR --- OverworldShuffle.py | 48 +++++++-------- docs/ideas/shufflehorizontal.yaml | 72 ++++++++++++++++++++++ docs/ideas/shufflelargescreens.yaml | 96 +++++++++++++++++++++++++++++ docs/ideas/shufflelight.yaml | 90 +++++++++++++++++++++++++++ docs/ideas/shufflesmallscreens.yaml | 58 +++++++++++++++++ docs/ideas/shufflevertical.yaml | 81 ++++++++++++++++++++++++ 6 files changed, 421 insertions(+), 24 deletions(-) create mode 100644 docs/ideas/shufflehorizontal.yaml create mode 100644 docs/ideas/shufflelargescreens.yaml create mode 100644 docs/ideas/shufflelight.yaml create mode 100644 docs/ideas/shufflesmallscreens.yaml create mode 100644 docs/ideas/shufflevertical.yaml diff --git a/OverworldShuffle.py b/OverworldShuffle.py index d70ae9f5..59a610ee 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -14,17 +14,19 @@ version_branch = '-u' __version__ = '%s%s' % (version_number, version_branch) +parallel_links_new = None # needs to be globally available, reset every new generation/player + def link_overworld(world, player): + global parallel_links_new + # setup mandatory connections for exitname, regionname in mandatory_connections: connect_simple(world, exitname, regionname, player) def performSwap(groups, swaps): def getParallel(edgename): - if edgename in parallel_links: - return parallel_links[edgename] - elif edgename in parallel_links.inverse: - return parallel_links.inverse[edgename][0] + if edgename in parallel_links_new: + return parallel_links_new[edgename] else: raise Exception('No parallel edge found for edge %s', edgename) @@ -112,16 +114,19 @@ def link_overworld(world, player): swapped_edges = list() # restructure Maze Race/Suburb/Frog/Dig Game manually due to NP/P relationship + parallel_links_new = bidict(parallel_links) # shallow copy is enough (deep copy is broken) if world.owKeepSimilar[player]: + del parallel_links_new['Maze Race ES'] + del parallel_links_new['Kakariko Suburb WS'] for group in trimmed_groups.keys(): (std, region, axis, terrain, parallel, _) = group if parallel == IsParallel.Yes: (forward_edges, back_edges) = trimmed_groups[group] if ['Maze Race ES'] in forward_edges: - forward_edges = list(filter((['Maze Race ES']).__ne__, forward_edges)) + forward_edges.remove(['Maze Race ES']) trimmed_groups[(std, region, axis, terrain, IsParallel.No, 1)][0].append(['Maze Race ES']) if ['Kakariko Suburb WS'] in back_edges: - back_edges = list(filter((['Kakariko Suburb WS']).__ne__, back_edges)) + back_edges.remove(['Kakariko Suburb WS']) trimmed_groups[(std, region, axis, terrain, IsParallel.No, 1)][1].append(['Kakariko Suburb WS']) trimmed_groups[group] = (forward_edges, back_edges) else: @@ -129,14 +134,15 @@ def link_overworld(world, player): (std, region, axis, terrain, _, _) = group (forward_edges, back_edges) = trimmed_groups[group] if ['Dig Game EC', 'Dig Game ES'] in forward_edges: - forward_edges = list(filter((['Dig Game EC', 'Dig Game ES']).__ne__, forward_edges)) + forward_edges.remove(['Dig Game EC', 'Dig Game ES']) trimmed_groups[(std, region, axis, terrain, IsParallel.Yes, 1)][0].append(['Dig Game ES']) trimmed_groups[(std, region, axis, terrain, IsParallel.No, 1)][0].append(['Dig Game EC']) if ['Frog WC', 'Frog WS'] in back_edges: - back_edges = list(filter((['Frog WC', 'Frog WS']).__ne__, back_edges)) + back_edges.remove(['Frog WC', 'Frog WS']) trimmed_groups[(std, region, axis, terrain, IsParallel.Yes, 1)][1].append(['Frog WS']) trimmed_groups[(std, region, axis, terrain, IsParallel.No, 1)][1].append(['Frog WC']) trimmed_groups[group] = (forward_edges, back_edges) + parallel_links_new = {**dict(parallel_links_new), **dict({e:p[0] for e, p in parallel_links_new.inverse.items()})} connected_edges = [] if world.owShuffle[player] != 'vanilla': @@ -201,19 +207,13 @@ def link_overworld(world, player): logging.getLogger('').debug('Crossing overworld edges') crossed_edges = list() - # more Maze Race/Suburb/Frog/Dig Game fixes - parallel_links_new = bidict(parallel_links) # shallow copy is enough (deep copy is broken) - if world.owKeepSimilar[player]: - del parallel_links_new['Maze Race ES'] - del parallel_links_new['Kakariko Suburb WS'] - #TODO: Revisit with changes to Limited/Allowed if world.owCrossed[player] not in ['none', 'grouped', 'polar', 'chaos']: for edge in swapped_edges: - if edge not in parallel_links_new and edge not in parallel_links_new.inverse: crossed_edges.append(edge) if world.owCrossed[player] in ['grouped', 'limited'] or (world.owShuffle[player] == 'vanilla' and world.owCrossed[player] == 'chaos'): + if edge not in parallel_links_new: if world.owCrossed[player] == 'grouped': # the idea is to XOR the new flips with the ones from Mixed so that non-parallel edges still work # Polar corresponds to Grouped with no flips in ow_crossed_tiles_mask @@ -244,13 +244,13 @@ def link_overworld(world, player): (mode, wrld, dir, terrain, parallel, count) = group if wrld == WorldType.Light and mode != OpenStd.Standard: for (forward_set, back_set) in zip(trimmed_groups[group][0], trimmed_groups[group][1]): - if forward_set[0] in parallel_links_new or forward_set[0] in parallel_links_new.inverse: if world.owKeepSimilar[player]: if world.owCrossed[player] == 'chaos' and random.randint(0, 1): for edge in forward_set: crossed_edges.append(edge) elif world.owCrossed[player] == 'limited': crossed_candidates.append(forward_set) + if forward_set[0] in parallel_links_new: else: for edge in forward_set: if world.owCrossed[player] == 'chaos' and random.randint(0, 1): @@ -667,12 +667,11 @@ def connect_custom(world, connected_edges, groups, player): remove_pair_from_pool(edgename1, edgename2) connect_two_way(world, edgename1, edgename2, player, connected_edges) # resolve parallel - if (world.owShuffle[player] == 'parallel' and - (edgename1 in parallel_links.keys() or edgename1 in parallel_links.inverse.keys())): - parallel_forward_edge = parallel_links[edgename1] if edgename1 in parallel_links.keys() else parallel_links.inverse[edgename1][0] - parallel_back_edge = parallel_links[edgename2] if edgename2 in parallel_links.keys() else parallel_links.inverse[edgename2][0] remove_pair_from_pool(parallel_forward_edge, parallel_back_edge) elif not edge1.dest or not edge2.dest or edge1.dest.name != edgename2 or edge2.dest.name != edgename1: + if world.owShuffle[player] == 'parallel' and edge1.name in parallel_links_new: + parallel_forward_edge = parallel_links_new[edge1.name] + parallel_back_edge = parallel_links_new[edge2.name] raise GenerationException('OW Edge already connected: \'%s\' <-> \'%s\'', edgename1, edgename2) # connect leftover similars for forward_pool, back_pool in unresolved_similars: @@ -716,10 +715,10 @@ def connect_two_way(world, edgename1, edgename2, player, connected_edges=None): # connecting parallel connections if world.owShuffle[player] in ['vanilla', 'parallel']: - if (edgename1 in parallel_links.keys() or edgename1 in parallel_links.inverse.keys()): + if edgename1 in parallel_links_new: try: - parallel_forward_edge = parallel_links[edgename1] if edgename1 in parallel_links.keys() else parallel_links.inverse[edgename1][0] - parallel_back_edge = parallel_links[edgename2] if edgename2 in parallel_links.keys() else parallel_links.inverse[edgename2][0] + parallel_forward_edge = parallel_links_new[edgename1] + parallel_back_edge = parallel_links_new[edgename2] if not (parallel_forward_edge in connected_edges) and not (parallel_back_edge in connected_edges): connect_two_way(world, parallel_forward_edge, parallel_back_edge, player, connected_edges) except KeyError: @@ -2075,7 +2074,8 @@ mirror_connections = { } parallelsimilar_connections = [('Maze Race ES', 'Kakariko Suburb WS'), - ('Dig Game EC', 'Frog WC') + ('Dig Game EC', 'Frog WC'), + ('Dig Game ES', 'Frog WS') ] # non shuffled overworld diff --git a/docs/ideas/shufflehorizontal.yaml b/docs/ideas/shufflehorizontal.yaml new file mode 100644 index 00000000..63246b32 --- /dev/null +++ b/docs/ideas/shufflehorizontal.yaml @@ -0,0 +1,72 @@ +settings: + 1: + ow_mixed: false +ow-edges: + 1: + two-way: + Lost Woods NW: Master Sword Meadow SC + Lost Woods SW: Lost Woods Pass NW + Lost Woods SC: Lost Woods Pass NE + Lost Woods SE: Kakariko Fortune NE + Skull Woods SW: Skull Woods Pass NW + Skull Woods SC: Skull Woods Pass NE + Skull Woods SE: Dark Fortune NE + Lumberjack SW: Mountain Pass NW + Dark Lumberjack SW: Bumper Cave NW + Mountain Pass SE: Kakariko Pond NE + Bumper Cave SE: Outcast Pond NE + Zora Waterfall NE: Zoras Domain SW + Zora Waterfall SE: Zora Approach NE + Catfish SE: Catfish Approach NE + Lost Woods Pass SW: Kakariko NW + Lost Woods Pass SE: Kakariko NC + Skull Woods Pass SW: Village of Outcasts NW + Skull Woods Pass SE: Village of Outcasts NC + Kakariko Fortune SC: Kakariko NE + Dark Fortune SC: Village of Outcasts NE + Kakariko Pond SW: Forgotten Forest NW + Kakariko Pond SE: Forgotten Forest NE + Outcast Pond SW: Shield Shop NW + Outcast Pond SE: Shield Shop NE + River Bend SW: Wooden Bridge NW + River Bend SC: Wooden Bridge NC + River Bend SE: Wooden Bridge NE + Qirn Jump SW: Broken Bridge NW + Qirn Jump SC: Broken Bridge NC + Qirn Jump SE: Broken Bridge NE + Kakariko SE: Kakariko Suburb NE + Village of Outcasts SE: Frog NE + Hyrule Castle SW: Central Bonk Rocks NW + Hyrule Castle SE: Links House NE + Pyramid SW: Dark Bonk Rocks NW + Pyramid SE: Big Bomb Shop NE + Wooden Bridge SW: Sand Dunes NW + Broken Bridge SW: Dark Dunes NW + Eastern Palace SW: Tree Line NW + Eastern Palace SE: Eastern Nook NE + Palace of Darkness SW: Dark Tree Line NW + Palace of Darkness SE: Palace of Darkness Nook NE + Sand Dunes SC: Stone Bridge NC + Dark Dunes SC: Hammer Bridge NC + Flute Boy SW: Flute Boy Approach NW + Flute Boy SC: Flute Boy Approach NC + Stumpy SW: Stumpy Approach NW + Stumpy SC: Stumpy Approach NC + Central Bonk Rocks SW: C Whirlpool NW + Dark Bonk Rocks SW: Dark C Whirlpool NW + Links House SC: Statues NC + Big Bomb Shop SC: Hype Cave NC + Stone Bridge SC: Lake Hylia NW + Hammer Bridge SC: Ice Lake NW + Tree Line SC: Lake Hylia NC + Tree Line SE: Lake Hylia NE + Dark Tree Line SC: Ice Lake NC + Dark Tree Line SE: Ice Lake NE + C Whirlpool SC: Dam NC + Dark C Whirlpool SC: Swamp NC + Statues SC: South Pass NC + Hype Cave SC: Dark South Pass NC + Ice Cave SW: Octoballoon NW + Ice Cave SE: Octoballoon NE + Shopping Mall SW: Bomber Corner NW + Shopping Mall SE: Bomber Corner NE diff --git a/docs/ideas/shufflelargescreens.yaml b/docs/ideas/shufflelargescreens.yaml new file mode 100644 index 00000000..93f7472d --- /dev/null +++ b/docs/ideas/shufflelargescreens.yaml @@ -0,0 +1,96 @@ +settings: + 1: + ow_whirlpool: false +ow-edges: + 1: + two-way: + Lumberjack SW*: Mountain Pass NW* + Dark Lumberjack SW*: Bumper Cave NW* + Mountain Pass SE*: Kakariko Pond NE* + Bumper Cave SE*: Outcast Pond NE* + Zora Waterfall SE*: Zora Approach NE* + Catfish SE*: Catfish Approach NE* + Kakariko Fortune EN*: Kakariko Pond WN* + Kakariko Fortune ES*: Kakariko Pond WS* + Dark Fortune EN*: Outcast Pond WN* + Dark Fortune ES*: Outcast Pond WS* + Kakariko Pond EN*: Sanctuary WN* + Kakariko Pond ES*: Sanctuary WS* + Kakariko Pond SW*: Forgotten Forest NW* + Kakariko Pond SE*: Forgotten Forest NE* + Outcast Pond EN*: Dark Chapel WN* + Outcast Pond ES*: Dark Chapel WS* + Outcast Pond SW*: Shield Shop NW* + Outcast Pond SE*: Shield Shop NE* + Sanctuary EC*: Graveyard WC* + Dark Chapel EC*: Dark Graveyard WC* + Graveyard EC*: River Bend WC* + Dark Graveyard EC*: Qirn Jump WC* + River Bend EN*: Potion Shop WN* + River Bend EC*: Potion Shop WC* + River Bend ES*: Potion Shop WS* + River Bend SW*: Wooden Bridge NW* + River Bend SC*: Wooden Bridge NC* + River Bend SE*: Wooden Bridge NE* + Qirn Jump EN*: Dark Witch WN* + Qirn Jump EC*: Dark Witch WC* + Qirn Jump ES*: Dark Witch WS* + Qirn Jump SW*: Broken Bridge NW* + Qirn Jump SC*: Broken Bridge NC* + Qirn Jump SE*: Broken Bridge NE* + Potion Shop EN*: Zora Approach WN* + Potion Shop EC*: Zora Approach WC* + Dark Witch EN*: Catfish Approach WN* + Dark Witch EC*: Catfish Approach WC* + Wooden Bridge SW*: Sand Dunes NW* + Broken Bridge SW*: Dark Dunes NW* + Sand Dunes SC*: Stone Bridge NC* + Dark Dunes SC*: Hammer Bridge NC* + Maze Race ES: Kakariko Suburb WS + Dig Game EC: Frog WC + Dig Game ES: Frog WS + Kakariko Suburb ES*: Flute Boy WS* + Frog ES*: Stumpy WS* + Flute Boy SW*: Flute Boy Approach NW* + Flute Boy SC*: Flute Boy Approach NC* + Stumpy SW*: Stumpy Approach NW* + Stumpy SC*: Stumpy Approach NC* + Central Bonk Rocks EN*: Links House WN* + Central Bonk Rocks EC*: Links House WC* + Central Bonk Rocks ES*: Links House WS* + Central Bonk Rocks SW*: C Whirlpool NW* + Dark Bonk Rocks EN*: Big Bomb Shop WN* + Dark Bonk Rocks EC*: Big Bomb Shop WC* + Dark Bonk Rocks ES*: Big Bomb Shop WS* + Dark Bonk Rocks SW*: Dark C Whirlpool NW* + Links House SC*: Statues NC* + Links House ES*: Stone Bridge WS8 + Big Bomb Shop SC*: Hype Cave NC* + Big Bomb Shop ES*: Hammer Bridge WS* + Stone Bridge WC: Hobo EC + Stone Bridge EN*: Tree Line WN* + Stone Bridge EC*: Tree Line WC* + Hammer Bridge EN*: Dark Tree Line WN* + Hammer Bridge EC*: Dark Tree Line WC* + Flute Boy Approach EC*: C Whirlpool WC* + Stumpy Approach EC*: Dark C Whirlpool WC* + C Whirlpool EN*: Statues WN* + C Whirlpool EC*: Statues WC* + C Whirlpool ES*: Statues WS* + C Whirlpool SC*: Dam NC* + Dark C Whirlpool EN*: Hype Cave WN* + Dark C Whirlpool EC*: Hype Cave WC* + Dark C Whirlpool ES*: Hype Cave WS* + Dark C Whirlpool SC*: Swamp NC* + Statues SC*: South Pass NC* + Hype Cave SC*: Dark South Pass NC* + Ice Cave SW*: Octoballoon NW* + Ice Cave SE*: Octoballoon NE* + Shopping Mall SW*: Bomber Corner NW* + Shopping Mall SE*: Bomber Corner NE* + Desert Pass EC*: Dam WC* + Desert Pass ES*: Dam WS* + Swamp Nook EC*: Swamp WC* + Swamp Nook ES*: Swamp WS* + Dam EC*: South Pass WC* + Swamp EC*: Dark South Pass WC* \ No newline at end of file diff --git a/docs/ideas/shufflelight.yaml b/docs/ideas/shufflelight.yaml new file mode 100644 index 00000000..0a2f9f58 --- /dev/null +++ b/docs/ideas/shufflelight.yaml @@ -0,0 +1,90 @@ +meta: + players: 1 +settings: + 1: + ow_shuffle: full + ow_whirlpool: true + ow_crossed: none + ow_keepsimilar: false + ow_swapped: false + ow_terrain: true + ow_decoupled: none + ow_mixed: false + ow_fluteshuffle: vanilla +ow-edges: + 1: + two-way: + Skull Woods EN: Dark Lumberjack WN + Skull Woods SW: Skull Woods Pass NW + Skull Woods SC: Skull Woods Pass NE + Skull Woods SE: Dark Fortune NE + Dark Lumberjack SW: Bumper Cave NW + West Dark Death Mountain EN: East Dark Death Mountain WN + West Dark Death Mountain ES: East Dark Death Mountain WS + East Dark Death Mountain EN: Turtle Rock WN + Bumper Cave SE: Outcast Pond NE + Catfish SE: Catfish Approach NE + Skull Woods Pass SW: Village of Outcasts NW + Skull Woods Pass SE: Village of Outcasts NC + Dark Fortune EN: Outcast Pond WN + Dark Fortune ES: Outcast Pond WS + Dark Fortune SC: Village of Outcasts NE + Outcast Pond EN: Dark Chapel WN + Outcast Pond ES: Dark Chapel WS + Outcast Pond SW: Shield Shop NW + Outcast Pond SE: Shield Shop NE + Dark Chapel EC: Dark Graveyard WC + Dark Graveyard EC: Qirn Jump WC + Qirn Jump EN: Dark Witch WN + Qirn Jump EC: Dark Witch WC + Qirn Jump ES: Dark Witch WS + Qirn Jump SW: Broken Bridge NW + Qirn Jump SC: Broken Bridge NC + Qirn Jump SE: Broken Bridge NE + Dark Witch EN: Catfish Approach WN + Dark Witch EC: Catfish Approach WC + Village of Outcasts ES: Hammer Pegs WS + Village of Outcasts SE: Frog NE + Pyramid ES: Dark Dunes WN + Pyramid SW: Dark Bonk Rocks NW + Pyramid SE: Big Bomb Shop NE + Broken Bridge SW: Dark Dunes NW + Palace of Darkness SW: Dark Tree Line NW + Palace of Darkness SE: Palace of Darkness Nook NE + Dark Dunes SC: Hammer Bridge NC + Dig Game EC: Frog WC + Dig Game ES: Frog WS + Frog ES: Stumpy WS + Stumpy SW: Stumpy Approach NW + Stumpy SC: Stumpy Approach NC + Dark Bonk Rocks EN: Big Bomb Shop WN + Dark Bonk Rocks EC: Big Bomb Shop WC + Dark Bonk Rocks ES: Big Bomb Shop WS + Dark Bonk Rocks SW: Dark C Whirlpool NW + Big Bomb Shop SC: Hype Cave NC + Big Bomb Shop ES: Hammer Bridge WS + Hammer Bridge EN: Dark Tree Line WN + Hammer Bridge EC: Dark Tree Line WC + Hammer Bridge SC: Ice Lake NW + Dark Tree Line SC: Ice Lake NC + Dark Tree Line SE: Ice Lake NE + Stumpy Approach EC: Dark C Whirlpool WC + Dark C Whirlpool EN: Hype Cave WN + Dark C Whirlpool EC: Hype Cave WC + Dark C Whirlpool ES: Hype Cave WS + Dark C Whirlpool SC: Swamp NC + Hype Cave SC: Dark South Pass NC + Ice Lake WS: Dark South Pass ES + Ice Lake EC: Bomber Corner WC + Ice Lake ES: Bomber Corner WS + Shopping Mall SW: Bomber Corner NW + Shopping Mall SE: Bomber Corner NE + Swamp Nook EC: Swamp WC + Swamp Nook ES: Swamp WS + Swamp EC: Dark South Pass WC + one-way: [] +ow-whirlpools: + 1: + two-way: + Qirn Jump Whirlpool: Bomber Corner Whirlpool + one-way: [] diff --git a/docs/ideas/shufflesmallscreens.yaml b/docs/ideas/shufflesmallscreens.yaml new file mode 100644 index 00000000..0dbea02e --- /dev/null +++ b/docs/ideas/shufflesmallscreens.yaml @@ -0,0 +1,58 @@ +ow-edges: + 1: + two-way: + Lost Woods NW: Master Sword Meadow SC + Lost Woods EN*: Lumberjack WN* + Lost Woods SW*: Lost Woods Pass NW* + Lost Woods SC*: Lost Woods Pass NE* + Lost Woods SE*: Kakariko Fortune NE* + Skull Woods EN*: Dark Lumberjack WN* + Skull Woods SW*: Skull Woods Pass NW* + Skull Woods SC*: Skull Woods Pass NE* + Skull Woods SE*: Dark Fortune NE* + West Death Mountain EN*: East Death Mountain WN* + West Death Mountain ES*: East Death Mountain WS* + West Dark Death Mountain EN*: East Dark Death Mountain WN* + West Dark Death Mountain ES*: East Dark Death Mountain WS* + East Death Mountain EN*: Death Mountain TR Pegs WN* + East Dark Death Mountain EN*: Turtle Rock WN* + Zora Waterfall NE: Zoras Domain SW + Lost Woods Pass SW*: Kakariko NW* + Lost Woods Pass SE*: Kakariko NC* + Skull Woods Pass SW*: Village of Outcasts NW* + Skull Woods Pass SE*: Village of Outcasts NC* + Kakariko Fortune SC*: Kakariko NE* + Dark Fortune SC*: Village of Outcasts NE* + Kakariko ES*: Blacksmith WS* + Kakariko SE*: Kakariko Suburb NE* + Village of Outcasts ES*: Hammer Pegs WS* + Village of Outcasts SE*: Frog NE* + Forgotten Forest ES: Hyrule Castle WN + Hyrule Castle ES*: Sand Dunes WN* + Hyrule Castle SW*: Central Bonk Rocks NW* + Hyrule Castle SE*: Links House NE* + Pyramid ES*: Dark Dunes WN* + Pyramid SW*: Dark Bonk Rocks NW* + Pyramid SE*: Big Bomb Shop NE* + Eastern Palace SW*: Tree Line NW* + Eastern Palace SE*: Eastern Nook NE* + Palace of Darkness SW*: Dark Tree Line NW* + Palace of Darkness SE*: Palace of Darkness Nook NE* + Stone Bridge SC*: Lake Hylia NW* + Hammer Bridge SC*: Ice Lake NW* + Tree Line SC*: Lake Hylia NC* + Tree Line SE*: Lake Hylia NE* + Dark Tree Line SC*: Ice Lake NC* + Dark Tree Line SE*: Ice Lake NE* + Desert EC: Desert Pass WC + Desert ES: Desert Pass WS + Lake Hylia WS*: South Pass ES* + Lake Hylia EC*: Octoballoon WC* + Lake Hylia ES*: Octoballoon WS* + Ice Lake WS*: Dark South Pass ES* + Ice Lake EC*: Bomber Corner WC* + Ice Lake ES*: Bomber Corner WS* +ow-whirlpools: + 1: + two-way: + Zora Whirlpool: Lake Hylia Whirlpool diff --git a/docs/ideas/shufflevertical.yaml b/docs/ideas/shufflevertical.yaml new file mode 100644 index 00000000..60c1fe9a --- /dev/null +++ b/docs/ideas/shufflevertical.yaml @@ -0,0 +1,81 @@ +settings: + 1: + ow_mixed: false +ow-edges: + 1: + two-way: + Lost Woods EN: Lumberjack WN + Skull Woods EN: Dark Lumberjack WN + West Death Mountain EN: East Death Mountain WN + West Death Mountain ES: East Death Mountain WS + West Dark Death Mountain EN: East Dark Death Mountain WN + West Dark Death Mountain ES: East Dark Death Mountain WS + East Death Mountain EN: Death Mountain TR Pegs WN + East Dark Death Mountain EN: Turtle Rock WN + Kakariko Fortune EN: Kakariko Pond WN + Kakariko Fortune ES: Kakariko Pond WS + Dark Fortune EN: Outcast Pond WN + Dark Fortune ES: Outcast Pond WS + Kakariko Pond EN: Sanctuary WN + Kakariko Pond ES: Sanctuary WS + Outcast Pond EN: Dark Chapel WN + Outcast Pond ES: Dark Chapel WS + Sanctuary EC: Graveyard WC + Dark Chapel EC: Dark Graveyard WC + Graveyard EC: River Bend WC + Dark Graveyard EC: Qirn Jump WC + River Bend EN: Potion Shop WN + River Bend EC: Potion Shop WC + River Bend ES: Potion Shop WS + Qirn Jump EN: Dark Witch WN + Qirn Jump EC: Dark Witch WC + Qirn Jump ES: Dark Witch WS + Potion Shop EN: Zora Approach WN + Potion Shop EC: Zora Approach WC + Dark Witch EN: Catfish Approach WN + Dark Witch EC: Catfish Approach WC + Kakariko ES: Blacksmith WS + Village of Outcasts ES: Hammer Pegs WS + Forgotten Forest ES: Hyrule Castle WN + Hyrule Castle ES: Sand Dunes WN + Pyramid ES: Dark Dunes WN + Maze Race ES: Kakariko Suburb WS + Dig Game EC: Frog WC + Dig Game ES: Frog WS + Kakariko Suburb ES: Flute Boy WS + Frog ES: Stumpy WS + Central Bonk Rocks EN: Links House WN + Central Bonk Rocks EC: Links House WC + Central Bonk Rocks ES: Links House WS + Dark Bonk Rocks EN: Big Bomb Shop WN + Dark Bonk Rocks EC: Big Bomb Shop WC + Dark Bonk Rocks ES: Big Bomb Shop WS + Links House ES: Stone Bridge WS + Big Bomb Shop ES: Hammer Bridge WS + Stone Bridge WC: Hobo EC + Stone Bridge EN: Tree Line WN + Stone Bridge EC: Tree Line WC + Hammer Bridge EN: Dark Tree Line WN + Hammer Bridge EC: Dark Tree Line WC + Desert EC: Desert Pass WC + Desert ES: Desert Pass WS + Flute Boy Approach EC: C Whirlpool WC + Stumpy Approach EC: Dark C Whirlpool WC + C Whirlpool EN: Statues WN + C Whirlpool EC: Statues WC + C Whirlpool ES: Statues WS + Dark C Whirlpool EN: Hype Cave WN + Dark C Whirlpool EC: Hype Cave WC + Dark C Whirlpool ES: Hype Cave WS + Lake Hylia WS: South Pass ES + Lake Hylia EC: Octoballoon WC + Lake Hylia ES: Octoballoon WS + Ice Lake WS: Dark South Pass ES + Ice Lake EC: Bomber Corner WC + Ice Lake ES: Bomber Corner WS + Desert Pass EC: Dam WC + Desert Pass ES: Dam WS + Swamp Nook EC: Swamp WC + Swamp Nook ES: Swamp WS + Dam EC: South Pass WC + Swamp EC: Dark South Pass WC