48 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
from .itemInfo import ItemInfo
 | 
						|
from .constants import *
 | 
						|
from ..utils import formatText
 | 
						|
from ..assembler import ASM
 | 
						|
 | 
						|
 | 
						|
class ShopItem(ItemInfo):
 | 
						|
    def __init__(self, index):
 | 
						|
        self.__index = index
 | 
						|
        # pass in the alternate index for shop 2
 | 
						|
        # The "real" room is at 0x2A1, but we store the second item data as if link were in 0x2A7
 | 
						|
        room = 0x2A1
 | 
						|
        if index == 1:
 | 
						|
            room = 0x2A7
 | 
						|
        super().__init__(room)
 | 
						|
 | 
						|
    def patch(self, rom, option, *, multiworld=None):
 | 
						|
        mw_text = ""
 | 
						|
        if multiworld:
 | 
						|
            mw_text = f" for player {rom.player_names[multiworld - 1].encode('ascii', 'replace').decode()}"
 | 
						|
 | 
						|
        
 | 
						|
        if self.custom_item_name:
 | 
						|
            name = self.custom_item_name
 | 
						|
        else:
 | 
						|
            name = "{"+option+"}"
 | 
						|
 | 
						|
        if self.__index == 0:
 | 
						|
            # Old index, maybe not needed any more
 | 
						|
            rom.patch(0x04, 0x37C5, "08", "%02X" % (CHEST_ITEMS[option]))
 | 
						|
            rom.texts[0x030] = formatText(f"Deluxe {name} 200 {{RUPEES}}{mw_text}!", ask="Buy  No Way")
 | 
						|
            rom.banks[0x3E][0x3800 + 0x2A1] = CHEST_ITEMS[option]
 | 
						|
            if multiworld:
 | 
						|
                rom.banks[0x3E][0x3300 + 0x2A1] = multiworld
 | 
						|
        elif self.__index == 1:
 | 
						|
            rom.patch(0x04, 0x37C6, "02", "%02X" % (CHEST_ITEMS[option]))
 | 
						|
            rom.texts[0x02C] = formatText(f"{name} only 980 {{RUPEES}}{mw_text}!", ask="Buy  No Way")
 | 
						|
            
 | 
						|
            rom.banks[0x3E][0x3800 + 0x2A7] = CHEST_ITEMS[option]
 | 
						|
            if multiworld:
 | 
						|
                rom.banks[0x3E][0x3300 + 0x2A7] = multiworld
 | 
						|
 | 
						|
    def read(self, rom):
 | 
						|
        value = rom.banks[0x04][0x37C5 + self.__index]
 | 
						|
        for k, v in CHEST_ITEMS.items():
 | 
						|
            if v == value:
 | 
						|
                return k
 | 
						|
        raise ValueError("Could not find shop item contents in ROM (0x%02x)" % (value)) |