From 99753c00390926b5d97e3cb6ded6f6bb1797e3a8 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 6 Sep 2023 12:39:57 -0500 Subject: [PATCH] Minor fixed to OWR algorithm --- OverworldShuffle.py | 29 +++++++++++++---------------- source/classes/CustomSettings.py | 2 +- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 36dded6b..10853982 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -217,11 +217,11 @@ def link_overworld(world, player): custom_crossed = custom_crossed[player] if 'force_crossed' in custom_crossed and len(custom_crossed['force_crossed']) > 0: for edgename in custom_crossed['force_crossed']: - edge = world.check_for_owedge(edgename, player) + edge = world.get_owedge(edgename, player) force_crossed.add(edge.name) if 'force_noncrossed' in custom_crossed and len(custom_crossed['force_noncrossed']) > 0: for edgename in custom_crossed['force_noncrossed']: - edge = world.check_for_owedge(edgename, player) + edge = world.get_owedge(edgename, player) force_noncrossed.add(edge.name) if 'limit_crossed' in custom_crossed: limited_crossed = custom_crossed['limit_crossed'] @@ -322,9 +322,10 @@ def link_overworld(world, player): if limited_crossed > -1: limit = limited_crossed - count_crossed - random.shuffle(crossed_candidates) - for edge_set in crossed_candidates[:limit]: - world.owcrossededges[player].extend(edge_set) + if limit > 1: + random.shuffle(crossed_candidates) + for edge_set in crossed_candidates[:limit]: + world.owcrossededges[player].extend(edge_set) assert len(world.owcrossededges[player]) == len(set(world.owcrossededges[player])), "Same edge candidate added to crossed edges" for edge in copy.deepcopy(world.owcrossededges[player]): @@ -488,7 +489,7 @@ def link_overworld(world, player): back_parallel_lw_sets, back_parallel_dw_sets = [], [] for edge_set in forward_edge_sets: - if world.check_for_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) if parallel == IsParallel.Yes: forward_parallel_lw_sets.append([parallel_links_new[e] for e in edge_set]) @@ -497,7 +498,7 @@ def link_overworld(world, player): 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: - if world.check_for_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) if parallel == IsParallel.Yes: back_parallel_lw_sets.append([parallel_links_new[e] for e in edge_set]) @@ -817,12 +818,12 @@ def connect_custom(world, connected_edges, groups, forced, player): return not ((not is_crossed and (edge1 in forced_crossed or edge2 in forced_crossed)) or (is_crossed and (edge1 in forced_noncrossed or edge2 in forced_noncrossed))) for edgename1, edgename2 in custom_edges['two-way'].items(): - edge1 = world.check_for_owedge(edgename1, player) - edge2 = world.check_for_owedge(edgename2, player) + edge1 = world.get_owedge(edgename1, player) + edge2 = world.get_owedge(edgename2, player) is_crossed = edge1.is_lw(world) != edge2.is_lw(world) if not validate_crossed_allowed(edge1.name, edge2.name, is_crossed): if edgename2[-1] == '*': - edge2 = world.check_for_owedge(edge2.name + '*', player) + edge2 = world.get_owedge(edge2.name + '*', player) is_crossed = not is_crossed else: raise GenerationException('Violation of force crossed rules: \'%s\' <-> \'%s\'', edgename1, edgename2) @@ -856,13 +857,9 @@ def connect_custom(world, connected_edges, groups, forced, player): def connect_two_way(world, edgename1, edgename2, player, connected_edges=None): edge1 = world.get_entrance(edgename1, player) edge2 = world.get_entrance(edgename2, player) - x = world.check_for_owedge(edgename1, player) - y = world.check_for_owedge(edgename2, player) + x = world.get_owedge(edgename1, player) + y = world.get_owedge(edgename2, player) - if x is None: - raise Exception('%s is not a valid edge.', edgename1) - elif y is None: - raise Exception('%s is not a valid edge.', edgename2) if connected_edges is not None: if edgename1 in connected_edges or edgename2 in connected_edges: if (x.dest and x.dest.name == edgename2) and (y.dest and y.dest.name == edgename1): diff --git a/source/classes/CustomSettings.py b/source/classes/CustomSettings.py index c3f20ff9..5ec40409 100644 --- a/source/classes/CustomSettings.py +++ b/source/classes/CustomSettings.py @@ -388,7 +388,7 @@ class CustomSettings(object): # tile flips if p in world.owswaps and len(world.owswaps[p][0]) > 0: flips[p] = {} - flips[p]['force_flip'] = list(HexInt(f) for f in world.owswaps[p][0] if f < 0x40 or f >= 0x80) + flips[p]['force_flip'] = list(HexInt(f) for f in world.owswaps[p][0] if f & 0x40 == 0) flips[p]['force_flip'].sort() flips[p]['undefined_chance'] = 0 # flute spots