diff --git a/BaseClasses.py b/BaseClasses.py index 37af2399..47f86509 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -1676,7 +1676,8 @@ class OWEdge(object): def dead_end(self): self.deadEnd = True - def coordInfo(self, vram_loc): + def coordInfo(self, midpoint, vram_loc): + self.midpoint = midpoint self.vramLoc = vram_loc return self diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d245488..c0017790 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +### 0.1.6.2 +- Added Balanced option for Flute Shuffle +- Fixed issue with Flute Spot to Mountain Entry softlocking +- Fixed logic bug with Inverted Kakariko Portal + ### 0.1.6.1 - Fixed issue with Flute Spot to VoO softlocking - Fixed Houlihan to exit where Link's House does diff --git a/OWEdges.py b/OWEdges.py index 82b4fd0c..67c2dd4d 100644 --- a/OWEdges.py +++ b/OWEdges.py @@ -38,288 +38,288 @@ NP = IsParallel.No def create_owedges(world, player): edges = [ # name, owID,dir,type,edge_id,(owSlot) vram - create_owedge(player, 'Lost Woods NW', 0x00, No, Ld, 0x00) .coordInfo(0x0284), - create_owedge(player, 'Lost Woods SW', 0x00, So, Ld, 0x01, 0x08).coordInfo(0x2000), - create_owedge(player, 'Lost Woods SC', 0x00, So, Ld, 0x02, 0x08).coordInfo(0x2020), - create_owedge(player, 'Lost Woods SE', 0x00, So, Ld, 0x03, 0x09).coordInfo(0x2060), - create_owedge(player, 'Lost Woods EN', 0x00, Ea, Ld, 0x00, 0x01).coordInfo(0x0180), - create_owedge(player, 'Lumberjack SW', 0x02, So, Ld, 0x00) .coordInfo(0x100a), - create_owedge(player, 'Lumberjack WN', 0x02, We, Ld, 0x00) .coordInfo(0x00e0), - create_owedge(player, 'West Death Mountain EN', 0x03, Ea, Ld, 0x01, 0x04).coordInfo(0x0180), - create_owedge(player, 'West Death Mountain ES', 0x03, Ea, Ld, 0x03, 0x0c).coordInfo(0x1780), - create_owedge(player, 'East Death Mountain WN', 0x05, We, Ld, 0x01, 0x05).coordInfo(0x0060), - 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, 'Death Mountain TR Pegs WN', 0x07, We, Ld, 0x02) .coordInfo(0x00e0), - create_owedge(player, 'Mountain Entry NW', 0x0a, No, Ld, 0x01) .coordInfo(0x180a), - create_owedge(player, 'Mountain Entry SE', 0x0a, So, Ld, 0x04) .coordInfo(0x1012), - create_owedge(player, 'Zora Waterfall NE', 0x0f, No, Ld, 0x02) .coordInfo(0x009a), - create_owedge(player, 'Zora Waterfall 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 NE', 0x10, No, Ld, 0x04) .coordInfo(0x181e), - create_owedge(player, 'Lost Woods Pass SW', 0x10, So, Ld, 0x06) .coordInfo(0x1002), - create_owedge(player, 'Lost Woods Pass SE', 0x10, So, Ld, 0x07) .coordInfo(0x101a), - create_owedge(player, 'Kakariko Fortune NE', 0x11, No, Ld, 0x05) .coordInfo(0x1820), - create_owedge(player, 'Kakariko Fortune SC', 0x11, So, Ld, 0x08) .coordInfo(0x1014), - create_owedge(player, 'Kakariko Fortune EN', 0x11, Ea, Ld, 0x04) .coordInfo(0x00c0), - create_owedge(player, 'Kakariko Fortune ES', 0x11, Ea, Ld, 0x05) .coordInfo(0x08c0), - create_owedge(player, 'Kakariko Pond NE', 0x12, No, Ld, 0x06) .coordInfo(0x1812), - create_owedge(player, 'Kakariko Pond SW', 0x12, So, Ld, 0x09) .coordInfo(0x1006), - create_owedge(player, 'Kakariko Pond SE', 0x12, So, Ld, 0x0a) .coordInfo(0x1016), - create_owedge(player, 'Kakariko Pond WN', 0x12, We, Ld, 0x04) .coordInfo(0x00e0), - create_owedge(player, 'Kakariko Pond WS', 0x12, We, Ld, 0x05) .coordInfo(0x08e0), - create_owedge(player, 'Kakariko Pond EN', 0x12, Ea, Ld, 0x06) .coordInfo(0x0340), - create_owedge(player, 'Kakariko Pond ES', 0x12, Ea, Ld, 0x07) .coordInfo(0x08c0), - create_owedge(player, 'Sanctuary WN', 0x13, We, Ld, 0x06) .coordInfo(0x0360), - create_owedge(player, 'Sanctuary WS', 0x13, We, Ld, 0x07) .coordInfo(0x08e0), - 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 EC', 0x14, Ea, Ld, 0x09) .coordInfo(0x04c0), - create_owedge(player, 'River Bend SW', 0x15, So, Ld, 0x0b) .coordInfo(0x1004), - create_owedge(player, 'River Bend SC', 0x15, So, Wr, 0x0c) .coordInfo(0x1018), - create_owedge(player, 'River Bend SE', 0x15, So, Ld, 0x0d) .coordInfo(0x1020), - create_owedge(player, 'River Bend WC', 0x15, We, Ld, 0x09) .coordInfo(0x04e0), - create_owedge(player, 'River Bend EN', 0x15, Ea, Wr, 0x0a) .coordInfo(0x01c0), - create_owedge(player, 'River Bend EC', 0x15, Ea, Ld, 0x0b) .coordInfo(0x04c0), - 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 WC', 0x16, We, Ld, 0x0b) .coordInfo(0x04e0), - create_owedge(player, 'Potion Shop WS', 0x16, We, Ld, 0x0c) .coordInfo(0x08e0), - create_owedge(player, 'Potion Shop EN', 0x16, Ea, Wr, 0x0d) .coordInfo(0x00c0), - create_owedge(player, 'Potion Shop EC', 0x16, Ea, Ld, 0x0e) .coordInfo(0x01c0), - create_owedge(player, 'Zora Approach NE', 0x17, No, Ld, 0x07) .coordInfo(0x1820), - create_owedge(player, 'Zora Approach WN', 0x17, We, Wr, 0x0d) .coordInfo(0x00e0), - create_owedge(player, 'Zora Approach WC', 0x17, We, Ld, 0x0e) .coordInfo(0x01e0), - create_owedge(player, 'Kakariko NW', 0x18, No, Ld, 0x08) .coordInfo(0x1802), - create_owedge(player, 'Kakariko NC', 0x18, No, Ld, 0x09) .coordInfo(0x181a), - create_owedge(player, 'Kakariko NE', 0x18, No, Ld, 0x0a, 0x19).coordInfo(0x1854), - create_owedge(player, 'Kakariko SE', 0x18, So, Ld, 0x0f, 0x21).coordInfo(0x2060), - create_owedge(player, 'Kakariko ES', 0x18, Ea, Ld, 0x10, 0x21).coordInfo(0x1680), - create_owedge(player, 'Forgotten Forest NW', 0x1a, No, Ld, 0x0b) .coordInfo(0x1806), - create_owedge(player, 'Forgotten Forest NE', 0x1a, No, Ld, 0x0c) .coordInfo(0x1816), - create_owedge(player, 'Forgotten Forest ES', 0x1a, Ea, Ld, 0x0f) .coordInfo(0x06c0), - create_owedge(player, 'Hyrule Castle SW', 0x1b, So, Ld, 0x10, 0x23).coordInfo(0x2002), - create_owedge(player, 'Hyrule Castle SE', 0x1b, So, Ld, 0x11, 0x24).coordInfo(0x2054), - create_owedge(player, 'Hyrule Castle WN', 0x1b, We, Ld, 0x0f) .coordInfo(0x0660), - create_owedge(player, 'Hyrule Castle ES', 0x1b, Ea, Ld, 0x11, 0x24).coordInfo(0x1280), - create_owedge(player, 'Wooden Bridge NW', 0x1d, No, Ld, 0x0d) .coordInfo(0x1804), - create_owedge(player, 'Wooden Bridge NC', 0x1d, No, Wr, 0x0e) .coordInfo(0x1818), - create_owedge(player, 'Wooden Bridge NE', 0x1d, No, Ld, 0x0f) .coordInfo(0x1820), - create_owedge(player, 'Wooden Bridge SW', 0x1d, So, Ld, 0x0e) .coordInfo(0x1006), - 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, 'Blacksmith WS', 0x22, We, Ld, 0x10) .coordInfo(0x05e0), - create_owedge(player, 'Sand Dunes NW', 0x25, No, Ld, 0x10) .coordInfo(0x1806), - create_owedge(player, 'Sand Dunes SC', 0x25, So, Ld, 0x12) .coordInfo(0x100e), - 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, '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 ES', 0x29, Ea, Ld, 0x13) .coordInfo(0x0940), - 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 WS', 0x2a, We, Ld, 0x13) .coordInfo(0x0960), - create_owedge(player, 'Central Bonk Rocks NW', 0x2b, No, Ld, 0x12) .coordInfo(0x1802), - create_owedge(player, 'Central Bonk Rocks SW', 0x2b, So, Ld, 0x17) .coordInfo(0x1004), - create_owedge(player, 'Central Bonk Rocks EN', 0x2b, Ea, Ld, 0x14) .coordInfo(0x0340), - create_owedge(player, 'Central Bonk Rocks EC', 0x2b, Ea, Ld, 0x15) .coordInfo(0x05c0), - 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 SC', 0x2c, So, Ld, 0x18) .coordInfo(0x100e), - create_owedge(player, 'Links House WN', 0x2c, We, Ld, 0x14) .coordInfo(0x0360), - create_owedge(player, 'Links House WC', 0x2c, We, Ld, 0x15) .coordInfo(0x05e0), - create_owedge(player, 'Links House WS', 0x2c, We, Ld, 0x16) .coordInfo(0x08a0), - create_owedge(player, 'Links House ES', 0x2c, Ea, Ld, 0x17) .coordInfo(0x08c0), - create_owedge(player, 'Stone Bridge NC', 0x2d, No, Ld, 0x14) .coordInfo(0x180e), - create_owedge(player, 'Stone Bridge SC', 0x2d, So, Ld, 0x19) .coordInfo(0x100c), - create_owedge(player, 'Stone Bridge WC', 0x2d, We, Wr, 0x17) .coordInfo(0x061c), - create_owedge(player, 'Stone Bridge WS', 0x2d, We, Ld, 0x18) .coordInfo(0x08e0), - create_owedge(player, 'Stone Bridge EN', 0x2d, Ea, Ld, 0x18) .coordInfo(0x01c0), - create_owedge(player, 'Stone Bridge EC', 0x2d, Ea, Wr, 0x19) .coordInfo(0x0640), - create_owedge(player, 'Tree Line NW', 0x2e, No, Ld, 0x15) .coordInfo(0x1802), - create_owedge(player, 'Tree Line SC', 0x2e, So, Wr, 0x1a) .coordInfo(0x101a), - create_owedge(player, 'Tree Line SE', 0x2e, So, Ld, 0x1b) .coordInfo(0x1020), - create_owedge(player, 'Tree Line WN', 0x2e, We, Ld, 0x19) .coordInfo(0x01e0), - create_owedge(player, 'Tree Line WC', 0x2e, We, Wr, 0x1a) .coordInfo(0x0660), - create_owedge(player, 'Eastern Nook NE', 0x2f, No, Ld, 0x16) .coordInfo(0x1820), - create_owedge(player, 'Desert EC', 0x30, Ea, Ld, 0x1e, 0x39).coordInfo(0x1480), - create_owedge(player, 'Desert ES', 0x30, Ea, Ld, 0x1f, 0x39).coordInfo(0x1980), - create_owedge(player, 'Flute Boy Approach NW', 0x32, No, Ld, 0x17) .coordInfo(0x1800), - create_owedge(player, 'Flute Boy Approach NC', 0x32, No, Ld, 0x18) .coordInfo(0x180c), - create_owedge(player, 'Flute Boy Approach EC', 0x32, Ea, Ld, 0x1a) .coordInfo(0x05c0), - create_owedge(player, 'C Whirlpool NW', 0x33, No, Ld, 0x19) .coordInfo(0x1804), - create_owedge(player, 'C Whirlpool SC', 0x33, So, Ld, 0x1c) .coordInfo(0x1016), - create_owedge(player, 'C Whirlpool WC', 0x33, We, Ld, 0x1b) .coordInfo(0x05e0), - create_owedge(player, 'C Whirlpool EN', 0x33, Ea, Ld, 0x1b) .coordInfo(0x02c0), - create_owedge(player, 'C Whirlpool EC', 0x33, Ea, Wr, 0x1c) .coordInfo(0x05c0), - create_owedge(player, 'C Whirlpool ES', 0x33, Ea, Ld, 0x1d) .coordInfo(0x08c0), - create_owedge(player, 'Statues NC', 0x34, No, Ld, 0x1a) .coordInfo(0x180e), - create_owedge(player, 'Statues SC', 0x34, So, Ld, 0x1d) .coordInfo(0x1010), - create_owedge(player, 'Statues WN', 0x34, We, Ld, 0x1c) .coordInfo(0x02e0), - create_owedge(player, 'Statues WC', 0x34, We, Wr, 0x1d) .coordInfo(0x05e0), - create_owedge(player, 'Statues WS', 0x34, We, Ld, 0x1e) .coordInfo(0x08e0), - create_owedge(player, 'Lake Hylia NW', 0x35, No, Ld, 0x1b) .coordInfo(0x180c), - create_owedge(player, 'Lake Hylia NC', 0x35, No, Wr, 0x1c, 0x36).coordInfo(0x185a), - create_owedge(player, 'Lake Hylia NE', 0x35, No, Ld, 0x1d, 0x36).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 ES', 0x35, Ea, Ld, 0x25, 0x3e).coordInfo(0x1880), - create_owedge(player, 'Ice Cave SW', 0x37, So, Wr, 0x1e) .coordInfo(0x1002), - create_owedge(player, 'Ice Cave SE', 0x37, So, Ld, 0x1f) .coordInfo(0x101c), - create_owedge(player, 'Desert Pass WC', 0x3a, We, Ld, 0x1f) .coordInfo(0x03e0), - create_owedge(player, 'Desert Pass WS', 0x3a, We, Ld, 0x20) .coordInfo(0x0860), - create_owedge(player, 'Desert Pass EC', 0x3a, Ea, Ld, 0x20) .coordInfo(0x0640), - 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 WC', 0x3b, We, Ld, 0x21) .coordInfo(0x0660), - create_owedge(player, 'Dam WS', 0x3b, We, Ld, 0x22) .coordInfo(0x08e0), - create_owedge(player, 'Dam EC', 0x3b, Ea, Ld, 0x22) .coordInfo(0x04c0), - create_owedge(player, 'South Pass NC', 0x3c, No, Ld, 0x1f) .coordInfo(0x1810), - create_owedge(player, 'South Pass WC', 0x3c, We, Ld, 0x23) .coordInfo(0x04e0), - create_owedge(player, 'South Pass ES', 0x3c, Ea, Ld, 0x23) .coordInfo(0x08c0), - create_owedge(player, 'Octoballoon NW', 0x3f, No, Wr, 0x20) .coordInfo(0x1802), - create_owedge(player, 'Octoballoon NE', 0x3f, No, Ld, 0x21) .coordInfo(0x181c), - create_owedge(player, 'Octoballoon WC', 0x3f, We, Wr, 0x25) .coordInfo(0x05e0), - create_owedge(player, 'Octoballoon WS', 0x3f, We, Ld, 0x26) .coordInfo(0x0860), - create_owedge(player, 'Skull Woods SW', 0x40, So, Ld, 0x21, 0x48).coordInfo(0x2000), - create_owedge(player, 'Skull Woods SC', 0x40, So, Ld, 0x22, 0x48).coordInfo(0x2020), - create_owedge(player, 'Skull Woods SE', 0x40, So, Ld, 0x23, 0x49).coordInfo(0x2060), - create_owedge(player, 'Skull Woods EN', 0x40, Ea, Ld, 0x26, 0x41).coordInfo(0x0180), - create_owedge(player, 'Dark Lumberjack SW', 0x42, So, Ld, 0x20) .coordInfo(0x100a), - create_owedge(player, 'Dark Lumberjack WN', 0x42, We, Ld, 0x27) .coordInfo(0x00e0), - create_owedge(player, 'West Dark Death Mountain EN', 0x43, Ea, Ld, 0x27, 0x44).coordInfo(0x0180), - create_owedge(player, 'West Dark Death Mountain ES', 0x43, Ea, Ld, 0x29, 0x4c).coordInfo(0x1780), - create_owedge(player, 'East Dark Death Mountain WN', 0x45, We, Ld, 0x28) .coordInfo(0x0060), - create_owedge(player, 'East Dark Death Mountain WS', 0x45, We, Ld, 0x2a, 0x4d).coordInfo(0x1660), - create_owedge(player, 'East Dark Death Mountain EN', 0x45, Ea, Ld, 0x28, 0x46).coordInfo(0x0180), - create_owedge(player, 'Turtle Rock WN', 0x47, We, Ld, 0x29) .coordInfo(0x00e0), - create_owedge(player, 'Bumper Cave NW', 0x4a, No, Ld, 0x22) .coordInfo(0x180a), - create_owedge(player, 'Bumper Cave SE', 0x4a, So, Ld, 0x24) .coordInfo(0x1012), - create_owedge(player, 'Catfish SE', 0x4f, So, Ld, 0x25) .coordInfo(0x1020), - create_owedge(player, 'Skull Woods Pass NW', 0x50, No, Ld, 0x23) .coordInfo(0x181e), - create_owedge(player, 'Skull Woods Pass NE', 0x50, No, Ld, 0x24) .coordInfo(0x1800), - create_owedge(player, 'Skull Woods Pass SW', 0x50, So, Ld, 0x26) .coordInfo(0x1002), - create_owedge(player, 'Skull Woods Pass SE', 0x50, So, Ld, 0x27) .coordInfo(0x101a), - create_owedge(player, 'Dark Fortune NE', 0x51, No, Ld, 0x25) .coordInfo(0x1820), - create_owedge(player, 'Dark Fortune SC', 0x51, So, Ld, 0x28) .coordInfo(0x1014), - create_owedge(player, 'Dark Fortune EN', 0x51, Ea, Ld, 0x2a) .coordInfo(0x00c0), - create_owedge(player, 'Dark Fortune ES', 0x51, Ea, Ld, 0x2b) .coordInfo(0x08c0), - create_owedge(player, 'Outcast Pond NE', 0x52, No, Ld, 0x26) .coordInfo(0x1812), - create_owedge(player, 'Outcast Pond SW', 0x52, So, Ld, 0x29) .coordInfo(0x1006), - create_owedge(player, 'Outcast Pond SE', 0x52, So, Ld, 0x2a) .coordInfo(0x1016), - create_owedge(player, 'Outcast Pond WN', 0x52, We, Ld, 0x2b) .coordInfo(0x00e0), - create_owedge(player, 'Outcast Pond WS', 0x52, We, Ld, 0x2c) .coordInfo(0x08e0), - create_owedge(player, 'Outcast Pond EN', 0x52, Ea, Ld, 0x2c) .coordInfo(0x0340), - create_owedge(player, 'Outcast Pond ES', 0x52, Ea, Ld, 0x2d) .coordInfo(0x08c0), - create_owedge(player, 'Dark Chapel WN', 0x53, We, Ld, 0x2d) .coordInfo(0x0360), - create_owedge(player, 'Dark Chapel WS', 0x53, We, Ld, 0x2e) .coordInfo(0x08e0), - create_owedge(player, 'Dark Chapel EC', 0x53, Ea, Ld, 0x2e) .coordInfo(0x04c0), - create_owedge(player, 'Dark Graveyard WC', 0x54, We, Ld, 0x2f) .coordInfo(0x04e0), - create_owedge(player, 'Dark Graveyard EC', 0x54, Ea, Ld, 0x2f) .coordInfo(0x04c0), - create_owedge(player, 'Qirn Jump SW', 0x55, So, Ld, 0x2b) .coordInfo(0x1004), - create_owedge(player, 'Qirn Jump SC', 0x55, So, Wr, 0x2c) .coordInfo(0x1018), - create_owedge(player, 'Qirn Jump SE', 0x55, So, Ld, 0x2d) .coordInfo(0x1020), - create_owedge(player, 'Qirn Jump WC', 0x55, We, Ld, 0x30) .coordInfo(0x04e0), - create_owedge(player, 'Qirn Jump EN', 0x55, Ea, Wr, 0x30) .coordInfo(0x01c0), - create_owedge(player, 'Qirn Jump EC', 0x55, Ea, Ld, 0x31) .coordInfo(0x04c0), - create_owedge(player, 'Qirn Jump ES', 0x55, Ea, Ld, 0x32) .coordInfo(0x08c0), - create_owedge(player, 'Dark Witch WN', 0x56, We, Wr, 0x31) .coordInfo(0x01e0), - create_owedge(player, 'Dark Witch WC', 0x56, We, Ld, 0x32) .coordInfo(0x04e0), - create_owedge(player, 'Dark Witch WS', 0x56, We, Ld, 0x33) .coordInfo(0x08e0), - create_owedge(player, 'Dark Witch EN', 0x56, Ea, Wr, 0x33) .coordInfo(0x00c0), - create_owedge(player, 'Dark Witch EC', 0x56, Ea, Ld, 0x34) .coordInfo(0x01c0), - create_owedge(player, 'Catfish Approach NE', 0x57, No, Ld, 0x27) .coordInfo(0x1820), - create_owedge(player, 'Catfish Approach WN', 0x57, We, Wr, 0x34) .coordInfo(0x00e0), - create_owedge(player, 'Catfish Approach WC', 0x57, We, Ld, 0x35) .coordInfo(0x01e0), - create_owedge(player, 'Village of Outcasts NW', 0x58, No, Ld, 0x28) .coordInfo(0x1802), - create_owedge(player, 'Village of Outcasts NC', 0x58, No, Ld, 0x29) .coordInfo(0x181a), - create_owedge(player, 'Village of Outcasts NE', 0x58, No, Ld, 0x2a, 0x59).coordInfo(0x1854), - create_owedge(player, 'Village of Outcasts SE', 0x58, So, Ld, 0x2f, 0x61).coordInfo(0x2060), - create_owedge(player, 'Village of Outcasts ES', 0x58, Ea, Ld, 0x35, 0x61).coordInfo(0x1680), - create_owedge(player, 'Shield Shop NW', 0x5a, No, Ld, 0x2b) .coordInfo(0x1806), - create_owedge(player, 'Shield Shop NE', 0x5a, No, Ld, 0x2c) .coordInfo(0x1816), - create_owedge(player, 'Pyramid SW', 0x5b, So, Ld, 0x30, 0x63).coordInfo(0x2002), - create_owedge(player, 'Pyramid SE', 0x5b, So, Ld, 0x31, 0x64).coordInfo(0x2054), - create_owedge(player, 'Pyramid ES', 0x5b, Ea, Ld, 0x36, 0x64).coordInfo(0x1280), - create_owedge(player, 'Broken Bridge NW', 0x5d, No, Ld, 0x2d) .coordInfo(0x1804), - create_owedge(player, 'Broken Bridge NC', 0x5d, No, Wr, 0x2e) .coordInfo(0x1818), - create_owedge(player, 'Broken Bridge NE', 0x5d, No, Ld, 0x2f) .coordInfo(0x1820), - create_owedge(player, 'Broken Bridge SW', 0x5d, So, Ld, 0x2e) .coordInfo(0x1006), - 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, 'Hammer Pegs WS', 0x62, We, Ld, 0x36) .coordInfo(0x05e0), - create_owedge(player, 'Dark Dunes NW', 0x65, No, Ld, 0x30) .coordInfo(0x1806), - create_owedge(player, 'Dark Dunes SC', 0x65, So, Ld, 0x32) .coordInfo(0x100e), - 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 ES', 0x68, Ea, Ld, 0x38) .coordInfo(0x0940), - create_owedge(player, 'Frog NE', 0x69, No, Ld, 0x31) .coordInfo(0x1820), - create_owedge(player, 'Frog WC', 0x69, We, Ld, 0x38) .coordInfo(0x08e0), - create_owedge(player, 'Frog WS', 0x69, We, Ld, 0x39) .coordInfo(0x0960), - create_owedge(player, 'Frog ES', 0x69, Ea, Ld, 0x39) .coordInfo(0x0940), - 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 WS', 0x6a, We, Ld, 0x3a) .coordInfo(0x0960), - create_owedge(player, 'Dark Bonk Rocks NW', 0x6b, No, Ld, 0x32) .coordInfo(0x1802), - create_owedge(player, 'Dark Bonk Rocks SW', 0x6b, So, Ld, 0x37) .coordInfo(0x1004), - create_owedge(player, 'Dark Bonk Rocks EN', 0x6b, Ea, Ld, 0x3a) .coordInfo(0x0340), - create_owedge(player, 'Dark Bonk Rocks EC', 0x6b, Ea, Ld, 0x3b) .coordInfo(0x05c0), - 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 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 WC', 0x6c, We, Ld, 0x3c) .coordInfo(0x05e0), - create_owedge(player, 'Big Bomb Shop WS', 0x6c, We, Ld, 0x3d) .coordInfo(0x08a0), - create_owedge(player, 'Big Bomb Shop ES', 0x6c, Ea, Ld, 0x3d) .coordInfo(0x08c0), - create_owedge(player, 'Hammer Bridge NC', 0x6d, No, Ld, 0x34) .coordInfo(0x180e), - create_owedge(player, 'Hammer Bridge SC', 0x6d, So, Ld, 0x39) .coordInfo(0x100c), - create_owedge(player, 'Hammer Bridge WS', 0x6d, We, Ld, 0x3e) .coordInfo(0x08e0), - create_owedge(player, 'Hammer Bridge EN', 0x6d, Ea, Ld, 0x3e) .coordInfo(0x01c0), - create_owedge(player, 'Hammer Bridge EC', 0x6d, Ea, Wr, 0x3f) .coordInfo(0x0640), - create_owedge(player, 'Dark Tree Line NW', 0x6e, No, Ld, 0x35) .coordInfo(0x1802), - create_owedge(player, 'Dark Tree Line SC', 0x6e, So, Wr, 0x3a) .coordInfo(0x101a), - create_owedge(player, 'Dark Tree Line SE', 0x6e, So, Ld, 0x3b) .coordInfo(0x1020), - create_owedge(player, 'Dark Tree Line WN', 0x6e, We, Ld, 0x3f) .coordInfo(0x01e0), - create_owedge(player, 'Dark Tree Line WC', 0x6e, We, Wr, 0x40) .coordInfo(0x0660), - create_owedge(player, 'Palace of Darkness Nook NE', 0x6f, No, Ld, 0x36) .coordInfo(0x1820), - create_owedge(player, 'Stumpy Approach NW', 0x72, No, Ld, 0x37) .coordInfo(0x1800), - create_owedge(player, 'Stumpy Approach NC', 0x72, No, Ld, 0x38) .coordInfo(0x180c), - create_owedge(player, 'Stumpy Approach EC', 0x72, Ea, Ld, 0x40) .coordInfo(0x05c0), - create_owedge(player, 'Dark C Whirlpool NW', 0x73, No, Ld, 0x39) .coordInfo(0x1804), - create_owedge(player, 'Dark C Whirlpool SC', 0x73, So, Ld, 0x3c) .coordInfo(0x1016), - create_owedge(player, 'Dark C Whirlpool WC', 0x73, We, Ld, 0x41) .coordInfo(0x05e0), - create_owedge(player, 'Dark C Whirlpool EN', 0x73, Ea, Ld, 0x41) .coordInfo(0x02c0), - create_owedge(player, 'Dark C Whirlpool EC', 0x73, Ea, Wr, 0x42) .coordInfo(0x05c0), - create_owedge(player, 'Dark C Whirlpool ES', 0x73, Ea, Ld, 0x43) .coordInfo(0x08c0), - create_owedge(player, 'Hype Cave NC', 0x74, No, Ld, 0x3a) .coordInfo(0x180e), - create_owedge(player, 'Hype Cave SC', 0x74, So, Ld, 0x3d) .coordInfo(0x1010), - 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 WS', 0x74, We, Ld, 0x44) .coordInfo(0x08e0), - create_owedge(player, 'Ice Lake NW', 0x75, No, Ld, 0x3b) .coordInfo(0x180c), - create_owedge(player, 'Ice Lake NC', 0x75, No, Wr, 0x3c, 0x76).coordInfo(0x185a), - create_owedge(player, 'Ice Lake NE', 0x75, No, Ld, 0x3d, 0x76).coordInfo(0x1860), - create_owedge(player, 'Ice Lake WS', 0x75, We, Ld, 0x48, 0x7d).coordInfo(0x1860), - create_owedge(player, 'Ice Lake EC', 0x75, Ea, Wr, 0x48, 0x7e).coordInfo(0x1680), - create_owedge(player, 'Ice Lake ES', 0x75, Ea, Ld, 0x49, 0x7e).coordInfo(0x1880), - create_owedge(player, 'Shopping Mall SW', 0x77, So, Wr, 0x3e) .coordInfo(0x1002), - create_owedge(player, 'Shopping Mall SE', 0x77, So, Ld, 0x3f) .coordInfo(0x101c), - create_owedge(player, 'Swamp Nook EC', 0x7a, Ea, Ld, 0x44) .coordInfo(0x0640), - create_owedge(player, 'Swamp Nook ES', 0x7a, Ea, Ld, 0x45) .coordInfo(0x08c0), - create_owedge(player, 'Swamp NC', 0x7b, No, Ld, 0x3e) .coordInfo(0x1816), - create_owedge(player, 'Swamp WC', 0x7b, We, Ld, 0x45) .coordInfo(0x0660), - create_owedge(player, 'Swamp WS', 0x7b, We, Ld, 0x46) .coordInfo(0x08e0), - 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 WC', 0x7c, We, Ld, 0x47) .coordInfo(0x04e0), - create_owedge(player, 'Dark South Pass ES', 0x7c, Ea, Ld, 0x47) .coordInfo(0x08c0), - create_owedge(player, 'Bomber Corner NW', 0x7f, No, Wr, 0x40) .coordInfo(0x1802), - create_owedge(player, 'Bomber Corner NE', 0x7f, No, Ld, 0x41) .coordInfo(0x181c), - create_owedge(player, 'Bomber Corner WC', 0x7f, We, Wr, 0x49) .coordInfo(0x05e0), - 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, 'Hobo EC', 0x80, Ea, Wr, 0x4a) .coordInfo(0x0020), - create_owedge(player, 'Zoras Domain SW', 0x81, So, Ld, 0x41, 0x89).coordInfo(0x1782) + create_owedge(player, 'Lost Woods NW', 0x00, No, Ld, 0x00) .coordInfo(0x00a0, 0x0284), + create_owedge(player, 'Lost Woods SW', 0x00, So, Ld, 0x01, 0x08).coordInfo(0x0058, 0x2000), + create_owedge(player, 'Lost Woods SC', 0x00, So, Ld, 0x02, 0x08).coordInfo(0x0178, 0x2020), + create_owedge(player, 'Lost Woods SE', 0x00, So, Ld, 0x03, 0x09).coordInfo(0x0388, 0x2060), + create_owedge(player, 'Lost Woods EN', 0x00, Ea, Ld, 0x00, 0x01).coordInfo(0x0088, 0x0180), + create_owedge(player, 'Lumberjack SW', 0x02, So, Ld, 0x00) .coordInfo(0x04cc, 0x100a), + create_owedge(player, 'Lumberjack WN', 0x02, We, Ld, 0x00) .coordInfo(0x0088, 0x00e0), + create_owedge(player, 'West Death Mountain EN', 0x03, Ea, Ld, 0x01, 0x04).coordInfo(0x0070, 0x0180), + create_owedge(player, 'West Death Mountain ES', 0x03, Ea, Ld, 0x03, 0x0c).coordInfo(0x0340, 0x1780), + create_owedge(player, 'East Death Mountain WN', 0x05, We, Ld, 0x01, 0x05).coordInfo(0x0070, 0x0060), + create_owedge(player, 'East Death Mountain WS', 0x05, We, Ld, 0x03, 0x0d).coordInfo(0x0340, 0x1660), + create_owedge(player, 'East Death Mountain EN', 0x05, Ea, Ld, 0x02, 0x06).coordInfo(0x0078, 0x0180), + create_owedge(player, 'Death Mountain TR Pegs WN', 0x07, We, Ld, 0x02) .coordInfo(0x0078, 0x00e0), + create_owedge(player, 'Mountain Entry NW', 0x0a, No, Ld, 0x01) .coordInfo(0x04cc, 0x180a), + create_owedge(player, 'Mountain Entry SE', 0x0a, So, Ld, 0x04) .coordInfo(0x0518, 0x1012), + create_owedge(player, 'Zora Waterfall NE', 0x0f, No, Ld, 0x02) .coordInfo(0x0f80, 0x009a), + create_owedge(player, 'Zora Waterfall SE', 0x0f, So, Ld, 0x05) .coordInfo(0x0f80, 0x1020), + create_owedge(player, 'Lost Woods Pass NW', 0x10, No, Ld, 0x03) .coordInfo(0x0058, 0x1800), + create_owedge(player, 'Lost Woods Pass NE', 0x10, No, Ld, 0x04) .coordInfo(0x0178, 0x181e), + create_owedge(player, 'Lost Woods Pass SW', 0x10, So, Ld, 0x06) .coordInfo(0x0088, 0x1002), + create_owedge(player, 'Lost Woods Pass SE', 0x10, So, Ld, 0x07) .coordInfo(0x0148, 0x101a), + create_owedge(player, 'Kakariko Fortune NE', 0x11, No, Ld, 0x05) .coordInfo(0x0388, 0x1820), + create_owedge(player, 'Kakariko Fortune SC', 0x11, So, Ld, 0x08) .coordInfo(0x0318, 0x1014), + create_owedge(player, 'Kakariko Fortune EN', 0x11, Ea, Ld, 0x04) .coordInfo(0x046c, 0x00c0), + create_owedge(player, 'Kakariko Fortune ES', 0x11, Ea, Ld, 0x05) .coordInfo(0x0580, 0x08c0), + create_owedge(player, 'Kakariko Pond NE', 0x12, No, Ld, 0x06) .coordInfo(0x0518, 0x1812), + create_owedge(player, 'Kakariko Pond SW', 0x12, So, Ld, 0x09) .coordInfo(0x04a4, 0x1006), + create_owedge(player, 'Kakariko Pond SE', 0x12, So, Ld, 0x0a) .coordInfo(0x0524, 0x1016), + create_owedge(player, 'Kakariko Pond WN', 0x12, We, Ld, 0x04) .coordInfo(0x046c, 0x00e0), + create_owedge(player, 'Kakariko Pond WS', 0x12, We, Ld, 0x05) .coordInfo(0x0580, 0x08e0), + create_owedge(player, 'Kakariko Pond EN', 0x12, Ea, Ld, 0x06) .coordInfo(0x04c4, 0x0340), + create_owedge(player, 'Kakariko Pond ES', 0x12, Ea, Ld, 0x07) .coordInfo(0x0570, 0x08c0), + create_owedge(player, 'Sanctuary WN', 0x13, We, Ld, 0x06) .coordInfo(0x04c4, 0x0360), + create_owedge(player, 'Sanctuary WS', 0x13, We, Ld, 0x07) .coordInfo(0x0570, 0x08e0), + create_owedge(player, 'Sanctuary EC', 0x13, Ea, Ld, 0x08) .coordInfo(0x050c, 0x04c0), + create_owedge(player, 'Graveyard WC', 0x14, We, Ld, 0x08) .coordInfo(0x050c, 0x04e0), + create_owedge(player, 'Graveyard EC', 0x14, Ea, Ld, 0x09) .coordInfo(0x0504, 0x04c0), + create_owedge(player, 'River Bend SW', 0x15, So, Ld, 0x0b) .coordInfo(0x0a9c, 0x1004), + create_owedge(player, 'River Bend SC', 0x15, So, Wr, 0x0c) .coordInfo(0x0b30, 0x1018), + create_owedge(player, 'River Bend SE', 0x15, So, Ld, 0x0d) .coordInfo(0x0b88, 0x1020), + create_owedge(player, 'River Bend WC', 0x15, We, Ld, 0x09) .coordInfo(0x0504, 0x04e0), + create_owedge(player, 'River Bend EN', 0x15, Ea, Wr, 0x0a) .coordInfo(0x0484, 0x01c0), + create_owedge(player, 'River Bend EC', 0x15, Ea, Ld, 0x0b) .coordInfo(0x04e0, 0x04c0), + create_owedge(player, 'River Bend ES', 0x15, Ea, Ld, 0x0c) .coordInfo(0x0574, 0x08c0), + create_owedge(player, 'Potion Shop WN', 0x16, We, Wr, 0x0a) .coordInfo(0x0484, 0x01e0), + create_owedge(player, 'Potion Shop WC', 0x16, We, Ld, 0x0b) .coordInfo(0x04e0, 0x04e0), + create_owedge(player, 'Potion Shop WS', 0x16, We, Ld, 0x0c) .coordInfo(0x0574, 0x08e0), + create_owedge(player, 'Potion Shop EN', 0x16, Ea, Wr, 0x0d) .coordInfo(0x0454, 0x00c0), + create_owedge(player, 'Potion Shop EC', 0x16, Ea, Ld, 0x0e) .coordInfo(0x0494, 0x01c0), + create_owedge(player, 'Zora Approach NE', 0x17, No, Ld, 0x07) .coordInfo(0x0f80, 0x1820), + create_owedge(player, 'Zora Approach WN', 0x17, We, Wr, 0x0d) .coordInfo(0x0454, 0x00e0), + create_owedge(player, 'Zora Approach WC', 0x17, We, Ld, 0x0e) .coordInfo(0x0494, 0x01e0), + create_owedge(player, 'Kakariko NW', 0x18, No, Ld, 0x08) .coordInfo(0x0088, 0x1802), + create_owedge(player, 'Kakariko NC', 0x18, No, Ld, 0x09) .coordInfo(0x0148, 0x181a), + create_owedge(player, 'Kakariko NE', 0x18, No, Ld, 0x0a, 0x19).coordInfo(0x0318, 0x1854), + create_owedge(player, 'Kakariko SE', 0x18, So, Ld, 0x0f, 0x21).coordInfo(0x0370, 0x2060), + create_owedge(player, 'Kakariko ES', 0x18, Ea, Ld, 0x10, 0x21).coordInfo(0x0928, 0x1680), + create_owedge(player, 'Forgotten Forest NW', 0x1a, No, Ld, 0x0b) .coordInfo(0x04a4, 0x1806), + create_owedge(player, 'Forgotten Forest NE', 0x1a, No, Ld, 0x0c) .coordInfo(0x0524, 0x1816), + create_owedge(player, 'Forgotten Forest ES', 0x1a, Ea, Ld, 0x0f) .coordInfo(0x0728, 0x06c0), + create_owedge(player, 'Hyrule Castle SW', 0x1b, So, Ld, 0x10, 0x23).coordInfo(0x068c, 0x2002), + create_owedge(player, 'Hyrule Castle SE', 0x1b, So, Ld, 0x11, 0x24).coordInfo(0x0924, 0x2054), + create_owedge(player, 'Hyrule Castle WN', 0x1b, We, Ld, 0x0f) .coordInfo(0x0728, 0x0660), + create_owedge(player, 'Hyrule Castle ES', 0x1b, Ea, Ld, 0x11, 0x24).coordInfo(0x0890, 0x1280), + create_owedge(player, 'Wooden Bridge NW', 0x1d, No, Ld, 0x0d) .coordInfo(0x0a9c, 0x1804), + create_owedge(player, 'Wooden Bridge NC', 0x1d, No, Wr, 0x0e) .coordInfo(0x0b30, 0x1818), + create_owedge(player, 'Wooden Bridge NE', 0x1d, No, Ld, 0x0f) .coordInfo(0x0b88, 0x1820), + create_owedge(player, 'Wooden Bridge SW', 0x1d, So, Ld, 0x0e) .coordInfo(0x0aa8, 0x1006), + create_owedge(player, 'Eastern Palace SW', 0x1e, So, Ld, 0x13, 0x26).coordInfo(0x0c80, 0x2002), + create_owedge(player, 'Eastern Palace SE', 0x1e, So, Ld, 0x14, 0x27).coordInfo(0x0f78, 0x2060), + create_owedge(player, 'Blacksmith WS', 0x22, We, Ld, 0x10) .coordInfo(0x0928, 0x05e0), + create_owedge(player, 'Sand Dunes NW', 0x25, No, Ld, 0x10) .coordInfo(0x0aa8, 0x1806), + create_owedge(player, 'Sand Dunes SC', 0x25, So, Ld, 0x12) .coordInfo(0x0af0, 0x100e), + create_owedge(player, 'Sand Dunes WN', 0x25, We, Ld, 0x11) .coordInfo(0x0890, 0x01e0), + create_owedge(player, 'Maze Race ES', 0x28, Ea, Ld, 0x12) .coordInfo(0x0bc0, 0x0940), + create_owedge(player, 'Kakariko Suburb NE', 0x29, No, Ld, 0x11) .coordInfo(0x0370, 0x1820), + create_owedge(player, 'Kakariko Suburb WS', 0x29, We, Ld, 0x12) .coordInfo(0x0bc0, 0x0960), + create_owedge(player, 'Kakariko Suburb ES', 0x29, Ea, Ld, 0x13) .coordInfo(0x0b80, 0x0940), + create_owedge(player, 'Flute Boy SW', 0x2a, So, Ld, 0x15) .coordInfo(0x044c, 0x1000), + create_owedge(player, 'Flute Boy SC', 0x2a, So, Ld, 0x16) .coordInfo(0x04e8, 0x100c), + create_owedge(player, 'Flute Boy WS', 0x2a, We, Ld, 0x13) .coordInfo(0x0b80, 0x0960), + create_owedge(player, 'Central Bonk Rocks NW', 0x2b, No, Ld, 0x12) .coordInfo(0x068c, 0x1802), + create_owedge(player, 'Central Bonk Rocks SW', 0x2b, So, Ld, 0x17) .coordInfo(0x069c, 0x1004), + create_owedge(player, 'Central Bonk Rocks EN', 0x2b, Ea, Ld, 0x14) .coordInfo(0x0ac0, 0x0340), + create_owedge(player, 'Central Bonk Rocks EC', 0x2b, Ea, Ld, 0x15) .coordInfo(0x0b18, 0x05c0), + create_owedge(player, 'Central Bonk Rocks ES', 0x2b, Ea, Ld, 0x16) .coordInfo(0x0b8c, 0x08c0), + create_owedge(player, 'Links House NE', 0x2c, No, Ld, 0x13) .coordInfo(0x0924, 0x1814), + create_owedge(player, 'Links House SC', 0x2c, So, Ld, 0x18) .coordInfo(0x08e0, 0x100e), + create_owedge(player, 'Links House WN', 0x2c, We, Ld, 0x14) .coordInfo(0x0ac0, 0x0360), + create_owedge(player, 'Links House WC', 0x2c, We, Ld, 0x15) .coordInfo(0x0b18, 0x05e0), + create_owedge(player, 'Links House WS', 0x2c, We, Ld, 0x16) .coordInfo(0x0b8c, 0x08a0), + create_owedge(player, 'Links House ES', 0x2c, Ea, Ld, 0x17) .coordInfo(0x0b80, 0x08c0), + create_owedge(player, 'Stone Bridge NC', 0x2d, No, Ld, 0x14) .coordInfo(0x0af0, 0x180e), + create_owedge(player, 'Stone Bridge SC', 0x2d, So, Ld, 0x19) .coordInfo(0x0ae0, 0x100c), + create_owedge(player, 'Stone Bridge WC', 0x2d, We, Wr, 0x17) .coordInfo(0x0b1c, 0x061c), + create_owedge(player, 'Stone Bridge WS', 0x2d, We, Ld, 0x18) .coordInfo(0x0b80, 0x08e0), + create_owedge(player, 'Stone Bridge EN', 0x2d, Ea, Ld, 0x18) .coordInfo(0x0a90, 0x01c0), + create_owedge(player, 'Stone Bridge EC', 0x2d, Ea, Wr, 0x19) .coordInfo(0x0b3c, 0x0640), + create_owedge(player, 'Tree Line NW', 0x2e, No, Ld, 0x15) .coordInfo(0x0c80, 0x1802), + create_owedge(player, 'Tree Line SC', 0x2e, So, Wr, 0x1a) .coordInfo(0x0d48, 0x101a), + create_owedge(player, 'Tree Line SE', 0x2e, So, Ld, 0x1b) .coordInfo(0x0d98, 0x1020), + create_owedge(player, 'Tree Line WN', 0x2e, We, Ld, 0x19) .coordInfo(0x0a90, 0x01e0), + create_owedge(player, 'Tree Line WC', 0x2e, We, Wr, 0x1a) .coordInfo(0x0b3c, 0x0660), + create_owedge(player, 'Eastern Nook NE', 0x2f, No, Ld, 0x16) .coordInfo(0x0f78, 0x1820), + create_owedge(player, 'Desert EC', 0x30, Ea, Ld, 0x1e, 0x39).coordInfo(0x0ee4, 0x1480), + create_owedge(player, 'Desert ES', 0x30, Ea, Ld, 0x1f, 0x39).coordInfo(0x0f8c, 0x1980), + create_owedge(player, 'Flute Boy Approach NW', 0x32, No, Ld, 0x17) .coordInfo(0x044c, 0x1800), + create_owedge(player, 'Flute Boy Approach NC', 0x32, No, Ld, 0x18) .coordInfo(0x04e8, 0x180c), + create_owedge(player, 'Flute Boy Approach EC', 0x32, Ea, Ld, 0x1a) .coordInfo(0x0d04, 0x05c0), + create_owedge(player, 'C Whirlpool NW', 0x33, No, Ld, 0x19) .coordInfo(0x069c, 0x1804), + create_owedge(player, 'C Whirlpool SC', 0x33, So, Ld, 0x1c) .coordInfo(0x0728, 0x1016), + create_owedge(player, 'C Whirlpool WC', 0x33, We, Ld, 0x1b) .coordInfo(0x0d04, 0x05e0), + create_owedge(player, 'C Whirlpool EN', 0x33, Ea, Ld, 0x1b) .coordInfo(0x0cad, 0x02c0), + create_owedge(player, 'C Whirlpool EC', 0x33, Ea, Wr, 0x1c) .coordInfo(0x0d0b, 0x05c0), + create_owedge(player, 'C Whirlpool ES', 0x33, Ea, Ld, 0x1d) .coordInfo(0x0d76, 0x08c0), + create_owedge(player, 'Statues NC', 0x34, No, Ld, 0x1a) .coordInfo(0x08e0, 0x180e), + create_owedge(player, 'Statues SC', 0x34, So, Ld, 0x1d) .coordInfo(0x08f0, 0x1010), + create_owedge(player, 'Statues WN', 0x34, We, Ld, 0x1c) .coordInfo(0x0cad, 0x02e0), + create_owedge(player, 'Statues WC', 0x34, We, Wr, 0x1d) .coordInfo(0x0d0b, 0x05e0), + create_owedge(player, 'Statues WS', 0x34, We, Ld, 0x1e) .coordInfo(0x0d76, 0x08e0), + create_owedge(player, 'Lake Hylia NW', 0x35, No, Ld, 0x1b) .coordInfo(0x0ae0, 0x180c), + create_owedge(player, 'Lake Hylia NC', 0x35, No, Wr, 0x1c, 0x36).coordInfo(0x0d48, 0x185a), + create_owedge(player, 'Lake Hylia NE', 0x35, No, Ld, 0x1d, 0x36).coordInfo(0x0d98, 0x1860), + create_owedge(player, 'Lake Hylia WS', 0x35, We, Ld, 0x24, 0x3d).coordInfo(0x0f98, 0x1860), + create_owedge(player, 'Lake Hylia EC', 0x35, Ea, Wr, 0x24, 0x3e).coordInfo(0x0f30, 0x1680), + create_owedge(player, 'Lake Hylia ES', 0x35, Ea, Ld, 0x25, 0x3e).coordInfo(0x0f94, 0x1880), + create_owedge(player, 'Ice Cave SW', 0x37, So, Wr, 0x1e) .coordInfo(0x0e80, 0x1002), + create_owedge(player, 'Ice Cave SE', 0x37, So, Ld, 0x1f) .coordInfo(0x0f50, 0x101c), + create_owedge(player, 'Desert Pass WC', 0x3a, We, Ld, 0x1f) .coordInfo(0x0ee4, 0x03e0), + create_owedge(player, 'Desert Pass WS', 0x3a, We, Ld, 0x20) .coordInfo(0x0f8c, 0x0860), + create_owedge(player, 'Desert Pass EC', 0x3a, Ea, Ld, 0x20) .coordInfo(0x0f18, 0x0640), + create_owedge(player, 'Desert Pass ES', 0x3a, Ea, Ld, 0x21) .coordInfo(0x0fcb, 0x08c0), + create_owedge(player, 'Dam NC', 0x3b, No, Ld, 0x1e) .coordInfo(0x0728, 0x1816), + create_owedge(player, 'Dam WC', 0x3b, We, Ld, 0x21) .coordInfo(0x0f18, 0x0660), + create_owedge(player, 'Dam WS', 0x3b, We, Ld, 0x22) .coordInfo(0x0fc8, 0x08e0), + create_owedge(player, 'Dam EC', 0x3b, Ea, Ld, 0x22) .coordInfo(0x0ef0, 0x04c0), + create_owedge(player, 'South Pass NC', 0x3c, No, Ld, 0x1f) .coordInfo(0x08f0, 0x1810), + create_owedge(player, 'South Pass WC', 0x3c, We, Ld, 0x23) .coordInfo(0x0ef0, 0x04e0), + create_owedge(player, 'South Pass ES', 0x3c, Ea, Ld, 0x23) .coordInfo(0x0f98, 0x08c0), + create_owedge(player, 'Octoballoon NW', 0x3f, No, Wr, 0x20) .coordInfo(0x0e80, 0x1802), + create_owedge(player, 'Octoballoon NE', 0x3f, No, Ld, 0x21) .coordInfo(0x0f50, 0x181c), + create_owedge(player, 'Octoballoon WC', 0x3f, We, Wr, 0x25) .coordInfo(0x0f30, 0x05e0), + create_owedge(player, 'Octoballoon WS', 0x3f, We, Ld, 0x26) .coordInfo(0x0f94, 0x0860), + create_owedge(player, 'Skull Woods SW', 0x40, So, Ld, 0x21, 0x48).coordInfo(0x0058, 0x2000), + create_owedge(player, 'Skull Woods SC', 0x40, So, Ld, 0x22, 0x48).coordInfo(0x0178, 0x2020), + create_owedge(player, 'Skull Woods SE', 0x40, So, Ld, 0x23, 0x49).coordInfo(0x0388, 0x2060), + create_owedge(player, 'Skull Woods EN', 0x40, Ea, Ld, 0x26, 0x41).coordInfo(0x0088, 0x0180), + create_owedge(player, 'Dark Lumberjack SW', 0x42, So, Ld, 0x20) .coordInfo(0x04cc, 0x100a), + create_owedge(player, 'Dark Lumberjack WN', 0x42, We, Ld, 0x27) .coordInfo(0x0088, 0x00e0), + create_owedge(player, 'West Dark Death Mountain EN', 0x43, Ea, Ld, 0x27, 0x44).coordInfo(0x0070, 0x0180), + create_owedge(player, 'West Dark Death Mountain ES', 0x43, Ea, Ld, 0x29, 0x4c).coordInfo(0x0340, 0x1780), + create_owedge(player, 'East Dark Death Mountain WN', 0x45, We, Ld, 0x28) .coordInfo(0x0070, 0x0060), + create_owedge(player, 'East Dark Death Mountain WS', 0x45, We, Ld, 0x2a, 0x4d).coordInfo(0x0340, 0x1660), + create_owedge(player, 'East Dark Death Mountain EN', 0x45, Ea, Ld, 0x28, 0x46).coordInfo(0x0078, 0x0180), + create_owedge(player, 'Turtle Rock WN', 0x47, We, Ld, 0x29) .coordInfo(0x0078, 0x00e0), + create_owedge(player, 'Bumper Cave NW', 0x4a, No, Ld, 0x22) .coordInfo(0x04cc, 0x180a), + create_owedge(player, 'Bumper Cave SE', 0x4a, So, Ld, 0x24) .coordInfo(0x0518, 0x1012), + create_owedge(player, 'Catfish SE', 0x4f, So, Ld, 0x25) .coordInfo(0x0f80, 0x1020), + create_owedge(player, 'Skull Woods Pass NW', 0x50, No, Ld, 0x23) .coordInfo(0x0058, 0x181e), + create_owedge(player, 'Skull Woods Pass NE', 0x50, No, Ld, 0x24) .coordInfo(0x0178, 0x1800), + create_owedge(player, 'Skull Woods Pass SW', 0x50, So, Ld, 0x26) .coordInfo(0x0088, 0x1002), + create_owedge(player, 'Skull Woods Pass SE', 0x50, So, Ld, 0x27) .coordInfo(0x0148, 0x101a), + create_owedge(player, 'Dark Fortune NE', 0x51, No, Ld, 0x25) .coordInfo(0x0388, 0x1820), + create_owedge(player, 'Dark Fortune SC', 0x51, So, Ld, 0x28) .coordInfo(0x0318, 0x1014), + create_owedge(player, 'Dark Fortune EN', 0x51, Ea, Ld, 0x2a) .coordInfo(0x046c, 0x00c0), + create_owedge(player, 'Dark Fortune ES', 0x51, Ea, Ld, 0x2b) .coordInfo(0x0580, 0x08c0), + create_owedge(player, 'Outcast Pond NE', 0x52, No, Ld, 0x26) .coordInfo(0x0518, 0x1812), + create_owedge(player, 'Outcast Pond SW', 0x52, So, Ld, 0x29) .coordInfo(0x04a4, 0x1006), + create_owedge(player, 'Outcast Pond SE', 0x52, So, Ld, 0x2a) .coordInfo(0x0524, 0x1016), + create_owedge(player, 'Outcast Pond WN', 0x52, We, Ld, 0x2b) .coordInfo(0x046c, 0x00e0), + create_owedge(player, 'Outcast Pond WS', 0x52, We, Ld, 0x2c) .coordInfo(0x0580, 0x08e0), + create_owedge(player, 'Outcast Pond EN', 0x52, Ea, Ld, 0x2c) .coordInfo(0x04c4, 0x0340), + create_owedge(player, 'Outcast Pond ES', 0x52, Ea, Ld, 0x2d) .coordInfo(0x0570, 0x08c0), + create_owedge(player, 'Dark Chapel WN', 0x53, We, Ld, 0x2d) .coordInfo(0x04c4, 0x0360), + create_owedge(player, 'Dark Chapel WS', 0x53, We, Ld, 0x2e) .coordInfo(0x0570, 0x08e0), + create_owedge(player, 'Dark Chapel EC', 0x53, Ea, Ld, 0x2e) .coordInfo(0x050c, 0x04c0), + create_owedge(player, 'Dark Graveyard WC', 0x54, We, Ld, 0x2f) .coordInfo(0x050c, 0x04e0), + create_owedge(player, 'Dark Graveyard EC', 0x54, Ea, Ld, 0x2f) .coordInfo(0x0504, 0x04c0), + create_owedge(player, 'Qirn Jump SW', 0x55, So, Ld, 0x2b) .coordInfo(0x0a9c, 0x1004), + create_owedge(player, 'Qirn Jump SC', 0x55, So, Wr, 0x2c) .coordInfo(0x0b30, 0x1018), + create_owedge(player, 'Qirn Jump SE', 0x55, So, Ld, 0x2d) .coordInfo(0x0b88, 0x1020), + create_owedge(player, 'Qirn Jump WC', 0x55, We, Ld, 0x30) .coordInfo(0x0504, 0x04e0), + create_owedge(player, 'Qirn Jump EN', 0x55, Ea, Wr, 0x30) .coordInfo(0x0484, 0x01c0), + create_owedge(player, 'Qirn Jump EC', 0x55, Ea, Ld, 0x31) .coordInfo(0x04e0, 0x04c0), + create_owedge(player, 'Qirn Jump ES', 0x55, Ea, Ld, 0x32) .coordInfo(0x0574, 0x08c0), + create_owedge(player, 'Dark Witch WN', 0x56, We, Wr, 0x31) .coordInfo(0x0484, 0x01e0), + create_owedge(player, 'Dark Witch WC', 0x56, We, Ld, 0x32) .coordInfo(0x04e0, 0x04e0), + create_owedge(player, 'Dark Witch WS', 0x56, We, Ld, 0x33) .coordInfo(0x0574, 0x08e0), + create_owedge(player, 'Dark Witch EN', 0x56, Ea, Wr, 0x33) .coordInfo(0x0454, 0x00c0), + create_owedge(player, 'Dark Witch EC', 0x56, Ea, Ld, 0x34) .coordInfo(0x0494, 0x01c0), + create_owedge(player, 'Catfish Approach NE', 0x57, No, Ld, 0x27) .coordInfo(0x0f80, 0x1820), + create_owedge(player, 'Catfish Approach WN', 0x57, We, Wr, 0x34) .coordInfo(0x0454, 0x00e0), + create_owedge(player, 'Catfish Approach WC', 0x57, We, Ld, 0x35) .coordInfo(0x0494, 0x01e0), + create_owedge(player, 'Village of Outcasts NW', 0x58, No, Ld, 0x28) .coordInfo(0x0088, 0x1802), + create_owedge(player, 'Village of Outcasts NC', 0x58, No, Ld, 0x29) .coordInfo(0x0148, 0x181a), + create_owedge(player, 'Village of Outcasts NE', 0x58, No, Ld, 0x2a, 0x59).coordInfo(0x0318, 0x1854), + create_owedge(player, 'Village of Outcasts SE', 0x58, So, Ld, 0x2f, 0x61).coordInfo(0x0370, 0x2060), + create_owedge(player, 'Village of Outcasts ES', 0x58, Ea, Ld, 0x35, 0x61).coordInfo(0x0928, 0x1680), + create_owedge(player, 'Shield Shop NW', 0x5a, No, Ld, 0x2b) .coordInfo(0x04a4, 0x1806), + create_owedge(player, 'Shield Shop NE', 0x5a, No, Ld, 0x2c) .coordInfo(0x0524, 0x1816), + create_owedge(player, 'Pyramid SW', 0x5b, So, Ld, 0x30, 0x63).coordInfo(0x068c, 0x2002), + create_owedge(player, 'Pyramid SE', 0x5b, So, Ld, 0x31, 0x64).coordInfo(0x0924, 0x2054), + create_owedge(player, 'Pyramid ES', 0x5b, Ea, Ld, 0x36, 0x64).coordInfo(0x0890, 0x1280), + create_owedge(player, 'Broken Bridge NW', 0x5d, No, Ld, 0x2d) .coordInfo(0x0a9c, 0x1804), + create_owedge(player, 'Broken Bridge NC', 0x5d, No, Wr, 0x2e) .coordInfo(0x0b30, 0x1818), + create_owedge(player, 'Broken Bridge NE', 0x5d, No, Ld, 0x2f) .coordInfo(0x0b88, 0x1820), + create_owedge(player, 'Broken Bridge SW', 0x5d, So, Ld, 0x2e) .coordInfo(0x0aa8, 0x1006), + create_owedge(player, 'Palace of Darkness SW', 0x5e, So, Ld, 0x33, 0x66).coordInfo(0x0c80, 0x2002), + create_owedge(player, 'Palace of Darkness SE', 0x5e, So, Ld, 0x34, 0x67).coordInfo(0x0f78, 0x2060), + create_owedge(player, 'Hammer Pegs WS', 0x62, We, Ld, 0x36) .coordInfo(0x0928, 0x05e0), + create_owedge(player, 'Dark Dunes NW', 0x65, No, Ld, 0x30) .coordInfo(0x0aa8, 0x1806), + create_owedge(player, 'Dark Dunes SC', 0x65, So, Ld, 0x32) .coordInfo(0x0af0, 0x100e), + create_owedge(player, 'Dark Dunes WN', 0x65, We, Ld, 0x37) .coordInfo(0x0890, 0x01e0), + create_owedge(player, 'Dig Game EC', 0x68, Ea, Ld, 0x37) .coordInfo(0x0b64, 0x08c0), + create_owedge(player, 'Dig Game ES', 0x68, Ea, Ld, 0x38) .coordInfo(0x0bc0, 0x0940), + create_owedge(player, 'Frog NE', 0x69, No, Ld, 0x31) .coordInfo(0x0370, 0x1820), + create_owedge(player, 'Frog WC', 0x69, We, Ld, 0x38) .coordInfo(0x0b64, 0x08e0), + create_owedge(player, 'Frog WS', 0x69, We, Ld, 0x39) .coordInfo(0x0bc0, 0x0960), + create_owedge(player, 'Frog ES', 0x69, Ea, Ld, 0x39) .coordInfo(0x0b80, 0x0940), + create_owedge(player, 'Stumpy SW', 0x6a, So, Ld, 0x35) .coordInfo(0x044c, 0x1000), + create_owedge(player, 'Stumpy SC', 0x6a, So, Ld, 0x36) .coordInfo(0x04e8, 0x100c), + create_owedge(player, 'Stumpy WS', 0x6a, We, Ld, 0x3a) .coordInfo(0x0b80, 0x0960), + create_owedge(player, 'Dark Bonk Rocks NW', 0x6b, No, Ld, 0x32) .coordInfo(0x068c, 0x1802), + create_owedge(player, 'Dark Bonk Rocks SW', 0x6b, So, Ld, 0x37) .coordInfo(0x069c, 0x1004), + create_owedge(player, 'Dark Bonk Rocks EN', 0x6b, Ea, Ld, 0x3a) .coordInfo(0x0ac0, 0x0340), + create_owedge(player, 'Dark Bonk Rocks EC', 0x6b, Ea, Ld, 0x3b) .coordInfo(0x0b18, 0x05c0), + create_owedge(player, 'Dark Bonk Rocks ES', 0x6b, Ea, Ld, 0x3c) .coordInfo(0x0b8c, 0x08c0), + create_owedge(player, 'Big Bomb Shop NE', 0x6c, No, Ld, 0x33) .coordInfo(0x0924, 0x1814), + create_owedge(player, 'Big Bomb Shop SC', 0x6c, So, Ld, 0x38) .coordInfo(0x08e0, 0x100e), + create_owedge(player, 'Big Bomb Shop WN', 0x6c, We, Ld, 0x3b) .coordInfo(0x0ac0, 0x0360), + create_owedge(player, 'Big Bomb Shop WC', 0x6c, We, Ld, 0x3c) .coordInfo(0x0b18, 0x05e0), + create_owedge(player, 'Big Bomb Shop WS', 0x6c, We, Ld, 0x3d) .coordInfo(0x0b8c, 0x08a0), + create_owedge(player, 'Big Bomb Shop ES', 0x6c, Ea, Ld, 0x3d) .coordInfo(0x0b80, 0x08c0), + create_owedge(player, 'Hammer Bridge NC', 0x6d, No, Ld, 0x34) .coordInfo(0x0af0, 0x180e), + create_owedge(player, 'Hammer Bridge SC', 0x6d, So, Ld, 0x39) .coordInfo(0x0ae0, 0x100c), + create_owedge(player, 'Hammer Bridge WS', 0x6d, We, Ld, 0x3e) .coordInfo(0x0b80, 0x08e0), + create_owedge(player, 'Hammer Bridge EN', 0x6d, Ea, Ld, 0x3e) .coordInfo(0x0a90, 0x01c0), + create_owedge(player, 'Hammer Bridge EC', 0x6d, Ea, Wr, 0x3f) .coordInfo(0x0b3c, 0x0640), + create_owedge(player, 'Dark Tree Line NW', 0x6e, No, Ld, 0x35) .coordInfo(0x0c80, 0x1802), + create_owedge(player, 'Dark Tree Line SC', 0x6e, So, Wr, 0x3a) .coordInfo(0x0d48, 0x101a), + create_owedge(player, 'Dark Tree Line SE', 0x6e, So, Ld, 0x3b) .coordInfo(0x0d98, 0x1020), + create_owedge(player, 'Dark Tree Line WN', 0x6e, We, Ld, 0x3f) .coordInfo(0x0a90, 0x01e0), + create_owedge(player, 'Dark Tree Line WC', 0x6e, We, Wr, 0x40) .coordInfo(0x0b3c, 0x0660), + create_owedge(player, 'Palace of Darkness Nook NE', 0x6f, No, Ld, 0x36) .coordInfo(0x0f78, 0x1820), + create_owedge(player, 'Stumpy Approach NW', 0x72, No, Ld, 0x37) .coordInfo(0x044c, 0x1800), + create_owedge(player, 'Stumpy Approach NC', 0x72, No, Ld, 0x38) .coordInfo(0x04e8, 0x180c), + create_owedge(player, 'Stumpy Approach EC', 0x72, Ea, Ld, 0x40) .coordInfo(0x0d04, 0x05c0), + create_owedge(player, 'Dark C Whirlpool NW', 0x73, No, Ld, 0x39) .coordInfo(0x069c, 0x1804), + create_owedge(player, 'Dark C Whirlpool SC', 0x73, So, Ld, 0x3c) .coordInfo(0x0728, 0x1016), + create_owedge(player, 'Dark C Whirlpool WC', 0x73, We, Ld, 0x41) .coordInfo(0x0d04, 0x05e0), + create_owedge(player, 'Dark C Whirlpool EN', 0x73, Ea, Ld, 0x41) .coordInfo(0x0cad, 0x02c0), + create_owedge(player, 'Dark C Whirlpool EC', 0x73, Ea, Wr, 0x42) .coordInfo(0x0d0b, 0x05c0), + create_owedge(player, 'Dark C Whirlpool ES', 0x73, Ea, Ld, 0x43) .coordInfo(0x0d76, 0x08c0), + create_owedge(player, 'Hype Cave NC', 0x74, No, Ld, 0x3a) .coordInfo(0x08e0, 0x180e), + create_owedge(player, 'Hype Cave SC', 0x74, So, Ld, 0x3d) .coordInfo(0x08f0, 0x1010), + create_owedge(player, 'Hype Cave WN', 0x74, We, Ld, 0x42) .coordInfo(0x0cad, 0x02e0), + create_owedge(player, 'Hype Cave WC', 0x74, We, Wr, 0x43) .coordInfo(0x0d0b, 0x05e0), + create_owedge(player, 'Hype Cave WS', 0x74, We, Ld, 0x44) .coordInfo(0x0d76, 0x08e0), + create_owedge(player, 'Ice Lake NW', 0x75, No, Ld, 0x3b) .coordInfo(0x0ae0, 0x180c), + create_owedge(player, 'Ice Lake NC', 0x75, No, Wr, 0x3c, 0x76).coordInfo(0x0d48, 0x185a), + create_owedge(player, 'Ice Lake NE', 0x75, No, Ld, 0x3d, 0x76).coordInfo(0x0d98, 0x1860), + create_owedge(player, 'Ice Lake WS', 0x75, We, Ld, 0x48, 0x7d).coordInfo(0x0f98, 0x1860), + create_owedge(player, 'Ice Lake EC', 0x75, Ea, Wr, 0x48, 0x7e).coordInfo(0x0f30, 0x1680), + create_owedge(player, 'Ice Lake ES', 0x75, Ea, Ld, 0x49, 0x7e).coordInfo(0x0f94, 0x1880), + create_owedge(player, 'Shopping Mall SW', 0x77, So, Wr, 0x3e) .coordInfo(0x0e80, 0x1002), + create_owedge(player, 'Shopping Mall SE', 0x77, So, Ld, 0x3f) .coordInfo(0x0f50, 0x101c), + create_owedge(player, 'Swamp Nook EC', 0x7a, Ea, Ld, 0x44) .coordInfo(0x0f18, 0x0640), + create_owedge(player, 'Swamp Nook ES', 0x7a, Ea, Ld, 0x45) .coordInfo(0x0fc8, 0x08c0), + create_owedge(player, 'Swamp NC', 0x7b, No, Ld, 0x3e) .coordInfo(0x0728, 0x1816), + create_owedge(player, 'Swamp WC', 0x7b, We, Ld, 0x45) .coordInfo(0x0f18, 0x0660), + create_owedge(player, 'Swamp WS', 0x7b, We, Ld, 0x46) .coordInfo(0x0fc8, 0x08e0), + create_owedge(player, 'Swamp EC', 0x7b, Ea, Ld, 0x46) .coordInfo(0x0ef0, 0x04c0), + create_owedge(player, 'Dark South Pass NC', 0x7c, No, Ld, 0x3f) .coordInfo(0x08f0, 0x1810), + create_owedge(player, 'Dark South Pass WC', 0x7c, We, Ld, 0x47) .coordInfo(0x0ef0, 0x04e0), + create_owedge(player, 'Dark South Pass ES', 0x7c, Ea, Ld, 0x47) .coordInfo(0x0f98, 0x08c0), + create_owedge(player, 'Bomber Corner NW', 0x7f, No, Wr, 0x40) .coordInfo(0x0e80, 0x1802), + create_owedge(player, 'Bomber Corner NE', 0x7f, No, Ld, 0x41) .coordInfo(0x0f50, 0x181c), + create_owedge(player, 'Bomber Corner WC', 0x7f, We, Wr, 0x49) .coordInfo(0x0f30, 0x05e0), + create_owedge(player, 'Bomber Corner WS', 0x7f, We, Ld, 0x4a) .coordInfo(0x0f94, 0x0860), + create_owedge(player, 'Master Sword Meadow SC', 0x80, So, Ld, 0x40) .coordInfo(0x0080, 0x0000), + create_owedge(player, 'Hobo EC', 0x80, Ea, Wr, 0x4a) .coordInfo(0x008c, 0x0020), + create_owedge(player, 'Zoras Domain SW', 0x81, So, Ld, 0x41, 0x89).coordInfo(0x02a4, 0x1782) ] world.owedges += edges @@ -342,8 +342,12 @@ OWEdgeGroups = { ] ), (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']] + [ + ['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): ( [ @@ -628,8 +632,12 @@ OWEdgeGroups = { ] ), (Op, DW, Hz, Ld, PL, 3): ( - [['Dark Bonk Rocks EN', 'Dark Bonk Rocks EC', 'Dark Bonk Rocks ES']], - [['Big Bomb Shop WN', 'Big Bomb Shop WC', 'Big Bomb Shop WS']] + [ + ['Dark Bonk Rocks EN', 'Dark Bonk Rocks EC', 'Dark Bonk Rocks ES'] + ], + [ + ['Big Bomb Shop WN', 'Big Bomb Shop WC', 'Big Bomb Shop WS'] + ] ), (Op, DW, Hz, Wr, PL, 1): ( [ diff --git a/OverworldShuffle.py b/OverworldShuffle.py index a4de07df..28861552 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -4,7 +4,7 @@ from sortedcontainers import SortedList from BaseClasses import OWEdge, WorldType, RegionType, Direction, Terrain, PolSlot from OWEdges import OWTileGroups, OWEdgeGroups, OpenStd, parallel_links, IsParallel -__version__ = '0.1.6.1-u' +__version__ = '0.1.6.2-u' def link_overworld(world, player): # setup mandatory connections @@ -142,9 +142,9 @@ def link_overworld(world, player): # flute shuffle def connect_flutes(flute_destinations): for o in range(0, len(flute_destinations)): - owid = flute_destinations[o] - regions = flute_data[owid][0] - if (world.mode[player] == 'inverted') == (owid in world.owswaps[player][0] and world.owSwap[player] == 'mixed'): + owslot = flute_destinations[o] + regions = flute_data[owslot][0] + if (world.mode[player] == 'inverted') == (flute_data[owslot][1] in world.owswaps[player][0] and world.owSwap[player] == 'mixed'): connect_simple(world, 'Flute Spot ' + str(o + 1), regions[0], player) else: connect_simple(world, 'Flute Spot ' + str(o + 1), regions[1], player) @@ -156,17 +156,33 @@ def link_overworld(world, player): new_spots = SortedList() # guarantee desert/mire access - flute_pool.remove(0x30) - new_spots.add(0x30) + flute_pool.remove(0x38) + new_spots.add(0x38) # guarantee mountain access - owid = random.randint(0, 2) * 2 + 3 - flute_pool.remove(owid) - new_spots.add(owid) + mountainIds = [0x0b, 0x0e, 0x07] + owslot = mountainIds[random.randint(0, 2)] + flute_pool.remove(owslot) + new_spots.add(owslot) random.shuffle(flute_pool) f = 0 while len(new_spots) < 8: - new_spots.add(flute_pool[f]) + if f >= len(flute_pool): + f = 0 + if world.owFluteShuffle[player] == 'balanced': + if (flute_pool[f] + 1 in new_spots \ + or flute_pool[f] - 1 in new_spots \ + or flute_pool[f] + 8 in new_spots \ + or flute_pool[f] - 8 in new_spots) \ + or (random.randint(0, 9) != 0 \ + and (flute_pool[f] + 7 in new_spots + or flute_pool[f] - 7 in new_spots + or flute_pool[f] + 9 in new_spots + or flute_pool[f] - 9 in new_spots)): + f += 1 + continue + if flute_pool[f] not in new_spots: + new_spots.add(flute_pool[f]) f += 1 world.owflutespots[player] = new_spots connect_flutes(new_spots) @@ -710,7 +726,7 @@ mandatory_connections = [('Flute Away', 'Flute Sky'), ] default_flute_connections = [ - 0x03, 0x16, 0x18, 0x2c, 0x2f, 0x30, 0x3b, 0x3f + 0x0b, 0x16, 0x18, 0x2c, 0x2f, 0x38, 0x3b, 0x3f ] ow_connections = { @@ -1210,45 +1226,45 @@ default_connections = [('Lost Woods SW', 'Lost Woods Pass NW'), ] flute_data = { - #OWID LW Region DW Region VRAM BG Y BG X Link Y Link X Cam Y Cam X Unk1 Unk2 IconY IconX AltY AltX - 0x00: (['Lost Woods East Area', 'Skull Woods Forest'], 0x1042, 0x022e, 0x0202, 0x0290, 0x0288, 0x029b, 0x028f, 0xfff2, 0x000e, 0x0290, 0x0288, 0x0290, 0x0290), - 0x02: (['Lumberjack Area', 'Dark Lumberjack Area'], 0x059c, 0x00d6, 0x04e6, 0x0138, 0x0558, 0x0143, 0x0563, 0xfffa, 0xfffa, 0x0138, 0x0550), - 0x03: (['West Death Mountain (Bottom)', 'West Dark Death Mountain (Bottom)'], 0x1600, 0x02ca, 0x060e, 0x0328, 0x0678, 0x0337, 0x0683, 0xfff6, 0xfff2, 0x035b, 0x0680), - 0x05: (['East Death Mountain (Bottom)', 'East Dark Death Mountain (Bottom)'], 0x1860, 0x031e, 0x0d00, 0x0388, 0x0da8, 0x038d, 0x0d7d, 0x0000, 0x0000, 0x0388, 0x0da8), - 0x07: (['Death Mountain TR Pegs', 'Turtle Rock Area'], 0x0804, 0x0102, 0x0e1a, 0x0160, 0x0e90, 0x016f, 0x0e97, 0xfffe, 0x0006, 0x0160, 0x0f20), - 0x0a: (['Mountain Entry Area', 'Bumper Cave Area'], 0x0180, 0x0220, 0x0206, 0x0280, 0x0488, 0x028f, 0x0493, 0x0000, 0xfffa, 0x0280, 0x0488), - 0x0f: (['Zora Waterfall Area', 'Catfish Area'], 0x0316, 0x025c, 0x0eb2, 0x02c0, 0x0f28, 0x02cb, 0x0f2f, 0x0002, 0xfffe, 0x02d0, 0x0f38), - 0x10: (['Lost Woods Pass West Area', 'Skull Woods Pass West Area'], 0x0080, 0x0400, 0x0000, 0x0448, 0x0058, 0x046f, 0x0085, 0x0000, 0x0000, 0x0448, 0x0058), - 0x11: (['Kakariko Fortune Area', 'Dark Fortune Area'], 0x0912, 0x051e, 0x0292, 0x0588, 0x0318, 0x058d, 0x031f, 0x0000, 0xfffe, 0x0588, 0x0318), - 0x12: (['Kakariko Pond Area', 'Outcast Pond Area'], 0x0890, 0x051a, 0x0476, 0x0578, 0x04f8, 0x0587, 0x0503, 0xfff6, 0x000a, 0x0578, 0x04f8), - 0x13: (['Sanctuary Area', 'Dark Chapel Area'], 0x051c, 0x04aa, 0x06de, 0x0508, 0x0758, 0x0517, 0x0763, 0xfff6, 0x0002, 0x0508, 0x0758), - 0x14: (['Graveyard Area', 'Dark Graveyard Area'], 0x089c, 0x051e, 0x08e6, 0x0580, 0x0958, 0x058b, 0x0963, 0x0000, 0xfffa, 0x0580, 0x0928, 0x0580, 0x0948), - 0x15: (['River Bend East Bank', 'Qirn Jump East Bank'], 0x041a, 0x0486, 0x0ad2, 0x04e8, 0x0b48, 0x04f3, 0x0b4f, 0x0008, 0xfffe, 0x04f8, 0x0b60), - 0x16: (['Potion Shop Area', 'Dark Witch Area'], 0x0888, 0x0516, 0x0c4e, 0x0578, 0x0cc8, 0x0583, 0x0cd3, 0xfffa, 0xfff2, 0x0598, 0x0ccf), - 0x17: (['Zora Approach Ledge', 'Catfish Approach Ledge'], 0x039e, 0x047e, 0x0ef2, 0x04e0, 0x0f68, 0x04eb, 0x0f6f, 0x0000, 0xfffe, 0x04e0, 0x0f68), - 0x18: (['Kakariko Area', 'Village of Outcasts Area'], 0x0b30, 0x0759, 0x017e, 0x07b7, 0x0200, 0x07c6, 0x020b, 0x0007, 0x0002, 0x07c0, 0x0210, 0x07c8, 0x01f8), - 0x1a: (['Forgotten Forest Area', 'Shield Shop Fence'], 0x081a, 0x070f, 0x04d2, 0x0770, 0x0548, 0x077c, 0x054f, 0xffff, 0xfffe, 0x0770, 0x0548), - 0x1b: (['Hyrule Castle Courtyard', 'Pyramid Area'], 0x0c30, 0x077a, 0x0786, 0x07d8, 0x07f8, 0x07e7, 0x0803, 0x0006, 0xfffa, 0x07d8, 0x07f8), - 0x1d: (['Wooden Bridge Area', 'Broken Bridge Northeast'], 0x0602, 0x06c2, 0x0a0e, 0x0720, 0x0a80, 0x072f, 0x0a8b, 0xfffe, 0x0002, 0x0720, 0x0a80), - 0x1e: (['Eastern Palace Area', 'Palace of Darkness Area'], 0x1802, 0x091e, 0x0c0e, 0x09c0, 0x0c80, 0x098b, 0x0c8b, 0x0000, 0x0002, 0x09c0, 0x0c80), - 0x22: (['Blacksmith Area', 'Hammer Pegs Area'], 0x058c, 0x08aa, 0x0462, 0x0908, 0x04d8, 0x0917, 0x04df, 0x0006, 0xfffe, 0x0908, 0x04d8), - 0x25: (['Sand Dunes Area', 'Dark Dunes Area'], 0x030e, 0x085a, 0x0a76, 0x08b8, 0x0ae8, 0x08c7, 0x0af3, 0x0006, 0xfffa, 0x08b8, 0x0b08), - 0x28: (['Maze Race Area', 'Dig Game Area'], 0x0908, 0x0b1e, 0x003a, 0x0b88, 0x00b8, 0x0b8d, 0x00bf, 0x0000, 0x0006, 0x0b88, 0x00b8), - 0x29: (['Kakariko Suburb Area', 'Frog Area'], 0x0408, 0x0a7c, 0x0242, 0x0ae0, 0x02c0, 0x0aeb, 0x02c7, 0x0002, 0xfffe, 0x0ae0, 0x02c0), - 0x2a: (['Flute Boy Area', 'Stumpy Area'], 0x058e, 0x0aac, 0x046e, 0x0b10, 0x04e8, 0x0b1b, 0x04f3, 0x0002, 0x0002, 0x0b10, 0x04e8), - 0x2b: (['Central Bonk Rocks Area', 'Dark Bonk Rocks Area'], 0x0620, 0x0acc, 0x0700, 0x0b30, 0x0790, 0x0b3b, 0x0785, 0xfff2, 0x0000, 0x0b30, 0x0770), - 0x2c: (['Links House Area', 'Big Bomb Shop Area'], 0x0588, 0x0ab9, 0x0840, 0x0b17, 0x08b8, 0x0b26, 0x08bf, 0xfff7, 0x0000, 0x0b20, 0x08b8), - 0x2d: (['Stone Bridge Area', 'Hammer Bridge South Area'], 0x0886, 0x0b1e, 0x0a2a, 0x0ba0, 0x0aa8, 0x0b8b, 0x0aaf, 0x0000, 0x0006, 0x0bc4, 0x0ad0), - 0x2e: (['Tree Line Area', 'Dark Tree Line Area'], 0x0100, 0x0a1a, 0x0c00, 0x0a78, 0x0c30, 0x0a87, 0x0c7d, 0x0006, 0x0000, 0x0a78, 0x0c58), - 0x2f: (['Eastern Nook Area', 'Palace of Darkness Nook Area'], 0x0798, 0x0afa, 0x0eb2, 0x0b58, 0x0f30, 0x0b67, 0x0f37, 0xfff6, 0x000e, 0x0b50, 0x0f30), - 0x30: (['Desert Palace Teleporter Ledge', 'Misery Mire Teleporter Ledge'], 0x1880, 0x0f1e, 0x0000, 0x0fa8, 0x0078, 0x0f8d, 0x008d, 0x0000, 0x0000, 0x0fb0, 0x0070), - 0x32: (['Flute Boy Approach Area', 'Stumpy Approach Area'], 0x03a0, 0x0c6c, 0x0500, 0x0cd0, 0x05a8, 0x0cdb, 0x0585, 0x0002, 0x0000, 0x0cd6, 0x05a8), - 0x33: (['C Whirlpool Outer Area', 'Dark C Whirlpool Outer Area'], 0x0180, 0x0c20, 0x0600, 0x0c80, 0x0628, 0x0c8f, 0x067d, 0x0000, 0x0000, 0x0c80, 0x0628), - 0x34: (['Statues Area', 'Hype Cave Area'], 0x088e, 0x0d00, 0x0866, 0x0d60, 0x08d8, 0x0d6f, 0x08e3, 0x0000, 0x000a, 0x0d60, 0x08d8), - 0x35: (['Lake Hylia Area', 'Ice Lake Area'], 0x0d00, 0x0da6, 0x0a06, 0x0e08, 0x0a80, 0x0e13, 0x0a8b, 0xfffa, 0xfffa, 0x0d88, 0x0a88), - 0x37: (['Ice Cave Area', 'Shopping Mall Area'], 0x0786, 0x0cf6, 0x0e2e, 0x0d58, 0x0ea0, 0x0d63, 0x0eab, 0x000a, 0x0002, 0x0d48, 0x0ed0), - 0x3a: (['Desert Pass Area', 'Swamp Nook Area'], 0x001a, 0x0e08, 0x04c6, 0x0e70, 0x0540, 0x0e7d, 0x054b, 0x0006, 0x000a, 0x0e70, 0x0540), - 0x3b: (['Dam Area', 'Swamp Area'], 0x069e, 0x0edf, 0x06f2, 0x0f3d, 0x0778, 0x0f4c, 0x077f, 0xfff1, 0xfffe, 0x0f30, 0x0770), - 0x3c: (['South Pass Area', 'Dark South Pass Area'], 0x0584, 0x0ed0, 0x081e, 0x0f38, 0x0898, 0x0f45, 0x08a3, 0xfffe, 0x0002, 0x0f38, 0x0898), - 0x3f: (['Octoballoon Area', 'Bomber Corner Area'], 0x0810, 0x0f05, 0x0e75, 0x0f67, 0x0ef3, 0x0f72, 0x0efa, 0xfffb, 0x000b, 0x0f80, 0x0ef0) + #Slot LW Region DW Region OWID VRAM BG Y BG X Link Y Link X Cam Y Cam X Unk1 Unk2 IconY IconX AltY AltX + 0x09: (['Lost Woods East Area', 'Skull Woods Forest'], 0x00, 0x1042, 0x022e, 0x0202, 0x0290, 0x0288, 0x029b, 0x028f, 0xfff2, 0x000e, 0x0290, 0x0288, 0x0290, 0x0290), + 0x02: (['Lumberjack Area', 'Dark Lumberjack Area'], 0x02, 0x059c, 0x00d6, 0x04e6, 0x0138, 0x0558, 0x0143, 0x0563, 0xfffa, 0xfffa, 0x0138, 0x0550), + 0x0b: (['West Death Mountain (Bottom)', 'West Dark Death Mountain (Bottom)'], 0x03, 0x1600, 0x02ca, 0x060e, 0x0328, 0x0678, 0x0337, 0x0683, 0xfff6, 0xfff2, 0x035b, 0x0680), + 0x0e: (['East Death Mountain (Bottom)', 'East Dark Death Mountain (Bottom)'], 0x05, 0x1860, 0x031e, 0x0d00, 0x0388, 0x0da8, 0x038d, 0x0d7d, 0x0000, 0x0000, 0x0388, 0x0da8), + 0x07: (['Death Mountain TR Pegs', 'Turtle Rock Area'], 0x07, 0x0804, 0x0102, 0x0e1a, 0x0160, 0x0e90, 0x016f, 0x0e97, 0xfffe, 0x0006, 0x0160, 0x0f20), + 0x0a: (['Mountain Entry Area', 'Bumper Cave Area'], 0x0a, 0x0180, 0x0220, 0x0406, 0x0280, 0x0488, 0x028f, 0x0493, 0x0000, 0xfffa, 0x0280, 0x0488), + 0x0f: (['Zora Waterfall Area', 'Catfish Area'], 0x0f, 0x0316, 0x025c, 0x0eb2, 0x02c0, 0x0f28, 0x02cb, 0x0f2f, 0x0002, 0xfffe, 0x02d0, 0x0f38), + 0x10: (['Lost Woods Pass West Area', 'Skull Woods Pass West Area'], 0x10, 0x0080, 0x0400, 0x0000, 0x0448, 0x0058, 0x046f, 0x0085, 0x0000, 0x0000, 0x0448, 0x0058), + 0x11: (['Kakariko Fortune Area', 'Dark Fortune Area'], 0x11, 0x0912, 0x051e, 0x0292, 0x0588, 0x0318, 0x058d, 0x031f, 0x0000, 0xfffe, 0x0588, 0x0318), + 0x12: (['Kakariko Pond Area', 'Outcast Pond Area'], 0x12, 0x0890, 0x051a, 0x0476, 0x0578, 0x04f8, 0x0587, 0x0503, 0xfff6, 0x000a, 0x0578, 0x04f8), + 0x13: (['Sanctuary Area', 'Dark Chapel Area'], 0x13, 0x051c, 0x04aa, 0x06de, 0x0508, 0x0758, 0x0517, 0x0763, 0xfff6, 0x0002, 0x0508, 0x0758), + 0x14: (['Graveyard Area', 'Dark Graveyard Area'], 0x14, 0x089c, 0x051e, 0x08e6, 0x0580, 0x0958, 0x058b, 0x0963, 0x0000, 0xfffa, 0x0580, 0x0928, 0x0580, 0x0948), + 0x15: (['River Bend East Bank', 'Qirn Jump East Bank'], 0x15, 0x041a, 0x0486, 0x0ad2, 0x04e8, 0x0b48, 0x04f3, 0x0b4f, 0x0008, 0xfffe, 0x04f8, 0x0b60), + 0x16: (['Potion Shop Area', 'Dark Witch Area'], 0x16, 0x0888, 0x0516, 0x0c4e, 0x0578, 0x0cc8, 0x0583, 0x0cd3, 0xfffa, 0xfff2, 0x0598, 0x0ccf), + 0x17: (['Zora Approach Ledge', 'Catfish Approach Ledge'], 0x17, 0x039e, 0x047e, 0x0ef2, 0x04e0, 0x0f68, 0x04eb, 0x0f6f, 0x0000, 0xfffe, 0x04e0, 0x0f68), + 0x18: (['Kakariko Area', 'Village of Outcasts Area'], 0x18, 0x0b30, 0x0759, 0x017e, 0x07b7, 0x0200, 0x07c6, 0x020b, 0x0007, 0x0002, 0x07c0, 0x0210, 0x07c8, 0x01f8), + 0x1a: (['Forgotten Forest Area', 'Shield Shop Fence'], 0x1a, 0x081a, 0x070f, 0x04d2, 0x0770, 0x0548, 0x077c, 0x054f, 0xffff, 0xfffe, 0x0770, 0x0548), + 0x1b: (['Hyrule Castle Courtyard', 'Pyramid Area'], 0x1b, 0x0c30, 0x077a, 0x0786, 0x07d8, 0x07f8, 0x07e7, 0x0803, 0x0006, 0xfffa, 0x07d8, 0x07f8), + 0x1d: (['Wooden Bridge Area', 'Broken Bridge Northeast'], 0x1d, 0x0602, 0x06c2, 0x0a0e, 0x0720, 0x0a80, 0x072f, 0x0a8b, 0xfffe, 0x0002, 0x0720, 0x0a80), + 0x26: (['Eastern Palace Area', 'Palace of Darkness Area'], 0x1e, 0x1802, 0x091e, 0x0c0e, 0x09c0, 0x0c80, 0x098b, 0x0c8b, 0x0000, 0x0002, 0x09c0, 0x0c80), + 0x22: (['Blacksmith Area', 'Hammer Pegs Area'], 0x22, 0x058c, 0x08aa, 0x0462, 0x0908, 0x04d8, 0x0917, 0x04df, 0x0006, 0xfffe, 0x0908, 0x04d8), + 0x25: (['Sand Dunes Area', 'Dark Dunes Area'], 0x25, 0x030e, 0x085a, 0x0a76, 0x08b8, 0x0ae8, 0x08c7, 0x0af3, 0x0006, 0xfffa, 0x08b8, 0x0b08), + 0x28: (['Maze Race Area', 'Dig Game Area'], 0x28, 0x0908, 0x0b1e, 0x003a, 0x0b88, 0x00b8, 0x0b8d, 0x00bf, 0x0000, 0x0006, 0x0b88, 0x00b8), + 0x29: (['Kakariko Suburb Area', 'Frog Area'], 0x29, 0x0408, 0x0a7c, 0x0242, 0x0ae0, 0x02c0, 0x0aeb, 0x02c7, 0x0002, 0xfffe, 0x0ae0, 0x02c0), + 0x2a: (['Flute Boy Area', 'Stumpy Area'], 0x2a, 0x058e, 0x0aac, 0x046e, 0x0b10, 0x04e8, 0x0b1b, 0x04f3, 0x0002, 0x0002, 0x0b10, 0x04e8), + 0x2b: (['Central Bonk Rocks Area', 'Dark Bonk Rocks Area'], 0x2b, 0x0620, 0x0acc, 0x0700, 0x0b30, 0x0790, 0x0b3b, 0x0785, 0xfff2, 0x0000, 0x0b30, 0x0770), + 0x2c: (['Links House Area', 'Big Bomb Shop Area'], 0x2c, 0x0588, 0x0ab9, 0x0840, 0x0b17, 0x08b8, 0x0b26, 0x08bf, 0xfff7, 0x0000, 0x0b20, 0x08b8), + 0x2d: (['Stone Bridge Area', 'Hammer Bridge South Area'], 0x2d, 0x0886, 0x0b1e, 0x0a2a, 0x0ba0, 0x0aa8, 0x0b8b, 0x0aaf, 0x0000, 0x0006, 0x0bc4, 0x0ad0), + 0x2e: (['Tree Line Area', 'Dark Tree Line Area'], 0x2e, 0x0100, 0x0a1a, 0x0c00, 0x0a78, 0x0c30, 0x0a87, 0x0c7d, 0x0006, 0x0000, 0x0a78, 0x0c58), + 0x2f: (['Eastern Nook Area', 'Palace of Darkness Nook Area'], 0x2f, 0x0798, 0x0afa, 0x0eb2, 0x0b58, 0x0f30, 0x0b67, 0x0f37, 0xfff6, 0x000e, 0x0b50, 0x0f30), + 0x38: (['Desert Palace Teleporter Ledge', 'Misery Mire Teleporter Ledge'], 0x30, 0x1880, 0x0f1e, 0x0000, 0x0fa8, 0x0078, 0x0f8d, 0x008d, 0x0000, 0x0000, 0x0fb0, 0x0070), + 0x32: (['Flute Boy Approach Area', 'Stumpy Approach Area'], 0x32, 0x03a0, 0x0c6c, 0x0500, 0x0cd0, 0x05a8, 0x0cdb, 0x0585, 0x0002, 0x0000, 0x0cd6, 0x05a8), + 0x33: (['C Whirlpool Outer Area', 'Dark C Whirlpool Outer Area'], 0x33, 0x0180, 0x0c20, 0x0600, 0x0c80, 0x0628, 0x0c8f, 0x067d, 0x0000, 0x0000, 0x0c80, 0x0628), + 0x34: (['Statues Area', 'Hype Cave Area'], 0x34, 0x088e, 0x0d00, 0x0866, 0x0d60, 0x08d8, 0x0d6f, 0x08e3, 0x0000, 0x000a, 0x0d60, 0x08d8), + 0x35: (['Lake Hylia Area', 'Ice Lake Area'], 0x35, 0x0d00, 0x0da6, 0x0a06, 0x0e08, 0x0a80, 0x0e13, 0x0a8b, 0xfffa, 0xfffa, 0x0d88, 0x0a88), + 0x37: (['Ice Cave Area', 'Shopping Mall Area'], 0x37, 0x0786, 0x0cf6, 0x0e2e, 0x0d58, 0x0ea0, 0x0d63, 0x0eab, 0x000a, 0x0002, 0x0d48, 0x0ed0), + 0x3a: (['Desert Pass Area', 'Swamp Nook Area'], 0x3a, 0x001a, 0x0e08, 0x04c6, 0x0e70, 0x0540, 0x0e7d, 0x054b, 0x0006, 0x000a, 0x0e70, 0x0540), + 0x3b: (['Dam Area', 'Swamp Area'], 0x3b, 0x069e, 0x0edf, 0x06f2, 0x0f3d, 0x0778, 0x0f4c, 0x077f, 0xfff1, 0xfffe, 0x0f30, 0x0770), + 0x3c: (['South Pass Area', 'Dark South Pass Area'], 0x3c, 0x0584, 0x0ed0, 0x081e, 0x0f38, 0x0898, 0x0f45, 0x08a3, 0xfffe, 0x0002, 0x0f38, 0x0898), + 0x3f: (['Octoballoon Area', 'Bomber Corner Area'], 0x3f, 0x0810, 0x0f05, 0x0e75, 0x0f67, 0x0ef3, 0x0f72, 0x0efa, 0xfffb, 0x000b, 0x0f80, 0x0ef0) } diff --git a/README.md b/README.md index 4c0c4f23..c8cf70b7 100644 --- a/README.md +++ b/README.md @@ -87,13 +87,19 @@ This keeps similar edge transitions together. ie. The 2 west edges of Potion Sho ## Flute Shuffle (--ow_fluteshuffle) +When enabled, new flute spots are generated and gives the player the option to cancel out of the flute menu by pressing X. + ### Vanilla Flute spots remain unchanged. +### Balanced + +New flute spots are chosen at random, with restrictions that limit the promixity between other chosen flute spots. + ### Random -New flute spots are chosen at random. You can also cancel out of the flute menu by pressing X. +New flute spots are chosen at random with minimum bias. ## Ganon Vulnerability Item (--ganon_item) diff --git a/Rom.py b/Rom.py index 37740d4f..a266dc1b 100644 --- a/Rom.py +++ b/Rom.py @@ -651,28 +651,29 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): flute_spots = world.owflutespots[player] for o in range(0, len(flute_spots)): - owid = flute_spots[o] + owslot = flute_spots[o] offset = 0 - if (world.mode[player] == 'inverted') != (owid in world.owswaps[player][0] and world.owSwap[player] == 'mixed'): + data = flute_data[owslot] + + if (world.mode[player] == 'inverted') != (data[1] in world.owswaps[player][0] and world.owSwap[player] == 'mixed'): offset = 0x40 - data = flute_data[owid] - write_int16(rom, snes_to_pc(0x02E849 + (o * 2)), owid + offset) # owid - write_int16(rom, snes_to_pc(0x02E86B + (o * 2)), data[1]) #vram - write_int16(rom, snes_to_pc(0x02E88D + (o * 2)), data[2]) # BG scroll Y - write_int16(rom, snes_to_pc(0x02E8AF + (o * 2)), data[3]) # BG scroll X - write_int16(rom, snes_to_pc(0x02E8D1 + (o * 2)), data[12] if offset > 0 and len(data) > 12 else data[4]) # link Y - write_int16(rom, snes_to_pc(0x02E8F3 + (o * 2)), data[13] if offset > 0 and len(data) > 12 else data[5]) # link X - write_int16(rom, snes_to_pc(0x02E915 + (o * 2)), data[6]) # cam Y - write_int16(rom, snes_to_pc(0x02E937 + (o * 2)), data[7]) # cam X - write_int16(rom, snes_to_pc(0x02E959 + (o * 2)), data[8]) # unknown 1 - write_int16(rom, snes_to_pc(0x02E97B + (o * 2)), data[9]) # unknown 2 + write_int16(rom, snes_to_pc(0x02E849 + (o * 2)), data[1] + offset) # owid + write_int16(rom, snes_to_pc(0x02E86B + (o * 2)), data[2]) #vram + write_int16(rom, snes_to_pc(0x02E88D + (o * 2)), data[3]) # BG scroll Y + write_int16(rom, snes_to_pc(0x02E8AF + (o * 2)), data[4]) # BG scroll X + write_int16(rom, snes_to_pc(0x02E8D1 + (o * 2)), data[13] if offset > 0 and len(data) > 13 else data[5]) # link Y + write_int16(rom, snes_to_pc(0x02E8F3 + (o * 2)), data[14] if offset > 0 and len(data) > 13 else data[6]) # link X + write_int16(rom, snes_to_pc(0x02E915 + (o * 2)), data[7]) # cam Y + write_int16(rom, snes_to_pc(0x02E937 + (o * 2)), data[8]) # cam X + write_int16(rom, snes_to_pc(0x02E959 + (o * 2)), data[9]) # unknown 1 + write_int16(rom, snes_to_pc(0x02E97B + (o * 2)), data[10]) # unknown 2 # flute menu blips - rom.write_byte(snes_to_pc(0x0AB783 + o), data[11] & 0xff) # X low byte - rom.write_byte(snes_to_pc(0x0AB78B + o), data[11] // 0x100) # X high byte - rom.write_byte(snes_to_pc(0x0AB793 + o), data[10] & 0xff) # Y low byte - rom.write_byte(snes_to_pc(0x0AB79B + o), data[10] // 0x100) # Y high byte + rom.write_byte(snes_to_pc(0x0AB783 + o), data[12] & 0xff) # X low byte + rom.write_byte(snes_to_pc(0x0AB78B + o), data[12] // 0x100) # X high byte + rom.write_byte(snes_to_pc(0x0AB793 + o), data[11] & 0xff) # Y low byte + rom.write_byte(snes_to_pc(0x0AB79B + o), data[11] // 0x100) # Y high byte # patch entrance/exits/holes diff --git a/Rules.py b/Rules.py index af9b909e..c9953af1 100644 --- a/Rules.py +++ b/Rules.py @@ -942,7 +942,7 @@ def ow_rules(world, player): set_rule(world.get_entrance('Skull Woods Pass West Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Skull Woods Pass East Top Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Skull Woods Pass East Bottom Mirror Spot', player), lambda state: state.has_Mirror(player)) - set_rule(world.get_entrance('West Dark World Teleporter (Hammer)', player), lambda state: state.has('Hammer', player) and state.has_Pearl(player)) + set_rule(world.get_entrance('West Dark World Teleporter (Hammer)', player), lambda state: state.has('Hammer', player) and state.can_lift_rocks(player) and state.has_Pearl(player)) set_rule(world.get_entrance('West Dark World Teleporter (Rock)', player), lambda state: state.can_lift_heavy_rocks(player) and state.has_Pearl(player)) # bunny cannot lift bushes if (world.mode[player] == 'inverted') == (0x11 in world.owswaps[player][0] and world.owSwap[player] == 'mixed'): diff --git a/resources/app/cli/args.json b/resources/app/cli/args.json index c9f097f4..4099dacf 100644 --- a/resources/app/cli/args.json +++ b/resources/app/cli/args.json @@ -131,6 +131,7 @@ "ow_fluteshuffle": { "choices": [ "vanilla", + "balanced", "random" ] }, diff --git a/resources/app/cli/lang/en.json b/resources/app/cli/lang/en.json index 9ca56f15..d71060b1 100644 --- a/resources/app/cli/lang/en.json +++ b/resources/app/cli/lang/en.json @@ -222,7 +222,8 @@ "ow_fluteshuffle": [ "This randomizes the flute spot destinations.", "Vanilla: All flute spots remain unchanged.", - "Random: New flute spots will be generated." + "Balanced: New flute spots will be generated but prevents flute spots from being on any adjacent screen.", + "Random: New flute spots will be generated with minimal bias." ], "door_shuffle": [ "Select Door Shuffling Algorithm. (default: %(default)s)", diff --git a/resources/app/gui/lang/en.json b/resources/app/gui/lang/en.json index 5082813e..4bed8c26 100644 --- a/resources/app/gui/lang/en.json +++ b/resources/app/gui/lang/en.json @@ -123,6 +123,7 @@ "randomizer.overworld.overworldflute": "Flute Shuffle", "randomizer.overworld.overworldflute.vanilla": "Vanilla", + "randomizer.overworld.overworldflute.balanced": "Balanced", "randomizer.overworld.overworldflute.random": "Random", "randomizer.entrance.openpyramid": "Pre-open Pyramid Hole", diff --git a/resources/app/gui/randomize/overworld/widgets.json b/resources/app/gui/randomize/overworld/widgets.json index 13483ffe..ff63a057 100644 --- a/resources/app/gui/randomize/overworld/widgets.json +++ b/resources/app/gui/randomize/overworld/widgets.json @@ -23,6 +23,7 @@ "default": "vanilla", "options": [ "vanilla", + "balanced", "random" ] }