| 
									
										
										
										
											2022-03-15 08:55:57 -04:00
										 |  |  |  | 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 Inner(SMRegion, IReward): | 
					
						
							|  |  |  |  |     Name = "Maridia Inner" | 
					
						
							|  |  |  |  |     Area = "Maridia" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     def __init__(self, world, config: Config): | 
					
						
							|  |  |  |  |         super().__init__(world, config) | 
					
						
							| 
									
										
										
										
											2022-08-15 10:48:13 -04:00
										 |  |  |  |         self.Reward = RewardType.Null | 
					
						
							| 
									
										
										
										
											2022-03-15 08:55:57 -04:00
										 |  |  |  |         self.Locations = [ | 
					
						
							|  |  |  |  |             Location(self, 140, 0x8FC4AF, LocationType.Visible, "Super Missile (yellow Maridia)", | 
					
						
							| 
									
										
										
										
											2022-08-15 10:48:13 -04:00
										 |  |  |  |                 lambda items: items.CardMaridiaL1 and items.CanPassBombPassages() and self.CanReachAqueduct(items) and | 
					
						
							|  |  |  |  |                     (items.Gravity or items.Ice or items.HiJump and items.SpringBall)), | 
					
						
							| 
									
										
										
										
											2022-03-15 08:55:57 -04:00
										 |  |  |  |             Location(self, 141, 0x8FC4B5, LocationType.Visible, "Missile (yellow Maridia super missile)", | 
					
						
							|  |  |  |  |                 lambda items: items.CardMaridiaL1 and items.CanPassBombPassages() and | 
					
						
							| 
									
										
										
										
											2022-08-15 10:48:13 -04:00
										 |  |  |  |                     (items.Gravity or items.Ice or items.HiJump and items.SpringBall)), | 
					
						
							| 
									
										
										
										
											2022-03-15 08:55:57 -04:00
										 |  |  |  |             Location(self, 142, 0x8FC533, LocationType.Visible, "Missile (yellow Maridia false wall)", | 
					
						
							|  |  |  |  |                 lambda items: items.CardMaridiaL1 and items.CanPassBombPassages() and | 
					
						
							| 
									
										
										
										
											2022-08-15 10:48:13 -04:00
										 |  |  |  |                     (items.Gravity or items.Ice or items.HiJump and items.SpringBall)), | 
					
						
							| 
									
										
										
										
											2022-03-15 08:55:57 -04:00
										 |  |  |  |             Location(self, 143, 0x8FC559, LocationType.Chozo, "Plasma Beam", | 
					
						
							|  |  |  |  |                 lambda items: self.CanDefeatDraygon(items) and (items.ScrewAttack or items.Plasma) and (items.HiJump or items.CanFly()) if self.Logic == SMLogic.Normal else \ | 
					
						
							|  |  |  |  |                 lambda items: self.CanDefeatDraygon(items) and | 
					
						
							|  |  |  |  |                     (items.Charge and items.HasEnergyReserves(3) or items.ScrewAttack or items.Plasma or items.SpeedBooster) and | 
					
						
							|  |  |  |  |                     (items.HiJump or items.CanSpringBallJump() or items.CanFly() or items.SpeedBooster)), | 
					
						
							|  |  |  |  |             Location(self, 144, 0x8FC5DD, LocationType.Visible, "Missile (left Maridia sand pit room)", | 
					
						
							|  |  |  |  |                 lambda items: self.CanReachAqueduct(items) and items.Super and items.CanPassBombPassages() if self.Logic == SMLogic.Normal else \ | 
					
						
							|  |  |  |  |                 lambda items: self.CanReachAqueduct(items) and items.Super and | 
					
						
							| 
									
										
										
										
											2022-08-15 10:48:13 -04:00
										 |  |  |  |                     (items.Gravity or items.HiJump and (items.SpaceJump or items.CanSpringBallJump()))), | 
					
						
							| 
									
										
										
										
											2022-03-15 08:55:57 -04:00
										 |  |  |  |             Location(self, 145, 0x8FC5E3, LocationType.Chozo, "Reserve Tank, Maridia", | 
					
						
							|  |  |  |  |                 lambda items: self.CanReachAqueduct(items) and items.Super and items.CanPassBombPassages() if self.Logic == SMLogic.Normal else \ | 
					
						
							|  |  |  |  |                 lambda items: self.CanReachAqueduct(items) and items.Super and | 
					
						
							| 
									
										
										
										
											2022-08-15 10:48:13 -04:00
										 |  |  |  |                     (items.Gravity or items.HiJump and (items.SpaceJump or items.CanSpringBallJump()))), | 
					
						
							| 
									
										
										
										
											2022-03-15 08:55:57 -04:00
										 |  |  |  |             Location(self, 146, 0x8FC5EB, LocationType.Visible, "Missile (right Maridia sand pit room)", | 
					
						
							|  |  |  |  |                 lambda items: self.CanReachAqueduct(items) and items.Super) if self.Logic == SMLogic.Normal else \ | 
					
						
							|  |  |  |  |                 lambda items: self.CanReachAqueduct(items) and items.Super and (items.HiJump or items.Gravity), | 
					
						
							|  |  |  |  |             Location(self, 147, 0x8FC5F1, LocationType.Visible, "Power Bomb (right Maridia sand pit room)", | 
					
						
							|  |  |  |  |                 lambda items: self.CanReachAqueduct(items) and items.Super) if self.Logic == SMLogic.Normal else \ | 
					
						
							| 
									
										
										
										
											2022-08-15 10:48:13 -04:00
										 |  |  |  |                 lambda items: self.CanReachAqueduct(items) and items.Super and (items.Gravity or items.HiJump and items.CanSpringBallJump()), | 
					
						
							| 
									
										
										
										
											2022-03-15 08:55:57 -04:00
										 |  |  |  |             Location(self, 148, 0x8FC603, LocationType.Visible, "Missile (pink Maridia)",  | 
					
						
							|  |  |  |  |                 lambda items: self.CanReachAqueduct(items) and items.SpeedBooster if self.Logic == SMLogic.Normal else \ | 
					
						
							|  |  |  |  |                 lambda items: self.CanReachAqueduct(items) and items.Gravity), | 
					
						
							|  |  |  |  |             Location(self, 149, 0x8FC609, LocationType.Visible, "Super Missile (pink Maridia)", | 
					
						
							|  |  |  |  |                 lambda items: self.CanReachAqueduct(items) and items.SpeedBooster if self.Logic == SMLogic.Normal else \ | 
					
						
							|  |  |  |  |                 lambda items: self.CanReachAqueduct(items) and items.Gravity), | 
					
						
							|  |  |  |  |             Location(self, 150, 0x8FC6E5, LocationType.Chozo, "Spring Ball", | 
					
						
							|  |  |  |  |                 lambda items: items.Super and items.Grapple and items.CanUsePowerBombs() and (items.SpaceJump or items.HiJump) if self.Logic == SMLogic.Normal else \ | 
					
						
							|  |  |  |  |                 lambda items: items.Super and items.Grapple and items.CanUsePowerBombs() and ( | 
					
						
							|  |  |  |  |                     items.Gravity and (items.CanFly() or items.HiJump) or | 
					
						
							|  |  |  |  |                     items.Ice and items.HiJump and items.CanSpringBallJump() and items.SpaceJump)), | 
					
						
							|  |  |  |  |             Location(self, 151, 0x8FC74D, LocationType.Hidden, "Missile (Draygon)", | 
					
						
							|  |  |  |  |                 lambda items:  | 
					
						
							|  |  |  |  |                     items.CardMaridiaL1 and items.CardMaridiaL2 and self.CanDefeatBotwoon(items) or | 
					
						
							|  |  |  |  |                     items.CanAccessMaridiaPortal(self.world) if self.Logic == SMLogic.Normal else \ | 
					
						
							|  |  |  |  |                 lambda items: ( | 
					
						
							|  |  |  |  |                         items.CardMaridiaL1 and items.CardMaridiaL2 and self.CanDefeatBotwoon(items) or | 
					
						
							|  |  |  |  |                         items.CanAccessMaridiaPortal(self.world) | 
					
						
							|  |  |  |  |                     ) and items.Gravity), | 
					
						
							|  |  |  |  |             Location(self, 152, 0x8FC755, LocationType.Visible, "Energy Tank, Botwoon", | 
					
						
							|  |  |  |  |                 lambda items:  | 
					
						
							|  |  |  |  |                     items.CardMaridiaL1 and items.CardMaridiaL2 and self.CanDefeatBotwoon(items) or | 
					
						
							|  |  |  |  |                     items.CanAccessMaridiaPortal(self.world) and items.CardMaridiaL2), | 
					
						
							|  |  |  |  |             Location(self, 154, 0x8FC7A7, LocationType.Chozo, "Space Jump", | 
					
						
							|  |  |  |  |                 lambda items: self.CanDefeatDraygon(items)) | 
					
						
							|  |  |  |  |             ] | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     def CanReachAqueduct(self, items: Progression): | 
					
						
							|  |  |  |  |         if self.Logic == SMLogic.Normal: | 
					
						
							|  |  |  |  |             return items.CardMaridiaL1 and (items.CanFly() or items.SpeedBooster or items.Grapple) \ | 
					
						
							|  |  |  |  |                     or items.CardMaridiaL2 and items.CanAccessMaridiaPortal(self.world) | 
					
						
							|  |  |  |  |         else: | 
					
						
							|  |  |  |  |             return items.CardMaridiaL1 and (items.Gravity or items.HiJump and (items.Ice or items.CanSpringBallJump()) and items.Grapple) \ | 
					
						
							|  |  |  |  |                     or items.CardMaridiaL2 and items.CanAccessMaridiaPortal(self.world) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     def CanDefeatDraygon(self, items: Progression): | 
					
						
							|  |  |  |  |         if self.Logic == SMLogic.Normal: | 
					
						
							|  |  |  |  |             return (items.CardMaridiaL1 and items.CardMaridiaL2 and self.CanDefeatBotwoon(items) or | 
					
						
							|  |  |  |  |                     items.CanAccessMaridiaPortal(self.world) | 
					
						
							|  |  |  |  |                 ) and items.CardMaridiaBoss and items.Gravity and (items.SpeedBooster and items.HiJump or items.CanFly()) | 
					
						
							|  |  |  |  |         else: | 
					
						
							|  |  |  |  |             return (items.CardMaridiaL1 and items.CardMaridiaL2 and self.CanDefeatBotwoon(items) or | 
					
						
							|  |  |  |  |                     items.CanAccessMaridiaPortal(self.world) | 
					
						
							|  |  |  |  |                 ) and items.CardMaridiaBoss and items.Gravity | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     def CanDefeatBotwoon(self, items: Progression): | 
					
						
							|  |  |  |  |         if self.Logic == SMLogic.Normal: | 
					
						
							|  |  |  |  |             return items.SpeedBooster or items.CanAccessMaridiaPortal(self.world) | 
					
						
							|  |  |  |  |         else: | 
					
						
							|  |  |  |  |             return items.Ice or items.SpeedBooster and items.Gravity or items.CanAccessMaridiaPortal(self.world) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     def CanEnter(self, items: Progression): | 
					
						
							|  |  |  |  |         if self.Logic == SMLogic.Normal: | 
					
						
							|  |  |  |  |             return items.Gravity and ( | 
					
						
							|  |  |  |  |                 self.world.CanEnter("Norfair Upper West", items) and items.Super and items.CanUsePowerBombs() and | 
					
						
							|  |  |  |  |                     (items.CanFly() or items.SpeedBooster or items.Grapple) or | 
					
						
							|  |  |  |  |                 items.CanAccessMaridiaPortal(self.world)) | 
					
						
							|  |  |  |  |         else: | 
					
						
							|  |  |  |  |             return items.Super and self.world.CanEnter("Norfair Upper West", items) and items.CanUsePowerBombs() and ( | 
					
						
							|  |  |  |  |                     items.Gravity or items.HiJump and (items.Ice or items.CanSpringBallJump()) and items.Grapple) or \ | 
					
						
							|  |  |  |  |                 items.CanAccessMaridiaPortal(self.world) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     def CanComplete(self, items: Progression): | 
					
						
							|  |  |  |  |         return self.GetLocation("Space Jump").Available(items) |