gb-tarot/ScreenCardBrowse.inc

210 lines
5.2 KiB
PHP
Raw Normal View History

2025-01-16 09:53:24 -05:00
; screen variables already ddefined in screencardread
;DEF vPreviousCardIndex EQU VARIABLES_START
;def vBlocked equ vPreviousCardIndex + 1
2025-01-16 09:53:24 -05:00
ScreenCardBrowse:
dw CardBrowseSetup
dw CardBrowseUpdate
dw CardBrowseDraw
dw CardBrowseTeardown
2025-01-16 09:53:24 -05:00
CardBrowseSetup:
ld a, 1
ldh [vBlocked], a
ld a, LOW(RunDMA) ; zero out the OAM
ld [vAsyncNext], a
ld a, HIGH(RunDMA)
ld [vAsyncNext+1], a
ld a, LOW(.loadUIMap)
ld [vAsyncAfter], a
ld a, HIGH(.loadUIMap)
ld [vAsyncAfter+1], a
2025-01-16 09:53:24 -05:00
ld a, HIGH(ZEROES)
ld de, $ffc0 ; arguments to the first async call.
call DoInAsyncVBlank
ret
.loadUIMap
2025-01-16 09:53:24 -05:00
ld hl, CardBrowse.UITilemap ; origin
ld de, $9800 ; destination
ld b, 18 ; height
2025-01-16 09:53:24 -05:00
ld c, 20 ; width
2025-01-16 09:53:24 -05:00
ld a, LOW(CopyTilesToMapThreadsafe)
ld [vAsyncNext], a
ld a, HIGH(CopyTilesToMapThreadsafe)
ld [vAsyncNext+1], a
2025-02-10 17:45:21 -05:00
ld a, LOW(LoadCardDataAsync)
2025-01-16 09:53:24 -05:00
ld [vAsyncAfter], a
2025-02-10 17:45:21 -05:00
ld a, HIGH(LoadCardDataAsync)
2025-01-16 09:53:24 -05:00
ld [vAsyncAfter+1], a
ret
2025-01-16 09:53:24 -05:00
CardBrowseUpdate:
ld hl, vTime
ldh a, [rDELTAT]
ld b, a
ldh a, [vTime]
add a, b
ldh [vTime], a
ldh a, [vTime+1]
adc a, 0
ldh [vTime+1], a ; increment time. when the 16bit time register is greater
; than 4096 ($10_00) then one second has passed. so that's satisfied when
; vTime+1 is equal to or greater than $10
ldh a, [vTime+1]
cp a, $01
jp c, .doneTimer ; if the timer is less than $0100, skip to end
;otherwise reset the timer
ld a, 0
2025-01-16 09:53:24 -05:00
ldh [vTime], a
ldh [vTime+1], a
ld hl, SquaresTiles
ldh a, [vFrameCountSquares]
inc a
call ArrayClampLooping
ldh [vFrameCountSquares], a
2025-01-16 09:53:24 -05:00
.doneTimer
ld hl, rMYBTNP
bit 4, [hl]
jp z, .doneWithB
ld hl, ScreenMainMenu
call ChangeScene
ret
.doneWithB
2025-01-16 09:53:24 -05:00
ldh a, [vSelectedCardIndex]
ld hl, rMYBTNP
bit 3, [hl]
jp z, :+ ; skip the following code if down is not pressed
2025-01-16 09:53:24 -05:00
inc a
:
2025-01-16 09:53:24 -05:00
bit 2, [hl]
jp z, :+ ; skip the following code if up is not pressed
dec a
:
2025-01-16 09:53:24 -05:00
ldh [vSelectedCardIndex], a
ld hl, Cards
call ArrayClampLooping
2025-01-16 09:53:24 -05:00
ldh [vSelectedCardIndex], a
ldh a, [vSelectedCardIndex]
ld hl, vPreviousCardIndex
cp a, [hl]
ret z ; if the selected card diddn't change, nothing to do
ldh a, [vBlocked]
cp a, 0
ret nz
2025-02-10 17:45:21 -05:00
ld a, LOW(LoadCardDataAsync)
2025-01-16 09:53:24 -05:00
ld [vAsyncAfter], a
2025-02-10 17:45:21 -05:00
ld a, HIGH(LoadCardDataAsync)
2025-01-16 09:53:24 -05:00
ld [vAsyncAfter+1], a
call DoInAsyncVBlank
ret
2025-01-16 09:53:24 -05:00
CardBrowseDraw:
2025-01-23 13:16:55 -05:00
; the card data is loaded asynchronously, initiated in CardReadUpdate
2025-01-16 09:53:24 -05:00
ld hl, SquaresTiles
inc hl
ld b, 0
ldh a, [vFrameCountSquares]
ld c, a
2025-01-16 09:53:24 -05:00
add hl, bc
add hl, bc
ld c, [hl]
inc hl
ld b, [hl]
ld h, b
ld l, c
ld de, $8000+$100*16 + 1*16
ld bc, (SquaresTileset8 - SquaresTileset7) / 8
call CopyRangeUnsafeBy8s
2025-01-23 13:16:55 -05:00
call DrawDeckMinimap
ret
2025-01-23 13:16:55 -05:00
DrawDeckMinimap:
ld hl, Cards
ld c, [hl] ; count of cards
srl c
set 0, c
ld hl, vSelectedCardIndex
ld d, [hl] ; selected card!
ld b, $ff ; start at -1 lol
ld hl, $9800 + 32 + 11
.loop
inc b
ld a, b
cp a, 5
2025-01-23 13:16:55 -05:00
jp nz, .noNewLine
ld [hl], $13
ld hl, $9800 + 32*2 + 11
.noNewLine
ld a, b
cp a, c
jp nc, .doneDrawing
ld a, d
srl a
cp a, b
jp z, .drawSelectedCard
.drawUnselectedCards
ld [hl], $12
inc hl
jp .loop
.drawSelectedCard
bit 0, d
jp nz, .drawSelectedSecond
ld [hl], $14
inc hl
jp .loop
.drawSelectedSecond
ld [hl], $15
inc hl
jp .loop
.doneDrawing
ld [hl], $13
ret
2025-01-16 09:53:24 -05:00
CardBrowseTeardown:
ret
2025-01-16 09:53:24 -05:00
CardBrowse.UITilemap:
db $0e, $0a, $0a, $0a, $0a, $0a, $0a, $0a, $0a, $0f, $09, $02, $02, $02, $02, $02, $02, $02, $08, $01
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $03, $00, $00, $00, $00, $00, $00, $00, $04, $01
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $03, $00, $00, $00, $00, $00, $00, $00, $04, $01
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $06, $05, $05, $05, $05, $05, $05, $05, $07, $01
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
2025-01-23 13:16:55 -05:00
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
2025-01-16 09:53:24 -05:00
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
db $0b, $00, $00, $00, $00, $00, $00, $00, $00, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
db $11, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $10, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
CardBrowse.UITilemapEnd: