kep-hack/home/copy2.asm
emaskyesmogon 1893b4c7cf expanded Pokemon size
Rhyperior files are dummies and will need to be properly edited with sprites, Rhydon evo data, etc, but it (and the other files included) show that the trainer and pokemon sprite indexes have been separated, which allows us to add the other KEP mons
2022-08-31 20:47:02 -06:00

214 lines
3.3 KiB
NASM

FarCopyData3::
; Copy bc bytes from a:de to hl.
ldh [hROMBankTemp], a
ldh a, [hLoadedROMBank]
push af
ldh a, [hROMBankTemp]
ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
push hl
push de
push de
ld d, h
ld e, l
pop hl
call CopyData
pop de
pop hl
pop af
ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
FarCopyDataDouble::
; Expand bc bytes of 1bpp image data
; from a:hl to 2bpp data at de.
ldh [hROMBankTemp], a
ldh a, [hLoadedROMBank]
push af
ldh a, [hROMBankTemp]
ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
.loop
ld a, [hli]
ld [de], a
inc de
ld [de], a
inc de
dec bc
ld a, c
or b
jr nz, .loop
pop af
ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
CopyVideoData::
; Wait for the next VBlank, then copy c 2bpp
; tiles from b:de to hl, 8 tiles at a time.
; This takes c/8 frames.
ldh a, [hAutoBGTransferEnabled]
push af
xor a ; disable auto-transfer while copying
ldh [hAutoBGTransferEnabled], a
ldh a, [hLoadedROMBank]
ldh [hROMBankTemp], a
ld a, b
ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld a, e
ldh [hVBlankCopySource], a
ld a, d
ldh [hVBlankCopySource + 1], a
ld a, l
ldh [hVBlankCopyDest], a
ld a, h
ldh [hVBlankCopyDest + 1], a
.loop
ld a, c
cp 8
jr nc, .keepgoing
.done
ldh [hVBlankCopySize], a
call DelayFrame
ldh a, [hROMBankTemp]
ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
pop af
ldh [hAutoBGTransferEnabled], a
ret
.keepgoing
ld a, 8
ldh [hVBlankCopySize], a
call DelayFrame
ld a, c
sub 8
ld c, a
jr .loop
CopyVideoDataDouble::
; Wait for the next VBlank, then copy c 1bpp
; tiles from b:de to hl, 8 tiles at a time.
; This takes c/8 frames.
ldh a, [hAutoBGTransferEnabled]
push af
xor a ; disable auto-transfer while copying
ldh [hAutoBGTransferEnabled], a
ldh a, [hLoadedROMBank]
ldh [hROMBankTemp], a
ld a, b
ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld a, e
ldh [hVBlankCopyDoubleSource], a
ld a, d
ldh [hVBlankCopyDoubleSource + 1], a
ld a, l
ldh [hVBlankCopyDoubleDest], a
ld a, h
ldh [hVBlankCopyDoubleDest + 1], a
.loop
ld a, c
cp 8
jr nc, .keepgoing
.done
ldh [hVBlankCopyDoubleSize], a
call DelayFrame
ldh a, [hROMBankTemp]
ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
pop af
ldh [hAutoBGTransferEnabled], a
ret
.keepgoing
ld a, 8
ldh [hVBlankCopyDoubleSize], a
call DelayFrame
ld a, c
sub 8
ld c, a
jr .loop
ClearScreenArea::
; Clear tilemap area cxb at hl.
ld a, " " ; blank tile
ld de, 20 ; screen width
.y
push hl
push bc
.x
ld [hli], a
dec c
jr nz, .x
pop bc
pop hl
add hl, de
dec b
jr nz, .y
ret
CopyScreenTileBufferToVRAM::
; Copy wTileMap to the BG Map starting at b * $100.
; This is done in thirds of 6 rows, so it takes 3 frames.
ld c, 6
ld hl, $600 * 0
decoord 0, 6 * 0
call .setup
call DelayFrame
ld hl, $600 * 1
decoord 0, 6 * 1
call .setup
call DelayFrame
ld hl, $600 * 2
decoord 0, 6 * 2
call .setup
jp DelayFrame
.setup
ld a, d
ldh [hVBlankCopyBGSource+1], a
call GetRowColAddressBgMap
ld a, l
ldh [hVBlankCopyBGDest], a
ld a, h
ldh [hVBlankCopyBGDest+1], a
ld a, c
ldh [hVBlankCopyBGNumRows], a
ld a, e
ldh [hVBlankCopyBGSource], a
ret
ClearScreen::
; Clear wTileMap, then wait
; for the bg map to update.
ld bc, 20 * 18
inc b
hlcoord 0, 0
ld a, " "
.loop
ld [hli], a
dec c
jr nz, .loop
dec b
jr nz, .loop
jp Delay3