Some additional tile swap corrections

This commit is contained in:
codemann8
2022-05-17 17:34:49 -05:00
parent 2c41d369e7
commit bcf30ae5c2

View File

@@ -548,7 +548,6 @@ def connect_two_way(world, edgename1, edgename2, player, connected_edges=None):
def shuffle_tiles(world, groups, result_list, do_grouped, player): def shuffle_tiles(world, groups, result_list, do_grouped, player):
swapped_edges = list() swapped_edges = list()
if not do_grouped:
group_parity = {} group_parity = {}
for group_data in groups: for group_data in groups:
group = group_data[0] group = group_data[0]
@@ -620,16 +619,13 @@ def shuffle_tiles(world, groups, result_list, do_grouped, player):
exist_lw_regions.extend(lw_regions) exist_lw_regions.extend(lw_regions)
exist_dw_regions.extend(dw_regions) exist_dw_regions.extend(dw_regions)
if not do_grouped:
parity = [sum(group_parity[group[0][0]][i] for group in groups if group not in removed) for i in range(5)] parity = [sum(group_parity[group[0][0]][i] for group in groups if group not in removed) for i in range(5)]
parity[3] %= 2 # actual parity parity[3] %= 2 # actual parity
if world.owCrossed[player] == 'none' and parity[:4] != [0, 0, 0, 0]: if (world.owCrossed[player] == 'none' or do_grouped) and parity[:4] != [0, 0, 0, 0]:
attempts -= 1 attempts -= 1
continue continue
# ensure sanc can be placed in LW in certain modes # ensure sanc can be placed in LW in certain modes
if world.shuffle[player] not in ['vanilla', 'dungeonssimple', 'dungeonsfull', 'lean', 'crossed', 'insanity'] \ if not do_grouped and world.shuffle[player] not in ['vanilla', 'dungeonssimple', 'dungeonsfull', 'lean', 'crossed', 'insanity'] and world.mode[player] != 'inverted' and (world.doorShuffle[player] != 'crossed' or world.intensity[player] < 3 or world.mode[player] == 'standard'):
and world.mode[player] != 'inverted' \
and (world.mode[player] == 'standard' or world.doorShuffle[player] != 'crossed' or world.intensity[player] < 3):
free_dw_drops = parity[4] + (1 if world.shuffle_ganon else 0) free_dw_drops = parity[4] + (1 if world.shuffle_ganon else 0)
free_drops = 6 + (1 if world.mode[player] != 'standard' else 0) + (1 if world.shuffle_ganon else 0) free_drops = 6 + (1 if world.mode[player] != 'standard' else 0) + (1 if world.shuffle_ganon else 0)
if free_dw_drops == free_drops: if free_dw_drops == free_drops:
@@ -643,7 +639,7 @@ def shuffle_tiles(world, groups, result_list, do_grouped, player):
exist_dw_regions.extend(new_results[2]) exist_dw_regions.extend(new_results[2])
# replace LW edges with DW # replace LW edges with DW
if world.owCrossed[player] not in ['polar', 'grouped', 'chaos']: if world.owCrossed[player] not in ['polar', 'grouped', 'chaos'] or do_grouped:
# in polar, the actual edge connections remain vanilla # in polar, the actual edge connections remain vanilla
def getSwappedEdges(world, lst, player): def getSwappedEdges(world, lst, player):
for regionname in lst: for regionname in lst:
@@ -707,13 +703,13 @@ def define_tile_groups(world, player, do_grouped):
if world.shuffle[player] == 'vanilla' or (world.mode[player] == 'standard' and world.shuffle[player] in ['dungeonssimple', 'dungeonsfull']): if world.shuffle[player] == 'vanilla' or (world.mode[player] == 'standard' and world.shuffle[player] in ['dungeonssimple', 'dungeonsfull']):
merge_groups([[0x13, 0x14, 0x1b]]) merge_groups([[0x13, 0x14, 0x1b]])
if (world.owShuffle[player] == 'vanilla' and world.owCrossed[player] == 'none') or do_grouped: if world.owShuffle[player] == 'vanilla' and (world.owCrossed[player] == 'none' or do_grouped):
merge_groups([[0x00, 0x2d, 0x80], [0x0f, 0x81], [0x1a, 0x1b], [0x28, 0x29], [0x30, 0x3a]]) merge_groups([[0x00, 0x2d, 0x80], [0x0f, 0x81], [0x1a, 0x1b], [0x28, 0x29], [0x30, 0x3a]])
if world.owShuffle[player] == 'parallel' and world.owKeepSimilar[player] and world.owCrossed[player] == 'none': if world.owShuffle[player] == 'parallel' and world.owKeepSimilar[player] and world.owCrossed[player] == 'none':
merge_groups([[0x28, 0x29]]) merge_groups([[0x28, 0x29]])
if (not world.owWhirlpoolShuffle[player] and world.owCrossed[player] == 'none') or do_grouped: if not world.owWhirlpoolShuffle[player] and (world.owCrossed[player] == 'none' or do_grouped):
merge_groups([[0x0f, 0x35], [0x12, 0x15, 0x33, 0x3f]]) merge_groups([[0x0f, 0x35], [0x12, 0x15, 0x33, 0x3f]])
tile_groups = [] tile_groups = []