Merge branch 'OverworldShuffleDev' into OverworldShuffle
This commit is contained in:
@@ -1,9 +1,15 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 0.3.3.1
|
||||||
|
- \~Merged in DR v1.2.0.21~
|
||||||
|
- Fixed issue with Old Man death spawning on Pyramid/Castle
|
||||||
|
- Fixed issue with Mixed OWR + Flute Shuffle placing spots on large screens
|
||||||
|
- Fixed issue with mirror portals disappearing in Crossed OWR
|
||||||
|
- Added more OWR preset yamls + some fixes to the existing ones
|
||||||
|
|
||||||
## 0.3.3.0
|
## 0.3.3.0
|
||||||
- Added Customizer support for all remaining OWR options
|
- Added Customizer support for all remaining OWR options
|
||||||
- Added several OWR preset yamls (many ideas are thanks to Catobat)
|
- Added several OWR preset yamls (many ideas are thanks to Catobat)
|
||||||
- Fixed issue with Mixed OWR + Flute Shuffle placing spots on large screens
|
|
||||||
- Removed Limited Crossed OWR and renamed Chaos Crossed to Unrestricted Crossed
|
- Removed Limited Crossed OWR and renamed Chaos Crossed to Unrestricted Crossed
|
||||||
|
|
||||||
## 0.3.2.2
|
## 0.3.2.2
|
||||||
|
|||||||
@@ -178,6 +178,7 @@ def create_door_spoiler(world, player):
|
|||||||
queue = deque(world.dungeon_layouts[player].values())
|
queue = deque(world.dungeon_layouts[player].values())
|
||||||
while len(queue) > 0:
|
while len(queue) > 0:
|
||||||
builder = queue.popleft()
|
builder = queue.popleft()
|
||||||
|
std_flag = world.mode[player] == 'standard' and builder.name == 'Hyrule Castle' and world.shuffle[player] == 'vanilla'
|
||||||
done = set()
|
done = set()
|
||||||
start_regions = set(convert_regions(builder.layout_starts, world, player)) # todo: set all_entrances for basic
|
start_regions = set(convert_regions(builder.layout_starts, world, player)) # todo: set all_entrances for basic
|
||||||
reg_queue = deque(start_regions)
|
reg_queue = deque(start_regions)
|
||||||
@@ -206,11 +207,15 @@ def create_door_spoiler(world, player):
|
|||||||
logger.warning('This is a bug during door spoiler')
|
logger.warning('This is a bug during door spoiler')
|
||||||
elif not isinstance(door_b, Region):
|
elif not isinstance(door_b, Region):
|
||||||
logger.warning('Door not connected: %s', door_a.name)
|
logger.warning('Door not connected: %s', door_a.name)
|
||||||
if connect and connect.type == RegionType.Dungeon and connect not in visited:
|
if valid_connection(connect, std_flag, world, player) and connect not in visited:
|
||||||
visited.add(connect)
|
visited.add(connect)
|
||||||
reg_queue.append(connect)
|
reg_queue.append(connect)
|
||||||
|
|
||||||
|
|
||||||
|
def valid_connection(region, std_flag, world, player):
|
||||||
|
return region and (region.type == RegionType.Dungeon or region.name in world.inaccessible_regions[player] or
|
||||||
|
(std_flag and region.name == 'Hyrule Castle Ledge'))
|
||||||
|
|
||||||
def vanilla_key_logic(world, player):
|
def vanilla_key_logic(world, player):
|
||||||
builders = []
|
builders = []
|
||||||
world.dungeon_layouts[player] = {}
|
world.dungeon_layouts[player] = {}
|
||||||
@@ -3331,6 +3336,9 @@ def find_inaccessible_regions(world, player):
|
|||||||
ledge = world.get_region('Hyrule Castle Ledge', player)
|
ledge = world.get_region('Hyrule Castle Ledge', player)
|
||||||
if any(x for x in ledge.exits if x.connected_region and x.connected_region.name == 'Agahnims Tower Portal'):
|
if any(x for x in ledge.exits if x.connected_region and x.connected_region.name == 'Agahnims Tower Portal'):
|
||||||
world.inaccessible_regions[player].append('Hyrule Castle Ledge')
|
world.inaccessible_regions[player].append('Hyrule Castle Ledge')
|
||||||
|
# this should be considered as part of the inaccessible regions, dungeonssimple?
|
||||||
|
if world.mode[player] == 'standard' and world.shuffle[player] == 'vanilla':
|
||||||
|
world.inaccessible_regions[player].append('Hyrule Castle Ledge')
|
||||||
logger = logging.getLogger('')
|
logger = logging.getLogger('')
|
||||||
#logger.debug('Inaccessible Regions:')
|
#logger.debug('Inaccessible Regions:')
|
||||||
#for r in world.inaccessible_regions[player]:
|
#for r in world.inaccessible_regions[player]:
|
||||||
|
|||||||
2
Main.py
2
Main.py
@@ -36,7 +36,7 @@ from source.overworld.EntranceShuffle2 import link_entrances_new
|
|||||||
from source.tools.BPS import create_bps_from_data
|
from source.tools.BPS import create_bps_from_data
|
||||||
from source.classes.CustomSettings import CustomSettings
|
from source.classes.CustomSettings import CustomSettings
|
||||||
|
|
||||||
version_number = '1.2.0.20'
|
version_number = '1.2.0.21'
|
||||||
version_branch = '-u'
|
version_branch = '-u'
|
||||||
__version__ = f'{version_number}{version_branch}'
|
__version__ = f'{version_number}{version_branch}'
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitType
|
|||||||
from OverworldGlitchRules import create_owg_connections
|
from OverworldGlitchRules import create_owg_connections
|
||||||
from Utils import bidict
|
from Utils import bidict
|
||||||
|
|
||||||
version_number = '0.3.3.0'
|
version_number = '0.3.3.1'
|
||||||
# branch indicator is intentionally different across branches
|
# branch indicator is intentionally different across branches
|
||||||
version_branch = ''
|
version_branch = ''
|
||||||
|
|
||||||
@@ -225,6 +225,7 @@ def link_overworld(world, player):
|
|||||||
edge = world.get_owedge(edgename, player)
|
edge = world.get_owedge(edgename, player)
|
||||||
force_noncrossed.add(edge.name)
|
force_noncrossed.add(edge.name)
|
||||||
if 'limit_crossed' in custom_crossed:
|
if 'limit_crossed' in custom_crossed:
|
||||||
|
if world.owCrossed[player] == 'unrestricted':
|
||||||
limited_crossed = custom_crossed['limit_crossed']
|
limited_crossed = custom_crossed['limit_crossed']
|
||||||
if 'undefined_chance' in custom_crossed:
|
if 'undefined_chance' in custom_crossed:
|
||||||
undefined_chance = custom_crossed['undefined_chance']
|
undefined_chance = custom_crossed['undefined_chance']
|
||||||
@@ -443,6 +444,23 @@ def link_overworld(world, player):
|
|||||||
connected_edge_cache = connected_edges.copy()
|
connected_edge_cache = connected_edges.copy()
|
||||||
groups_cache = copy.deepcopy(groups)
|
groups_cache = copy.deepcopy(groups)
|
||||||
while not valid_layout and tries > 0:
|
while not valid_layout and tries > 0:
|
||||||
|
def remove_connected(forward_sets, back_sets):
|
||||||
|
deleted_edges = []
|
||||||
|
def remove_from_sets(sets):
|
||||||
|
s = 0
|
||||||
|
while s < len(sets):
|
||||||
|
if sets[s][0] in connected_edges:
|
||||||
|
deleted_edges.extend(sets[s])
|
||||||
|
del sets[s]
|
||||||
|
continue
|
||||||
|
s += 1
|
||||||
|
remove_from_sets(forward_sets)
|
||||||
|
remove_from_sets(back_sets)
|
||||||
|
if len(forward_sets) != len(back_sets):
|
||||||
|
x=', '.join(deleted_edges)
|
||||||
|
x=0
|
||||||
|
assert len(forward_sets) == len(back_sets), "OW edge pool is uneven due to prior connections: " + ', '.join(deleted_edges)
|
||||||
|
|
||||||
def connect_set(forward_set, back_set, connected_edges):
|
def connect_set(forward_set, back_set, connected_edges):
|
||||||
if forward_set is not None and back_set is not None:
|
if forward_set is not None and back_set is not None:
|
||||||
assert len(forward_set) == len(back_set)
|
assert len(forward_set) == len(back_set)
|
||||||
@@ -467,32 +485,10 @@ def link_overworld(world, player):
|
|||||||
for key in groupKeys:
|
for key in groupKeys:
|
||||||
(mode, wrld, dir, terrain, parallel, count, _) = key
|
(mode, wrld, dir, terrain, parallel, count, _) = key
|
||||||
(forward_edge_sets, back_edge_sets) = groups[key]
|
(forward_edge_sets, back_edge_sets) = groups[key]
|
||||||
def remove_connected():
|
remove_connected(forward_edge_sets, back_edge_sets)
|
||||||
deleted_edges = []
|
|
||||||
s = 0
|
|
||||||
while s < len(forward_edge_sets):
|
|
||||||
forward_set = forward_edge_sets[s]
|
|
||||||
if forward_set[0] in connected_edges:
|
|
||||||
deleted_edges.extend(forward_edge_sets[s])
|
|
||||||
del forward_edge_sets[s]
|
|
||||||
continue
|
|
||||||
s += 1
|
|
||||||
s = 0
|
|
||||||
while s < len(back_edge_sets):
|
|
||||||
back_set = back_edge_sets[s]
|
|
||||||
if back_set[0] in connected_edges:
|
|
||||||
deleted_edges.extend(back_edge_sets[s])
|
|
||||||
del back_edge_sets[s]
|
|
||||||
continue
|
|
||||||
s += 1
|
|
||||||
if len(forward_edge_sets) != len(back_edge_sets):
|
|
||||||
x=', '.join(deleted_edges)
|
|
||||||
x=0
|
|
||||||
assert len(forward_edge_sets) == len(back_edge_sets), "OW edge pool is uneven due to prior connections: " + ', '.join(deleted_edges)
|
|
||||||
|
|
||||||
remove_connected()
|
|
||||||
random.shuffle(forward_edge_sets)
|
random.shuffle(forward_edge_sets)
|
||||||
random.shuffle(back_edge_sets)
|
random.shuffle(back_edge_sets)
|
||||||
|
|
||||||
if wrld is None and len(force_crossed) + len(force_noncrossed) > 0:
|
if wrld is None and len(force_crossed) + len(force_noncrossed) > 0:
|
||||||
# divide forward/back sets into LW/DW
|
# divide forward/back sets into LW/DW
|
||||||
forward_lw_sets, forward_dw_sets = [], []
|
forward_lw_sets, forward_dw_sets = [], []
|
||||||
@@ -500,24 +496,20 @@ def link_overworld(world, player):
|
|||||||
forward_parallel_lw_sets, forward_parallel_dw_sets = [], []
|
forward_parallel_lw_sets, forward_parallel_dw_sets = [], []
|
||||||
back_parallel_lw_sets, back_parallel_dw_sets = [], []
|
back_parallel_lw_sets, back_parallel_dw_sets = [], []
|
||||||
|
|
||||||
|
def add_edgeset_to_worldsets(edge_set, sets, parallel_sets):
|
||||||
|
sets.append(edge_set)
|
||||||
|
if parallel == IsParallel.Yes:
|
||||||
|
parallel_sets.append([parallel_links_new[e] for e in edge_set])
|
||||||
for edge_set in forward_edge_sets:
|
for edge_set in forward_edge_sets:
|
||||||
if world.get_owedge(edge_set[0], player).is_lw(world):
|
if world.get_owedge(edge_set[0], player).is_lw(world):
|
||||||
forward_lw_sets.append(edge_set)
|
add_edgeset_to_worldsets(edge_set, forward_lw_sets, forward_parallel_lw_sets)
|
||||||
if parallel == IsParallel.Yes:
|
|
||||||
forward_parallel_lw_sets.append([parallel_links_new[e] for e in edge_set])
|
|
||||||
else:
|
else:
|
||||||
forward_dw_sets.append(edge_set)
|
add_edgeset_to_worldsets(edge_set, forward_dw_sets, forward_parallel_dw_sets)
|
||||||
if parallel == IsParallel.Yes:
|
|
||||||
forward_parallel_dw_sets.append([parallel_links_new[e] for e in edge_set])
|
|
||||||
for edge_set in back_edge_sets:
|
for edge_set in back_edge_sets:
|
||||||
if world.get_owedge(edge_set[0], player).is_lw(world):
|
if world.get_owedge(edge_set[0], player).is_lw(world):
|
||||||
back_lw_sets.append(edge_set)
|
add_edgeset_to_worldsets(edge_set, back_lw_sets, back_parallel_lw_sets)
|
||||||
if parallel == IsParallel.Yes:
|
|
||||||
back_parallel_lw_sets.append([parallel_links_new[e] for e in edge_set])
|
|
||||||
else:
|
else:
|
||||||
back_dw_sets.append(edge_set)
|
add_edgeset_to_worldsets(edge_set, back_dw_sets, back_parallel_dw_sets)
|
||||||
if parallel == IsParallel.Yes:
|
|
||||||
back_parallel_dw_sets.append([parallel_links_new[e] for e in edge_set])
|
|
||||||
|
|
||||||
crossed_sets = []
|
crossed_sets = []
|
||||||
noncrossed_sets = []
|
noncrossed_sets = []
|
||||||
@@ -526,7 +518,7 @@ def link_overworld(world, player):
|
|||||||
affected_edges = set(sets[i]+(parallel_sets[i] if parallel == IsParallel.Yes else []))
|
affected_edges = set(sets[i]+(parallel_sets[i] if parallel == IsParallel.Yes else []))
|
||||||
if sets[i] not in crossed_sets and len(set.intersection(set(force_crossed), affected_edges)) > 0:
|
if sets[i] not in crossed_sets and len(set.intersection(set(force_crossed), affected_edges)) > 0:
|
||||||
crossed_sets.append(sets[i])
|
crossed_sets.append(sets[i])
|
||||||
if sets not in noncrossed_sets and len(set.intersection(set(force_noncrossed), affected_edges)) > 0:
|
if sets[i] not in noncrossed_sets and len(set.intersection(set(force_noncrossed), affected_edges)) > 0:
|
||||||
noncrossed_sets.append(sets[i])
|
noncrossed_sets.append(sets[i])
|
||||||
if sets[i] in crossed_sets and sets[i] in noncrossed_sets:
|
if sets[i] in crossed_sets and sets[i] in noncrossed_sets:
|
||||||
raise GenerationException('Conflict in force crossed/non-crossed definition')
|
raise GenerationException('Conflict in force crossed/non-crossed definition')
|
||||||
@@ -536,50 +528,33 @@ def link_overworld(world, player):
|
|||||||
add_to_crossed_sets(back_dw_sets, back_parallel_dw_sets)
|
add_to_crossed_sets(back_dw_sets, back_parallel_dw_sets)
|
||||||
|
|
||||||
# random connect forced crossed/noncrossed
|
# random connect forced crossed/noncrossed
|
||||||
|
def connect_forced(forced_sets, is_crossed, opposite_sets=[]):
|
||||||
c = 0
|
c = 0
|
||||||
while c < len(noncrossed_sets):
|
while c < len(forced_sets):
|
||||||
if noncrossed_sets[c] in forward_edge_sets:
|
if forced_sets[c] in forward_edge_sets:
|
||||||
forward_set = noncrossed_sets[c]
|
forward_set = forced_sets[c]
|
||||||
if forward_set in forward_lw_sets:
|
if (forward_set in forward_lw_sets) != is_crossed:
|
||||||
back_set = next(s for s in back_lw_sets if s in back_edge_sets and s not in crossed_sets)
|
back_set = next(s for s in back_lw_sets if s in back_edge_sets and s not in opposite_sets)
|
||||||
else:
|
else:
|
||||||
back_set = next(s for s in back_dw_sets if s in back_edge_sets and s not in crossed_sets)
|
back_set = next(s for s in back_dw_sets if s in back_edge_sets and s not in opposite_sets)
|
||||||
elif noncrossed_sets[c] in back_edge_sets:
|
elif forced_sets[c] in back_edge_sets:
|
||||||
back_set = noncrossed_sets[c]
|
back_set = forced_sets[c]
|
||||||
if back_set in back_lw_sets:
|
if (back_set in back_lw_sets) != is_crossed:
|
||||||
forward_set = next(s for s in forward_lw_sets if s in forward_edge_sets and s not in crossed_sets)
|
forward_set = next(s for s in forward_lw_sets if s in forward_edge_sets and s not in opposite_sets)
|
||||||
else:
|
else:
|
||||||
forward_set = next(s for s in forward_dw_sets if s in forward_edge_sets and s not in crossed_sets)
|
forward_set = next(s for s in forward_dw_sets if s in forward_edge_sets and s not in opposite_sets)
|
||||||
else:
|
else:
|
||||||
c = c + 1
|
c = c + 1
|
||||||
continue
|
continue
|
||||||
connect_set(forward_set, back_set, connected_edges)
|
connect_set(forward_set, back_set, connected_edges)
|
||||||
remove_connected()
|
remove_connected(forward_edge_sets, back_edge_sets)
|
||||||
c = c + 1
|
|
||||||
c = 0
|
|
||||||
while c < len(crossed_sets):
|
|
||||||
if crossed_sets[c] in forward_edge_sets:
|
|
||||||
forward_set = crossed_sets[c]
|
|
||||||
if forward_set in forward_lw_sets:
|
|
||||||
back_set = next(s for s in back_dw_sets if s in back_edge_sets)
|
|
||||||
else:
|
|
||||||
back_set = next(s for s in back_lw_sets if s in back_edge_sets)
|
|
||||||
elif crossed_sets[c] in back_edge_sets:
|
|
||||||
back_set = crossed_sets[c]
|
|
||||||
if back_set in back_lw_sets:
|
|
||||||
forward_set = next(s for s in forward_dw_sets if s in forward_edge_sets)
|
|
||||||
else:
|
|
||||||
forward_set = next(s for s in forward_lw_sets if s in forward_edge_sets)
|
|
||||||
else:
|
|
||||||
c = c + 1
|
|
||||||
continue
|
|
||||||
connect_set(forward_set, back_set, connected_edges)
|
|
||||||
remove_connected()
|
|
||||||
c = c + 1
|
c = c + 1
|
||||||
|
connect_forced(noncrossed_sets, False, crossed_sets)
|
||||||
|
connect_forced(crossed_sets, True)
|
||||||
|
|
||||||
while len(forward_edge_sets) > 0 and len(back_edge_sets) > 0:
|
while len(forward_edge_sets) > 0 and len(back_edge_sets) > 0:
|
||||||
connect_set(forward_edge_sets[0], back_edge_sets[0], connected_edges)
|
connect_set(forward_edge_sets[0], back_edge_sets[0], connected_edges)
|
||||||
remove_connected()
|
remove_connected(forward_edge_sets, back_edge_sets)
|
||||||
assert len(connected_edges) == len(default_connections) * 2, connected_edges
|
assert len(connected_edges) == len(default_connections) * 2, connected_edges
|
||||||
|
|
||||||
world.owsectors[player] = build_sectors(world, player)
|
world.owsectors[player] = build_sectors(world, player)
|
||||||
@@ -1266,6 +1241,7 @@ def adjust_edge_groups(world, trimmed_groups, edges_to_swap, player):
|
|||||||
if world.customizer:
|
if world.customizer:
|
||||||
custom_crossed = world.customizer.get_owcrossed()
|
custom_crossed = world.customizer.get_owcrossed()
|
||||||
limited_crossed = custom_crossed and (player in custom_crossed) and ('limit_crossed' in custom_crossed[player])
|
limited_crossed = custom_crossed and (player in custom_crossed) and ('limit_crossed' in custom_crossed[player])
|
||||||
|
limited_crossed = limited_crossed and world.owCrossed[player] == 'unrestricted'
|
||||||
custom_edge_groups = world.customizer.get_owedges()
|
custom_edge_groups = world.customizer.get_owedges()
|
||||||
if custom_edge_groups and player in custom_edge_groups:
|
if custom_edge_groups and player in custom_edge_groups:
|
||||||
custom_edge_groups = custom_edge_groups[player]
|
custom_edge_groups = custom_edge_groups[player]
|
||||||
@@ -1484,18 +1460,6 @@ def build_sectors(world, player):
|
|||||||
sectors2.append(explored_regions)
|
sectors2.append(explored_regions)
|
||||||
sectors[s] = sectors2
|
sectors[s] = sectors2
|
||||||
|
|
||||||
#TODO: Keep largest LW sector for Links House consideration, keep sector containing WDM for Old Man consideration
|
|
||||||
# sector_entrances = list()
|
|
||||||
# for sector in sectors:
|
|
||||||
# entrances = list()
|
|
||||||
# for s2 in sector:
|
|
||||||
# for region_name in s2:
|
|
||||||
# region = world.get_region(region_name, player)
|
|
||||||
# for exit in region.exits:
|
|
||||||
# if exit.spot_type == 'Entrance' and exit.name in entrance_pool:
|
|
||||||
# entrances.append(exit.name)
|
|
||||||
# sector_entrances.append(entrances)
|
|
||||||
|
|
||||||
return sectors
|
return sectors
|
||||||
|
|
||||||
def build_accessible_region_list(world, start_region, player, build_copy_world=False, cross_world=False, region_rules=True, ignore_ledges = False):
|
def build_accessible_region_list(world, start_region, player, build_copy_world=False, cross_world=False, region_rules=True, ignore_ledges = False):
|
||||||
@@ -2559,7 +2523,7 @@ isolated_regions = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
flute_data = {
|
flute_data = {
|
||||||
#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 AltVRAM AltBGY AltBGX AltCamY AltCamX AltUnk1 AltUnk2 AltIconY AltIconX
|
#OWID LW Region DW Region Slot VRAM BG Y BG X Link Y Link X Cam Y Cam X Unk1 Unk2 IconY IconX AltY AltX AltVRAM AltBGY AltBGX AltCamY AltCamX AltUnk1 AltUnk2 AltIconY AltIconX
|
||||||
0x00: (['Lost Woods East Area', 'Skull Woods Forest'], 0x09, 0x1042, 0x022e, 0x0202, 0x0290, 0x0288, 0x029b, 0x028f, 0xfff2, 0x000e, 0x0290, 0x0288, 0x0290, 0x0290),
|
0x00: (['Lost Woods East Area', 'Skull Woods Forest'], 0x09, 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),
|
0x02: (['Lumberjack Area', 'Dark Lumberjack Area'], 0x02, 0x059c, 0x00d6, 0x04e6, 0x0138, 0x0558, 0x0143, 0x0563, 0xfffa, 0xfffa, 0x0138, 0x0550),
|
||||||
0x03: (['West Death Mountain (Bottom)', 'West Dark Death Mountain (Top)'], 0x0b, 0x1600, 0x02ca, 0x060e, 0x0328, 0x0678, 0x0337, 0x0683, 0xfff6, 0xfff2, 0x035b, 0x0680, 0x0118, 0x0860, 0x05c0, 0x00b8, 0x07ec, 0x0127, 0x086b, 0xfff8, 0x0004, 0x0148, 0x0850),
|
0x03: (['West Death Mountain (Bottom)', 'West Dark Death Mountain (Top)'], 0x0b, 0x1600, 0x02ca, 0x060e, 0x0328, 0x0678, 0x0337, 0x0683, 0xfff6, 0xfff2, 0x035b, 0x0680, 0x0118, 0x0860, 0x05c0, 0x00b8, 0x07ec, 0x0127, 0x086b, 0xfff8, 0x0004, 0x0148, 0x0850),
|
||||||
|
|||||||
@@ -109,6 +109,10 @@ These are now independent of retro mode and have three options: None, Random, an
|
|||||||
|
|
||||||
# Bug Fixes and Notes
|
# Bug Fixes and Notes
|
||||||
|
|
||||||
|
* 1.2.0.21u
|
||||||
|
* Fix that should force items needed for leaving Zelda's cell to before the throne room, so S&Q isn't mandatory
|
||||||
|
* Small fix for Tavern Shuffle (thanks Catobat)
|
||||||
|
* Several small generation fixes
|
||||||
* 1.2.0.20u
|
* 1.2.0.20u
|
||||||
* New generation feature that allows Spiral Stair to link to themselves (thank Catobat)
|
* New generation feature that allows Spiral Stair to link to themselves (thank Catobat)
|
||||||
* Added logic for trap doors that could be opened using existing room triggers
|
* Added logic for trap doors that could be opened using existing room triggers
|
||||||
|
|||||||
5
Rom.py
5
Rom.py
@@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127
|
|||||||
|
|
||||||
|
|
||||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||||
RANDOMIZERBASEHASH = 'da111397d4118054e5ab4b9375cfb9e4'
|
RANDOMIZERBASEHASH = '52317b2dd4fb303887f26ecc40a4cae3'
|
||||||
|
|
||||||
|
|
||||||
class JsonRom(object):
|
class JsonRom(object):
|
||||||
@@ -694,7 +694,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
|
|||||||
offset = 0
|
offset = 0
|
||||||
data = flute_data[owid]
|
data = flute_data[owid]
|
||||||
|
|
||||||
if world.is_tile_swapped(data[1], player):
|
if world.is_tile_swapped(owid, player):
|
||||||
offset = 0x40
|
offset = 0x40
|
||||||
|
|
||||||
write_int16(rom, snes_to_pc(0x02E849 + (o * 2)), owid + offset) # owid
|
write_int16(rom, snes_to_pc(0x02E849 + (o * 2)), owid + offset) # owid
|
||||||
@@ -1403,6 +1403,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
|
|||||||
|
|
||||||
rom.write_byte(0x18004A, 0x00 if world.mode[player] != 'inverted' else 0x01) # Inverted mode
|
rom.write_byte(0x18004A, 0x00 if world.mode[player] != 'inverted' else 0x01) # Inverted mode
|
||||||
rom.write_byte(0x18005D, 0x00) # Hammer always breaks barrier
|
rom.write_byte(0x18005D, 0x00) # Hammer always breaks barrier
|
||||||
|
rom.write_byte(0x02AF79, 0xD0 if world.mode[player] != 'inverted' else 0xF0) # vortexes: Normal (D0=light to dark, F0=dark to light, 42 = both)
|
||||||
rom.write_byte(0x03A943, 0xD0 if world.mode[player] != 'inverted' else 0xF0) # Mirror: Normal (D0=Dark to Light, F0=light to dark, 42 = both)
|
rom.write_byte(0x03A943, 0xD0 if world.mode[player] != 'inverted' else 0xF0) # Mirror: Normal (D0=Dark to Light, F0=light to dark, 42 = both)
|
||||||
rom.write_byte(0x03A96D, 0xF0 if world.mode[player] != 'inverted' else 0xD0) # Residual Portal: Normal (F0= Light Side, D0=Dark Side, 42 = both (Darth Vader))
|
rom.write_byte(0x03A96D, 0xF0 if world.mode[player] != 'inverted' else 0xD0) # Residual Portal: Normal (F0= Light Side, D0=Dark Side, 42 = both (Darth Vader))
|
||||||
rom.write_byte(0x03A9A7, 0xD0) # Residual Portal: Normal (D0= Light Side, F0=Dark Side, 42 = both (Darth Vader))
|
rom.write_byte(0x03A9A7, 0xD0) # Residual Portal: Normal (D0= Light Side, F0=Dark Side, 42 = both (Darth Vader))
|
||||||
|
|||||||
6
Rules.py
6
Rules.py
@@ -1577,13 +1577,15 @@ def standard_rules(world, player):
|
|||||||
add_rule(ent, lambda state: standard_escape_rule(state))
|
add_rule(ent, lambda state: standard_escape_rule(state))
|
||||||
|
|
||||||
set_rule(world.get_location('Zelda Pickup', player), lambda state: state.has('Big Key (Escape)', player))
|
set_rule(world.get_location('Zelda Pickup', player), lambda state: state.has('Big Key (Escape)', player))
|
||||||
set_rule(world.get_entrance('Hyrule Castle Throne Room Tapestry', player), lambda state: state.has('Zelda Herself', player))
|
|
||||||
set_rule(world.get_entrance('Hyrule Castle Tapestry Backwards', player), lambda state: state.has('Zelda Herself', player))
|
set_rule(world.get_entrance('Hyrule Castle Tapestry Backwards', player), lambda state: state.has('Zelda Herself', player))
|
||||||
|
|
||||||
def check_rule_list(state, r_list):
|
def check_rule_list(state, r_list):
|
||||||
return True if len(r_list) <= 0 else r_list[0](state) and check_rule_list(state, r_list[1:])
|
return True if len(r_list) <= 0 else r_list[0](state) and check_rule_list(state, r_list[1:])
|
||||||
rule_list, debug_path = find_rules_for_zelda_delivery(world, player)
|
rule_list, debug_path = find_rules_for_zelda_delivery(world, player)
|
||||||
set_rule(world.get_location('Zelda Drop Off', player), lambda state: state.has('Zelda Herself', player) and check_rule_list(state, rule_list))
|
set_rule(world.get_entrance('Hyrule Castle Throne Room Tapestry', player),
|
||||||
|
lambda state: state.has('Zelda Herself', player) and check_rule_list(state, rule_list))
|
||||||
|
set_rule(world.get_location('Zelda Drop Off', player),
|
||||||
|
lambda state: state.has('Zelda Herself', player) and check_rule_list(state, rule_list))
|
||||||
|
|
||||||
for entrance in ['Links House SC', 'Links House ES', 'Central Bonk Rocks SW', 'Hyrule Castle WN', 'Hyrule Castle ES',
|
for entrance in ['Links House SC', 'Links House ES', 'Central Bonk Rocks SW', 'Hyrule Castle WN', 'Hyrule Castle ES',
|
||||||
'Bonk Fairy (Light)', 'Hyrule Castle Main Gate (South)', 'Hyrule Castle Main Gate (North)', 'Hyrule Castle Ledge Drop']:
|
'Bonk Fairy (Light)', 'Hyrule Castle Main Gate (South)', 'Hyrule Castle Main Gate (North)', 'Hyrule Castle Ledge Drop']:
|
||||||
|
|||||||
111
asm/owrando.asm
111
asm/owrando.asm
@@ -56,16 +56,17 @@ Link_ResetSwimmingState:
|
|||||||
|
|
||||||
|
|
||||||
; mirror hooks
|
; mirror hooks
|
||||||
org $02FBAB
|
org $0283DC ; override world check when spawning mirror portal sprite in Crossed OWR
|
||||||
JSL OWMirrorSpriteRestore : NOP
|
jsl.l OWLightWorldOrCrossed
|
||||||
org $05AF75
|
org $05AF75
|
||||||
Sprite_6C_MirrorPortal:
|
Sprite_6C_MirrorPortal:
|
||||||
jsl OWPreserveMirrorSprite : nop #2 ; LDA $7EF3CA : BNE $05AFDF
|
jsl OWMirrorSpriteDisable ; LDA $7EF3CA
|
||||||
|
org $05AF88
|
||||||
|
jsl OWMirrorSpriteSkipDraw : NOP ; LDA.w $0FC6 : CMP.b #$03
|
||||||
org $05AFDF
|
org $05AFDF
|
||||||
Sprite_6C_MirrorPortal_missing_mirror:
|
Sprite_6C_MirrorPortal_missing_mirror:
|
||||||
JML OWMirrorSpriteDelete : NOP ; STZ $0DD0,X : BRA $05AFF1
|
org $0ABFB6
|
||||||
org $0ABFBF
|
jsl OWMirrorSpriteOnMap : NOP ; LDA.w $008A : CMP.b #$40
|
||||||
JSL OWMirrorSpriteOnMap : BRA + : NOP #6 : +
|
|
||||||
|
|
||||||
; whirlpool shuffle cross world change
|
; whirlpool shuffle cross world change
|
||||||
org $02b3bd
|
org $02b3bd
|
||||||
@@ -100,10 +101,6 @@ jsl OWOldManSpeed
|
|||||||
;org $09c957 ; <- 4c957
|
;org $09c957 ; <- 4c957
|
||||||
;dw #$cb5f ; matches value on Central Bonk Rocks screen
|
;dw #$cb5f ; matches value on Central Bonk Rocks screen
|
||||||
|
|
||||||
; override world check when spawning mirror portal sprite in Crossed OWR
|
|
||||||
org $0283dc
|
|
||||||
jsl.l OWLightWorldOrCrossed
|
|
||||||
|
|
||||||
; override world check when viewing overworld (incl. title screen portion)
|
; override world check when viewing overworld (incl. title screen portion)
|
||||||
org $0aba6c ; < ? - Bank0a.asm:474 ()
|
org $0aba6c ; < ? - Bank0a.asm:474 ()
|
||||||
jsl.l OWMapWorldCheck16 : nop
|
jsl.l OWMapWorldCheck16 : nop
|
||||||
@@ -172,6 +169,11 @@ plb : rtl
|
|||||||
nop #3
|
nop #3
|
||||||
+
|
+
|
||||||
|
|
||||||
|
; follower hooks
|
||||||
|
;org $8689D9
|
||||||
|
;SpritePrep_BombShoppe:
|
||||||
|
;JML BombShoppe_ConditionalSpawn : NOP
|
||||||
|
|
||||||
;Code
|
;Code
|
||||||
org $aa8800
|
org $aa8800
|
||||||
OWTransitionDirection:
|
OWTransitionDirection:
|
||||||
@@ -257,65 +259,41 @@ OWDestroyItemSprites:
|
|||||||
DEX : BPL .nextSprite
|
DEX : BPL .nextSprite
|
||||||
PLX : RTL
|
PLX : RTL
|
||||||
}
|
}
|
||||||
|
|
||||||
OWMirrorSpriteOnMap:
|
OWMirrorSpriteOnMap:
|
||||||
{
|
{
|
||||||
lda.w $1ac0,x : bit.b #$f0 : beq .continue
|
JSL OWWorldCheck
|
||||||
lda.b #$00 : rtl
|
CMP.b #$40 ; part of what we wrote over
|
||||||
.continue
|
RTL
|
||||||
ora.w $1ab0,x
|
|
||||||
ora.w $1ad0,x
|
|
||||||
ora.w $1ae0,x
|
|
||||||
rtl
|
|
||||||
}
|
}
|
||||||
OWPreserveMirrorSprite:
|
OWMirrorSpriteDisable:
|
||||||
{
|
{
|
||||||
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .vanilla ; if OW Crossed, skip world check and continue
|
LDA.b $10 : CMP.b #$0F : BNE + ; avoid rare freeze during mirror superbunny
|
||||||
lda.b $10 : cmp.b #$0f : beq .vanilla ; if performing mirror superbunny
|
PLA : PLA : PLA : JML Sprite_6C_MirrorPortal_missing_mirror
|
||||||
rtl
|
+
|
||||||
|
|
||||||
|
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .vanilla
|
||||||
|
lda.l InvertedMode : beq +
|
||||||
|
lda.b #$40
|
||||||
|
+ rtl
|
||||||
|
|
||||||
.vanilla
|
.vanilla
|
||||||
|
lda.l CurrentWorld ; what we wrote over
|
||||||
|
rtl
|
||||||
|
}
|
||||||
|
OWMirrorSpriteSkipDraw:
|
||||||
|
{
|
||||||
|
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .vanilla
|
||||||
lda.l InvertedMode : beq +
|
lda.l InvertedMode : beq +
|
||||||
lda.l CurrentWorld : beq .deleteMirror
|
lda.l CurrentWorld : eor.b #$40
|
||||||
rtl
|
bra ++
|
||||||
+ lda.l CurrentWorld : bne .deleteMirror
|
+ lda.l CurrentWorld : ++ beq .vanilla
|
||||||
rtl
|
stz.w $0D90,x ; disables collision
|
||||||
|
sec : rtl
|
||||||
|
|
||||||
.deleteMirror
|
.vanilla
|
||||||
lda.b $10 : cmp.b #$0f : bne +
|
LDA.w $0FC6 : CMP.b #$03 ; what we wrote over
|
||||||
jsr.w OWMirrorSpriteMove ; if performing mirror superbunny
|
RTL
|
||||||
+ pla : pla : pla : jml Sprite_6C_MirrorPortal_missing_mirror
|
|
||||||
}
|
|
||||||
OWMirrorSpriteMove:
|
|
||||||
{
|
|
||||||
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq +
|
|
||||||
lda.w $1acf : ora.b #$40 : sta.w $1acf
|
|
||||||
+ rts
|
|
||||||
}
|
|
||||||
OWMirrorSpriteBonk:
|
|
||||||
{
|
|
||||||
jsr.w OWMirrorSpriteMove
|
|
||||||
lda.b #$2c : jml SetGameModeLikeMirror ; what we wrote over
|
|
||||||
}
|
|
||||||
OWMirrorSpriteDelete:
|
|
||||||
{
|
|
||||||
stz.w $0dd0,x ; what we wrote over
|
|
||||||
jsr.w OWMirrorSpriteMove
|
|
||||||
jml Sprite_6C_MirrorPortal_dont_do_warp
|
|
||||||
}
|
|
||||||
OWMirrorSpriteRestore:
|
|
||||||
{
|
|
||||||
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .return
|
|
||||||
lda.l InvertedMode : beq +
|
|
||||||
lda.l CurrentWorld : beq .return
|
|
||||||
bra .restorePortal
|
|
||||||
+ lda.l CurrentWorld : bne .return
|
|
||||||
|
|
||||||
.restorePortal
|
|
||||||
lda.w $1acf : and.b #$0f : sta.w $1acf
|
|
||||||
|
|
||||||
.return
|
|
||||||
rep #$30 : lda.w $04AC ; what we wrote over
|
|
||||||
rtl
|
|
||||||
}
|
}
|
||||||
OWLightWorldOrCrossed:
|
OWLightWorldOrCrossed:
|
||||||
{
|
{
|
||||||
@@ -563,6 +541,7 @@ OWBonkDrops:
|
|||||||
INX : LDA.w OWBonkPrizeData,X : PHX : PHA ; S = FlagBitmask, X (row + 2)
|
INX : LDA.w OWBonkPrizeData,X : PHX : PHA ; S = FlagBitmask, X (row + 2)
|
||||||
LDX.b $8A : LDA.l OverworldEventDataWRAM,X : AND 1,S : PHA : BNE + ; S = Collected, FlagBitmask, X (row + 2)
|
LDX.b $8A : LDA.l OverworldEventDataWRAM,X : AND 1,S : PHA : BNE + ; S = Collected, FlagBitmask, X (row + 2)
|
||||||
LDA.b #$1B : STA $12F ; JSL Sound_SetSfx3PanLong ; seems that when you bonk, there is a pending bonk sfx, so we clear that out and replace with reveal secret sfx
|
LDA.b #$1B : STA $12F ; JSL Sound_SetSfx3PanLong ; seems that when you bonk, there is a pending bonk sfx, so we clear that out and replace with reveal secret sfx
|
||||||
|
; JSLSpriteSFX_QueueSFX3WithPan
|
||||||
+
|
+
|
||||||
LDA 3,S : TAX : INX : LDA.w OWBonkPrizeData,X
|
LDA 3,S : TAX : INX : LDA.w OWBonkPrizeData,X
|
||||||
PHA : INX : LDA.w OWBonkPrizeData,X : BEQ +
|
PHA : INX : LDA.w OWBonkPrizeData,X : BEQ +
|
||||||
@@ -894,6 +873,7 @@ OWNewDestination:
|
|||||||
++ lda $84 : !add 1,s : sta $84 : pla : pla
|
++ lda $84 : !add 1,s : sta $84 : pla : pla
|
||||||
|
|
||||||
.adjustMainAxis
|
.adjustMainAxis
|
||||||
|
;LDA $84 : SEC : SBC #$0400 : AND #$0F80 : ASL : XBA : STA $88 ; vram
|
||||||
LDA $84 : SEC : SBC #$0400 : AND #$0F00 : ASL : XBA : STA $88 ; vram
|
LDA $84 : SEC : SBC #$0400 : AND #$0F00 : ASL : XBA : STA $88 ; vram
|
||||||
LDA $84 : SEC : SBC #$0010 : AND #$003E : LSR : STA $86
|
LDA $84 : SEC : SBC #$0010 : AND #$003E : LSR : STA $86
|
||||||
|
|
||||||
@@ -956,6 +936,7 @@ 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 and terrain
|
; crossed OW shuffle and terrain
|
||||||
|
;lda $8a : JSR OWDetermineScreensPaletteSet : STX $04
|
||||||
ldx $05 : ldy $08 : jsr OWWorldTerrainUpdate
|
ldx $05 : ldy $08 : jsr OWWorldTerrainUpdate
|
||||||
|
|
||||||
ldx $8a : lda $05 : sta $8a : stx $05 ; $05 is prev screen id, $8a is dest screen
|
ldx $8a : lda $05 : sta $8a : stx $05 ; $05 is prev screen id, $8a is dest screen
|
||||||
@@ -1180,6 +1161,14 @@ OWEndScrollTransition:
|
|||||||
RTL
|
RTL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; BombShoppe_ConditionalSpawn:
|
||||||
|
; {
|
||||||
|
; nop
|
||||||
|
; INC.w $0BA0,X : LDA.b #$B5 ; what we wrote over
|
||||||
|
; JML SpritePrep_BombShoppe+5
|
||||||
|
; nop#20
|
||||||
|
; }
|
||||||
|
|
||||||
;Data
|
;Data
|
||||||
org $aaa000
|
org $aaa000
|
||||||
OWEdgeOffsets:
|
OWEdgeOffsets:
|
||||||
|
|||||||
Binary file not shown.
@@ -121,8 +121,6 @@ ow-edges:
|
|||||||
- Lake Hylia NW*
|
- Lake Hylia NW*
|
||||||
- Tree Line SC*
|
- Tree Line SC*
|
||||||
- Lake Hylia NC*
|
- Lake Hylia NC*
|
||||||
- Lake Hylia WS*
|
|
||||||
- South Pass ES*
|
|
||||||
- Lake Hylia EC*
|
- Lake Hylia EC*
|
||||||
- Octoballoon WC*
|
- Octoballoon WC*
|
||||||
- Lake Hylia ES*
|
- Lake Hylia ES*
|
||||||
|
|||||||
@@ -138,8 +138,6 @@ ow-edges:
|
|||||||
- Lake Hylia NW*
|
- Lake Hylia NW*
|
||||||
- Tree Line SC*
|
- Tree Line SC*
|
||||||
- Lake Hylia NC*
|
- Lake Hylia NC*
|
||||||
- Lake Hylia WS*
|
|
||||||
- South Pass ES*
|
|
||||||
- Lake Hylia EC*
|
- Lake Hylia EC*
|
||||||
- Octoballoon WC*
|
- Octoballoon WC*
|
||||||
- Lake Hylia ES*
|
- Lake Hylia ES*
|
||||||
|
|||||||
31
presets/world/owr_flute-nearvanilla.yaml
Normal file
31
presets/world/owr_flute-nearvanilla.yaml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
settings:
|
||||||
|
1:
|
||||||
|
ow_fluteshuffle: balanced
|
||||||
|
ow-flutespots:
|
||||||
|
1:
|
||||||
|
forbid:
|
||||||
|
- 0x00 # Lost Woods
|
||||||
|
- 0x02 # Lumberjack
|
||||||
|
- 0x07 # Death Mountain TR Pegs
|
||||||
|
- 0x0A # Mountain Pass
|
||||||
|
- 0x0F # Zora Waterfall
|
||||||
|
- 0x10 # Lost Woods Pass
|
||||||
|
- 0x12 # Kakariko Pond
|
||||||
|
- 0x13 # Sanctuary
|
||||||
|
- 0x14 # Graveyard
|
||||||
|
- 0x17 # Zora Approach
|
||||||
|
- 0x1A # Forgotten Forest
|
||||||
|
- 0x1D # Wooden Bridge
|
||||||
|
- 0x22 # Blacksmith
|
||||||
|
- 0x25 # Sand Dunes
|
||||||
|
- 0x28 # Maze Race
|
||||||
|
- 0x29 # Kakariko Suburb
|
||||||
|
- 0x2A # Flute Boy
|
||||||
|
- 0x2B # Central Bonk Rocks
|
||||||
|
- 0x2D # Stone Bridge
|
||||||
|
- 0x2E # Tree Line
|
||||||
|
- 0x32 # Flute Boy Approach
|
||||||
|
- 0x34 # Statues
|
||||||
|
- 0x37 # Ice Cave
|
||||||
|
- 0x3A # Desert Pass
|
||||||
|
- 0x3C # South Pass
|
||||||
308
presets/world/owr_quadrantshuffle-diagonal.yaml
Normal file
308
presets/world/owr_quadrantshuffle-diagonal.yaml
Normal file
@@ -0,0 +1,308 @@
|
|||||||
|
ow-edges:
|
||||||
|
1:
|
||||||
|
groups:
|
||||||
|
north:
|
||||||
|
- Lost Woods NW
|
||||||
|
- Lost Woods EN
|
||||||
|
- Skull Woods EN
|
||||||
|
- Lumberjack WN
|
||||||
|
- Lumberjack SW
|
||||||
|
- Dark Lumberjack WN
|
||||||
|
- Dark Lumberjack SW
|
||||||
|
- West Death Mountain EN
|
||||||
|
- West Death Mountain ES
|
||||||
|
- West Dark Death Mountain EN
|
||||||
|
- West Dark Death Mountain ES
|
||||||
|
- East Death Mountain WN
|
||||||
|
- East Death Mountain WS
|
||||||
|
- East Death Mountain EN
|
||||||
|
- East Dark Death Mountain WN
|
||||||
|
- East Dark Death Mountain WS
|
||||||
|
- East Dark Death Mountain EN
|
||||||
|
- Death Mountain TR Pegs WN
|
||||||
|
- Turtle Rock WN
|
||||||
|
- Mountain Pass NW
|
||||||
|
- Mountain Pass SE
|
||||||
|
- Bumper Cave NW
|
||||||
|
- Bumper Cave SE
|
||||||
|
- Kakariko Pond NE
|
||||||
|
- Kakariko Pond EN
|
||||||
|
- Kakariko Pond ES
|
||||||
|
- Outcast Pond NE
|
||||||
|
- Outcast Pond EN
|
||||||
|
- Outcast Pond ES
|
||||||
|
- Sanctuary WN
|
||||||
|
- Sanctuary WS
|
||||||
|
- Sanctuary EC
|
||||||
|
- Dark Chapel WN
|
||||||
|
- Dark Chapel WS
|
||||||
|
- Dark Chapel EC
|
||||||
|
- Graveyard WC
|
||||||
|
- Graveyard EC
|
||||||
|
- Dark Graveyard WC
|
||||||
|
- Dark Graveyard EC
|
||||||
|
- River Bend WC
|
||||||
|
- Qirn Jump WC
|
||||||
|
- Master Sword Meadow SC
|
||||||
|
east:
|
||||||
|
- Zora Waterfall NE
|
||||||
|
- Zora Waterfall SE
|
||||||
|
- Catfish SE
|
||||||
|
- River Bend EN
|
||||||
|
- River Bend EC
|
||||||
|
- River Bend ES
|
||||||
|
- River Bend SW
|
||||||
|
- River Bend SC
|
||||||
|
- River Bend SE
|
||||||
|
- Qirn Jump EN
|
||||||
|
- Qirn Jump EC
|
||||||
|
- Qirn Jump ES
|
||||||
|
- Qirn Jump SW
|
||||||
|
- Qirn Jump SC
|
||||||
|
- Qirn Jump SE
|
||||||
|
- Potion Shop WN
|
||||||
|
- Potion Shop WC
|
||||||
|
- Potion Shop WS
|
||||||
|
- Potion Shop EN
|
||||||
|
- Potion Shop EC
|
||||||
|
- Dark Witch WN
|
||||||
|
- Dark Witch WC
|
||||||
|
- Dark Witch WS
|
||||||
|
- Dark Witch EN
|
||||||
|
- Dark Witch EC
|
||||||
|
- Zora Approach NE
|
||||||
|
- Zora Approach WN
|
||||||
|
- Zora Approach WC
|
||||||
|
- Catfish Approach NE
|
||||||
|
- Catfish Approach WN
|
||||||
|
- Catfish Approach WC
|
||||||
|
- Hyrule Castle ES
|
||||||
|
- Pyramid ES
|
||||||
|
- Wooden Bridge NW
|
||||||
|
- Wooden Bridge NC
|
||||||
|
- Wooden Bridge NE
|
||||||
|
- Wooden Bridge SW
|
||||||
|
- Broken Bridge NW
|
||||||
|
- Broken Bridge NC
|
||||||
|
- Broken Bridge NE
|
||||||
|
- Broken Bridge SW
|
||||||
|
- Eastern Palace SW
|
||||||
|
- Eastern Palace SE
|
||||||
|
- Palace of Darkness SW
|
||||||
|
- Palace of Darkness SE
|
||||||
|
- Sand Dunes NW
|
||||||
|
- Sand Dunes WN
|
||||||
|
- Sand Dunes SC
|
||||||
|
- Dark Dunes NW
|
||||||
|
- Dark Dunes WN
|
||||||
|
- Dark Dunes SC
|
||||||
|
- Stone Bridge NC
|
||||||
|
- Stone Bridge EN
|
||||||
|
- Stone Bridge EC
|
||||||
|
- Hammer Bridge NC
|
||||||
|
- Hammer Bridge EN
|
||||||
|
- Hammer Bridge EC
|
||||||
|
- Tree Line NW
|
||||||
|
- Tree Line WN
|
||||||
|
- Tree Line WC
|
||||||
|
- Tree Line SC
|
||||||
|
- Tree Line SE
|
||||||
|
- Dark Tree Line NW
|
||||||
|
- Dark Tree Line WN
|
||||||
|
- Dark Tree Line WC
|
||||||
|
- Dark Tree Line SC
|
||||||
|
- Dark Tree Line SE
|
||||||
|
- Eastern Nook NE
|
||||||
|
- Palace of Darkness Nook NE
|
||||||
|
- Lake Hylia NC
|
||||||
|
- Lake Hylia NE
|
||||||
|
- Ice Lake NC
|
||||||
|
- Ice Lake NE
|
||||||
|
- Ice Cave SW
|
||||||
|
- Ice Cave SE
|
||||||
|
- Shopping Mall SW
|
||||||
|
- Shopping Mall SE
|
||||||
|
- Octoballoon NW
|
||||||
|
- Octoballoon NE
|
||||||
|
- Bomber Corner NW
|
||||||
|
- Bomber Corner NE
|
||||||
|
- Zoras Domain SW
|
||||||
|
south:
|
||||||
|
- Hyrule Castle SW
|
||||||
|
- Hyrule Castle SE
|
||||||
|
- Pyramid SW
|
||||||
|
- Pyramid SE
|
||||||
|
- Flute Boy SW
|
||||||
|
- Flute Boy SC
|
||||||
|
- Stumpy SW
|
||||||
|
- Stumpy SC
|
||||||
|
- Central Bonk Rocks NW
|
||||||
|
- Central Bonk Rocks EN
|
||||||
|
- Central Bonk Rocks EC
|
||||||
|
- Central Bonk Rocks ES
|
||||||
|
- Central Bonk Rocks SW
|
||||||
|
- Dark Bonk Rocks NW
|
||||||
|
- Dark Bonk Rocks EN
|
||||||
|
- Dark Bonk Rocks EC
|
||||||
|
- Dark Bonk Rocks ES
|
||||||
|
- Dark Bonk Rocks SW
|
||||||
|
- Links House NE
|
||||||
|
- Links House WN
|
||||||
|
- Links House WC
|
||||||
|
- Links House WS
|
||||||
|
- Links House SC
|
||||||
|
- Links House ES
|
||||||
|
- Big Bomb Shop NE
|
||||||
|
- Big Bomb Shop WN
|
||||||
|
- Big Bomb Shop WC
|
||||||
|
- Big Bomb Shop WS
|
||||||
|
- Big Bomb Shop SC
|
||||||
|
- Big Bomb Shop ES
|
||||||
|
- Stone Bridge WC
|
||||||
|
- Stone Bridge WS
|
||||||
|
- Stone Bridge SC
|
||||||
|
- Hammer Bridge WS
|
||||||
|
- Hammer Bridge SC
|
||||||
|
- Desert EC
|
||||||
|
- Desert ES
|
||||||
|
- Flute Boy Approach NW
|
||||||
|
- Flute Boy Approach NC
|
||||||
|
- Flute Boy Approach EC
|
||||||
|
- Stumpy Approach NW
|
||||||
|
- Stumpy Approach NC
|
||||||
|
- Stumpy Approach EC
|
||||||
|
- C Whirlpool NW
|
||||||
|
- C Whirlpool WC
|
||||||
|
- C Whirlpool EN
|
||||||
|
- C Whirlpool EC
|
||||||
|
- C Whirlpool ES
|
||||||
|
- C Whirlpool SC
|
||||||
|
- Dark C Whirlpool NW
|
||||||
|
- Dark C Whirlpool WC
|
||||||
|
- Dark C Whirlpool EN
|
||||||
|
- Dark C Whirlpool EC
|
||||||
|
- Dark C Whirlpool ES
|
||||||
|
- Dark C Whirlpool SC
|
||||||
|
- Statues NC
|
||||||
|
- Statues WN
|
||||||
|
- Statues WC
|
||||||
|
- Statues WS
|
||||||
|
- Statues SC
|
||||||
|
- Hype Cave NC
|
||||||
|
- Hype Cave WN
|
||||||
|
- Hype Cave WC
|
||||||
|
- Hype Cave WS
|
||||||
|
- Hype Cave SC
|
||||||
|
- Lake Hylia NW
|
||||||
|
- Lake Hylia WS
|
||||||
|
- Lake Hylia EC
|
||||||
|
- Lake Hylia ES
|
||||||
|
- Ice Lake NW
|
||||||
|
- Ice Lake WS
|
||||||
|
- Ice Lake EC
|
||||||
|
- Ice Lake ES
|
||||||
|
- Desert Pass WC
|
||||||
|
- Desert Pass WS
|
||||||
|
- Desert Pass EC
|
||||||
|
- Desert Pass ES
|
||||||
|
- Swamp Nook EC
|
||||||
|
- Swamp Nook ES
|
||||||
|
- Dam NC
|
||||||
|
- Dam WC
|
||||||
|
- Dam WS
|
||||||
|
- Dam EC
|
||||||
|
- Swamp NC
|
||||||
|
- Swamp WC
|
||||||
|
- Swamp WS
|
||||||
|
- Swamp EC
|
||||||
|
- South Pass NC
|
||||||
|
- South Pass WC
|
||||||
|
- South Pass ES
|
||||||
|
- Dark South Pass NC
|
||||||
|
- Dark South Pass WC
|
||||||
|
- Dark South Pass ES
|
||||||
|
- Octoballoon WC
|
||||||
|
- Octoballoon WS
|
||||||
|
- Bomber Corner WC
|
||||||
|
- Bomber Corner WS
|
||||||
|
- Hobo EC
|
||||||
|
west:
|
||||||
|
- Lost Woods SW
|
||||||
|
- Lost Woods SC
|
||||||
|
- Lost Woods SE
|
||||||
|
- Skull Woods SW
|
||||||
|
- Skull Woods SC
|
||||||
|
- Skull Woods SE
|
||||||
|
- Lost Woods Pass NW
|
||||||
|
- Lost Woods Pass NE
|
||||||
|
- Lost Woods Pass SW
|
||||||
|
- Lost Woods Pass SE
|
||||||
|
- Skull Woods Pass NW
|
||||||
|
- Skull Woods Pass NE
|
||||||
|
- Skull Woods Pass SW
|
||||||
|
- Skull Woods Pass SE
|
||||||
|
- Kakariko Fortune NE
|
||||||
|
- Kakariko Fortune EN
|
||||||
|
- Kakariko Fortune ES
|
||||||
|
- Kakariko Fortune SC
|
||||||
|
- Dark Fortune NE
|
||||||
|
- Dark Fortune EN
|
||||||
|
- Dark Fortune ES
|
||||||
|
- Dark Fortune SC
|
||||||
|
- Kakariko Pond WN
|
||||||
|
- Kakariko Pond WS
|
||||||
|
- Kakariko Pond SW
|
||||||
|
- Kakariko Pond SE
|
||||||
|
- Outcast Pond WN
|
||||||
|
- Outcast Pond WS
|
||||||
|
- Outcast Pond SW
|
||||||
|
- Outcast Pond SE
|
||||||
|
- Kakariko NW
|
||||||
|
- Kakariko NC
|
||||||
|
- Kakariko NE
|
||||||
|
- Kakariko ES
|
||||||
|
- Kakariko SE
|
||||||
|
- Village of Outcasts NW
|
||||||
|
- Village of Outcasts NC
|
||||||
|
- Village of Outcasts NE
|
||||||
|
- Village of Outcasts ES
|
||||||
|
- Village of Outcasts SE
|
||||||
|
- Forgotten Forest NW
|
||||||
|
- Forgotten Forest NE
|
||||||
|
- Forgotten Forest ES
|
||||||
|
- Shield Shop NW
|
||||||
|
- Shield Shop NE
|
||||||
|
- Hyrule Castle WN
|
||||||
|
- Blacksmith WS
|
||||||
|
- Hammer Pegs WS
|
||||||
|
- Maze Race ES
|
||||||
|
- Dig Game EC
|
||||||
|
- Dig Game ES
|
||||||
|
- Kakariko Suburb NE
|
||||||
|
- Kakariko Suburb WS
|
||||||
|
- Kakariko Suburb ES
|
||||||
|
- Frog NE
|
||||||
|
- Frog WC
|
||||||
|
- Frog WS
|
||||||
|
- Frog ES
|
||||||
|
- Flute Boy WS
|
||||||
|
- Stumpy WS
|
||||||
|
ow-tileflips:
|
||||||
|
1:
|
||||||
|
force_together:
|
||||||
|
PedHobo:
|
||||||
|
- 0x00
|
||||||
|
- 0x2d
|
||||||
|
- 0x80
|
||||||
|
Zora:
|
||||||
|
- 0x0f
|
||||||
|
- 0x81
|
||||||
|
Forest:
|
||||||
|
- 0x1a
|
||||||
|
- 0x1b
|
||||||
|
FrogDig:
|
||||||
|
- 0x28
|
||||||
|
- 0x29
|
||||||
|
Desert:
|
||||||
|
- 0x30
|
||||||
|
- 0x3a
|
||||||
@@ -252,14 +252,10 @@ ow-edges:
|
|||||||
- Bomber Corner WS
|
- Bomber Corner WS
|
||||||
- Hobo EC
|
- Hobo EC
|
||||||
borders:
|
borders:
|
||||||
- Zora Whirlpool
|
|
||||||
- Kakariko Pond Whirlpool
|
|
||||||
- Sanctuary EC
|
- Sanctuary EC
|
||||||
- Dark Chapel EC
|
- Dark Chapel EC
|
||||||
- Graveyard WC
|
- Graveyard WC
|
||||||
- Dark Graveyard WC
|
- Dark Graveyard WC
|
||||||
- River Bend Whirlpool
|
|
||||||
- Qirn Jump Whirlpool
|
|
||||||
- Wooden Bridge SW
|
- Wooden Bridge SW
|
||||||
- Broken Bridge SW
|
- Broken Bridge SW
|
||||||
- Sand Dunes NW
|
- Sand Dunes NW
|
||||||
@@ -289,10 +285,7 @@ ow-edges:
|
|||||||
- Hype Cave WN
|
- Hype Cave WN
|
||||||
- Hype Cave WC
|
- Hype Cave WC
|
||||||
- Hype Cave WS
|
- Hype Cave WS
|
||||||
- Lake Hylia Whirlpool
|
|
||||||
- Dam EC
|
- Dam EC
|
||||||
- Swamp EC
|
- Swamp EC
|
||||||
- South Pass WC
|
- South Pass WC
|
||||||
- Dark South Pass WC
|
- Dark South Pass WC
|
||||||
- Octoballoon Whirlpool
|
|
||||||
- Bomber Corner Whirlpool
|
|
||||||
|
|||||||
214
presets/world/owr_ringshuffle-borders.yaml
Normal file
214
presets/world/owr_ringshuffle-borders.yaml
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
ow-edges:
|
||||||
|
1:
|
||||||
|
two-way:
|
||||||
|
Lost Woods NW: Master Sword Meadow SC
|
||||||
|
Lost Woods EN*: Lumberjack WN*
|
||||||
|
Lost Woods SW*: Lost Woods Pass NW*
|
||||||
|
Lost Woods SC*: Lost Woods Pass NE*
|
||||||
|
Skull Woods EN*: Dark Lumberjack WN*
|
||||||
|
Skull Woods SW*: Skull Woods Pass NW*
|
||||||
|
Skull Woods SC*: Skull Woods Pass NE*
|
||||||
|
West Death Mountain EN*: East Death Mountain WN*
|
||||||
|
West Dark Death Mountain EN*: East Dark Death Mountain WN*
|
||||||
|
East Death Mountain EN*: Death Mountain TR Pegs WN*
|
||||||
|
East Dark Death Mountain EN*: Turtle Rock WN*
|
||||||
|
Zora Waterfall NE: Zoras Domain SW
|
||||||
|
Zora Waterfall SE*: Zora Approach NE*
|
||||||
|
Catfish SE*: Catfish Approach NE*
|
||||||
|
Lost Woods Pass SW*: Kakariko NW*
|
||||||
|
Lost Woods Pass SE*: Kakariko NC*
|
||||||
|
Skull Woods Pass SW*: Village of Outcasts NW*
|
||||||
|
Skull Woods Pass SE*: Village of Outcasts NC*
|
||||||
|
Eastern Palace SE*: Eastern Nook NE*
|
||||||
|
Palace of Darkness SE*: Palace of Darkness Nook NE*
|
||||||
|
Desert EC: Desert Pass WC
|
||||||
|
Desert ES: Desert Pass WS
|
||||||
|
Lake Hylia WS*: South Pass ES*
|
||||||
|
Lake Hylia EC*: Octoballoon WC*
|
||||||
|
Lake Hylia ES*: Octoballoon WS*
|
||||||
|
Ice Lake WS*: Dark South Pass ES*
|
||||||
|
Ice Lake EC*: Bomber Corner WC*
|
||||||
|
Ice Lake ES*: Bomber Corner WS*
|
||||||
|
Ice Cave SW*: Octoballoon NW*
|
||||||
|
Ice Cave SE*: Octoballoon NE*
|
||||||
|
Shopping Mall SW*: Bomber Corner NW*
|
||||||
|
Shopping Mall SE*: Bomber Corner NE*
|
||||||
|
Desert Pass EC*: Dam WC*
|
||||||
|
Desert Pass ES*: Dam WS*
|
||||||
|
Swamp Nook EC*: Swamp WC*
|
||||||
|
Swamp Nook ES*: Swamp WS*
|
||||||
|
Dam EC*: South Pass WC*
|
||||||
|
Swamp EC*: Dark South Pass WC*
|
||||||
|
Lost Woods SE*: Kakariko Fortune NE*
|
||||||
|
Skull Woods SE*: Dark Fortune NE*
|
||||||
|
West Death Mountain ES*: East Death Mountain WS*
|
||||||
|
West Dark Death Mountain ES*: East Dark Death Mountain WS*
|
||||||
|
Kakariko Fortune SC*: Kakariko NE*
|
||||||
|
Dark Fortune SC*: Village of Outcasts NE*
|
||||||
|
Kakariko SE*: Kakariko Suburb NE*
|
||||||
|
Village of Outcasts SE*: Frog NE*
|
||||||
|
Eastern Palace SW*: Tree Line NW*
|
||||||
|
Palace of Darkness SW*: Dark Tree Line NW*
|
||||||
|
Tree Line SC*: Lake Hylia NC*
|
||||||
|
Tree Line SE*: Lake Hylia NE*
|
||||||
|
Dark Tree Line SC*: Ice Lake NC*
|
||||||
|
Dark Tree Line SE*: Ice Lake NE*
|
||||||
|
Flute Boy Approach EC*: C Whirlpool WC*
|
||||||
|
Stumpy Approach EC*: Dark C Whirlpool WC*
|
||||||
|
C Whirlpool EN*: Statues WN*
|
||||||
|
C Whirlpool EC*: Statues WC*
|
||||||
|
C Whirlpool ES*: Statues WS*
|
||||||
|
Dark C Whirlpool EN*: Hype Cave WN*
|
||||||
|
Dark C Whirlpool EC*: Hype Cave WC*
|
||||||
|
Dark C Whirlpool ES*: Hype Cave WS*
|
||||||
|
Kakariko Pond EN*: Sanctuary WN*
|
||||||
|
Kakariko Pond ES*: Sanctuary WS*
|
||||||
|
Kakariko Pond SW*: Forgotten Forest NW*
|
||||||
|
Kakariko Pond SE*: Forgotten Forest NE*
|
||||||
|
Outcast Pond EN*: Dark Chapel WN*
|
||||||
|
Outcast Pond ES*: Dark Chapel WS*
|
||||||
|
Outcast Pond SW*: Shield Shop NW*
|
||||||
|
Outcast Pond SE*: Shield Shop NE*
|
||||||
|
Sanctuary EC*: Graveyard WC*
|
||||||
|
Dark Chapel EC*: Dark Graveyard WC*
|
||||||
|
Graveyard EC*: River Bend WC*
|
||||||
|
Dark Graveyard EC*: Qirn Jump WC*
|
||||||
|
River Bend SW*: Wooden Bridge NW*
|
||||||
|
River Bend SC*: Wooden Bridge NC*
|
||||||
|
River Bend SE*: Wooden Bridge NE*
|
||||||
|
Qirn Jump SW*: Broken Bridge NW*
|
||||||
|
Qirn Jump SC*: Broken Bridge NC*
|
||||||
|
Qirn Jump SE*: Broken Bridge NE*
|
||||||
|
Wooden Bridge SW*: Sand Dunes NW*
|
||||||
|
Broken Bridge SW*: Dark Dunes NW*
|
||||||
|
Sand Dunes SC*: Stone Bridge NC*
|
||||||
|
Dark Dunes SC*: Hammer Bridge NC*
|
||||||
|
Central Bonk Rocks EN*: Links House WN*
|
||||||
|
Central Bonk Rocks EC*: Links House WC*
|
||||||
|
Central Bonk Rocks ES*: Links House WS*
|
||||||
|
Dark Bonk Rocks EN*: Big Bomb Shop WN*
|
||||||
|
Dark Bonk Rocks EC*: Big Bomb Shop WC*
|
||||||
|
Dark Bonk Rocks ES*: Big Bomb Shop WS*
|
||||||
|
Links House ES*: Stone Bridge WS*
|
||||||
|
Big Bomb Shop ES*: Hammer Bridge WS*
|
||||||
|
Stone Bridge WC: Hobo EC
|
||||||
|
groups:
|
||||||
|
border12_nw:
|
||||||
|
- Potion Shop EN
|
||||||
|
- Potion Shop EC
|
||||||
|
- Dark Witch EN
|
||||||
|
- Dark Witch EC
|
||||||
|
- Zora Approach WN
|
||||||
|
- Zora Approach WC
|
||||||
|
- Catfish Approach WN
|
||||||
|
- Catfish Approach WC
|
||||||
|
- C Whirlpool SC
|
||||||
|
- Dark C Whirlpool SC
|
||||||
|
- Statues SC
|
||||||
|
- Hype Cave SC
|
||||||
|
- Dam NC
|
||||||
|
- Swamp NC
|
||||||
|
- South Pass NC
|
||||||
|
- Dark South Pass NC
|
||||||
|
border12_es:
|
||||||
|
- Lumberjack SW
|
||||||
|
- Dark Lumberjack SW
|
||||||
|
- Mountain Pass NW
|
||||||
|
- Bumper Cave NW
|
||||||
|
- Maze Race ES
|
||||||
|
- Dig Game EC
|
||||||
|
- Dig Game ES
|
||||||
|
- Kakariko Suburb WS
|
||||||
|
- Frog WC
|
||||||
|
- Frog WS
|
||||||
|
border23_nw:
|
||||||
|
- River Bend EN
|
||||||
|
- River Bend EC
|
||||||
|
- River Bend ES
|
||||||
|
- Qirn Jump EN
|
||||||
|
- Qirn Jump EC
|
||||||
|
- Qirn Jump ES
|
||||||
|
- Potion Shop WN
|
||||||
|
- Potion Shop WC
|
||||||
|
- Potion Shop WS
|
||||||
|
- Dark Witch WN
|
||||||
|
- Dark Witch WC
|
||||||
|
- Dark Witch WS
|
||||||
|
- Flute Boy SW
|
||||||
|
- Flute Boy SC
|
||||||
|
- Stumpy SW
|
||||||
|
- Stumpy SC
|
||||||
|
- Central Bonk Rocks SW
|
||||||
|
- Dark Bonk Rocks SW
|
||||||
|
- Links House SC
|
||||||
|
- Big Bomb Shop SC
|
||||||
|
- Stone Bridge EN
|
||||||
|
- Stone Bridge EC
|
||||||
|
- Stone Bridge SC
|
||||||
|
- Hammer Bridge EN
|
||||||
|
- Hammer Bridge EC
|
||||||
|
- Hammer Bridge SC
|
||||||
|
- Tree Line WN
|
||||||
|
- Tree Line WC
|
||||||
|
- Dark Tree Line WN
|
||||||
|
- Dark Tree Line WC
|
||||||
|
- Flute Boy Approach NW
|
||||||
|
- Flute Boy Approach NC
|
||||||
|
- Stumpy Approach NW
|
||||||
|
- Stumpy Approach NC
|
||||||
|
- C Whirlpool NW
|
||||||
|
- Dark C Whirlpool NW
|
||||||
|
- Statues NC
|
||||||
|
- Hype Cave NC
|
||||||
|
- Lake Hylia NW
|
||||||
|
- Ice Lake NW
|
||||||
|
border23_es:
|
||||||
|
- Mountain Pass SE
|
||||||
|
- Bumper Cave SE
|
||||||
|
- Kakariko Fortune EN
|
||||||
|
- Kakariko Fortune ES
|
||||||
|
- Dark Fortune EN
|
||||||
|
- Dark Fortune ES
|
||||||
|
- Kakariko Pond NE
|
||||||
|
- Kakariko Pond WN
|
||||||
|
- Kakariko Pond WS
|
||||||
|
- Outcast Pond NE
|
||||||
|
- Outcast Pond WN
|
||||||
|
- Outcast Pond WS
|
||||||
|
- Kakariko ES
|
||||||
|
- Village of Outcasts ES
|
||||||
|
- Blacksmith WS
|
||||||
|
- Hammer Pegs WS
|
||||||
|
- Kakariko Suburb ES
|
||||||
|
- Frog ES
|
||||||
|
- Flute Boy WS
|
||||||
|
- Stumpy WS
|
||||||
|
border34_nw:
|
||||||
|
- Hyrule Castle ES
|
||||||
|
- Hyrule Castle SW
|
||||||
|
- Hyrule Castle SE
|
||||||
|
- Pyramid ES
|
||||||
|
- Pyramid SW
|
||||||
|
- Pyramid SE
|
||||||
|
- Sand Dunes WN
|
||||||
|
- Dark Dunes WN
|
||||||
|
- Central Bonk Rocks NW
|
||||||
|
- Dark Bonk Rocks NW
|
||||||
|
- Links House NE
|
||||||
|
- Big Bomb Shop NE
|
||||||
|
border34_es:
|
||||||
|
- Forgotten Forest ES
|
||||||
|
- Hyrule Castle WN
|
||||||
|
ow-whirlpools:
|
||||||
|
1:
|
||||||
|
two-way:
|
||||||
|
Zora Whirlpool: Lake Hylia Whirlpool
|
||||||
|
ow-tileflips:
|
||||||
|
1:
|
||||||
|
force_together:
|
||||||
|
Forest:
|
||||||
|
- 0x1a
|
||||||
|
- 0x1b
|
||||||
|
FrogDig:
|
||||||
|
- 0x28
|
||||||
|
- 0x29
|
||||||
313
presets/world/owr_ringshuffle-full.yaml
Normal file
313
presets/world/owr_ringshuffle-full.yaml
Normal file
@@ -0,0 +1,313 @@
|
|||||||
|
ow-edges:
|
||||||
|
1:
|
||||||
|
groups:
|
||||||
|
ring1:
|
||||||
|
- Lost Woods NW
|
||||||
|
- Lost Woods EN
|
||||||
|
- Lost Woods SW
|
||||||
|
- Lost Woods SC
|
||||||
|
- Skull Woods EN
|
||||||
|
- Skull Woods SW
|
||||||
|
- Skull Woods SC
|
||||||
|
- Lumberjack WN
|
||||||
|
- Dark Lumberjack WN
|
||||||
|
- West Death Mountain EN
|
||||||
|
- West Dark Death Mountain EN
|
||||||
|
- East Death Mountain WN
|
||||||
|
- East Death Mountain EN
|
||||||
|
- East Dark Death Mountain WN
|
||||||
|
- East Dark Death Mountain EN
|
||||||
|
- Death Mountain TR Pegs WN
|
||||||
|
- Turtle Rock WN
|
||||||
|
- Zora Waterfall NE
|
||||||
|
- Zora Waterfall SE
|
||||||
|
- Catfish SE
|
||||||
|
- Lost Woods Pass NW
|
||||||
|
- Lost Woods Pass NE
|
||||||
|
- Lost Woods Pass SW
|
||||||
|
- Lost Woods Pass SE
|
||||||
|
- Skull Woods Pass NW
|
||||||
|
- Skull Woods Pass NE
|
||||||
|
- Skull Woods Pass SW
|
||||||
|
- Skull Woods Pass SE
|
||||||
|
- Zora Approach NE
|
||||||
|
- Catfish Approach NE
|
||||||
|
- Kakariko NW
|
||||||
|
- Kakariko NC
|
||||||
|
- Village of Outcasts NW
|
||||||
|
- Village of Outcasts NC
|
||||||
|
- Eastern Palace SE
|
||||||
|
- Palace of Darkness SE
|
||||||
|
- Eastern Nook NE
|
||||||
|
- Palace of Darkness Nook NE
|
||||||
|
- Desert EC
|
||||||
|
- Desert ES
|
||||||
|
- Lake Hylia WS
|
||||||
|
- Lake Hylia EC
|
||||||
|
- Lake Hylia ES
|
||||||
|
- Ice Lake WS
|
||||||
|
- Ice Lake EC
|
||||||
|
- Ice Lake ES
|
||||||
|
- Ice Cave SW
|
||||||
|
- Ice Cave SE
|
||||||
|
- Shopping Mall SW
|
||||||
|
- Shopping Mall SE
|
||||||
|
- Desert Pass WC
|
||||||
|
- Desert Pass WS
|
||||||
|
- Desert Pass EC
|
||||||
|
- Desert Pass ES
|
||||||
|
- Swamp Nook EC
|
||||||
|
- Swamp Nook ES
|
||||||
|
- Dam WC
|
||||||
|
- Dam WS
|
||||||
|
- Dam EC
|
||||||
|
- Swamp WC
|
||||||
|
- Swamp WS
|
||||||
|
- Swamp EC
|
||||||
|
- South Pass WC
|
||||||
|
- South Pass ES
|
||||||
|
- Dark South Pass WC
|
||||||
|
- Dark South Pass ES
|
||||||
|
- Octoballoon NW
|
||||||
|
- Octoballoon NE
|
||||||
|
- Octoballoon WC
|
||||||
|
- Octoballoon WS
|
||||||
|
- Bomber Corner NW
|
||||||
|
- Bomber Corner NE
|
||||||
|
- Bomber Corner WC
|
||||||
|
- Bomber Corner WS
|
||||||
|
- Master Sword Meadow SC
|
||||||
|
- Zoras Domain SW
|
||||||
|
ring2:
|
||||||
|
- Lost Woods SE
|
||||||
|
- Skull Woods SE
|
||||||
|
- West Death Mountain ES
|
||||||
|
- West Dark Death Mountain ES
|
||||||
|
- East Death Mountain WS
|
||||||
|
- East Dark Death Mountain WS
|
||||||
|
- Kakariko Fortune NE
|
||||||
|
- Kakariko Fortune SC
|
||||||
|
- Dark Fortune NE
|
||||||
|
- Dark Fortune SC
|
||||||
|
- Kakariko NE
|
||||||
|
- Kakariko SE
|
||||||
|
- Village of Outcasts NE
|
||||||
|
- Village of Outcasts SE
|
||||||
|
- Eastern Palace SW
|
||||||
|
- Palace of Darkness SW
|
||||||
|
- Kakariko Suburb NE
|
||||||
|
- Frog NE
|
||||||
|
- Tree Line NW
|
||||||
|
- Tree Line SC
|
||||||
|
- Tree Line SE
|
||||||
|
- Dark Tree Line NW
|
||||||
|
- Dark Tree Line SC
|
||||||
|
- Dark Tree Line SE
|
||||||
|
- Flute Boy Approach EC
|
||||||
|
- Stumpy Approach EC
|
||||||
|
- C Whirlpool WC
|
||||||
|
- C Whirlpool EN
|
||||||
|
- C Whirlpool EC
|
||||||
|
- C Whirlpool ES
|
||||||
|
- Dark C Whirlpool WC
|
||||||
|
- Dark C Whirlpool EN
|
||||||
|
- Dark C Whirlpool EC
|
||||||
|
- Dark C Whirlpool ES
|
||||||
|
- Statues WN
|
||||||
|
- Statues WC
|
||||||
|
- Statues WS
|
||||||
|
- Hype Cave WN
|
||||||
|
- Hype Cave WC
|
||||||
|
- Hype Cave WS
|
||||||
|
- Lake Hylia NC
|
||||||
|
- Lake Hylia NE
|
||||||
|
- Ice Lake NC
|
||||||
|
- Ice Lake NE
|
||||||
|
ring3:
|
||||||
|
- Kakariko Pond EN
|
||||||
|
- Kakariko Pond ES
|
||||||
|
- Kakariko Pond SW
|
||||||
|
- Kakariko Pond SE
|
||||||
|
- Outcast Pond EN
|
||||||
|
- Outcast Pond ES
|
||||||
|
- Outcast Pond SW
|
||||||
|
- Outcast Pond SE
|
||||||
|
- Sanctuary WN
|
||||||
|
- Sanctuary WS
|
||||||
|
- Sanctuary EC
|
||||||
|
- Dark Chapel WN
|
||||||
|
- Dark Chapel WS
|
||||||
|
- Dark Chapel EC
|
||||||
|
- Graveyard WC
|
||||||
|
- Graveyard EC
|
||||||
|
- Dark Graveyard WC
|
||||||
|
- Dark Graveyard EC
|
||||||
|
- River Bend WC
|
||||||
|
- River Bend SW
|
||||||
|
- River Bend SC
|
||||||
|
- River Bend SE
|
||||||
|
- Qirn Jump WC
|
||||||
|
- Qirn Jump SW
|
||||||
|
- Qirn Jump SC
|
||||||
|
- Qirn Jump SE
|
||||||
|
- Forgotten Forest NW
|
||||||
|
- Forgotten Forest NE
|
||||||
|
- Shield Shop NW
|
||||||
|
- Shield Shop NE
|
||||||
|
- Wooden Bridge NW
|
||||||
|
- Wooden Bridge NC
|
||||||
|
- Wooden Bridge NE
|
||||||
|
- Wooden Bridge SW
|
||||||
|
- Broken Bridge NW
|
||||||
|
- Broken Bridge NC
|
||||||
|
- Broken Bridge NE
|
||||||
|
- Broken Bridge SW
|
||||||
|
- Sand Dunes NW
|
||||||
|
- Sand Dunes SC
|
||||||
|
- Dark Dunes NW
|
||||||
|
- Dark Dunes SC
|
||||||
|
- Central Bonk Rocks EN
|
||||||
|
- Central Bonk Rocks EC
|
||||||
|
- Central Bonk Rocks ES
|
||||||
|
- Dark Bonk Rocks EN
|
||||||
|
- Dark Bonk Rocks EC
|
||||||
|
- Dark Bonk Rocks ES
|
||||||
|
- Links House WN
|
||||||
|
- Links House WC
|
||||||
|
- Links House WS
|
||||||
|
- Links House ES
|
||||||
|
- Big Bomb Shop WN
|
||||||
|
- Big Bomb Shop WC
|
||||||
|
- Big Bomb Shop WS
|
||||||
|
- Big Bomb Shop ES
|
||||||
|
- Stone Bridge NC
|
||||||
|
- Stone Bridge WC
|
||||||
|
- Stone Bridge WS
|
||||||
|
- Hammer Bridge NC
|
||||||
|
- Hammer Bridge WS
|
||||||
|
- Hobo EC
|
||||||
|
border12_nw:
|
||||||
|
- Potion Shop EN
|
||||||
|
- Potion Shop EC
|
||||||
|
- Dark Witch EN
|
||||||
|
- Dark Witch EC
|
||||||
|
- Zora Approach WN
|
||||||
|
- Zora Approach WC
|
||||||
|
- Catfish Approach WN
|
||||||
|
- Catfish Approach WC
|
||||||
|
- C Whirlpool SC
|
||||||
|
- Dark C Whirlpool SC
|
||||||
|
- Statues SC
|
||||||
|
- Hype Cave SC
|
||||||
|
- Dam NC
|
||||||
|
- Swamp NC
|
||||||
|
- South Pass NC
|
||||||
|
- Dark South Pass NC
|
||||||
|
border12_es:
|
||||||
|
- Lumberjack SW
|
||||||
|
- Dark Lumberjack SW
|
||||||
|
- Mountain Pass NW
|
||||||
|
- Bumper Cave NW
|
||||||
|
- Maze Race ES
|
||||||
|
- Dig Game EC
|
||||||
|
- Dig Game ES
|
||||||
|
- Kakariko Suburb WS
|
||||||
|
- Frog WC
|
||||||
|
- Frog WS
|
||||||
|
border23_nw:
|
||||||
|
- River Bend EN
|
||||||
|
- River Bend EC
|
||||||
|
- River Bend ES
|
||||||
|
- Qirn Jump EN
|
||||||
|
- Qirn Jump EC
|
||||||
|
- Qirn Jump ES
|
||||||
|
- Potion Shop WN
|
||||||
|
- Potion Shop WC
|
||||||
|
- Potion Shop WS
|
||||||
|
- Dark Witch WN
|
||||||
|
- Dark Witch WC
|
||||||
|
- Dark Witch WS
|
||||||
|
- Flute Boy SW
|
||||||
|
- Flute Boy SC
|
||||||
|
- Stumpy SW
|
||||||
|
- Stumpy SC
|
||||||
|
- Central Bonk Rocks SW
|
||||||
|
- Dark Bonk Rocks SW
|
||||||
|
- Links House SC
|
||||||
|
- Big Bomb Shop SC
|
||||||
|
- Stone Bridge EN
|
||||||
|
- Stone Bridge EC
|
||||||
|
- Stone Bridge SC
|
||||||
|
- Hammer Bridge EN
|
||||||
|
- Hammer Bridge EC
|
||||||
|
- Hammer Bridge SC
|
||||||
|
- Tree Line WN
|
||||||
|
- Tree Line WC
|
||||||
|
- Dark Tree Line WN
|
||||||
|
- Dark Tree Line WC
|
||||||
|
- Flute Boy Approach NW
|
||||||
|
- Flute Boy Approach NC
|
||||||
|
- Stumpy Approach NW
|
||||||
|
- Stumpy Approach NC
|
||||||
|
- C Whirlpool NW
|
||||||
|
- Dark C Whirlpool NW
|
||||||
|
- Statues NC
|
||||||
|
- Hype Cave NC
|
||||||
|
- Lake Hylia NW
|
||||||
|
- Ice Lake NW
|
||||||
|
border23_es:
|
||||||
|
- Mountain Pass SE
|
||||||
|
- Bumper Cave SE
|
||||||
|
- Kakariko Fortune EN
|
||||||
|
- Kakariko Fortune ES
|
||||||
|
- Dark Fortune EN
|
||||||
|
- Dark Fortune ES
|
||||||
|
- Kakariko Pond NE
|
||||||
|
- Kakariko Pond WN
|
||||||
|
- Kakariko Pond WS
|
||||||
|
- Outcast Pond NE
|
||||||
|
- Outcast Pond WN
|
||||||
|
- Outcast Pond WS
|
||||||
|
- Kakariko ES
|
||||||
|
- Village of Outcasts ES
|
||||||
|
- Blacksmith WS
|
||||||
|
- Hammer Pegs WS
|
||||||
|
- Kakariko Suburb ES
|
||||||
|
- Frog ES
|
||||||
|
- Flute Boy WS
|
||||||
|
- Stumpy WS
|
||||||
|
border34_nw:
|
||||||
|
- Hyrule Castle ES
|
||||||
|
- Hyrule Castle SW
|
||||||
|
- Hyrule Castle SE
|
||||||
|
- Pyramid ES
|
||||||
|
- Pyramid SW
|
||||||
|
- Pyramid SE
|
||||||
|
- Sand Dunes WN
|
||||||
|
- Dark Dunes WN
|
||||||
|
- Central Bonk Rocks NW
|
||||||
|
- Dark Bonk Rocks NW
|
||||||
|
- Links House NE
|
||||||
|
- Big Bomb Shop NE
|
||||||
|
border34_es:
|
||||||
|
- Forgotten Forest ES
|
||||||
|
- Hyrule Castle WN
|
||||||
|
ow-tileflips:
|
||||||
|
1:
|
||||||
|
force_together:
|
||||||
|
PedHobo:
|
||||||
|
- 0x00
|
||||||
|
- 0x2d
|
||||||
|
- 0x80
|
||||||
|
Zora:
|
||||||
|
- 0x0f
|
||||||
|
- 0x81
|
||||||
|
Forest:
|
||||||
|
- 0x1a
|
||||||
|
- 0x1b
|
||||||
|
FrogDig:
|
||||||
|
- 0x28
|
||||||
|
- 0x29
|
||||||
|
Desert:
|
||||||
|
- 0x30
|
||||||
|
- 0x3a
|
||||||
258
presets/world/owr_ringshuffle-interiors.yaml
Normal file
258
presets/world/owr_ringshuffle-interiors.yaml
Normal file
@@ -0,0 +1,258 @@
|
|||||||
|
ow-edges:
|
||||||
|
1:
|
||||||
|
two-way:
|
||||||
|
Lumberjack SW: Mountain Pass NW
|
||||||
|
Dark Lumberjack SW: Bumper Cave NW
|
||||||
|
Potion Shop EN: Zora Approach WN
|
||||||
|
Potion Shop EC: Zora Approach WC
|
||||||
|
Dark Witch EN: Catfish Approach WN
|
||||||
|
Dark Witch EC: Catfish Approach WC
|
||||||
|
Maze Race ES: Kakariko Suburb WS
|
||||||
|
Dig Game EC: Frog WC
|
||||||
|
Dig Game ES: Frog WS
|
||||||
|
C Whirlpool SC: Dam NC
|
||||||
|
Dark C Whirlpool SC: Swamp NC
|
||||||
|
Statues SC: South Pass NC
|
||||||
|
Hype Cave SC: Dark South Pass NC
|
||||||
|
Mountain Pass SE: Kakariko Pond NE
|
||||||
|
Bumper Cave SE: Outcast Pond NE
|
||||||
|
Kakariko Fortune EN: Kakariko Pond WN
|
||||||
|
Kakariko Fortune ES: Kakariko Pond WS
|
||||||
|
Dark Fortune EN: Outcast Pond WN
|
||||||
|
Dark Fortune ES: Outcast Pond WS
|
||||||
|
River Bend EN: Potion Shop WN
|
||||||
|
River Bend EC: Potion Shop WC
|
||||||
|
River Bend ES: Potion Shop WS
|
||||||
|
Qirn Jump EN: Dark Witch WN
|
||||||
|
Qirn Jump EC: Dark Witch WC
|
||||||
|
Qirn Jump ES: Dark Witch WS
|
||||||
|
Kakariko ES: Blacksmith WS
|
||||||
|
Village of Outcasts ES: Hammer Pegs WS
|
||||||
|
Kakariko Suburb ES: Flute Boy WS
|
||||||
|
Frog ES: Stumpy WS
|
||||||
|
Flute Boy SW: Flute Boy Approach NW
|
||||||
|
Flute Boy SC: Flute Boy Approach NC
|
||||||
|
Stumpy SW: Stumpy Approach NW
|
||||||
|
Stumpy SC: Stumpy Approach NC
|
||||||
|
Central Bonk Rocks SW: C Whirlpool NW
|
||||||
|
Dark Bonk Rocks SW: Dark C Whirlpool NW
|
||||||
|
Links House SC: Statues NC
|
||||||
|
Big Bomb Shop SC: Hype Cave NC
|
||||||
|
Stone Bridge EN: Tree Line WN
|
||||||
|
Stone Bridge EC: Tree Line WC
|
||||||
|
Stone Bridge SC: Lake Hylia NW
|
||||||
|
Hammer Bridge EN: Dark Tree Line WN
|
||||||
|
Hammer Bridge EC: Dark Tree Line WC
|
||||||
|
Hammer Bridge SC: Ice Lake NW
|
||||||
|
Forgotten Forest ES: Hyrule Castle WN
|
||||||
|
Hyrule Castle ES: Sand Dunes WN
|
||||||
|
Hyrule Castle SW: Central Bonk Rocks NW
|
||||||
|
Hyrule Castle SE: Links House NE
|
||||||
|
Pyramid ES: Dark Dunes WN
|
||||||
|
Pyramid SW: Dark Bonk Rocks NW
|
||||||
|
Pyramid SE: Big Bomb Shop NE
|
||||||
|
groups:
|
||||||
|
ring1:
|
||||||
|
- Lost Woods NW
|
||||||
|
- Lost Woods EN
|
||||||
|
- Lost Woods SW
|
||||||
|
- Lost Woods SC
|
||||||
|
- Skull Woods EN
|
||||||
|
- Skull Woods SW
|
||||||
|
- Skull Woods SC
|
||||||
|
- Lumberjack WN
|
||||||
|
- Dark Lumberjack WN
|
||||||
|
- West Death Mountain EN
|
||||||
|
- West Dark Death Mountain EN
|
||||||
|
- East Death Mountain WN
|
||||||
|
- East Death Mountain EN
|
||||||
|
- East Dark Death Mountain WN
|
||||||
|
- East Dark Death Mountain EN
|
||||||
|
- Death Mountain TR Pegs WN
|
||||||
|
- Turtle Rock WN
|
||||||
|
- Zora Waterfall NE
|
||||||
|
- Zora Waterfall SE
|
||||||
|
- Catfish SE
|
||||||
|
- Lost Woods Pass NW
|
||||||
|
- Lost Woods Pass NE
|
||||||
|
- Lost Woods Pass SW
|
||||||
|
- Lost Woods Pass SE
|
||||||
|
- Skull Woods Pass NW
|
||||||
|
- Skull Woods Pass NE
|
||||||
|
- Skull Woods Pass SW
|
||||||
|
- Skull Woods Pass SE
|
||||||
|
- Zora Approach NE
|
||||||
|
- Catfish Approach NE
|
||||||
|
- Kakariko NW
|
||||||
|
- Kakariko NC
|
||||||
|
- Village of Outcasts NW
|
||||||
|
- Village of Outcasts NC
|
||||||
|
- Eastern Palace SE
|
||||||
|
- Palace of Darkness SE
|
||||||
|
- Eastern Nook NE
|
||||||
|
- Palace of Darkness Nook NE
|
||||||
|
- Desert EC
|
||||||
|
- Desert ES
|
||||||
|
- Lake Hylia WS
|
||||||
|
- Lake Hylia EC
|
||||||
|
- Lake Hylia ES
|
||||||
|
- Ice Lake WS
|
||||||
|
- Ice Lake EC
|
||||||
|
- Ice Lake ES
|
||||||
|
- Ice Cave SW
|
||||||
|
- Ice Cave SE
|
||||||
|
- Shopping Mall SW
|
||||||
|
- Shopping Mall SE
|
||||||
|
- Desert Pass WC
|
||||||
|
- Desert Pass WS
|
||||||
|
- Desert Pass EC
|
||||||
|
- Desert Pass ES
|
||||||
|
- Swamp Nook EC
|
||||||
|
- Swamp Nook ES
|
||||||
|
- Dam WC
|
||||||
|
- Dam WS
|
||||||
|
- Dam EC
|
||||||
|
- Swamp WC
|
||||||
|
- Swamp WS
|
||||||
|
- Swamp EC
|
||||||
|
- South Pass WC
|
||||||
|
- South Pass ES
|
||||||
|
- Dark South Pass WC
|
||||||
|
- Dark South Pass ES
|
||||||
|
- Octoballoon NW
|
||||||
|
- Octoballoon NE
|
||||||
|
- Octoballoon WC
|
||||||
|
- Octoballoon WS
|
||||||
|
- Bomber Corner NW
|
||||||
|
- Bomber Corner NE
|
||||||
|
- Bomber Corner WC
|
||||||
|
- Bomber Corner WS
|
||||||
|
- Master Sword Meadow SC
|
||||||
|
- Zoras Domain SW
|
||||||
|
ring2:
|
||||||
|
- Lost Woods SE
|
||||||
|
- Skull Woods SE
|
||||||
|
- West Death Mountain ES
|
||||||
|
- West Dark Death Mountain ES
|
||||||
|
- East Death Mountain WS
|
||||||
|
- East Dark Death Mountain WS
|
||||||
|
- Kakariko Fortune NE
|
||||||
|
- Kakariko Fortune SC
|
||||||
|
- Dark Fortune NE
|
||||||
|
- Dark Fortune SC
|
||||||
|
- Kakariko NE
|
||||||
|
- Kakariko SE
|
||||||
|
- Village of Outcasts NE
|
||||||
|
- Village of Outcasts SE
|
||||||
|
- Eastern Palace SW
|
||||||
|
- Palace of Darkness SW
|
||||||
|
- Kakariko Suburb NE
|
||||||
|
- Frog NE
|
||||||
|
- Tree Line NW
|
||||||
|
- Tree Line SC
|
||||||
|
- Tree Line SE
|
||||||
|
- Dark Tree Line NW
|
||||||
|
- Dark Tree Line SC
|
||||||
|
- Dark Tree Line SE
|
||||||
|
- Flute Boy Approach EC
|
||||||
|
- Stumpy Approach EC
|
||||||
|
- C Whirlpool WC
|
||||||
|
- C Whirlpool EN
|
||||||
|
- C Whirlpool EC
|
||||||
|
- C Whirlpool ES
|
||||||
|
- Dark C Whirlpool WC
|
||||||
|
- Dark C Whirlpool EN
|
||||||
|
- Dark C Whirlpool EC
|
||||||
|
- Dark C Whirlpool ES
|
||||||
|
- Statues WN
|
||||||
|
- Statues WC
|
||||||
|
- Statues WS
|
||||||
|
- Hype Cave WN
|
||||||
|
- Hype Cave WC
|
||||||
|
- Hype Cave WS
|
||||||
|
- Lake Hylia NC
|
||||||
|
- Lake Hylia NE
|
||||||
|
- Ice Lake NC
|
||||||
|
- Ice Lake NE
|
||||||
|
ring3:
|
||||||
|
- Kakariko Pond EN
|
||||||
|
- Kakariko Pond ES
|
||||||
|
- Kakariko Pond SW
|
||||||
|
- Kakariko Pond SE
|
||||||
|
- Outcast Pond EN
|
||||||
|
- Outcast Pond ES
|
||||||
|
- Outcast Pond SW
|
||||||
|
- Outcast Pond SE
|
||||||
|
- Sanctuary WN
|
||||||
|
- Sanctuary WS
|
||||||
|
- Sanctuary EC
|
||||||
|
- Dark Chapel WN
|
||||||
|
- Dark Chapel WS
|
||||||
|
- Dark Chapel EC
|
||||||
|
- Graveyard WC
|
||||||
|
- Graveyard EC
|
||||||
|
- Dark Graveyard WC
|
||||||
|
- Dark Graveyard EC
|
||||||
|
- River Bend WC
|
||||||
|
- River Bend SW
|
||||||
|
- River Bend SC
|
||||||
|
- River Bend SE
|
||||||
|
- Qirn Jump WC
|
||||||
|
- Qirn Jump SW
|
||||||
|
- Qirn Jump SC
|
||||||
|
- Qirn Jump SE
|
||||||
|
- Forgotten Forest NW
|
||||||
|
- Forgotten Forest NE
|
||||||
|
- Shield Shop NW
|
||||||
|
- Shield Shop NE
|
||||||
|
- Wooden Bridge NW
|
||||||
|
- Wooden Bridge NC
|
||||||
|
- Wooden Bridge NE
|
||||||
|
- Wooden Bridge SW
|
||||||
|
- Broken Bridge NW
|
||||||
|
- Broken Bridge NC
|
||||||
|
- Broken Bridge NE
|
||||||
|
- Broken Bridge SW
|
||||||
|
- Sand Dunes NW
|
||||||
|
- Sand Dunes SC
|
||||||
|
- Dark Dunes NW
|
||||||
|
- Dark Dunes SC
|
||||||
|
- Central Bonk Rocks EN
|
||||||
|
- Central Bonk Rocks EC
|
||||||
|
- Central Bonk Rocks ES
|
||||||
|
- Dark Bonk Rocks EN
|
||||||
|
- Dark Bonk Rocks EC
|
||||||
|
- Dark Bonk Rocks ES
|
||||||
|
- Links House WN
|
||||||
|
- Links House WC
|
||||||
|
- Links House WS
|
||||||
|
- Links House ES
|
||||||
|
- Big Bomb Shop WN
|
||||||
|
- Big Bomb Shop WC
|
||||||
|
- Big Bomb Shop WS
|
||||||
|
- Big Bomb Shop ES
|
||||||
|
- Stone Bridge NC
|
||||||
|
- Stone Bridge WC
|
||||||
|
- Stone Bridge WS
|
||||||
|
- Hammer Bridge NC
|
||||||
|
- Hammer Bridge WS
|
||||||
|
- Hobo EC
|
||||||
|
ow-whirlpools:
|
||||||
|
1:
|
||||||
|
two-way:
|
||||||
|
Kakariko Pond Whirlpool: Octoballoon Whirlpool
|
||||||
|
Qirn Jump Whirlpool: Bomber Corner Whirlpool
|
||||||
|
River Bend Whirlpool: C Whirlpool
|
||||||
|
ow-tileflips:
|
||||||
|
1:
|
||||||
|
force_together:
|
||||||
|
PedHobo:
|
||||||
|
- 0x00
|
||||||
|
- 0x2d
|
||||||
|
- 0x80
|
||||||
|
Zora:
|
||||||
|
- 0x0f
|
||||||
|
- 0x81
|
||||||
|
Desert:
|
||||||
|
- 0x30
|
||||||
|
- 0x3a
|
||||||
@@ -202,9 +202,9 @@ ow-edges:
|
|||||||
ow-tileflips:
|
ow-tileflips:
|
||||||
1:
|
1:
|
||||||
force_together:
|
force_together:
|
||||||
1:
|
Pedestal:
|
||||||
- 0x00
|
- 0x00
|
||||||
- 0x80
|
- 0x80
|
||||||
2:
|
Zora:
|
||||||
- 0x0f
|
- 0x0f
|
||||||
- 0x81
|
- 0x81
|
||||||
123
presets/world/owr_shuffle-splitsimilar.yaml
Normal file
123
presets/world/owr_shuffle-splitsimilar.yaml
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
settings:
|
||||||
|
1:
|
||||||
|
ow_terrain: false
|
||||||
|
ow-edges:
|
||||||
|
1:
|
||||||
|
groups:
|
||||||
|
similar_2_left_top:
|
||||||
|
- Lost Woods SW
|
||||||
|
- Skull Woods SW
|
||||||
|
- Lost Woods Pass NW
|
||||||
|
- Lost Woods Pass SW
|
||||||
|
- Skull Woods Pass NW
|
||||||
|
- Skull Woods Pass SW
|
||||||
|
- Kakariko Fortune EN
|
||||||
|
- Dark Fortune EN
|
||||||
|
- Kakariko Pond WN
|
||||||
|
- Kakariko Pond EN
|
||||||
|
- Kakariko Pond SW
|
||||||
|
- Outcast Pond WN
|
||||||
|
- Outcast Pond EN
|
||||||
|
- Outcast Pond SW
|
||||||
|
- Sanctuary WN
|
||||||
|
- Dark Chapel WN
|
||||||
|
- River Bend EC
|
||||||
|
- River Bend SW
|
||||||
|
- Qirn Jump EC
|
||||||
|
- Qirn Jump SW
|
||||||
|
- Potion Shop WC
|
||||||
|
- Dark Witch WC
|
||||||
|
- Kakariko NW
|
||||||
|
- Village of Outcasts NW
|
||||||
|
- Forgotten Forest NW
|
||||||
|
- Shield Shop NW
|
||||||
|
- Wooden Bridge NW
|
||||||
|
- Broken Bridge NW
|
||||||
|
- Dig Game EC
|
||||||
|
- Frog WC
|
||||||
|
- Flute Boy SW
|
||||||
|
- Stumpy SW
|
||||||
|
- Desert EC
|
||||||
|
- Flute Boy Approach NW
|
||||||
|
- Stumpy Approach NW
|
||||||
|
- C Whirlpool EN
|
||||||
|
- Dark C Whirlpool EN
|
||||||
|
- Statues WN
|
||||||
|
- Hype Cave WN
|
||||||
|
- Desert Pass WC
|
||||||
|
- Desert Pass EC
|
||||||
|
- Swamp Nook EC
|
||||||
|
- Dam WC
|
||||||
|
- Swamp WC
|
||||||
|
similar_2_right_bottom:
|
||||||
|
- Lost Woods SC
|
||||||
|
- Skull Woods SC
|
||||||
|
- Lost Woods Pass NE
|
||||||
|
- Lost Woods Pass SE
|
||||||
|
- Skull Woods Pass NE
|
||||||
|
- Skull Woods Pass SE
|
||||||
|
- Kakariko Fortune ES
|
||||||
|
- Dark Fortune ES
|
||||||
|
- Kakariko Pond WS
|
||||||
|
- Kakariko Pond ES
|
||||||
|
- Kakariko Pond SE
|
||||||
|
- Outcast Pond WS
|
||||||
|
- Outcast Pond ES
|
||||||
|
- Outcast Pond SE
|
||||||
|
- Sanctuary WS
|
||||||
|
- Dark Chapel WS
|
||||||
|
- River Bend ES
|
||||||
|
- River Bend SE
|
||||||
|
- Qirn Jump ES
|
||||||
|
- Qirn Jump SE
|
||||||
|
- Potion Shop WS
|
||||||
|
- Dark Witch WS
|
||||||
|
- Kakariko NC
|
||||||
|
- Village of Outcasts NC
|
||||||
|
- Forgotten Forest NE
|
||||||
|
- Shield Shop NE
|
||||||
|
- Wooden Bridge NE
|
||||||
|
- Broken Bridge NE
|
||||||
|
- Dig Game ES
|
||||||
|
- Frog WS
|
||||||
|
- Flute Boy SC
|
||||||
|
- Stumpy SC
|
||||||
|
- Desert ES
|
||||||
|
- Flute Boy Approach NC
|
||||||
|
- Stumpy Approach NC
|
||||||
|
- C Whirlpool ES
|
||||||
|
- Dark C Whirlpool ES
|
||||||
|
- Statues WS
|
||||||
|
- Hype Cave WS
|
||||||
|
- Desert Pass WS
|
||||||
|
- Desert Pass ES
|
||||||
|
- Swamp Nook ES
|
||||||
|
- Dam WS
|
||||||
|
- Swamp WS
|
||||||
|
similar_3_left_top:
|
||||||
|
- Central Bonk Rocks EN
|
||||||
|
- Dark Bonk Rocks EN
|
||||||
|
- Links House WN
|
||||||
|
- Big Bomb Shop WN
|
||||||
|
similar_3_middle:
|
||||||
|
- Central Bonk Rocks EC
|
||||||
|
- Dark Bonk Rocks EC
|
||||||
|
- Links House WC
|
||||||
|
- Big Bomb Shop WC
|
||||||
|
similar_3_right_bottom:
|
||||||
|
- Central Bonk Rocks ES
|
||||||
|
- Dark Bonk Rocks ES
|
||||||
|
- Links House WS
|
||||||
|
- Big Bomb Shop WS
|
||||||
|
ow-tileflips:
|
||||||
|
1:
|
||||||
|
force_together:
|
||||||
|
Forest:
|
||||||
|
- 0x1a
|
||||||
|
- 0x1b
|
||||||
|
FrogDig:
|
||||||
|
- 0x28
|
||||||
|
- 0x29
|
||||||
|
Desert:
|
||||||
|
- 0x30
|
||||||
|
- 0x3a
|
||||||
175
presets/world/owr_shuffle-splitsimilarterrain.yaml
Normal file
175
presets/world/owr_shuffle-splitsimilarterrain.yaml
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
settings:
|
||||||
|
1:
|
||||||
|
ow_terrain: true
|
||||||
|
ow-edges:
|
||||||
|
1:
|
||||||
|
groups:
|
||||||
|
similar_2_left_top:
|
||||||
|
- Lost Woods SW
|
||||||
|
- Skull Woods SW
|
||||||
|
- Lost Woods Pass NW
|
||||||
|
- Lost Woods Pass SW
|
||||||
|
- Skull Woods Pass NW
|
||||||
|
- Skull Woods Pass SW
|
||||||
|
- Kakariko Fortune EN
|
||||||
|
- Dark Fortune EN
|
||||||
|
- Kakariko Pond WN
|
||||||
|
- Kakariko Pond EN
|
||||||
|
- Kakariko Pond SW
|
||||||
|
- Outcast Pond WN
|
||||||
|
- Outcast Pond EN
|
||||||
|
- Outcast Pond SW
|
||||||
|
- Sanctuary WN
|
||||||
|
- Dark Chapel WN
|
||||||
|
- Potion Shop EN
|
||||||
|
- Dark Witch EN
|
||||||
|
- Zora Approach WN
|
||||||
|
- Catfish Approach WN
|
||||||
|
- Kakariko NW
|
||||||
|
- Village of Outcasts NW
|
||||||
|
- Forgotten Forest NW
|
||||||
|
- Shield Shop NW
|
||||||
|
- Dig Game EC
|
||||||
|
- Frog WC
|
||||||
|
- Flute Boy SW
|
||||||
|
- Stumpy SW
|
||||||
|
- Stone Bridge EN
|
||||||
|
- Hammer Bridge EN
|
||||||
|
- Tree Line WN
|
||||||
|
- Tree Line SC
|
||||||
|
- Dark Tree Line WN
|
||||||
|
- Dark Tree Line SC
|
||||||
|
- Desert EC
|
||||||
|
- Flute Boy Approach NW
|
||||||
|
- Stumpy Approach NW
|
||||||
|
- Lake Hylia NC
|
||||||
|
- Lake Hylia EC
|
||||||
|
- Ice Lake NC
|
||||||
|
- Ice Lake EC
|
||||||
|
- Ice Cave SW
|
||||||
|
- Shopping Mall SW
|
||||||
|
- Desert Pass WC
|
||||||
|
- Desert Pass EC
|
||||||
|
- Swamp Nook EC
|
||||||
|
- Dam WC
|
||||||
|
- Swamp WC
|
||||||
|
- Octoballoon NW
|
||||||
|
- Octoballoon WC
|
||||||
|
- Bomber Corner NW
|
||||||
|
- Bomber Corner WC
|
||||||
|
similar_2_right_bottom:
|
||||||
|
- Lost Woods SC
|
||||||
|
- Skull Woods SC
|
||||||
|
- Lost Woods Pass NE
|
||||||
|
- Lost Woods Pass SE
|
||||||
|
- Skull Woods Pass NE
|
||||||
|
- Skull Woods Pass SE
|
||||||
|
- Kakariko Fortune ES
|
||||||
|
- Dark Fortune ES
|
||||||
|
- Kakariko Pond WS
|
||||||
|
- Kakariko Pond ES
|
||||||
|
- Kakariko Pond SE
|
||||||
|
- Outcast Pond WS
|
||||||
|
- Outcast Pond ES
|
||||||
|
- Outcast Pond SE
|
||||||
|
- Sanctuary WS
|
||||||
|
- Dark Chapel WS
|
||||||
|
- Potion Shop EC
|
||||||
|
- Dark Witch EC
|
||||||
|
- Zora Approach WC
|
||||||
|
- Catfish Approach WC
|
||||||
|
- Kakariko NC
|
||||||
|
- Village of Outcasts NC
|
||||||
|
- Forgotten Forest NE
|
||||||
|
- Shield Shop NE
|
||||||
|
- Dig Game ES
|
||||||
|
- Frog WS
|
||||||
|
- Flute Boy SC
|
||||||
|
- Stumpy SC
|
||||||
|
- Stone Bridge EC
|
||||||
|
- Hammer Bridge EC
|
||||||
|
- Tree Line WC
|
||||||
|
- Tree Line SE
|
||||||
|
- Dark Tree Line WC
|
||||||
|
- Dark Tree Line SE
|
||||||
|
- Desert ES
|
||||||
|
- Flute Boy Approach NC
|
||||||
|
- Stumpy Approach NC
|
||||||
|
- Lake Hylia NE
|
||||||
|
- Lake Hylia ES
|
||||||
|
- Ice Lake NE
|
||||||
|
- Ice Lake ES
|
||||||
|
- Ice Cave SE
|
||||||
|
- Shopping Mall SE
|
||||||
|
- Desert Pass WS
|
||||||
|
- Desert Pass ES
|
||||||
|
- Swamp Nook ES
|
||||||
|
- Dam WS
|
||||||
|
- Swamp WS
|
||||||
|
- Octoballoon NE
|
||||||
|
- Octoballoon WS
|
||||||
|
- Bomber Corner NE
|
||||||
|
- Bomber Corner WS
|
||||||
|
similar_3_left_top:
|
||||||
|
- River Bend EN
|
||||||
|
- River Bend SW
|
||||||
|
- Qirn Jump EN
|
||||||
|
- Qirn Jump SW
|
||||||
|
- Potion Shop WN
|
||||||
|
- Dark Witch WN
|
||||||
|
- Wooden Bridge NW
|
||||||
|
- Broken Bridge NW
|
||||||
|
- Central Bonk Rocks EN
|
||||||
|
- Dark Bonk Rocks EN
|
||||||
|
- Links House WN
|
||||||
|
- Big Bomb Shop WN
|
||||||
|
- C Whirlpool EN
|
||||||
|
- Dark C Whirlpool EN
|
||||||
|
- Statues WN
|
||||||
|
- Hype Cave WN
|
||||||
|
similar_3_middle:
|
||||||
|
- River Bend EC
|
||||||
|
- River Bend SC
|
||||||
|
- Qirn Jump EC
|
||||||
|
- Qirn Jump SC
|
||||||
|
- Potion Shop WC
|
||||||
|
- Dark Witch WC
|
||||||
|
- Wooden Bridge NC
|
||||||
|
- Broken Bridge NC
|
||||||
|
- Central Bonk Rocks EC
|
||||||
|
- Dark Bonk Rocks EC
|
||||||
|
- Links House WC
|
||||||
|
- Big Bomb Shop WC
|
||||||
|
- C Whirlpool EC
|
||||||
|
- Dark C Whirlpool EC
|
||||||
|
- Statues WC
|
||||||
|
- Hype Cave WC
|
||||||
|
similar_3_right_bottom:
|
||||||
|
- River Bend ES
|
||||||
|
- River Bend SE
|
||||||
|
- Qirn Jump ES
|
||||||
|
- Qirn Jump SE
|
||||||
|
- Potion Shop WS
|
||||||
|
- Dark Witch WS
|
||||||
|
- Wooden Bridge NE
|
||||||
|
- Broken Bridge NE
|
||||||
|
- Central Bonk Rocks ES
|
||||||
|
- Dark Bonk Rocks ES
|
||||||
|
- Links House WS
|
||||||
|
- Big Bomb Shop WS
|
||||||
|
- C Whirlpool ES
|
||||||
|
- Dark C Whirlpool ES
|
||||||
|
- Statues WS
|
||||||
|
- Hype Cave WS
|
||||||
|
ow-tileflips:
|
||||||
|
1:
|
||||||
|
force_together:
|
||||||
|
Forest:
|
||||||
|
- 0x1a
|
||||||
|
- 0x1b
|
||||||
|
FrogDig:
|
||||||
|
- 0x28
|
||||||
|
- 0x29
|
||||||
|
Desert:
|
||||||
|
- 0x30
|
||||||
|
- 0x3a
|
||||||
@@ -79,9 +79,9 @@ ow-edges:
|
|||||||
ow-tileflips:
|
ow-tileflips:
|
||||||
1:
|
1:
|
||||||
force_together:
|
force_together:
|
||||||
1:
|
Pedestal:
|
||||||
- 0x00
|
- 0x00
|
||||||
- 0x80
|
- 0x80
|
||||||
2:
|
Zora:
|
||||||
- 0x0f
|
- 0x0f
|
||||||
- 0x81
|
- 0x81
|
||||||
@@ -219,9 +219,9 @@ ow-edges:
|
|||||||
ow-tileflips:
|
ow-tileflips:
|
||||||
1:
|
1:
|
||||||
force_together:
|
force_together:
|
||||||
1:
|
Pedestal:
|
||||||
- 0x00
|
- 0x00
|
||||||
- 0x80
|
- 0x80
|
||||||
2:
|
Zora:
|
||||||
- 0x0f
|
- 0x0f
|
||||||
- 0x81
|
- 0x81
|
||||||
@@ -72,11 +72,13 @@ def generate_dungeon_find_proposal(builder, entrance_region_names, split_dungeon
|
|||||||
entrance_regions = [x for x in entrance_regions if x not in excluded.keys()]
|
entrance_regions = [x for x in entrance_regions if x not in excluded.keys()]
|
||||||
doors_to_connect, idx = {}, 0
|
doors_to_connect, idx = {}, 0
|
||||||
all_regions = set()
|
all_regions = set()
|
||||||
|
bk_special = False
|
||||||
for sector in builder.sectors:
|
for sector in builder.sectors:
|
||||||
for door in sector.outstanding_doors:
|
for door in sector.outstanding_doors:
|
||||||
doors_to_connect[door.name] = door, idx
|
doors_to_connect[door.name] = door, idx
|
||||||
idx += 1
|
idx += 1
|
||||||
all_regions.update(sector.regions)
|
all_regions.update(sector.regions)
|
||||||
|
bk_special |= check_for_special(sector.regions)
|
||||||
finished = False
|
finished = False
|
||||||
# flag if standard and this is hyrule castle
|
# flag if standard and this is hyrule castle
|
||||||
paths = determine_paths_for_dungeon(world, player, all_regions, name)
|
paths = determine_paths_for_dungeon(world, player, all_regions, name)
|
||||||
@@ -95,9 +97,9 @@ def generate_dungeon_find_proposal(builder, entrance_region_names, split_dungeon
|
|||||||
if hash_code not in hash_code_set:
|
if hash_code not in hash_code_set:
|
||||||
hash_code_set.add(hash_code)
|
hash_code_set.add(hash_code)
|
||||||
explored_state = explore_proposal(name, entrance_regions, all_regions, proposed_map, doors_to_connect,
|
explored_state = explore_proposal(name, entrance_regions, all_regions, proposed_map, doors_to_connect,
|
||||||
world, player)
|
bk_special, world, player)
|
||||||
if check_valid(name, explored_state, proposed_map, doors_to_connect, all_regions,
|
if check_valid(name, explored_state, proposed_map, doors_to_connect, all_regions,
|
||||||
paths, entrance_regions, world, player):
|
paths, entrance_regions, bk_special, world, player):
|
||||||
finished = True
|
finished = True
|
||||||
else:
|
else:
|
||||||
proposed_map, hash_code = modify_proposal(proposed_map, explored_state, doors_to_connect,
|
proposed_map, hash_code = modify_proposal(proposed_map, explored_state, doors_to_connect,
|
||||||
@@ -229,21 +231,24 @@ def modify_proposal(proposed_map, explored_state, doors_to_connect, hash_code_se
|
|||||||
return proposed_map, hash_code
|
return proposed_map, hash_code
|
||||||
|
|
||||||
|
|
||||||
def explore_proposal(name, entrance_regions, all_regions, proposed_map, valid_doors, world, player):
|
def explore_proposal(name, entrance_regions, all_regions, proposed_map, valid_doors, bk_special, world, player):
|
||||||
start = ExplorationState(dungeon=name)
|
start = ExplorationState(dungeon=name)
|
||||||
|
bk_relevant = (world.door_type_mode[player] == 'original' and not world.bigkeyshuffle[player]) or bk_special
|
||||||
|
start.big_key_special = bk_special
|
||||||
original_state = extend_reachable_state_lenient(entrance_regions, start, proposed_map,
|
original_state = extend_reachable_state_lenient(entrance_regions, start, proposed_map,
|
||||||
all_regions, valid_doors, world, player)
|
all_regions, valid_doors, bk_relevant, world, player)
|
||||||
return original_state
|
return original_state
|
||||||
|
|
||||||
|
|
||||||
def check_valid(name, exploration_state, proposed_map, doors_to_connect, all_regions,
|
def check_valid(name, exploration_state, proposed_map, doors_to_connect, all_regions,
|
||||||
paths, entrance_regions, world, player):
|
paths, entrance_regions, bk_special, world, player):
|
||||||
all_visited = set()
|
all_visited = set()
|
||||||
all_visited.update(exploration_state.visited_blue)
|
all_visited.update(exploration_state.visited_blue)
|
||||||
all_visited.update(exploration_state.visited_orange)
|
all_visited.update(exploration_state.visited_orange)
|
||||||
if len(all_regions.difference(all_visited)) > 0:
|
if len(all_regions.difference(all_visited)) > 0:
|
||||||
return False
|
return False
|
||||||
if not valid_paths(name, paths, entrance_regions, doors_to_connect, all_regions, proposed_map, world, player):
|
if not valid_paths(name, paths, entrance_regions, doors_to_connect, all_regions, proposed_map,
|
||||||
|
bk_special, world, player):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -266,7 +271,7 @@ def check_for_special(regions):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def valid_paths(name, paths, entrance_regions, valid_doors, all_regions, proposed_map, world, player):
|
def valid_paths(name, paths, entrance_regions, valid_doors, all_regions, proposed_map, bk_special, world, player):
|
||||||
for path in paths:
|
for path in paths:
|
||||||
if type(path) is tuple:
|
if type(path) is tuple:
|
||||||
target = path[1]
|
target = path[1]
|
||||||
@@ -278,12 +283,13 @@ def valid_paths(name, paths, entrance_regions, valid_doors, all_regions, propose
|
|||||||
else:
|
else:
|
||||||
target = path
|
target = path
|
||||||
start_regions = entrance_regions
|
start_regions = entrance_regions
|
||||||
if not valid_path(name, start_regions, target, valid_doors, proposed_map, all_regions, world, player):
|
if not valid_path(name, start_regions, target, valid_doors, proposed_map, all_regions,
|
||||||
|
bk_special, world, player):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def valid_path(name, starting_regions, target, valid_doors, proposed_map, all_regions, world, player):
|
def valid_path(name, starting_regions, target, valid_doors, proposed_map, all_regions, bk_special, world, player):
|
||||||
target_regions = set()
|
target_regions = set()
|
||||||
if type(target) is not list:
|
if type(target) is not list:
|
||||||
for region in all_regions:
|
for region in all_regions:
|
||||||
@@ -296,8 +302,10 @@ def valid_path(name, starting_regions, target, valid_doors, proposed_map, all_re
|
|||||||
target_regions.add(region)
|
target_regions.add(region)
|
||||||
|
|
||||||
start = ExplorationState(dungeon=name)
|
start = ExplorationState(dungeon=name)
|
||||||
|
bk_relevant = (world.door_type_mode[player] == 'original' and not world.bigkeyshuffle[player]) or bk_special
|
||||||
|
start.big_key_special = bk_special
|
||||||
original_state = extend_reachable_state_lenient(starting_regions, start, proposed_map, all_regions,
|
original_state = extend_reachable_state_lenient(starting_regions, start, proposed_map, all_regions,
|
||||||
valid_doors, world, player)
|
valid_doors, bk_relevant, world, player)
|
||||||
|
|
||||||
for exp_door in original_state.unattached_doors:
|
for exp_door in original_state.unattached_doors:
|
||||||
if not exp_door.door.blocked or exp_door.door.trapFlag != 0:
|
if not exp_door.door.blocked or exp_door.door.trapFlag != 0:
|
||||||
@@ -531,7 +539,7 @@ class ExplorationState(object):
|
|||||||
self.crystal = exp_door.crystal
|
self.crystal = exp_door.crystal
|
||||||
return exp_door
|
return exp_door
|
||||||
|
|
||||||
def visit_region(self, region, key_region=None, key_checks=False, bk_flag=False):
|
def visit_region(self, region, key_region=None, key_checks=False, bk_relevant=False):
|
||||||
if region.type != RegionType.Dungeon:
|
if region.type != RegionType.Dungeon:
|
||||||
self.crystal = CrystalBarrier.Orange
|
self.crystal = CrystalBarrier.Orange
|
||||||
if self.crystal == CrystalBarrier.Either:
|
if self.crystal == CrystalBarrier.Either:
|
||||||
@@ -552,8 +560,14 @@ class ExplorationState(object):
|
|||||||
self.ttl_locations += 1
|
self.ttl_locations += 1
|
||||||
if location not in self.found_locations:
|
if location not in self.found_locations:
|
||||||
self.found_locations.append(location)
|
self.found_locations.append(location)
|
||||||
if not bk_flag:
|
if bk_relevant:
|
||||||
|
if self.big_key_special:
|
||||||
|
if special_big_key_found(self):
|
||||||
self.bk_found.add(location)
|
self.bk_found.add(location)
|
||||||
|
self.re_add_big_key_doors()
|
||||||
|
else:
|
||||||
|
self.bk_found.add(location)
|
||||||
|
self.re_add_big_key_doors()
|
||||||
if location.name in dungeon_events and location.name not in self.events:
|
if location.name in dungeon_events and location.name not in self.events:
|
||||||
if self.flooded_key_check(location):
|
if self.flooded_key_check(location):
|
||||||
self.perform_event(location.name, key_region)
|
self.perform_event(location.name, key_region)
|
||||||
@@ -574,6 +588,14 @@ class ExplorationState(object):
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def re_add_big_key_doors(self):
|
||||||
|
self.big_key_opened = True
|
||||||
|
queue = collections.deque(self.big_doors)
|
||||||
|
while len(queue) > 0:
|
||||||
|
exp_door = queue.popleft()
|
||||||
|
self.avail_doors.append(exp_door)
|
||||||
|
self.big_doors.remove(exp_door)
|
||||||
|
|
||||||
def perform_event(self, location_name, key_region):
|
def perform_event(self, location_name, key_region):
|
||||||
self.events.add(location_name)
|
self.events.add(location_name)
|
||||||
queue = collections.deque(self.event_doors)
|
queue = collections.deque(self.event_doors)
|
||||||
@@ -640,7 +662,7 @@ class ExplorationState(object):
|
|||||||
self.append_door_to_list(door, self.avail_doors, flag)
|
self.append_door_to_list(door, self.avail_doors, flag)
|
||||||
|
|
||||||
# same as above but traps are ignored, and flag is not used
|
# same as above but traps are ignored, and flag is not used
|
||||||
def add_all_doors_check_proposed_2(self, region, proposed_map, valid_doors, world, player):
|
def add_all_doors_check_proposed_2(self, region, proposed_map, valid_doors, bk_relevant, world, player):
|
||||||
for door in get_doors(world, region, player):
|
for door in get_doors(world, region, player):
|
||||||
if door in proposed_map and door.name in valid_doors:
|
if door in proposed_map and door.name in valid_doors:
|
||||||
self.visited_doors.add(door)
|
self.visited_doors.add(door)
|
||||||
@@ -654,14 +676,18 @@ class ExplorationState(object):
|
|||||||
other = self.find_door_in_list(door, self.unattached_doors)
|
other = self.find_door_in_list(door, self.unattached_doors)
|
||||||
if self.crystal != other.crystal:
|
if self.crystal != other.crystal:
|
||||||
other.crystal = CrystalBarrier.Either
|
other.crystal = CrystalBarrier.Either
|
||||||
elif door.req_event is not None and door.req_event not in self.events and not self.in_door_list(door,
|
elif (door.req_event is not None and door.req_event not in self.events
|
||||||
self.event_doors):
|
and not self.in_door_list(door, self.event_doors)):
|
||||||
self.append_door_to_list(door, self.event_doors)
|
self.append_door_to_list(door, self.event_doors)
|
||||||
|
elif (bk_relevant and (door.bigKey or door.name in get_special_big_key_doors(world, player))
|
||||||
|
and not self.big_key_opened):
|
||||||
|
if not self.in_door_list(door, self.big_doors):
|
||||||
|
self.append_door_to_list(door, self.big_doors)
|
||||||
elif not self.in_door_list(door, self.avail_doors):
|
elif not self.in_door_list(door, self.avail_doors):
|
||||||
self.append_door_to_list(door, self.avail_doors)
|
self.append_door_to_list(door, self.avail_doors)
|
||||||
|
|
||||||
# same as above but traps are checked for
|
# same as above but traps are checked for
|
||||||
def add_all_doors_check_proposed_3(self, region, proposed_map, valid_doors, world, player):
|
def add_all_doors_check_proposed_3(self, region, proposed_map, valid_doors, bk_relevant, world, player):
|
||||||
for door in get_doors(world, region, player):
|
for door in get_doors(world, region, player):
|
||||||
if door in proposed_map and door.name in valid_doors:
|
if door in proposed_map and door.name in valid_doors:
|
||||||
self.visited_doors.add(door)
|
self.visited_doors.add(door)
|
||||||
@@ -675,9 +701,13 @@ class ExplorationState(object):
|
|||||||
other = self.find_door_in_list(door, self.unattached_doors)
|
other = self.find_door_in_list(door, self.unattached_doors)
|
||||||
if self.crystal != other.crystal:
|
if self.crystal != other.crystal:
|
||||||
other.crystal = CrystalBarrier.Either
|
other.crystal = CrystalBarrier.Either
|
||||||
elif door.req_event is not None and door.req_event not in self.events and not self.in_door_list(door,
|
elif (door.req_event is not None and door.req_event not in self.events
|
||||||
self.event_doors):
|
and not self.in_door_list(door, self.event_doors)):
|
||||||
self.append_door_to_list(door, self.event_doors)
|
self.append_door_to_list(door, self.event_doors)
|
||||||
|
elif (bk_relevant and (door.bigKey or door.name in get_special_big_key_doors(world, player))
|
||||||
|
and not self.big_key_opened):
|
||||||
|
if not self.in_door_list(door, self.big_doors):
|
||||||
|
self.append_door_to_list(door, self.big_doors)
|
||||||
elif not self.in_door_list(door, self.avail_doors):
|
elif not self.in_door_list(door, self.avail_doors):
|
||||||
self.append_door_to_list(door, self.avail_doors)
|
self.append_door_to_list(door, self.avail_doors)
|
||||||
|
|
||||||
@@ -863,16 +893,22 @@ def extend_reachable_state_improved(search_regions, state, proposed_map, all_reg
|
|||||||
return local_state
|
return local_state
|
||||||
|
|
||||||
|
|
||||||
def extend_reachable_state_lenient(search_regions, state, proposed_map, all_regions, valid_doors, world, player):
|
# bk_relevant means the big key doors need to be checks
|
||||||
|
def extend_reachable_state_lenient(search_regions, state, proposed_map, all_regions, valid_doors, bk_relevant,
|
||||||
|
world, player):
|
||||||
local_state = state.copy()
|
local_state = state.copy()
|
||||||
for region in search_regions:
|
for region in search_regions:
|
||||||
local_state.visit_region(region)
|
local_state.visit_region(region, bk_relevant=bk_relevant)
|
||||||
if world.trap_door_mode[player] == 'vanilla':
|
if world.trap_door_mode[player] == 'vanilla':
|
||||||
local_state.add_all_doors_check_proposed_3(region, proposed_map, valid_doors, world, player)
|
local_state.add_all_doors_check_proposed_3(region, proposed_map, valid_doors, bk_relevant, world, player)
|
||||||
else:
|
else:
|
||||||
local_state.add_all_doors_check_proposed_2(region, proposed_map, valid_doors, world, player)
|
local_state.add_all_doors_check_proposed_2(region, proposed_map, valid_doors, bk_relevant, world, player)
|
||||||
while len(local_state.avail_doors) > 0:
|
while len(local_state.avail_doors) > 0:
|
||||||
explorable_door = local_state.next_avail_door()
|
explorable_door = local_state.next_avail_door()
|
||||||
|
if explorable_door.door.bigKey:
|
||||||
|
if bk_relevant and (not special_big_key_found(local_state) if local_state.big_key_special
|
||||||
|
else local_state.count_locations_exclude_specials(world, player) == 0):
|
||||||
|
continue
|
||||||
if explorable_door.door in proposed_map:
|
if explorable_door.door in proposed_map:
|
||||||
connect_region = world.get_entrance(proposed_map[explorable_door.door].name, player).parent_region
|
connect_region = world.get_entrance(proposed_map[explorable_door.door].name, player).parent_region
|
||||||
else:
|
else:
|
||||||
@@ -880,11 +916,13 @@ def extend_reachable_state_lenient(search_regions, state, proposed_map, all_regi
|
|||||||
if connect_region is not None:
|
if connect_region is not None:
|
||||||
if (valid_region_to_explore_in_regions(connect_region, all_regions, world, player)
|
if (valid_region_to_explore_in_regions(connect_region, all_regions, world, player)
|
||||||
and not local_state.visited(connect_region)):
|
and not local_state.visited(connect_region)):
|
||||||
local_state.visit_region(connect_region)
|
local_state.visit_region(connect_region, bk_relevant=bk_relevant)
|
||||||
if world.trap_door_mode[player] == 'vanilla':
|
if world.trap_door_mode[player] == 'vanilla':
|
||||||
local_state.add_all_doors_check_proposed_3(connect_region, proposed_map, valid_doors, world, player)
|
local_state.add_all_doors_check_proposed_3(connect_region, proposed_map, valid_doors,
|
||||||
|
bk_relevant, world, player)
|
||||||
else:
|
else:
|
||||||
local_state.add_all_doors_check_proposed_2(connect_region, proposed_map, valid_doors, world, player)
|
local_state.add_all_doors_check_proposed_2(connect_region, proposed_map, valid_doors,
|
||||||
|
bk_relevant, world, player)
|
||||||
return local_state
|
return local_state
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
14
test/customizer/zelda_escape.yaml
Normal file
14
test/customizer/zelda_escape.yaml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
meta:
|
||||||
|
players: 1
|
||||||
|
settings:
|
||||||
|
1:
|
||||||
|
door_shuffle: crossed
|
||||||
|
intensity: 3
|
||||||
|
mode: standard
|
||||||
|
pottery: keys
|
||||||
|
dropshuffle: 'on'
|
||||||
|
doors:
|
||||||
|
1:
|
||||||
|
doors:
|
||||||
|
Hyrule Dungeon Cellblock Up Stairs:
|
||||||
|
dest: Ice Hammer Block Down Stairs
|
||||||
Reference in New Issue
Block a user