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
							 |