60 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from ..assembler import ASM | ||
|  | from ..utils import formatText | ||
|  | from ..locations.constants import CHEST_ITEMS | ||
|  | 
 | ||
|  | 
 | ||
|  | def fixChests(rom): | ||
|  |     # Patch the chest code, so it can give a lvl1 sword. | ||
|  |     # Normally, there is some code related to the owl event when getting the tail key, | ||
|  |     # as we patched out the owl. We use it to jump to our custom code in bank $3E to handle getting the item | ||
|  |     rom.patch(0x03, 0x109C, ASM("""
 | ||
|  |         cp $11 ; if not tail key, skip | ||
|  |         jr nz, end | ||
|  |         push af | ||
|  |         ld   a, [$C501] | ||
|  |         ld   e, a | ||
|  |         ld   hl, $C2F0 | ||
|  |         add  hl, de | ||
|  |         ld   [hl], $38 | ||
|  |         pop af | ||
|  |     end: | ||
|  |         ld   e, a | ||
|  |         cp   $21 ; if is message chest or higher number, next instruction is to skip giving things. | ||
|  |     """), ASM(""" | ||
|  |         ld   a, $06 ; GiveItemMultiworld | ||
|  |         rst  8 | ||
|  | 
 | ||
|  |         and  a   ; clear the carry flag to always skip giving stuff. | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  |     # Instead of the normal logic to on which sprite data to show, we jump to our custom code in bank 3E. | ||
|  |     rom.patch(0x07, 0x3C36, None, ASM("""
 | ||
|  |         ld   a, $01 | ||
|  |         rst  8 | ||
|  |         jp $7C5E | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  |     # Instead of the normal logic of showing the proper dialog, we jump to our custom code in bank 3E. | ||
|  |     rom.patch(0x07, 0x3C9C, None, ASM("""
 | ||
|  |         ld   a, $0A ; showItemMessageMultiworld | ||
|  |         rst  8 | ||
|  |         jp $7CE9 | ||
|  |     """))
 | ||
|  | 
 | ||
|  |     # Sound to play is normally loaded from a table, which is no longer big enough. So always use the same sound. | ||
|  |     rom.patch(0x07, 0x3C81, ASM("""
 | ||
|  |         add  hl, de | ||
|  |         ld   a, [hl] | ||
|  |     """), ASM("ld a, $01"), fill_nop=True)
 | ||
|  | 
 | ||
|  |     # Always spawn seashells even if you have the L2 sword | ||
|  |     rom.patch(0x14, 0x192F, ASM("ld a, $1C"), ASM("ld a, $20")) | ||
|  | 
 | ||
|  |     rom.texts[0x9A] = formatText("You found 10 {BOMB}!") | ||
|  | 
 | ||
|  | 
 | ||
|  | def setMultiChest(rom, option): | ||
|  |     room = 0x2F2 | ||
|  |     addr = room + 0x560 | ||
|  |     rom.banks[0x14][addr] = CHEST_ITEMS[option] |