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

140 lines
2.1 KiB
Python

from ..assembler import ASM
import os
import pkgutil
def updateEndScreen(rom):
# Call our custom data loader in bank 3F
rom.patch(0x00, 0x391D, ASM("""
ld a, $20
ld [$2100], a
jp $7de6
"""), ASM("""
ld a, $3F
ld [$2100], a
jp $4200
"""))
rom.patch(0x17, 0x2FCE, "B170", "D070") # Ignore the final tile data load
rom.patch(0x3F, 0x0200, None, ASM("""
; Disable LCD
xor a
ldh [$40], a
ld hl, $8000
ld de, $5000
copyLoop:
ld a, [de]
inc de
ldi [hl], a
bit 4, h
jr z, copyLoop
ld a, $01
ldh [$4F], a
ld hl, $8000
ld de, $6000
copyLoop2:
ld a, [de]
inc de
ldi [hl], a
bit 4, h
jr z, copyLoop2
ld hl, $9800
ld de, $0190
clearLoop1:
xor a
ldi [hl], a
dec de
ld a, d
or e
jr nz, clearLoop1
ld de, $0190
clearLoop2:
ld a, $08
ldi [hl], a
dec de
ld a, d
or e
jr nz, clearLoop2
xor a
ldh [$4F], a
ld hl, $9800
ld de, $000C
xor a
loadLoop1:
ldi [hl], a
ld b, a
ld a, l
and $1F
cp $14
jr c, .noLineSkip
add hl, de
.noLineSkip:
ld a, b
inc a
jr nz, loadLoop1
loadLoop2:
ldi [hl], a
ld b, a
ld a, l
and $1F
cp $14
jr c, .noLineSkip
add hl, de
.noLineSkip:
ld a, b
inc a
jr nz, loadLoop2
; Load palette
ld hl, $DC10
ld a, $00
ldi [hl], a
ld a, $00
ldi [hl], a
ld a, $ad
ldi [hl], a
ld a, $35
ldi [hl], a
ld a, $94
ldi [hl], a
ld a, $52
ldi [hl], a
ld a, $FF
ldi [hl], a
ld a, $7F
ldi [hl], a
ld a, $00
ld [$DDD3], a
ld a, $04
ld [$DDD4], a
ld a, $81
ld [$DDD1], a
; Enable LCD
ld a, $91
ldh [$40], a
ld [$d6fd], a
xor a
ldh [$96], a
ldh [$97], a
ret
"""))
addr = 0x1000
data = pkgutil.get_data(__name__, "nyan.bin")
rom.banks[0x3F][addr : addr + len(data)] = data