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)) | 
