Archipelago/worlds/ladx/LADXR/patches/witch.py

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