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
 |