From 0b9e144f8e0155724c05ead9f25971dc8de9e3a7 Mon Sep 17 00:00:00 2001 From: Kevin Cathcart Date: Tue, 9 Jul 2019 22:18:24 -0400 Subject: [PATCH] Minor fixes and clarifications for Bonta's Multiworld code --- BaseClasses.py | 15 +++++++-------- EntranceShuffle.py | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 93612364..01f7168d 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -244,12 +244,11 @@ class World(object): return False - def has_beaten_game(self, state): - if all([state.has('Triforce', player) for player in range(1, self.players + 1)]): - return True - 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)]): - return True - return False + def has_beaten_game(self, state, player=None): + if player: + 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)) + else: + return all((self.has_beaten_game(state, p) for p in range(1, self.players + 1))) def can_beat_game(self, starting_state=None): if starting_state: @@ -410,7 +409,7 @@ class CollectionState(object): return self.bottle_count(player) > 0 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): # 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 sewer_hack = self.world.mode == 'standard' and item.name == 'Small Key (Escape)' 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 diff --git a/EntranceShuffle.py b/EntranceShuffle.py index 0265dae8..da460244 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -28,7 +28,7 @@ def link_entrances(world, player): for exitname, regionname in default_connections: connect_simple(world, exitname, regionname, player) - simple_shuffle_dungeons(world) + simple_shuffle_dungeons(world, player) elif world.shuffle == 'dungeonsfull': for exitname, regionname in default_connections: connect_simple(world, exitname, regionname, player)