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

45 lines
2.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 MiseryMire(Z3Region, IReward, IMedallionAccess):
Name = "Misery Mire"
Area = "Misery Mire"
def __init__(self, world, config: Config):
super().__init__(world, config)
self.Weight = 2
self.RegionItems = [ ItemType.KeyMM, ItemType.BigKeyMM, ItemType.MapMM, ItemType.CompassMM]
self.Reward = RewardType.Null
self.Medallion = None
self.Locations = [
Location(self, 256+169, 0x1EA5E, LocationType.Regular, "Misery Mire - Main Lobby",
lambda items: items.BigKeyMM or items.KeyMM >= 1),
Location(self, 256+170, 0x1EA6A, LocationType.Regular, "Misery Mire - Map Chest",
lambda items: items.BigKeyMM or items.KeyMM >= 1),
Location(self, 256+171, 0x1EA61, LocationType.Regular, "Misery Mire - Bridge Chest"),
Location(self, 256+172, 0x1E9DA, LocationType.Regular, "Misery Mire - Spike Chest"),
Location(self, 256+173, 0x1EA64, LocationType.Regular, "Misery Mire - Compass Chest",
lambda items: items.CanLightTorches() and
items.KeyMM >= (2 if self.GetLocation("Misery Mire - Big Key Chest").ItemIs(ItemType.BigKeyMM, self.world) else 3)),
Location(self, 256+174, 0x1EA6D, LocationType.Regular, "Misery Mire - Big Key Chest",
lambda items: items.CanLightTorches() and
items.KeyMM >= (2 if self.GetLocation("Misery Mire - Compass Chest").ItemIs(ItemType.BigKeyMM, self.world) else 3)),
Location(self, 256+175, 0x1EA67, LocationType.Regular, "Misery Mire - Big Chest",
lambda items: items.BigKeyMM),
Location(self, 256+176, 0x308158, LocationType.Regular, "Misery Mire - Vitreous",
lambda items: items.BigKeyMM and items.Lamp and items.Somaria)
]
# // Need "CanKillManyEnemies" if implementing swordless
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.Boots or items.Hookshot) and \
self.world.CanEnter("Dark World Mire", items)
def CanComplete(self, items: Progression):
return self.GetLocation("Misery Mire - Vitreous").Available(items)