53 lines
3.0 KiB
Python
53 lines
3.0 KiB
Python
from typing import List
|
|
from ...Region import Z3Region, RewardType, IReward
|
|
from ...Config import Config
|
|
from ...Location import Location, LocationType
|
|
from ...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) |