43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
| from ..assembler import ASM
 | |
| 
 | |
| 
 | |
| def fixHeartPiece(rom):
 | |
|     # Patch all locations where the piece of heart is rendered.
 | |
|     rom.patch(0x03, 0x1b52, ASM("ld de, $5A4D\ncall $3BC0"), ASM("ld a, $04\nrst 8"), fill_nop=True)  # state 0
 | |
| 
 | |
|     # Write custom code in the first state handler, this overwrites all state handlers
 | |
|     # Till state 5.
 | |
|     rom.patch(0x03, 0x1A74, 0x1A98, ASM("""
 | |
|         ; Render sprite
 | |
|         ld   a, $05
 | |
|         rst  8
 | |
|     
 | |
|         ; Handle item effect
 | |
|         ld   a, $06 ; giveItemMultiworld
 | |
|         rst  8
 | |
|         
 | |
|         ;Show message
 | |
|         ld   a, $0A ; showMessageMultiworld
 | |
|         rst  8
 | |
|         
 | |
|         ; Switch to state 5
 | |
|         ld   hl, $C290; stateTable
 | |
|         add  hl, bc
 | |
|         ld   [hl], $05
 | |
|         ret
 | |
|     """), fill_nop=True)
 | |
|     # Insert a state 5 handler
 | |
|     rom.patch(0x03, 0x1A98, 0x1B17, ASM("""
 | |
|         ; Render sprite
 | |
|         ld   a, $05
 | |
|         rst  8
 | |
| 
 | |
|         ld   a, [$C19F] ; dialog state
 | |
|         and  a
 | |
|         ret  nz
 | |
| 
 | |
|         call $512A ; mark room as done
 | |
|         call $3F8D ; unload entity
 | |
|         ret
 | |
|     """), fill_nop=True)
 |