Archipelago/worlds/smz3/TotalSMZ3/Regions/Zelda/IcePalace.py

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)