56 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from .itemInfo import ItemInfo | ||
|  | from .constants import * | ||
|  | from .droppedKey import DroppedKey | ||
|  | 
 | ||
|  | TradeRequirements = { | ||
|  |     TRADING_ITEM_YOSHI_DOLL: None, | ||
|  |     TRADING_ITEM_RIBBON: TRADING_ITEM_YOSHI_DOLL, | ||
|  |     TRADING_ITEM_DOG_FOOD: TRADING_ITEM_RIBBON, | ||
|  |     TRADING_ITEM_BANANAS: TRADING_ITEM_DOG_FOOD, | ||
|  |     TRADING_ITEM_STICK: TRADING_ITEM_BANANAS, | ||
|  |     TRADING_ITEM_HONEYCOMB: TRADING_ITEM_STICK, | ||
|  |     TRADING_ITEM_PINEAPPLE: TRADING_ITEM_HONEYCOMB, | ||
|  |     TRADING_ITEM_HIBISCUS: TRADING_ITEM_PINEAPPLE, | ||
|  |     TRADING_ITEM_LETTER: TRADING_ITEM_HIBISCUS, | ||
|  |     TRADING_ITEM_BROOM: TRADING_ITEM_LETTER, | ||
|  |     TRADING_ITEM_FISHING_HOOK: TRADING_ITEM_BROOM, | ||
|  |     TRADING_ITEM_NECKLACE: TRADING_ITEM_FISHING_HOOK, | ||
|  |     TRADING_ITEM_SCALE: TRADING_ITEM_NECKLACE, | ||
|  |     TRADING_ITEM_MAGNIFYING_GLASS: TRADING_ITEM_SCALE, | ||
|  | } | ||
|  | class TradeSequenceItem(DroppedKey): | ||
|  |     def __init__(self, room, default_item): | ||
|  |         self.unadjusted_room = room | ||
|  |         if room == 0x2B2: | ||
|  |             # Offset room for trade items to avoid collisions  | ||
|  |             roomLo = room & 0xFF | ||
|  |             roomHi = room ^ roomLo | ||
|  |             roomLo = (roomLo + 2) & 0xFF | ||
|  |             room = roomHi | roomLo | ||
|  |         super().__init__(room) | ||
|  |         self.default_item = default_item | ||
|  | 
 | ||
|  |     def configure(self, options): | ||
|  |         if not options.tradequest: | ||
|  |             self.OPTIONS = [self.default_item] | ||
|  |         super().configure(options) | ||
|  | 
 | ||
|  |     #def patch(self, rom, option, *, multiworld=None): | ||
|  |     #    rom.banks[0x3E][self.room + 0x3B16] = CHEST_ITEMS[option] | ||
|  | 
 | ||
|  |     def read(self, rom): | ||
|  |         assert(False) | ||
|  |         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: | ||
|  |                 return k | ||
|  |         raise ValueError("Could not find owl statue contents in ROM (0x%02x)" % (value)) | ||
|  | 
 | ||
|  |     def __repr__(self): | ||
|  |         return "%s:%03x" % (self.__class__.__name__, self.room) | ||
|  | 
 | ||
|  |     @property | ||
|  |     def nameId(self): | ||
|  |         return "0x%03X-Trade" % self.unadjusted_room |