78 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
| from worlds.smz3.TotalSMZ3.Region import SMRegion, IReward, RewardType
 | |
| from worlds.smz3.TotalSMZ3.Config import Config, SMLogic
 | |
| from worlds.smz3.TotalSMZ3.Location import Location, LocationType
 | |
| from worlds.smz3.TotalSMZ3.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) |