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