Restructuring parallel_links in OWR

This commit is contained in:
codemann8
2023-09-04 19:32:34 -05:00
parent 179e605253
commit 712188251d
6 changed files with 421 additions and 24 deletions

View File

@@ -14,17 +14,19 @@ version_branch = '-u'
__version__ = '%s%s' % (version_number, version_branch) __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): def link_overworld(world, player):
global parallel_links_new
# setup mandatory connections # setup mandatory connections
for exitname, regionname in mandatory_connections: for exitname, regionname in mandatory_connections:
connect_simple(world, exitname, regionname, player) connect_simple(world, exitname, regionname, player)
def performSwap(groups, swaps): def performSwap(groups, swaps):
def getParallel(edgename): def getParallel(edgename):
if edgename in parallel_links: if edgename in parallel_links_new:
return parallel_links[edgename] return parallel_links_new[edgename]
elif edgename in parallel_links.inverse:
return parallel_links.inverse[edgename][0]
else: else:
raise Exception('No parallel edge found for edge %s', edgename) raise Exception('No parallel edge found for edge %s', edgename)
@@ -112,16 +114,19 @@ def link_overworld(world, player):
swapped_edges = list() swapped_edges = list()
# restructure Maze Race/Suburb/Frog/Dig Game manually due to NP/P relationship # 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]: if world.owKeepSimilar[player]:
del parallel_links_new['Maze Race ES']
del parallel_links_new['Kakariko Suburb WS']
for group in trimmed_groups.keys(): for group in trimmed_groups.keys():
(std, region, axis, terrain, parallel, _) = group (std, region, axis, terrain, parallel, _) = group
if parallel == IsParallel.Yes: if parallel == IsParallel.Yes:
(forward_edges, back_edges) = trimmed_groups[group] (forward_edges, back_edges) = trimmed_groups[group]
if ['Maze Race ES'] in forward_edges: 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']) trimmed_groups[(std, region, axis, terrain, IsParallel.No, 1)][0].append(['Maze Race ES'])
if ['Kakariko Suburb WS'] in back_edges: 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[(std, region, axis, terrain, IsParallel.No, 1)][1].append(['Kakariko Suburb WS'])
trimmed_groups[group] = (forward_edges, back_edges) trimmed_groups[group] = (forward_edges, back_edges)
else: else:
@@ -129,14 +134,15 @@ def link_overworld(world, player):
(std, region, axis, terrain, _, _) = group (std, region, axis, terrain, _, _) = group
(forward_edges, back_edges) = trimmed_groups[group] (forward_edges, back_edges) = trimmed_groups[group]
if ['Dig Game EC', 'Dig Game ES'] in forward_edges: 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.Yes, 1)][0].append(['Dig Game ES'])
trimmed_groups[(std, region, axis, terrain, IsParallel.No, 1)][0].append(['Dig Game EC']) trimmed_groups[(std, region, axis, terrain, IsParallel.No, 1)][0].append(['Dig Game EC'])
if ['Frog WC', 'Frog WS'] in back_edges: 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.Yes, 1)][1].append(['Frog WS'])
trimmed_groups[(std, region, axis, terrain, IsParallel.No, 1)][1].append(['Frog WC']) trimmed_groups[(std, region, axis, terrain, IsParallel.No, 1)][1].append(['Frog WC'])
trimmed_groups[group] = (forward_edges, back_edges) 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 = [] connected_edges = []
if world.owShuffle[player] != 'vanilla': if world.owShuffle[player] != 'vanilla':
@@ -201,19 +207,13 @@ def link_overworld(world, player):
logging.getLogger('').debug('Crossing overworld edges') logging.getLogger('').debug('Crossing overworld edges')
crossed_edges = list() 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 #TODO: Revisit with changes to Limited/Allowed
if world.owCrossed[player] not in ['none', 'grouped', 'polar', 'chaos']: if world.owCrossed[player] not in ['none', 'grouped', 'polar', 'chaos']:
for edge in swapped_edges: for edge in swapped_edges:
if edge not in parallel_links_new and edge not in parallel_links_new.inverse:
crossed_edges.append(edge) crossed_edges.append(edge)
if world.owCrossed[player] in ['grouped', 'limited'] or (world.owShuffle[player] == 'vanilla' and world.owCrossed[player] == 'chaos'): 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': 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 # 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 # 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 (mode, wrld, dir, terrain, parallel, count) = group
if wrld == WorldType.Light and mode != OpenStd.Standard: if wrld == WorldType.Light and mode != OpenStd.Standard:
for (forward_set, back_set) in zip(trimmed_groups[group][0], trimmed_groups[group][1]): 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.owKeepSimilar[player]:
if world.owCrossed[player] == 'chaos' and random.randint(0, 1): if world.owCrossed[player] == 'chaos' and random.randint(0, 1):
for edge in forward_set: for edge in forward_set:
crossed_edges.append(edge) crossed_edges.append(edge)
elif world.owCrossed[player] == 'limited': elif world.owCrossed[player] == 'limited':
crossed_candidates.append(forward_set) crossed_candidates.append(forward_set)
if forward_set[0] in parallel_links_new:
else: else:
for edge in forward_set: for edge in forward_set:
if world.owCrossed[player] == 'chaos' and random.randint(0, 1): 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) remove_pair_from_pool(edgename1, edgename2)
connect_two_way(world, edgename1, edgename2, player, connected_edges) connect_two_way(world, edgename1, edgename2, player, connected_edges)
# resolve parallel # 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) 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: 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) raise GenerationException('OW Edge already connected: \'%s\' <-> \'%s\'', edgename1, edgename2)
# connect leftover similars # connect leftover similars
for forward_pool, back_pool in unresolved_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 # connecting parallel connections
if world.owShuffle[player] in ['vanilla', 'parallel']: 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: try:
parallel_forward_edge = parallel_links[edgename1] if edgename1 in parallel_links.keys() else parallel_links.inverse[edgename1][0] parallel_forward_edge = parallel_links_new[edgename1]
parallel_back_edge = parallel_links[edgename2] if edgename2 in parallel_links.keys() else parallel_links.inverse[edgename2][0] parallel_back_edge = parallel_links_new[edgename2]
if not (parallel_forward_edge in connected_edges) and not (parallel_back_edge in connected_edges): 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) connect_two_way(world, parallel_forward_edge, parallel_back_edge, player, connected_edges)
except KeyError: except KeyError:
@@ -2075,7 +2074,8 @@ mirror_connections = {
} }
parallelsimilar_connections = [('Maze Race ES', 'Kakariko Suburb WS'), 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 # non shuffled overworld

View File

@@ -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

View File

@@ -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*

View File

@@ -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: []

View File

@@ -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

View File

@@ -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