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

58 lines
3.7 KiB
Python

from typing import List
from worlds.smz3.TotalSMZ3.Region import Z3Region, RewardType, IReward, IMedallionAccess
from worlds.smz3.TotalSMZ3.Config import Config
from worlds.smz3.TotalSMZ3.Location import Location, LocationType
from worlds.smz3.TotalSMZ3.Item import Progression, ItemType
class TurtleRock(Z3Region, IReward, IMedallionAccess):
Name = "Turtle Rock"
Area = "Turtle Rock"
def __init__(self, world, config: Config):
super().__init__(world, config)
self.Weight = 6
self.RegionItems = [ ItemType.KeyTR, ItemType.BigKeyTR, ItemType.MapTR, ItemType.CompassTR]
self.Reward = RewardType.Null
self.Medallion = None
self.Locations = [
Location(self, 256+177, 0x1EA22, LocationType.Regular, "Turtle Rock - Compass Chest"),
Location(self, 256+178, 0x1EA1C, LocationType.Regular, "Turtle Rock - Roller Room - Left",
lambda items: items.Firerod),
Location(self, 256+179, 0x1EA1F, LocationType.Regular, "Turtle Rock - Roller Room - Right",
lambda items: items.Firerod),
Location(self, 256+180, 0x1EA16, LocationType.Regular, "Turtle Rock - Chain Chomps",
lambda items: items.KeyTR >= 1),
Location(self, 256+181, 0x1EA25, LocationType.Regular, "Turtle Rock - Big Key Chest",
lambda items: items.KeyTR >=
(2 if not self.Config.Keysanity or self.GetLocation("Turtle Rock - Big Key Chest").ItemIs(ItemType.BigKeyTR, self.world) else
3 if self.GetLocation("Turtle Rock - Big Key Chest").ItemIs(ItemType.KeyTR, self.world) else 4))
.AlwaysAllow(lambda item, items: item.Is(ItemType.KeyTR, self.world) and items.KeyTR >= 3),
Location(self, 256+182, 0x1EA19, LocationType.Regular, "Turtle Rock - Big Chest",
lambda items: items.BigKeyTR and items.KeyTR >= 2)
.Allow(lambda item, items: item.IsNot(ItemType.BigKeyTR, self.world)),
Location(self, 256+183, 0x1EA34, LocationType.Regular, "Turtle Rock - Crystaroller Room",
lambda items: items.BigKeyTR and items.KeyTR >= 2),
Location(self, 256+184, 0x1EA28, LocationType.Regular, "Turtle Rock - Eye Bridge - Top Right", self.LaserBridge),
Location(self, 256+185, 0x1EA2B, LocationType.Regular, "Turtle Rock - Eye Bridge - Top Left", self.LaserBridge),
Location(self, 256+186, 0x1EA2E, LocationType.Regular, "Turtle Rock - Eye Bridge - Bottom Right", self.LaserBridge),
Location(self, 256+187, 0x1EA31, LocationType.Regular, "Turtle Rock - Eye Bridge - Bottom Left", self.LaserBridge),
Location(self, 256+188, 0x308159, LocationType.Regular, "Turtle Rock - Trinexx",
lambda items: items.BigKeyTR and items.KeyTR >= 4 and items.Lamp and self.CanBeatBoss(items)),
]
def LaserBridge(self, items: Progression):
return items.BigKeyTR and items.KeyTR >= 3 and items.Lamp and (items.Cape or items.Byrna or items.CanBlockLasers)
def CanBeatBoss(self, items: Progression):
return items.Firerod and items.Icerod
def CanEnter(self, items: Progression):
from worlds.smz3.TotalSMZ3.WorldState import Medallion
return (items.Bombos if self.Medallion == Medallion.Bombos else (
items.Ether if self.Medallion == Medallion.Ether else items.Quake)) and items.Sword and \
items.MoonPearl and items.CanLiftHeavy() and items.Hammer and items.Somaria and \
self.world.CanEnter("Light World Death Mountain East", items)
def CanComplete(self, items: Progression):
return self.GetLocation("Turtle Rock - Trinexx").Available(items)