Archipelago/worlds/smz3/TotalSMZ3/Regions/SuperMetroid/Crateria/East.py

60 lines
3.7 KiB
Python

from ....Region import SMRegion
from ....Config import Config, SMLogic
from ....Location import Location, LocationType
from ....Item import Progression
class East(SMRegion):
Name = "Crateria East"
Area = "Crateria"
def __init__(self, world, config: Config):
super().__init__(world, config)
self.Locations = [
Location(self, 1, 0x8F81E8, LocationType.Visible, "Missile (outside Wrecked Ship bottom)",
lambda items: items.Morph and (
items.SpeedBooster or items.Grapple or items.SpaceJump or
items.Gravity and (items.CanIbj() or items.HiJump) or
self.world.CanEnter("Wrecked Ship", items)) if self.Logic == SMLogic.Normal else \
lambda items: items.Morph),
Location(self, 2, 0x8F81EE, LocationType.Hidden, "Missile (outside Wrecked Ship top)",
lambda items: self.world.CanEnter("Wrecked Ship", items) and items.CardWreckedShipBoss and items.CanPassBombPassages()),
Location(self, 3, 0x8F81F4, LocationType.Visible, "Missile (outside Wrecked Ship middle)",
lambda items: self.world.CanEnter("Wrecked Ship", items) and items.CardWreckedShipBoss and items.CanPassBombPassages()),
Location(self, 4, 0x8F8248, LocationType.Visible, "Missile (Crateria moat)",
lambda items: True)
]
def CanEnter(self, items:Progression):
if self.Logic == SMLogic.Normal:
# /* Ship -> Moat */
return (items.CardCrateriaL2 if self.Config.Keysanity else items.CanUsePowerBombs()) and items.Super or (
# /* UN Portal -> Red Tower -> Moat
items.CardCrateriaL2 if self.Config.Keysanity else items.CanUsePowerBombs()) and items.CanAccessNorfairUpperPortal() and (
items.Ice or items.HiJump or items.SpaceJump) or (
# /*Through Maridia From Portal*/
items.CanAccessMaridiaPortal(self.world)) and items.Gravity and items.Super and (
# /* Oasis -> Forgotten Highway */
items.CardMaridiaL2 and items.CanDestroyBombWalls() or (
# /* Draygon -> Cactus Alley -> Forgotten Highway */
self.world.GetLocation("Space Jump").Available(items))) or (
# /*Through Maridia from Pipe*/
items.CanUsePowerBombs()) and items.Super and items.Gravity
else:
# /* Ship -> Moat */
return (items.CardCrateriaL2 if self.Config.Keysanity else items.CanUsePowerBombs()) and items.Super or (
# /* UN Portal -> Red Tower -> Moat */
items.CardCrateriaL2 if self.Config.Keysanity else items.CanUsePowerBombs()) and items.CanAccessNorfairUpperPortal() and (
items.Ice or items.HiJump or items.CanFly() or items.CanSpringBallJump()) or (
# /*Through Maridia From Portal*/
items.CanAccessMaridiaPortal(self.world)) and (
# /* Oasis -> Forgotten Highway */
items.CardMaridiaL2 and items.Super and (
items.HiJump and items.CanPassBombPassages() or
items.Gravity and items.CanDestroyBombWalls()
) or
# /* Draygon -> Cactus Alley -> Forgotten Highway */
items.Gravity and self.world.GetLocation("Space Jump").Available(items)) or (
# /*Through Maridia from Pipe*/
items.CanUsePowerBombs()) and items.Super and (items.Gravity or items.HiJump and (items.Ice or items.CanSpringBallJump())
and items.Grapple and items.CardMaridiaL1)