Minor fixes and clarifications for Bonta's Multiworld code
This commit is contained in:
parent
1a62b1da28
commit
0b9e144f8e
|
@ -244,12 +244,11 @@ class World(object):
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def has_beaten_game(self, state):
|
def has_beaten_game(self, state, player=None):
|
||||||
if all([state.has('Triforce', player) for player in range(1, self.players + 1)]):
|
if player:
|
||||||
return True
|
return state.has('Triforce', player) or (self.goal in ['triforcehunt'] and (state.item_count('Triforce Piece', player) + state.item_count('Power Star', player) > self.treasure_hunt_count))
|
||||||
if self.goal in ['triforcehunt'] and all([((state.item_count('Triforce Piece', player) + state.item_count('Power Star', player)) > self.treasure_hunt_count) for player in range(1, self.players + 1)]):
|
else:
|
||||||
return True
|
return all((self.has_beaten_game(state, p) for p in range(1, self.players + 1)))
|
||||||
return False
|
|
||||||
|
|
||||||
def can_beat_game(self, starting_state=None):
|
def can_beat_game(self, starting_state=None):
|
||||||
if starting_state:
|
if starting_state:
|
||||||
|
@ -410,7 +409,7 @@ class CollectionState(object):
|
||||||
return self.bottle_count(player) > 0
|
return self.bottle_count(player) > 0
|
||||||
|
|
||||||
def bottle_count(self, player):
|
def bottle_count(self, player):
|
||||||
return len([pritem for pritem in self.prog_items if pritem[0].startswith('Bottle') and pritem[1] == player])
|
return len([item for (item, itemplayer) in self.prog_items if item.startswith('Bottle') and itemplayer == player])
|
||||||
|
|
||||||
def has_hearts(self, player, count):
|
def has_hearts(self, player, count):
|
||||||
# Warning: This only considers items that are marked as advancement items
|
# Warning: This only considers items that are marked as advancement items
|
||||||
|
@ -641,7 +640,7 @@ class Region(object):
|
||||||
is_dungeon_item = item.key or item.map or item.compass
|
is_dungeon_item = item.key or item.map or item.compass
|
||||||
sewer_hack = self.world.mode == 'standard' and item.name == 'Small Key (Escape)'
|
sewer_hack = self.world.mode == 'standard' and item.name == 'Small Key (Escape)'
|
||||||
if sewer_hack or (is_dungeon_item and not self.world.keysanity):
|
if sewer_hack or (is_dungeon_item and not self.world.keysanity):
|
||||||
return self.dungeon and self.dungeon.is_dungeon_item(item) and (item.player == self.player or self.world.keysanity)
|
return self.dungeon and self.dungeon.is_dungeon_item(item) and item.player == self.player
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ def link_entrances(world, player):
|
||||||
for exitname, regionname in default_connections:
|
for exitname, regionname in default_connections:
|
||||||
connect_simple(world, exitname, regionname, player)
|
connect_simple(world, exitname, regionname, player)
|
||||||
|
|
||||||
simple_shuffle_dungeons(world)
|
simple_shuffle_dungeons(world, player)
|
||||||
elif world.shuffle == 'dungeonsfull':
|
elif world.shuffle == 'dungeonsfull':
|
||||||
for exitname, regionname in default_connections:
|
for exitname, regionname in default_connections:
|
||||||
connect_simple(world, exitname, regionname, player)
|
connect_simple(world, exitname, regionname, player)
|
||||||
|
|
Loading…
Reference in New Issue