shuffle screen upgrade and interrupt driven update loop

This commit is contained in:
Shoofle 2025-03-30 10:51:42 -04:00
parent 7b354ea651
commit a68812698b
7 changed files with 352 additions and 150 deletions

View File

@ -554,19 +554,19 @@ db $36, $00, $00, $00, $00, $00
db $ff,$06,$ff,$03,$ff,$03,$ff,$03,$ff,$03,$ff,$07,$ff,$0f,$ff,$3f
db $ff,$3f,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$fe,$fe
db $ff,$ff,$fe,$fe,$fd,$fd,$ea,$ea,$d4,$d4,$88,$88,$50,$50,$a0,$a0
db $ff,$ff,$fe,$fe,$fd,$fd,$ea,$ea,$d4,$d4,$a0,$a0,$50,$50,$a0,$a0
db $e0,$e0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $07,$07,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $ff,$ff,$7f,$7f,$1f,$1f,$07,$07,$03,$03,$00,$00,$00,$00,$00,$00
db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$7f,$7f,$3f,$3f
db $fe,$fe,$fd,$fd,$fa,$fa,$f5,$f5,$ea,$ea,$d5,$d5,$ea,$ea,$d5,$d5
db $fe,$fe,$fd,$fd,$fa,$fa,$fd,$fd,$fa,$fa,$d5,$d5,$fa,$fa,$f5,$f5
db $a0,$a0,$00,$00,$80,$80,$00,$00,$80,$80,$00,$00,$00,$00,$00,$00
db $1f,$1f,$1f,$1f,$0f,$0f,$07,$07,$07,$07,$03,$03,$03,$03,$01,$01
db $dc,$dc,$aa,$aa,$d4,$d4,$aa,$aa,$d4,$d4,$aa,$aa,$54,$54,$aa,$aa
db $fc,$fc,$aa,$aa,$f4,$f4,$aa,$aa,$f4,$f4,$ea,$ea,$74,$74,$aa,$aa
db $01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $dc,$dc,$aa,$aa,$54,$54,$aa,$aa,$d4,$d4,$aa,$aa,$d4,$d4,$aa,$aa
db $fc,$fc,$aa,$aa,$74,$74,$aa,$aa,$f4,$f4,$ea,$ea,$f4,$f4,$aa,$aa
db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01
db $ee,$ee,$d5,$d5,$ea,$ea,$f5,$f5,$ea,$ea,$f5,$f5,$fa,$fa,$fd,$fd
db $ee,$ee,$f5,$f5,$fa,$fa,$f5,$f5,$fa,$fa,$fd,$fd,$fa,$fa,$fd,$fd
db $00,$00,$00,$00,$00,$00,$00,$00,$80,$80,$00,$00,$80,$80,$40,$40
db $01,$01,$03,$03,$03,$03,$07,$07,$07,$07,$0f,$0f,$1f,$1f,$1f,$1f
db $ff,$ff,$fe,$fe,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff

Binary file not shown.

View File

@ -16,19 +16,19 @@ KeyArtTiles:
db $ff,$06,$ff,$03,$ff,$03,$ff,$03,$ff,$03,$ff,$07,$ff,$0f,$ff,$3f
db $ff,$3f,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$fe,$fe
db $ff,$ff,$fe,$fe,$fd,$fd,$ea,$ea,$d4,$d4,$88,$88,$50,$50,$a0,$a0
db $ff,$ff,$fe,$fe,$fd,$fd,$ea,$ea,$d4,$d4,$a0,$a0,$50,$50,$a0,$a0
db $e0,$e0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $07,$07,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $ff,$ff,$7f,$7f,$1f,$1f,$07,$07,$03,$03,$00,$00,$00,$00,$00,$00
db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$7f,$7f,$3f,$3f
db $fe,$fe,$fd,$fd,$fa,$fa,$f5,$f5,$ea,$ea,$d5,$d5,$ea,$ea,$d5,$d5
db $fe,$fe,$fd,$fd,$fa,$fa,$fd,$fd,$fa,$fa,$d5,$d5,$fa,$fa,$f5,$f5
db $a0,$a0,$00,$00,$80,$80,$00,$00,$80,$80,$00,$00,$00,$00,$00,$00
db $1f,$1f,$1f,$1f,$0f,$0f,$07,$07,$07,$07,$03,$03,$03,$03,$01,$01
db $dc,$dc,$aa,$aa,$d4,$d4,$aa,$aa,$d4,$d4,$aa,$aa,$54,$54,$aa,$aa
db $fc,$fc,$aa,$aa,$f4,$f4,$aa,$aa,$f4,$f4,$ea,$ea,$74,$74,$aa,$aa
db $01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $dc,$dc,$aa,$aa,$54,$54,$aa,$aa,$d4,$d4,$aa,$aa,$d4,$d4,$aa,$aa
db $fc,$fc,$aa,$aa,$74,$74,$aa,$aa,$f4,$f4,$ea,$ea,$f4,$f4,$aa,$aa
db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01
db $ee,$ee,$d5,$d5,$ea,$ea,$f5,$f5,$ea,$ea,$f5,$f5,$fa,$fa,$fd,$fd
db $ee,$ee,$f5,$f5,$fa,$fa,$f5,$f5,$fa,$fa,$fd,$fd,$fa,$fa,$fd,$fd
db $00,$00,$00,$00,$00,$00,$00,$00,$80,$80,$00,$00,$80,$80,$40,$40
db $01,$01,$03,$03,$03,$03,$07,$07,$07,$07,$0f,$0f,$1f,$1f,$1f,$1f
db $ff,$ff,$fe,$fe,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff

View File

@ -808,8 +808,7 @@ DrawTile: ; b: y. c: x. a: part id. hl: location of sprite in OAM
ld a, d
add a, e
ld [hl+], a
ld a, 0
ld [hl+], a
inc hl
ret
.skipThisTile

View File

@ -2,11 +2,26 @@
;DEF vPreviousCardIndex EQU VARIABLES_START
;def vBlocked equ vPreviousCardIndex + 1
def vAnimationFrame EQU SCREEN_VARS_START
def vAnimationState EQU vAnimationFrame+1
def vCurrentAnimation EQU vAnimationState+1 ; 2 bytes
def vState EQU vAnimationFrame+1
println "vState is ", vState
def vCurrentAnimation EQU vState+1 ; 2 bytes
def vShuffleIndex equ vCurrentAnimation+2
def vShuffleTime equ vShuffleIndex+1 ; 2 bytes
def S_Center = 0
def S_RightOut = 1
def S_Right = 2
def S_RightIn = 3
def S_LeftOut = 4
def S_Left = 5
def S_LeftIn = 6
def S_UpOut = 7
def S_Up = 8
def S_UpIn = 9
def S_DownOut = 10
def S_Down = 11
def S_DownIn = 12
ScreenShuffle:
dw ShuffleSetup
dw ShuffleUpdate
@ -21,40 +36,33 @@ ShuffleSetup:
ld a, 0
ld [vAnimationFrame], a
ld [vAnimationState], a
ld hl, .asyncTask
call Async_Spawn_HL
ret
.asyncTask
ld a, S_Center
ld [vState], a
ld a, LOW(ShuffleAnimationRight)
ld [vCurrentAnimation], a
ld a, HIGH(ShuffleAnimationRight)
ld [vCurrentAnimation+1], a
ld hl, .asyncTask
call Async_Spawn_HL
ld hl, ZEROES
ld de, MY_OAM
ld bc, $100
call CopyRangeUnsafe
ld de, SAFE_DMA_LOCATION
ld a, HIGH(ZEROES)
call RunDMA
ld hl, Shuffle.UITilemap ; origin
ld de, $9800 ; destination
call CopyRange
ret
.asyncTask
ld hl, ONES ; origin
ld de, _SCRN0 ; destination
ld b, 18 ; height
ld c, 20 ; width
call CopyTilesToMapUnsafe
ld hl, Shuffle.UITileData
ld de, $9000 + VARIABLE_TILES_START*16
ld bc, Shuffle.UITileDataEnd - Shuffle.UITileData
call CopyRangeUnsafe
call CopyTilesToMap
; manually drawing the Big Card
ld hl, $9800 + $20*5 + 7
; manually drawing the Big Card
.drawBigCard
ld hl, _SCRN0 + 32*5 + 8
ld a, VARIABLE_TILES_START
ld [hl+], a
inc a
@ -127,41 +135,30 @@ ShuffleSetup:
ld [hl+], a
inc a
ld [hl+], a
ld hl, Shuffle.UITileData
ld de, $9000 + VARIABLE_TILES_START*16
ld bc, Shuffle.UITileDataEnd - Shuffle.UITileData
call CopyRange
ret
ShuffleUpdate:
; incrrement vShuffleTime so we can use it for seeding RNG
ld hl, vShuffleTime
ld a, [rDELTAT]
ld b, a
ld a, [hl]
add a, b
ld [hl+], a ; inc hl to get high byte
ld a, [hl]
adc a, 0
ld [hl], a ; this is addinig rDELTAT to vShuffleTime so we can use it for
; seeding the rng
call IncrementTimer
ld hl, vTime
ld a, [rDELTAT]
ld b, a
ld a, [hl]
add a, b
ld [hl+], a ; inc hl to get high byte
ld a, [hl]
adc a, 0
ld [hl], 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
call IncrementTimer
ld a, [hl]
ld 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
ld [hl-], a
ld [hl], a
ld [vTime], a
ld [vTime+1], a
ld hl, SquaresTiles
ld a, [vFrameCountSquares]
@ -171,78 +168,184 @@ ShuffleUpdate:
.doneTimer
ld hl, rMYBTNP
ld a, 0
cp a, [hl]
jr z, .noButtons
ld a, [rMYBTNP]
cp a, 0
jr z, .doneWithButtons
ld a, [rLFSR]
ld [rLFSR+1], a ; lfsr = (lfsr << 8) + (vShuffleTime & $ff)
ld a, [vShuffleTime]
ld [rLFSR], a
.noButtons
; check for B button press and change scene
ld hl, rMYBTNP
bit 4, [hl]
jp z, .doneWithB
ld hl, ScreenMainMenu
call ChangeScene
ret
.doneWithB
bit 0, [hl]
jp z, .doneWithRight
ld a, 1
ld [vAnimationState], a
ld a, 0
ld [vAnimationFrame], a
ld a, LOW(ShuffleAnimationRight)
ld [vCurrentAnimation], a
ld a, HIGH(ShuffleAnimationRight)
ld [vCurrentAnimation+1], a
call DoSomeShuffling
.doneWithRight
bit 1, [hl]
jp z, .doneWithLeft
ld a, 1
ld [vAnimationState], a
ld a, 0
ld [vAnimationFrame], a
ld a, LOW(ShuffleAnimationRightReturn)
ld [vCurrentAnimation], a
ld a, HIGH(ShuffleAnimationRightReturn)
ld [vCurrentAnimation+1], a
.doneWithLeft
call ShuffleButtonHandler
.doneWithButtons
;animation logic!
ld a, [vCurrentAnimation]
ld l, a
ld a, [vCurrentAnimation+1]
ld h, a ; fetch current animation
ld a, [vAnimationState]
or a, a
jp z, .doneWithAnimation
call ShufflePickAnimation
ld a, [vAnimationFrame]
inc a
cp a, [hl]
jp nz, .animNotDone
dec a
ld [vAnimationFrame], a
ld a, 0
ld [vAnimationState], a
cp a, [hl]
call z, ShuffleAdvanceState
call ShufflePickAnimation
ld a, [vAnimationFrame]
.animNotDone
call ArrayClampLooping
call ArrayClamp
ld [vAnimationFrame], a
.doneWithAnimation
inc hl
call ShufflePickAnimation
call ShuffleAnimate
ret
ShuffleButtonHandler:
ld a, [vState]
cp a, S_Center
jp z, CenterButtonHandler
ld a, [vState]
cp a, S_Right
jp z, RightButtonHandler
ld a, [vState]
cp a, S_RightOut
jp z, RightButtonHandler
ld a, [vState]
cp a, S_RightIn
jp z, CenterButtonHandler
ld a, [vState]
cp a, S_Left
jp z, LeftButtonHandler
ld a, [vState]
cp a, S_LeftOut
jp z, LeftButtonHandler
ld a, [vState]
cp a, S_LeftIn
jp z, CenterButtonHandler
ld a, [vState]
cp a, S_Up
jp z, UpButtonHandler
ld a, [vState]
cp a, S_UpOut
jp z, UpButtonHandler
ld a, [vState]
cp a, S_UpIn
jp z, CenterButtonHandler
ld a, [vState]
cp a, S_Down
jp z, DownButtonHandler
ld a, [vState]
cp a, S_DownOut
jp z, DownButtonHandler
ld a, [vState]
cp a, S_DownIn
jp z, CenterButtonHandler
ret
CenterButtonHandler:
call DoSomeShuffling
ld hl, rMYBTNP
: bit 0, [hl]
jp z, :+
ld a, S_RightOut
ld [vState], a
: bit 1, [hl]
jp z, :+
ld a, S_LeftOut
ld [vState], a
: bit 2, [hl]
jp z, :+
ld a, S_UpOut
ld [vState], a
: bit 3, [hl]
jp z, :+
ld a, S_DownOut
ld [vState], a
: ret
RightButtonHandler:
ld hl, rMYBTNP
: bit 1, [hl]
jp z, :+
ld a, S_RightIn
ld [vState], a
: ret
LeftButtonHandler:
ld hl, rMYBTNP
: bit 0, [hl]
jp z, :+
ld a, S_LeftIn
ld [vState], a
: ret
UpButtonHandler:
ld hl, rMYBTNP
: bit 3, [hl]
jp z, :+
ld a, S_UpIn
ld [vState], a
: ret
DownButtonHandler:
ld hl, rMYBTNP
: bit 2, [hl]
jp z, :+
ld a, S_DownIn
ld [vState], a
: ret
ShuffleAdvanceState:
ld a, [vState]
ld hl, ShuffleNextStates + 1
ld b, 0
ld c, a
add hl, bc
ld a, [hl]
ld [vState], a
ld a, 0
ld [vAnimationFrame], a
ret
ShufflePickAnimation:
ld a, [vState]
ld b, 0
ld c, a
ld hl, ShuffleAnimations + 1
add hl, bc
add hl, bc
ld c, [hl]
inc hl
ld b, [hl]
ld h, b
ld l, c
ret
ShuffleAnimate:
; hl has to hold the address of the animation
inc hl
ld b, 0
ld a, [vAnimationFrame]
ld c, a
@ -250,27 +353,82 @@ ShuffleUpdate:
add hl, bc ; two bytes per entry
; hl points to xy offsets
ld a, 40+16
add a, [hl]
ld b, a
ld b, [hl]
inc hl
ld a, 64+8
add a, [hl]
ld c, a
ld c, [hl]
ld a, 32
ld e, a
ld hl, $c000
ld hl, MY_OAM
call DrawWholeCard ; hl memory location, b y, c x, e width, d wiggle
ld a, [vState]
cp a, S_RightIn
jp z, HideSprites
cp a, S_LeftIn
jp z, HideSprites
cp a, S_UpIn
jp z, HideSprites
cp a, S_DownIn
jp z, HideSprites
call ShowSprites
ret
HideSprites:
ld hl, MY_OAM
.testTile
ld a, [hl]
cp a, (2+4)*8 ; y < 5*8 => skip
jp c, .goToNextTile
cp a, (2+5+8)*8 ; y > (5+8)*8 => skip
jp nc, .goToNextTile
inc hl
ld a, [hl] ; x value
dec hl
cp a, (1+7)*8 ; x < 7*8 => skip
jp c, .goToNextTile
cp a, (1+12)*8 ; x > 12*8 => skip
jp nc, .goToNextTile
inc hl
inc hl
inc hl
set OAMB_PRI, [hl]
dec hl
dec hl
dec hl
.goToNextTile
inc hl
inc hl
inc hl
inc hl
ld a, $A0
cp a, l
jp nz, .testTile
ret
ShowSprites:
ld hl, MY_OAM
.loop
inc hl
inc hl
inc hl
res OAMB_PRI, [hl]
inc hl
ld a, $A0
cp a, l
jp nz, .loop
ret
ShuffleDraw:
ld de, SAFE_DMA_LOCATION ; safe bytes in hram for dma code to live at
ld de, SAFE_DMA_LOCATION
ld a, HIGH(MY_OAM)
call RunDMA
; the card data is loaded asynchronously, initiated in CardReadUpdate
ld hl, SquaresTiles
inc hl
ld b, 0
@ -283,10 +441,9 @@ ShuffleDraw:
ld b, [hl]
ld h, b
ld l, c
ld de, $8000+$100*16 + 1*16 ; tile number $101 is the sliding background
ld de, _VRAM+$100*16 + 1*16 ; tile number $101 is the sliding background
ld bc, (SquaresTileset8 - SquaresTileset7) / 8
call CopyRangeUnsafeBy8s
ret
@ -329,32 +486,63 @@ OneSwap: ; shuffles once and decrements vshuffleindex
ret
ShuffleAnimationRight:
db 15, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15
ShuffleAnimationRightReturn:
db 15, 15, 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1
Shuffle.UITilemap:
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01
Shuffle.UITilemapEnd:
ShuffleNextStates:
db 13,
db S_Center
db S_Right ;def S_RightOut = 1
db S_Right ; def S_Right = 2
db S_Center ;def S_RightIn = 3
db S_Left ;def S_LeftOut = 4
db S_Left ;def S_Left = 5
db S_Center ;def S_LeftIn = 6
db S_Up ;def S_UpOut = 7
db S_Up ;def S_Up = 8
db S_Center ;def S_UpIn = 9
db S_Down ;def S_DownOut = 10
db S_Down ;def S_Down = 11
db S_Center ;def S_DownIn = 12
ShuffleAnimations:
db 13,
dw ShuffleAnimationNone ; def S_Center = 0
dw ShuffleAnimationRightOut ;def S_RightOut = 1
dw ShuffleAnimationRight ; def S_Right = 2
dw ShuffleAnimationRightIn ;def S_RightIn = 3
dw ShuffleAnimationLeftOut ;def S_LeftOut = 4
dw ShuffleAnimationLeft ;def S_Left = 5
dw ShuffleAnimationLeftIn ;def S_LeftIn = 6
dw ShuffleAnimationUpOut ;def S_UpOut = 7
dw ShuffleAnimationUp ;def S_Up = 8
dw ShuffleAnimationUpIn ;def S_UpIn = 9
dw ShuffleAnimationDownOut ;def S_DownOut = 10
dw ShuffleAnimationDown ;def S_Down = 11
dw ShuffleAnimationDownIn ;def S_DownIn = 12
ShuffleAnimationNone:
db 1, 56, 72
ShuffleAnimationRight:
db 1, 56, 115
ShuffleAnimationRightOut:
db 9, 56, 72, 56, 80, 56, 88, 56, 96, 56, 103, 56, 108, 56, 112, 56, 114, 56, 115,
ShuffleAnimationRightIn:
db 8, 56, 115, 56, 104, 56, 96, 56, 88, 56, 80, 56, 76, 56, 73, 56, 72,
ShuffleAnimationLeft:
db 1, 56, 32
ShuffleAnimationLeftOut:
db 9, 56, 72, 56, 64, 56, 56, 56, 49, 56, 42, 56, 36, 56, 35, 56, 33, 56, 32,
ShuffleAnimationLeftIn:
db 8, 56, 32, 56, 40, 56, 49, 56, 57, 56, 62, 56, 67, 56, 71, 56, 72,
ShuffleAnimationUp:
db 1, -24, 72
ShuffleAnimationUpOut:
db 13, 56, 72, 48, 72, 40, 72, 32, 72, 24, 72, 16, 72, 8, 72, 0, 72, -7, 72, -14, 72, -18, 72, -23, 72, -24, 72
ShuffleAnimationUpIn:
db 10, 1, 72, 8, 72, 16, 72, 24, 72, 32, 72, 40, 72, 46, 72, 52, 72, 55, 72, 56, 72,
ShuffleAnimationDown:
db 1, 136, 72
ShuffleAnimationDownOut:
db 13, 56, 72, 64, 72, 72, 72, 80, 72, 88, 72, 96, 72, 105, 72, 112, 72, 119, 72, 125, 72, 129, 72, 134, 72, 136, 72,
ShuffleAnimationDownIn:
db 12, 136, 72, 128, 72, 120, 72, 112, 72, 104, 72, 96, 72, 88, 72, 80, 72, 68, 72, 61, 72, 58, 72, 56, 72,
Shuffle.UITileData:
db $00,$ff,$7f,$ff,$7f,$ff,$60,$ff,$6f,$ff,$6d,$fa,$6a,$fd,$6d,$fa ; top-left
db $00,$ff,$ff,$ff,$ff,$ff,$00,$ff,$ff,$ff,$55,$aa,$aa,$55,$55,$aa ; top-middle

View File

@ -267,12 +267,13 @@ Loop:
ld a, b ; select buttons which were pressed this frame
ld [rMYBTN], a ; save that as btn state
call SoundUpdate
println "scene update is ", SCENE_UPDATE - 1
call SCENE_UPDATE - 1 ; hope this takes not too many scanlines!
ld b, 144
call AwaitLine
println "scene draw is ", SCENE_DRAW - 1
call SCENE_DRAW - 1 ; hope this takes fewer than 9 scanlines!
println "scenee draw call is at ", @
@ -283,6 +284,8 @@ println "scene draw is ", SCENE_DRAW - 1
call AwaitLine
jp Loop
SoundUpdate:
ChangeScene: ; hl should be a pointer to, in sequence, setup update draw teardown
;call SCENE_TEARDOWN - 1
@ -336,6 +339,18 @@ ArrayClampLooping: ; loops a to be in the array, assuming hl points to the lengt
dec a ; then set it to length-1
:
ret ; a is return value
ArrayClamp:
cp a, $FF
jp nz, :+
ld a, 0
ret
: cp a, [hl]
ret c
: ld a, [hl]
dec a
ret
:
PassList: ; hl has the address of a list. step past it.
ld b, 0

Binary file not shown.