diff --git a/worlds/smz3/TotalSMZ3/Regions/Zelda/GanonsTower.py b/worlds/smz3/TotalSMZ3/Regions/Zelda/GanonsTower.py index 0f21d7e2..c1a6d79f 100644 --- a/worlds/smz3/TotalSMZ3/Regions/Zelda/GanonsTower.py +++ b/worlds/smz3/TotalSMZ3/Regions/Zelda/GanonsTower.py @@ -138,6 +138,10 @@ class GanonsTower(Z3Region): self.world.CanAcquireAtLeast(self.world.TowerCrystals, items, RewardType.AnyCrystal) and \ self.world.CanAcquireAtLeast(self.world.TourianBossTokens * (self.world.TowerCrystals / 7), items, RewardType.AnyBossToken) + # added for AP completion_condition when TowerCrystals is lower than GanonCrystals + def CanComplete(self, items: Progression): + return self.world.CanAcquireAtLeast(self.world.GanonCrystals, items, RewardType.AnyCrystal) + def CanFill(self, item: Item): if (self.Config.Multiworld): if (item.World != self.world or item.Progression): diff --git a/worlds/smz3/__init__.py b/worlds/smz3/__init__.py index 944cf690..fdabc5c5 100644 --- a/worlds/smz3/__init__.py +++ b/worlds/smz3/__init__.py @@ -16,6 +16,7 @@ from worlds.smz3.TotalSMZ3.Config import Config, GameMode, Goal, KeyShuffle, Mor from worlds.smz3.TotalSMZ3.Location import LocationType, locations_start_id, Location as TotalSMZ3Location from worlds.smz3.TotalSMZ3.Patch import Patch as TotalSMZ3Patch, getWord, getWordArray from worlds.smz3.TotalSMZ3.WorldState import WorldState +from worlds.smz3.TotalSMZ3.Region import IReward, IMedallionAccess from ..AutoWorld import World, AutoLogicRegister, WebWorld from .Client import SMZ3SNIClient from .Rom import get_base_rom_bytes, SMZ3DeltaPatch @@ -235,7 +236,8 @@ class SMZ3World(World): # SM G4 is logically required to access Ganon's Tower in SMZ3 self.multiworld.completion_condition[self.player] = lambda state: \ self.smz3World.GetRegion("Ganon's Tower").CanEnter(state.smz3state[self.player]) and \ - self.smz3World.GetRegion("Ganon's Tower").TowerAscend(state.smz3state[self.player]) + self.smz3World.GetRegion("Ganon's Tower").TowerAscend(state.smz3state[self.player]) and \ + self.smz3World.GetRegion("Ganon's Tower").CanComplete(state.smz3state[self.player]) for region in self.smz3World.Regions: entrance = self.multiworld.get_entrance('Menu' + "->" + region.Name, self.player) @@ -526,7 +528,20 @@ class SMZ3World(World): return self.multiworld.random.choice(self.junkItemsNames) def write_spoiler(self, spoiler_handle: TextIO): - self.multiworld.spoiler.unreachables.update(self.unreachable) + self.multiworld.spoiler.unreachables.update(self.unreachable) + player_name = f'{self.multiworld.get_player_name(self.player)}: ' if self.multiworld.players > 1 else '' + spoiler_handle.write('\n\nRewards:\n\n') + spoiler_handle.write('\n'.join([ + f"{player_name}{region.Name}: {region.Reward.name}" + for region in self.smz3World.Regions + if isinstance(region, IReward) + ])) + spoiler_handle.write('\n\nMedallions:\n\n') + spoiler_handle.write('\n'.join([ + f"{player_name}{region.Name}: {region.Medallion.name}" + for region in self.smz3World.Regions + if isinstance(region, IMedallionAccess) + ])) def JunkFillGT(self, factor): poolLength = len(self.multiworld.itempool)