Minor fixed to OWR algorithm
This commit is contained in:
@@ -217,11 +217,11 @@ def link_overworld(world, player):
|
|||||||
custom_crossed = custom_crossed[player]
|
custom_crossed = custom_crossed[player]
|
||||||
if 'force_crossed' in custom_crossed and len(custom_crossed['force_crossed']) > 0:
|
if 'force_crossed' in custom_crossed and len(custom_crossed['force_crossed']) > 0:
|
||||||
for edgename in custom_crossed['force_crossed']:
|
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)
|
force_crossed.add(edge.name)
|
||||||
if 'force_noncrossed' in custom_crossed and len(custom_crossed['force_noncrossed']) > 0:
|
if 'force_noncrossed' in custom_crossed and len(custom_crossed['force_noncrossed']) > 0:
|
||||||
for edgename in custom_crossed['force_noncrossed']:
|
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)
|
force_noncrossed.add(edge.name)
|
||||||
if 'limit_crossed' in custom_crossed:
|
if 'limit_crossed' in custom_crossed:
|
||||||
limited_crossed = custom_crossed['limit_crossed']
|
limited_crossed = custom_crossed['limit_crossed']
|
||||||
@@ -322,6 +322,7 @@ def link_overworld(world, player):
|
|||||||
|
|
||||||
if limited_crossed > -1:
|
if limited_crossed > -1:
|
||||||
limit = limited_crossed - count_crossed
|
limit = limited_crossed - count_crossed
|
||||||
|
if limit > 1:
|
||||||
random.shuffle(crossed_candidates)
|
random.shuffle(crossed_candidates)
|
||||||
for edge_set in crossed_candidates[:limit]:
|
for edge_set in crossed_candidates[:limit]:
|
||||||
world.owcrossededges[player].extend(edge_set)
|
world.owcrossededges[player].extend(edge_set)
|
||||||
@@ -488,7 +489,7 @@ def link_overworld(world, player):
|
|||||||
back_parallel_lw_sets, back_parallel_dw_sets = [], []
|
back_parallel_lw_sets, back_parallel_dw_sets = [], []
|
||||||
|
|
||||||
for edge_set in forward_edge_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)
|
forward_lw_sets.append(edge_set)
|
||||||
if parallel == IsParallel.Yes:
|
if parallel == IsParallel.Yes:
|
||||||
forward_parallel_lw_sets.append([parallel_links_new[e] for e in edge_set])
|
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:
|
if parallel == IsParallel.Yes:
|
||||||
forward_parallel_dw_sets.append([parallel_links_new[e] for e in edge_set])
|
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.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)
|
back_lw_sets.append(edge_set)
|
||||||
if parallel == IsParallel.Yes:
|
if parallel == IsParallel.Yes:
|
||||||
back_parallel_lw_sets.append([parallel_links_new[e] for e in edge_set])
|
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))
|
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)))
|
or (is_crossed and (edge1 in forced_noncrossed or edge2 in forced_noncrossed)))
|
||||||
for edgename1, edgename2 in custom_edges['two-way'].items():
|
for edgename1, edgename2 in custom_edges['two-way'].items():
|
||||||
edge1 = world.check_for_owedge(edgename1, player)
|
edge1 = world.get_owedge(edgename1, player)
|
||||||
edge2 = world.check_for_owedge(edgename2, player)
|
edge2 = world.get_owedge(edgename2, player)
|
||||||
is_crossed = edge1.is_lw(world) != edge2.is_lw(world)
|
is_crossed = edge1.is_lw(world) != edge2.is_lw(world)
|
||||||
if not validate_crossed_allowed(edge1.name, edge2.name, is_crossed):
|
if not validate_crossed_allowed(edge1.name, edge2.name, is_crossed):
|
||||||
if edgename2[-1] == '*':
|
if edgename2[-1] == '*':
|
||||||
edge2 = world.check_for_owedge(edge2.name + '*', player)
|
edge2 = world.get_owedge(edge2.name + '*', player)
|
||||||
is_crossed = not is_crossed
|
is_crossed = not is_crossed
|
||||||
else:
|
else:
|
||||||
raise GenerationException('Violation of force crossed rules: \'%s\' <-> \'%s\'', edgename1, edgename2)
|
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):
|
def connect_two_way(world, edgename1, edgename2, player, connected_edges=None):
|
||||||
edge1 = world.get_entrance(edgename1, player)
|
edge1 = world.get_entrance(edgename1, player)
|
||||||
edge2 = world.get_entrance(edgename2, player)
|
edge2 = world.get_entrance(edgename2, player)
|
||||||
x = world.check_for_owedge(edgename1, player)
|
x = world.get_owedge(edgename1, player)
|
||||||
y = world.check_for_owedge(edgename2, 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 connected_edges is not None:
|
||||||
if edgename1 in connected_edges or edgename2 in connected_edges:
|
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):
|
if (x.dest and x.dest.name == edgename2) and (y.dest and y.dest.name == edgename1):
|
||||||
|
|||||||
@@ -388,7 +388,7 @@ class CustomSettings(object):
|
|||||||
# tile flips
|
# tile flips
|
||||||
if p in world.owswaps and len(world.owswaps[p][0]) > 0:
|
if p in world.owswaps and len(world.owswaps[p][0]) > 0:
|
||||||
flips[p] = {}
|
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]['force_flip'].sort()
|
||||||
flips[p]['undefined_chance'] = 0
|
flips[p]['undefined_chance'] = 0
|
||||||
# flute spots
|
# flute spots
|
||||||
|
|||||||
Reference in New Issue
Block a user