Links Awakening: Implement New Game (#1334)
Adds Link's Awakening: DX. Fully imports and forks LADXR, with permission - https://github.com/daid/LADXR
This commit is contained in:
50
worlds/ladx/LADXR/locations/chest.py
Normal file
50
worlds/ladx/LADXR/locations/chest.py
Normal file
@@ -0,0 +1,50 @@
|
||||
from .itemInfo import ItemInfo
|
||||
from .constants import *
|
||||
from ..assembler import ASM
|
||||
|
||||
|
||||
class Chest(ItemInfo):
|
||||
def __init__(self, room):
|
||||
super().__init__(room)
|
||||
self.addr = room + 0x560
|
||||
|
||||
def patch(self, rom, option, *, multiworld=None):
|
||||
rom.banks[0x14][self.addr] = CHEST_ITEMS[option]
|
||||
|
||||
if self.room == 0x1B6:
|
||||
# Patch the code that gives the nightmare key when you throw the pot at the chest in dungeon 6
|
||||
# As this is hardcoded for a specific chest type
|
||||
rom.patch(3, 0x145D, ASM("ld a, $19"), ASM("ld a, $%02x" % (CHEST_ITEMS[option])))
|
||||
if multiworld is not None:
|
||||
rom.banks[0x3E][0x3300 + self.room] = multiworld
|
||||
|
||||
def read(self, rom):
|
||||
value = rom.banks[0x14][self.addr]
|
||||
for k, v in CHEST_ITEMS.items():
|
||||
if v == value:
|
||||
return k
|
||||
raise ValueError("Could not find chest contents in ROM (0x%02x)" % (value))
|
||||
|
||||
def __repr__(self):
|
||||
return "%s:%03x" % (self.__class__.__name__, self.room)
|
||||
|
||||
|
||||
class DungeonChest(Chest):
|
||||
def patch(self, rom, option, *, multiworld=None):
|
||||
if (option.startswith(MAP) and option != MAP) \
|
||||
or (option.startswith(COMPASS) and option != COMPASS) \
|
||||
or (option.startswith(STONE_BEAK) and option != STONE_BEAK) \
|
||||
or (option.startswith(NIGHTMARE_KEY) and option != NIGHTMARE_KEY) \
|
||||
or (option.startswith(KEY) and option != KEY):
|
||||
if self._location.dungeon == int(option[-1]) and multiworld is None:
|
||||
option = option[:-1]
|
||||
super().patch(rom, option, multiworld=multiworld)
|
||||
|
||||
def read(self, rom):
|
||||
result = super().read(rom)
|
||||
if result in [MAP, COMPASS, STONE_BEAK, NIGHTMARE_KEY, KEY]:
|
||||
return "%s%d" % (result, self._location.dungeon)
|
||||
return result
|
||||
|
||||
def __repr__(self):
|
||||
return "%s:%03x:%d" % (self.__class__.__name__, self.room, self._location.dungeon)
|
||||
Reference in New Issue
Block a user