diff --git a/BaseClasses.py b/BaseClasses.py index 3f567ba0..27f37d9a 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -2719,6 +2719,7 @@ class Spoiler(object): self.world = world self.hashes = {} self.overworlds = {} + self.maps = {} self.entrances = {} self.doors = {} self.doorTypes = {} @@ -2742,6 +2743,14 @@ class Spoiler(object): else: self.overworlds[(entrance, direction, player)] = OrderedDict([('player', player), ('entrance', entrance), ('exit', exit), ('direction', direction)]) + def set_map(self, type, text, data, player): + if type not in self.maps: + self.maps[type] = {} + if self.world.players == 1: + self.maps[type][player] = OrderedDict([('text', text), ('data', data)]) + else: + self.maps[type][player] = OrderedDict([('player', player), ('text', text), ('data', data)]) + def set_entrance(self, entrance, exit, direction, player): if self.world.players == 1: self.entrances[(entrance, direction, player)] = OrderedDict([('entrance', entrance), ('exit', exit), ('direction', direction)]) @@ -2910,6 +2919,7 @@ class Spoiler(object): self.parse_data() out = OrderedDict() out['Overworld'] = list(self.overworlds.values()) + out['Maps'] = list(self.maps.values()) out['Entrances'] = list(self.entrances.values()) out['Doors'] = list(self.doors.values()) out['Lobbies'] = list(self.lobbies.values()) @@ -3020,29 +3030,12 @@ class Spoiler(object): if self.overworlds: outfile.write('\n\nOverworld:\n\n') # overworld tile swaps - swap_output = False - for player in range(1, self.world.players + 1): - if self.world.owMixed[player]: - from OverworldShuffle import tile_swap_spoiler_table - if not swap_output: - swap_output = True - outfile.write('OW Tile Swaps:\n') - outfile.write(('' if self.world.players == 1 else str('(Player ' + str(player) + ')')).ljust(11)) # player name - s = list(map(lambda x: ' ' if x not in self.world.owswaps[player][0] else 'S', [i for i in range(0x40)])) - outfile.write((tile_swap_spoiler_table + '\n\n') % ( s[0x02], s[0x07], \ - s[0x00], s[0x03], s[0x05], \ - s[0x00], s[0x02],s[0x03], s[0x05], s[0x07], s[0x0a], s[0x0f], \ - s[0x0a], s[0x0f], - s[0x10],s[0x11],s[0x12],s[0x13],s[0x14],s[0x15],s[0x16],s[0x17], s[0x10],s[0x11],s[0x12],s[0x13],s[0x14],s[0x15],s[0x16],s[0x17], - s[0x18], s[0x1a],s[0x1b], s[0x1d],s[0x1e], \ - s[0x22], s[0x25], s[0x1a], s[0x1d], \ - s[0x28],s[0x29],s[0x2a],s[0x2b],s[0x2c],s[0x2d],s[0x2e],s[0x2f], s[0x18], s[0x1b], s[0x1e], \ - s[0x30], s[0x32],s[0x33],s[0x34],s[0x35], s[0x37], s[0x22], s[0x25], \ - s[0x3a],s[0x3b],s[0x3c], s[0x3f], \ - s[0x28],s[0x29],s[0x2a],s[0x2b],s[0x2c],s[0x2d],s[0x2e],s[0x2f], \ - s[0x32],s[0x33],s[0x34], s[0x37], \ - s[0x30], s[0x35], - s[0x3a],s[0x3b],s[0x3c], s[0x3f])) + if self.maps['swaps']: + outfile.write('OW Tile Swaps:\n') + for player in self.maps['swaps']: + if self.world.players > 1: + outfile.write(str('(Player ' + str(player) + ')\n')) # player name + outfile.write(self.maps['swaps'][player]['text'] + '\n\n') # overworld transitions outfile.write('\n'.join(['%s%s %s %s' % (f'{self.world.get_player_names(entry["player"])}: ' if self.world.players > 1 else '', self.world.fish.translate("meta","overworlds",entry['entrance']), '<=>' if entry['direction'] == 'both' else '<=' if entry['direction'] == 'exit' else '=>', self.world.fish.translate("meta","overworlds",entry['exit'])) for entry in self.overworlds.values()])) diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 67b2dee7..371686c5 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -137,6 +137,24 @@ def link_overworld(world, player): assert len(swapped_edges) == 0, 'Not all edges were swapped successfully: ' + ', '.join(swapped_edges ) update_world_regions(world, player) + + # update spoiler + s = list(map(lambda x: ' ' if x not in world.owswaps[player][0] else 'S', [i for i in range(0x40)])) + text_output = tile_swap_spoiler_table.replace('s', '%s') % ( s[0x02], s[0x07], + s[0x00], s[0x03], s[0x05], + s[0x00], s[0x02],s[0x03], s[0x05], s[0x07], s[0x0a], s[0x0f], + s[0x0a], s[0x0f], + s[0x10],s[0x11],s[0x12],s[0x13],s[0x14],s[0x15],s[0x16],s[0x17], s[0x10],s[0x11],s[0x12],s[0x13],s[0x14],s[0x15],s[0x16],s[0x17], + s[0x18], s[0x1a],s[0x1b], s[0x1d],s[0x1e], + s[0x22], s[0x25], s[0x1a], s[0x1d], + s[0x28],s[0x29],s[0x2a],s[0x2b],s[0x2c],s[0x2d],s[0x2e],s[0x2f], s[0x18], s[0x1b], s[0x1e], + s[0x30], s[0x32],s[0x33],s[0x34],s[0x35], s[0x37], s[0x22], s[0x25], + s[0x3a],s[0x3b],s[0x3c], s[0x3f], + s[0x28],s[0x29],s[0x2a],s[0x2b],s[0x2c],s[0x2d],s[0x2e],s[0x2f], + s[0x32],s[0x33],s[0x34], s[0x37], + s[0x30], s[0x35], + s[0x3a],s[0x3b],s[0x3c], s[0x3f]) + world.spoiler.set_map('swaps', text_output, world.owswaps[player][0], player) # apply tile logical connections for owid in ow_connections.keys(): @@ -1598,21 +1616,21 @@ flute_data = { } tile_swap_spoiler_table = \ -""" 0 1 2 3 4 5 6 7 +""" 0 1 2 3 4 5 6 7 +---+-+---+---+-+ - 01234567 A(00)| |%s| | |%s| - +--------+ | %s +-+ %s | %s +-+ -A(00)|%s %s%s %s %s| B(08)| |%s| | |%s| -B(08)| %s %s| +-+-+-+-+-+-+-+-+ -C(10)|%s%s%s%s%s%s%s%s| C(10)|%s|%s|%s|%s|%s|%s|%s|%s| -D(18)|%s %s%s %s%s | +-+-+-+-+-+-+-+-+ -E(20)| %s %s | D(18)| |%s| |%s| | -F(28)|%s%s%s%s%s%s%s%s| | %s +-+ %s +-+ %s | -G(30)|%s %s%s%s%s %s| E(20)| |%s| |%s| | -H(38)| %s%s%s %s| +-+-+-+-+-+-+-+-+ - +--------+ F(28)|%s|%s|%s|%s|%s|%s|%s|%s| + 01234567 A(00)| |s| | |s| + +--------+ | s +-+ s | s +-+ +A(00)|s ss s s| B(08)| |s| | |s| +B(08)| s s| +-+-+-+-+-+-+-+-+ +C(10)|ssssssss| C(10)|s|s|s|s|s|s|s|s| +D(18)|s ss ss | +-+-+-+-+-+-+-+-+ +E(20)| s s | D(18)| |s| |s| | +F(28)|ssssssss| | s +-+ s +-+ s | +G(30)|s ssss s| E(20)| |s| |s| | +H(38)| sss s| +-+-+-+-+-+-+-+-+ + +--------+ F(28)|s|s|s|s|s|s|s|s| +-+-+-+-+-+-+-+-+ - G(30)| |%s|%s|%s| |%s| - | %s +-+-+-+ %s +-+ - H(38)| |%s|%s|%s| |%s| + G(30)| |s|s|s| |s| + | s +-+-+-+ s +-+ + H(38)| |s|s|s| |s| +---+-+-+-+---+-+"""