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
							 |