| 
									
										
										
										
											2023-03-21 01:26:03 +09:00
										 |  |  | 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: | 
					
						
							| 
									
										
										
										
											2023-03-29 05:41:11 -07:00
										 |  |  |             mw_text = f" for player {rom.player_names[multiworld - 1].encode('ascii', 'replace').decode()}" | 
					
						
							| 
									
										
										
										
											2024-08-29 02:15:49 -04:00
										 |  |  |             # filter out { and } since they cause issues with string.format later on | 
					
						
							|  |  |  |             mw_text = mw_text.replace("{", "").replace("}", "") | 
					
						
							| 
									
										
										
										
											2023-03-29 05:41:11 -07:00
										 |  |  |          | 
					
						
							|  |  |  |         if self.custom_item_name: | 
					
						
							|  |  |  |             name = self.custom_item_name | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             name = "{"+option+"}" | 
					
						
							| 
									
										
										
										
											2023-03-21 01:26:03 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if self.__index == 0: | 
					
						
							|  |  |  |             # Old index, maybe not needed any more | 
					
						
							|  |  |  |             rom.patch(0x04, 0x37C5, "08", "%02X" % (CHEST_ITEMS[option])) | 
					
						
							| 
									
										
										
										
											2023-03-29 05:41:11 -07:00
										 |  |  |             rom.texts[0x030] = formatText(f"Deluxe {name} 200 {{RUPEES}}{mw_text}!", ask="Buy  No Way") | 
					
						
							| 
									
										
										
										
											2023-03-21 01:26:03 +09:00
										 |  |  |             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])) | 
					
						
							| 
									
										
										
										
											2023-03-29 05:41:11 -07:00
										 |  |  |             rom.texts[0x02C] = formatText(f"{name} only 980 {{RUPEES}}{mw_text}!", ask="Buy  No Way") | 
					
						
							| 
									
										
										
										
											2023-03-21 01:26:03 +09:00
										 |  |  |              | 
					
						
							|  |  |  |             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)) |