Simplify the only-beatable mode.
This also makes it faster.
This commit is contained in:
parent
5336e6c693
commit
17cd963665
|
@ -183,6 +183,13 @@ class World(object):
|
|||
return True
|
||||
|
||||
return False
|
||||
|
||||
def has_beaten_game(self, state):
|
||||
if state.has('Triforce'): return True
|
||||
if self.goal in ['triforcehunt']:
|
||||
if state.item_count('Triforce Piece')+state.item_count('Power Star')> self.treasure_hunt_count:
|
||||
return True
|
||||
return False
|
||||
|
||||
def can_beat_game(self, starting_state=None):
|
||||
prog_locations = [location for location in self.get_locations() if location.item is not None and (location.item.advancement or location.event)]
|
||||
|
@ -317,7 +324,10 @@ class CollectionState(object):
|
|||
if count == 1:
|
||||
return item in self.prog_items
|
||||
else:
|
||||
return len([pritem for pritem in self.prog_items if pritem == item]) >= count
|
||||
return self.item_count(item) >= count
|
||||
|
||||
def item_count(self, item):
|
||||
return len([pritem for pritem in self.prog_items if pritem == item])
|
||||
|
||||
def can_lift_rocks(self):
|
||||
return self.has('Power Glove') or self.has('Titans Mitts')
|
||||
|
|
17
Fill.py
17
Fill.py
|
@ -167,23 +167,14 @@ def fill_restrictive(world, base_state, locations, itempool):
|
|||
while itempool and locations:
|
||||
item_to_place = itempool.pop()
|
||||
maximum_exploration_state = sweep_from_pool()
|
||||
|
||||
if world.check_beatable_only:
|
||||
can_beat_without = world.has_beaten_game(maximum_exploration_state)
|
||||
|
||||
spot_to_fill = None
|
||||
for location in locations:
|
||||
if location.can_fill(item_to_place):
|
||||
if world.check_beatable_only:
|
||||
starting_state = base_state.copy()
|
||||
for item in itempool:
|
||||
starting_state.collect(item, True)
|
||||
|
||||
if maximum_exploration_state.can_reach(location):
|
||||
if world.check_beatable_only:
|
||||
starting_state.collect(item_to_place, True)
|
||||
else:
|
||||
spot_to_fill = location
|
||||
break
|
||||
|
||||
if world.check_beatable_only and world.can_beat_game(starting_state):
|
||||
if (world.check_beatable_only and can_beat_without) or maximum_exploration_state.can_reach(location):
|
||||
spot_to_fill = location
|
||||
break
|
||||
|
||||
|
|
2
Main.py
2
Main.py
|
@ -118,6 +118,7 @@ def generate_itempool(world):
|
|||
raise NotImplementedError('Not supported yet')
|
||||
|
||||
world.push_item('Ganon', ItemFactory('Triforce'), False)
|
||||
world.get_location('Ganon').event = True
|
||||
world.push_item('Agahnim 1', ItemFactory('Beat Agahnim 1'), False)
|
||||
world.get_location('Agahnim 1').event = True
|
||||
world.push_item('Agahnim 2', ItemFactory('Beat Agahnim 2'), False)
|
||||
|
@ -177,6 +178,7 @@ def generate_itempool(world):
|
|||
|
||||
if world.goal == 'pedestal':
|
||||
world.push_item('Master Sword Pedestal', ItemFactory('Triforce'), False)
|
||||
world.get_location('Master Sword Pedestal').event = True
|
||||
elif world.goal == 'triforcehunt':
|
||||
world.treasure_hunt_count = 20
|
||||
world.treasure_hunt_icon = 'Triforce Piece'
|
||||
|
|
Loading…
Reference in New Issue