diff --git a/BaseClasses.py b/BaseClasses.py index 23005d5c..f0177fbd 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -88,6 +88,7 @@ class World(object): self.owwhirlpools = {} self.owflutespots = {} self.owsectors = {} + self.allow_flip_sanc = {} self.doors = [] self._door_cache = {} self.paired_doors = {} @@ -118,6 +119,7 @@ class World(object): set_player_attr('owcrossededges', []) set_player_attr('owwhirlpools', []) set_player_attr('owsectors', None) + set_player_attr('allow_flip_sanc', False) set_player_attr('remote_items', False) set_player_attr('required_medallions', ['Ether', 'Quake']) set_player_attr('bottle_refills', ['Bottle (Green Potion)', 'Bottle (Green Potion)']) @@ -319,7 +321,9 @@ class World(object): return self.is_tile_swapped(0x2c, player) def is_dark_chapel_start(self, player): - return self.is_tile_swapped(0x13, player) + if self.allow_flip_sanc[player]: + return self.is_tile_swapped(0x13, player) + return self.mode[player] == 'inverted' def is_pyramid_open(self, player): if self.open_pyramid[player] == 'yes': diff --git a/Main.py b/Main.py index 8f67ff4c..7c1b9aea 100644 --- a/Main.py +++ b/Main.py @@ -593,6 +593,7 @@ def copy_world(world): ret.standardize_palettes = world.standardize_palettes.copy() ret.owswaps = world.owswaps.copy() ret.owflutespots = world.owflutespots.copy() + ret.allow_flip_sanc = world.allow_flip_sanc.copy() ret.prizes = world.prizes.copy() ret.restrict_boss_items = world.restrict_boss_items.copy() ret.inaccessible_regions = world.inaccessible_regions.copy() @@ -788,6 +789,7 @@ def copy_world_premature(world, player): ret.standardize_palettes = world.standardize_palettes.copy() ret.owswaps = world.owswaps.copy() ret.owflutespots = world.owflutespots.copy() + ret.allow_flip_sanc = world.allow_flip_sanc.copy() ret.prizes = world.prizes.copy() ret.restrict_boss_items = world.restrict_boss_items.copy() ret.inaccessible_regions = world.inaccessible_regions.copy() diff --git a/OverworldShuffle.py b/OverworldShuffle.py index b47119c6..8e47e09a 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -151,7 +151,8 @@ def link_overworld(world, player): # tile shuffle logging.getLogger('').debug('Flipping overworld tiles') if world.owMixed[player]: - tile_groups, force_flipped, force_nonflipped, undefined_chance = define_tile_groups(world, False, player) + tile_groups, force_flipped, force_nonflipped, undefined_chance, allow_flip_sanc = define_tile_groups(world, False, player) + world.allow_flip_sanc[player] = allow_flip_sanc swapped_edges = shuffle_tiles(world, tile_groups, world.owswaps[player], False, (force_flipped, force_nonflipped, undefined_chance), player) update_world_regions(world, player) @@ -241,7 +242,7 @@ def link_overworld(world, player): # the idea is to XOR the new flips with the ones from Mixed so that non-parallel edges still work # Polar corresponds to Grouped with no flips in ow_crossed_tiles_mask ow_crossed_tiles_mask = [[],[],[]] - tile_groups, force_flipped, force_nonflipped, undefined_chance = define_tile_groups(world, True, player) + tile_groups, force_flipped, force_nonflipped, undefined_chance, _ = define_tile_groups(world, True, player) world.owcrossededges[player] = shuffle_tiles(world, tile_groups, ow_crossed_tiles_mask, True, (force_flipped, force_nonflipped, undefined_chance), player) ow_crossed_tiles = [i for i in range(0x82) if (i in world.owswaps[player][0]) != (i in ow_crossed_tiles_mask[0])] @@ -1184,7 +1185,7 @@ def define_tile_groups(world, do_grouped, player): tile_groups.append((group, lw_regions, dw_regions)) random.shuffle(tile_groups) - return tile_groups, flipped_groups, nonflipped_groups, undefined_chance + return tile_groups, flipped_groups, nonflipped_groups, undefined_chance, allow_flip_sanc def remove_reserved(world, groupedlist, connected_edges, player): new_grouping = {}