def canPassCacatacAlley(self): sm = self.smbm return sm.wand( Bosses.bossDead(sm, 'Draygon'), sm.wor( sm.haveItem('Gravity'), sm.wand(sm.knowsGravLessLevel2(), sm.haveItem('HiJump'), sm.haveItem('SpaceJump'))))
def canPassSpongeBath(self): sm = self.smbm return sm.wand( Bosses.bossDead('Phantoon'), sm.wor( sm.wand(sm.canPassBombPassages(), sm.knowsSpongeBathBombJump()), sm.wand(sm.haveItem('HiJump'), sm.knowsSpongeBathHiJump()), sm.wor( sm.haveItem('Gravity'), sm.haveItem('SpaceJump'), sm.wand(sm.haveItem('SpeedBooster'), sm.knowsSpongeBathSpeed()), sm.canSpringBallJump())))
def fullComebackCheck(self, container, ap, item, loc, comebackCheck): sm = container.sm tmpItems = [] # draygon special case: there are two locations, and we can # place one item, but we might need both the item and the boss # dead to get out if loc['SolveArea'] == "Draygon Boss" and Bosses.bossDead( sm, 'Draygon').bool == False: # temporary kill draygon tmpItems.append('Draygon') sm.addItems(tmpItems) ret = self.locPostAvailable( sm, loc, item.Type if item is not None else None) and not self.isSoftlockPossible( container, ap, item, loc, comebackCheck) for tmp in tmpItems: sm.removeItem(tmp) return ret
def canPassBowling(self): sm = self.smbm return sm.wand( Bosses.bossDead(sm, 'Phantoon'), sm.wor(sm.heatProof(), sm.energyReserveCountOk(1), sm.haveItem("SpaceJump"), sm.haveItem("Grapple")))