Reinstate the state cache system for playthough generation
Fixed the issues in can_beat_game that required me to turn it off.
This commit is contained in:
		
							parent
							
								
									ea07c3d9c0
								
							
						
					
					
						commit
						d6ff27f0a5
					
				|  | @ -261,32 +261,24 @@ class World(object): | |||
| 
 | ||||
|         prog_locations = [location for location in self.get_locations() if location.item is not None and (location.item.advancement or location.event) and location not in state.locations_checked] | ||||
| 
 | ||||
|         treasure_pieces_collected = dict([(player, state.item_count('Triforce Piece', player) + state.item_count('Power Star', player)) for player in range(1, self.players + 1)]) | ||||
|         triforces_collected = dict([(player, state.has('Triforce', player)) for player in range(1, self.players + 1)]) | ||||
| 
 | ||||
|         while prog_locations: | ||||
|             sphere = [] | ||||
|             # build up spheres of collection radius. Everything in each sphere is independent from each other in dependencies and only depends on lower spheres | ||||
|             for location in prog_locations: | ||||
|                 if state.can_reach(location): | ||||
|                     if location.item.name == 'Triforce': | ||||
|                         triforces_collected[location.item.player] = True | ||||
|                         if all(triforces_collected.values()): | ||||
|                             return True | ||||
|                     elif location.item.name in ['Triforce Piece', 'Power Star']: | ||||
|                         treasure_pieces_collected[location.item.player] += 1 | ||||
|                     if self.goal in ['triforcehunt'] and all([treasure_pieces_collected[player] >= self.treasure_hunt_count for player in range(1, self.players + 1)]): | ||||
|                         return True | ||||
|                 if location.can_reach(state): | ||||
|                     sphere.append(location) | ||||
| 
 | ||||
|             if not sphere: | ||||
|                 # ran out of places and did not find triforce yet, quit | ||||
|                 # ran out of places and did not finish yet, quit | ||||
|                 return False | ||||
| 
 | ||||
|             for location in sphere: | ||||
|                 prog_locations.remove(location) | ||||
|                 state.collect(location.item, True, location) | ||||
| 
 | ||||
|             if self.has_beaten_game(state): | ||||
|                 return True | ||||
| 
 | ||||
|         return False | ||||
| 
 | ||||
|     def option_identifier(self, maxbytes, player): | ||||
|  |  | |||
							
								
								
									
										3
									
								
								Main.py
								
								
								
								
							
							
						
						
									
										3
									
								
								Main.py
								
								
								
								
							|  | @ -327,8 +327,7 @@ def create_playthrough(world): | |||
|             old_item = location.item | ||||
|             location.item = None | ||||
|             state.remove(old_item) | ||||
|             ##if world.can_beat_game(state_cache[num]): | ||||
|             if world.can_beat_game(): | ||||
|             if world.can_beat_game(state_cache[num]): | ||||
|                 to_delete.append(location) | ||||
|             else: | ||||
|                 # still required, got to keep it around | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue