53 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
| from typing import List
 | |
| from worlds.smz3.TotalSMZ3.Region import Z3Region, RewardType, IReward
 | |
| from worlds.smz3.TotalSMZ3.Config import Config
 | |
| from worlds.smz3.TotalSMZ3.Location import Location, LocationType
 | |
| from worlds.smz3.TotalSMZ3.Item import Progression, ItemType
 | |
| 
 | |
| class IcePalace(Z3Region, IReward):
 | |
|     Name = "Ice Palace"
 | |
|     Area = "Ice Palace"
 | |
| 
 | |
|     def __init__(self, world, config: Config):
 | |
|         super().__init__(world, config)
 | |
|         self.Weight = 4
 | |
|         self.RegionItems = [ ItemType.KeyIP, ItemType.BigKeyIP, ItemType.MapIP, ItemType.CompassIP]
 | |
|         self.Reward = RewardType.Null
 | |
|         self.Locations = [
 | |
|             Location(self, 256+161, 0x1E9D4, LocationType.Regular, "Ice Palace - Compass Chest"),
 | |
|             Location(self, 256+162, 0x1E9E0, LocationType.Regular, "Ice Palace - Spike Room",
 | |
|                 lambda items: items.Hookshot or items.KeyIP >= 1 and self.CanNotWasteKeysBeforeAccessible(items, [
 | |
|                     self.GetLocation("Ice Palace - Map Chest"),
 | |
|                     self.GetLocation("Ice Palace - Big Key Chest")
 | |
|                 ])),
 | |
|             Location(self, 256+163, 0x1E9DD, LocationType.Regular, "Ice Palace - Map Chest",
 | |
|                 lambda items: items.Hammer and items.CanLiftLight() and (
 | |
|                     items.Hookshot or items.KeyIP >= 1 and self.CanNotWasteKeysBeforeAccessible(items, [
 | |
|                         self.GetLocation("Ice Palace - Spike Room"),
 | |
|                         self.GetLocation("Ice Palace - Big Key Chest")
 | |
|                     ])
 | |
|                 )),
 | |
|             Location(self, 256+164, 0x1E9A4, LocationType.Regular, "Ice Palace - Big Key Chest",
 | |
|                 lambda items: items.Hammer and items.CanLiftLight() and (
 | |
|                     items.Hookshot or items.KeyIP >= 1 and self.CanNotWasteKeysBeforeAccessible(items, [
 | |
|                         self.GetLocation("Ice Palace - Spike Room"),
 | |
|                         self.GetLocation("Ice Palace - Map Chest")
 | |
|                     ])
 | |
|                 )),
 | |
|             Location(self, 256+165, 0x1E9E3, LocationType.Regular, "Ice Palace - Iced T Room"),
 | |
|             Location(self, 256+166, 0x1E995, LocationType.Regular, "Ice Palace - Freezor Chest"),
 | |
|             Location(self, 256+167, 0x1E9AA, LocationType.Regular, "Ice Palace - Big Chest",
 | |
|                 lambda items: items.BigKeyIP),
 | |
|             Location(self, 256+168, 0x308157, LocationType.Regular, "Ice Palace - Kholdstare",
 | |
|                 lambda items: items.BigKeyIP and items.Hammer and items.CanLiftLight() and
 | |
|                     items.KeyIP >= (1 if items.Somaria else 2))
 | |
|             ]
 | |
| 
 | |
|     def CanNotWasteKeysBeforeAccessible(self, items: Progression, locations: List[Location]):
 | |
|         return self.world.ForwardSearch or not items.BigKeyIP or any(l.ItemIs(ItemType.BigKeyIP, self.world) for l in locations)
 | |
| 
 | |
|     def CanEnter(self, items: Progression):
 | |
|         return items.MoonPearl and items.Flippers and items.CanLiftHeavy() and items.CanMeltFreezors()
 | |
| 
 | |
|     def CanComplete(self, items: Progression):
 | |
|         return self.GetLocation("Ice Palace - Kholdstare").Available(items) |