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
|