Include sphere0 items in the spoiler log and in the playthrough
This commit is contained in:
		
							parent
							
								
									5db7e066da
								
							
						
					
					
						commit
						42b85d7a3c
					
				| 
						 | 
					@ -214,6 +214,8 @@ class World(object):
 | 
				
			||||||
        return [location for location in self.get_locations() if location.item is not None and location.item.name == item and location.item.player == player]
 | 
					        return [location for location in self.get_locations() if location.item is not None and location.item.name == item and location.item.player == player]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def push_precollected(self, item):
 | 
					    def push_precollected(self, item):
 | 
				
			||||||
 | 
					        if (item.smallkey and self.keyshuffle[item.player]) or (item.bigkey and self.bigkeyshuffle[item.player]):
 | 
				
			||||||
 | 
					            item.advancement = True
 | 
				
			||||||
        self.precollected_items.append(item)
 | 
					        self.precollected_items.append(item)
 | 
				
			||||||
        self.state.collect(item, True)
 | 
					        self.state.collect(item, True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -962,6 +964,7 @@ class Spoiler(object):
 | 
				
			||||||
        self.medallions = {}
 | 
					        self.medallions = {}
 | 
				
			||||||
        self.playthrough = {}
 | 
					        self.playthrough = {}
 | 
				
			||||||
        self.unreachables = []
 | 
					        self.unreachables = []
 | 
				
			||||||
 | 
					        self.startinventory = []
 | 
				
			||||||
        self.locations = {}
 | 
					        self.locations = {}
 | 
				
			||||||
        self.paths = {}
 | 
					        self.paths = {}
 | 
				
			||||||
        self.metadata = {}
 | 
					        self.metadata = {}
 | 
				
			||||||
| 
						 | 
					@ -984,6 +987,8 @@ class Spoiler(object):
 | 
				
			||||||
                self.medallions['Misery Mire (Player %d)' % player] = self.world.required_medallions[player][0]
 | 
					                self.medallions['Misery Mire (Player %d)' % player] = self.world.required_medallions[player][0]
 | 
				
			||||||
                self.medallions['Turtle Rock (Player %d)' % player] = self.world.required_medallions[player][1]
 | 
					                self.medallions['Turtle Rock (Player %d)' % player] = self.world.required_medallions[player][1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.startinventory = self.world.precollected_items.copy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.locations = OrderedDict()
 | 
					        self.locations = OrderedDict()
 | 
				
			||||||
        listed_locations = set()
 | 
					        listed_locations = set()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1081,6 +1086,7 @@ class Spoiler(object):
 | 
				
			||||||
        out = OrderedDict()
 | 
					        out = OrderedDict()
 | 
				
			||||||
        out['Entrances'] = list(self.entrances.values())
 | 
					        out['Entrances'] = list(self.entrances.values())
 | 
				
			||||||
        out.update(self.locations)
 | 
					        out.update(self.locations)
 | 
				
			||||||
 | 
					        out['Starting Inventory'] = self.startinventory
 | 
				
			||||||
        out['Special'] = self.medallions
 | 
					        out['Special'] = self.medallions
 | 
				
			||||||
        if self.shops:
 | 
					        if self.shops:
 | 
				
			||||||
            out['Shops'] = self.shops
 | 
					            out['Shops'] = self.shops
 | 
				
			||||||
| 
						 | 
					@ -1131,12 +1137,14 @@ class Spoiler(object):
 | 
				
			||||||
                for player in range(1, self.world.players + 1):
 | 
					                for player in range(1, self.world.players + 1):
 | 
				
			||||||
                    outfile.write('\nMisery Mire Medallion (Player %d): %s' % (player, self.medallions['Misery Mire (Player %d)' % player]))
 | 
					                    outfile.write('\nMisery Mire Medallion (Player %d): %s' % (player, self.medallions['Misery Mire (Player %d)' % player]))
 | 
				
			||||||
                    outfile.write('\nTurtle Rock Medallion (Player %d): %s' % (player, self.medallions['Turtle Rock (Player %d)' % player]))
 | 
					                    outfile.write('\nTurtle Rock Medallion (Player %d): %s' % (player, self.medallions['Turtle Rock (Player %d)' % player]))
 | 
				
			||||||
 | 
					            outfile.write('\n\nStarting Inventory:\n\n')
 | 
				
			||||||
 | 
					            outfile.write('\n'.join(map(str, self.startinventory)))
 | 
				
			||||||
            outfile.write('\n\nLocations:\n\n')
 | 
					            outfile.write('\n\nLocations:\n\n')
 | 
				
			||||||
            outfile.write('\n'.join(['%s: %s' % (location, item) for grouping in self.locations.values() for (location, item) in grouping.items()]))
 | 
					            outfile.write('\n'.join(['%s: %s' % (location, item) for grouping in self.locations.values() for (location, item) in grouping.items()]))
 | 
				
			||||||
            outfile.write('\n\nShops:\n\n')
 | 
					            outfile.write('\n\nShops:\n\n')
 | 
				
			||||||
            outfile.write('\n'.join("{} [{}]\n    {}".format(shop['location'], shop['type'], "\n    ".join(item for item in [shop.get('item_0', None), shop.get('item_1', None), shop.get('item_2', None)] if item)) for shop in self.shops))
 | 
					            outfile.write('\n'.join("{} [{}]\n    {}".format(shop['location'], shop['type'], "\n    ".join(item for item in [shop.get('item_0', None), shop.get('item_1', None), shop.get('item_2', None)] if item)) for shop in self.shops))
 | 
				
			||||||
            outfile.write('\n\nPlaythrough:\n\n')
 | 
					            outfile.write('\n\nPlaythrough:\n\n')
 | 
				
			||||||
            outfile.write('\n'.join(['%s: {\n%s\n}' % (sphere_nr, '\n'.join(['  %s: %s' % (location, item) for (location, item) in sphere.items()])) for (sphere_nr, sphere) in self.playthrough.items()]))
 | 
					            outfile.write('\n'.join(['%s: {\n%s\n}' % (sphere_nr, '\n'.join(['  %s: %s' % (location, item) for (location, item) in sphere.items()] if sphere_nr != '0' else [f'  {item}' for item in sphere])) for (sphere_nr, sphere) in self.playthrough.items()]))
 | 
				
			||||||
            if self.unreachables:
 | 
					            if self.unreachables:
 | 
				
			||||||
                outfile.write('\n\nUnreachable Items:\n\n')
 | 
					                outfile.write('\n\nUnreachable Items:\n\n')
 | 
				
			||||||
                outfile.write('\n'.join(['%s: %s' % (unreachable.item, unreachable) for unreachable in self.unreachables]))
 | 
					                outfile.write('\n'.join(['%s: %s' % (unreachable.item, unreachable) for unreachable in self.unreachables]))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										13
									
								
								Main.py
								
								
								
								
							
							
						
						
									
										13
									
								
								Main.py
								
								
								
								
							| 
						 | 
					@ -380,7 +380,6 @@ def create_playthrough(world):
 | 
				
			||||||
            logging.getLogger('').debug('Checking if %s (Player %d) is required to beat the game.', location.item.name, location.item.player)
 | 
					            logging.getLogger('').debug('Checking if %s (Player %d) is required to beat the game.', location.item.name, location.item.player)
 | 
				
			||||||
            old_item = location.item
 | 
					            old_item = location.item
 | 
				
			||||||
            location.item = None
 | 
					            location.item = None
 | 
				
			||||||
            state.remove(old_item)
 | 
					 | 
				
			||||||
            if world.can_beat_game(state_cache[num]):
 | 
					            if world.can_beat_game(state_cache[num]):
 | 
				
			||||||
                to_delete.append(location)
 | 
					                to_delete.append(location)
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
| 
						 | 
					@ -391,6 +390,14 @@ def create_playthrough(world):
 | 
				
			||||||
        for location in to_delete:
 | 
					        for location in to_delete:
 | 
				
			||||||
            sphere.remove(location)
 | 
					            sphere.remove(location)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # second phase, sphere 0
 | 
				
			||||||
 | 
					    for item in [i for i in world.precollected_items if i.advancement]:
 | 
				
			||||||
 | 
					        logging.getLogger('').debug('Checking if %s (Player %d) is required to beat the game.', item.name, item.player)
 | 
				
			||||||
 | 
					        world.precollected_items.remove(item)
 | 
				
			||||||
 | 
					        world.state.remove(item)
 | 
				
			||||||
 | 
					        if not world.can_beat_game():
 | 
				
			||||||
 | 
					            world.push_precollected(item)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # we are now down to just the required progress items in collection_spheres. Unfortunately
 | 
					    # we are now down to just the required progress items in collection_spheres. Unfortunately
 | 
				
			||||||
    # the previous pruning stage could potentially have made certain items dependant on others
 | 
					    # the previous pruning stage could potentially have made certain items dependant on others
 | 
				
			||||||
    # in the same or later sphere (because the location had 2 ways to access but the item originally
 | 
					    # in the same or later sphere (because the location had 2 ways to access but the item originally
 | 
				
			||||||
| 
						 | 
					@ -442,4 +449,6 @@ def create_playthrough(world):
 | 
				
			||||||
                    old_world.spoiler.paths[str(world.get_region('Inverted Big Bomb Shop', player))] = get_path(state, world.get_region('Inverted Big Bomb Shop', player))
 | 
					                    old_world.spoiler.paths[str(world.get_region('Inverted Big Bomb Shop', player))] = get_path(state, world.get_region('Inverted Big Bomb Shop', player))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # we can finally output our playthrough
 | 
					    # we can finally output our playthrough
 | 
				
			||||||
    old_world.spoiler.playthrough = OrderedDict([(str(i + 1), {str(location): str(location.item) for location in sphere}) for i, sphere in enumerate(collection_spheres)])
 | 
					    old_world.spoiler.playthrough = OrderedDict([("0", [item for item in world.precollected_items if item.advancement])])
 | 
				
			||||||
 | 
					    for i, sphere in enumerate(collection_spheres):
 | 
				
			||||||
 | 
					        old_world.spoiler.playthrough[str(i + 1)] = {str(location): str(location.item) for location in sphere}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue