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

160 lines
4.5 KiB
Python

from ..assembler import ASM
def upgradeMarin(rom):
# Show marin outside, even without a sword.
rom.patch(0x05, 0x0E78, ASM("ld a, [$DB4E]"), ASM("ld a, $01"), fill_nop=True)
# Make marin ignore the fact that you did not save the tarin yet, and allowing getting her song
rom.patch(0x05, 0x0E87, ASM("ld a, [$D808]"), ASM("ld a, $10"), fill_nop=True)
rom.patch(0x05, 0x0F73, ASM("ld a, [$D808]"), ASM("ld a, $10"), fill_nop=True)
rom.patch(0x05, 0x0FB0, ASM("ld a, [$DB48]"), ASM("ld a, $01"), fill_nop=True)
# Show marin in the animal village
rom.patch(0x03, 0x0A86, ASM("ld a, [$DB74]"), ASM("ld a, $01"), fill_nop=True)
rom.patch(0x05, 0x3F2E, ASM("ld a, [$DB74]"), ASM("ld a, $01"), fill_nop=True) # animal d0
rom.patch(0x15, 0x3F96, ASM("ld a, [$DB74]"), ASM("ld a, $01"), fill_nop=True) # animal d1
rom.patch(0x18, 0x11B0, ASM("ld a, [$DB74]"), ASM("ld a, $01"), fill_nop=True) # animal d2
# Instead of checking if we have the ballad, check if we have a specific room flag set
rom.patch(0x05, 0x0F89, ASM("""
ld a, [$DB49]
and $04
"""), ASM("""
ld a, [$D892]
and $10
"""), fill_nop=True)
rom.patch(0x05, 0x0FDF, ASM("""
ld a, [$DB49]
and $04
"""), ASM("""
ld a, [$D892]
and $10
"""), fill_nop=True)
rom.patch(0x05, 0x1042, ASM("""
ld a, [$DB49]
and $04
"""), ASM("""
ld a, [$D892]
and $10
"""), fill_nop=True)
# Patch that we call our specific handler instead of giving the song
rom.patch(0x05, 0x1170, ASM("""
ld hl, $DB49
set 2, [hl]
xor a
ld [$DB4A], a
"""), ASM("""
; Mark Marin as done.
ld a, [$D892]
or $10
ld [$D892], a
"""), fill_nop=True)
# Show the right item instead of the ocerina
rom.patch(0x05, 0x11B3, ASM("""
ld de, $515F
xor a
ldh [$F1], a
jp $3C77
"""), ASM("""
ld a, $0C
rst 8
ret
"""), fill_nop=True)
# Patch the message that tells we got the song, to give the item and show the right message
rom.patch(0x05, 0x119C, ASM("""
ld a, $13
call $2385
"""), ASM("""
ld a, $0E
rst 8
"""), fill_nop=True)
def upgradeManbo(rom):
# Instead of checking if we have the song, check if we have a specific room flag set
rom.patch(0x18, 0x0536, ASM("""
ld a, [$DB49]
and $02
"""), ASM("""
ld a, [$DAFD]
and $20
"""), fill_nop=True)
# Show the right item instead of the ocerina
rom.patch(0x18, 0x0786, ASM("""
ld de, $474D
xor a
ldh [$F1], a
jp $3C77
"""), ASM("""
ld a, $0C
rst 8
ret
"""), fill_nop=True)
# Patch to replace song giving to give the right item
rom.patch(0x18, 0x0757, ASM("""
ld a, $01
ld [$DB4A], a
ld hl, $DB49
set 1, [hl]
"""), ASM("""
; Mark Manbo as done.
ld hl, $DAFD
set 5, [hl]
; Show item message and give item
ld a, $0E
rst 8
"""), fill_nop=True)
# Remove the normal "got song message")
rom.patch(0x18, 0x076F, 0x0774, "", fill_nop=True)
def upgradeMamu(rom):
# Always allow the sign maze instead of only allowing the sign maze if you do not have song3
rom.patch(0x00, 0x2057, ASM("ld a, [$DB49]"), ASM("ld a, $00"), fill_nop=True)
# Patch the condition at which Mamu gives you the option to listen to him
rom.patch(0x18, 0x0031, ASM("""
ld a, [$DB49]
and $01
"""), ASM("""
ld a, [$DAFB] ; load room flag of the Mamu room
and $10
"""), fill_nop=True)
# Show the right item instead of the ocerina
rom.patch(0x18, 0x0299, ASM("""
ld de, $474D
xor a
ldh [$F1], a
call $3C77
"""), ASM("""
ld a, $0C
rst 8
"""), fill_nop=True)
# Patch given an item
rom.patch(0x18, 0x0270, ASM("""
ld a, $02
ld [$DB4A], a
ld hl, $DB49
set 0, [hl]
"""), ASM("""
; Set the room complete flag.
ld hl, $DAFB
set 4, [hl]
"""), fill_nop=True)
# Patch to show the right message for the item
rom.patch(0x18, 0x0282, ASM("""
ld a, $DF
call $4087
"""), ASM("""
; Give item and message for room.
ld a, $0E
rst 8
"""), fill_nop=True)