diff --git a/worlds/sm/__init__.py b/worlds/sm/__init__.py index 6471db24..acca30bc 100644 --- a/worlds/sm/__init__.py +++ b/worlds/sm/__init__.py @@ -30,18 +30,27 @@ from randomizer import VariaRandomizer class SMCollectionState(metaclass=AutoLogicRegister): def init_mixin(self, parent: MultiWorld): + # for unit tests where MultiWorld is instantiated before worlds if hasattr(parent, "state"): self.smbm = {player: SMBoolManager(player, parent.state.smbm[player].maxDiff, - parent.state.smbm[player].onlyBossLeft) for player in - parent.get_game_players("Super Metroid")} + parent.state.smbm[player].onlyBossLeft) for player in + parent.get_game_players("Super Metroid")} + for player, group in parent.groups.items(): + if (group["game"] == "Super Metroid"): + self.smbm[player] = SMBoolManager(player) + if player not in parent.state.smbm: + parent.state.smbm[player] = SMBoolManager(player) else: self.smbm = {} def copy_mixin(self, ret) -> CollectionState: - ret.smbm = {player: copy.deepcopy(self.smbm[player]) for player in self.world.get_game_players("Super Metroid")} + ret.smbm = {player: copy.deepcopy(self.smbm[player]) for player in self.smbm} return ret + def get_game_players(self, multiword: MultiWorld, game_name: str): + return tuple(player for player in multiword.get_all_ids() if multiword.game[player] == game_name) + class SMWorld(World): game: str = "Super Metroid" diff --git a/worlds/sm/variaRandomizer/logic/smboolmanager.py b/worlds/sm/variaRandomizer/logic/smboolmanager.py index 93e50424..342faed8 100644 --- a/worlds/sm/variaRandomizer/logic/smboolmanager.py +++ b/worlds/sm/variaRandomizer/logic/smboolmanager.py @@ -151,7 +151,7 @@ class SMBoolManager(object): # take no parameter for knows in Knows.__dict__: if isKnows(knows): - if knows in Knows.knowsDict[player].__dict__: + if player in Knows.knowsDict and knows in Knows.knowsDict[player].__dict__: setattr(self, 'knows'+knows, lambda knows=knows: SMBool(Knows.knowsDict[player].__dict__[knows].bool, Knows.knowsDict[player].__dict__[knows].difficulty, knows=[knows]))