42 lines
1.8 KiB
Python
42 lines
1.8 KiB
Python
from .itemInfo import ItemInfo
|
|
from .constants import *
|
|
|
|
|
|
class OwlStatue(ItemInfo):
|
|
def configure(self, options):
|
|
if options.owlstatues == "both":
|
|
return
|
|
if options.owlstatues == "dungeon" and self.room >= 0x100:
|
|
return
|
|
if options.owlstatues == "overworld" and self.room < 0x100:
|
|
return
|
|
raise RuntimeError("Tried to configure an owlstatue that was not enabled")
|
|
self.OPTIONS = [RUPEES_20]
|
|
|
|
def patch(self, rom, option, *, multiworld=None):
|
|
if option.startswith(MAP) or option.startswith(COMPASS) or option.startswith(STONE_BEAK) or option.startswith(NIGHTMARE_KEY) or option.startswith(KEY):
|
|
if self._location.dungeon == int(option[-1]) and multiworld is not None:
|
|
option = option[:-1]
|
|
rom.banks[0x3E][self.room + 0x3B16] = CHEST_ITEMS[option]
|
|
|
|
def read(self, rom):
|
|
assert self._location is not None, hex(self.room)
|
|
value = rom.banks[0x3E][self.room + 0x3B16]
|
|
for k, v in CHEST_ITEMS.items():
|
|
if v == value:
|
|
if k in [MAP, COMPASS, STONE_BEAK, NIGHTMARE_KEY, KEY]:
|
|
assert self._location.dungeon is not None, "Dungeon item outside of dungeon? %r" % (self)
|
|
return "%s%d" % (k, self._location.dungeon)
|
|
return k
|
|
raise ValueError("Could not find owl statue contents in ROM (0x%02x)" % (value))
|
|
|
|
def __repr__(self):
|
|
if self._location and self._location.dungeon:
|
|
return "%s:%03x:%d" % (self.__class__.__name__, self.room, self._location.dungeon)
|
|
else:
|
|
return "%s:%03x" % (self.__class__.__name__, self.room)
|
|
|
|
@property
|
|
def nameId(self):
|
|
return "0x%03X-Owl" % self.room
|