mirror of
https://github.com/pret/poketcg.git
synced 2026-03-21 17:54:26 -05:00
Rename "Bank 20" section to "Load Gfx"
This commit is contained in:
parent
bdb0a2aef6
commit
9c8a79d13f
|
|
@ -1,3 +1,313 @@
|
|||
; loads the BG map corresponding to wCurTilemap to SRAM
|
||||
; bc = starting coordinates
|
||||
LoadTilemap_ToSRAM:
|
||||
ld a, TRUE
|
||||
ld [wWriteBGMapToSRAM], a
|
||||
jr LoadTilemap
|
||||
|
||||
; loads the BG map corresponding to wCurTilemap to VRAM
|
||||
; bc = starting coordinates
|
||||
LoadTilemap_ToVRAM:
|
||||
xor a ; FALSE
|
||||
ld [wWriteBGMapToSRAM], a
|
||||
; fallthrough
|
||||
|
||||
; loads the BG map corresponding to wCurTilemap
|
||||
; either loads them in VRAM or SRAM,
|
||||
; depending on wWriteBGMapToSRAM
|
||||
; bc = starting coordinates
|
||||
LoadTilemap:
|
||||
push hl
|
||||
push bc
|
||||
push de
|
||||
call BCCoordToBGMap0Address
|
||||
ld hl, wVRAMPointer
|
||||
ld [hl], e
|
||||
inc hl
|
||||
ld [hl], d
|
||||
|
||||
; get pointer and bank for BG Map
|
||||
call Func_803b9
|
||||
ld a, [wTempPointerBank]
|
||||
ld [wBGMapBank], a
|
||||
|
||||
; store header data
|
||||
ld de, wDecompressionBuffer
|
||||
ld bc, $6 ; header + 1st instruction
|
||||
call CopyBankedDataToDE
|
||||
ld l, e
|
||||
ld h, d
|
||||
ld a, [hli]
|
||||
ld [wBGMapWidth], a
|
||||
ld a, [hli]
|
||||
ld [wBGMapHeight], a
|
||||
ld a, [hli]
|
||||
ld [wBGMapPermissionDataPtr], a
|
||||
ld a, [hli]
|
||||
ld [wBGMapPermissionDataPtr + 1], a
|
||||
ld a, [hli]
|
||||
ld [wBGMapCGBMode], a
|
||||
call .InitAndDecompressBGMap
|
||||
pop de
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; prepares the pointers for decompressing BG Map
|
||||
; and calls InitDataDecompression
|
||||
; then decompresses the data
|
||||
.InitAndDecompressBGMap
|
||||
push hl
|
||||
push bc
|
||||
push de
|
||||
ld a, [wTempPointer]
|
||||
add $5 ; header
|
||||
ld e, a
|
||||
ld a, [wTempPointer + 1]
|
||||
adc 0
|
||||
ld d, a
|
||||
ld b, HIGH(wDecompressionSecondaryBuffer)
|
||||
call InitDataDecompression
|
||||
ld a, [wVRAMPointer]
|
||||
ld e, a
|
||||
ld a, [wVRAMPointer + 1]
|
||||
ld d, a
|
||||
call .Decompress
|
||||
pop de
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; wTempBank:wTempPointer = source of compressed data
|
||||
; wVRAMPointer = destination of decompressed data
|
||||
.Decompress
|
||||
; if wBGMapCGBMode is true, then use double wBGMapWidth
|
||||
; since one "width" length goes to VRAM0
|
||||
; and the other "width" length goes to VRAM1
|
||||
push hl
|
||||
ld hl, wDecompressionRowWidth
|
||||
ld a, [wBGMapWidth]
|
||||
ld [hl], a
|
||||
ld a, [wBGMapCGBMode]
|
||||
or a
|
||||
jr z, .skip_doubling_width
|
||||
sla [hl]
|
||||
.skip_doubling_width
|
||||
|
||||
; clear wDecompressionBuffer
|
||||
ld c, $40
|
||||
ld hl, wDecompressionBuffer
|
||||
xor a
|
||||
.loop_clear
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .loop_clear
|
||||
|
||||
; loop each row, up to the number of tiles in height
|
||||
ld a, [wBGMapHeight]
|
||||
ld c, a
|
||||
.loop
|
||||
push bc
|
||||
push de
|
||||
ld b, $00
|
||||
ld a, [wDecompressionRowWidth]
|
||||
ld c, a
|
||||
ld de, wDecompressionBuffer
|
||||
call DecompressDataFromBank
|
||||
|
||||
; copy to VRAM0
|
||||
ld a, [wBGMapWidth]
|
||||
ld b, a
|
||||
pop de
|
||||
push de
|
||||
ld hl, wDecompressionBuffer
|
||||
call CopyBGDataToVRAMOrSRAM
|
||||
ld a, [wConsole]
|
||||
cp CONSOLE_CGB
|
||||
jr nz, .next_row
|
||||
|
||||
; cgb only
|
||||
; copy the second "half" to VRAM1
|
||||
call BankswitchVRAM1
|
||||
ld a, [wBGMapWidth]
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, wDecompressionBuffer
|
||||
add hl, bc
|
||||
pop de
|
||||
push de
|
||||
ld a, [wBGMapWidth]
|
||||
ld b, a
|
||||
call Func_80148 ; adds some wd291 offset to tiles
|
||||
call CopyBGDataToVRAMOrSRAM
|
||||
call BankswitchVRAM0
|
||||
|
||||
.next_row
|
||||
pop de
|
||||
ld hl, TILEMAP_WIDTH
|
||||
add hl, de
|
||||
ld e, l
|
||||
ld d, h
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .loop
|
||||
|
||||
pop hl
|
||||
ret
|
||||
|
||||
Func_80148:
|
||||
ld a, [wd291]
|
||||
or a
|
||||
ret z
|
||||
ld a, [wBGMapCGBMode]
|
||||
or a
|
||||
jr z, .asm_80162
|
||||
|
||||
; add wd291 to b bytes in hl
|
||||
push hl
|
||||
push bc
|
||||
.loop_1
|
||||
push bc
|
||||
ld a, [wd291]
|
||||
add [hl]
|
||||
ld [hli], a
|
||||
pop bc
|
||||
dec b
|
||||
jr nz, .loop_1
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; store wd291 to b bytes in hl
|
||||
.asm_80162
|
||||
push hl
|
||||
push bc
|
||||
ld a, [wd291]
|
||||
.loop_2
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .loop_2
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; copies BG Map data pointed by hl
|
||||
; to either VRAM or SRAM, depending on wWriteBGMapToSRAM
|
||||
; de is the target address in VRAM,
|
||||
; if SRAM is the target address to copy,
|
||||
; copies data to sGfxBuffer0 or sGfxBuffer1
|
||||
; for VRAM0 or VRAM1 respectively
|
||||
CopyBGDataToVRAMOrSRAM:
|
||||
ld a, [wWriteBGMapToSRAM]
|
||||
or a
|
||||
jp z, SafeCopyDataHLtoDE
|
||||
|
||||
; copies b bytes from hl to SRAM1
|
||||
push hl
|
||||
push bc
|
||||
push de
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM1")
|
||||
call BankswitchSRAM
|
||||
push hl
|
||||
ld hl, sGfxBuffer0 - v0BGMap0
|
||||
ldh a, [hBankVRAM]
|
||||
or a
|
||||
jr z, .got_pointer
|
||||
ld hl, sGfxBuffer1 - v1BGMap0
|
||||
.got_pointer
|
||||
add hl, de
|
||||
ld e, l
|
||||
ld d, h
|
||||
pop hl
|
||||
.loop
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
dec b
|
||||
jr nz, .loop
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
pop de
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; safely copies $20 bytes at a time
|
||||
; sGfxBuffer0 -> v0BGMap0
|
||||
; sGfxBuffer1 -> v0BGMap1 (if in CGB)
|
||||
SafelyCopyBGMapFromSRAMToVRAM:
|
||||
push hl
|
||||
push bc
|
||||
push de
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM1")
|
||||
call BankswitchSRAM
|
||||
ld hl, sGfxBuffer0
|
||||
ld de, v0BGMap0
|
||||
ld c, $20
|
||||
.loop
|
||||
push bc
|
||||
push hl
|
||||
push de
|
||||
ld b, $20
|
||||
call SafeCopyDataHLtoDE
|
||||
ld a, [wConsole]
|
||||
cp CONSOLE_CGB
|
||||
jr nz, .skip_vram1
|
||||
pop de
|
||||
pop hl
|
||||
push hl
|
||||
push de
|
||||
ld bc, sGfxBuffer1 - sGfxBuffer0 ; $400
|
||||
add hl, bc
|
||||
call BankswitchVRAM1
|
||||
ld b, $20
|
||||
call SafeCopyDataHLtoDE
|
||||
call BankswitchVRAM0
|
||||
.skip_vram1
|
||||
|
||||
pop hl
|
||||
ld de, $20
|
||||
add hl, de
|
||||
ld e, l
|
||||
ld d, h
|
||||
pop hl
|
||||
ld bc, $20
|
||||
add hl, bc
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .loop
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
pop de
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; clears sGfxBuffer0 and sGfxBuffer1
|
||||
ClearSRAMBGMaps:
|
||||
push hl
|
||||
push bc
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK(sGfxBuffer0) ; SRAM 1
|
||||
call BankswitchSRAM
|
||||
ld hl, sGfxBuffer0
|
||||
ld bc, $800 ; sGfxBuffer0 + sGfxBuffer1
|
||||
xor a
|
||||
call FillMemoryWithA
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; l - GFXTABLE_* constant (banks 0,1,2,3,4)
|
||||
; a - map index (inside of the given bank)
|
||||
GetMapDataPointer:
|
||||
|
|
|
|||
|
|
@ -1,309 +0,0 @@
|
|||
; loads the BG map corresponding to wCurTilemap to SRAM
|
||||
; bc = starting coordinates
|
||||
LoadTilemap_ToSRAM:
|
||||
ld a, TRUE
|
||||
ld [wWriteBGMapToSRAM], a
|
||||
jr LoadTilemap
|
||||
|
||||
; loads the BG map corresponding to wCurTilemap to VRAM
|
||||
; bc = starting coordinates
|
||||
LoadTilemap_ToVRAM:
|
||||
xor a ; FALSE
|
||||
ld [wWriteBGMapToSRAM], a
|
||||
; fallthrough
|
||||
|
||||
; loads the BG map corresponding to wCurTilemap
|
||||
; either loads them in VRAM or SRAM,
|
||||
; depending on wWriteBGMapToSRAM
|
||||
; bc = starting coordinates
|
||||
LoadTilemap:
|
||||
push hl
|
||||
push bc
|
||||
push de
|
||||
call BCCoordToBGMap0Address
|
||||
ld hl, wVRAMPointer
|
||||
ld [hl], e
|
||||
inc hl
|
||||
ld [hl], d
|
||||
|
||||
; get pointer and bank for BG Map
|
||||
call Func_803b9
|
||||
ld a, [wTempPointerBank]
|
||||
ld [wBGMapBank], a
|
||||
|
||||
; store header data
|
||||
ld de, wDecompressionBuffer
|
||||
ld bc, $6 ; header + 1st instruction
|
||||
call CopyBankedDataToDE
|
||||
ld l, e
|
||||
ld h, d
|
||||
ld a, [hli]
|
||||
ld [wBGMapWidth], a
|
||||
ld a, [hli]
|
||||
ld [wBGMapHeight], a
|
||||
ld a, [hli]
|
||||
ld [wBGMapPermissionDataPtr], a
|
||||
ld a, [hli]
|
||||
ld [wBGMapPermissionDataPtr + 1], a
|
||||
ld a, [hli]
|
||||
ld [wBGMapCGBMode], a
|
||||
call .InitAndDecompressBGMap
|
||||
pop de
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; prepares the pointers for decompressing BG Map
|
||||
; and calls InitDataDecompression
|
||||
; then decompresses the data
|
||||
.InitAndDecompressBGMap
|
||||
push hl
|
||||
push bc
|
||||
push de
|
||||
ld a, [wTempPointer]
|
||||
add $5 ; header
|
||||
ld e, a
|
||||
ld a, [wTempPointer + 1]
|
||||
adc 0
|
||||
ld d, a
|
||||
ld b, HIGH(wDecompressionSecondaryBuffer)
|
||||
call InitDataDecompression
|
||||
ld a, [wVRAMPointer]
|
||||
ld e, a
|
||||
ld a, [wVRAMPointer + 1]
|
||||
ld d, a
|
||||
call .Decompress
|
||||
pop de
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; wTempBank:wTempPointer = source of compressed data
|
||||
; wVRAMPointer = destination of decompressed data
|
||||
.Decompress
|
||||
; if wBGMapCGBMode is true, then use double wBGMapWidth
|
||||
; since one "width" length goes to VRAM0
|
||||
; and the other "width" length goes to VRAM1
|
||||
push hl
|
||||
ld hl, wDecompressionRowWidth
|
||||
ld a, [wBGMapWidth]
|
||||
ld [hl], a
|
||||
ld a, [wBGMapCGBMode]
|
||||
or a
|
||||
jr z, .skip_doubling_width
|
||||
sla [hl]
|
||||
.skip_doubling_width
|
||||
|
||||
; clear wDecompressionBuffer
|
||||
ld c, $40
|
||||
ld hl, wDecompressionBuffer
|
||||
xor a
|
||||
.loop_clear
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .loop_clear
|
||||
|
||||
; loop each row, up to the number of tiles in height
|
||||
ld a, [wBGMapHeight]
|
||||
ld c, a
|
||||
.loop
|
||||
push bc
|
||||
push de
|
||||
ld b, $00
|
||||
ld a, [wDecompressionRowWidth]
|
||||
ld c, a
|
||||
ld de, wDecompressionBuffer
|
||||
call DecompressDataFromBank
|
||||
|
||||
; copy to VRAM0
|
||||
ld a, [wBGMapWidth]
|
||||
ld b, a
|
||||
pop de
|
||||
push de
|
||||
ld hl, wDecompressionBuffer
|
||||
call CopyBGDataToVRAMOrSRAM
|
||||
ld a, [wConsole]
|
||||
cp CONSOLE_CGB
|
||||
jr nz, .next_row
|
||||
|
||||
; cgb only
|
||||
; copy the second "half" to VRAM1
|
||||
call BankswitchVRAM1
|
||||
ld a, [wBGMapWidth]
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, wDecompressionBuffer
|
||||
add hl, bc
|
||||
pop de
|
||||
push de
|
||||
ld a, [wBGMapWidth]
|
||||
ld b, a
|
||||
call Func_80148 ; adds some wd291 offset to tiles
|
||||
call CopyBGDataToVRAMOrSRAM
|
||||
call BankswitchVRAM0
|
||||
|
||||
.next_row
|
||||
pop de
|
||||
ld hl, TILEMAP_WIDTH
|
||||
add hl, de
|
||||
ld e, l
|
||||
ld d, h
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .loop
|
||||
|
||||
pop hl
|
||||
ret
|
||||
|
||||
Func_80148:
|
||||
ld a, [wd291]
|
||||
or a
|
||||
ret z
|
||||
ld a, [wBGMapCGBMode]
|
||||
or a
|
||||
jr z, .asm_80162
|
||||
|
||||
; add wd291 to b bytes in hl
|
||||
push hl
|
||||
push bc
|
||||
.loop_1
|
||||
push bc
|
||||
ld a, [wd291]
|
||||
add [hl]
|
||||
ld [hli], a
|
||||
pop bc
|
||||
dec b
|
||||
jr nz, .loop_1
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; store wd291 to b bytes in hl
|
||||
.asm_80162
|
||||
push hl
|
||||
push bc
|
||||
ld a, [wd291]
|
||||
.loop_2
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .loop_2
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; copies BG Map data pointed by hl
|
||||
; to either VRAM or SRAM, depending on wWriteBGMapToSRAM
|
||||
; de is the target address in VRAM,
|
||||
; if SRAM is the target address to copy,
|
||||
; copies data to sGfxBuffer0 or sGfxBuffer1
|
||||
; for VRAM0 or VRAM1 respectively
|
||||
CopyBGDataToVRAMOrSRAM:
|
||||
ld a, [wWriteBGMapToSRAM]
|
||||
or a
|
||||
jp z, SafeCopyDataHLtoDE
|
||||
|
||||
; copies b bytes from hl to SRAM1
|
||||
push hl
|
||||
push bc
|
||||
push de
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM1")
|
||||
call BankswitchSRAM
|
||||
push hl
|
||||
ld hl, sGfxBuffer0 - v0BGMap0
|
||||
ldh a, [hBankVRAM]
|
||||
or a
|
||||
jr z, .got_pointer
|
||||
ld hl, sGfxBuffer1 - v1BGMap0
|
||||
.got_pointer
|
||||
add hl, de
|
||||
ld e, l
|
||||
ld d, h
|
||||
pop hl
|
||||
.loop
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
dec b
|
||||
jr nz, .loop
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
pop de
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; safely copies $20 bytes at a time
|
||||
; sGfxBuffer0 -> v0BGMap0
|
||||
; sGfxBuffer1 -> v0BGMap1 (if in CGB)
|
||||
SafelyCopyBGMapFromSRAMToVRAM:
|
||||
push hl
|
||||
push bc
|
||||
push de
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM1")
|
||||
call BankswitchSRAM
|
||||
ld hl, sGfxBuffer0
|
||||
ld de, v0BGMap0
|
||||
ld c, $20
|
||||
.loop
|
||||
push bc
|
||||
push hl
|
||||
push de
|
||||
ld b, $20
|
||||
call SafeCopyDataHLtoDE
|
||||
ld a, [wConsole]
|
||||
cp CONSOLE_CGB
|
||||
jr nz, .skip_vram1
|
||||
pop de
|
||||
pop hl
|
||||
push hl
|
||||
push de
|
||||
ld bc, sGfxBuffer1 - sGfxBuffer0 ; $400
|
||||
add hl, bc
|
||||
call BankswitchVRAM1
|
||||
ld b, $20
|
||||
call SafeCopyDataHLtoDE
|
||||
call BankswitchVRAM0
|
||||
.skip_vram1
|
||||
|
||||
pop hl
|
||||
ld de, $20
|
||||
add hl, de
|
||||
ld e, l
|
||||
ld d, h
|
||||
pop hl
|
||||
ld bc, $20
|
||||
add hl, bc
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .loop
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
pop de
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; clears sGfxBuffer0 and sGfxBuffer1
|
||||
ClearSRAMBGMaps:
|
||||
push hl
|
||||
push bc
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK(sGfxBuffer0) ; SRAM 1
|
||||
call BankswitchSRAM
|
||||
ld hl, sGfxBuffer0
|
||||
ld bc, $800 ; sGfxBuffer0 + sGfxBuffer1
|
||||
xor a
|
||||
call FillMemoryWithA
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
|
@ -114,7 +114,7 @@ ROMX $1d
|
|||
ROMX $1e
|
||||
"Gfx 2"
|
||||
ROMX $20
|
||||
"Bank 20"
|
||||
"Load Gfx"
|
||||
"Gfx"
|
||||
ROMX $21
|
||||
"Gfx 3"
|
||||
|
|
|
|||
|
|
@ -171,9 +171,8 @@ INCLUDE "data/cards.asm"
|
|||
SECTION "SGB", ROMX
|
||||
INCLUDE "engine/sgb.asm"
|
||||
|
||||
SECTION "Bank 20", ROMX
|
||||
SECTION "Load Gfx", ROMX
|
||||
INCLUDE "engine/overworld/load_overworld.asm"
|
||||
INCLUDE "engine/gfx/load_tilemap.asm"
|
||||
INCLUDE "engine/gfx/load_gfx.asm"
|
||||
INCLUDE "engine/overworld/animation.asm"
|
||||
INCLUDE "engine/overworld/map_events.asm"
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user