Simplified OWR tile group reorganization
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user