59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from ..assembler import ASM | ||
|  | from ..roomEditor import RoomEditor | ||
|  | 
 | ||
|  | 
 | ||
|  | def updateWitch(rom): | ||
|  |     # Add a heartpiece at the toadstool, the item patches turn this into a 1 time toadstool item | ||
|  |     # Or depending on flags, in something else. | ||
|  |     re = RoomEditor(rom, 0x050) | ||
|  |     re.addEntity(2, 3, 0x35) | ||
|  |     re.store(rom) | ||
|  | 
 | ||
|  |     # Change what happens when you trade the toadstool with the witch | ||
|  |     #  Note that the 2nd byte of this code gets patched with the item to give from the witch. | ||
|  |     rom.patch(0x05, 0x08D4, 0x08F0, ASM("""
 | ||
|  |         ; Get the room flags and mark the witch as done. | ||
|  |         ld  hl, $DAA2 | ||
|  |         ld  a, [hl] | ||
|  |         and $30 | ||
|  |         set 4, [hl] | ||
|  |         set 5, [hl] | ||
|  |         jr  z, item | ||
|  | powder: | ||
|  |         ld  e, $09 ; give powder every time after the first time. | ||
|  |         ld  a, e | ||
|  |         ldh [$F1], a | ||
|  |         ld  a, $11 | ||
|  |         rst 8 | ||
|  |         jp $48F0 | ||
|  | item: | ||
|  |         ld   a, $0E | ||
|  |         rst 8 | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  |     # Patch the toadstool to unload when you haven't delivered something to the witch yet. | ||
|  |     rom.patch(0x03, 0x1D4B, ASM("""
 | ||
|  |         ld   hl, $DB4B | ||
|  |         ld   a, [$DB4C] | ||
|  |         or   [hl] | ||
|  |         jp   nz, $3F8D | ||
|  |     """), ASM(""" | ||
|  |         ld   a, [$DAA2] | ||
|  |         and  $20 | ||
|  |         jp   z, $3F8D | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  |     # Patch what happens when we pickup the toadstool, call our chest code to give a toadstool. | ||
|  |     rom.patch(0x03, 0x1D6F, 0x1D7D, ASM("""
 | ||
|  |         ld   a, $50 | ||
|  |         ldh  [$F1], a | ||
|  |         ld  a, $02 ; give item | ||
|  |         rst 8 | ||
|  | 
 | ||
|  |         ld   hl, $DAA2 | ||
|  |         res  5, [hl] | ||
|  |     """), fill_nop=True)
 | ||
|  | 
 | ||
|  | def witchIsPatched(rom): | ||
|  |     return sum(rom.banks[0x05][0x08D4:0x08F0]) != 0x0DC2 |