Merge branch 'OverworldShuffleDev' into OverworldShuffle
This commit is contained in:
@@ -25,6 +25,7 @@ class World(object):
|
|||||||
self.teams = 1
|
self.teams = 1
|
||||||
self.owShuffle = owShuffle.copy()
|
self.owShuffle = owShuffle.copy()
|
||||||
self.owKeepSimilar = {}
|
self.owKeepSimilar = {}
|
||||||
|
self.owParallelWorlds = {}
|
||||||
self.shuffle = shuffle.copy()
|
self.shuffle = shuffle.copy()
|
||||||
self.doorShuffle = doorShuffle.copy()
|
self.doorShuffle = doorShuffle.copy()
|
||||||
self.intensity = {}
|
self.intensity = {}
|
||||||
@@ -2095,6 +2096,7 @@ class Spoiler(object):
|
|||||||
'goal': self.world.goal,
|
'goal': self.world.goal,
|
||||||
'ow_shuffle': self.world.owShuffle,
|
'ow_shuffle': self.world.owShuffle,
|
||||||
'ow_keepsimilar': self.world.owKeepSimilar,
|
'ow_keepsimilar': self.world.owKeepSimilar,
|
||||||
|
'ow_parallel': self.world.owParallelWorlds,
|
||||||
'shuffle': self.world.shuffle,
|
'shuffle': self.world.shuffle,
|
||||||
'door_shuffle': self.world.doorShuffle,
|
'door_shuffle': self.world.doorShuffle,
|
||||||
'intensity': self.world.intensity,
|
'intensity': self.world.intensity,
|
||||||
@@ -2174,6 +2176,7 @@ class Spoiler(object):
|
|||||||
outfile.write('Item Functionality:'.ljust(line_width) + '%s\n' % self.metadata['item_functionality'][player])
|
outfile.write('Item Functionality:'.ljust(line_width) + '%s\n' % self.metadata['item_functionality'][player])
|
||||||
outfile.write('Overworld Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['ow_shuffle'][player])
|
outfile.write('Overworld Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['ow_shuffle'][player])
|
||||||
outfile.write('Keep OW Edges Together:'.ljust(line_width) + '%s\n' % ('Yes' if self.metadata['ow_keepsimilar'][player] else 'No'))
|
outfile.write('Keep OW Edges Together:'.ljust(line_width) + '%s\n' % ('Yes' if self.metadata['ow_keepsimilar'][player] else 'No'))
|
||||||
|
outfile.write('Parallel Worlds:'.ljust(line_width) + '%s\n' % ('Yes' if self.metadata['ow_parallel'][player] else 'No'))
|
||||||
outfile.write('Entrance Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['shuffle'][player])
|
outfile.write('Entrance Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['shuffle'][player])
|
||||||
outfile.write('Door Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['door_shuffle'][player])
|
outfile.write('Door Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['door_shuffle'][player])
|
||||||
outfile.write('Intensity:'.ljust(line_width) + '%s\n' % self.metadata['intensity'][player])
|
outfile.write('Intensity:'.ljust(line_width) + '%s\n' % self.metadata['intensity'][player])
|
||||||
|
|||||||
27
CHANGELOG.md
Normal file
27
CHANGELOG.md
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
### 0.1.1.2
|
||||||
|
- If Link's current position fits within the incoming gap, Link will not get re-centered to the incoming gap
|
||||||
|
- Added Rule for Pearl required to drop down back of SW
|
||||||
|
- Merged DR v0.3.1.8 - Improved Shopsanity pricing - Fixed Retro generation
|
||||||
|
|
||||||
|
### 0.1.1.1
|
||||||
|
- Fixed camera unlocking issue
|
||||||
|
- Changed default setting for DR to Vanilla
|
||||||
|
|
||||||
|
### 0.1.1.0
|
||||||
|
- Added 'Keep Similar Edges Together' toggle option
|
||||||
|
- Removed Duplicate Pyramid Ledge location, causing a Warning of unfilled location on generation
|
||||||
|
|
||||||
|
### 0.1.0.3
|
||||||
|
- Modified various logic rule for some OW locations
|
||||||
|
|
||||||
|
### 0.1.0.2
|
||||||
|
- Fixed error generating a bad Spoiler log
|
||||||
|
|
||||||
|
### 0.1.0.1
|
||||||
|
- Separated DR versioning from OR versioning
|
||||||
|
- Removed LW/DW flag toggle on transitions
|
||||||
|
|
||||||
|
### 0.1.0.0
|
||||||
|
- Initial release
|
||||||
3
CLI.py
3
CLI.py
@@ -94,7 +94,7 @@ def parse_cli(argv, no_defaults=False):
|
|||||||
for player in range(1, multiargs.multi + 1):
|
for player in range(1, multiargs.multi + 1):
|
||||||
playerargs = parse_cli(shlex.split(getattr(ret, f"p{player}")), True)
|
playerargs = parse_cli(shlex.split(getattr(ret, f"p{player}")), True)
|
||||||
|
|
||||||
for name in ['logic', 'mode', 'swords', 'goal', 'difficulty', 'item_functionality', 'ow_shuffle', 'ow_keepsimilar',
|
for name in ['logic', 'mode', 'swords', 'goal', 'difficulty', 'item_functionality', 'ow_shuffle', 'ow_keepsimilar', 'ow_parallel',
|
||||||
'shuffle', 'door_shuffle', 'intensity', 'crystals_ganon', 'crystals_gt', 'openpyramid',
|
'shuffle', 'door_shuffle', 'intensity', 'crystals_ganon', 'crystals_gt', 'openpyramid',
|
||||||
'mapshuffle', 'compassshuffle', 'keyshuffle', 'bigkeyshuffle', 'startinventory',
|
'mapshuffle', 'compassshuffle', 'keyshuffle', 'bigkeyshuffle', 'startinventory',
|
||||||
'triforce_pool_min', 'triforce_pool_max', 'triforce_goal_min', 'triforce_goal_max',
|
'triforce_pool_min', 'triforce_pool_max', 'triforce_goal_min', 'triforce_goal_max',
|
||||||
@@ -144,6 +144,7 @@ def parse_settings():
|
|||||||
"shuffleganon": True,
|
"shuffleganon": True,
|
||||||
"ow_shuffle": "vanilla",
|
"ow_shuffle": "vanilla",
|
||||||
"ow_keepsimilar": False,
|
"ow_keepsimilar": False,
|
||||||
|
"ow_parallel": False,
|
||||||
"shuffle": "vanilla",
|
"shuffle": "vanilla",
|
||||||
|
|
||||||
"shufflepots": False,
|
"shufflepots": False,
|
||||||
|
|||||||
@@ -3141,7 +3141,7 @@ default_connections = [('Waterfall of Wishing', 'Waterfall of Wishing'),
|
|||||||
('Elder House Exit (West)', 'Kakariko Area'),
|
('Elder House Exit (West)', 'Kakariko Area'),
|
||||||
('North Fairy Cave Drop', 'North Fairy Cave'),
|
('North Fairy Cave Drop', 'North Fairy Cave'),
|
||||||
('North Fairy Cave', 'North Fairy Cave'),
|
('North Fairy Cave', 'North Fairy Cave'),
|
||||||
('North Fairy Cave Exit', 'Useless Fairy Area'),
|
('North Fairy Cave Exit', 'River Bend Area'),
|
||||||
('Lost Woods Gamble', 'Lost Woods Gamble'),
|
('Lost Woods Gamble', 'Lost Woods Gamble'),
|
||||||
('Fortune Teller (Light)', 'Fortune Teller (Light)'),
|
('Fortune Teller (Light)', 'Fortune Teller (Light)'),
|
||||||
('Snitch Lady (East)', 'Snitch Lady (East)'),
|
('Snitch Lady (East)', 'Snitch Lady (East)'),
|
||||||
@@ -3453,7 +3453,7 @@ default_dungeon_connections = [('Desert Palace Entrance (South)', 'Desert South
|
|||||||
('Palace of Darkness', 'Palace of Darkness Portal'),
|
('Palace of Darkness', 'Palace of Darkness Portal'),
|
||||||
('Palace of Darkness Exit', 'Palace of Darkness Area'),
|
('Palace of Darkness Exit', 'Palace of Darkness Area'),
|
||||||
('Swamp Palace', 'Swamp Portal'), # requires additional patch for flooding moat if moved
|
('Swamp Palace', 'Swamp Portal'), # requires additional patch for flooding moat if moved
|
||||||
('Swamp Palace Exit', 'Swamp Palace Area'),
|
('Swamp Palace Exit', 'Swamp Area'),
|
||||||
|
|
||||||
('Turtle Rock', 'Turtle Rock Main Portal'),
|
('Turtle Rock', 'Turtle Rock Main Portal'),
|
||||||
('Turtle Rock Exit (Front)', 'Turtle Rock Area'),
|
('Turtle Rock Exit (Front)', 'Turtle Rock Area'),
|
||||||
|
|||||||
1
Main.py
1
Main.py
@@ -74,6 +74,7 @@ def main(args, seed=None, fish=None):
|
|||||||
world.crystals_ganon_orig = args.crystals_ganon.copy()
|
world.crystals_ganon_orig = args.crystals_ganon.copy()
|
||||||
world.crystals_gt_orig = args.crystals_gt.copy()
|
world.crystals_gt_orig = args.crystals_gt.copy()
|
||||||
world.owKeepSimilar = args.ow_keepsimilar.copy()
|
world.owKeepSimilar = args.ow_keepsimilar.copy()
|
||||||
|
world.owParallelWorlds = args.ow_parallel.copy()
|
||||||
world.open_pyramid = args.openpyramid.copy()
|
world.open_pyramid = args.openpyramid.copy()
|
||||||
world.boss_shuffle = args.shufflebosses.copy()
|
world.boss_shuffle = args.shufflebosses.copy()
|
||||||
world.enemy_shuffle = args.shuffleenemies.copy()
|
world.enemy_shuffle = args.shuffleenemies.copy()
|
||||||
|
|||||||
@@ -154,6 +154,7 @@ def roll_settings(weights):
|
|||||||
overworld_shuffle = get_choice('overworld_shuffle')
|
overworld_shuffle = get_choice('overworld_shuffle')
|
||||||
ret.ow_shuffle = overworld_shuffle if overworld_shuffle != 'none' else 'vanilla'
|
ret.ow_shuffle = overworld_shuffle if overworld_shuffle != 'none' else 'vanilla'
|
||||||
ret.ow_keepsimilar = get_choice('ow_keepsimilar')
|
ret.ow_keepsimilar = get_choice('ow_keepsimilar')
|
||||||
|
ret.ow_parallel = get_choice('ow_parallel')
|
||||||
entrance_shuffle = get_choice('entrance_shuffle')
|
entrance_shuffle = get_choice('entrance_shuffle')
|
||||||
ret.shuffle = entrance_shuffle if entrance_shuffle != 'none' else 'vanilla'
|
ret.shuffle = entrance_shuffle if entrance_shuffle != 'none' else 'vanilla'
|
||||||
door_shuffle = get_choice('door_shuffle')
|
door_shuffle = get_choice('door_shuffle')
|
||||||
|
|||||||
278
OWEdges.py
278
OWEdges.py
@@ -1,5 +1,16 @@
|
|||||||
|
|
||||||
from BaseClasses import OWEdge, Direction, Terrain, WorldType, PolSlot
|
from BaseClasses import OWEdge, Direction, Terrain, WorldType, PolSlot
|
||||||
|
from enum import Enum, unique
|
||||||
|
|
||||||
|
@unique
|
||||||
|
class OpenStd(Enum):
|
||||||
|
Open = 0
|
||||||
|
Standard = 1
|
||||||
|
|
||||||
|
@unique
|
||||||
|
class IsParallel(Enum):
|
||||||
|
No = 0
|
||||||
|
Yes = 1
|
||||||
|
|
||||||
# constants
|
# constants
|
||||||
We = Direction.West
|
We = Direction.West
|
||||||
@@ -16,6 +27,12 @@ DW = WorldType.Dark
|
|||||||
Vt = PolSlot.NorthSouth
|
Vt = PolSlot.NorthSouth
|
||||||
Hz = PolSlot.EastWest
|
Hz = PolSlot.EastWest
|
||||||
|
|
||||||
|
Op = OpenStd.Open
|
||||||
|
St = OpenStd.Standard
|
||||||
|
|
||||||
|
PL = IsParallel.Yes
|
||||||
|
NP = IsParallel.No
|
||||||
|
|
||||||
|
|
||||||
def create_owedges(world, player):
|
def create_owedges(world, player):
|
||||||
edges = [
|
edges = [
|
||||||
@@ -33,8 +50,8 @@ def create_owedges(world, player):
|
|||||||
create_owedge(player, 'East Death Mountain WS', 0x05, We, Ld, 0x03, 0x0d).coordInfo(0x1660),
|
create_owedge(player, 'East Death Mountain WS', 0x05, We, Ld, 0x03, 0x0d).coordInfo(0x1660),
|
||||||
create_owedge(player, 'East Death Mountain EN', 0x05, Ea, Ld, 0x02, 0x06).coordInfo(0x0180),
|
create_owedge(player, 'East Death Mountain EN', 0x05, Ea, Ld, 0x02, 0x06).coordInfo(0x0180),
|
||||||
create_owedge(player, 'Death Mountain TR Pegs WN', 0x07, We, Ld, 0x02) .coordInfo(0x00e0),
|
create_owedge(player, 'Death Mountain TR Pegs WN', 0x07, We, Ld, 0x02) .coordInfo(0x00e0),
|
||||||
create_owedge(player, 'DM Ascent NW', 0x0a, No, Ld, 0x01) .coordInfo(0x180a),
|
create_owedge(player, 'Mountain Entry NW', 0x0a, No, Ld, 0x01) .coordInfo(0x180a),
|
||||||
create_owedge(player, 'DM Ascent SE', 0x0a, So, Ld, 0x04) .coordInfo(0x1012),
|
create_owedge(player, 'Mountain Entry SE', 0x0a, So, Ld, 0x04) .coordInfo(0x1012),
|
||||||
create_owedge(player, 'Zora Approach NE', 0x0f, No, Ld, 0x02) .coordInfo(0x009a),
|
create_owedge(player, 'Zora Approach NE', 0x0f, No, Ld, 0x02) .coordInfo(0x009a),
|
||||||
create_owedge(player, 'Zora Approach SE', 0x0f, So, Ld, 0x05) .coordInfo(0x1020),
|
create_owedge(player, 'Zora Approach SE', 0x0f, So, Ld, 0x05) .coordInfo(0x1020),
|
||||||
create_owedge(player, 'Lost Woods Pass NW', 0x10, No, Ld, 0x03) .coordInfo(0x1800),
|
create_owedge(player, 'Lost Woods Pass NW', 0x10, No, Ld, 0x03) .coordInfo(0x1800),
|
||||||
@@ -57,13 +74,13 @@ def create_owedges(world, player):
|
|||||||
create_owedge(player, 'Sanctuary EC', 0x13, Ea, Ld, 0x08) .coordInfo(0x04c0),
|
create_owedge(player, 'Sanctuary EC', 0x13, Ea, Ld, 0x08) .coordInfo(0x04c0),
|
||||||
create_owedge(player, 'Graveyard WC', 0x14, We, Ld, 0x08) .coordInfo(0x04e0),
|
create_owedge(player, 'Graveyard WC', 0x14, We, Ld, 0x08) .coordInfo(0x04e0),
|
||||||
create_owedge(player, 'Graveyard EC', 0x14, Ea, Ld, 0x09) .coordInfo(0x04c0),
|
create_owedge(player, 'Graveyard EC', 0x14, Ea, Ld, 0x09) .coordInfo(0x04c0),
|
||||||
create_owedge(player, 'Useless Fairy SW', 0x15, So, Ld, 0x0b) .coordInfo(0x1004),
|
create_owedge(player, 'River Bend SW', 0x15, So, Ld, 0x0b) .coordInfo(0x1004),
|
||||||
create_owedge(player, 'Useless Fairy SC', 0x15, So, Wr, 0x0c) .coordInfo(0x1018),
|
create_owedge(player, 'River Bend SC', 0x15, So, Wr, 0x0c) .coordInfo(0x1018),
|
||||||
create_owedge(player, 'Useless Fairy SE', 0x15, So, Ld, 0x0d) .coordInfo(0x1020),
|
create_owedge(player, 'River Bend SE', 0x15, So, Ld, 0x0d) .coordInfo(0x1020),
|
||||||
create_owedge(player, 'Useless Fairy WC', 0x15, We, Ld, 0x09) .coordInfo(0x04e0),
|
create_owedge(player, 'River Bend WC', 0x15, We, Ld, 0x09) .coordInfo(0x04e0),
|
||||||
create_owedge(player, 'Useless Fairy EN', 0x15, Ea, Wr, 0x0a) .coordInfo(0x01c0),
|
create_owedge(player, 'River Bend EN', 0x15, Ea, Wr, 0x0a) .coordInfo(0x01c0),
|
||||||
create_owedge(player, 'Useless Fairy EC', 0x15, Ea, Ld, 0x0b) .coordInfo(0x04c0),
|
create_owedge(player, 'River Bend EC', 0x15, Ea, Ld, 0x0b) .coordInfo(0x04c0),
|
||||||
create_owedge(player, 'Useless Fairy ES', 0x15, Ea, Ld, 0x0c) .coordInfo(0x08c0),
|
create_owedge(player, 'River Bend ES', 0x15, Ea, Ld, 0x0c) .coordInfo(0x08c0),
|
||||||
create_owedge(player, 'Potion Shop WN', 0x16, We, Wr, 0x0a) .coordInfo(0x01e0),
|
create_owedge(player, 'Potion Shop WN', 0x16, We, Wr, 0x0a) .coordInfo(0x01e0),
|
||||||
create_owedge(player, 'Potion Shop WC', 0x16, We, Ld, 0x0b) .coordInfo(0x04e0),
|
create_owedge(player, 'Potion Shop WC', 0x16, We, Ld, 0x0b) .coordInfo(0x04e0),
|
||||||
create_owedge(player, 'Potion Shop WS', 0x16, We, Ld, 0x0c) .coordInfo(0x08e0),
|
create_owedge(player, 'Potion Shop WS', 0x16, We, Ld, 0x0c) .coordInfo(0x08e0),
|
||||||
@@ -91,9 +108,9 @@ def create_owedges(world, player):
|
|||||||
create_owedge(player, 'Eastern Palace SW', 0x1e, So, Ld, 0x13, 0x26).coordInfo(0x2002),
|
create_owedge(player, 'Eastern Palace SW', 0x1e, So, Ld, 0x13, 0x26).coordInfo(0x2002),
|
||||||
create_owedge(player, 'Eastern Palace SE', 0x1e, So, Ld, 0x14, 0x27).coordInfo(0x2060),
|
create_owedge(player, 'Eastern Palace SE', 0x1e, So, Ld, 0x14, 0x27).coordInfo(0x2060),
|
||||||
create_owedge(player, 'Blacksmith WS', 0x22, We, Ld, 0x10) .coordInfo(0x05e0),
|
create_owedge(player, 'Blacksmith WS', 0x22, We, Ld, 0x10) .coordInfo(0x05e0),
|
||||||
create_owedge(player, 'Sand Dune NW', 0x25, No, Ld, 0x10) .coordInfo(0x1806),
|
create_owedge(player, 'Sand Dunes NW', 0x25, No, Ld, 0x10) .coordInfo(0x1806),
|
||||||
create_owedge(player, 'Sand Dune SC', 0x25, So, Ld, 0x12) .coordInfo(0x100e),
|
create_owedge(player, 'Sand Dunes SC', 0x25, So, Ld, 0x12) .coordInfo(0x100e),
|
||||||
create_owedge(player, 'Sand Dune WN', 0x25, We, Ld, 0x11) .coordInfo(0x01e0),
|
create_owedge(player, 'Sand Dunes WN', 0x25, We, Ld, 0x11) .coordInfo(0x01e0),
|
||||||
create_owedge(player, 'Maze Race ES', 0x28, Ea, Ld, 0x12) .coordInfo(0x0940),
|
create_owedge(player, 'Maze Race ES', 0x28, Ea, Ld, 0x12) .coordInfo(0x0940),
|
||||||
create_owedge(player, 'Kakariko Suburb NE', 0x29, No, Ld, 0x11) .coordInfo(0x1820),
|
create_owedge(player, 'Kakariko Suburb NE', 0x29, No, Ld, 0x11) .coordInfo(0x1820),
|
||||||
create_owedge(player, 'Kakariko Suburb WS', 0x29, We, Ld, 0x12) .coordInfo(0x0960),
|
create_owedge(player, 'Kakariko Suburb WS', 0x29, We, Ld, 0x12) .coordInfo(0x0960),
|
||||||
@@ -101,11 +118,11 @@ def create_owedges(world, player):
|
|||||||
create_owedge(player, 'Flute Boy SW', 0x2a, So, Ld, 0x15) .coordInfo(0x1000),
|
create_owedge(player, 'Flute Boy SW', 0x2a, So, Ld, 0x15) .coordInfo(0x1000),
|
||||||
create_owedge(player, 'Flute Boy SC', 0x2a, So, Ld, 0x16) .coordInfo(0x100c),
|
create_owedge(player, 'Flute Boy SC', 0x2a, So, Ld, 0x16) .coordInfo(0x100c),
|
||||||
create_owedge(player, 'Flute Boy WS', 0x2a, We, Ld, 0x13) .coordInfo(0x0960),
|
create_owedge(player, 'Flute Boy WS', 0x2a, We, Ld, 0x13) .coordInfo(0x0960),
|
||||||
create_owedge(player, 'Central Bonk Rock NW', 0x2b, No, Ld, 0x12) .coordInfo(0x1802),
|
create_owedge(player, 'Central Bonk Rocks NW', 0x2b, No, Ld, 0x12) .coordInfo(0x1802),
|
||||||
create_owedge(player, 'Central Bonk Rock SW', 0x2b, So, Ld, 0x17) .coordInfo(0x1004),
|
create_owedge(player, 'Central Bonk Rocks SW', 0x2b, So, Ld, 0x17) .coordInfo(0x1004),
|
||||||
create_owedge(player, 'Central Bonk Rock EN', 0x2b, Ea, Ld, 0x14) .coordInfo(0x0340),
|
create_owedge(player, 'Central Bonk Rocks EN', 0x2b, Ea, Ld, 0x14) .coordInfo(0x0340),
|
||||||
create_owedge(player, 'Central Bonk Rock EC', 0x2b, Ea, Ld, 0x15) .coordInfo(0x05c0),
|
create_owedge(player, 'Central Bonk Rocks EC', 0x2b, Ea, Ld, 0x15) .coordInfo(0x05c0),
|
||||||
create_owedge(player, 'Central Bonk Rock ES', 0x2b, Ea, Ld, 0x16) .coordInfo(0x08c0),
|
create_owedge(player, 'Central Bonk Rocks ES', 0x2b, Ea, Ld, 0x16) .coordInfo(0x08c0),
|
||||||
create_owedge(player, 'Links House NE', 0x2c, No, Ld, 0x13) .coordInfo(0x1814),
|
create_owedge(player, 'Links House NE', 0x2c, No, Ld, 0x13) .coordInfo(0x1814),
|
||||||
create_owedge(player, 'Links House SC', 0x2c, So, Ld, 0x18) .coordInfo(0x100e),
|
create_owedge(player, 'Links House SC', 0x2c, So, Ld, 0x18) .coordInfo(0x100e),
|
||||||
create_owedge(player, 'Links House WN', 0x2c, We, Ld, 0x14) .coordInfo(0x0360),
|
create_owedge(player, 'Links House WN', 0x2c, We, Ld, 0x14) .coordInfo(0x0360),
|
||||||
@@ -146,12 +163,12 @@ def create_owedges(world, player):
|
|||||||
create_owedge(player, 'Lake Hylia WS', 0x35, We, Ld, 0x24, 0x3d).coordInfo(0x1860),
|
create_owedge(player, 'Lake Hylia WS', 0x35, We, Ld, 0x24, 0x3d).coordInfo(0x1860),
|
||||||
create_owedge(player, 'Lake Hylia EC', 0x35, Ea, Wr, 0x24, 0x3e).coordInfo(0x1680),
|
create_owedge(player, 'Lake Hylia EC', 0x35, Ea, Wr, 0x24, 0x3e).coordInfo(0x1680),
|
||||||
create_owedge(player, 'Lake Hylia ES', 0x35, Ea, Ld, 0x25, 0x3e).coordInfo(0x1880),
|
create_owedge(player, 'Lake Hylia ES', 0x35, Ea, Ld, 0x25, 0x3e).coordInfo(0x1880),
|
||||||
create_owedge(player, 'Ice Rod Cave SW', 0x37, So, Wr, 0x1e) .coordInfo(0x1002),
|
create_owedge(player, 'Ice Cave SW', 0x37, So, Wr, 0x1e) .coordInfo(0x1002),
|
||||||
create_owedge(player, 'Ice Rod Cave SE', 0x37, So, Ld, 0x1f) .coordInfo(0x101c),
|
create_owedge(player, 'Ice Cave SE', 0x37, So, Ld, 0x1f) .coordInfo(0x101c),
|
||||||
create_owedge(player, 'Purple Chest WC', 0x3a, We, Ld, 0x1f) .coordInfo(0x03e0),
|
create_owedge(player, 'Desert Pass WC', 0x3a, We, Ld, 0x1f) .coordInfo(0x03e0),
|
||||||
create_owedge(player, 'Purple Chest WS', 0x3a, We, Ld, 0x20) .coordInfo(0x0860),
|
create_owedge(player, 'Desert Pass WS', 0x3a, We, Ld, 0x20) .coordInfo(0x0860),
|
||||||
create_owedge(player, 'Purple Chest EC', 0x3a, Ea, Ld, 0x20) .coordInfo(0x0640),
|
create_owedge(player, 'Desert Pass EC', 0x3a, Ea, Ld, 0x20) .coordInfo(0x0640),
|
||||||
create_owedge(player, 'Purple Chest ES', 0x3a, Ea, Ld, 0x21) .coordInfo(0x08c0),
|
create_owedge(player, 'Desert Pass ES', 0x3a, Ea, Ld, 0x21) .coordInfo(0x08c0),
|
||||||
create_owedge(player, 'Dam NC', 0x3b, No, Ld, 0x1e) .coordInfo(0x1816),
|
create_owedge(player, 'Dam NC', 0x3b, No, Ld, 0x1e) .coordInfo(0x1816),
|
||||||
create_owedge(player, 'Dam WC', 0x3b, We, Ld, 0x21) .coordInfo(0x0660),
|
create_owedge(player, 'Dam WC', 0x3b, We, Ld, 0x21) .coordInfo(0x0660),
|
||||||
create_owedge(player, 'Dam WS', 0x3b, We, Ld, 0x22) .coordInfo(0x08e0),
|
create_owedge(player, 'Dam WS', 0x3b, We, Ld, 0x22) .coordInfo(0x08e0),
|
||||||
@@ -230,9 +247,9 @@ def create_owedges(world, player):
|
|||||||
create_owedge(player, 'Palace of Darkness SW', 0x5e, So, Ld, 0x33, 0x66).coordInfo(0x2002),
|
create_owedge(player, 'Palace of Darkness SW', 0x5e, So, Ld, 0x33, 0x66).coordInfo(0x2002),
|
||||||
create_owedge(player, 'Palace of Darkness SE', 0x5e, So, Ld, 0x34, 0x67).coordInfo(0x2060),
|
create_owedge(player, 'Palace of Darkness SE', 0x5e, So, Ld, 0x34, 0x67).coordInfo(0x2060),
|
||||||
create_owedge(player, 'Hammer Pegs WS', 0x62, We, Ld, 0x36) .coordInfo(0x05e0),
|
create_owedge(player, 'Hammer Pegs WS', 0x62, We, Ld, 0x36) .coordInfo(0x05e0),
|
||||||
create_owedge(player, 'Dark Dune NW', 0x65, No, Ld, 0x30) .coordInfo(0x1806),
|
create_owedge(player, 'Dark Dunes NW', 0x65, No, Ld, 0x30) .coordInfo(0x1806),
|
||||||
create_owedge(player, 'Dark Dune SC', 0x65, So, Ld, 0x32) .coordInfo(0x100e),
|
create_owedge(player, 'Dark Dunes SC', 0x65, So, Ld, 0x32) .coordInfo(0x100e),
|
||||||
create_owedge(player, 'Dark Dune WN', 0x65, We, Ld, 0x37) .coordInfo(0x01e0),
|
create_owedge(player, 'Dark Dunes WN', 0x65, We, Ld, 0x37) .coordInfo(0x01e0),
|
||||||
create_owedge(player, 'Dig Game EC', 0x68, Ea, Ld, 0x37) .coordInfo(0x08c0),
|
create_owedge(player, 'Dig Game EC', 0x68, Ea, Ld, 0x37) .coordInfo(0x08c0),
|
||||||
create_owedge(player, 'Dig Game ES', 0x68, Ea, Ld, 0x38) .coordInfo(0x0940),
|
create_owedge(player, 'Dig Game ES', 0x68, Ea, Ld, 0x38) .coordInfo(0x0940),
|
||||||
create_owedge(player, 'Frog NE', 0x69, No, Ld, 0x31) .coordInfo(0x1820),
|
create_owedge(player, 'Frog NE', 0x69, No, Ld, 0x31) .coordInfo(0x1820),
|
||||||
@@ -242,11 +259,11 @@ def create_owedges(world, player):
|
|||||||
create_owedge(player, 'Stumpy SW', 0x6a, So, Ld, 0x35) .coordInfo(0x1000),
|
create_owedge(player, 'Stumpy SW', 0x6a, So, Ld, 0x35) .coordInfo(0x1000),
|
||||||
create_owedge(player, 'Stumpy SC', 0x6a, So, Ld, 0x36) .coordInfo(0x100c),
|
create_owedge(player, 'Stumpy SC', 0x6a, So, Ld, 0x36) .coordInfo(0x100c),
|
||||||
create_owedge(player, 'Stumpy WS', 0x6a, We, Ld, 0x3a) .coordInfo(0x0960),
|
create_owedge(player, 'Stumpy WS', 0x6a, We, Ld, 0x3a) .coordInfo(0x0960),
|
||||||
create_owedge(player, 'Dark Bonk Rock NW', 0x6b, No, Ld, 0x32) .coordInfo(0x1802),
|
create_owedge(player, 'Dark Bonk Rocks NW', 0x6b, No, Ld, 0x32) .coordInfo(0x1802),
|
||||||
create_owedge(player, 'Dark Bonk Rock SW', 0x6b, So, Ld, 0x37) .coordInfo(0x1004),
|
create_owedge(player, 'Dark Bonk Rocks SW', 0x6b, So, Ld, 0x37) .coordInfo(0x1004),
|
||||||
create_owedge(player, 'Dark Bonk Rock EN', 0x6b, Ea, Ld, 0x3a) .coordInfo(0x0340),
|
create_owedge(player, 'Dark Bonk Rocks EN', 0x6b, Ea, Ld, 0x3a) .coordInfo(0x0340),
|
||||||
create_owedge(player, 'Dark Bonk Rock EC', 0x6b, Ea, Ld, 0x3b) .coordInfo(0x05c0),
|
create_owedge(player, 'Dark Bonk Rocks EC', 0x6b, Ea, Ld, 0x3b) .coordInfo(0x05c0),
|
||||||
create_owedge(player, 'Dark Bonk Rock ES', 0x6b, Ea, Ld, 0x3c) .coordInfo(0x08c0),
|
create_owedge(player, 'Dark Bonk Rocks ES', 0x6b, Ea, Ld, 0x3c) .coordInfo(0x08c0),
|
||||||
create_owedge(player, 'Big Bomb Shop NE', 0x6c, No, Ld, 0x33) .coordInfo(0x1814),
|
create_owedge(player, 'Big Bomb Shop NE', 0x6c, No, Ld, 0x33) .coordInfo(0x1814),
|
||||||
create_owedge(player, 'Big Bomb Shop SC', 0x6c, So, Ld, 0x38) .coordInfo(0x100e),
|
create_owedge(player, 'Big Bomb Shop SC', 0x6c, So, Ld, 0x38) .coordInfo(0x100e),
|
||||||
create_owedge(player, 'Big Bomb Shop WN', 0x6c, We, Ld, 0x3b) .coordInfo(0x0360),
|
create_owedge(player, 'Big Bomb Shop WN', 0x6c, We, Ld, 0x3b) .coordInfo(0x0360),
|
||||||
@@ -278,27 +295,27 @@ def create_owedges(world, player):
|
|||||||
create_owedge(player, 'Hype Cave WN', 0x74, We, Ld, 0x42) .coordInfo(0x02e0),
|
create_owedge(player, 'Hype Cave WN', 0x74, We, Ld, 0x42) .coordInfo(0x02e0),
|
||||||
create_owedge(player, 'Hype Cave WC', 0x74, We, Wr, 0x43) .coordInfo(0x05e0),
|
create_owedge(player, 'Hype Cave WC', 0x74, We, Wr, 0x43) .coordInfo(0x05e0),
|
||||||
create_owedge(player, 'Hype Cave WS', 0x74, We, Ld, 0x44) .coordInfo(0x08e0),
|
create_owedge(player, 'Hype Cave WS', 0x74, We, Ld, 0x44) .coordInfo(0x08e0),
|
||||||
create_owedge(player, 'Dark Lake Hylia NW', 0x75, No, Ld, 0x3b) .coordInfo(0x180c),
|
create_owedge(player, 'Ice Lake NW', 0x75, No, Ld, 0x3b) .coordInfo(0x180c),
|
||||||
create_owedge(player, 'Dark Lake Hylia NC', 0x75, No, Wr, 0x3c, 0x76).coordInfo(0x185a),
|
create_owedge(player, 'Ice Lake NC', 0x75, No, Wr, 0x3c, 0x76).coordInfo(0x185a),
|
||||||
create_owedge(player, 'Dark Lake Hylia NE', 0x75, No, Ld, 0x3d, 0x76).coordInfo(0x1860),
|
create_owedge(player, 'Ice Lake NE', 0x75, No, Ld, 0x3d, 0x76).coordInfo(0x1860),
|
||||||
create_owedge(player, 'Dark Lake Hylia WS', 0x75, We, Ld, 0x48, 0x7d).coordInfo(0x1860),
|
create_owedge(player, 'Ice Lake WS', 0x75, We, Ld, 0x48, 0x7d).coordInfo(0x1860),
|
||||||
create_owedge(player, 'Dark Lake Hylia EC', 0x75, Ea, Wr, 0x48, 0x7e).coordInfo(0x1680),
|
create_owedge(player, 'Ice Lake EC', 0x75, Ea, Wr, 0x48, 0x7e).coordInfo(0x1680),
|
||||||
create_owedge(player, 'Dark Lake Hylia ES', 0x75, Ea, Ld, 0x49, 0x7e).coordInfo(0x1880),
|
create_owedge(player, 'Ice Lake ES', 0x75, Ea, Ld, 0x49, 0x7e).coordInfo(0x1880),
|
||||||
create_owedge(player, 'Dark Shopping Mall SW', 0x77, So, Wr, 0x3e) .coordInfo(0x1002),
|
create_owedge(player, 'Shopping Mall SW', 0x77, So, Wr, 0x3e) .coordInfo(0x1002),
|
||||||
create_owedge(player, 'Dark Shopping Mall SE', 0x77, So, Ld, 0x3f) .coordInfo(0x101c),
|
create_owedge(player, 'Shopping Mall SE', 0x77, So, Ld, 0x3f) .coordInfo(0x101c),
|
||||||
create_owedge(player, 'Dark Purple Chest EC', 0x7a, Ea, Ld, 0x44) .coordInfo(0x0640),
|
create_owedge(player, 'Swamp Nook EC', 0x7a, Ea, Ld, 0x44) .coordInfo(0x0640),
|
||||||
create_owedge(player, 'Dark Purple Chest ES', 0x7a, Ea, Ld, 0x45) .coordInfo(0x08c0),
|
create_owedge(player, 'Swamp Nook ES', 0x7a, Ea, Ld, 0x45) .coordInfo(0x08c0),
|
||||||
create_owedge(player, 'Swamp Palace NC', 0x7b, No, Ld, 0x3e) .coordInfo(0x1816),
|
create_owedge(player, 'Swamp NC', 0x7b, No, Ld, 0x3e) .coordInfo(0x1816),
|
||||||
create_owedge(player, 'Swamp Palace WC', 0x7b, We, Ld, 0x45) .coordInfo(0x0660),
|
create_owedge(player, 'Swamp WC', 0x7b, We, Ld, 0x45) .coordInfo(0x0660),
|
||||||
create_owedge(player, 'Swamp Palace WS', 0x7b, We, Ld, 0x46) .coordInfo(0x08e0),
|
create_owedge(player, 'Swamp WS', 0x7b, We, Ld, 0x46) .coordInfo(0x08e0),
|
||||||
create_owedge(player, 'Swamp Palace EC', 0x7b, Ea, Ld, 0x46) .coordInfo(0x04c0),
|
create_owedge(player, 'Swamp EC', 0x7b, Ea, Ld, 0x46) .coordInfo(0x04c0),
|
||||||
create_owedge(player, 'Dark South Pass NC', 0x7c, No, Ld, 0x3f) .coordInfo(0x1810),
|
create_owedge(player, 'Dark South Pass NC', 0x7c, No, Ld, 0x3f) .coordInfo(0x1810),
|
||||||
create_owedge(player, 'Dark South Pass WC', 0x7c, We, Ld, 0x47) .coordInfo(0x04e0),
|
create_owedge(player, 'Dark South Pass WC', 0x7c, We, Ld, 0x47) .coordInfo(0x04e0),
|
||||||
create_owedge(player, 'Dark South Pass ES', 0x7c, Ea, Ld, 0x47) .coordInfo(0x08c0),
|
create_owedge(player, 'Dark South Pass ES', 0x7c, Ea, Ld, 0x47) .coordInfo(0x08c0),
|
||||||
create_owedge(player, 'Southeast DW NW', 0x7f, No, Wr, 0x40) .coordInfo(0x1802),
|
create_owedge(player, 'Bomber Corner NW', 0x7f, No, Wr, 0x40) .coordInfo(0x1802),
|
||||||
create_owedge(player, 'Southeast DW NE', 0x7f, No, Ld, 0x41) .coordInfo(0x181c),
|
create_owedge(player, 'Bomber Corner NE', 0x7f, No, Ld, 0x41) .coordInfo(0x181c),
|
||||||
create_owedge(player, 'Southeast DW WC', 0x7f, We, Wr, 0x49) .coordInfo(0x05e0),
|
create_owedge(player, 'Bomber Corner WC', 0x7f, We, Wr, 0x49) .coordInfo(0x05e0),
|
||||||
create_owedge(player, 'Southeast DW WS', 0x7f, We, Ld, 0x4a) .coordInfo(0x0860),
|
create_owedge(player, 'Bomber Corner WS', 0x7f, We, Ld, 0x4a) .coordInfo(0x0860),
|
||||||
create_owedge(player, 'Master Sword Meadow SC', 0x80, So, Ld, 0x40) .coordInfo(0x0000),
|
create_owedge(player, 'Master Sword Meadow SC', 0x80, So, Ld, 0x40) .coordInfo(0x0000),
|
||||||
create_owedge(player, 'Hobo EC', 0x80, Ea, Wr, 0x4a) .coordInfo(0x0020),
|
create_owedge(player, 'Hobo EC', 0x80, Ea, Wr, 0x4a) .coordInfo(0x0020),
|
||||||
create_owedge(player, 'Zoras Domain SW', 0x81, So, Ld, 0x41, 0x89).coordInfo(0x1782)
|
create_owedge(player, 'Zoras Domain SW', 0x81, So, Ld, 0x41, 0x89).coordInfo(0x1782)
|
||||||
@@ -312,13 +329,27 @@ def create_owedge(player, name, owIndex, direction, terrain, edge_id, owSlotInde
|
|||||||
|
|
||||||
|
|
||||||
OWEdgeGroups = {
|
OWEdgeGroups = {
|
||||||
(LW, Hz, Ld, 1): (
|
#(IsStandard, World, EdgeAxis, Terrain, HasParallel, NumberInGroup)
|
||||||
|
(St, LW, Vt, Ld, PL, 1): (
|
||||||
|
[
|
||||||
|
['Hyrule Castle SW'],
|
||||||
|
['Hyrule Castle SE']
|
||||||
|
],
|
||||||
|
[
|
||||||
|
['Central Bonk Rocks NW'],
|
||||||
|
['Links House NE']
|
||||||
|
]
|
||||||
|
),
|
||||||
|
(St, LW, Hz, Ld, PL, 3): (
|
||||||
|
[['Central Bonk Rocks EN', 'Central Bonk Rocks EC', 'Central Bonk Rocks ES']],
|
||||||
|
[['Links House WN', 'Links House WC', 'Links House WS']]
|
||||||
|
),
|
||||||
|
(Op, LW, Hz, Ld, PL, 1): (
|
||||||
[
|
[
|
||||||
['Lost Woods EN'],
|
['Lost Woods EN'],
|
||||||
['East Death Mountain EN'],
|
['East Death Mountain EN'],
|
||||||
['Sanctuary EC'],
|
['Sanctuary EC'],
|
||||||
['Graveyard EC'],
|
['Graveyard EC'],
|
||||||
['Forgotten Forest ES'],
|
|
||||||
['Kakariko ES'],
|
['Kakariko ES'],
|
||||||
['Hyrule Castle ES'],
|
['Hyrule Castle ES'],
|
||||||
['Maze Race ES'],
|
['Maze Race ES'],
|
||||||
@@ -337,10 +368,9 @@ OWEdgeGroups = {
|
|||||||
['Lumberjack WN'],
|
['Lumberjack WN'],
|
||||||
['Death Mountain TR Pegs WN'],
|
['Death Mountain TR Pegs WN'],
|
||||||
['Graveyard WC'],
|
['Graveyard WC'],
|
||||||
['Useless Fairy WC'],
|
['River Bend WC'],
|
||||||
['Hyrule Castle WN'],
|
|
||||||
['Blacksmith WS'],
|
['Blacksmith WS'],
|
||||||
['Sand Dune WN'],
|
['Sand Dunes WN'],
|
||||||
['Kakariko Suburb WS'],
|
['Kakariko Suburb WS'],
|
||||||
['Flute Boy WS'],
|
['Flute Boy WS'],
|
||||||
['Stone Bridge WS'],
|
['Stone Bridge WS'],
|
||||||
@@ -354,38 +384,42 @@ OWEdgeGroups = {
|
|||||||
['East Death Mountain WS']
|
['East Death Mountain WS']
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
(LW, Vt, Ld, 1): (
|
(Op, LW, Hz, Ld, NP, 1): (
|
||||||
|
[
|
||||||
|
['Forgotten Forest ES']
|
||||||
|
],
|
||||||
|
[
|
||||||
|
['Hyrule Castle WN']
|
||||||
|
]
|
||||||
|
),
|
||||||
|
(Op, LW, Vt, Ld, PL, 1): (
|
||||||
[
|
[
|
||||||
['Lumberjack SW'],
|
['Lumberjack SW'],
|
||||||
['DM Ascent SE'],
|
['Mountain Entry SE'],
|
||||||
['Lost Woods SE'],
|
['Lost Woods SE'],
|
||||||
['Zora Approach SE'],
|
['Zora Approach SE'],
|
||||||
['Kakariko Fortune SC'],
|
['Kakariko Fortune SC'],
|
||||||
['Wooden Bridge SW'],
|
['Wooden Bridge SW'],
|
||||||
['Kakariko SE'],
|
['Kakariko SE'],
|
||||||
['Hyrule Castle SW'],
|
['Sand Dunes SC'],
|
||||||
['Hyrule Castle SE'],
|
|
||||||
['Sand Dune SC'],
|
|
||||||
['Eastern Palace SW'],
|
['Eastern Palace SW'],
|
||||||
['Eastern Palace SE'],
|
['Eastern Palace SE'],
|
||||||
['Central Bonk Rock SW'],
|
['Central Bonk Rocks SW'],
|
||||||
['Links House SC'],
|
['Links House SC'],
|
||||||
['Stone Bridge SC'],
|
['Stone Bridge SC'],
|
||||||
['C Whirlpool SC'],
|
['C Whirlpool SC'],
|
||||||
['Statues SC'],
|
['Statues SC'],
|
||||||
['Tree Line SE'],
|
['Tree Line SE'],
|
||||||
['Ice Rod Cave SE']
|
['Ice Cave SE']
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
['DM Ascent NW'],
|
['Mountain Entry NW'],
|
||||||
['Kakariko Pond NE'],
|
['Kakariko Pond NE'],
|
||||||
['Kakariko Fortune NE'],
|
['Kakariko Fortune NE'],
|
||||||
['Zora Warning NE'],
|
['Zora Warning NE'],
|
||||||
['Kakariko NE'],
|
['Kakariko NE'],
|
||||||
['Sand Dune NW'],
|
['Sand Dunes NW'],
|
||||||
['Kakariko Suburb NE'],
|
['Kakariko Suburb NE'],
|
||||||
['Central Bonk Rock NW'],
|
|
||||||
['Links House NE'],
|
|
||||||
['Stone Bridge NC'],
|
['Stone Bridge NC'],
|
||||||
['Tree Line NW'],
|
['Tree Line NW'],
|
||||||
['Eastern Nook NE'],
|
['Eastern Nook NE'],
|
||||||
@@ -396,33 +430,39 @@ OWEdgeGroups = {
|
|||||||
['South Pass NC'],
|
['South Pass NC'],
|
||||||
['Lake Hylia NE'],
|
['Lake Hylia NE'],
|
||||||
['Octoballoon NE']
|
['Octoballoon NE']
|
||||||
],
|
]
|
||||||
),
|
),
|
||||||
(LW, Hz, Ld, 2): (
|
(Op, LW, Hz, Ld, PL, 2): (
|
||||||
[
|
[
|
||||||
['Kakariko Fortune EN', 'Kakariko Fortune ES'],
|
['Kakariko Fortune EN', 'Kakariko Fortune ES'],
|
||||||
['Kakariko Pond EN', 'Kakariko Pond ES'],
|
['Kakariko Pond EN', 'Kakariko Pond ES'],
|
||||||
['Desert EC', 'Desert ES'],
|
['Desert Pass EC', 'Desert Pass ES'],
|
||||||
['Purple Chest EC', 'Purple Chest ES'],
|
['River Bend EC', 'River Bend ES'],
|
||||||
['Useless Fairy EC', 'Useless Fairy ES'],
|
|
||||||
['C Whirlpool EN', 'C Whirlpool ES']
|
['C Whirlpool EN', 'C Whirlpool ES']
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
['Kakariko Pond WN', 'Kakariko Pond WS'],
|
['Kakariko Pond WN', 'Kakariko Pond WS'],
|
||||||
['Sanctuary WN', 'Sanctuary WS'],
|
['Sanctuary WN', 'Sanctuary WS'],
|
||||||
['Purple Chest WC', 'Purple Chest WS'],
|
|
||||||
['Dam WC', 'Dam WS'],
|
['Dam WC', 'Dam WS'],
|
||||||
['Potion Shop WC', 'Potion Shop WS'],
|
['Potion Shop WC', 'Potion Shop WS'],
|
||||||
['Statues WN', 'Statues WS']
|
['Statues WN', 'Statues WS']
|
||||||
],
|
]
|
||||||
),
|
),
|
||||||
(LW, Vt, Ld, 2): (
|
(Op, LW, Hz, Ld, NP, 2): (
|
||||||
|
[
|
||||||
|
['Desert EC', 'Desert ES']
|
||||||
|
],
|
||||||
|
[
|
||||||
|
['Desert Pass WC', 'Desert Pass WS']
|
||||||
|
]
|
||||||
|
),
|
||||||
|
(Op, LW, Vt, Ld, PL, 2): (
|
||||||
[
|
[
|
||||||
['Lost Woods SW', 'Lost Woods SC'],
|
['Lost Woods SW', 'Lost Woods SC'],
|
||||||
['Lost Woods Pass SW', 'Lost Woods Pass SE'],
|
['Lost Woods Pass SW', 'Lost Woods Pass SE'],
|
||||||
['Kakariko Pond SW', 'Kakariko Pond SE'],
|
['Kakariko Pond SW', 'Kakariko Pond SE'],
|
||||||
['Flute Boy SW', 'Flute Boy SC'],
|
['Flute Boy SW', 'Flute Boy SC'],
|
||||||
['Useless Fairy SW', 'Useless Fairy SE']
|
['River Bend SW', 'River Bend SE']
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
['Lost Woods Pass NW', 'Lost Woods Pass NE'],
|
['Lost Woods Pass NW', 'Lost Woods Pass NE'],
|
||||||
@@ -430,18 +470,14 @@ OWEdgeGroups = {
|
|||||||
['Forgotten Forest NW', 'Forgotten Forest NE'],
|
['Forgotten Forest NW', 'Forgotten Forest NE'],
|
||||||
['Cave 45 NW', 'Cave 45 NC'],
|
['Cave 45 NW', 'Cave 45 NC'],
|
||||||
['Wooden Bridge NW', 'Wooden Bridge NE']
|
['Wooden Bridge NW', 'Wooden Bridge NE']
|
||||||
],
|
]
|
||||||
),
|
),
|
||||||
(LW, Hz, Ld, 3): (
|
(Op, LW, Hz, Wr, PL, 1): (
|
||||||
[['Central Bonk Rock EN', 'Central Bonk Rock EC', 'Central Bonk Rock ES']],
|
|
||||||
[['Links House WN', 'Links House WC', 'Links House WS']]
|
|
||||||
),
|
|
||||||
(LW, Hz, Wr, 1): (
|
|
||||||
[
|
[
|
||||||
['Potion Shop EN'],
|
['Potion Shop EN'],
|
||||||
['Lake Hylia EC'],
|
['Lake Hylia EC'],
|
||||||
['Stone Bridge EC'],
|
['Stone Bridge EC'],
|
||||||
['Useless Fairy EN'],
|
['River Bend EN'],
|
||||||
['C Whirlpool EC']
|
['C Whirlpool EC']
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@@ -452,11 +488,11 @@ OWEdgeGroups = {
|
|||||||
['Statues WC']
|
['Statues WC']
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
(LW, Vt, Wr, 1): (
|
(Op, LW, Vt, Wr, PL, 1): (
|
||||||
[
|
[
|
||||||
['Tree Line SC'],
|
['Tree Line SC'],
|
||||||
['Ice Rod Cave SW'],
|
['Ice Cave SW'],
|
||||||
['Useless Fairy SC']
|
['River Bend SC']
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
['Lake Hylia NC'],
|
['Lake Hylia NC'],
|
||||||
@@ -464,7 +500,7 @@ OWEdgeGroups = {
|
|||||||
['Wooden Bridge NC']
|
['Wooden Bridge NC']
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
(DW, Hz, Ld, 1): (
|
(Op, DW, Hz, Ld, PL, 1): (
|
||||||
[
|
[
|
||||||
['Skull Woods EN'],
|
['Skull Woods EN'],
|
||||||
['East Dark Death Mountain EN'],
|
['East Dark Death Mountain EN'],
|
||||||
@@ -475,10 +511,10 @@ OWEdgeGroups = {
|
|||||||
['Frog ES'],
|
['Frog ES'],
|
||||||
['Big Bomb Shop ES'],
|
['Big Bomb Shop ES'],
|
||||||
['Circle of Bushes EC'],
|
['Circle of Bushes EC'],
|
||||||
['Swamp Palace EC'],
|
['Swamp EC'],
|
||||||
['Dark South Pass ES'],
|
['Dark South Pass ES'],
|
||||||
['Dark Witch EC'],
|
['Dark Witch EC'],
|
||||||
['Dark Lake Hylia ES'],
|
['Ice Lake ES'],
|
||||||
['Hammer Bridge EN'],
|
['Hammer Bridge EN'],
|
||||||
['West Dark Death Mountain EN'],
|
['West Dark Death Mountain EN'],
|
||||||
['West Dark Death Mountain ES']
|
['West Dark Death Mountain ES']
|
||||||
@@ -489,20 +525,20 @@ OWEdgeGroups = {
|
|||||||
['Dark Graveyard WC'],
|
['Dark Graveyard WC'],
|
||||||
['Qirn Jump WC'],
|
['Qirn Jump WC'],
|
||||||
['Hammer Pegs WS'],
|
['Hammer Pegs WS'],
|
||||||
['Dark Dune WN'],
|
['Dark Dunes WN'],
|
||||||
['Stumpy WS'],
|
['Stumpy WS'],
|
||||||
['Hammer Bridge WS'],
|
['Hammer Bridge WS'],
|
||||||
['Dark C Whirlpool WC'],
|
['Dark C Whirlpool WC'],
|
||||||
['Dark South Pass WC'],
|
['Dark South Pass WC'],
|
||||||
['Dark Lake Hylia WS'],
|
['Ice Lake WS'],
|
||||||
['Catfish Approach WC'],
|
['Catfish Approach WC'],
|
||||||
['Southeast DW WS'],
|
['Bomber Corner WS'],
|
||||||
['Dark Tree Line WN'],
|
['Dark Tree Line WN'],
|
||||||
['East Dark Death Mountain WN'],
|
['East Dark Death Mountain WN'],
|
||||||
['East Dark Death Mountain WS']
|
['East Dark Death Mountain WS']
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
(DW, Vt, Ld, 1): (
|
(Op, DW, Vt, Ld, PL, 1): (
|
||||||
[
|
[
|
||||||
['Dark Lumberjack SW'],
|
['Dark Lumberjack SW'],
|
||||||
['Bumper Cave SE'],
|
['Bumper Cave SE'],
|
||||||
@@ -513,16 +549,16 @@ OWEdgeGroups = {
|
|||||||
['Village of Outcasts SE'],
|
['Village of Outcasts SE'],
|
||||||
['Pyramid SW'],
|
['Pyramid SW'],
|
||||||
['Pyramid SE'],
|
['Pyramid SE'],
|
||||||
['Dark Dune SC'],
|
['Dark Dunes SC'],
|
||||||
['Palace of Darkness SW'],
|
['Palace of Darkness SW'],
|
||||||
['Palace of Darkness SE'],
|
['Palace of Darkness SE'],
|
||||||
['Dark Bonk Rock SW'],
|
['Dark Bonk Rocks SW'],
|
||||||
['Big Bomb Shop SC'],
|
['Big Bomb Shop SC'],
|
||||||
['Hammer Bridge SC'],
|
['Hammer Bridge SC'],
|
||||||
['Dark C Whirlpool SC'],
|
['Dark C Whirlpool SC'],
|
||||||
['Hype Cave SC'],
|
['Hype Cave SC'],
|
||||||
['Dark Tree Line SE'],
|
['Dark Tree Line SE'],
|
||||||
['Dark Shopping Mall SE']
|
['Shopping Mall SE']
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
['Bumper Cave NW'],
|
['Bumper Cave NW'],
|
||||||
@@ -530,41 +566,47 @@ OWEdgeGroups = {
|
|||||||
['Dark Fortune NE'],
|
['Dark Fortune NE'],
|
||||||
['Catfish Approach NE'],
|
['Catfish Approach NE'],
|
||||||
['Village of Outcasts NE'],
|
['Village of Outcasts NE'],
|
||||||
['Dark Dune NW'],
|
['Dark Dunes NW'],
|
||||||
['Frog NE'],
|
['Frog NE'],
|
||||||
['Dark Bonk Rock NW'],
|
['Dark Bonk Rocks NW'],
|
||||||
['Big Bomb Shop NE'],
|
['Big Bomb Shop NE'],
|
||||||
['Hammer Bridge NC'],
|
['Hammer Bridge NC'],
|
||||||
['Dark Tree Line NW'],
|
['Dark Tree Line NW'],
|
||||||
['Palace of Darkness Nook NE'],
|
['Palace of Darkness Nook NE'],
|
||||||
['Dark C Whirlpool NW'],
|
['Dark C Whirlpool NW'],
|
||||||
['Hype Cave NC'],
|
['Hype Cave NC'],
|
||||||
['Dark Lake Hylia NW'],
|
['Ice Lake NW'],
|
||||||
['Swamp Palace NC'],
|
['Swamp NC'],
|
||||||
['Dark South Pass NC'],
|
['Dark South Pass NC'],
|
||||||
['Dark Lake Hylia NE'],
|
['Ice Lake NE'],
|
||||||
['Southeast DW NE']
|
['Bomber Corner NE']
|
||||||
],
|
]
|
||||||
),
|
),
|
||||||
(DW, Hz, Ld, 2): (
|
(Op, DW, Hz, Ld, PL, 2): (
|
||||||
[
|
[
|
||||||
['Dark Fortune EN', 'Dark Fortune ES'],
|
['Dark Fortune EN', 'Dark Fortune ES'],
|
||||||
['Outcast Pond EN', 'Outcast Pond ES'],
|
['Outcast Pond EN', 'Outcast Pond ES'],
|
||||||
['Dark Purple Chest EC', 'Dark Purple Chest ES'],
|
['Swamp Nook EC', 'Swamp Nook ES'],
|
||||||
['Dig Game EC', 'Dig Game ES'],
|
|
||||||
['Qirn Jump EC', 'Qirn Jump ES'],
|
['Qirn Jump EC', 'Qirn Jump ES'],
|
||||||
['Dark C Whirlpool EN', 'Dark C Whirlpool ES']
|
['Dark C Whirlpool EN', 'Dark C Whirlpool ES']
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
['Outcast Pond WN', 'Outcast Pond WS'],
|
['Outcast Pond WN', 'Outcast Pond WS'],
|
||||||
['Dark Chapel WN', 'Dark Chapel WS'],
|
['Dark Chapel WN', 'Dark Chapel WS'],
|
||||||
['Swamp Palace WC', 'Swamp Palace WS'],
|
['Swamp WC', 'Swamp WS'],
|
||||||
['Frog WC', 'Frog WS'],
|
|
||||||
['Dark Witch WC', 'Dark Witch WS'],
|
['Dark Witch WC', 'Dark Witch WS'],
|
||||||
['Hype Cave WN', 'Hype Cave WS']
|
['Hype Cave WN', 'Hype Cave WS']
|
||||||
],
|
]
|
||||||
),
|
),
|
||||||
(DW, Vt, Ld, 2): (
|
(Op, DW, Hz, Ld, NP, 2): (
|
||||||
|
[
|
||||||
|
['Dig Game EC', 'Dig Game ES']
|
||||||
|
],
|
||||||
|
[
|
||||||
|
['Frog WC', 'Frog WS']
|
||||||
|
]
|
||||||
|
),
|
||||||
|
(Op, DW, Vt, Ld, PL, 2): (
|
||||||
[
|
[
|
||||||
['Skull Woods SW', 'Skull Woods SC'],
|
['Skull Woods SW', 'Skull Woods SC'],
|
||||||
['Skull Woods Pass SW', 'Skull Woods Pass SE'],
|
['Skull Woods Pass SW', 'Skull Woods Pass SE'],
|
||||||
@@ -578,37 +620,37 @@ OWEdgeGroups = {
|
|||||||
['Shield Shop NW', 'Shield Shop NE'],
|
['Shield Shop NW', 'Shield Shop NE'],
|
||||||
['Circle of Bushes NW', 'Circle of Bushes NC'],
|
['Circle of Bushes NW', 'Circle of Bushes NC'],
|
||||||
['Broken Bridge NW', 'Broken Bridge NE']
|
['Broken Bridge NW', 'Broken Bridge NE']
|
||||||
],
|
]
|
||||||
),
|
),
|
||||||
(DW, Hz, Ld, 3): (
|
(Op, DW, Hz, Ld, PL, 3): (
|
||||||
[['Dark Bonk Rock EN', 'Dark Bonk Rock EC', 'Dark Bonk Rock ES']],
|
[['Dark Bonk Rocks EN', 'Dark Bonk Rocks EC', 'Dark Bonk Rocks ES']],
|
||||||
[['Big Bomb Shop WN', 'Big Bomb Shop WC', 'Big Bomb Shop WS']]
|
[['Big Bomb Shop WN', 'Big Bomb Shop WC', 'Big Bomb Shop WS']]
|
||||||
),
|
),
|
||||||
(DW, Hz, Wr, 1): (
|
(Op, DW, Hz, Wr, PL, 1): (
|
||||||
[
|
[
|
||||||
['Dark Witch EN'],
|
['Dark Witch EN'],
|
||||||
['Dark Lake Hylia EC'],
|
['Ice Lake EC'],
|
||||||
['Hammer Bridge EC'],
|
['Hammer Bridge EC'],
|
||||||
['Qirn Jump EN'],
|
['Qirn Jump EN'],
|
||||||
['Dark C Whirlpool EC']
|
['Dark C Whirlpool EC']
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
['Catfish Approach WN'],
|
['Catfish Approach WN'],
|
||||||
['Southeast DW WC'],
|
['Bomber Corner WC'],
|
||||||
['Dark Tree Line WC'],
|
['Dark Tree Line WC'],
|
||||||
['Dark Witch WN'],
|
['Dark Witch WN'],
|
||||||
['Hype Cave WC']
|
['Hype Cave WC']
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
(DW, Vt, Wr, 1): (
|
(Op, DW, Vt, Wr, PL, 1): (
|
||||||
[
|
[
|
||||||
['Dark Tree Line SC'],
|
['Dark Tree Line SC'],
|
||||||
['Dark Shopping Mall SW'],
|
['Shopping Mall SW'],
|
||||||
['Qirn Jump SC']
|
['Qirn Jump SC']
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
['Dark Lake Hylia NC'],
|
['Ice Lake NC'],
|
||||||
['Southeast DW NW'],
|
['Bomber Corner NW'],
|
||||||
['Broken Bridge NC']
|
['Broken Bridge NC']
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import random
|
import random
|
||||||
from BaseClasses import OWEdge, WorldType, Direction, Terrain
|
from BaseClasses import OWEdge, WorldType, Direction, Terrain
|
||||||
from OWEdges import OWEdgeGroups
|
from Utils import bidict
|
||||||
|
from OWEdges import OWEdgeGroups, IsParallel
|
||||||
|
|
||||||
__version__ = '0.1.1.2-u'
|
__version__ = '0.1.2.0-u'
|
||||||
|
|
||||||
def link_overworld(world, player):
|
def link_overworld(world, player):
|
||||||
# setup mandatory connections
|
# setup mandatory connections
|
||||||
@@ -11,197 +12,273 @@ def link_overworld(world, player):
|
|||||||
for exitname, destname in temporary_mandatory_connections:
|
for exitname, destname in temporary_mandatory_connections:
|
||||||
connect_two_way(world, exitname, destname, player)
|
connect_two_way(world, exitname, destname, player)
|
||||||
|
|
||||||
connect_custom(world, player)
|
connected_edges = []
|
||||||
|
|
||||||
|
connect_custom(world, connected_edges, player)
|
||||||
|
|
||||||
# if we do not shuffle, set default connections
|
# if we do not shuffle, set default connections
|
||||||
if world.owShuffle[player] == 'vanilla':
|
if world.owShuffle[player] == 'vanilla':
|
||||||
for exitname, destname in default_connections:
|
for exitname, destname in default_connections:
|
||||||
connect_two_way(world, exitname, destname, player)
|
connect_two_way(world, exitname, destname, player)
|
||||||
else:
|
else:
|
||||||
remaining_edges = []
|
if world.owKeepSimilar[player] and world.owParallelWorlds[player]:
|
||||||
for exitname, destname in default_connections:
|
for exitname, destname in parallelsimilar_connections:
|
||||||
remaining_edges.append(exitname)
|
|
||||||
remaining_edges.append(destname)
|
|
||||||
|
|
||||||
if world.mode[player] == 'standard':
|
|
||||||
for exitname, destname in standard_connections:
|
|
||||||
connect_two_way(world, exitname, destname, player)
|
connect_two_way(world, exitname, destname, player)
|
||||||
remaining_edges.remove(exitname)
|
connected_edges.append(exitname)
|
||||||
remaining_edges.remove(destname)
|
connected_edges.append(destname)
|
||||||
|
|
||||||
#TODO: Remove, just for testing
|
#TODO: Remove, just for testing
|
||||||
for exitname, destname in test_connections:
|
for exitname, destname in test_connections:
|
||||||
connect_two_way(world, exitname, destname, player)
|
connect_two_way(world, exitname, destname, player)
|
||||||
remaining_edges.remove(exitname)
|
connected_edges.append(exitname)
|
||||||
remaining_edges.remove(destname)
|
connected_edges.append(destname)
|
||||||
|
|
||||||
|
trimmed_groups = remove_reserved(world, OWEdgeGroups, connected_edges, player)
|
||||||
|
|
||||||
if world.owShuffle[player] == 'full':
|
if world.owShuffle[player] == 'full':
|
||||||
|
#predefined shuffle groups get reorganized here
|
||||||
if world.owKeepSimilar[player]:
|
if world.owKeepSimilar[player]:
|
||||||
#TODO: remove edges from list that are already placed, Std and Plando
|
if world.owParallelWorlds[player]:
|
||||||
# shuffle edges in groups that connect the same pair of tiles
|
if world.mode[player] == 'standard':
|
||||||
for grouping in (OWEdgeGroups, None):
|
#tuple stays (A,B,C,D,E,F)
|
||||||
if grouping is not None: #TODO: Figure out why ^ has to be a tuple for this to work
|
for grouping in (trimmed_groups, None):
|
||||||
groups = list(grouping.values())
|
if grouping is not None: #TODO: Figure out why ^ has to be a tuple for this to work
|
||||||
random.shuffle(groups)
|
groups = list(grouping.values())
|
||||||
for (forward_edge_sets, back_edge_sets) in groups:
|
else:
|
||||||
assert len(forward_edge_sets) == len(back_edge_sets)
|
#tuple goes to (_,B,C,D,E,F)
|
||||||
random.shuffle(back_edge_sets)
|
for grouping in (trimmed_groups, None):
|
||||||
|
if grouping is not None: #TODO: Figure out why ^ has to be a tuple for this to work
|
||||||
for (forward_set, back_set) in zip(forward_edge_sets, back_edge_sets):
|
new_grouping = {}
|
||||||
assert len(forward_set) == len(back_set)
|
|
||||||
for (forward_edge, back_edge) in zip(forward_set, back_set):
|
for group in grouping.keys():
|
||||||
connect_two_way(world, forward_edge, back_edge, player)
|
(_, region, axis, terrain, parallel, count) = group
|
||||||
remaining_edges.remove(forward_edge)
|
new_grouping[(region, axis, terrain, parallel, count)] = ([], [])
|
||||||
remaining_edges.remove(back_edge)
|
|
||||||
|
for group in grouping.keys():
|
||||||
assert len(remaining_edges) == 0, remaining_edges
|
(_, region, axis, terrain, parallel, count) = group
|
||||||
|
(forward_edges, back_edges) = grouping[group]
|
||||||
|
(exist_forward_edges, exist_back_edges) = new_grouping[(region, axis, terrain, parallel, count)]
|
||||||
|
exist_forward_edges.extend(forward_edges)
|
||||||
|
exist_back_edges.extend(back_edges)
|
||||||
|
new_grouping[(region, axis, terrain, parallel, count)] = (exist_forward_edges, exist_back_edges)
|
||||||
|
|
||||||
|
groups = list(new_grouping.values())
|
||||||
|
else:
|
||||||
|
if world.mode[player] == 'standard':
|
||||||
|
#tuple stays (A,B,C,D,_,F)
|
||||||
|
for grouping in (trimmed_groups, None):
|
||||||
|
if grouping is not None: #TODO: Figure out why ^ has to be a tuple for this to work
|
||||||
|
new_grouping = {}
|
||||||
|
|
||||||
|
for group in grouping.keys():
|
||||||
|
(std, region, axis, terrain, _, count) = group
|
||||||
|
new_grouping[(std, region, axis, terrain, count)] = ([], [])
|
||||||
|
|
||||||
|
for group in grouping.keys():
|
||||||
|
(std, region, axis, terrain, _, count) = group
|
||||||
|
(forward_edges, back_edges) = grouping[group]
|
||||||
|
(exist_forward_edges, exist_back_edges) = new_grouping[(std, region, axis, terrain, count)]
|
||||||
|
exist_forward_edges.extend(forward_edges)
|
||||||
|
exist_back_edges.extend(back_edges)
|
||||||
|
new_grouping[(std, region, axis, terrain, count)] = (exist_forward_edges, exist_back_edges)
|
||||||
|
|
||||||
|
groups = list(new_grouping.values())
|
||||||
|
else:
|
||||||
|
#tuple goes to (_,B,C,D,_,F)
|
||||||
|
for grouping in (trimmed_groups, None):
|
||||||
|
if grouping is not None: #TODO: Figure out why ^ has to be a tuple for this to work
|
||||||
|
new_grouping = {}
|
||||||
|
|
||||||
|
for group in grouping.keys():
|
||||||
|
(_, region, axis, terrain, _, count) = group
|
||||||
|
new_grouping[(region, axis, terrain, count)] = ([], [])
|
||||||
|
|
||||||
|
for group in grouping.keys():
|
||||||
|
(_, region, axis, terrain, _, count) = group
|
||||||
|
(forward_edges, back_edges) = grouping[group]
|
||||||
|
(exist_forward_edges, exist_back_edges) = new_grouping[(region, axis, terrain, count)]
|
||||||
|
exist_forward_edges.extend(forward_edges)
|
||||||
|
exist_back_edges.extend(back_edges)
|
||||||
|
new_grouping[(region, axis, terrain, count)] = (exist_forward_edges, exist_back_edges)
|
||||||
|
|
||||||
|
groups = list(new_grouping.values())
|
||||||
else:
|
else:
|
||||||
connect_remaining(world, remaining_edges, player)
|
if world.owParallelWorlds[player]:
|
||||||
|
if world.mode[player] == 'standard':
|
||||||
|
#tuple stays (A,B,C,D,E,_)
|
||||||
|
for grouping in (trimmed_groups, None):
|
||||||
|
if grouping is not None: #TODO: Figure out why ^ has to be a tuple for this to work
|
||||||
|
new_grouping = {}
|
||||||
|
|
||||||
|
for group in grouping.keys():
|
||||||
|
(std, region, axis, terrain, parallel, _) = group
|
||||||
|
new_grouping[(std, region, axis, terrain, parallel)] = ([], [])
|
||||||
|
|
||||||
|
for group in grouping.keys():
|
||||||
|
(std, region, axis, terrain, parallel, _) = group
|
||||||
|
(forward_edges, back_edges) = grouping[group]
|
||||||
|
forward_edges = [[i] for l in forward_edges for i in l]
|
||||||
|
back_edges = [[i] for l in back_edges for i in l]
|
||||||
|
|
||||||
|
(exist_forward_edges, exist_back_edges) = new_grouping[(std, region, axis, terrain, parallel)]
|
||||||
|
exist_forward_edges.extend(forward_edges)
|
||||||
|
exist_back_edges.extend(back_edges)
|
||||||
|
new_grouping[(std, region, axis, terrain, parallel)] = (exist_forward_edges, exist_back_edges)
|
||||||
|
|
||||||
|
groups = list(new_grouping.values())
|
||||||
|
else:
|
||||||
|
#tuple goes to (_,B,C,D,E,_)
|
||||||
|
for grouping in (trimmed_groups, None):
|
||||||
|
if grouping is not None: #TODO: Figure out why ^ has to be a tuple for this to work
|
||||||
|
new_grouping = {}
|
||||||
|
|
||||||
|
for group in grouping.keys():
|
||||||
|
(_, region, axis, terrain, parallel, _) = group
|
||||||
|
new_grouping[(region, axis, terrain, parallel)] = ([], [])
|
||||||
|
|
||||||
|
for group in grouping.keys():
|
||||||
|
(_, region, axis, terrain, parallel, _) = group
|
||||||
|
(forward_edges, back_edges) = grouping[group]
|
||||||
|
forward_edges = [[i] for l in forward_edges for i in l]
|
||||||
|
back_edges = [[i] for l in back_edges for i in l]
|
||||||
|
|
||||||
|
(exist_forward_edges, exist_back_edges) = new_grouping[(region, axis, terrain, parallel)]
|
||||||
|
exist_forward_edges.extend(forward_edges)
|
||||||
|
exist_back_edges.extend(back_edges)
|
||||||
|
new_grouping[(region, axis, terrain, parallel)] = (exist_forward_edges, exist_back_edges)
|
||||||
|
|
||||||
|
groups = list(new_grouping.values())
|
||||||
|
else:
|
||||||
|
if world.mode[player] == 'standard':
|
||||||
|
#tuple stays (A,B,C,D,_,_)
|
||||||
|
for grouping in (trimmed_groups, None):
|
||||||
|
if grouping is not None: #TODO: Figure out why ^ has to be a tuple for this to work
|
||||||
|
new_grouping = {}
|
||||||
|
|
||||||
|
for group in grouping.keys():
|
||||||
|
(std, region, axis, terrain, _, _) = group
|
||||||
|
new_grouping[(std, region, axis, terrain)] = ([], [])
|
||||||
|
|
||||||
|
for group in grouping.keys():
|
||||||
|
(std, region, axis, terrain, _, _) = group
|
||||||
|
(forward_edges, back_edges) = grouping[group]
|
||||||
|
forward_edges = [[i] for l in forward_edges for i in l]
|
||||||
|
back_edges = [[i] for l in back_edges for i in l]
|
||||||
|
|
||||||
|
(exist_forward_edges, exist_back_edges) = new_grouping[(std, region, axis, terrain)]
|
||||||
|
exist_forward_edges.extend(forward_edges)
|
||||||
|
exist_back_edges.extend(back_edges)
|
||||||
|
new_grouping[(std, region, axis, terrain)] = (exist_forward_edges, exist_back_edges)
|
||||||
|
|
||||||
|
groups = list(new_grouping.values())
|
||||||
|
else:
|
||||||
|
#tuple goes to (_,B,C,D,_,_)
|
||||||
|
for grouping in (trimmed_groups, None):
|
||||||
|
if grouping is not None: #TODO: Figure out why ^ has to be a tuple for this to work
|
||||||
|
new_grouping = {}
|
||||||
|
|
||||||
|
for group in grouping.keys():
|
||||||
|
(_, region, axis, terrain, _, _) = group
|
||||||
|
new_grouping[(region, axis, terrain)] = ([], [])
|
||||||
|
|
||||||
|
for group in grouping.keys():
|
||||||
|
(_, region, axis, terrain, _, _) = group
|
||||||
|
(forward_edges, back_edges) = grouping[group]
|
||||||
|
forward_edges = [[i] for l in forward_edges for i in l]
|
||||||
|
back_edges = [[i] for l in back_edges for i in l]
|
||||||
|
|
||||||
|
(exist_forward_edges, exist_back_edges) = new_grouping[(region, axis, terrain)]
|
||||||
|
exist_forward_edges.extend(forward_edges)
|
||||||
|
exist_back_edges.extend(back_edges)
|
||||||
|
new_grouping[(region, axis, terrain)] = (exist_forward_edges, exist_back_edges)
|
||||||
|
|
||||||
|
groups = list(new_grouping.values())
|
||||||
|
|
||||||
|
#all shuffling occurs here
|
||||||
|
random.shuffle(groups)
|
||||||
|
for (forward_edge_sets, back_edge_sets) in groups:
|
||||||
|
assert len(forward_edge_sets) == len(back_edge_sets)
|
||||||
|
random.shuffle(back_edge_sets)
|
||||||
|
for (forward_set, back_set) in zip(forward_edge_sets, back_edge_sets):
|
||||||
|
assert len(forward_set) == len(back_set)
|
||||||
|
for (forward_edge, back_edge) in zip(forward_set, back_set):
|
||||||
|
connect_two_way(world, forward_edge, back_edge, player)
|
||||||
|
connected_edges.append(forward_edge)
|
||||||
|
connected_edges.append(back_edge)
|
||||||
|
if world.owParallelWorlds[player] and forward_edge in parallel_links.keys():
|
||||||
|
connect_two_way(world, parallel_links[forward_edge], parallel_links[back_edge], player)
|
||||||
|
connected_edges.append(parallel_links[forward_edge])
|
||||||
|
connected_edges.append(parallel_links[back_edge])
|
||||||
|
|
||||||
|
assert len(connected_edges) == len(default_connections) * 2, connected_edges
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError('Shuffling not supported yet')
|
raise NotImplementedError('Shuffling not supported yet')
|
||||||
|
|
||||||
|
def connect_custom(world, connected_edges, player):
|
||||||
def connect_custom(world, player):
|
|
||||||
if hasattr(world, 'custom_overworld') and world.custom_overworld[player]:
|
if hasattr(world, 'custom_overworld') and world.custom_overworld[player]:
|
||||||
for exit_name, region_name in world.custom_overworld[player]:
|
for edgename1, edgename2 in world.custom_overworld[player]:
|
||||||
# doesn't actually change addresses
|
connect_two_way(world, edgename1, edgename2, player)
|
||||||
connect_simple(world, exit_name, region_name, player)
|
connected_edges.append(edgename1)
|
||||||
# this needs to remove custom connections from the pool
|
connected_edges.append(edgename2)
|
||||||
|
|
||||||
|
|
||||||
def connect_simple(world, exitname, regionname, player):
|
def connect_simple(world, exitname, regionname, player):
|
||||||
world.get_entrance(exitname, player).connect(world.get_region(regionname, player))
|
world.get_entrance(exitname, player).connect(world.get_region(regionname, player))
|
||||||
|
|
||||||
def connect_two_way(world, entrancename, exitname, player):
|
def connect_two_way(world, edgename1, edgename2, player):
|
||||||
entrance = world.get_entrance(entrancename, player)
|
edge1 = world.get_entrance(edgename1, player)
|
||||||
exit = world.get_entrance(exitname, player)
|
edge2 = world.get_entrance(edgename2, player)
|
||||||
|
|
||||||
# if these were already connected somewhere, remove the backreference
|
# if these were already connected somewhere, remove the backreference
|
||||||
if entrance.connected_region is not None:
|
if edge1.connected_region is not None:
|
||||||
entrance.connected_region.entrances.remove(entrance)
|
edge1.connected_region.entrances.remove(edge1)
|
||||||
if exit.connected_region is not None:
|
if edge2.connected_region is not None:
|
||||||
exit.connected_region.entrances.remove(exit)
|
edge2.connected_region.entrances.remove(edge2)
|
||||||
|
|
||||||
entrance.connect(exit.parent_region)
|
edge1.connect(edge2.parent_region)
|
||||||
exit.connect(entrance.parent_region)
|
edge2.connect(edge1.parent_region)
|
||||||
x = world.check_for_owedge(entrancename, player)
|
x = world.check_for_owedge(edgename1, player)
|
||||||
y = world.check_for_owedge(exitname, player)
|
y = world.check_for_owedge(edgename2, player)
|
||||||
if x is not None and y is not None:
|
if x is None:
|
||||||
|
logging.getLogger('').error('%s is not a valid edge.', edgename1)
|
||||||
|
elif y is None:
|
||||||
|
logging.getLogger('').error('%s is not a valid edge.', edgename2)
|
||||||
|
else:
|
||||||
x.dest = y
|
x.dest = y
|
||||||
y.dest = x
|
y.dest = x
|
||||||
elif x is None:
|
|
||||||
logging.getLogger('').error('%s is not a valid edge.', entrancename)
|
|
||||||
elif y is None:
|
|
||||||
logging.getLogger('').error('%s is not a valid edge.', exitname)
|
|
||||||
|
|
||||||
world.spoiler.set_overworld(exitname, entrancename, 'both', player)
|
|
||||||
|
|
||||||
def connect_edges(world, edges, targets, player):
|
|
||||||
"""This works inplace"""
|
|
||||||
random.shuffle(edges)
|
|
||||||
random.shuffle(targets)
|
|
||||||
while edges:
|
|
||||||
edge = edges.pop()
|
|
||||||
target = targets.pop()
|
|
||||||
connect_two_way(world, edge, target, player)
|
|
||||||
|
|
||||||
def connect_remaining(world, edges, player):
|
|
||||||
lw_edges = list()
|
|
||||||
dw_edges = list()
|
|
||||||
for edgename in edges:
|
|
||||||
edge = world.check_for_owedge(edgename, player)
|
|
||||||
if edge.worldType == WorldType.Dark:
|
|
||||||
dw_edges.append(edge)
|
|
||||||
else:
|
|
||||||
lw_edges.append(edge)
|
|
||||||
|
|
||||||
land_edges = list()
|
world.spoiler.set_overworld(edgename2, edgename1, 'both', player)
|
||||||
water_edges = list()
|
|
||||||
for edge in lw_edges:
|
|
||||||
if edge.terrain == Terrain.Land:
|
|
||||||
land_edges.append(edge)
|
|
||||||
else:
|
|
||||||
water_edges.append(edge)
|
|
||||||
|
|
||||||
north_edges = list()
|
def remove_reserved(world, groupedlist, connected_edges, player):
|
||||||
south_edges = list()
|
#TODO: Remove edges set in connect_custom
|
||||||
west_edges = list()
|
new_grouping = {}
|
||||||
east_edges = list()
|
for group in groupedlist.keys():
|
||||||
for edge in land_edges:
|
new_grouping[group] = ([], [])
|
||||||
if edge.direction == Direction.North:
|
|
||||||
north_edges.append(edge.name)
|
|
||||||
elif edge.direction == Direction.South:
|
|
||||||
south_edges.append(edge.name)
|
|
||||||
elif edge.direction == Direction.West:
|
|
||||||
west_edges.append(edge.name)
|
|
||||||
else:
|
|
||||||
east_edges.append(edge.name)
|
|
||||||
|
|
||||||
#lw land edges
|
for group in groupedlist.keys():
|
||||||
connect_edges(world, north_edges, south_edges, player)
|
(std, region, axis, terrain, parallel, count) = group
|
||||||
connect_edges(world, west_edges, east_edges, player)
|
(forward_edges, back_edges) = groupedlist[group]
|
||||||
|
|
||||||
north_edges = list()
|
for edge in connected_edges:
|
||||||
south_edges = list()
|
forward_edges = list(list(filter((edge).__ne__, i)) for i in forward_edges)
|
||||||
west_edges = list()
|
back_edges = list(list(filter((edge).__ne__, i)) for i in back_edges)
|
||||||
east_edges = list()
|
|
||||||
for edge in water_edges:
|
if world.owParallelWorlds[player] and region == WorldType.Dark:
|
||||||
if edge.direction == Direction.North:
|
for edge in parallel_links:
|
||||||
north_edges.append(edge.name)
|
forward_edges = list(list(filter((parallel_links[edge]).__ne__, i)) for i in forward_edges)
|
||||||
elif edge.direction == Direction.South:
|
back_edges = list(list(filter((parallel_links[edge]).__ne__, i)) for i in back_edges)
|
||||||
south_edges.append(edge.name)
|
|
||||||
elif edge.direction == Direction.West:
|
|
||||||
west_edges.append(edge.name)
|
|
||||||
else:
|
|
||||||
east_edges.append(edge.name)
|
|
||||||
|
|
||||||
#lw water edges
|
forward_edges = list(filter(([]).__ne__, forward_edges))
|
||||||
connect_edges(world, north_edges, south_edges, player)
|
back_edges = list(filter(([]).__ne__, back_edges))
|
||||||
connect_edges(world, west_edges, east_edges, player)
|
|
||||||
|
|
||||||
land_edges = list()
|
#TODO: The lists above can be left with invalid counts of edges, they need to get put into their appropriate group
|
||||||
water_edges = list()
|
|
||||||
for edge in dw_edges:
|
|
||||||
if edge.terrain == Terrain.Land:
|
|
||||||
land_edges.append(edge)
|
|
||||||
else:
|
|
||||||
water_edges.append(edge)
|
|
||||||
|
|
||||||
north_edges = list()
|
|
||||||
south_edges = list()
|
|
||||||
west_edges = list()
|
|
||||||
east_edges = list()
|
|
||||||
for edge in land_edges:
|
|
||||||
if edge.direction == Direction.North:
|
|
||||||
north_edges.append(edge.name)
|
|
||||||
elif edge.direction == Direction.South:
|
|
||||||
south_edges.append(edge.name)
|
|
||||||
elif edge.direction == Direction.West:
|
|
||||||
west_edges.append(edge.name)
|
|
||||||
else:
|
|
||||||
east_edges.append(edge.name)
|
|
||||||
|
|
||||||
#dw land edges
|
|
||||||
connect_edges(world, north_edges, south_edges, player)
|
|
||||||
connect_edges(world, west_edges, east_edges, player)
|
|
||||||
|
|
||||||
north_edges = list()
|
(exist_forward_edges, exist_back_edges) = new_grouping[group]
|
||||||
south_edges = list()
|
exist_forward_edges.extend(forward_edges)
|
||||||
west_edges = list()
|
exist_back_edges.extend(back_edges)
|
||||||
east_edges = list()
|
if len(exist_forward_edges) > 0:
|
||||||
for edge in water_edges:
|
new_grouping[group] = (exist_forward_edges, exist_back_edges)
|
||||||
if edge.direction == Direction.North:
|
|
||||||
north_edges.append(edge.name)
|
return new_grouping
|
||||||
elif edge.direction == Direction.South:
|
|
||||||
south_edges.append(edge.name)
|
|
||||||
elif edge.direction == Direction.West:
|
|
||||||
west_edges.append(edge.name)
|
|
||||||
else:
|
|
||||||
east_edges.append(edge.name)
|
|
||||||
|
|
||||||
#dw water edges
|
|
||||||
connect_edges(world, north_edges, south_edges, player)
|
|
||||||
connect_edges(world, west_edges, east_edges, player)
|
|
||||||
|
|
||||||
test_connections = [
|
test_connections = [
|
||||||
#('Links House ES', 'Octoballoon WS'),
|
#('Links House ES', 'Octoballoon WS'),
|
||||||
@@ -226,27 +303,27 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'),
|
|||||||
('Flute Spot 8', 'Octoballoon Area'),
|
('Flute Spot 8', 'Octoballoon Area'),
|
||||||
|
|
||||||
# Whirlpool Connections
|
# Whirlpool Connections
|
||||||
('C Whirlpool', 'Useless Fairy Water'),
|
('C Whirlpool', 'River Bend Water'),
|
||||||
('Useless Fairy Whirlpool', 'C Whirlpool Area'),
|
('River Bend Whirlpool', 'C Whirlpool Area'),
|
||||||
('Lake Hylia Whirlpool', 'Zora Approach Area'),
|
('Lake Hylia Whirlpool', 'Zora Approach Area'),
|
||||||
('Zora Whirlpool', 'Lake Hylia Water'),
|
('Zora Whirlpool', 'Lake Hylia Water'),
|
||||||
('Kakariko Pond Whirlpool', 'Octoballoon Water'),
|
('Kakariko Pond Whirlpool', 'Octoballoon Water'),
|
||||||
('Octoballoon Whirlpool', 'Kakariko Pond Area'),
|
('Octoballoon Whirlpool', 'Kakariko Pond Area'),
|
||||||
('Qirn Jump Whirlpool', 'Southeast DW Water'),
|
('Qirn Jump Whirlpool', 'Bomber Corner Water'),
|
||||||
('Southeast DW Whirlpool', 'Qirn Jump Water'),
|
('Bomber Corner Whirlpool', 'Qirn Jump Water'),
|
||||||
|
|
||||||
# Intra-tile OW Connections
|
# Intra-tile OW Connections
|
||||||
('Death Mountain Entrance Rock', 'Death Mountain Entrance'),
|
('Death Mountain Entrance Rock', 'Death Mountain Entrance'),
|
||||||
('Death Mountain Entrance Drop', 'DM Ascent Area'),
|
('Death Mountain Entrance Drop', 'Mountain Entry Area'),
|
||||||
('Death Mountain Return Drop', 'DM Ascent Area'),
|
('Death Mountain Return Drop', 'Mountain Entry Area'),
|
||||||
('Bonk Rock Ledge Drop', 'Sanctuary Area'),
|
('Bonk Rock Ledge Drop', 'Sanctuary Area'),
|
||||||
('Kings Grave Outer Rocks', 'Kings Grave Area'),
|
('Kings Grave Outer Rocks', 'Kings Grave Area'),
|
||||||
('Kings Grave Inner Rocks', 'Graveyard Area'),
|
('Kings Grave Inner Rocks', 'Graveyard Area'),
|
||||||
('Graveyard Ledge Drop', 'Graveyard Area'),
|
('Graveyard Ledge Drop', 'Graveyard Area'),
|
||||||
('Useless Fairy Water Drop', 'Useless Fairy Water'),
|
('River Bend Water Drop', 'River Bend Water'),
|
||||||
('Useless Fairy East Water Drop', 'Useless Fairy Water'),
|
('River Bend East Water Drop', 'River Bend Water'),
|
||||||
('Useless Fairy West Pier', 'Useless Fairy Area'),
|
('River Bend West Pier', 'River Bend Area'),
|
||||||
('Useless Fairy East Pier', 'Useless Fairy East Bank'),
|
('River Bend East Pier', 'River Bend East Bank'),
|
||||||
('Potion Shop Water Drop', 'Potion Shop Water'),
|
('Potion Shop Water Drop', 'Potion Shop Water'),
|
||||||
('Potion Shop Northeast Water Drop', 'Potion Shop Water'),
|
('Potion Shop Northeast Water Drop', 'Potion Shop Water'),
|
||||||
('Potion Shop Rock (South)', 'Potion Shop Northeast'),
|
('Potion Shop Rock (South)', 'Potion Shop Northeast'),
|
||||||
@@ -272,9 +349,9 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'),
|
|||||||
('Desert Mouth Drop', 'Desert Area'),
|
('Desert Mouth Drop', 'Desert Area'),
|
||||||
('Desert Teleporter Drop', 'Desert Area'),
|
('Desert Teleporter Drop', 'Desert Area'),
|
||||||
('Bombos Tablet Drop', 'Desert Area'),
|
('Bombos Tablet Drop', 'Desert Area'),
|
||||||
('Purple Chest Ledge Drop', 'Purple Chest Area'),
|
('Desert Pass Ledge Drop', 'Desert Pass Area'),
|
||||||
('Purple Chest Rocks (North)', 'Purple Chest Southeast'),
|
('Desert Pass Rocks (North)', 'Desert Pass Southeast'),
|
||||||
('Purple Chest Rocks (South)', 'Purple Chest Area'),
|
('Desert Pass Rocks (South)', 'Desert Pass Area'),
|
||||||
('Lake Hylia Water Drop', 'Lake Hylia Water'),
|
('Lake Hylia Water Drop', 'Lake Hylia Water'),
|
||||||
('Lake Hylia South Water Drop', 'Lake Hylia Water'),
|
('Lake Hylia South Water Drop', 'Lake Hylia Water'),
|
||||||
('Lake Hylia Northeast Water Drop', 'Lake Hylia Water'),
|
('Lake Hylia Northeast Water Drop', 'Lake Hylia Water'),
|
||||||
@@ -340,14 +417,14 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'),
|
|||||||
('Hammer Bridge Pegs (South)', 'Hammer Bridge North Area'),
|
('Hammer Bridge Pegs (South)', 'Hammer Bridge North Area'),
|
||||||
('Hammer Bridge Water Drop', 'Hammer Bridge Water'),
|
('Hammer Bridge Water Drop', 'Hammer Bridge Water'),
|
||||||
('Hammer Bridge Pier', 'Hammer Bridge North Area'),
|
('Hammer Bridge Pier', 'Hammer Bridge North Area'),
|
||||||
('Dark Lake Hylia Water Drop', 'Dark Lake Hylia Water'),
|
('Ice Lake Water Drop', 'Ice Lake Water'),
|
||||||
('Dark Lake Hylia Northeast Water Drop', 'Dark Lake Hylia Water'),
|
('Ice Lake Northeast Water Drop', 'Ice Lake Water'),
|
||||||
('Dark Lake Hylia Southwest Water Drop', 'Dark Lake Hylia Water'),
|
('Ice Lake Southwest Water Drop', 'Ice Lake Water'),
|
||||||
('Dark Lake Hylia Southeast Water Drop', 'Dark Lake Hylia Water'),
|
('Ice Lake Southeast Water Drop', 'Ice Lake Water'),
|
||||||
('Dark Lake Hylia Northeast Pier', 'Dark Lake Hylia Northeast Bank'),
|
('Ice Lake Northeast Pier', 'Ice Lake Northeast Bank'),
|
||||||
('Southeast DW Water Drop', 'Southeast DW Water'),
|
('Bomber Corner Water Drop', 'Bomber Corner Water'),
|
||||||
('Southeast DW Waterfall Water Drop', 'Southeast DW Water'),
|
('Bomber Corner Waterfall Water Drop', 'Bomber Corner Water'),
|
||||||
('Southeast DW Pier', 'Southeast DW Area'),
|
('Bomber Corner Pier', 'Bomber Corner Area'),
|
||||||
|
|
||||||
('Dark Death Mountain Drop (West)', 'Dark Death Mountain (West Bottom)'),
|
('Dark Death Mountain Drop (West)', 'Dark Death Mountain (West Bottom)'),
|
||||||
('Dark Death Mountain Drop (East)', 'Dark Death Mountain (East Bottom)'),
|
('Dark Death Mountain Drop (East)', 'Dark Death Mountain (East Bottom)'),
|
||||||
@@ -374,9 +451,9 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'),
|
|||||||
('Lost Woods Southwest Mirror Spot', 'Lost Woods Area'),
|
('Lost Woods Southwest Mirror Spot', 'Lost Woods Area'),
|
||||||
('Lost Woods Northeast Mirror Spot', 'Lost Woods Area'),
|
('Lost Woods Northeast Mirror Spot', 'Lost Woods Area'),
|
||||||
('Lumberjack Mirror Spot', 'Lumberjack Area'),
|
('Lumberjack Mirror Spot', 'Lumberjack Area'),
|
||||||
('DM Ascent Mirror Spot', 'DM Ascent Area'),
|
('Mountain Entry Mirror Spot', 'Mountain Entry Area'),
|
||||||
('DM Ascent Entrance Mirror Spot', 'Death Mountain Entrance'),
|
('Mountain Entry Entrance Mirror Spot', 'Death Mountain Entrance'),
|
||||||
('DM Ascent Ledge Mirror Spot', 'Death Mountain Return Ledge'),
|
('Mountain Entry Ledge Mirror Spot', 'Death Mountain Return Ledge'),
|
||||||
('Lost Woods Pass West Mirror Spot', 'Lost Woods Pass West Area'),
|
('Lost Woods Pass West Mirror Spot', 'Lost Woods Pass West Area'),
|
||||||
('Lost Woods Pass East Top Mirror Spot', 'Lost Woods Pass East Top Area'),
|
('Lost Woods Pass East Top Mirror Spot', 'Lost Woods Pass East Top Area'),
|
||||||
('Lost Woods East Bottom Mirror Spot', 'Lost Woods Pass East Bottom Area'),
|
('Lost Woods East Bottom Mirror Spot', 'Lost Woods Pass East Bottom Area'),
|
||||||
@@ -386,8 +463,8 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'),
|
|||||||
('Bonk Rock Ledge Mirror Spot', 'Bonk Rock Ledge'),
|
('Bonk Rock Ledge Mirror Spot', 'Bonk Rock Ledge'),
|
||||||
('Graveyard Ledge Mirror Spot', 'Graveyard Ledge'),
|
('Graveyard Ledge Mirror Spot', 'Graveyard Ledge'),
|
||||||
('Kings Grave Mirror Spot', 'Kings Grave Area'),
|
('Kings Grave Mirror Spot', 'Kings Grave Area'),
|
||||||
('Useless Fairy Mirror Spot', 'Useless Fairy Area'),
|
('River Bend Mirror Spot', 'River Bend Area'),
|
||||||
('Useless Fairy East Mirror Spot', 'Useless Fairy East Bank'),
|
('River Bend East Mirror Spot', 'River Bend East Bank'),
|
||||||
('Potion Shop Mirror Spot', 'Potion Shop Area'),
|
('Potion Shop Mirror Spot', 'Potion Shop Area'),
|
||||||
('Potion Shop Northeast Mirror Spot', 'Potion Shop Northeast'),
|
('Potion Shop Northeast Mirror Spot', 'Potion Shop Northeast'),
|
||||||
('Zora Warning Mirror Spot', 'Zora Warning Area'),
|
('Zora Warning Mirror Spot', 'Zora Warning Area'),
|
||||||
@@ -405,7 +482,7 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'),
|
|||||||
('Wooden Bridge Mirror Spot', 'Wooden Bridge Area'),
|
('Wooden Bridge Mirror Spot', 'Wooden Bridge Area'),
|
||||||
('Wooden Bridge Northeast Mirror Spot', 'Wooden Bridge Area'),
|
('Wooden Bridge Northeast Mirror Spot', 'Wooden Bridge Area'),
|
||||||
('Wooden Bridge West Mirror Spot', 'Wooden Bridge Area'),
|
('Wooden Bridge West Mirror Spot', 'Wooden Bridge Area'),
|
||||||
('Sand Dune Mirror Spot', 'Sand Dune Area'),
|
('Sand Dunes Mirror Spot', 'Sand Dunes Area'),
|
||||||
('Eastern Palace Mirror Spot', 'Eastern Palace Area'),
|
('Eastern Palace Mirror Spot', 'Eastern Palace Area'),
|
||||||
('Eastern Nook Mirror Spot', 'Eastern Nook Area'),
|
('Eastern Nook Mirror Spot', 'Eastern Nook Area'),
|
||||||
('Maze Race Mirror Spot', 'Maze Race Ledge'),
|
('Maze Race Mirror Spot', 'Maze Race Ledge'),
|
||||||
@@ -417,7 +494,7 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'),
|
|||||||
('Cave 45 Mirror Spot', 'Cave 45 Ledge'),
|
('Cave 45 Mirror Spot', 'Cave 45 Ledge'),
|
||||||
('C Whirlpool Mirror Spot', 'C Whirlpool Area'),
|
('C Whirlpool Mirror Spot', 'C Whirlpool Area'),
|
||||||
('C Whirlpool Outer Mirror Spot', 'C Whirlpool Outer Area'),
|
('C Whirlpool Outer Mirror Spot', 'C Whirlpool Outer Area'),
|
||||||
('Central Bonk Rock Mirror Spot', 'Central Bonk Rock Area'),
|
('Central Bonk Rocks Mirror Spot', 'Central Bonk Rocks Area'),
|
||||||
('Links House Mirror Spot', 'Links House Area'),
|
('Links House Mirror Spot', 'Links House Area'),
|
||||||
('Stone Bridge Mirror Spot', 'Stone Bridge Area'),
|
('Stone Bridge Mirror Spot', 'Stone Bridge Area'),
|
||||||
('Stone Bridge South Mirror Spot', 'Stone Bridge Area'),
|
('Stone Bridge South Mirror Spot', 'Stone Bridge Area'),
|
||||||
@@ -427,8 +504,8 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'),
|
|||||||
('Checkerboard Mirror Spot', 'Desert Checkerboard Ledge'),
|
('Checkerboard Mirror Spot', 'Desert Checkerboard Ledge'),
|
||||||
('DP Stairs Mirror Spot', 'Desert Palace Stairs'),
|
('DP Stairs Mirror Spot', 'Desert Palace Stairs'),
|
||||||
('DP Entrance (North) Mirror Spot', 'Desert Palace Entrance (North) Spot'),
|
('DP Entrance (North) Mirror Spot', 'Desert Palace Entrance (North) Spot'),
|
||||||
('Bombos Tablet Mirror Spot', 'Purple Chest Ledge'),
|
('Bombos Tablet Mirror Spot', 'Desert Pass Ledge'),
|
||||||
('Purple Chest Mirror Spot', 'Purple Chest Area'),
|
('Desert Pass Mirror Spot', 'Desert Pass Area'),
|
||||||
('Dam Mirror Spot', 'Dam Area'),
|
('Dam Mirror Spot', 'Dam Area'),
|
||||||
('Statues Mirror Spot', 'Statues Area'),
|
('Statues Mirror Spot', 'Statues Area'),
|
||||||
('South Pass Mirror Spot', 'South Pass Area'),
|
('South Pass Mirror Spot', 'South Pass Area'),
|
||||||
@@ -439,7 +516,7 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'),
|
|||||||
('Lake Hylia Island Mirror Spot', 'Lake Hylia Island'),
|
('Lake Hylia Island Mirror Spot', 'Lake Hylia Island'),
|
||||||
('Lake Hylia Central Island Mirror Spot', 'Lake Hylia Central Island'),
|
('Lake Hylia Central Island Mirror Spot', 'Lake Hylia Central Island'),
|
||||||
('Octoballoon Mirror Spot', 'Octoballoon Area'),
|
('Octoballoon Mirror Spot', 'Octoballoon Area'),
|
||||||
('Ice Rod Cave Mirror Spot', 'Ice Rod Cave Area'),
|
('Ice Cave Mirror Spot', 'Ice Cave Area'),
|
||||||
('Spectacle Rock Mirror Spot', 'Spectacle Rock Ledge'),
|
('Spectacle Rock Mirror Spot', 'Spectacle Rock Ledge'),
|
||||||
('West Death Mountain (Top) Mirror Spot', 'West Death Mountain (Top)'),
|
('West Death Mountain (Top) Mirror Spot', 'West Death Mountain (Top)'),
|
||||||
('East Death Mountain (Top West) Mirror Spot', 'East Death Mountain (Top West)'),
|
('East Death Mountain (Top West) Mirror Spot', 'East Death Mountain (Top West)'),
|
||||||
@@ -453,20 +530,161 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'),
|
|||||||
('TR Pegs Area Mirror Spot', 'Death Mountain TR Pegs')
|
('TR Pegs Area Mirror Spot', 'Death Mountain TR Pegs')
|
||||||
]
|
]
|
||||||
|
|
||||||
standard_connections = [('Hyrule Castle SW', 'Central Bonk Rock NW'),
|
standard_connections = [('Hyrule Castle SW', 'Central Bonk Rocks NW'),
|
||||||
('Hyrule Castle SE', 'Links House NE'),
|
('Hyrule Castle SE', 'Links House NE'),
|
||||||
('Central Bonk Rock EN', 'Links House WN'),
|
('Central Bonk Rocks EN', 'Links House WN'),
|
||||||
('Central Bonk Rock EC', 'Links House WC'),
|
('Central Bonk Rocks EC', 'Links House WC'),
|
||||||
('Central Bonk Rock ES', 'Links House WS')
|
('Central Bonk Rocks ES', 'Links House WS')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
parallelsimilar_connections = [('Maze Race ES', 'Kakariko Suburb WS'),
|
||||||
|
('Dig Game EC', 'Frog WC'),
|
||||||
|
('Dig Game ES', 'Frog WS')
|
||||||
|
]
|
||||||
|
|
||||||
|
parallel_links = bidict({'Lost Woods SW': 'Skull Woods SW',
|
||||||
|
'Lost Woods SC': 'Skull Woods SC',
|
||||||
|
'Lost Woods SE': 'Skull Woods SE',
|
||||||
|
'Lost Woods EN': 'Skull Woods EN',
|
||||||
|
'Lumberjack SW': 'Dark Lumberjack SW',
|
||||||
|
'Lumberjack WN': 'Dark Lumberjack WN',
|
||||||
|
'West Death Mountain EN': 'West Dark Death Mountain EN',
|
||||||
|
'West Death Mountain ES': 'West Dark Death Mountain ES',
|
||||||
|
'East Death Mountain WN': 'East Dark Death Mountain WN',
|
||||||
|
'East Death Mountain WS': 'East Dark Death Mountain WS',
|
||||||
|
'East Death Mountain EN': 'East Dark Death Mountain EN',
|
||||||
|
'Death Mountain TR Pegs WN': 'Turtle Rock WN',
|
||||||
|
'Mountain Entry NW': 'Bumper Cave NW',
|
||||||
|
'Mountain Entry SE': 'Bumper Cave SE',
|
||||||
|
'Zora Approach SE': 'Catfish SE',
|
||||||
|
'Lost Woods Pass NW': 'Skull Woods Pass NW',
|
||||||
|
'Lost Woods Pass NE': 'Skull Woods Pass NE',
|
||||||
|
'Lost Woods Pass SW': 'Skull Woods Pass SW',
|
||||||
|
'Lost Woods Pass SE': 'Skull Woods Pass SE',
|
||||||
|
'Kakariko Fortune NE': 'Dark Fortune NE',
|
||||||
|
'Kakariko Fortune SC': 'Dark Fortune SC',
|
||||||
|
'Kakariko Fortune EN': 'Dark Fortune EN',
|
||||||
|
'Kakariko Fortune ES': 'Dark Fortune ES',
|
||||||
|
'Kakariko Pond NE': 'Outcast Pond NE',
|
||||||
|
'Kakariko Pond SW': 'Outcast Pond SW',
|
||||||
|
'Kakariko Pond SE': 'Outcast Pond SE',
|
||||||
|
'Kakariko Pond WN': 'Outcast Pond WN',
|
||||||
|
'Kakariko Pond WS': 'Outcast Pond WS',
|
||||||
|
'Kakariko Pond EN': 'Outcast Pond EN',
|
||||||
|
'Kakariko Pond ES': 'Outcast Pond ES',
|
||||||
|
'Sanctuary WN': 'Dark Chapel WN',
|
||||||
|
'Sanctuary WS': 'Dark Chapel WS',
|
||||||
|
'Sanctuary EC': 'Dark Chapel EC',
|
||||||
|
'Graveyard WC': 'Dark Graveyard WC',
|
||||||
|
'Graveyard EC': 'Dark Graveyard ES',
|
||||||
|
'River Bend SW': 'Qirn Jump SW',
|
||||||
|
'River Bend SC': 'Qirn Jump SC',
|
||||||
|
'River Bend SE': 'Qirn Jump SE',
|
||||||
|
'River Bend WC': 'Qirn Jump WC',
|
||||||
|
'River Bend EN': 'Qirn Jump EN',
|
||||||
|
'River Bend EC': 'Qirn Jump EC',
|
||||||
|
'River Bend ES': 'Qirn Jump ES',
|
||||||
|
'Potion Shop WN': 'Dark Witch WN',
|
||||||
|
'Potion Shop WC': 'Dark Witch WC',
|
||||||
|
'Potion Shop WS': 'Dark Witch WS',
|
||||||
|
'Potion Shop EN': 'Dark Witch EN',
|
||||||
|
'Potion Shop EC': 'Dark Witch EC',
|
||||||
|
'Zora Warning NE': 'Catfish Approach NE',
|
||||||
|
'Zora Warning WN': 'Catfish Approach WN',
|
||||||
|
'Zora Warning WC': 'Catfish Approach WC',
|
||||||
|
'Kakariko NW': 'Village of Outcasts NW',
|
||||||
|
'Kakariko NC': 'Village of Outcasts NC',
|
||||||
|
'Kakariko NE': 'Village of Outcasts NE',
|
||||||
|
'Kakariko SE': 'Village of Outcasts SE',
|
||||||
|
'Kakariko ES': 'Village of Outcasts ES',
|
||||||
|
'Forgotten Forest NW': 'Shield Shop NW',
|
||||||
|
'Forgotten Forest NE': 'Shield Shop NE',
|
||||||
|
'Hyrule Castle SW': 'Pyramid SW',
|
||||||
|
'Hyrule Castle SE': 'Pyramid SE',
|
||||||
|
'Hyrule Castle ES': 'Pyramid ES',
|
||||||
|
'Wooden Bridge NW': 'Broken Bridge NW',
|
||||||
|
'Wooden Bridge NC': 'Broken Bridge NC',
|
||||||
|
'Wooden Bridge NE': 'Broken Bridge NE',
|
||||||
|
'Wooden Bridge SW': 'Broken Bridge SW',
|
||||||
|
'Eastern Palace SW': 'Palace of Darkness SW',
|
||||||
|
'Eastern Palace SE': 'Palace of Darkness SE',
|
||||||
|
'Blacksmith WS': 'Hammer Pegs WS',
|
||||||
|
'Sand Dunes NW': 'Dark Dunes NW',
|
||||||
|
'Sand Dunes SC': 'Dark Dunes SC',
|
||||||
|
'Sand Dunes WN': 'Dark Dunes WN',
|
||||||
|
'Maze Race ES': 'Dig Game ES',
|
||||||
|
'Kakariko Suburb NE': 'Frog NE',
|
||||||
|
'Kakariko Suburb WS': 'Frog WS',
|
||||||
|
'Kakariko Suburb ES': 'Frog ES',
|
||||||
|
'Flute Boy SW': 'Stumpy SW',
|
||||||
|
'Flute Boy SC': 'Stumpy SC',
|
||||||
|
'Flute Boy WS': 'Stumpy WS',
|
||||||
|
'Central Bonk Rocks NW': 'Dark Bonk Rocks NW',
|
||||||
|
'Central Bonk Rocks SW': 'Dark Bonk Rocks SW',
|
||||||
|
'Central Bonk Rocks EN': 'Dark Bonk Rocks EN',
|
||||||
|
'Central Bonk Rocks EC': 'Dark Bonk Rocks EC',
|
||||||
|
'Central Bonk Rocks ES': 'Dark Bonk Rocks ES',
|
||||||
|
'Links House NE': 'Big Bomb Shop NE',
|
||||||
|
'Links House SC': 'Big Bomb Shop SC',
|
||||||
|
'Links House WN': 'Big Bomb Shop WN',
|
||||||
|
'Links House WC': 'Big Bomb Shop WC',
|
||||||
|
'Links House WS': 'Big Bomb Shop WS',
|
||||||
|
'Links House ES': 'Big Bomb Shop ES',
|
||||||
|
'Stone Bridge NC': 'Hammer Bridge NC',
|
||||||
|
'Stone Bridge SC': 'Hammer Bridge SC',
|
||||||
|
'Stone Bridge WS': 'Hammer Bridge WS',
|
||||||
|
'Stone Bridge EN': 'Hammer Bridge EN',
|
||||||
|
'Stone Bridge EC': 'Hammer Bridge EC',
|
||||||
|
'Tree Line NW': 'Dark Tree Line NW',
|
||||||
|
'Tree Line SC': 'Dark Tree Line SC',
|
||||||
|
'Tree Line SE': 'Dark Tree Line SE',
|
||||||
|
'Tree Line WN': 'Dark Tree Line WN',
|
||||||
|
'Tree Line WC': 'Dark Tree Line WC',
|
||||||
|
'Eastern Nook NE': 'Palace of Darkness Nook NE',
|
||||||
|
'Cave 45 NW': 'Circle of Bushes NW',
|
||||||
|
'Cave 45 NC': 'Circle of Bushes NC',
|
||||||
|
'Cave 45 EC': 'Circle of Bushes EC',
|
||||||
|
'C Whirlpool NW': 'Dark C Whirlpool NW',
|
||||||
|
'C Whirlpool SC': 'Dark C Whirlpool SC',
|
||||||
|
'C Whirlpool WC': 'Dark C Whirlpool WC',
|
||||||
|
'C Whirlpool EN': 'Dark C Whirlpool EN',
|
||||||
|
'C Whirlpool EC': 'Dark C Whirlpool EC',
|
||||||
|
'C Whirlpool ES': 'Dark C Whirlpool ES',
|
||||||
|
'Statues NC': 'Hype Cave NC',
|
||||||
|
'Statues SC': 'Hype Cave SC',
|
||||||
|
'Statues WN': 'Hype Cave WN',
|
||||||
|
'Statues WC': 'Hype Cave WC',
|
||||||
|
'Statues WS': 'Hype Cave WS',
|
||||||
|
'Lake Hylia NW': 'Ice Lake NW',
|
||||||
|
'Lake Hylia NC': 'Ice Lake NC',
|
||||||
|
'Lake Hylia NE': 'Ice Lake NE',
|
||||||
|
'Lake Hylia WS': 'Ice Lake WS',
|
||||||
|
'Lake Hylia EC': 'Ice Lake EC',
|
||||||
|
'Lake Hylia ES': 'Ice Lake ES',
|
||||||
|
'Ice Cave SW': 'Shopping Mall SW',
|
||||||
|
'Ice Cave SE': 'Shopping Mall SE',
|
||||||
|
'Desert Pass EC': 'Swamp Nook EC',
|
||||||
|
'Desert Pass ES': 'Swamp Nook ES',
|
||||||
|
'Dam NC': 'Swamp NC',
|
||||||
|
'Dam WC': 'Swamp WC',
|
||||||
|
'Dam WS': 'Swamp WS',
|
||||||
|
'Dam EC': 'Swamp EC',
|
||||||
|
'South Pass WC': 'Dark South Pass WC',
|
||||||
|
'South Pass NC': 'Dark South Pass NC',
|
||||||
|
'South Pass ES': 'Dark South Pass ES',
|
||||||
|
'Octoballoon NW': 'Bomber Corner NW',
|
||||||
|
'Octoballoon NE': 'Bomber Corner NE',
|
||||||
|
'Octoballoon WC': 'Bomber Corner WC',
|
||||||
|
'Octoballoon WS': 'Bomber Corner WS'
|
||||||
|
})
|
||||||
|
|
||||||
# non shuffled overworld
|
# non shuffled overworld
|
||||||
default_connections = [('Lost Woods SW', 'Lost Woods Pass NW'),
|
default_connections = [('Lost Woods SW', 'Lost Woods Pass NW'),
|
||||||
('Lost Woods SC', 'Lost Woods Pass NE'),
|
('Lost Woods SC', 'Lost Woods Pass NE'),
|
||||||
('Lost Woods SE', 'Kakariko Fortune NE'),
|
('Lost Woods SE', 'Kakariko Fortune NE'),
|
||||||
('Lost Woods EN', 'Lumberjack WN'),
|
('Lost Woods EN', 'Lumberjack WN'),
|
||||||
('Lumberjack SW', 'DM Ascent NW'),
|
('Lumberjack SW', 'Mountain Entry NW'),
|
||||||
('DM Ascent SE', 'Kakariko Pond NE'),
|
('Mountain Entry SE', 'Kakariko Pond NE'),
|
||||||
('Lost Woods Pass SW', 'Kakariko NW'),
|
('Lost Woods Pass SW', 'Kakariko NW'),
|
||||||
('Lost Woods Pass SE', 'Kakariko NC'),
|
('Lost Woods Pass SE', 'Kakariko NC'),
|
||||||
('Kakariko Fortune SC', 'Kakariko NE'),
|
('Kakariko Fortune SC', 'Kakariko NE'),
|
||||||
@@ -478,23 +696,23 @@ default_connections = [('Lost Woods SW', 'Lost Woods Pass NW'),
|
|||||||
('Kakariko Pond ES', 'Sanctuary WS'),
|
('Kakariko Pond ES', 'Sanctuary WS'),
|
||||||
('Forgotten Forest ES', 'Hyrule Castle WN'),
|
('Forgotten Forest ES', 'Hyrule Castle WN'),
|
||||||
('Sanctuary EC', 'Graveyard WC'),
|
('Sanctuary EC', 'Graveyard WC'),
|
||||||
('Graveyard EC', 'Useless Fairy WC'),
|
('Graveyard EC', 'River Bend WC'),
|
||||||
('Useless Fairy SW', 'Wooden Bridge NW'),
|
('River Bend SW', 'Wooden Bridge NW'),
|
||||||
('Useless Fairy SC', 'Wooden Bridge NC'),
|
('River Bend SC', 'Wooden Bridge NC'),
|
||||||
('Useless Fairy SE', 'Wooden Bridge NE'),
|
('River Bend SE', 'Wooden Bridge NE'),
|
||||||
('Useless Fairy EN', 'Potion Shop WN'),
|
('River Bend EN', 'Potion Shop WN'),
|
||||||
('Useless Fairy EC', 'Potion Shop WC'),
|
('River Bend EC', 'Potion Shop WC'),
|
||||||
('Useless Fairy ES', 'Potion Shop WS'),
|
('River Bend ES', 'Potion Shop WS'),
|
||||||
('Potion Shop EN', 'Zora Warning WN'),
|
('Potion Shop EN', 'Zora Warning WN'),
|
||||||
('Potion Shop EC', 'Zora Warning WC'),
|
('Potion Shop EC', 'Zora Warning WC'),
|
||||||
('Zora Warning NE', 'Zora Approach SE'),
|
('Zora Warning NE', 'Zora Approach SE'),
|
||||||
('Kakariko SE', 'Kakariko Suburb NE'),
|
('Kakariko SE', 'Kakariko Suburb NE'),
|
||||||
('Kakariko ES', 'Blacksmith WS'),
|
('Kakariko ES', 'Blacksmith WS'),
|
||||||
('Hyrule Castle SW', 'Central Bonk Rock NW'),
|
('Hyrule Castle SW', 'Central Bonk Rocks NW'),
|
||||||
('Hyrule Castle SE', 'Links House NE'),
|
('Hyrule Castle SE', 'Links House NE'),
|
||||||
('Hyrule Castle ES', 'Sand Dune WN'),
|
('Hyrule Castle ES', 'Sand Dunes WN'),
|
||||||
('Wooden Bridge SW', 'Sand Dune NW'),
|
('Wooden Bridge SW', 'Sand Dunes NW'),
|
||||||
('Sand Dune SC', 'Stone Bridge NC'),
|
('Sand Dunes SC', 'Stone Bridge NC'),
|
||||||
('Eastern Palace SW', 'Tree Line NW'),
|
('Eastern Palace SW', 'Tree Line NW'),
|
||||||
('Eastern Palace SE', 'Eastern Nook NE'),
|
('Eastern Palace SE', 'Eastern Nook NE'),
|
||||||
('Maze Race ES', 'Kakariko Suburb WS'),
|
('Maze Race ES', 'Kakariko Suburb WS'),
|
||||||
@@ -502,14 +720,14 @@ default_connections = [('Lost Woods SW', 'Lost Woods Pass NW'),
|
|||||||
('Flute Boy SW', 'Cave 45 NW'),
|
('Flute Boy SW', 'Cave 45 NW'),
|
||||||
('Flute Boy SC', 'Cave 45 NC'),
|
('Flute Boy SC', 'Cave 45 NC'),
|
||||||
('Cave 45 EC', 'C Whirlpool WC'),
|
('Cave 45 EC', 'C Whirlpool WC'),
|
||||||
('C Whirlpool NW', 'Central Bonk Rock SW'),
|
('C Whirlpool NW', 'Central Bonk Rocks SW'),
|
||||||
('C Whirlpool SC', 'Dam NC'),
|
('C Whirlpool SC', 'Dam NC'),
|
||||||
('C Whirlpool EN', 'Statues WN'),
|
('C Whirlpool EN', 'Statues WN'),
|
||||||
('C Whirlpool EC', 'Statues WC'),
|
('C Whirlpool EC', 'Statues WC'),
|
||||||
('C Whirlpool ES', 'Statues WS'),
|
('C Whirlpool ES', 'Statues WS'),
|
||||||
('Central Bonk Rock EN', 'Links House WN'),
|
('Central Bonk Rocks EN', 'Links House WN'),
|
||||||
('Central Bonk Rock EC', 'Links House WC'),
|
('Central Bonk Rocks EC', 'Links House WC'),
|
||||||
('Central Bonk Rock ES', 'Links House WS'),
|
('Central Bonk Rocks ES', 'Links House WS'),
|
||||||
('Links House SC', 'Statues NC'),
|
('Links House SC', 'Statues NC'),
|
||||||
('Links House ES', 'Stone Bridge WS'),
|
('Links House ES', 'Stone Bridge WS'),
|
||||||
('Stone Bridge SC', 'Lake Hylia NW'),
|
('Stone Bridge SC', 'Lake Hylia NW'),
|
||||||
@@ -517,17 +735,17 @@ default_connections = [('Lost Woods SW', 'Lost Woods Pass NW'),
|
|||||||
('Stone Bridge EC', 'Tree Line WC'),
|
('Stone Bridge EC', 'Tree Line WC'),
|
||||||
('Tree Line SC', 'Lake Hylia NC'),
|
('Tree Line SC', 'Lake Hylia NC'),
|
||||||
('Tree Line SE', 'Lake Hylia NE'),
|
('Tree Line SE', 'Lake Hylia NE'),
|
||||||
('Desert EC', 'Purple Chest WC'),
|
('Desert EC', 'Desert Pass WC'),
|
||||||
('Desert ES', 'Purple Chest WS'),
|
('Desert ES', 'Desert Pass WS'),
|
||||||
('Purple Chest EC', 'Dam WC'),
|
('Desert Pass EC', 'Dam WC'),
|
||||||
('Purple Chest ES', 'Dam WS'),
|
('Desert Pass ES', 'Dam WS'),
|
||||||
('Dam EC', 'South Pass WC'),
|
('Dam EC', 'South Pass WC'),
|
||||||
('Statues SC', 'South Pass NC'),
|
('Statues SC', 'South Pass NC'),
|
||||||
('South Pass ES', 'Lake Hylia WS'),
|
('South Pass ES', 'Lake Hylia WS'),
|
||||||
('Lake Hylia EC', 'Octoballoon WC'),
|
('Lake Hylia EC', 'Octoballoon WC'),
|
||||||
('Lake Hylia ES', 'Octoballoon WS'),
|
('Lake Hylia ES', 'Octoballoon WS'),
|
||||||
('Octoballoon NW', 'Ice Rod Cave SW'),
|
('Octoballoon NW', 'Ice Cave SW'),
|
||||||
('Octoballoon NE', 'Ice Rod Cave SE'),
|
('Octoballoon NE', 'Ice Cave SE'),
|
||||||
('West Death Mountain EN', 'East Death Mountain WN'),
|
('West Death Mountain EN', 'East Death Mountain WN'),
|
||||||
('West Death Mountain ES', 'East Death Mountain WS'),
|
('West Death Mountain ES', 'East Death Mountain WS'),
|
||||||
('East Death Mountain EN', 'Death Mountain TR Pegs WN'),
|
('East Death Mountain EN', 'Death Mountain TR Pegs WN'),
|
||||||
@@ -560,11 +778,11 @@ default_connections = [('Lost Woods SW', 'Lost Woods Pass NW'),
|
|||||||
('Catfish Approach NE', 'Catfish SE'),
|
('Catfish Approach NE', 'Catfish SE'),
|
||||||
('Village of Outcasts SE', 'Frog NE'),
|
('Village of Outcasts SE', 'Frog NE'),
|
||||||
('Village of Outcasts ES', 'Hammer Pegs WS'),
|
('Village of Outcasts ES', 'Hammer Pegs WS'),
|
||||||
('Pyramid SW', 'Dark Bonk Rock NW'),
|
('Pyramid SW', 'Dark Bonk Rocks NW'),
|
||||||
('Pyramid SE', 'Big Bomb Shop NE'),
|
('Pyramid SE', 'Big Bomb Shop NE'),
|
||||||
('Pyramid ES', 'Dark Dune WN'),
|
('Pyramid ES', 'Dark Dunes WN'),
|
||||||
('Broken Bridge SW', 'Dark Dune NW'),
|
('Broken Bridge SW', 'Dark Dunes NW'),
|
||||||
('Dark Dune SC', 'Hammer Bridge NC'),
|
('Dark Dunes SC', 'Hammer Bridge NC'),
|
||||||
('Palace of Darkness SW', 'Dark Tree Line NW'),
|
('Palace of Darkness SW', 'Dark Tree Line NW'),
|
||||||
('Palace of Darkness SE', 'Palace of Darkness Nook NE'),
|
('Palace of Darkness SE', 'Palace of Darkness Nook NE'),
|
||||||
('Dig Game EC', 'Frog WC'),
|
('Dig Game EC', 'Frog WC'),
|
||||||
@@ -573,30 +791,30 @@ default_connections = [('Lost Woods SW', 'Lost Woods Pass NW'),
|
|||||||
('Stumpy SW', 'Circle of Bushes NW'),
|
('Stumpy SW', 'Circle of Bushes NW'),
|
||||||
('Stumpy SC', 'Circle of Bushes NC'),
|
('Stumpy SC', 'Circle of Bushes NC'),
|
||||||
('Circle of Bushes EC', 'Dark C Whirlpool WC'),
|
('Circle of Bushes EC', 'Dark C Whirlpool WC'),
|
||||||
('Dark C Whirlpool NW', 'Dark Bonk Rock SW'),
|
('Dark C Whirlpool NW', 'Dark Bonk Rocks SW'),
|
||||||
('Dark C Whirlpool SC', 'Swamp Palace NC'),
|
('Dark C Whirlpool SC', 'Swamp NC'),
|
||||||
('Dark C Whirlpool EN', 'Hype Cave WN'),
|
('Dark C Whirlpool EN', 'Hype Cave WN'),
|
||||||
('Dark C Whirlpool EC', 'Hype Cave WC'),
|
('Dark C Whirlpool EC', 'Hype Cave WC'),
|
||||||
('Dark C Whirlpool ES', 'Hype Cave WS'),
|
('Dark C Whirlpool ES', 'Hype Cave WS'),
|
||||||
('Dark Bonk Rock EN', 'Big Bomb Shop WN'),
|
('Dark Bonk Rocks EN', 'Big Bomb Shop WN'),
|
||||||
('Dark Bonk Rock EC', 'Big Bomb Shop WC'),
|
('Dark Bonk Rocks EC', 'Big Bomb Shop WC'),
|
||||||
('Dark Bonk Rock ES', 'Big Bomb Shop WS'),
|
('Dark Bonk Rocks ES', 'Big Bomb Shop WS'),
|
||||||
('Big Bomb Shop SC', 'Hype Cave NC'),
|
('Big Bomb Shop SC', 'Hype Cave NC'),
|
||||||
('Big Bomb Shop ES', 'Hammer Bridge WS'),
|
('Big Bomb Shop ES', 'Hammer Bridge WS'),
|
||||||
('Hammer Bridge SC', 'Dark Lake Hylia NW'),
|
('Hammer Bridge SC', 'Ice Lake NW'),
|
||||||
('Hammer Bridge EN', 'Dark Tree Line WN'),
|
('Hammer Bridge EN', 'Dark Tree Line WN'),
|
||||||
('Hammer Bridge EC', 'Dark Tree Line WC'),
|
('Hammer Bridge EC', 'Dark Tree Line WC'),
|
||||||
('Dark Tree Line SC', 'Dark Lake Hylia NC'),
|
('Dark Tree Line SC', 'Ice Lake NC'),
|
||||||
('Dark Tree Line SE', 'Dark Lake Hylia NE'),
|
('Dark Tree Line SE', 'Ice Lake NE'),
|
||||||
('Dark Purple Chest EC', 'Swamp Palace WC'),
|
('Swamp Nook EC', 'Swamp WC'),
|
||||||
('Dark Purple Chest ES', 'Swamp Palace WS'),
|
('Swamp Nook ES', 'Swamp WS'),
|
||||||
('Swamp Palace EC', 'Dark South Pass WC'),
|
('Swamp EC', 'Dark South Pass WC'),
|
||||||
('Hype Cave SC', 'Dark South Pass NC'),
|
('Hype Cave SC', 'Dark South Pass NC'),
|
||||||
('Dark South Pass ES', 'Dark Lake Hylia WS'),
|
('Dark South Pass ES', 'Ice Lake WS'),
|
||||||
('Dark Lake Hylia EC', 'Southeast DW WC'),
|
('Ice Lake EC', 'Bomber Corner WC'),
|
||||||
('Dark Lake Hylia ES', 'Southeast DW WS'),
|
('Ice Lake ES', 'Bomber Corner WS'),
|
||||||
('Southeast DW NW', 'Dark Shopping Mall SW'),
|
('Bomber Corner NW', 'Shopping Mall SW'),
|
||||||
('Southeast DW NE', 'Dark Shopping Mall SE'),
|
('Bomber Corner NE', 'Shopping Mall SE'),
|
||||||
('West Dark Death Mountain EN', 'East Dark Death Mountain WN'),
|
('West Dark Death Mountain EN', 'East Dark Death Mountain WN'),
|
||||||
('West Dark Death Mountain ES', 'East Dark Death Mountain WS'),
|
('West Dark Death Mountain ES', 'East Dark Death Mountain WS'),
|
||||||
('East Dark Death Mountain EN', 'Turtle Rock WN')
|
('East Dark Death Mountain EN', 'Turtle Rock WN')
|
||||||
|
|||||||
15
README.md
15
README.md
@@ -9,7 +9,7 @@ See https://alttpr.com/ for more details on the normal randomizer.
|
|||||||
This is a very new mode of LTTPR so the tools and info is very limited. There is a [OW Rando Cheat Sheet](https://zelda.codemann8.com/images/shared/ow-rando-reference-sheet.png) that shows all the transitions that exist and are candidates for shuffle. There is a rumor that some OW tracking capability will be coming to CodeTracker, an EmoTracker package for LTTPR.
|
This is a very new mode of LTTPR so the tools and info is very limited. There is a [OW Rando Cheat Sheet](https://zelda.codemann8.com/images/shared/ow-rando-reference-sheet.png) that shows all the transitions that exist and are candidates for shuffle. There is a rumor that some OW tracking capability will be coming to CodeTracker, an EmoTracker package for LTTPR.
|
||||||
|
|
||||||
# Known Issues
|
# Known Issues
|
||||||
(Updated 2021-04-29)
|
(Updated 2021-05-05)
|
||||||
|
|
||||||
### If you want to playtest this, know these things:
|
### If you want to playtest this, know these things:
|
||||||
- Big Red Bomb may require bomb duping as ledge drops may be in the way of your path to the Pyramid Fairy crack
|
- Big Red Bomb may require bomb duping as ledge drops may be in the way of your path to the Pyramid Fairy crack
|
||||||
@@ -18,10 +18,9 @@ This is a very new mode of LTTPR so the tools and info is very limited. There is
|
|||||||
- If you fake flipper, beware of transitioning south. You could end up at the top of the waterfall in the southeast of either world. If you mistakenly drop down, it is important to NOT make any other movements and S+Q immediately or there will be a hardlock. Falling from the waterfall is avoidable but it is super easy to do as it is super close to the transition.
|
- If you fake flipper, beware of transitioning south. You could end up at the top of the waterfall in the southeast of either world. If you mistakenly drop down, it is important to NOT make any other movements and S+Q immediately or there will be a hardlock. Falling from the waterfall is avoidable but it is super easy to do as it is super close to the transition.
|
||||||
|
|
||||||
### Known bugs:
|
### Known bugs:
|
||||||
- ~~Camera unlocks, this is a known issue and will eventually be fixed at a later time~~ _(Fixed with 0.1.1.1)
|
- ~~Camera unlocks, this is a known issue and will eventually be fixed at a later time~~ _(Fixed with 0.1.1.2)_
|
||||||
- ~~When generating, there is a message about one location that remains unfilled. You will find a Nothing item at that location.~~ _(Fixed with 0.1.1.0)_
|
- ~~When generating, there is a message about one location that remains unfilled. You will find a Nothing item at that location.~~ _(Fixed with 0.1.1.0)_
|
||||||
- There may be an issue with progression being front-loaded in the seed in some scenarios, due to an unsophisticated shuffle algorithm that could make varying-sized parts of each world unreachable
|
- There may be an issue with progression being front-loaded in the seed in some scenarios, due to an unsophisticated shuffle algorithm that could make varying-sized parts of each world unreachable
|
||||||
- ~~Some rare instances of vanilla transitions occur when they should not, you can tell when this bug occurs because it doesn't re-center you within the gap. These cases are seemingly unreproducable, so you can re-navigate to see where it was supposed to lead. Video proof of these occurances are helpful.~~ _(Fixed with 0.1.1.0)_
|
|
||||||
|
|
||||||
# Feedback and Bug Reports
|
# Feedback and Bug Reports
|
||||||
|
|
||||||
@@ -55,6 +54,10 @@ OW is not shuffled.
|
|||||||
|
|
||||||
This keeps similar edge transitions together. ie. The 2 west edges of Potion Shop area will be paired to another set of two similar edges
|
This keeps similar edge transitions together. ie. The 2 west edges of Potion Shop area will be paired to another set of two similar edges
|
||||||
|
|
||||||
|
## Parallel Worlds (--ow_parallel)
|
||||||
|
|
||||||
|
This ensures matching layouts of Light and Dark worlds. Any remaining edge transitions that don't have a matching counterpart will be shuffled amongst themselves. ie. If going right from Link's House leads to Blacksmith, then going right from Big Bomb Shop will lead to Hammer Pegs
|
||||||
|
|
||||||
|
|
||||||
# Command Line Options
|
# Command Line Options
|
||||||
|
|
||||||
@@ -75,3 +78,9 @@ For specifying the overworld shuffle you want as above. (default: vanilla)
|
|||||||
```
|
```
|
||||||
|
|
||||||
This keeps similar edge transitions paired together with other pairs of transitions
|
This keeps similar edge transitions paired together with other pairs of transitions
|
||||||
|
|
||||||
|
```
|
||||||
|
--ow_parallel
|
||||||
|
```
|
||||||
|
|
||||||
|
This ensures the layout of both worlds have the same shape
|
||||||
|
|||||||
56
Regions.py
56
Regions.py
@@ -11,7 +11,7 @@ def create_regions(world, player):
|
|||||||
create_lw_region(player, 'Lost Woods Area', ['Mushroom'], ['Lost Woods Gamble', 'Lost Woods Hideout Drop', 'Lost Woods Hideout Stump', 'Lost Woods NW', 'Lost Woods SW', 'Lost Woods SC', 'Lost Woods SE', 'Lost Woods EN']),
|
create_lw_region(player, 'Lost Woods Area', ['Mushroom'], ['Lost Woods Gamble', 'Lost Woods Hideout Drop', 'Lost Woods Hideout Stump', 'Lost Woods NW', 'Lost Woods SW', 'Lost Woods SC', 'Lost Woods SE', 'Lost Woods EN']),
|
||||||
create_lw_region(player, 'Master Sword Meadow', ['Master Sword Pedestal'], ['Master Sword Meadow SC']),
|
create_lw_region(player, 'Master Sword Meadow', ['Master Sword Pedestal'], ['Master Sword Meadow SC']),
|
||||||
create_lw_region(player, 'Lumberjack Area', None, ['Lumberjack Tree Tree', 'Lumberjack Tree Cave', 'Lumberjack House', 'Lumberjack WN', 'Lumberjack SW']),
|
create_lw_region(player, 'Lumberjack Area', None, ['Lumberjack Tree Tree', 'Lumberjack Tree Cave', 'Lumberjack House', 'Lumberjack WN', 'Lumberjack SW']),
|
||||||
create_lw_region(player, 'DM Ascent Area', None, ['Death Mountain Entrance Rock', 'DM Ascent NW', 'DM Ascent SE']),
|
create_lw_region(player, 'Mountain Entry Area', None, ['Death Mountain Entrance Rock', 'Mountain Entry NW', 'Mountain Entry SE']),
|
||||||
create_lw_region(player, 'Death Mountain Entrance', None, ['Old Man Cave (West)', 'Death Mountain Entrance Drop']),
|
create_lw_region(player, 'Death Mountain Entrance', None, ['Old Man Cave (West)', 'Death Mountain Entrance Drop']),
|
||||||
create_lw_region(player, 'Death Mountain Return Ledge', None, ['Death Mountain Return Cave (West)', 'Death Mountain Return Drop']),
|
create_lw_region(player, 'Death Mountain Return Ledge', None, ['Death Mountain Return Cave (West)', 'Death Mountain Return Drop']),
|
||||||
create_lw_region(player, 'Lost Woods Pass West Area', None, ['Lost Woods Pass NW', 'Lost Woods Pass SW']),
|
create_lw_region(player, 'Lost Woods Pass West Area', None, ['Lost Woods Pass NW', 'Lost Woods Pass SW']),
|
||||||
@@ -25,9 +25,9 @@ def create_regions(world, player):
|
|||||||
create_lw_region(player, 'Graveyard Area', None, ['Sanctuary Grave', 'Kings Grave Outer Rocks', 'Graveyard WC', 'Graveyard EC']),
|
create_lw_region(player, 'Graveyard Area', None, ['Sanctuary Grave', 'Kings Grave Outer Rocks', 'Graveyard WC', 'Graveyard EC']),
|
||||||
create_lw_region(player, 'Graveyard Ledge', None, ['Graveyard Cave', 'Graveyard Ledge Drop']),
|
create_lw_region(player, 'Graveyard Ledge', None, ['Graveyard Cave', 'Graveyard Ledge Drop']),
|
||||||
create_lw_region(player, 'Kings Grave Area', None, ['Kings Grave', 'Kings Grave Inner Rocks']),
|
create_lw_region(player, 'Kings Grave Area', None, ['Kings Grave', 'Kings Grave Inner Rocks']),
|
||||||
create_lw_region(player, 'Useless Fairy Area', None, ['North Fairy Cave', 'North Fairy Cave Drop', 'Useless Fairy Water Drop', 'Useless Fairy WC', 'Useless Fairy SW']),
|
create_lw_region(player, 'River Bend Area', None, ['North Fairy Cave', 'North Fairy Cave Drop', 'River Bend Water Drop', 'River Bend WC', 'River Bend SW']),
|
||||||
create_lw_region(player, 'Useless Fairy East Bank', None, ['Useless Fairy East Water Drop', 'Useless Fairy SE', 'Useless Fairy EC', 'Useless Fairy ES']),
|
create_lw_region(player, 'River Bend East Bank', None, ['River Bend East Water Drop', 'River Bend SE', 'River Bend EC', 'River Bend ES']),
|
||||||
create_lw_region(player, 'Useless Fairy Water', None, ['Useless Fairy West Pier', 'Useless Fairy East Pier', 'Useless Fairy EN', 'Useless Fairy SC', 'Useless Fairy Whirlpool']),
|
create_lw_region(player, 'River Bend Water', None, ['River Bend West Pier', 'River Bend East Pier', 'River Bend EN', 'River Bend SC', 'River Bend Whirlpool']),
|
||||||
create_lw_region(player, 'Potion Shop Area', None, ['Potion Shop', 'Potion Shop Water Drop', 'Potion Shop Rock (South)', 'Potion Shop WC', 'Potion Shop WS']),
|
create_lw_region(player, 'Potion Shop Area', None, ['Potion Shop', 'Potion Shop Water Drop', 'Potion Shop Rock (South)', 'Potion Shop WC', 'Potion Shop WS']),
|
||||||
create_lw_region(player, 'Potion Shop Northeast', None, ['Potion Shop Northeast Water Drop', 'Potion Shop Rock (North)', 'Potion Shop EC']),
|
create_lw_region(player, 'Potion Shop Northeast', None, ['Potion Shop Northeast Water Drop', 'Potion Shop Rock (North)', 'Potion Shop EC']),
|
||||||
create_lw_region(player, 'Potion Shop Water', None, ['Potion Shop WN', 'Potion Shop EN']),
|
create_lw_region(player, 'Potion Shop Water', None, ['Potion Shop WN', 'Potion Shop EN']),
|
||||||
@@ -46,7 +46,7 @@ def create_regions(world, player):
|
|||||||
create_lw_region(player, 'Hyrule Castle East Entry', None, ['Hyrule Castle Outer East Rock', 'Hyrule Castle ES']),
|
create_lw_region(player, 'Hyrule Castle East Entry', None, ['Hyrule Castle Outer East Rock', 'Hyrule Castle ES']),
|
||||||
create_lw_region(player, 'Wooden Bridge Area', None, ['Wooden Bridge Water Drop', 'Wooden Bridge NW', 'Wooden Bridge NE', 'Wooden Bridge SW']),
|
create_lw_region(player, 'Wooden Bridge Area', None, ['Wooden Bridge Water Drop', 'Wooden Bridge NW', 'Wooden Bridge NE', 'Wooden Bridge SW']),
|
||||||
create_lw_region(player, 'Wooden Bridge Water', None, ['Wooden Bridge NC']),
|
create_lw_region(player, 'Wooden Bridge Water', None, ['Wooden Bridge NC']),
|
||||||
create_lw_region(player, 'Sand Dune Area', None, ['Sand Dune NW', 'Sand Dune WN', 'Sand Dune SC']),
|
create_lw_region(player, 'Sand Dunes Area', None, ['Sand Dunes NW', 'Sand Dunes WN', 'Sand Dunes SC']),
|
||||||
create_lw_region(player, 'Eastern Palace Area', None, ['Sahasrahlas Hut', 'Eastern Palace', 'Eastern Palace SW', 'Eastern Palace SE']),
|
create_lw_region(player, 'Eastern Palace Area', None, ['Sahasrahlas Hut', 'Eastern Palace', 'Eastern Palace SW', 'Eastern Palace SE']),
|
||||||
create_lw_region(player, 'Eastern Nook Area', None, ['Long Fairy Cave', 'East Hyrule Teleporter', 'Eastern Nook NE']),
|
create_lw_region(player, 'Eastern Nook Area', None, ['Long Fairy Cave', 'East Hyrule Teleporter', 'Eastern Nook NE']),
|
||||||
create_lw_region(player, 'Maze Race Area', None, ['Maze Race ES']),
|
create_lw_region(player, 'Maze Race Area', None, ['Maze Race ES']),
|
||||||
@@ -58,7 +58,7 @@ def create_regions(world, player):
|
|||||||
create_lw_region(player, 'Cave 45 Ledge', None, ['Cave 45', 'Cave 45 Ledge Drop']),
|
create_lw_region(player, 'Cave 45 Ledge', None, ['Cave 45', 'Cave 45 Ledge Drop']),
|
||||||
create_lw_region(player, 'C Whirlpool Area', None, ['C Whirlpool Rock (Bottom)', 'South Hyrule Teleporter', 'C Whirlpool EN', 'C Whirlpool EC', 'C Whirlpool ES', 'C Whirlpool SC', 'C Whirlpool']),
|
create_lw_region(player, 'C Whirlpool Area', None, ['C Whirlpool Rock (Bottom)', 'South Hyrule Teleporter', 'C Whirlpool EN', 'C Whirlpool EC', 'C Whirlpool ES', 'C Whirlpool SC', 'C Whirlpool']),
|
||||||
create_lw_region(player, 'C Whirlpool Outer Area', None, ['C Whirlpool Rock (Top)', 'C Whirlpool WC', 'C Whirlpool NW']),
|
create_lw_region(player, 'C Whirlpool Outer Area', None, ['C Whirlpool Rock (Top)', 'C Whirlpool WC', 'C Whirlpool NW']),
|
||||||
create_lw_region(player, 'Central Bonk Rock Area', None, ['Bonk Fairy (Light)', 'Central Bonk Rock NW', 'Central Bonk Rock SW', 'Central Bonk Rock EN', 'Central Bonk Rock EC', 'Central Bonk Rock ES']),
|
create_lw_region(player, 'Central Bonk Rocks Area', None, ['Bonk Fairy (Light)', 'Central Bonk Rocks NW', 'Central Bonk Rocks SW', 'Central Bonk Rocks EN', 'Central Bonk Rocks EC', 'Central Bonk Rocks ES']),
|
||||||
create_lw_region(player, 'Links House Area', None, ['Links House', 'Links House NE', 'Links House WN', 'Links House WC', 'Links House WS', 'Links House SC', 'Links House ES', 'Flute Away']),
|
create_lw_region(player, 'Links House Area', None, ['Links House', 'Links House NE', 'Links House WN', 'Links House WC', 'Links House WS', 'Links House SC', 'Links House ES', 'Flute Away']),
|
||||||
create_lw_region(player, 'Stone Bridge Area', None, ['Stone Bridge NC', 'Stone Bridge EN', 'Stone Bridge WS', 'Stone Bridge SC']),
|
create_lw_region(player, 'Stone Bridge Area', None, ['Stone Bridge NC', 'Stone Bridge EN', 'Stone Bridge WS', 'Stone Bridge SC']),
|
||||||
create_lw_region(player, 'Stone Bridge Water', None, ['Stone Bridge WC', 'Stone Bridge EC']),
|
create_lw_region(player, 'Stone Bridge Water', None, ['Stone Bridge WC', 'Stone Bridge EC']),
|
||||||
@@ -73,9 +73,9 @@ def create_regions(world, player):
|
|||||||
create_lw_region(player, 'Desert Palace Mouth', None, ['Desert Palace Entrance (East)', 'Desert Mouth Drop']),
|
create_lw_region(player, 'Desert Palace Mouth', None, ['Desert Palace Entrance (East)', 'Desert Mouth Drop']),
|
||||||
create_lw_region(player, 'Desert Palace Teleporter Ledge', None, ['Desert Teleporter Drop', 'Desert Teleporter']),
|
create_lw_region(player, 'Desert Palace Teleporter Ledge', None, ['Desert Teleporter Drop', 'Desert Teleporter']),
|
||||||
create_lw_region(player, 'Bombos Tablet Ledge', ['Bombos Tablet'], ['Bombos Tablet Drop', 'Desert EC']),
|
create_lw_region(player, 'Bombos Tablet Ledge', ['Bombos Tablet'], ['Bombos Tablet Drop', 'Desert EC']),
|
||||||
create_lw_region(player, 'Purple Chest Area', ['Purple Chest'], ['Desert Fairy', '50 Rupee Cave', 'Purple Chest WS', 'Purple Chest EC', 'Purple Chest Rocks (North)']),
|
create_lw_region(player, 'Desert Pass Area', ['Purple Chest'], ['Desert Fairy', '50 Rupee Cave', 'Desert Pass WS', 'Desert Pass EC', 'Desert Pass Rocks (North)']),
|
||||||
create_lw_region(player, 'Purple Chest Southeast', None, ['Purple Chest Rocks (South)', 'Purple Chest ES']),
|
create_lw_region(player, 'Desert Pass Southeast', None, ['Desert Pass Rocks (South)', 'Desert Pass ES']),
|
||||||
create_lw_region(player, 'Purple Chest Ledge', None, ['Purple Chest Ledge Drop', 'Purple Chest WC']),
|
create_lw_region(player, 'Desert Pass Ledge', None, ['Desert Pass Ledge Drop', 'Desert Pass WC']),
|
||||||
create_lw_region(player, 'Dam Area', ['Sunken Treasure'], ['Dam', 'Dam WC', 'Dam WS', 'Dam NC', 'Dam EC']),
|
create_lw_region(player, 'Dam Area', ['Sunken Treasure'], ['Dam', 'Dam WC', 'Dam WS', 'Dam NC', 'Dam EC']),
|
||||||
create_lw_region(player, 'Statues Area', None, ['Light Hype Fairy', 'Statues NC', 'Statues WN', 'Statues WC', 'Statues WS', 'Statues SC']),
|
create_lw_region(player, 'Statues Area', None, ['Light Hype Fairy', 'Statues NC', 'Statues WN', 'Statues WC', 'Statues WS', 'Statues SC']),
|
||||||
create_lw_region(player, 'South Pass Area', None, ['South Pass WC', 'South Pass NC', 'South Pass ES']),
|
create_lw_region(player, 'South Pass Area', None, ['South Pass WC', 'South Pass NC', 'South Pass ES']),
|
||||||
@@ -88,7 +88,7 @@ def create_regions(world, player):
|
|||||||
create_lw_region(player, 'Octoballoon Area', None, ['Octoballoon Water Drop', 'Octoballoon WS', 'Octoballoon NE']),
|
create_lw_region(player, 'Octoballoon Area', None, ['Octoballoon Water Drop', 'Octoballoon WS', 'Octoballoon NE']),
|
||||||
create_lw_region(player, 'Octoballoon Water', None, ['Octoballoon Pier', 'Octoballoon WC', 'Octoballoon Whirlpool']),
|
create_lw_region(player, 'Octoballoon Water', None, ['Octoballoon Pier', 'Octoballoon WC', 'Octoballoon Whirlpool']),
|
||||||
create_lw_region(player, 'Octoballoon Water Ledge', None, ['Octoballoon Waterfall Water Drop', 'Octoballoon NW']),
|
create_lw_region(player, 'Octoballoon Water Ledge', None, ['Octoballoon Waterfall Water Drop', 'Octoballoon NW']),
|
||||||
create_lw_region(player, 'Ice Rod Cave Area', None, ['Ice Rod Cave', 'Good Bee Cave', '20 Rupee Cave', 'Ice Rod Cave SE', 'Ice Rod Cave SW']),
|
create_lw_region(player, 'Ice Cave Area', None, ['Ice Rod Cave', 'Good Bee Cave', '20 Rupee Cave', 'Ice Cave SE', 'Ice Cave SW']),
|
||||||
create_cave_region(player, 'Blinds Hideout', 'a bounty of five items', ["Blind\'s Hideout - Top",
|
create_cave_region(player, 'Blinds Hideout', 'a bounty of five items', ["Blind\'s Hideout - Top",
|
||||||
"Blind\'s Hideout - Left",
|
"Blind\'s Hideout - Left",
|
||||||
"Blind\'s Hideout - Right",
|
"Blind\'s Hideout - Right",
|
||||||
@@ -203,9 +203,9 @@ def create_regions(world, player):
|
|||||||
create_dw_region(player, 'Skull Woods Forgotten Path (Southwest)', None, ['Skull Woods Forgotten Bush (West)', 'Lost Woods Southwest Mirror Spot', 'Skull Woods SW']),
|
create_dw_region(player, 'Skull Woods Forgotten Path (Southwest)', None, ['Skull Woods Forgotten Bush (West)', 'Lost Woods Southwest Mirror Spot', 'Skull Woods SW']),
|
||||||
create_dw_region(player, 'Skull Woods Forgotten Path (Northeast)', None, ['Skull Woods Forgotten Bush (East)', 'Lost Woods Northeast Mirror Spot', 'Skull Woods EN']),
|
create_dw_region(player, 'Skull Woods Forgotten Path (Northeast)', None, ['Skull Woods Forgotten Bush (East)', 'Lost Woods Northeast Mirror Spot', 'Skull Woods EN']),
|
||||||
create_dw_region(player, 'Dark Lumberjack Area', None, ['Dark World Lumberjack Shop', 'Lumberjack Mirror Spot', 'Dark Lumberjack WN', 'Dark Lumberjack SW']),
|
create_dw_region(player, 'Dark Lumberjack Area', None, ['Dark World Lumberjack Shop', 'Lumberjack Mirror Spot', 'Dark Lumberjack WN', 'Dark Lumberjack SW']),
|
||||||
create_dw_region(player, 'Bumper Cave Area', None, ['Bumper Cave Entrance Rock', 'DM Ascent Mirror Spot', 'Bumper Cave NW', 'Bumper Cave SE']),
|
create_dw_region(player, 'Bumper Cave Area', None, ['Bumper Cave Entrance Rock', 'Mountain Entry Mirror Spot', 'Bumper Cave NW', 'Bumper Cave SE']),
|
||||||
create_dw_region(player, 'Bumper Cave Entrance', None, ['Bumper Cave (Bottom)', 'DM Ascent Entrance Mirror Spot', 'Bumper Cave Ledge Drop']),
|
create_dw_region(player, 'Bumper Cave Entrance', None, ['Bumper Cave (Bottom)', 'Mountain Entry Entrance Mirror Spot', 'Bumper Cave Ledge Drop']),
|
||||||
create_dw_region(player, 'Bumper Cave Ledge', ['Bumper Cave Ledge'], ['Bumper Cave (Top)', 'DM Ascent Ledge Mirror Spot', 'Bumper Cave Entrance Drop']),
|
create_dw_region(player, 'Bumper Cave Ledge', ['Bumper Cave Ledge'], ['Bumper Cave (Top)', 'Mountain Entry Ledge Mirror Spot', 'Bumper Cave Entrance Drop']),
|
||||||
create_dw_region(player, 'Skull Woods Pass West Area', None, ['Skull Woods Pass Bush Row (West)', 'Lost Woods Pass West Mirror Spot', 'Skull Woods Pass NW', 'Skull Woods Pass SW']),
|
create_dw_region(player, 'Skull Woods Pass West Area', None, ['Skull Woods Pass Bush Row (West)', 'Lost Woods Pass West Mirror Spot', 'Skull Woods Pass NW', 'Skull Woods Pass SW']),
|
||||||
create_dw_region(player, 'Skull Woods Pass East Top Area', None, ['Skull Woods Pass Bush Row (East)', 'Skull Woods Pass Rock (Top)', 'Lost Woods Pass East Top Mirror Spot', 'Skull Woods Pass NE']),
|
create_dw_region(player, 'Skull Woods Pass East Top Area', None, ['Skull Woods Pass Bush Row (East)', 'Skull Woods Pass Rock (Top)', 'Lost Woods Pass East Top Mirror Spot', 'Skull Woods Pass NE']),
|
||||||
create_dw_region(player, 'Skull Woods Pass East Bottom Area', None, ['Skull Woods Pass Rock (Bottom)', 'Lost Woods East Bottom Mirror Spot', 'Skull Woods Pass SE']),
|
create_dw_region(player, 'Skull Woods Pass East Bottom Area', None, ['Skull Woods Pass Rock (Bottom)', 'Lost Woods East Bottom Mirror Spot', 'Skull Woods Pass SE']),
|
||||||
@@ -214,8 +214,8 @@ def create_regions(world, player):
|
|||||||
create_dw_region(player, 'Shield Shop Area', None, ['Red Shield Shop', 'Forgotton Forest Mirror Spot', 'Shield Shop NW', 'Shield Shop NE']),
|
create_dw_region(player, 'Shield Shop Area', None, ['Red Shield Shop', 'Forgotton Forest Mirror Spot', 'Shield Shop NW', 'Shield Shop NE']),
|
||||||
create_dw_region(player, 'Dark Chapel Area', None, ['Dark Sanctuary Hint', 'Bonk Rock Ledge Mirror Spot', 'Dark Chapel WN', 'Dark Chapel WS', 'Dark Chapel EC']),
|
create_dw_region(player, 'Dark Chapel Area', None, ['Dark Sanctuary Hint', 'Bonk Rock Ledge Mirror Spot', 'Dark Chapel WN', 'Dark Chapel WS', 'Dark Chapel EC']),
|
||||||
create_dw_region(player, 'Dark Graveyard Area', None, ['Graveyard Ledge Mirror Spot', 'Kings Grave Mirror Spot', 'Dark Graveyard WC', 'Dark Graveyard ES']),
|
create_dw_region(player, 'Dark Graveyard Area', None, ['Graveyard Ledge Mirror Spot', 'Kings Grave Mirror Spot', 'Dark Graveyard WC', 'Dark Graveyard ES']),
|
||||||
create_dw_region(player, 'Qirn Jump Area', None, ['Qirn Jump Water Drop', 'Useless Fairy Mirror Spot', 'Qirn Jump WC', 'Qirn Jump SW']),
|
create_dw_region(player, 'Qirn Jump Area', None, ['Qirn Jump Water Drop', 'River Bend Mirror Spot', 'Qirn Jump WC', 'Qirn Jump SW']),
|
||||||
create_dw_region(player, 'Qirn Jump East Bank', None, ['Qirn Jump East Water Drop', 'Useless Fairy East Mirror Spot', 'Qirn Jump SE', 'Qirn Jump EC', 'Qirn Jump ES']),
|
create_dw_region(player, 'Qirn Jump East Bank', None, ['Qirn Jump East Water Drop', 'River Bend East Mirror Spot', 'Qirn Jump SE', 'Qirn Jump EC', 'Qirn Jump ES']),
|
||||||
create_dw_region(player, 'Qirn Jump Water', None, ['Qirn Jump Pier', 'Qirn Jump EN', 'Qirn Jump SC', 'Qirn Jump Whirlpool']),
|
create_dw_region(player, 'Qirn Jump Water', None, ['Qirn Jump Pier', 'Qirn Jump EN', 'Qirn Jump SC', 'Qirn Jump Whirlpool']),
|
||||||
create_dw_region(player, 'Dark Witch Area', None, ['Dark World Potion Shop', 'Dark Witch Water Drop', 'Potion Shop Mirror Spot', 'Dark Witch Rock (South)', 'Dark Witch WC', 'Dark Witch WS']),
|
create_dw_region(player, 'Dark Witch Area', None, ['Dark World Potion Shop', 'Dark Witch Water Drop', 'Potion Shop Mirror Spot', 'Dark Witch Rock (South)', 'Dark Witch WC', 'Dark Witch WS']),
|
||||||
create_dw_region(player, 'Dark Witch Northeast', None, ['Dark Witch Northeast Water Drop', 'Dark Witch Rock (North)', 'Potion Shop Northeast Mirror Spot', 'Dark Witch EC']),
|
create_dw_region(player, 'Dark Witch Northeast', None, ['Dark Witch Northeast Water Drop', 'Dark Witch Rock (North)', 'Potion Shop Northeast Mirror Spot', 'Dark Witch EC']),
|
||||||
@@ -234,7 +234,7 @@ def create_regions(world, player):
|
|||||||
create_dw_region(player, 'Broken Bridge Northeast', None, ['Broken Bridge Hammer Rock (North)', 'Broken Bridge Hookshot Gap', 'Broken Bridge Northeast Water Drop', 'Wooden Bridge Northeast Mirror Spot', 'Broken Bridge NE']),
|
create_dw_region(player, 'Broken Bridge Northeast', None, ['Broken Bridge Hammer Rock (North)', 'Broken Bridge Hookshot Gap', 'Broken Bridge Northeast Water Drop', 'Wooden Bridge Northeast Mirror Spot', 'Broken Bridge NE']),
|
||||||
create_dw_region(player, 'Broken Bridge West', None, ['Broken Bridge West Water Drop', 'Wooden Bridge West Mirror Spot', 'Broken Bridge NW']),
|
create_dw_region(player, 'Broken Bridge West', None, ['Broken Bridge West Water Drop', 'Wooden Bridge West Mirror Spot', 'Broken Bridge NW']),
|
||||||
create_dw_region(player, 'Broken Bridge Water', None, ['Broken Bridge NC']),
|
create_dw_region(player, 'Broken Bridge Water', None, ['Broken Bridge NC']),
|
||||||
create_dw_region(player, 'Dark Dune Area', None, ['Sand Dune Mirror Spot', 'Dark Dune NW', 'Dark Dune WN', 'Dark Dune SC']),
|
create_dw_region(player, 'Dark Dunes Area', None, ['Sand Dunes Mirror Spot', 'Dark Dunes NW', 'Dark Dunes WN', 'Dark Dunes SC']),
|
||||||
create_dw_region(player, 'Palace of Darkness Area', None, ['Palace of Darkness Hint', 'Palace of Darkness', 'Eastern Palace Mirror Spot', 'Palace of Darkness SW', 'Palace of Darkness SE']),
|
create_dw_region(player, 'Palace of Darkness Area', None, ['Palace of Darkness Hint', 'Palace of Darkness', 'Eastern Palace Mirror Spot', 'Palace of Darkness SW', 'Palace of Darkness SE']),
|
||||||
create_dw_region(player, 'Palace of Darkness Nook Area', None, ['East Dark World Hint', 'Eastern Nook Mirror Spot', 'Palace of Darkness Nook NE']),
|
create_dw_region(player, 'Palace of Darkness Nook Area', None, ['East Dark World Hint', 'Eastern Nook Mirror Spot', 'Palace of Darkness Nook NE']),
|
||||||
create_dw_region(player, 'Dig Game Area', ['Digging Game'], ['Dig Game To Ledge Drop', 'Maze Race Mirror Spot', 'Dig Game ES']),
|
create_dw_region(player, 'Dig Game Area', ['Digging Game'], ['Dig Game To Ledge Drop', 'Maze Race Mirror Spot', 'Dig Game ES']),
|
||||||
@@ -246,7 +246,7 @@ def create_regions(world, player):
|
|||||||
create_dw_region(player, 'Circle of Bushes Area', None, ['Cave 45 Mirror Spot', 'Circle of Bushes NW', 'Circle of Bushes NC', 'Circle of Bushes EC']),
|
create_dw_region(player, 'Circle of Bushes Area', None, ['Cave 45 Mirror Spot', 'Circle of Bushes NW', 'Circle of Bushes NC', 'Circle of Bushes EC']),
|
||||||
create_dw_region(player, 'Dark C Whirlpool Area', None, ['Dark C Whirlpool Rock (Bottom)', 'C Whirlpool Mirror Spot', 'Dark C Whirlpool EN', 'Dark C Whirlpool EC', 'Dark C Whirlpool ES', 'Dark C Whirlpool SC']),
|
create_dw_region(player, 'Dark C Whirlpool Area', None, ['Dark C Whirlpool Rock (Bottom)', 'C Whirlpool Mirror Spot', 'Dark C Whirlpool EN', 'Dark C Whirlpool EC', 'Dark C Whirlpool ES', 'Dark C Whirlpool SC']),
|
||||||
create_dw_region(player, 'Dark C Whirlpool Outer Area', None, ['Dark C Whirlpool Rock (Top)', 'C Whirlpool Outer Mirror Spot', 'Dark C Whirlpool WC', 'Dark C Whirlpool NW']),
|
create_dw_region(player, 'Dark C Whirlpool Outer Area', None, ['Dark C Whirlpool Rock (Top)', 'C Whirlpool Outer Mirror Spot', 'Dark C Whirlpool WC', 'Dark C Whirlpool NW']),
|
||||||
create_dw_region(player, 'Dark Bonk Rock Area', None, ['Bonk Fairy (Dark)', 'Central Bonk Rock Mirror Spot', 'Dark Bonk Rock NW', 'Dark Bonk Rock SW', 'Dark Bonk Rock EN', 'Dark Bonk Rock EC', 'Dark Bonk Rock ES']),
|
create_dw_region(player, 'Dark Bonk Rocks Area', None, ['Bonk Fairy (Dark)', 'Central Bonk Rocks Mirror Spot', 'Dark Bonk Rocks NW', 'Dark Bonk Rocks SW', 'Dark Bonk Rocks EN', 'Dark Bonk Rocks EC', 'Dark Bonk Rocks ES']),
|
||||||
create_dw_region(player, 'Big Bomb Shop Area', None, ['Big Bomb Shop', 'Links House Mirror Spot', 'Big Bomb Shop NE', 'Big Bomb Shop WN', 'Big Bomb Shop WC', 'Big Bomb Shop WS', 'Big Bomb Shop SC', 'Big Bomb Shop ES']),
|
create_dw_region(player, 'Big Bomb Shop Area', None, ['Big Bomb Shop', 'Links House Mirror Spot', 'Big Bomb Shop NE', 'Big Bomb Shop WN', 'Big Bomb Shop WC', 'Big Bomb Shop WS', 'Big Bomb Shop SC', 'Big Bomb Shop ES']),
|
||||||
create_dw_region(player, 'Hammer Bridge North Area', None, ['Hammer Bridge Pegs (North)', 'Hammer Bridge Water Drop', 'Stone Bridge Mirror Spot', 'Hammer Bridge NC', 'Hammer Bridge EN']),
|
create_dw_region(player, 'Hammer Bridge North Area', None, ['Hammer Bridge Pegs (North)', 'Hammer Bridge Water Drop', 'Stone Bridge Mirror Spot', 'Hammer Bridge NC', 'Hammer Bridge EN']),
|
||||||
create_dw_region(player, 'Hammer Bridge South Area', None, ['Hammer Bridge Pegs (South)', 'Stone Bridge South Mirror Spot', 'Hammer Bridge WS', 'Hammer Bridge SC']),
|
create_dw_region(player, 'Hammer Bridge South Area', None, ['Hammer Bridge Pegs (South)', 'Stone Bridge South Mirror Spot', 'Hammer Bridge WS', 'Hammer Bridge SC']),
|
||||||
@@ -254,20 +254,20 @@ def create_regions(world, player):
|
|||||||
create_dw_region(player, 'Dark Tree Line Area', None, ['Dark Lake Hylia Fairy', 'Tree Line Mirror Spot', 'Dark Tree Line WN', 'Dark Tree Line NW', 'Dark Tree Line SE']),
|
create_dw_region(player, 'Dark Tree Line Area', None, ['Dark Lake Hylia Fairy', 'Tree Line Mirror Spot', 'Dark Tree Line WN', 'Dark Tree Line NW', 'Dark Tree Line SE']),
|
||||||
create_dw_region(player, 'Dark Tree Line Water', None, ['Dark Tree Line WC', 'Dark Tree Line SC']),
|
create_dw_region(player, 'Dark Tree Line Water', None, ['Dark Tree Line WC', 'Dark Tree Line SC']),
|
||||||
create_dw_region(player, 'Misery Mire Area', None, ['Mire Shed', 'Misery Mire', 'Dark Desert Fairy', 'Dark Desert Hint', 'Desert Ledge Mirror Spot', 'Checkerboard Mirror Spot', 'DP Stairs Mirror Spot', 'DP Entrance (North) Mirror Spot']),
|
create_dw_region(player, 'Misery Mire Area', None, ['Mire Shed', 'Misery Mire', 'Dark Desert Fairy', 'Dark Desert Hint', 'Desert Ledge Mirror Spot', 'Checkerboard Mirror Spot', 'DP Stairs Mirror Spot', 'DP Entrance (North) Mirror Spot']),
|
||||||
create_dw_region(player, 'Dark Purple Chest Area', None, ['Bombos Tablet Mirror Spot', 'Purple Chest Mirror Spot', 'Dark Purple Chest EC', 'Dark Purple Chest ES']),
|
create_dw_region(player, 'Swamp Nook Area', None, ['Bombos Tablet Mirror Spot', 'Desert Pass Mirror Spot', 'Swamp Nook EC', 'Swamp Nook ES']),
|
||||||
create_dw_region(player, 'Swamp Palace Area', None, ['Swamp Palace', 'Dam Mirror Spot', 'Swamp Palace WC', 'Swamp Palace WS', 'Swamp Palace NC', 'Swamp Palace EC']),
|
create_dw_region(player, 'Swamp Area', None, ['Swamp Palace', 'Dam Mirror Spot', 'Swamp WC', 'Swamp WS', 'Swamp NC', 'Swamp EC']),
|
||||||
create_dw_region(player, 'Hype Cave Area', None, ['Hype Cave', 'Statues Mirror Spot', 'Hype Cave NC', 'Hype Cave WN', 'Hype Cave WC', 'Hype Cave WS', 'Hype Cave SC']),
|
create_dw_region(player, 'Hype Cave Area', None, ['Hype Cave', 'Statues Mirror Spot', 'Hype Cave NC', 'Hype Cave WN', 'Hype Cave WC', 'Hype Cave WS', 'Hype Cave SC']),
|
||||||
create_dw_region(player, 'Dark South Pass Area', None, ['South Pass Mirror Spot', 'Dark South Pass WC', 'Dark South Pass NC', 'Dark South Pass ES']),
|
create_dw_region(player, 'Dark South Pass Area', None, ['South Pass Mirror Spot', 'Dark South Pass WC', 'Dark South Pass NC', 'Dark South Pass ES']),
|
||||||
create_dw_region(player, 'Dark Lake Hylia Area', None, ['Dark Lake Hylia Shop', 'Dark Lake Hylia Water Drop', 'Lake Hylia Mirror Spot', 'Dark Lake Hylia NW']),
|
create_dw_region(player, 'Ice Lake Area', None, ['Dark Lake Hylia Shop', 'Ice Lake Water Drop', 'Lake Hylia Mirror Spot', 'Ice Lake NW']),
|
||||||
create_dw_region(player, 'Dark Lake Hylia Northeast Bank', None, ['Dark Lake Hylia Northeast Water Drop', 'Lake Hylia Northeast Mirror Spot', 'Dark Lake Hylia NE']),
|
create_dw_region(player, 'Ice Lake Northeast Bank', None, ['Ice Lake Northeast Water Drop', 'Lake Hylia Northeast Mirror Spot', 'Ice Lake NE']),
|
||||||
create_dw_region(player, 'Dark Lake Hylia Ledge (West)', None, ['Dark Lake Hylia Southwest Water Drop', 'South Shore Mirror Spot', 'Dark Lake Hylia WS']),
|
create_dw_region(player, 'Ice Lake Ledge (West)', None, ['Ice Lake Southwest Water Drop', 'South Shore Mirror Spot', 'Ice Lake WS']),
|
||||||
create_dw_region(player, 'Dark Lake Hylia Ledge (East)', None, ['Dark Lake Hylia Southeast Water Drop', 'South Shore East Mirror Spot', 'Dark Lake Hylia ES']),
|
create_dw_region(player, 'Ice Lake Ledge (East)', None, ['Ice Lake Southeast Water Drop', 'South Shore East Mirror Spot', 'Ice Lake ES']),
|
||||||
create_dw_region(player, 'Dark Lake Hylia Water', None, ['Lake Hylia Island Mirror Spot', 'Dark Lake Hylia Northeast Pier', 'Dark Lake Hylia NC', 'Dark Lake Hylia EC']),
|
create_dw_region(player, 'Ice Lake Water', None, ['Lake Hylia Island Mirror Spot', 'Ice Lake Northeast Pier', 'Ice Lake NC', 'Ice Lake EC']),
|
||||||
create_dw_region(player, 'Ice Palace Area', None, ['Ice Palace', 'Lake Hylia Central Island Mirror Spot']),
|
create_dw_region(player, 'Ice Palace Area', None, ['Ice Palace', 'Lake Hylia Central Island Mirror Spot']),
|
||||||
create_dw_region(player, 'Southeast DW Area', None, ['Southeast DW Water Drop', 'Octoballoon Mirror Spot', 'Southeast DW WS', 'Southeast DW NE']),
|
create_dw_region(player, 'Bomber Corner Area', None, ['Bomber Corner Water Drop', 'Octoballoon Mirror Spot', 'Bomber Corner WS', 'Bomber Corner NE']),
|
||||||
create_dw_region(player, 'Southeast DW Water', None, ['Southeast DW Pier', 'Southeast DW Whirlpool', 'Southeast DW WC']),
|
create_dw_region(player, 'Bomber Corner Water', None, ['Bomber Corner Pier', 'Bomber Corner Whirlpool', 'Bomber Corner WC']),
|
||||||
create_dw_region(player, 'Southeast DW Water Ledge', None, ['Southeast DW Waterfall Water Drop', 'Southeast DW NW']),
|
create_dw_region(player, 'Bomber Corner Water Ledge', None, ['Bomber Corner Waterfall Water Drop', 'Bomber Corner NW']),
|
||||||
create_dw_region(player, 'Dark Shopping Mall Area', None, ['Dark Lake Hylia Ledge Fairy', 'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Ledge Spike Cave', 'Ice Rod Cave Mirror Spot', 'Dark Shopping Mall SE', 'Dark Shopping Mall SW']),
|
create_dw_region(player, 'Shopping Mall Area', None, ['Dark Lake Hylia Ledge Fairy', 'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Ledge Spike Cave', 'Ice Cave Mirror Spot', 'Shopping Mall SE', 'Shopping Mall SW']),
|
||||||
create_cave_region(player, 'Palace of Darkness Hint', 'a storyteller'),
|
create_cave_region(player, 'Palace of Darkness Hint', 'a storyteller'),
|
||||||
create_cave_region(player, 'East Dark World Hint', 'a storyteller'),
|
create_cave_region(player, 'East Dark World Hint', 'a storyteller'),
|
||||||
create_cave_region(player, 'Big Bomb Shop', 'the bomb shop'),
|
create_cave_region(player, 'Big Bomb Shop', 'the bomb shop'),
|
||||||
|
|||||||
62
Rules.py
62
Rules.py
@@ -130,13 +130,13 @@ def global_rules(world, player):
|
|||||||
|
|
||||||
#TODO: Remove the water drop ones, they should be redundant
|
#TODO: Remove the water drop ones, they should be redundant
|
||||||
set_rule(world.get_entrance('C Whirlpool', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('C Whirlpool', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Useless Fairy Whirlpool', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('River Bend Whirlpool', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Lake Hylia Whirlpool', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Lake Hylia Whirlpool', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Zora Whirlpool', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Zora Whirlpool', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Kakariko Pond Whirlpool', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Kakariko Pond Whirlpool', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Octoballoon Whirlpool', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Octoballoon Whirlpool', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Qirn Jump Whirlpool', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Qirn Jump Whirlpool', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Southeast DW Whirlpool', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Bomber Corner Whirlpool', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
|
|
||||||
set_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player))
|
set_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player))
|
||||||
set_rule(world.get_location('Dark Blacksmith Ruins', player), lambda state: state.has('Return Smith', player))
|
set_rule(world.get_location('Dark Blacksmith Ruins', player), lambda state: state.has('Return Smith', player))
|
||||||
@@ -485,8 +485,8 @@ def default_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Desert Palace Statue Move', player), lambda state: state.has('Book of Mudora', player))
|
set_rule(world.get_entrance('Desert Palace Statue Move', player), lambda state: state.has('Book of Mudora', player))
|
||||||
set_rule(world.get_entrance('Desert Ledge Outer Rocks', player), lambda state: state.can_lift_rocks(player))
|
set_rule(world.get_entrance('Desert Ledge Outer Rocks', player), lambda state: state.can_lift_rocks(player))
|
||||||
set_rule(world.get_entrance('Desert Ledge Inner Rocks', player), lambda state: state.can_lift_rocks(player))
|
set_rule(world.get_entrance('Desert Ledge Inner Rocks', player), lambda state: state.can_lift_rocks(player))
|
||||||
set_rule(world.get_entrance('Purple Chest Rocks (North)', player), lambda state: state.can_lift_rocks(player))
|
set_rule(world.get_entrance('Desert Pass Rocks (North)', player), lambda state: state.can_lift_rocks(player))
|
||||||
set_rule(world.get_entrance('Purple Chest Rocks (South)', player), lambda state: state.can_lift_rocks(player))
|
set_rule(world.get_entrance('Desert Pass Rocks (South)', player), lambda state: state.can_lift_rocks(player))
|
||||||
set_rule(world.get_entrance('DM Hammer Bridge (West)', player), lambda state: state.has('Hammer', player))
|
set_rule(world.get_entrance('DM Hammer Bridge (West)', player), lambda state: state.has('Hammer', player))
|
||||||
set_rule(world.get_entrance('DM Hammer Bridge (East)', player), lambda state: state.has('Hammer', player))
|
set_rule(world.get_entrance('DM Hammer Bridge (East)', player), lambda state: state.has('Hammer', player))
|
||||||
set_rule(world.get_entrance('DM Broken Bridge (West)', player), lambda state: state.has('Hookshot', player))
|
set_rule(world.get_entrance('DM Broken Bridge (West)', player), lambda state: state.has('Hookshot', player))
|
||||||
@@ -523,8 +523,8 @@ def default_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Zora Warning Water Drop', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Zora Warning Water Drop', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Potion Shop Water Drop', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Potion Shop Water Drop', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Potion Shop Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Potion Shop Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Useless Fairy Water Drop', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('River Bend Water Drop', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Useless Fairy East Water Drop', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('River Bend East Water Drop', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Wooden Bridge Water Drop', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Wooden Bridge Water Drop', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Lake Hylia Water Drop', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Lake Hylia Water Drop', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Lake Hylia South Water Drop', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Lake Hylia South Water Drop', player), lambda state: state.has('Flippers', player))
|
||||||
@@ -542,14 +542,14 @@ def default_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Broken Bridge Northeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Broken Bridge Northeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Broken Bridge West Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Broken Bridge West Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Hammer Bridge Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Hammer Bridge Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Ice Lake Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Northeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Ice Lake Northeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Southwest Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Ice Lake Southwest Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Southeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Ice Lake Southeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Southeast DW Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Bomber Corner Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Southeast DW Waterfall Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Bomber Corner Waterfall Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Ice Rod Cave SW', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Ice Cave SW', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Dark Shopping Mall SW', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Shopping Mall SW', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('C Whirlpool EC', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('C Whirlpool EC', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Statues WC', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Statues WC', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Dark C Whirlpool EC', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Dark C Whirlpool EC', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
@@ -572,9 +572,9 @@ def default_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Lost Woods Southwest Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Lost Woods Southwest Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Lost Woods Northeast Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Lost Woods Northeast Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Lumberjack Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Lumberjack Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('DM Ascent Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Mountain Entry Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('DM Ascent Ledge Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Mountain Entry Ledge Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('DM Ascent Entrance Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Mountain Entry Entrance Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Lost Woods Pass West Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Lost Woods Pass West Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Lost Woods Pass East Top Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Lost Woods Pass East Top Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Lost Woods East Bottom Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Lost Woods East Bottom Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
@@ -585,8 +585,8 @@ def default_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Graveyard Ledge Mirror Spot', player), lambda state: state.has_Pearl(player) and state.has_Mirror(player))
|
set_rule(world.get_entrance('Graveyard Ledge Mirror Spot', player), lambda state: state.has_Pearl(player) and state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Kings Grave Mirror Spot', player), lambda state: state.has_Pearl(player) and state.has_Mirror(player))
|
set_rule(world.get_entrance('Kings Grave Mirror Spot', player), lambda state: state.has_Pearl(player) and state.has_Mirror(player))
|
||||||
# Caution: If king's grave is relaxed at all to account for reaching it via a two way cave's exit in insanity mode, then the bomb shop logic will need to be updated (that would involve create a small ledge-like Region for it)
|
# Caution: If king's grave is relaxed at all to account for reaching it via a two way cave's exit in insanity mode, then the bomb shop logic will need to be updated (that would involve create a small ledge-like Region for it)
|
||||||
set_rule(world.get_entrance('Useless Fairy Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('River Bend Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Useless Fairy East Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('River Bend East Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Potion Shop Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Potion Shop Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Potion Shop Northeast Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Potion Shop Northeast Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Zora Warning Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Zora Warning Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
@@ -604,7 +604,7 @@ def default_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Wooden Bridge Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Wooden Bridge Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Wooden Bridge Northeast Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Wooden Bridge Northeast Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Wooden Bridge West Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Wooden Bridge West Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Sand Dune Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Sand Dunes Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Eastern Palace Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Eastern Palace Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Eastern Nook Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Eastern Nook Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Maze Race Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Maze Race Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
@@ -616,7 +616,7 @@ def default_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Cave 45 Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Cave 45 Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('C Whirlpool Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('C Whirlpool Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('C Whirlpool Outer Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('C Whirlpool Outer Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Central Bonk Rock Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Central Bonk Rocks Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Links House Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Links House Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Stone Bridge Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Stone Bridge Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Stone Bridge South Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Stone Bridge South Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
@@ -627,7 +627,7 @@ def default_rules(world, player):
|
|||||||
set_rule(world.get_entrance('DP Stairs Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('DP Stairs Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('DP Entrance (North) Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('DP Entrance (North) Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Bombos Tablet Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Bombos Tablet Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Purple Chest Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Desert Pass Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Dam Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Dam Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Statues Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Statues Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('South Pass Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('South Pass Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
@@ -638,7 +638,7 @@ def default_rules(world, player):
|
|||||||
set_rule(world.get_entrance('South Shore Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('South Shore Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('South Shore East Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('South Shore East Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Octoballoon Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Octoballoon Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Ice Rod Cave Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Ice Cave Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('West Death Mountain (Top) Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('West Death Mountain (Top) Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Spectacle Rock Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Spectacle Rock Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('East Death Mountain (Top West) Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('East Death Mountain (Top West) Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
@@ -735,12 +735,12 @@ def inverted_rules(world, player):
|
|||||||
set_rule(world.get_entrance('South Dark World Bridge', player), lambda state: state.has('Hammer', player))
|
set_rule(world.get_entrance('South Dark World Bridge', player), lambda state: state.has('Hammer', player))
|
||||||
set_rule(world.get_entrance('Bonk Fairy (Dark)', player), lambda state: state.has_Boots(player))
|
set_rule(world.get_entrance('Bonk Fairy (Dark)', player), lambda state: state.has_Boots(player))
|
||||||
set_rule(world.get_entrance('West Dark World Gap', player), lambda state: state.has('Hookshot', player))
|
set_rule(world.get_entrance('West Dark World Gap', player), lambda state: state.has('Hookshot', player))
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Drop (East)', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Ice Lake Drop (East)', player), lambda state: state.has('Flippers', player))
|
||||||
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_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('Flippers', player)) # ToDo any fake flipper set up?
|
set_rule(world.get_entrance('Ice Lake Drop (South)', player), lambda state: state.has('Flippers', player)) # ToDo any fake flipper set up?
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Ledge Pier', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Ice Lake Ledge Pier', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Ledge Spike Cave', player), lambda state: state.can_lift_rocks(player))
|
set_rule(world.get_entrance('Ice Lake Ledge Spike Cave', player), lambda state: state.can_lift_rocks(player))
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Teleporter', player), lambda state: state.has('Flippers', player) and (state.has('Hammer', player) or state.can_lift_rocks(player))) # Fake Flippers
|
set_rule(world.get_entrance('Ice Lake Teleporter', player), lambda state: state.has('Flippers', player) and (state.has('Hammer', player) or state.can_lift_rocks(player))) # Fake Flippers
|
||||||
set_rule(world.get_entrance('Village of Outcasts Heavy Rock', player), lambda state: state.can_lift_heavy_rocks(player))
|
set_rule(world.get_entrance('Village of Outcasts Heavy Rock', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||||
set_rule(world.get_entrance('East Dark World Bridge', player), lambda state: state.has('Hammer', player))
|
set_rule(world.get_entrance('East Dark World Bridge', player), lambda state: state.has('Hammer', player))
|
||||||
set_rule(world.get_entrance('Lake Hylia Central Island Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Lake Hylia Central Island Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
@@ -826,9 +826,9 @@ def no_glitches_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Lake Hylia Warp', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # can be fake flippered to
|
set_rule(world.get_entrance('Lake Hylia Warp', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # can be fake flippered to
|
||||||
set_rule(world.get_entrance('Northeast Light World Warp', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # can be fake flippered to
|
set_rule(world.get_entrance('Northeast Light World Warp', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # can be fake flippered to
|
||||||
add_rule(world.get_entrance('Hobo Bridge', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
add_rule(world.get_entrance('Hobo Bridge', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
add_rule(world.get_entrance('Dark Lake Hylia Drop (East)', player), lambda state: state.has('Flippers', player))
|
add_rule(world.get_entrance('Ice Lake Drop (East)', player), lambda state: state.has('Flippers', player))
|
||||||
add_rule(world.get_entrance('Dark Lake Hylia Teleporter', player), lambda state: state.has('Flippers', player) and (state.has('Hammer', player) or state.can_lift_rocks(player)))
|
add_rule(world.get_entrance('Ice Lake Teleporter', player), lambda state: state.has('Flippers', player) and (state.has('Hammer', player) or state.can_lift_rocks(player)))
|
||||||
add_rule(world.get_entrance('Dark Lake Hylia Ledge Drop', player), lambda state: state.has('Flippers', player))
|
add_rule(world.get_entrance('Ice Lake Ledge Drop', player), lambda state: state.has('Flippers', player))
|
||||||
add_rule(world.get_entrance('East Dark World Pier', player), lambda state: state.has('Flippers', player))
|
add_rule(world.get_entrance('East Dark World Pier', player), lambda state: state.has('Flippers', player))
|
||||||
add_rule(world.get_entrance('East Dark World River Pier', player), lambda state: state.has('Flippers', player))
|
add_rule(world.get_entrance('East Dark World River Pier', player), lambda state: state.has('Flippers', player))
|
||||||
|
|
||||||
|
|||||||
21
Utils.py
21
Utils.py
@@ -657,6 +657,27 @@ def extract_data_from_jp_rom(rom):
|
|||||||
print()
|
print()
|
||||||
|
|
||||||
|
|
||||||
|
class bidict(dict):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(bidict, self).__init__(*args, **kwargs)
|
||||||
|
self.inverse = {}
|
||||||
|
for key, value in self.items():
|
||||||
|
self.inverse.setdefault(value,[]).append(key)
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
if key in self:
|
||||||
|
self.inverse[self[key]].remove(key)
|
||||||
|
super(bidict, self).__setitem__(key, value)
|
||||||
|
self.inverse.setdefault(value,[]).append(key)
|
||||||
|
|
||||||
|
def __delitem__(self, key):
|
||||||
|
value = self[key]
|
||||||
|
self.inverse.setdefault(value,[]).remove(key)
|
||||||
|
if value in self.inverse and not self.inverse[value]:
|
||||||
|
del self.inverse[value]
|
||||||
|
super(bidict, self).__delitem__(key)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# make_new_base2current()
|
# make_new_base2current()
|
||||||
# read_entrance_data(old_rom=sys.argv[1])
|
# read_entrance_data(old_rom=sys.argv[1])
|
||||||
|
|||||||
@@ -120,6 +120,10 @@
|
|||||||
"action": "store_true",
|
"action": "store_true",
|
||||||
"type": "bool"
|
"type": "bool"
|
||||||
},
|
},
|
||||||
|
"ow_parallel": {
|
||||||
|
"action": "store_true",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
"shuffle": {
|
"shuffle": {
|
||||||
"choices": [
|
"choices": [
|
||||||
"vanilla",
|
"vanilla",
|
||||||
|
|||||||
@@ -203,7 +203,10 @@
|
|||||||
" overworld screens from the same world.",
|
" overworld screens from the same world.",
|
||||||
"Crossed: Overworld screen transitions can lead to any other overworld screen."
|
"Crossed: Overworld screen transitions can lead to any other overworld screen."
|
||||||
],
|
],
|
||||||
"ow_keepsimilar": [ "This keeps similar edge transitions together. ie. the two west edges on Potion Shop will be paired with another similar pair." ],
|
"ow_keepsimilar": [
|
||||||
|
"This keeps similar edge transitions together. ie. the two west edges on",
|
||||||
|
"Potion Shop will be paired with another similar pair." ],
|
||||||
|
"ow_parallel": [ "This ensures the layouts of both worlds are the same shape." ],
|
||||||
"door_shuffle": [
|
"door_shuffle": [
|
||||||
"Select Door Shuffling Algorithm. (default: %(default)s)",
|
"Select Door Shuffling Algorithm. (default: %(default)s)",
|
||||||
"Basic: Doors are mixed within a single dungeon.",
|
"Basic: Doors are mixed within a single dungeon.",
|
||||||
|
|||||||
@@ -116,6 +116,7 @@
|
|||||||
"randomizer.overworld.overworldshuffle.crossed": "Crossed",
|
"randomizer.overworld.overworldshuffle.crossed": "Crossed",
|
||||||
|
|
||||||
"randomizer.overworld.keepsimilar": "Keep Similar Edges Together",
|
"randomizer.overworld.keepsimilar": "Keep Similar Edges Together",
|
||||||
|
"randomizer.overworld.parallelworlds": "Parallel Worlds",
|
||||||
|
|
||||||
"randomizer.entrance.openpyramid": "Pre-open Pyramid Hole",
|
"randomizer.entrance.openpyramid": "Pre-open Pyramid Hole",
|
||||||
"randomizer.entrance.shuffleganon": "Include Ganon's Tower and Pyramid Hole in shuffle pool",
|
"randomizer.entrance.shuffleganon": "Include Ganon's Tower and Pyramid Hole in shuffle pool",
|
||||||
|
|||||||
@@ -11,6 +11,10 @@
|
|||||||
"keepsimilar": {
|
"keepsimilar": {
|
||||||
"type": "checkbox",
|
"type": "checkbox",
|
||||||
"default": true
|
"default": true
|
||||||
|
},
|
||||||
|
"parallelworlds": {
|
||||||
|
"type": "checkbox",
|
||||||
|
"default": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,8 @@ SETTINGSTOPROCESS = {
|
|||||||
},
|
},
|
||||||
"overworld": {
|
"overworld": {
|
||||||
"overworldshuffle": "ow_shuffle",
|
"overworldshuffle": "ow_shuffle",
|
||||||
"keepsimilar": "ow_keepsimilar"
|
"keepsimilar": "ow_keepsimilar",
|
||||||
|
"parallelworlds": "ow_parallel"
|
||||||
},
|
},
|
||||||
"entrance": {
|
"entrance": {
|
||||||
"openpyramid": "openpyramid",
|
"openpyramid": "openpyramid",
|
||||||
|
|||||||
Reference in New Issue
Block a user