Merge pull request #11 from Catobat/Terrain

This commit is contained in:
codemann8
2022-10-08 19:04:49 -05:00
committed by GitHub
18 changed files with 603 additions and 106 deletions

View File

@@ -25,6 +25,7 @@ class World(object):
self.players = players self.players = players
self.teams = 1 self.teams = 1
self.owShuffle = owShuffle.copy() self.owShuffle = owShuffle.copy()
self.owTerrain = {}
self.owCrossed = owCrossed.copy() self.owCrossed = owCrossed.copy()
self.owKeepSimilar = {} self.owKeepSimilar = {}
self.owMixed = owMixed.copy() self.owMixed = owMixed.copy()
@@ -2912,6 +2913,7 @@ class Spoiler(object):
'weapons': self.world.swords, 'weapons': self.world.swords,
'goal': self.world.goal, 'goal': self.world.goal,
'ow_shuffle': self.world.owShuffle, 'ow_shuffle': self.world.owShuffle,
'ow_terrain': self.world.owTerrain,
'ow_crossed': self.world.owCrossed, 'ow_crossed': self.world.owCrossed,
'ow_keepsimilar': self.world.owKeepSimilar, 'ow_keepsimilar': self.world.owKeepSimilar,
'ow_mixed': self.world.owMixed, 'ow_mixed': self.world.owMixed,
@@ -3124,6 +3126,8 @@ class Spoiler(object):
outfile.write('Bombbag:'.ljust(line_width) + '%s\n' % yn(self.metadata['bombbag'][player])) outfile.write('Bombbag:'.ljust(line_width) + '%s\n' % yn(self.metadata['bombbag'][player]))
outfile.write('Pseudoboots:'.ljust(line_width) + '%s\n' % yn(self.metadata['pseudoboots'][player])) outfile.write('Pseudoboots:'.ljust(line_width) + '%s\n' % yn(self.metadata['pseudoboots'][player]))
outfile.write('Overworld Layout Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['ow_shuffle'][player]) outfile.write('Overworld Layout Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['ow_shuffle'][player])
if self.metadata['ow_shuffle'][player] != 'vanilla':
outfile.write('Free Terrain:'.ljust(line_width) + '%s\n' % yn(self.metadata['ow_terrain'][player]))
outfile.write('Crossed OW:'.ljust(line_width) + '%s\n' % self.metadata['ow_crossed'][player]) outfile.write('Crossed OW:'.ljust(line_width) + '%s\n' % self.metadata['ow_crossed'][player])
if self.metadata['ow_shuffle'][player] != 'vanilla' or self.metadata['ow_crossed'][player] != 'none': if self.metadata['ow_shuffle'][player] != 'vanilla' or self.metadata['ow_crossed'][player] != 'none':
outfile.write('Keep Similar OW Edges Together:'.ljust(line_width) + '%s\n' % yn(self.metadata['ow_keepsimilar'][player])) outfile.write('Keep Similar OW Edges Together:'.ljust(line_width) + '%s\n' % yn(self.metadata['ow_keepsimilar'][player]))

5
CLI.py
View File

@@ -97,8 +97,8 @@ 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', for name in ['logic', 'mode', 'swords', 'goal', 'difficulty', 'item_functionality', 'ow_shuffle',
'ow_shuffle', 'ow_crossed', 'ow_keepsimilar', 'ow_mixed', 'ow_whirlpool', 'ow_fluteshuffle', 'ow_terrain', 'ow_crossed', 'ow_keepsimilar', 'ow_mixed', 'ow_whirlpool', 'ow_fluteshuffle',
'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',
'usestartinventory', 'bombbag', 'shuffleganon', 'overworld_map', 'restrict_boss_items', 'usestartinventory', 'bombbag', 'shuffleganon', 'overworld_map', 'restrict_boss_items',
@@ -154,6 +154,7 @@ def parse_settings():
"openpyramid": "auto", "openpyramid": "auto",
"shuffleganon": True, "shuffleganon": True,
"ow_shuffle": "vanilla", "ow_shuffle": "vanilla",
"ow_terrain": False,
"ow_crossed": "none", "ow_crossed": "none",
"ow_keepsimilar": False, "ow_keepsimilar": False,
"ow_mixed": False, "ow_mixed": False,

View File

@@ -88,6 +88,7 @@ def main(args, seed=None, fish=None):
world.crystals_needed_for_gt = {player: random.randint(0, 7) if args.crystals_gt[player] == 'random' else int(args.crystals_gt[player]) for player in range(1, world.players + 1)} world.crystals_needed_for_gt = {player: random.randint(0, 7) if args.crystals_gt[player] == 'random' else int(args.crystals_gt[player]) for player in range(1, world.players + 1)}
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.owTerrain = args.ow_terrain.copy()
world.owKeepSimilar = args.ow_keepsimilar.copy() world.owKeepSimilar = args.ow_keepsimilar.copy()
world.owWhirlpoolShuffle = args.ow_whirlpool.copy() world.owWhirlpoolShuffle = args.ow_whirlpool.copy()
world.owFluteShuffle = args.ow_fluteshuffle.copy() world.owFluteShuffle = args.ow_fluteshuffle.copy()
@@ -433,6 +434,7 @@ def copy_world(world):
ret.crystals_needed_for_gt = world.crystals_needed_for_gt.copy() ret.crystals_needed_for_gt = world.crystals_needed_for_gt.copy()
ret.crystals_ganon_orig = world.crystals_ganon_orig.copy() ret.crystals_ganon_orig = world.crystals_ganon_orig.copy()
ret.crystals_gt_orig = world.crystals_gt_orig.copy() ret.crystals_gt_orig = world.crystals_gt_orig.copy()
ret.owTerrain = world.owTerrain.copy()
ret.owKeepSimilar = world.owKeepSimilar.copy() ret.owKeepSimilar = world.owKeepSimilar.copy()
ret.owWhirlpoolShuffle = world.owWhirlpoolShuffle.copy() ret.owWhirlpoolShuffle = world.owWhirlpoolShuffle.copy()
ret.owFluteShuffle = world.owFluteShuffle.copy() ret.owFluteShuffle = world.owFluteShuffle.copy()
@@ -593,6 +595,7 @@ def copy_world_limited(world):
ret.crystals_needed_for_gt = world.crystals_needed_for_gt.copy() ret.crystals_needed_for_gt = world.crystals_needed_for_gt.copy()
ret.crystals_ganon_orig = world.crystals_ganon_orig.copy() ret.crystals_ganon_orig = world.crystals_ganon_orig.copy()
ret.crystals_gt_orig = world.crystals_gt_orig.copy() ret.crystals_gt_orig = world.crystals_gt_orig.copy()
ret.owTerrain = world.owTerrain.copy()
ret.owKeepSimilar = world.owKeepSimilar.copy() ret.owKeepSimilar = world.owKeepSimilar.copy()
ret.owWhirlpoolShuffle = world.owWhirlpoolShuffle.copy() ret.owWhirlpoolShuffle = world.owWhirlpoolShuffle.copy()
ret.owFluteShuffle = world.owFluteShuffle.copy() ret.owFluteShuffle = world.owFluteShuffle.copy()

View File

@@ -168,6 +168,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_terrain = get_choice('overworld_terrain') == 'on'
valid_options = {'none', 'polar', 'grouped', 'limited', 'chaos'} valid_options = {'none', 'polar', 'grouped', 'limited', 'chaos'}
ret.ow_crossed = get_choice('overworld_crossed') ret.ow_crossed = get_choice('overworld_crossed')
ret.ow_crossed = ret.ow_crossed if ret.ow_crossed in valid_options else 'none' ret.ow_crossed = ret.ow_crossed if ret.ow_crossed in valid_options else 'none'

View File

@@ -697,6 +697,324 @@ OWEdgeGroups = {
) )
} }
OWEdgeGroupsTerrain = {
#(IsStandard, World, EdgeAxis, Terrain, HasParallel, NumberInGroup)
(St, LW, Vt, None, PL, 1): (
[
['Hyrule Castle SW'],
['Hyrule Castle SE']
],
[
['Central Bonk Rocks NW'],
['Links House NE']
]
),
(St, LW, Hz, None, 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, None, PL, 1): (
[
['Lost Woods EN'],
['East Death Mountain EN'],
['Sanctuary EC'],
['Graveyard EC'],
['Kakariko ES'],
['Hyrule Castle ES'],
['Maze Race ES'],
['Kakariko Suburb ES'],
['Links House ES'],
['Flute Boy Approach EC'],
['Dam EC'],
['South Pass ES'],
['West Death Mountain EN'],
['West Death Mountain ES']
],
[
['Lumberjack WN'],
['Death Mountain TR Pegs WN'],
['Graveyard WC'],
['River Bend WC'],
['Blacksmith WS'],
['Sand Dunes WN'],
['Kakariko Suburb WS'],
['Flute Boy WS'],
['Stone Bridge WS'],
['C Whirlpool WC'],
['South Pass WC'],
['Lake Hylia WS'],
['East Death Mountain WN'],
['East Death Mountain WS']
]
),
(Op, LW, Hz, None, NP, 1): (
[
['Forgotten Forest ES'],
['Hobo EC']
],
[
['Hyrule Castle WN'],
['Stone Bridge WC']
]
),
(Op, LW, Vt, None, PL, 1): (
[
['Lumberjack SW'],
['Mountain Entry SE'],
['Lost Woods SE'],
['Zora Waterfall SE'],
['Kakariko Fortune SC'],
['Wooden Bridge SW'],
['Kakariko SE'],
['Sand Dunes SC'],
['Eastern Palace SW'],
['Eastern Palace SE'],
['Central Bonk Rocks SW'],
['Links House SC'],
['Stone Bridge SC'],
['C Whirlpool SC'],
['Statues SC']
],
[
['Mountain Entry NW'],
['Kakariko Pond NE'],
['Kakariko Fortune NE'],
['Zora Approach NE'],
['Kakariko NE'],
['Sand Dunes NW'],
['Kakariko Suburb NE'],
['Stone Bridge NC'],
['Tree Line NW'],
['Eastern Nook NE'],
['C Whirlpool NW'],
['Statues NC'],
['Lake Hylia NW'],
['Dam NC'],
['South Pass NC']
]
),
(Op, LW, Vt, None, NP, 1): (
[
['Master Sword Meadow SC'],
['Zoras Domain SW']
],
[
['Lost Woods NW'],
['Zora Waterfall NE']
]
),
(Op, LW, Hz, None, PL, 2): (
[
['Kakariko Fortune EN', 'Kakariko Fortune ES'],
['Kakariko Pond EN', 'Kakariko Pond ES'],
['Desert Pass EC', 'Desert Pass ES'],
['Potion Shop EN', 'Potion Shop EC'],
['Lake Hylia EC', 'Lake Hylia ES'],
['Stone Bridge EN', 'Stone Bridge EC']
],
[
['Kakariko Pond WN', 'Kakariko Pond WS'],
['Sanctuary WN', 'Sanctuary WS'],
['Dam WC', 'Dam WS'],
['Zora Approach WN', 'Zora Approach WC'],
['Octoballoon WC', 'Octoballoon WS'],
['Tree Line WN', 'Tree Line WC']
]
),
(Op, LW, Hz, None, NP, 2): (
[
['Desert EC', 'Desert ES']
],
[
['Desert Pass WC', 'Desert Pass WS']
]
),
(Op, LW, Vt, None, PL, 2): (
[
['Lost Woods SW', 'Lost Woods SC'],
['Lost Woods Pass SW', 'Lost Woods Pass SE'],
['Kakariko Pond SW', 'Kakariko Pond SE'],
['Flute Boy SW', 'Flute Boy SC'],
['Tree Line SC', 'Tree Line SE'],
['Ice Cave SW', 'Ice Cave SE']
],
[
['Lost Woods Pass NW', 'Lost Woods Pass NE'],
['Kakariko NW', 'Kakariko NC'],
['Forgotten Forest NW', 'Forgotten Forest NE'],
['Flute Boy Approach NW', 'Flute Boy Approach NC'],
['Lake Hylia NC', 'Lake Hylia NE'],
['Octoballoon NW', 'Octoballoon NE']
]
),
(Op, LW, Hz, None, PL, 3): (
[
['River Bend EN', 'River Bend EC', 'River Bend ES'],
['C Whirlpool EN', 'C Whirlpool EC', 'C Whirlpool ES']
],
[
['Potion Shop WN', 'Potion Shop WC', 'Potion Shop WS'],
['Statues WN', 'Statues WC', 'Statues WS']
]
),
(Op, LW, Vt, None, PL, 3): (
[
['River Bend SW', 'River Bend SC', 'River Bend SE']
],
[
['Wooden Bridge NW', 'Wooden Bridge NC', 'Wooden Bridge NE']
]
),
(Op, DW, Hz, None, PL, 1): (
[
['Skull Woods EN'],
['East Dark Death Mountain EN'],
['Dark Chapel EC'],
['Dark Graveyard EC'],
['Village of Outcasts ES'],
['Pyramid ES'],
['Frog ES'],
['Big Bomb Shop ES'],
['Stumpy Approach EC'],
['Swamp EC'],
['Dark South Pass ES'],
['West Dark Death Mountain EN'],
['West Dark Death Mountain ES']
],
[
['Dark Lumberjack WN'],
['Turtle Rock WN'],
['Dark Graveyard WC'],
['Qirn Jump WC'],
['Hammer Pegs WS'],
['Dark Dunes WN'],
['Stumpy WS'],
['Hammer Bridge WS'],
['Dark C Whirlpool WC'],
['Dark South Pass WC'],
['Ice Lake WS'],
['East Dark Death Mountain WN'],
['East Dark Death Mountain WS']
]
),
(Op, DW, Vt, None, PL, 1): (
[
['Dark Lumberjack SW'],
['Bumper Cave SE'],
['Skull Woods SE'],
['Catfish SE'],
['Dark Fortune SC'],
['Broken Bridge SW'],
['Village of Outcasts SE'],
['Pyramid SW'],
['Pyramid SE'],
['Dark Dunes SC'],
['Palace of Darkness SW'],
['Palace of Darkness SE'],
['Dark Bonk Rocks SW'],
['Big Bomb Shop SC'],
['Hammer Bridge SC'],
['Dark C Whirlpool SC'],
['Hype Cave SC']
],
[
['Bumper Cave NW'],
['Outcast Pond NE'],
['Dark Fortune NE'],
['Catfish Approach NE'],
['Village of Outcasts NE'],
['Dark Dunes NW'],
['Frog NE'],
['Dark Bonk Rocks NW'],
['Big Bomb Shop NE'],
['Hammer Bridge NC'],
['Dark Tree Line NW'],
['Palace of Darkness Nook NE'],
['Dark C Whirlpool NW'],
['Hype Cave NC'],
['Ice Lake NW'],
['Swamp NC'],
['Dark South Pass NC']
]
),
(Op, DW, Hz, None, NP, 1): (
[ ],
[ ]
),
(Op, DW, Hz, None, PL, 2): (
[
['Dark Fortune EN', 'Dark Fortune ES'],
['Outcast Pond EN', 'Outcast Pond ES'],
['Swamp Nook EC', 'Swamp Nook ES'],
['Dark Witch EN', 'Dark Witch EC'],
['Ice Lake EC', 'Ice Lake ES'],
['Hammer Bridge EN', 'Hammer Bridge EC']
],
[
['Outcast Pond WN', 'Outcast Pond WS'],
['Dark Chapel WN', 'Dark Chapel WS'],
['Swamp WC', 'Swamp WS'],
['Catfish Approach WN', 'Catfish Approach WC'],
['Bomber Corner WC', 'Bomber Corner WS'],
['Dark Tree Line WN', 'Dark Tree Line WC']
]
),
(Op, DW, Vt, None, NP, 1): (
[ ],
[ ]
),
(Op, DW, Hz, None, NP, 2): (
[
['Dig Game EC', 'Dig Game ES']
],
[
['Frog WC', 'Frog WS']
]
),
(Op, DW, Vt, None, PL, 2): (
[
['Skull Woods SW', 'Skull Woods SC'],
['Skull Woods Pass SW', 'Skull Woods Pass SE'],
['Outcast Pond SW', 'Outcast Pond SE'],
['Stumpy SW', 'Stumpy SC'],
['Dark Tree Line SC', 'Dark Tree Line SE'],
['Shopping Mall SW', 'Shopping Mall SE']
],
[
['Skull Woods Pass NW', 'Skull Woods Pass NE'],
['Village of Outcasts NW', 'Village of Outcasts NC'],
['Shield Shop NW', 'Shield Shop NE'],
['Stumpy Approach NW', 'Stumpy Approach NC'],
['Ice Lake NC', 'Ice Lake NE'],
['Bomber Corner NW', 'Bomber Corner NE']
]
),
(Op, DW, Hz, None, PL, 3): (
[
['Dark Bonk Rocks EN', 'Dark Bonk Rocks EC', 'Dark Bonk Rocks ES'],
['Qirn Jump EN', 'Qirn Jump EC', 'Qirn Jump ES'],
['Dark C Whirlpool EN', 'Dark C Whirlpool EC', 'Dark C Whirlpool ES']
],
[
['Big Bomb Shop WN', 'Big Bomb Shop WC', 'Big Bomb Shop WS'],
['Dark Witch WN', 'Dark Witch WC', 'Dark Witch WS'],
['Hype Cave WN', 'Hype Cave WC', 'Hype Cave WS']
]
),
(Op, DW, Vt, None, PL, 3): (
[
['Qirn Jump SW', 'Qirn Jump SC', 'Qirn Jump SE']
],
[
['Broken Bridge NW', 'Broken Bridge NC', 'Broken Bridge NE']
]
)
}
OWTileRegions = bidict({ OWTileRegions = bidict({
'Lost Woods West Area': 0x00, 'Lost Woods West Area': 0x00,
'Lost Woods East Area': 0x00, 'Lost Woods East Area': 0x00,

View File

@@ -3,7 +3,7 @@ from collections import OrderedDict, defaultdict
from DungeonGenerator import GenerationException from DungeonGenerator import GenerationException
from BaseClasses import OWEdge, WorldType, RegionType, Direction, Terrain, PolSlot, Entrance from BaseClasses import OWEdge, WorldType, RegionType, Direction, Terrain, PolSlot, Entrance
from Regions import mark_dark_world_regions, mark_light_world_regions from Regions import mark_dark_world_regions, mark_light_world_regions
from OWEdges import OWTileRegions, OWEdgeGroups, OWExitTypes, OpenStd, parallel_links, IsParallel from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitTypes, OpenStd, parallel_links, IsParallel
from Utils import bidict from Utils import bidict
version_number = '0.2.10.1' version_number = '0.2.10.1'
@@ -106,7 +106,7 @@ def link_overworld(world, player):
return new_groups return new_groups
tile_groups = define_tile_groups(world, player, False) tile_groups = define_tile_groups(world, player, False)
trimmed_groups = copy.deepcopy(OWEdgeGroups) trimmed_groups = copy.deepcopy(OWEdgeGroupsTerrain if world.owTerrain[player] else OWEdgeGroups)
swapped_edges = list() swapped_edges = list()
# restructure Maze Race/Suburb/Frog/Dig Game manually due to NP/P relationship # restructure Maze Race/Suburb/Frog/Dig Game manually due to NP/P relationship
@@ -639,9 +639,9 @@ def shuffle_tiles(world, groups, result_list, do_grouped, player):
if not world.owKeepSimilar[player]: if not world.owKeepSimilar[player]:
parity[1] += 2*parity[2] parity[1] += 2*parity[2]
parity[2] = 0 parity[2] = 0
# if crossed terrain: if world.owTerrain[player]:
# parity[1] += parity[3] parity[1] += parity[3]
# parity[3] = 0 parity[3] = 0
parity[4] %= 2 # actual parity parity[4] %= 2 # actual parity
if (world.owCrossed[player] == 'none' or do_grouped) and parity[:5] != [0, 0, 0, 0, 0]: if (world.owCrossed[player] == 'none' or do_grouped) and parity[:5] != [0, 0, 0, 0, 0]:
attempts -= 1 attempts -= 1
@@ -775,6 +775,8 @@ def reorganize_groups(world, groups, player):
new_group = list(group) new_group = list(group)
if world.mode[player] != "standard": if world.mode[player] != "standard":
new_group[0] = None new_group[0] = None
if world.owTerrain[player]:
new_group[3] = None
if world.owShuffle[player] != 'parallel': if world.owShuffle[player] != 'parallel':
new_group[4] = None new_group[4] = None
if not world.owKeepSimilar[player]: if not world.owKeepSimilar[player]:

View File

@@ -64,6 +64,10 @@ OW Transitions are shuffled, but both worlds will have a matching layout.
OW Transitions are shuffled within each world separately. OW Transitions are shuffled within each world separately.
## Free Terrain (--ow_terrain)
With OW Layout Shuffle, this allows land and water edges to be connected.
## Crossed Options (--ow_crossed) ## Crossed Options (--ow_crossed)
This allows OW connections to be shuffled cross-world. This allows OW connections to be shuffled cross-world.
@@ -102,7 +106,7 @@ Same as Limited, except that there is no limit to the number of cross-world conn
## Keep Similar Edges Together (--ow_keepsimilar) ## Keep Similar Edges Together (--ow_keepsimilar)
This keeps similar edge transitions together. ie. The 2 west edges of Potion Shop will be paired to another set of two similar edges This keeps similar edge transitions together. ie. The 2 west land edges of Potion Shop will be paired to another set of two similar edges, unless Free Terrain is also enabled, in which case these 2 edges together with the west water edge form a group of 3 similar edges.
Note: This affects OW Layout Shuffle mostly, but also affects Limited and Chaos modes in Crossed OW. Note: This affects OW Layout Shuffle mostly, but also affects Limited and Chaos modes in Crossed OW.

2
Rom.py
View File

@@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127
JAP10HASH = '03a63945398191337e896e5771f77173' JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = '0aa072c020b0c1167c3e618b571efbbe' RANDOMIZERBASEHASH = '4657087846e24d65cd69ff61241601fe'
class JsonRom(object): class JsonRom(object):

View File

@@ -3,10 +3,11 @@ import logging
from collections import deque from collections import deque
import OverworldGlitchRules import OverworldGlitchRules
from BaseClasses import CollectionState, RegionType, DoorType, Entrance, CrystalBarrier, KeyRuleType, LocationType from BaseClasses import CollectionState, RegionType, DoorType, Entrance, CrystalBarrier, KeyRuleType, LocationType, Terrain
from BaseClasses import PotFlags from BaseClasses import PotFlags
from Dungeons import dungeon_table from Dungeons import dungeon_table
from RoomData import DoorKind from RoomData import DoorKind
from OWEdges import OWExitTypes
from OverworldGlitchRules import overworld_glitches_rules from OverworldGlitchRules import overworld_glitches_rules
@@ -25,6 +26,8 @@ def set_rules(world, player):
ow_bunny_rules(world, player) ow_bunny_rules(world, player)
ow_terrain_rules(world, player)
if world.mode[player] == 'standard': if world.mode[player] == 'standard':
if not world.is_copied_world: if not world.is_copied_world:
standard_rules(world, player) standard_rules(world, player)
@@ -1474,6 +1477,21 @@ def ow_bunny_rules(world, player):
add_bunny_rule(world.get_entrance('Bomber Corner Waterfall Water Drop', player), player) add_bunny_rule(world.get_entrance('Bomber Corner Waterfall Water Drop', player), player)
def ow_terrain_rules(world, player):
for edge in world.owedges:
if edge.player == player and edge.dest and edge.dest.terrain == Terrain.Water:
ent = world.get_entrance(edge.name, player)
if edge.terrain == Terrain.Land:
set_rule(ent, lambda state: state.has('Flippers', player))
if ent.parent_region.is_light_world == (world.mode[player] != 'inverted') and ent.connected_region.is_dark_world == (world.mode[player] != 'inverted'):
add_rule(ent, lambda state: state.has_Pearl(player))
for whirlpool_name in OWExitTypes['Whirlpool']:
ent = world.get_entrance(whirlpool_name, player)
if ent.parent_region.is_light_world == (world.mode[player] != 'inverted') and ent.connected_region.is_dark_world == (world.mode[player] != 'inverted'):
add_rule(ent, lambda state: state.has_Pearl(player))
def no_glitches_rules(world, player): def no_glitches_rules(world, player):
# todo: move some dungeon rules to no glictes logic - see these for examples # todo: move some dungeon rules to no glictes logic - see these for examples
# add_rule(world.get_entrance('Ganons Tower (Hookshot Room)', player), lambda state: state.has('Hookshot', player) or state.has_Boots(player)) # add_rule(world.get_entrance('Ganons Tower (Hookshot Room)', player), lambda state: state.has('Hookshot', player) or state.has_Boots(player))

View File

@@ -1,3 +1,10 @@
; Free RAM notes
; $06F8-$06F9: Used to store edge table addresses
; $06FA-$06FB: Used to store target edge IDs
; $06FC-$06FD: Used for custom walk destination after transitions
; $0703: Used to flag forced transitions
; $0704-$0705: Used to store terrain type at the start of a transition
org $aa8000 ;150000 org $aa8000 ;150000
db $4f, $52 ;OR db $4f, $52 ;OR
OWMode: OWMode:
@@ -38,6 +45,9 @@ Overworld_LoadSpecialOverworld_RoomId:
org $04E8B4 org $04E8B4
Overworld_LoadSpecialOverworld: Overworld_LoadSpecialOverworld:
org $07982A
Link_ResetSwimmingState:
; mirror hooks ; mirror hooks
org $02FBAB org $02FBAB
@@ -54,6 +64,8 @@ JSL OWMirrorSpriteOnMap : BRA + : NOP #6 : +
; whirlpool shuffle cross world change ; whirlpool shuffle cross world change
org $02b3bd org $02b3bd
jsl OWWhirlpoolUpdate ;JSL $02EA6C jsl OWWhirlpoolUpdate ;JSL $02EA6C
org $02B44E
jsl OWWhirlpoolEnd ; STZ.b $11 : STZ.b $B0
; flute menu cancel ; flute menu cancel
org $0ab7af ;LDA $F2 : ORA $F0 : AND #$C0 org $0ab7af ;LDA $F2 : ORA $F0 : AND #$C0
@@ -172,6 +184,8 @@ OWCameraRangeIndex:
db 2, 2, 0, 0 ; For OWCameraRange db 2, 2, 0, 0 ; For OWCameraRange
OWCameraRange: OWCameraRange:
dw $011E, $0100 ; Length of the range the camera can move on small screens dw $011E, $0100 ; Length of the range the camera can move on small screens
OWAutoWalk:
db $04, $08, $01, $02
DivideByTwoPreserveSign: DivideByTwoPreserveSign:
{ {
@@ -201,13 +215,21 @@ OWMapWorldCheck16:
OWWhirlpoolUpdate: OWWhirlpoolUpdate:
{ {
jsl $02ea6c ; what we wrote over jsl $02ea6c ; what we wrote over
lda.l OWFlags : and #$01 : bne + ldx $8a : ldy #$03 : jsr OWWorldTerrainUpdate
lda.l OWMode+1 : and #$02 : beq .return
+ ldx $8a : jsr OWWorldUpdate
.return
rtl rtl
} }
OWWhirlpoolEnd:
{
STZ.b $B0 ; what we wrote over
LDA.w $0703 : BEQ .normal
LDA.b #$3C : STA.w $012E ; play error sound before forced transition
RTL
.normal
STZ.b $11 ; end whirlpool transition
RTL
}
OWMirrorSpriteOnMap: OWMirrorSpriteOnMap:
{ {
lda.w $1ac0,x : bit.b #$f0 : beq .continue lda.w $1ac0,x : bit.b #$f0 : beq .continue
@@ -525,7 +547,16 @@ OWDetectSpecialTransition:
{ {
STZ.w $06FC STZ.w $06FC
LDA.l OWMode : BEQ .normal LDA.l OWMode : BEQ .normal
LDA.l OWSpecialDestIndex,X : BIT.w #$0080 : BNE .special TXA : AND.w #$0002 : LSR
STA.w $0704
LDA.l OWSpecialDestIndex,X : BIT.w #$0080 : BEQ .switch_to_edge
AND.w #$0003 : TAY : ASL : TAX
.normal
JSR OWLoadSpecialArea
.return
RTL
.switch_to_edge
STA.w $06FA STA.w $06FA
LDA.l OWEdgeDataOffset,X : STA.w $06F8 LDA.l OWEdgeDataOffset,X : STA.w $06F8
PLA : SEP #$30 : PLA ; delete 3 bytes from stack PLA : SEP #$30 : PLA ; delete 3 bytes from stack
@@ -552,12 +583,6 @@ OWDetectSpecialTransition:
LDX.b $02 LDX.b $02
LDA.b $84 LDA.b $84
JML OverworldHandleTransitions_SpecialTrigger+6 JML OverworldHandleTransitions_SpecialTrigger+6
.special
AND.w #$0003 : TAY : ASL : TAX
.normal
JSR OWLoadSpecialArea
.return
RTL
} }
OWEdgeTransition: OWEdgeTransition:
{ {
@@ -577,9 +602,16 @@ OWEdgeTransition:
} }
OWSpecialExit: OWSpecialExit:
{ {
LDA.l OWMode+1 : AND.b #!FLAG_OW_CROSSED : BEQ .return PHY
JSR OWWorldUpdate LDY.b #$00
.return LDA.w $0418 : LSR : BNE +
LDY.w $0704 : BRA ++
+
LDA.w $0704 : BNE ++
LDY.b #$02
++
JSR OWWorldTerrainUpdate
PLY
LDA.l $7EFD40,X ; what we wrote over LDA.l $7EFD40,X ; what we wrote over
RTL RTL
} }
@@ -611,7 +643,7 @@ OWShuffle:
.nextTransition .nextTransition
pha pha
jsr OWSearchTransition : bcs .newDestination jsr OWSearchTransition_entry : bcs .newDestination
txa : !add #$0010 : tax txa : !add #$0010 : tax
pla : dec : bne .nextTransition : bra .noTransition pla : dec : bne .nextTransition : bra .noTransition
@@ -627,6 +659,10 @@ OWShuffle:
} }
OWSearchTransition: OWSearchTransition:
{ {
.exitloop ; moved here because of branch distance
clc : rts
.entry
;A-16 XY-16 ;A-16 XY-16
lda $418 : bne + ;north lda $418 : bne + ;north
lda.l OWNorthEdges,x : dec lda.l OWNorthEdges,x : dec
@@ -634,6 +670,7 @@ OWSearchTransition:
lda.l OWNorthEdges+2,x : cmp $22 : !blt .exitloop lda.l OWNorthEdges+2,x : cmp $22 : !blt .exitloop
;MATCH ;MATCH
lda.l OWNorthEdges+14,x : tay ;y = record id of dest lda.l OWNorthEdges+14,x : tay ;y = record id of dest
lda.l OWNorthEdges+12,x ;a = current terrain
ldx.w #OWSouthEdges ;x = address of table ldx.w #OWSouthEdges ;x = address of table
bra .matchfound bra .matchfound
+ dec : bne + ;south + dec : bne + ;south
@@ -642,6 +679,7 @@ OWSearchTransition:
lda.l OWSouthEdges+2,x : cmp $22 : !blt .exitloop lda.l OWSouthEdges+2,x : cmp $22 : !blt .exitloop
;MATCH ;MATCH
lda.l OWSouthEdges+14,x : tay ;y = record id of dest lda.l OWSouthEdges+14,x : tay ;y = record id of dest
lda.l OWSouthEdges+12,x ;a = current terrain
ldx.w #OWNorthEdges ;x = address of table ldx.w #OWNorthEdges ;x = address of table
bra .matchfound bra .matchfound
+ dec : bne + ; west + dec : bne + ; west
@@ -650,6 +688,7 @@ OWSearchTransition:
lda.l OWWestEdges+2,x : cmp $20 : !blt .exitloop lda.l OWWestEdges+2,x : cmp $20 : !blt .exitloop
;MATCH ;MATCH
lda.l OWWestEdges+14,x : tay ;y = record id of dest lda.l OWWestEdges+14,x : tay ;y = record id of dest
lda.l OWWestEdges+12,x ;a = current terrain
ldx.w #OWEastEdges ;x = address of table ldx.w #OWEastEdges ;x = address of table
bra .matchfound bra .matchfound
+ lda.l OWEastEdges,x : dec ;east + lda.l OWEastEdges,x : dec ;east
@@ -657,15 +696,13 @@ OWSearchTransition:
lda.l OWEastEdges+2,x : cmp $20 : !blt .exitloop lda.l OWEastEdges+2,x : cmp $20 : !blt .exitloop
;MATCH ;MATCH
lda.l OWEastEdges+14,x : tay ;y = record id of dest lda.l OWEastEdges+14,x : tay ;y = record id of dest
lda.l OWEastEdges+12,x ;a = current terrain
ldx.w #OWWestEdges ;x = address of table ldx.w #OWWestEdges ;x = address of table
.matchfound .matchfound
stx $06f8 : sty $06fa : sec : rts stx $06f8 : sty $06fa : sta $0704 : sec : rts
plx : pla : pea $0001 : phx plx : pla : pea $0001 : phx
sec : rts sec : rts
.exitloop
clc : rts
} }
OWNewDestination: OWNewDestination:
{ {
@@ -698,6 +735,16 @@ OWNewDestination:
LDA.w $000F,X : AND.w #$00FF : STA.w $06FC ; position to walk to after transition (if non-zero) LDA.w $000F,X : AND.w #$00FF : STA.w $06FC ; position to walk to after transition (if non-zero)
LDY.w #$0000
LDA.w $000C,X : AND.w #$0001 : BEQ + ; check if going to water transition
LDA.w $0704 : AND.w #$0001 : BNE ++ ; check if coming from water transition
INY : BRA ++
+
LDA.w $0704 : BEQ ++ ; check if coming from water transition
LDY.w #$0002
++
STY.b $08
pla : pla : sep #$10 : ldy $418 pla : pla : sep #$10 : ldy $418
ldx OWCoordIndex,y : lda $20,x : and #$fe00 : pha ldx OWCoordIndex,y : lda $20,x : and #$fe00 : pha
lda $20,x : and #$01ff : pha ;s1 = relative cur, s3 = ow cur lda $20,x : and #$01ff : pha ;s1 = relative cur, s3 = ow cur
@@ -743,27 +790,37 @@ OWNewDestination:
sep #$30 : lda $04 : and #$3f : !add OWOppSlotOffset,y : asl : sta $700 sep #$30 : lda $04 : and #$3f : !add OWOppSlotOffset,y : asl : sta $700
; crossed OW shuffle ; crossed OW shuffle and terrain
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .return ldx $05 : ldy $08 : jsr OWWorldTerrainUpdate
ldx $05 : jsr OWWorldUpdate
.return
lda $05 : sta $8a lda $05 : sta $8a
rep #$30 : rts rep #$30 : rts
} }
OWLoadSpecialArea: OWLoadSpecialArea:
{ {
LDA.l Overworld_LoadSpecialOverworld_RoomId,X : STA.b $A0 LDA.l Overworld_LoadSpecialOverworld_RoomId,X : STA.b $A0
JSL Overworld_LoadSpecialOverworld JSL Overworld_LoadSpecialOverworld ; sets M and X flags
LDA.l OWMode+1 : AND.b #!FLAG_OW_CROSSED : BEQ .return TYX
TYX : LDA.l OWSpecialDestSlot,X : TAX LDY.b #$00
JSR OWWorldUpdate CPX.b #$01 : BNE + ; check if going to water transition
LDA.w $0704 : BNE ++ ; check if coming from water transition
INY : BRA ++
+
LDA.w $0704 : BEQ ++ ; check if coming from water transition
LDY.b #$02
++
LDA.l OWSpecialDestSlot,X : TAX
JSR OWWorldTerrainUpdate
.return .return
RTS RTS
} }
OWWorldUpdate: ; x = owid of destination screen OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water, 2 for water to land, 3 for whirlpools and 0 else
{ {
lda.l OWTileWorldAssoc,x : cmp.l CurrentWorld : beq .return LDA.l OWMode+1 : AND.b #!FLAG_OW_CROSSED : BEQ .not_crossed
LDA.l OWTileWorldAssoc,x : CMP.l CurrentWorld : BNE .crossed
.not_crossed
JMP .normal
.crossed
sta.l CurrentWorld ; change world sta.l CurrentWorld ; change world
; moving mirror portal off screen when in DW ; moving mirror portal off screen when in DW
@@ -781,19 +838,87 @@ OWWorldUpdate: ; x = owid of destination screen
lda CurrentWorld : and.b #$40 : bra + lda CurrentWorld : and.b #$40 : bra +
.inverted lda CurrentWorld : and.b #$40 : eor #$40 .inverted lda CurrentWorld : and.b #$40 : eor #$40
+ cmp #$40 : bne .nobunny + cmp #$40 : bne .nobunny
; turn into bunny
lda $5d : cmp #$04 : beq + ; if swimming, continue LDA.w $0703 : BEQ + ; check if forced transition
lda #$17 : sta $5d CPY.b #$03 : BEQ .end_forced_whirlpool
+ lda #$01 : sta $02e0 : sta $56 LDA.b #$17 : STA.b $5D
bra .return LDA.b #$01 : STA.w $02E0 : STA.b $56
LDA.w $0703 : BRA .end_forced_edge
+
CPY.b #$01 : BEQ .auto ; check if going from land to water
CPY.b #$02 : BEQ .to_bunny_reset_swim ; bunny state if swimming to land
LDA.b $5D : CMP.b #$04 : BNE .to_bunny ; check if swimming
.auto
PHX
LDA.b #$01
LDX.b $5D : CPX.b #$04 : BNE +
INC
+
STA.w $0703
CPY.b #$03 : BEQ .whirlpool
LDA.b #$01 : STA.w $0345
LDX.w $0418
LDA.l OWAutoWalk,X : STA.b $49
STZ.b $5D
PLX
BRA .to_pseudo_bunny
.whirlpool
PLX : RTS
.to_bunny_reset_swim
JSL Link_ResetSwimmingState
STZ.w $0345
.to_bunny
LDA.b #$17 : STA.b $5D
.to_pseudo_bunny
LDA.b #$01 : STA.w $02E0 : STA.b $56
RTS
.nobunny .nobunny
lda $5d : cmp #$17 : bne + ; retain current state unless bunny lda $5d : cmp #$17 : bne + ; retain current state unless bunny
stz $5d stz $5d
+ stz $02e0 : stz $56 + stz $02e0 : stz $56
.normal
LDA.w $0703 : BEQ .not_forced ; check if forced transition
CPY.b #$03 : BEQ .end_forced_whirlpool
.end_forced_edge
STZ.b $49 : STZ.w $0345
.end_forced_whirlpool
STZ.w $0703
CMP.b #$02 : BNE +
DEC : STA.w $0345
LDA.b #$04 : BRA .set_state
+
CMP.b #$03 : BNE ++
LDA.b #$17
.set_state
STA.b $5D
++
RTS
.not_forced
CPY.b #$02 : BNE + ; check if going from water to land
JSL Link_ResetSwimmingState
STZ.w $0345
LDA.b $5D : CMP.b #$04 : BNE + ; check if swimming
STZ.b $5D
+
CPY.b #$01 : BNE .return ; check if going from land to water
LDA.b #$01 : STA.w $0345
LDA.b $5D : CMP.b #$04 : BEQ .return ; check if swimming
LDA.l FlippersEquipment : BEQ .no_flippers ; check if flippers obtained
LDA.b $5D : CMP.b #$17 : BEQ .no_flippers ; check if bunny
LDA.b #$04 : STA.b $5D : RTS
.no_flippers
PHX
INC : STA.w $0703
LDX.w $0418
LDA.l OWAutoWalk,X : STA.b $49
PLX
LDA.b $5D : CMP.b #$17 : BNE .return ; check if bunny
LDA.b #$03 : STA.w $0703
STZ.b $5D
.return .return
rts RTS
} }
OWAdjustExitPosition: OWAdjustExitPosition:
{ {
@@ -807,6 +932,9 @@ OWAdjustExitPosition:
LDA.b #$3B : STA.w $061E LDA.b #$3B : STA.w $061E
INC.b $23 : INC.w $061D : INC.w $061F INC.b $23 : INC.w $061D : INC.w $061F
.normal .normal
LDA.w $0703 : BEQ +
LDA.b #$3C : STA.w $012E ; play error sound before forced transition
+
INC.b $11 : STZ.b $B0 ; what we wrote over INC.b $11 : STZ.b $B0 ; what we wrote over
RTL RTL
} }
@@ -978,7 +1106,7 @@ db $80, $80, $81
org $aaa800 ;PC 152800 org $aaa800 ;PC 152800
OWNorthEdges: OWNorthEdges:
; Min Max Width Mid OW Slot/OWID VRAM *FREE* Dest Index ; Min Max Width Mid OW Slot/OWID VRAM Terrain Dest Index
dw $00a0, $00a0, $0000, $00a0, $0000, $0000, $0000, $B040 ;Lost Woods (exit only) dw $00a0, $00a0, $0000, $00a0, $0000, $0000, $0000, $B040 ;Lost Woods (exit only)
dw $0458, $0540, $00e8, $04cc, $0a0a, $0000, $0000, $0000 dw $0458, $0540, $00e8, $04cc, $0a0a, $0000, $0000, $0000
dw $0f38, $0f60, $0028, $0f4c, $0f0f, $0000, $0000, $2041 ;Waterfall (exit only) dw $0f38, $0f60, $0028, $0f4c, $0f0f, $0000, $0000, $2041 ;Waterfall (exit only)
@@ -993,7 +1121,7 @@ dw $02e8, $0348, $0060, $0318, $1819, $0000, $0000, $0008
dw $0478, $04d0, $0058, $04a4, $1a1a, $0000, $0000, $0009 dw $0478, $04d0, $0058, $04a4, $1a1a, $0000, $0000, $0009
dw $0510, $0538, $0028, $0524, $1a1a, $0000, $0000, $000a dw $0510, $0538, $0028, $0524, $1a1a, $0000, $0000, $000a
dw $0a48, $0af0, $00a8, $0a9c, $1d1d, $0000, $0000, $000b dw $0a48, $0af0, $00a8, $0a9c, $1d1d, $0000, $0000, $000b
dw $0b28, $0b38, $0010, $0b30, $1d1d, $0000, $0000, $000c dw $0b28, $0b38, $0010, $0b30, $1d1d, $0000, $0001, $000c
dw $0b70, $0ba0, $0030, $0b88, $1d1d, $0000, $0000, $000d dw $0b70, $0ba0, $0030, $0b88, $1d1d, $0000, $0000, $000d
dw $0a40, $0b10, $00d0, $0aa8, $2525, $0000, $0000, $000e dw $0a40, $0b10, $00d0, $0aa8, $2525, $0000, $0000, $000e
dw $0350, $0390, $0040, $0370, $2929, $0000, $0000, $000f dw $0350, $0390, $0040, $0370, $2929, $0000, $0000, $000f
@@ -1007,11 +1135,11 @@ dw $04d8, $04f8, $0020, $04e8, $3232, $0000, $0000, $0016
dw $0688, $06b0, $0028, $069c, $3333, $0000, $0000, $0017 dw $0688, $06b0, $0028, $069c, $3333, $0000, $0000, $0017
dw $08d0, $08f0, $0020, $08e0, $3434, $0000, $0000, $0018 dw $08d0, $08f0, $0020, $08e0, $3434, $0000, $0000, $0018
dw $0a80, $0b40, $00c0, $0ae0, $3535, $0000, $0000, $0019 dw $0a80, $0b40, $00c0, $0ae0, $3535, $0000, $0000, $0019
dw $0d38, $0d58, $0020, $0d48, $3536, $0000, $0000, $001a dw $0d38, $0d58, $0020, $0d48, $3536, $0000, $0001, $001a
dw $0d90, $0da0, $0010, $0d98, $3536, $0000, $0000, $001b dw $0d90, $0da0, $0010, $0d98, $3536, $0000, $0000, $001b
dw $06a0, $07b0, $0110, $0728, $3b3b, $0000, $0000, $001c dw $06a0, $07b0, $0110, $0728, $3b3b, $0000, $0000, $001c
dw $0830, $09b0, $0180, $08f0, $3c3c, $0000, $0000, $001d dw $0830, $09b0, $0180, $08f0, $3c3c, $0000, $0000, $001d
dw $0e78, $0e88, $0010, $0e80, $3f3f, $0000, $0000, $001e dw $0e78, $0e88, $0010, $0e80, $3f3f, $0000, $0001, $001e
dw $0ee0, $0fc0, $00e0, $0f50, $3f3f, $0000, $0000, $001f dw $0ee0, $0fc0, $00e0, $0f50, $3f3f, $0000, $0000, $001f
dw $0458, $0540, $00e8, $04cc, $4a4a, $0000, $0000, $0020 dw $0458, $0540, $00e8, $04cc, $4a4a, $0000, $0000, $0020
dw $0058, $0058, $0000, $0058, $5050, $0000, $0000, $0021 dw $0058, $0058, $0000, $0058, $5050, $0000, $0000, $0021
@@ -1025,7 +1153,7 @@ dw $02e8, $0348, $0060, $0318, $5859, $0000, $0000, $0028
dw $0478, $04d0, $0058, $04a4, $5a5a, $0000, $0000, $0029 dw $0478, $04d0, $0058, $04a4, $5a5a, $0000, $0000, $0029
dw $0510, $0538, $0028, $0524, $5a5a, $0000, $0000, $002a dw $0510, $0538, $0028, $0524, $5a5a, $0000, $0000, $002a
dw $0a48, $0af0, $00a8, $0a9c, $5d5d, $0000, $0000, $002b dw $0a48, $0af0, $00a8, $0a9c, $5d5d, $0000, $0000, $002b
dw $0b28, $0b38, $0010, $0b30, $5d5d, $0000, $0000, $002c dw $0b28, $0b38, $0010, $0b30, $5d5d, $0000, $0001, $002c
dw $0b70, $0ba0, $0030, $0b88, $5d5d, $0000, $0000, $002d dw $0b70, $0ba0, $0030, $0b88, $5d5d, $0000, $0000, $002d
dw $0a40, $0b10, $00d0, $0aa8, $6565, $0000, $0000, $002e dw $0a40, $0b10, $00d0, $0aa8, $6565, $0000, $0000, $002e
dw $0350, $0390, $0040, $0370, $6969, $0000, $0000, $002f dw $0350, $0390, $0040, $0370, $6969, $0000, $0000, $002f
@@ -1039,11 +1167,11 @@ dw $04d8, $04f8, $0020, $04e8, $7272, $0000, $0000, $0036
dw $0688, $06b0, $0028, $069c, $7373, $0000, $0000, $0037 dw $0688, $06b0, $0028, $069c, $7373, $0000, $0000, $0037
dw $08d0, $08f0, $0020, $08e0, $7474, $0000, $0000, $0038 dw $08d0, $08f0, $0020, $08e0, $7474, $0000, $0000, $0038
dw $0a80, $0b40, $00c0, $0ae0, $7575, $0000, $0000, $0039 dw $0a80, $0b40, $00c0, $0ae0, $7575, $0000, $0000, $0039
dw $0d38, $0d58, $0020, $0d48, $7576, $0000, $0000, $003a dw $0d38, $0d58, $0020, $0d48, $7576, $0000, $0001, $003a
dw $0d90, $0da0, $0010, $0d98, $7576, $0000, $0000, $003b dw $0d90, $0da0, $0010, $0d98, $7576, $0000, $0000, $003b
dw $06a0, $07b0, $0110, $0728, $7b7b, $0000, $0000, $003c dw $06a0, $07b0, $0110, $0728, $7b7b, $0000, $0000, $003c
dw $0830, $09b0, $0180, $08f0, $7c7c, $0000, $0000, $003d dw $0830, $09b0, $0180, $08f0, $7c7c, $0000, $0000, $003d
dw $0e78, $0e88, $0010, $0e80, $7f7f, $0000, $0000, $003e dw $0e78, $0e88, $0010, $0e80, $7f7f, $0000, $0001, $003e
dw $0ee0, $0fc0, $00e0, $0f50, $7f7f, $0000, $0000, $003f dw $0ee0, $0fc0, $00e0, $0f50, $7f7f, $0000, $0000, $003f
OWSouthEdges: OWSouthEdges:
dw $0458, $0540, $00e8, $04cc, $0202, $0000, $0000, $0001 dw $0458, $0540, $00e8, $04cc, $0202, $0000, $0000, $0001
@@ -1058,7 +1186,7 @@ dw $02e8, $0348, $0060, $0318, $1111, $0000, $0000, $000a
dw $0478, $04d0, $0058, $04a4, $1212, $0000, $0000, $000b dw $0478, $04d0, $0058, $04a4, $1212, $0000, $0000, $000b
dw $0510, $0538, $0028, $0524, $1212, $0000, $0000, $000c dw $0510, $0538, $0028, $0524, $1212, $0000, $0000, $000c
dw $0a48, $0af0, $00a8, $0a9c, $1515, $0000, $0000, $000d dw $0a48, $0af0, $00a8, $0a9c, $1515, $0000, $0000, $000d
dw $0b28, $0b38, $0010, $0b30, $1515, $0000, $0000, $000e dw $0b28, $0b38, $0010, $0b30, $1515, $0000, $0001, $000e
dw $0b70, $0ba0, $0030, $0b88, $1515, $0000, $0000, $000f dw $0b70, $0ba0, $0030, $0b88, $1515, $0000, $0000, $000f
dw $0a40, $0b10, $00d0, $0aa8, $1d1d, $0000, $0000, $0010 dw $0a40, $0b10, $00d0, $0aa8, $1d1d, $0000, $0000, $0010
dw $0350, $0390, $0040, $0370, $1821, $0000, $0000, $0011 dw $0350, $0390, $0040, $0370, $1821, $0000, $0000, $0011
@@ -1072,11 +1200,11 @@ dw $04d8, $04f8, $0020, $04e8, $2a2a, $0000, $0000, $0018
dw $0688, $06b0, $0028, $069c, $2b2b, $0000, $0000, $0019 dw $0688, $06b0, $0028, $069c, $2b2b, $0000, $0000, $0019
dw $08d0, $08f0, $0020, $08e0, $2c2c, $0000, $0000, $001a dw $08d0, $08f0, $0020, $08e0, $2c2c, $0000, $0000, $001a
dw $0a80, $0b40, $00c0, $0ae0, $2d2d, $0000, $0000, $001b dw $0a80, $0b40, $00c0, $0ae0, $2d2d, $0000, $0000, $001b
dw $0d38, $0d58, $0020, $0d48, $2e2e, $0000, $0000, $001c dw $0d38, $0d58, $0020, $0d48, $2e2e, $0000, $0001, $001c
dw $0d90, $0da0, $0010, $0d98, $2e2e, $0000, $0000, $001d dw $0d90, $0da0, $0010, $0d98, $2e2e, $0000, $0000, $001d
dw $06a0, $07b0, $0110, $0728, $3333, $0000, $0000, $001e dw $06a0, $07b0, $0110, $0728, $3333, $0000, $0000, $001e
dw $0830, $09b0, $0180, $08f0, $3434, $0000, $0000, $001f dw $0830, $09b0, $0180, $08f0, $3434, $0000, $0000, $001f
dw $0e78, $0e88, $0010, $0e80, $3737, $0000, $0000, $0020 dw $0e78, $0e88, $0010, $0e80, $3737, $0000, $0001, $0020
dw $0ee0, $0fc0, $00e0, $0f50, $3737, $0000, $0000, $0021 dw $0ee0, $0fc0, $00e0, $0f50, $3737, $0000, $0000, $0021
dw $0458, $0540, $00e8, $04cc, $4242, $0000, $0000, $0022 dw $0458, $0540, $00e8, $04cc, $4242, $0000, $0000, $0022
dw $0058, $0058, $0000, $0058, $4048, $0000, $0000, $0023 dw $0058, $0058, $0000, $0058, $4048, $0000, $0000, $0023
@@ -1090,7 +1218,7 @@ dw $02e8, $0348, $0060, $0318, $5151, $0000, $0000, $002a
dw $0478, $04d0, $0058, $04a4, $5252, $0000, $0000, $002b dw $0478, $04d0, $0058, $04a4, $5252, $0000, $0000, $002b
dw $0510, $0538, $0028, $0524, $5252, $0000, $0000, $002c dw $0510, $0538, $0028, $0524, $5252, $0000, $0000, $002c
dw $0a48, $0af0, $00a8, $0a9c, $5555, $0000, $0000, $002d dw $0a48, $0af0, $00a8, $0a9c, $5555, $0000, $0000, $002d
dw $0b28, $0b38, $0010, $0b30, $5555, $0000, $0000, $002e dw $0b28, $0b38, $0010, $0b30, $5555, $0000, $0001, $002e
dw $0b70, $0ba0, $0030, $0b88, $5555, $0000, $0000, $002f dw $0b70, $0ba0, $0030, $0b88, $5555, $0000, $0000, $002f
dw $0a40, $0b10, $00d0, $0aa8, $5d5d, $0000, $0000, $0030 dw $0a40, $0b10, $00d0, $0aa8, $5d5d, $0000, $0000, $0030
dw $0350, $0390, $0040, $0370, $5861, $0000, $0000, $0031 dw $0350, $0390, $0040, $0370, $5861, $0000, $0000, $0031
@@ -1104,11 +1232,11 @@ dw $04d8, $04f8, $0020, $04e8, $6a6a, $0000, $0000, $0038
dw $0688, $06b0, $0028, $069c, $6b6b, $0000, $0000, $0039 dw $0688, $06b0, $0028, $069c, $6b6b, $0000, $0000, $0039
dw $08d0, $08f0, $0020, $08e0, $6c6c, $0000, $0000, $003a dw $08d0, $08f0, $0020, $08e0, $6c6c, $0000, $0000, $003a
dw $0a80, $0b40, $00c0, $0ae0, $6d6d, $0000, $0000, $003b dw $0a80, $0b40, $00c0, $0ae0, $6d6d, $0000, $0000, $003b
dw $0d38, $0d58, $0020, $0d48, $6e6e, $0000, $0000, $003c dw $0d38, $0d58, $0020, $0d48, $6e6e, $0000, $0001, $003c
dw $0d90, $0da0, $0010, $0d98, $6e6e, $0000, $0000, $003d dw $0d90, $0da0, $0010, $0d98, $6e6e, $0000, $0000, $003d
dw $06a0, $07b0, $0110, $0728, $7373, $0000, $0000, $003e dw $06a0, $07b0, $0110, $0728, $7373, $0000, $0000, $003e
dw $0830, $09b0, $0180, $08f0, $7474, $0000, $0000, $003f dw $0830, $09b0, $0180, $08f0, $7474, $0000, $0000, $003f
dw $0e78, $0e88, $0010, $0e80, $7777, $0000, $0000, $0040 dw $0e78, $0e88, $0010, $0e80, $7777, $0000, $0001, $0040
dw $0ee0, $0fc0, $00e0, $0f50, $7777, $0000, $0000, $0041 dw $0ee0, $0fc0, $00e0, $0f50, $7777, $0000, $0000, $0041
dw $0080, $0080, $0000, $0080, $8080, $0000, $0000, $0000 ;Pedestal (unused) dw $0080, $0080, $0000, $0080, $8080, $0000, $0000, $0000 ;Pedestal (unused)
dw $0288, $02c0, $0038, $02a4, $8189, $0000, $0000, $0002 ;Zora (unused) dw $0288, $02c0, $0038, $02a4, $8189, $0000, $0000, $0002 ;Zora (unused)
@@ -1123,10 +1251,10 @@ dw $0488, $0500, $0078, $04c4, $1313, $0000, $0000, $0006
dw $0538, $05a8, $0070, $0570, $1313, $0000, $0000, $0007 dw $0538, $05a8, $0070, $0570, $1313, $0000, $0000, $0007
dw $0470, $05a8, $0138, $050c, $1414, $0000, $0000, $0008 dw $0470, $05a8, $0138, $050c, $1414, $0000, $0000, $0008
dw $0470, $0598, $0128, $0504, $1515, $0000, $0000, $0009 dw $0470, $0598, $0128, $0504, $1515, $0000, $0000, $0009
dw $0480, $0488, $0008, $0484, $1616, $0000, $0000, $000a dw $0480, $0488, $0008, $0484, $1616, $0000, $0001, $000a
dw $04b0, $0510, $0060, $04e0, $1616, $0000, $0000, $000b dw $04b0, $0510, $0060, $04e0, $1616, $0000, $0000, $000b
dw $0560, $0588, $0028, $0574, $1616, $0000, $0000, $000c dw $0560, $0588, $0028, $0574, $1616, $0000, $0000, $000c
dw $0450, $0458, $0008, $0454, $1717, $0000, $0000, $000d dw $0450, $0458, $0008, $0454, $1717, $0000, $0001, $000d
dw $0480, $04a8, $0028, $0494, $1717, $0000, $0000, $000e dw $0480, $04a8, $0028, $0494, $1717, $0000, $0000, $000e
dw $0718, $0738, $0020, $0728, $1b1b, $0000, $0000, $000f dw $0718, $0738, $0020, $0728, $1b1b, $0000, $0000, $000f
dw $0908, $0948, $0040, $0928, $2222, $0000, $0000, $0010 dw $0908, $0948, $0040, $0928, $2222, $0000, $0000, $0010
@@ -1136,13 +1264,13 @@ dw $0b60, $0ba0, $0040, $0b80, $2a2a, $0000, $0000, $0013
dw $0ab0, $0ad0, $0020, $0ac0, $2c2c, $0000, $0000, $0014 dw $0ab0, $0ad0, $0020, $0ac0, $2c2c, $0000, $0000, $0014
dw $0af0, $0b40, $0050, $0b18, $2c2c, $0000, $0000, $0015 dw $0af0, $0b40, $0050, $0b18, $2c2c, $0000, $0000, $0015
dw $0b78, $0ba0, $0028, $0b8c, $2c2c, $0000, $0000, $0016 dw $0b78, $0ba0, $0028, $0b8c, $2c2c, $0000, $0000, $0016
dw $0b10, $0b28, $0018, $0b1c, $2d2d, $0000, $0000, $604a ;Stone Bridge (exit only) dw $0b10, $0b28, $0018, $0b1c, $2d2d, $0000, $0001, $604a ;Stone Bridge (exit only)
dw $0b68, $0b98, $0030, $0b80, $2d2d, $0000, $0000, $0017 dw $0b68, $0b98, $0030, $0b80, $2d2d, $0000, $0000, $0017
dw $0a68, $0ab8, $0050, $0a90, $2e2e, $0000, $0000, $0018 dw $0a68, $0ab8, $0050, $0a90, $2e2e, $0000, $0000, $0018
dw $0b00, $0b78, $0078, $0b3c, $2e2e, $0000, $0000, $0019 dw $0b00, $0b78, $0078, $0b3c, $2e2e, $0000, $0001, $0019
dw $0c50, $0db8, $0168, $0d04, $3333, $0000, $0000, $001a dw $0c50, $0db8, $0168, $0d04, $3333, $0000, $0000, $001a
dw $0c78, $0ce3, $006b, $0cad, $3434, $0000, $0000, $001b dw $0c78, $0ce3, $006b, $0cad, $3434, $0000, $0000, $001b
dw $0ce4, $0d33, $004f, $0d0b, $3434, $0000, $0000, $001c dw $0ce4, $0d33, $004f, $0d0b, $3434, $0000, $0001, $001c
dw $0d34, $0db8, $0084, $0d76, $3434, $0000, $0000, $001d dw $0d34, $0db8, $0084, $0d76, $3434, $0000, $0000, $001d
dw $0ea8, $0f20, $0078, $0ee4, $3a3a, $0000, $0000, $001e dw $0ea8, $0f20, $0078, $0ee4, $3a3a, $0000, $0000, $001e
dw $0f70, $0fa8, $0038, $0f8c, $3a3a, $0000, $0000, $001f dw $0f70, $0fa8, $0038, $0f8c, $3a3a, $0000, $0000, $001f
@@ -1150,7 +1278,7 @@ dw $0f18, $0f18, $0000, $0f18, $3b3b, $0000, $0000, $0020
dw $0fc8, $0fc8, $0000, $0fc8, $3b3b, $0000, $0000, $0021 dw $0fc8, $0fc8, $0000, $0fc8, $3b3b, $0000, $0000, $0021
dw $0e28, $0fb8, $0190, $0ef0, $3c3c, $0000, $0000, $0022 dw $0e28, $0fb8, $0190, $0ef0, $3c3c, $0000, $0000, $0022
dw $0f78, $0fb8, $0040, $0f98, $353d, $0000, $0000, $0023 dw $0f78, $0fb8, $0040, $0f98, $353d, $0000, $0000, $0023
dw $0f20, $0f40, $0020, $0f30, $3f3f, $0000, $0000, $0024 dw $0f20, $0f40, $0020, $0f30, $3f3f, $0000, $0001, $0024
dw $0f70, $0fb8, $0048, $0f94, $3f3f, $0000, $0000, $0025 dw $0f70, $0fb8, $0048, $0f94, $3f3f, $0000, $0000, $0025
dw $0070, $00a0, $0030, $0088, $4242, $0000, $0000, $0026 dw $0070, $00a0, $0030, $0088, $4242, $0000, $0000, $0026
dw $0068, $0078, $0010, $0070, $4545, $0000, $0000, $0027 dw $0068, $0078, $0010, $0070, $4545, $0000, $0000, $0027
@@ -1162,10 +1290,10 @@ dw $0488, $0500, $0078, $04c4, $5353, $0000, $0000, $002c
dw $0538, $05a8, $0070, $0570, $5353, $0000, $0000, $002d dw $0538, $05a8, $0070, $0570, $5353, $0000, $0000, $002d
dw $0470, $05a8, $0138, $050c, $5454, $0000, $0000, $002e dw $0470, $05a8, $0138, $050c, $5454, $0000, $0000, $002e
dw $0470, $0598, $0128, $0504, $5555, $0000, $0000, $002f dw $0470, $0598, $0128, $0504, $5555, $0000, $0000, $002f
dw $0480, $0488, $0008, $0484, $5656, $0000, $0000, $0030 dw $0480, $0488, $0008, $0484, $5656, $0000, $0001, $0030
dw $04b0, $0510, $0060, $04e0, $5656, $0000, $0000, $0031 dw $04b0, $0510, $0060, $04e0, $5656, $0000, $0000, $0031
dw $0560, $0588, $0028, $0574, $5656, $0000, $0000, $0032 dw $0560, $0588, $0028, $0574, $5656, $0000, $0000, $0032
dw $0450, $0458, $0008, $0454, $5757, $0000, $0000, $0033 dw $0450, $0458, $0008, $0454, $5757, $0000, $0001, $0033
dw $0480, $04a8, $0028, $0494, $5757, $0000, $0000, $0034 dw $0480, $04a8, $0028, $0494, $5757, $0000, $0000, $0034
dw $0908, $0948, $0040, $0928, $6262, $0000, $0000, $0035 dw $0908, $0948, $0040, $0928, $6262, $0000, $0000, $0035
dw $0878, $08a8, $0030, $0890, $6565, $0000, $0000, $0036 dw $0878, $08a8, $0030, $0890, $6565, $0000, $0000, $0036
@@ -1177,16 +1305,16 @@ dw $0af0, $0b40, $0050, $0b18, $6c6c, $0000, $0000, $003b
dw $0b78, $0ba0, $0028, $0b8c, $6c6c, $0000, $0000, $003c dw $0b78, $0ba0, $0028, $0b8c, $6c6c, $0000, $0000, $003c
dw $0b68, $0b98, $0030, $0b80, $6d6d, $0000, $0000, $003d dw $0b68, $0b98, $0030, $0b80, $6d6d, $0000, $0000, $003d
dw $0a68, $0ab8, $0050, $0a90, $6e6e, $0000, $0000, $003e dw $0a68, $0ab8, $0050, $0a90, $6e6e, $0000, $0000, $003e
dw $0b00, $0b78, $0078, $0b3c, $6e6e, $0000, $0000, $003f dw $0b00, $0b78, $0078, $0b3c, $6e6e, $0000, $0001, $003f
dw $0c50, $0db8, $0168, $0d04, $7373, $0000, $0000, $0040 dw $0c50, $0db8, $0168, $0d04, $7373, $0000, $0000, $0040
dw $0c78, $0ce3, $006b, $0cad, $7474, $0000, $0000, $0041 dw $0c78, $0ce3, $006b, $0cad, $7474, $0000, $0000, $0041
dw $0ce4, $0d33, $004f, $0d0b, $7474, $0000, $0000, $0042 dw $0ce4, $0d33, $004f, $0d0b, $7474, $0000, $0001, $0042
dw $0d34, $0db8, $0084, $0d76, $7474, $0000, $0000, $0043 dw $0d34, $0db8, $0084, $0d76, $7474, $0000, $0000, $0043
dw $0f18, $0f18, $0000, $0f18, $7b7b, $0000, $0000, $0044 dw $0f18, $0f18, $0000, $0f18, $7b7b, $0000, $0000, $0044
dw $0fc8, $0fc8, $0000, $0fc8, $7b7b, $0000, $0000, $0045 dw $0fc8, $0fc8, $0000, $0fc8, $7b7b, $0000, $0000, $0045
dw $0e28, $0fb8, $0190, $0ef0, $7c7c, $0000, $0000, $0046 dw $0e28, $0fb8, $0190, $0ef0, $7c7c, $0000, $0000, $0046
dw $0f78, $0fb8, $0040, $0f98, $757d, $0000, $0000, $0047 dw $0f78, $0fb8, $0040, $0f98, $757d, $0000, $0000, $0047
dw $0f20, $0f40, $0020, $0f30, $7f7f, $0000, $0000, $0048 dw $0f20, $0f40, $0020, $0f30, $7f7f, $0000, $0001, $0048
dw $0f70, $0fb8, $0048, $0f94, $7f7f, $0000, $0000, $0049 dw $0f70, $0fb8, $0048, $0f94, $7f7f, $0000, $0000, $0049
OWEastEdges: OWEastEdges:
dw $0070, $00a0, $0030, $0088, $0001, $0000, $0000, $0000 dw $0070, $00a0, $0030, $0088, $0001, $0000, $0000, $0000
@@ -1199,10 +1327,10 @@ dw $0488, $0500, $0078, $04c4, $1212, $0000, $0000, $0006
dw $0538, $05a8, $0070, $0570, $1212, $0000, $0000, $0007 dw $0538, $05a8, $0070, $0570, $1212, $0000, $0000, $0007
dw $0470, $05a8, $0138, $050c, $1313, $0000, $0000, $0008 dw $0470, $05a8, $0138, $050c, $1313, $0000, $0000, $0008
dw $0470, $0598, $0128, $0504, $1414, $0000, $0000, $0009 dw $0470, $0598, $0128, $0504, $1414, $0000, $0000, $0009
dw $0480, $0488, $0008, $0484, $1515, $0000, $0000, $000a dw $0480, $0488, $0008, $0484, $1515, $0000, $0001, $000a
dw $04b0, $0510, $0060, $04e0, $1515, $0000, $0000, $000b dw $04b0, $0510, $0060, $04e0, $1515, $0000, $0000, $000b
dw $0560, $0588, $0028, $0574, $1515, $0000, $0000, $000c dw $0560, $0588, $0028, $0574, $1515, $0000, $0000, $000c
dw $0450, $0458, $0008, $0454, $1616, $0000, $0000, $000d dw $0450, $0458, $0008, $0454, $1616, $0000, $0001, $000d
dw $0480, $04a8, $0028, $0494, $1616, $0000, $0000, $000e dw $0480, $04a8, $0028, $0494, $1616, $0000, $0000, $000e
dw $0718, $0738, $0020, $0728, $1a1a, $0000, $0000, $000f dw $0718, $0738, $0020, $0728, $1a1a, $0000, $0000, $000f
dw $0908, $0948, $0040, $0928, $1821, $0000, $0000, $0010 dw $0908, $0948, $0040, $0928, $1821, $0000, $0000, $0010
@@ -1214,10 +1342,10 @@ dw $0af0, $0b40, $0050, $0b18, $2b2b, $0000, $0000, $0015
dw $0b78, $0ba0, $0028, $0b8c, $2b2b, $0000, $0000, $0016 dw $0b78, $0ba0, $0028, $0b8c, $2b2b, $0000, $0000, $0016
dw $0b68, $0b98, $0030, $0b80, $2c2c, $0000, $0000, $0018 dw $0b68, $0b98, $0030, $0b80, $2c2c, $0000, $0000, $0018
dw $0a68, $0ab8, $0050, $0a90, $2d2d, $0000, $0000, $0019 dw $0a68, $0ab8, $0050, $0a90, $2d2d, $0000, $0000, $0019
dw $0b00, $0b78, $0078, $0b3c, $2d2d, $0000, $0000, $001a dw $0b00, $0b78, $0078, $0b3c, $2d2d, $0000, $0001, $001a
dw $0c50, $0db8, $0168, $0d04, $3232, $0000, $0000, $001b dw $0c50, $0db8, $0168, $0d04, $3232, $0000, $0000, $001b
dw $0c78, $0ce3, $006b, $0cad, $3333, $0000, $0000, $001c dw $0c78, $0ce3, $006b, $0cad, $3333, $0000, $0000, $001c
dw $0ce4, $0d33, $004f, $0d0b, $3333, $0000, $0000, $001d dw $0ce4, $0d33, $004f, $0d0b, $3333, $0000, $0001, $001d
dw $0d34, $0db8, $0084, $0d76, $3333, $0000, $0000, $001e dw $0d34, $0db8, $0084, $0d76, $3333, $0000, $0000, $001e
dw $0ea8, $0f20, $0078, $0ee4, $3039, $0000, $0000, $001f dw $0ea8, $0f20, $0078, $0ee4, $3039, $0000, $0000, $001f
dw $0f70, $0fa8, $0038, $0f8c, $3039, $0000, $0000, $0020 dw $0f70, $0fa8, $0038, $0f8c, $3039, $0000, $0000, $0020
@@ -1225,7 +1353,7 @@ dw $0f18, $0f18, $0000, $0f18, $3a3a, $0000, $0000, $0021
dw $0fc8, $0fc8, $0000, $0fc8, $3a3a, $0000, $0000, $0022 dw $0fc8, $0fc8, $0000, $0fc8, $3a3a, $0000, $0000, $0022
dw $0e28, $0fb8, $0190, $0ef0, $3b3b, $0000, $0000, $0023 dw $0e28, $0fb8, $0190, $0ef0, $3b3b, $0000, $0000, $0023
dw $0f78, $0fb8, $0040, $0f98, $3c3c, $0000, $0000, $0024 dw $0f78, $0fb8, $0040, $0f98, $3c3c, $0000, $0000, $0024
dw $0f20, $0f40, $0020, $0f30, $353e, $0000, $0000, $0025 dw $0f20, $0f40, $0020, $0f30, $353e, $0000, $0001, $0025
dw $0f70, $0fb8, $0048, $0f94, $353e, $0000, $0000, $0026 dw $0f70, $0fb8, $0048, $0f94, $353e, $0000, $0000, $0026
dw $0070, $00a0, $0030, $0088, $4041, $0000, $0000, $0027 ;Skull Woods dw $0070, $00a0, $0030, $0088, $4041, $0000, $0000, $0027 ;Skull Woods
dw $0068, $0078, $0010, $0070, $4344, $0000, $0000, $0028 dw $0068, $0078, $0010, $0070, $4344, $0000, $0000, $0028
@@ -1237,10 +1365,10 @@ dw $0488, $0500, $0078, $04c4, $5252, $0000, $0000, $002d
dw $0538, $05a8, $0070, $0570, $5252, $0000, $0000, $002e dw $0538, $05a8, $0070, $0570, $5252, $0000, $0000, $002e
dw $0470, $05a8, $0138, $050c, $5353, $0000, $0000, $002f dw $0470, $05a8, $0138, $050c, $5353, $0000, $0000, $002f
dw $0470, $0598, $0128, $0504, $5454, $0000, $0000, $0030 dw $0470, $0598, $0128, $0504, $5454, $0000, $0000, $0030
dw $0480, $0488, $0008, $0484, $5555, $0000, $0000, $0031 dw $0480, $0488, $0008, $0484, $5555, $0000, $0001, $0031
dw $04b0, $0510, $0060, $04e0, $5555, $0000, $0000, $0032 dw $04b0, $0510, $0060, $04e0, $5555, $0000, $0000, $0032
dw $0560, $0588, $0028, $0574, $5555, $0000, $0000, $0033 dw $0560, $0588, $0028, $0574, $5555, $0000, $0000, $0033
dw $0450, $0458, $0008, $0454, $5656, $0000, $0000, $0034 dw $0450, $0458, $0008, $0454, $5656, $0000, $0001, $0034
dw $0480, $04a8, $0028, $0494, $5656, $0000, $0000, $0035 dw $0480, $04a8, $0028, $0494, $5656, $0000, $0000, $0035
dw $0908, $0948, $0040, $0928, $5861, $0000, $0000, $0036 dw $0908, $0948, $0040, $0928, $5861, $0000, $0000, $0036
dw $0878, $08a8, $0030, $0890, $5b64, $0000, $0000, $0037 dw $0878, $08a8, $0030, $0890, $5b64, $0000, $0000, $0037
@@ -1252,18 +1380,18 @@ dw $0af0, $0b40, $0050, $0b18, $6b6b, $0000, $0000, $003c
dw $0b78, $0ba0, $0028, $0b8c, $6b6b, $0000, $0000, $003d dw $0b78, $0ba0, $0028, $0b8c, $6b6b, $0000, $0000, $003d
dw $0b68, $0b98, $0030, $0b80, $6c6c, $0000, $0000, $003e dw $0b68, $0b98, $0030, $0b80, $6c6c, $0000, $0000, $003e
dw $0a68, $0ab8, $0050, $0a90, $6d6d, $0000, $0000, $003f dw $0a68, $0ab8, $0050, $0a90, $6d6d, $0000, $0000, $003f
dw $0b00, $0b78, $0078, $0b3c, $6d6d, $0000, $0000, $0040 dw $0b00, $0b78, $0078, $0b3c, $6d6d, $0000, $0001, $0040
dw $0c50, $0db8, $0168, $0d04, $7272, $0000, $0000, $0041 dw $0c50, $0db8, $0168, $0d04, $7272, $0000, $0000, $0041
dw $0c78, $0ce3, $006b, $0cad, $7373, $0000, $0000, $0042 dw $0c78, $0ce3, $006b, $0cad, $7373, $0000, $0000, $0042
dw $0ce4, $0d33, $004f, $0d0b, $7373, $0000, $0000, $0043 dw $0ce4, $0d33, $004f, $0d0b, $7373, $0000, $0001, $0043
dw $0d34, $0db8, $0084, $0d76, $7373, $0000, $0000, $0044 dw $0d34, $0db8, $0084, $0d76, $7373, $0000, $0000, $0044
dw $0f18, $0f18, $0000, $0f18, $7a7a, $0000, $0000, $0045 dw $0f18, $0f18, $0000, $0f18, $7a7a, $0000, $0000, $0045
dw $0fc8, $0fc8, $0000, $0fc8, $7a7a, $0000, $0000, $0046 dw $0fc8, $0fc8, $0000, $0fc8, $7a7a, $0000, $0000, $0046
dw $0e28, $0fb8, $0190, $0ef0, $7b7b, $0000, $0000, $0047 dw $0e28, $0fb8, $0190, $0ef0, $7b7b, $0000, $0000, $0047
dw $0f78, $0fb8, $0040, $0f98, $7c7c, $0000, $0000, $0048 dw $0f78, $0fb8, $0040, $0f98, $7c7c, $0000, $0000, $0048
dw $0f20, $0f40, $0020, $0f30, $757e, $0000, $0000, $0049 dw $0f20, $0f40, $0020, $0f30, $757e, $0000, $0001, $0049
dw $0f70, $0fb8, $0048, $0f94, $757e, $0000, $0000, $004a dw $0f70, $0fb8, $0048, $0f94, $757e, $0000, $0000, $004a
dw $0058, $00c0, $0068, $008c, $8080, $0000, $0000, $0017 ;Hobo (unused) dw $0058, $00c0, $0068, $008c, $8080, $0000, $0001, $0017 ;Hobo (unused)
org $aab9a0 ;PC 1539a0 org $aab9a0 ;PC 1539a0
OWSpecialDestIndex: OWSpecialDestIndex:

Binary file not shown.

View File

@@ -3,6 +3,9 @@
vanilla: 0 vanilla: 0
parallel: 2 parallel: 2
full: 2 full: 2
overworld_terrain:
on: 1
off: 1
overworld_crossed: overworld_crossed:
none: 4 none: 4
polar: 1 polar: 1

View File

@@ -145,6 +145,10 @@
"full" "full"
] ]
}, },
"ow_terrain": {
"action": "store_true",
"type": "bool"
},
"ow_crossed": { "ow_crossed": {
"choices": [ "choices": [
"none", "none",

View File

@@ -214,6 +214,8 @@
"Full: Overworld transitions are shuffled, but both worlds", "Full: Overworld transitions are shuffled, but both worlds",
" will have an independent map shape." " will have an independent map shape."
], ],
"ow_terrain": [
"With OW Layout Shuffle, this allows land and water edges to be connected." ],
"ow_crossed": [ "ow_crossed": [
"This allows cross-world connections to occur on the overworld.", "This allows cross-world connections to occur on the overworld.",
"None: No transitions are cross-world connections.", "None: No transitions are cross-world connections.",
@@ -226,7 +228,7 @@
], ],
"ow_keepsimilar": [ "ow_keepsimilar": [
"This keeps similar edge transitions together. ie. the two west edges on", "This keeps similar edge transitions together. ie. the two west edges on",
"Potion Shop will be paired with another similar pair." ], "Sanctuary will be paired with another similar pair." ],
"ow_mixed": [ "ow_mixed": [
"Overworld tiles are randomly chosen to become part of the opposite world." "Overworld tiles are randomly chosen to become part of the opposite world."
], ],

View File

@@ -131,6 +131,8 @@
"randomizer.overworld.overworldshuffle.parallel": "Parallel", "randomizer.overworld.overworldshuffle.parallel": "Parallel",
"randomizer.overworld.overworldshuffle.full": "Full", "randomizer.overworld.overworldshuffle.full": "Full",
"randomizer.overworld.terrain": "Free Terrain",
"randomizer.overworld.crossed": "Crossed", "randomizer.overworld.crossed": "Crossed",
"randomizer.overworld.crossed.none": "None", "randomizer.overworld.crossed.none": "None",
"randomizer.overworld.crossed.polar": "Polar", "randomizer.overworld.crossed.polar": "Polar",

View File

@@ -28,7 +28,7 @@
}, },
"mixed": { "mixed": {
"type": "checkbox", "type": "checkbox",
"default": true "default": false
}, },
"whirlpool": { "whirlpool": {
"type": "checkbox", "type": "checkbox",
@@ -45,9 +45,13 @@
} }
}, },
"rightOverworldFrame": { "rightOverworldFrame": {
"terrain": {
"type": "checkbox",
"default": false
},
"keepsimilar": { "keepsimilar": {
"type": "checkbox", "type": "checkbox",
"default": true "default": false
} }
} }
} }

View File

@@ -77,6 +77,7 @@ SETTINGSTOPROCESS = {
}, },
"overworld": { "overworld": {
"overworldshuffle": "ow_shuffle", "overworldshuffle": "ow_shuffle",
"terrain": "ow_terrain",
"crossed": "ow_crossed", "crossed": "ow_crossed",
"keepsimilar": "ow_keepsimilar", "keepsimilar": "ow_keepsimilar",
"mixed": "ow_mixed", "mixed": "ow_mixed",

View File

@@ -33,8 +33,10 @@ def overworld_page(parent):
for key in dictWidgets: for key in dictWidgets:
self.widgets[key] = dictWidgets[key] self.widgets[key] = dictWidgets[key]
packAttrs = {"anchor":E} packAttrs = {"anchor":E}
if key == "keepsimilar": if key == "terrain":
packAttrs = {"side":LEFT, "pady":(18,0)} packAttrs = {"anchor":W, "pady":(3,0)}
elif key == "keepsimilar":
packAttrs = {"anchor":W, "pady":(6,0)}
elif key == "overworldflute": elif key == "overworldflute":
packAttrs["pady"] = (20,0) packAttrs["pady"] = (20,0)
elif key in ["mixed", "whirlpool"]: elif key in ["mixed", "whirlpool"]: