def CanEnter(self, items: Progression): if self.Logic == SMLogic.Normal: return items.Super and ( # /* Over the Moat */ (items.CardCrateriaL2 if self.Config.Keysanity else items.CanUsePowerBombs()) and (items.SpeedBooster or items.Grapple or items.SpaceJump or items.Gravity and (items.CanIbj() or items.HiJump)) or # /* Through Maridia -> Forgotten Highway */ items.CanUsePowerBombs() and items.Gravity or # /* From Maridia portal -> Forgotten Highway */ items.CanAccessMaridiaPortal(self.world) and items.Gravity and (items.CanDestroyBombWalls() and items.CardMaridiaL2 or self.world.GetLocation("Space Jump").Available(items))) else: return items.Super and ( # /* Over the Moat */ (items.CardCrateriaL2 if self.Config.Keysanity else items.CanUsePowerBombs()) or # /* Through Maridia -> Forgotten Highway */ items.CanUsePowerBombs() and (items.Gravity or # /* Climb Mt. Everest */ items.HiJump and (items.Ice or items.CanSpringBallJump()) and items.Grapple and items.CardMaridiaL1) or # /* From Maridia portal -> Forgotten Highway */ items.CanAccessMaridiaPortal(self.world) and (items.HiJump and items.CanPassBombPassages() and items.CardMaridiaL2 or items.Gravity and (items.CanDestroyBombWalls() and items.CardMaridiaL2 or self.world.GetLocation("Space Jump").Available(items))))
def CanEnterAndLeaveGauntlet(self, items: Progression): if self.Logic == SMLogic.Normal: return items.CardCrateriaL1 and items.Morph and ( items.CanFly() or items.SpeedBooster) and ( items.CanIbj() or items.CanUsePowerBombs() and items.TwoPowerBombs or items.ScrewAttack) else: return items.CardCrateriaL1 and ( items.Morph and (items.Bombs or items.TwoPowerBombs) or items.ScrewAttack or items.SpeedBooster and items.CanUsePowerBombs() and items.HasEnergyReserves(2))