Simplified OWR tile group reorganization

This commit is contained in:
codemann8
2022-05-04 12:10:54 -05:00
parent 56b2e0e5e4
commit 54c8efe464

View File

@@ -561,7 +561,17 @@ def shuffle_tiles(world, groups, result_list, player):
return swapped_edges return swapped_edges
def reorganize_tile_groups(world, player): def reorganize_tile_groups(world, player):
def can_shuffle_group(name, groupType): def get_group_key(group):
#(name, groupType, whirlpoolGroup) = group
new_group = list(group)
if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull', 'simple', 'restricted']:
new_group[1] = None
if not world.owWhirlpoolShuffle[player] and world.owCrossed[player] == 'none':
new_group[2] = None
return tuple(new_group)
def can_shuffle_group(group):
(name, groupType, whirlpoolGroup) = group
return name not in ['Castle', 'Links', 'Central Bonk Rocks'] \ return name not in ['Castle', 'Links', 'Central Bonk Rocks'] \
or (world.mode[player] != 'standard' and (name != 'Castle' \ or (world.mode[player] != 'standard' and (name != 'Castle' \
or world.shuffle[player] not in ['vanilla', 'dungeonssimple', 'dungeonsfull'] \ or world.shuffle[player] not in ['vanilla', 'dungeonssimple', 'dungeonsfull'] \
@@ -570,60 +580,22 @@ def reorganize_tile_groups(world, player):
or (world.mode[player] == 'standard' and world.shuffle[player] in ['lean', 'crossed', 'insanity'] and name == 'Castle' and groupType == 'Entrance') or (world.mode[player] == 'standard' and world.shuffle[player] in ['lean', 'crossed', 'insanity'] and name == 'Castle' and groupType == 'Entrance')
groups = {} groups = {}
for (name, groupType, whirlpoolGroup) in OWTileGroups.keys(): for group in OWTileGroups.keys():
if can_shuffle_group(name, groupType): if can_shuffle_group(group):
if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull', 'simple', 'restricted']: groups[get_group_key(group)] = ([], [], [])
if world.owWhirlpoolShuffle[player] or world.owCrossed[player] != 'none':
groups[(name, whirlpoolGroup)] = ([], [], [])
else:
groups[(name,)] = ([], [], [])
else:
if world.owWhirlpoolShuffle[player] or world.owCrossed[player] != 'none':
groups[(name, groupType, whirlpoolGroup)] = ([], [], [])
else:
groups[(name, groupType)] = ([], [], [])
for (name, groupType, whirlpoolGroup) in OWTileGroups.keys(): for group in OWTileGroups.keys():
if can_shuffle_group(name, groupType): if can_shuffle_group(group):
(lw_owids, dw_owids) = OWTileGroups[(name, groupType, whirlpoolGroup)] (lw_owids, dw_owids) = OWTileGroups[group]
if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull', 'simple', 'restricted']: (exist_owids, exist_lw_regions, exist_dw_regions) = groups[get_group_key(group)]
if world.owWhirlpoolShuffle[player] or world.owCrossed[player] != 'none': exist_owids.extend(lw_owids)
(exist_owids, exist_lw_regions, exist_dw_regions) = groups[(name, whirlpoolGroup)] exist_owids.extend(dw_owids)
exist_owids.extend(lw_owids) for owid in lw_owids:
exist_owids.extend(dw_owids) exist_lw_regions.extend(OWTileRegions.inverse[owid])
for owid in lw_owids: for owid in dw_owids:
exist_lw_regions.extend(OWTileRegions.inverse[owid]) exist_dw_regions.extend(OWTileRegions.inverse[owid])
for owid in dw_owids: groups[get_group_key(group)] = (exist_owids, exist_lw_regions, exist_dw_regions)
exist_dw_regions.extend(OWTileRegions.inverse[owid])
groups[(name, whirlpoolGroup)] = (exist_owids, exist_lw_regions, exist_dw_regions)
else:
(exist_owids, exist_lw_regions, exist_dw_regions) = groups[(name,)]
exist_owids.extend(lw_owids)
exist_owids.extend(dw_owids)
for owid in lw_owids:
exist_lw_regions.extend(OWTileRegions.inverse[owid])
for owid in dw_owids:
exist_dw_regions.extend(OWTileRegions.inverse[owid])
groups[(name,)] = (exist_owids, exist_lw_regions, exist_dw_regions)
else:
if world.owWhirlpoolShuffle[player] or world.owCrossed[player] != 'none':
(exist_owids, exist_lw_regions, exist_dw_regions) = groups[(name, groupType, whirlpoolGroup)]
exist_owids.extend(lw_owids)
exist_owids.extend(dw_owids)
for owid in lw_owids:
exist_lw_regions.extend(OWTileRegions.inverse[owid])
for owid in dw_owids:
exist_dw_regions.extend(OWTileRegions.inverse[owid])
groups[(name, groupType, whirlpoolGroup)] = (exist_owids, exist_lw_regions, exist_dw_regions)
else:
(exist_owids, exist_lw_regions, exist_dw_regions) = groups[(name, groupType)]
exist_owids.extend(lw_owids)
exist_owids.extend(dw_owids)
for owid in lw_owids:
exist_lw_regions.extend(OWTileRegions.inverse[owid])
for owid in dw_owids:
exist_dw_regions.extend(OWTileRegions.inverse[owid])
groups[(name, groupType)] = (exist_owids, exist_lw_regions, exist_dw_regions)
return groups return groups
def remove_reserved(world, groupedlist, connected_edges, player): def remove_reserved(world, groupedlist, connected_edges, player):