78 lines
5.2 KiB
Python
78 lines
5.2 KiB
Python
from ...Region import SMRegion, IReward, RewardType
|
|
from ...Config import Config, SMLogic
|
|
from ...Location import Location, LocationType
|
|
from ...Item import Progression
|
|
|
|
class WreckedShip(SMRegion, IReward):
|
|
Name = "Wrecked Ship"
|
|
Area = "Wrecked Ship"
|
|
|
|
def __init__(self, world, config: Config):
|
|
super().__init__(world, config)
|
|
self.Weight = 4
|
|
self.Reward = RewardType.Null
|
|
self.Locations = [
|
|
Location(self, 128, 0x8FC265, LocationType.Visible, "Missile (Wrecked Ship middle)",
|
|
lambda items: items.CanPassBombPassages()),
|
|
Location(self, 129, 0x8FC2E9, LocationType.Chozo, "Reserve Tank, Wrecked Ship",
|
|
lambda items: self.CanUnlockShip(items) and items.CardWreckedShipL1 and items.CanUsePowerBombs() and items.SpeedBooster and
|
|
(items.Grapple or items.SpaceJump or items.Varia and items.HasEnergyReserves(2) or items.HasEnergyReserves(3)) if self.Logic == SMLogic.Normal else \
|
|
lambda items: self.CanUnlockShip(items) and items.CardWreckedShipL1 and items.CanUsePowerBombs() and items.SpeedBooster and
|
|
(items.Varia or items.HasEnergyReserves(2))),
|
|
Location(self, 130, 0x8FC2EF, LocationType.Visible, "Missile (Gravity Suit)",
|
|
lambda items: self.CanUnlockShip(items) and items.CardWreckedShipL1 and
|
|
(items.Grapple or items.SpaceJump or items.Varia and items.HasEnergyReserves(2) or items.HasEnergyReserves(3)) if self.Logic == SMLogic.Normal else \
|
|
lambda items: self.CanUnlockShip(items) and items.CardWreckedShipL1 and (items.Varia or items.HasEnergyReserves(1))),
|
|
Location(self, 131, 0x8FC319, LocationType.Visible, "Missile (Wrecked Ship top)",
|
|
lambda items: self.CanUnlockShip(items)),
|
|
Location(self, 132, 0x8FC337, LocationType.Visible, "Energy Tank, Wrecked Ship",
|
|
lambda items: self.CanUnlockShip(items) and
|
|
(items.HiJump or items.SpaceJump or items.SpeedBooster or items.Gravity) if self.Logic == SMLogic.Normal else \
|
|
lambda items: self.CanUnlockShip(items) and (items.Morph and (items.Bombs or items.PowerBomb) or items.CanSpringBallJump() or
|
|
items.HiJump or items.SpaceJump or items.SpeedBooster or items.Gravity)),
|
|
Location(self, 133, 0x8FC357, LocationType.Visible, "Super Missile (Wrecked Ship left)",
|
|
lambda items: self.CanUnlockShip(items)),
|
|
Location(self, 134, 0x8FC365, LocationType.Visible, "Right Super, Wrecked Ship",
|
|
lambda items: self.CanUnlockShip(items)),
|
|
Location(self, 135, 0x8FC36D, LocationType.Chozo, "Gravity Suit",
|
|
lambda items: self.CanUnlockShip(items) and items.CardWreckedShipL1 and
|
|
(items.Grapple or items.SpaceJump or items.Varia and items.HasEnergyReserves(2) or items.HasEnergyReserves(3)) if self.Logic == SMLogic.Normal else \
|
|
lambda items: self.CanUnlockShip(items) and items.CardWreckedShipL1 and (items.Varia or items.HasEnergyReserves(1)))
|
|
]
|
|
|
|
def CanUnlockShip(self, items:Progression):
|
|
return items.CardWreckedShipBoss and items.CanPassBombPassages()
|
|
|
|
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 CanComplete(self, items:Progression):
|
|
return self.CanEnter(items) and self.CanUnlockShip(items) |