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,$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,$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,$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 $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 $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,$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 $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 $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 $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 $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 $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 $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 $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 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,$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,$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,$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 $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 $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,$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 $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 $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 $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 $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 $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 $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 $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 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 ld a, d
add a, e add a, e
ld [hl+], a ld [hl+], a
ld a, 0 inc hl
ld [hl+], a
ret ret
.skipThisTile .skipThisTile

View File

@ -2,11 +2,26 @@
;DEF vPreviousCardIndex EQU VARIABLES_START ;DEF vPreviousCardIndex EQU VARIABLES_START
;def vBlocked equ vPreviousCardIndex + 1 ;def vBlocked equ vPreviousCardIndex + 1
def vAnimationFrame EQU SCREEN_VARS_START def vAnimationFrame EQU SCREEN_VARS_START
def vAnimationState EQU vAnimationFrame+1 def vState EQU vAnimationFrame+1
def vCurrentAnimation EQU vAnimationState+1 ; 2 bytes println "vState is ", vState
def vCurrentAnimation EQU vState+1 ; 2 bytes
def vShuffleIndex equ vCurrentAnimation+2 def vShuffleIndex equ vCurrentAnimation+2
def vShuffleTime equ vShuffleIndex+1 ; 2 bytes 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: ScreenShuffle:
dw ShuffleSetup dw ShuffleSetup
dw ShuffleUpdate dw ShuffleUpdate
@ -21,40 +36,33 @@ ShuffleSetup:
ld a, 0 ld a, 0
ld [vAnimationFrame], a ld [vAnimationFrame], a
ld [vAnimationState], a
ld hl, .asyncTask ld a, S_Center
call Async_Spawn_HL ld [vState], a
ret
.asyncTask
ld a, LOW(ShuffleAnimationRight) ld a, LOW(ShuffleAnimationRight)
ld [vCurrentAnimation], a ld [vCurrentAnimation], a
ld a, HIGH(ShuffleAnimationRight) ld a, HIGH(ShuffleAnimationRight)
ld [vCurrentAnimation+1], a ld [vCurrentAnimation+1], a
ld hl, .asyncTask
call Async_Spawn_HL
ld hl, ZEROES ld hl, ZEROES
ld de, MY_OAM ld de, MY_OAM
ld bc, $100 ld bc, $100
call CopyRangeUnsafe call CopyRange
ret
ld de, SAFE_DMA_LOCATION .asyncTask
ld a, HIGH(ZEROES) ld hl, ONES ; origin
call RunDMA ld de, _SCRN0 ; destination
ld hl, Shuffle.UITilemap ; origin
ld de, $9800 ; destination
ld b, 18 ; height ld b, 18 ; height
ld c, 20 ; width ld c, 20 ; width
call CopyTilesToMapUnsafe call CopyTilesToMap
ld hl, Shuffle.UITileData
ld de, $9000 + VARIABLE_TILES_START*16
ld bc, Shuffle.UITileDataEnd - Shuffle.UITileData
call CopyRangeUnsafe
; manually drawing the Big Card
; manually drawing the Big Card .drawBigCard
ld hl, $9800 + $20*5 + 7 ld hl, _SCRN0 + 32*5 + 8
ld a, VARIABLE_TILES_START ld a, VARIABLE_TILES_START
ld [hl+], a ld [hl+], a
inc a inc a
@ -127,41 +135,30 @@ ShuffleSetup:
ld [hl+], a ld [hl+], a
inc a inc a
ld [hl+], a ld [hl+], a
ld hl, Shuffle.UITileData
ld de, $9000 + VARIABLE_TILES_START*16
ld bc, Shuffle.UITileDataEnd - Shuffle.UITileData
call CopyRange
ret ret
ShuffleUpdate: ShuffleUpdate:
; incrrement vShuffleTime so we can use it for seeding RNG
ld hl, vShuffleTime ld hl, vShuffleTime
ld a, [rDELTAT] call IncrementTimer
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
ld hl, vTime ld hl, vTime
ld a, [rDELTAT] call IncrementTimer
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
ld a, [hl] ld a, [vTime+1]
cp a, $01 cp a, $01
jp c, .doneTimer ; if the timer is less than $0100, skip to end jp c, .doneTimer ; if the timer is less than $0100, skip to end
;otherwise reset the timer ;otherwise reset the timer
ld a, 0 ld a, 0
ld [hl-], a ld [vTime], a
ld [hl], a ld [vTime+1], a
ld hl, SquaresTiles ld hl, SquaresTiles
ld a, [vFrameCountSquares] ld a, [vFrameCountSquares]
@ -171,78 +168,184 @@ ShuffleUpdate:
.doneTimer .doneTimer
ld hl, rMYBTNP ld a, [rMYBTNP]
cp a, 0
ld a, 0 jr z, .doneWithButtons
cp a, [hl]
jr z, .noButtons
ld a, [rLFSR] ld a, [rLFSR]
ld [rLFSR+1], a ; lfsr = (lfsr << 8) + (vShuffleTime & $ff) ld [rLFSR+1], a ; lfsr = (lfsr << 8) + (vShuffleTime & $ff)
ld a, [vShuffleTime] ld a, [vShuffleTime]
ld [rLFSR], a ld [rLFSR], a
.noButtons ; check for B button press and change scene
ld hl, rMYBTNP
bit 4, [hl] bit 4, [hl]
jp z, .doneWithB jp z, .doneWithB
ld hl, ScreenMainMenu ld hl, ScreenMainMenu
call ChangeScene call ChangeScene
ret ret
.doneWithB .doneWithB
bit 0, [hl] call ShuffleButtonHandler
jp z, .doneWithRight .doneWithButtons
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
;animation logic! call ShufflePickAnimation
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
ld a, [vAnimationFrame] ld a, [vAnimationFrame]
inc a inc a
cp a, [hl]
jp nz, .animNotDone
dec a
ld [vAnimationFrame], a ld [vAnimationFrame], a
ld a, 0 cp a, [hl]
ld [vAnimationState], a call z, ShuffleAdvanceState
call ShufflePickAnimation
ld a, [vAnimationFrame] ld a, [vAnimationFrame]
.animNotDone call ArrayClamp
call ArrayClampLooping
ld [vAnimationFrame], a ld [vAnimationFrame], a
.doneWithAnimation call ShufflePickAnimation
inc hl
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 b, 0
ld a, [vAnimationFrame] ld a, [vAnimationFrame]
ld c, a ld c, a
@ -250,27 +353,82 @@ ShuffleUpdate:
add hl, bc ; two bytes per entry add hl, bc ; two bytes per entry
; hl points to xy offsets ; hl points to xy offsets
ld a, 40+16 ld b, [hl]
add a, [hl]
ld b, a
inc hl inc hl
ld a, 64+8 ld c, [hl]
add a, [hl]
ld c, a
ld a, 32 ld a, 32
ld e, a ld e, a
ld hl, $c000 ld hl, MY_OAM
call DrawWholeCard ; hl memory location, b y, c x, e width, d wiggle 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 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: 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) ld a, HIGH(MY_OAM)
call RunDMA call RunDMA
; the card data is loaded asynchronously, initiated in CardReadUpdate
ld hl, SquaresTiles ld hl, SquaresTiles
inc hl inc hl
ld b, 0 ld b, 0
@ -283,10 +441,9 @@ ShuffleDraw:
ld b, [hl] ld b, [hl]
ld h, b ld h, b
ld l, c 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 ld bc, (SquaresTileset8 - SquaresTileset7) / 8
call CopyRangeUnsafeBy8s call CopyRangeUnsafeBy8s
ret ret
@ -329,32 +486,63 @@ OneSwap: ; shuffles once and decrements vshuffleindex
ret ret
ShuffleAnimationRight: ShuffleNextStates:
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 db 13,
ShuffleAnimationRightReturn: db S_Center
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 db S_Right ;def S_RightOut = 1
db S_Right ; def S_Right = 2
Shuffle.UITilemap: db S_Center ;def S_RightIn = 3
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db S_Left ;def S_LeftOut = 4
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db S_Left ;def S_Left = 5
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db S_Center ;def S_LeftIn = 6
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db S_Up ;def S_UpOut = 7
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db S_Up ;def S_Up = 8
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db S_Center ;def S_UpIn = 9
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db S_Down ;def S_DownOut = 10
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db S_Down ;def S_Down = 11
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db S_Center ;def S_DownIn = 12
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 ShuffleAnimations:
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db 13,
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 dw ShuffleAnimationNone ; def S_Center = 0
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 dw ShuffleAnimationRightOut ;def S_RightOut = 1
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 dw ShuffleAnimationRight ; def S_Right = 2
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 dw ShuffleAnimationRightIn ;def S_RightIn = 3
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 dw ShuffleAnimationLeftOut ;def S_LeftOut = 4
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 dw ShuffleAnimationLeft ;def S_Left = 5
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 dw ShuffleAnimationLeftIn ;def S_LeftIn = 6
Shuffle.UITilemapEnd: 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: Shuffle.UITileData:
db $00,$ff,$7f,$ff,$7f,$ff,$60,$ff,$6f,$ff,$6d,$fa,$6a,$fd,$6d,$fa ; top-left 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 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 a, b ; select buttons which were pressed this frame
ld [rMYBTN], a ; save that as btn state ld [rMYBTN], a ; save that as btn state
call SoundUpdate
println "scene update is ", SCENE_UPDATE - 1 println "scene update is ", SCENE_UPDATE - 1
call SCENE_UPDATE - 1 ; hope this takes not too many scanlines! call SCENE_UPDATE - 1 ; hope this takes not too many scanlines!
ld b, 144 ld b, 144
call AwaitLine call AwaitLine
println "scene draw is ", SCENE_DRAW - 1 println "scene draw is ", SCENE_DRAW - 1
call SCENE_DRAW - 1 ; hope this takes fewer than 9 scanlines! call SCENE_DRAW - 1 ; hope this takes fewer than 9 scanlines!
println "scenee draw call is at ", @ println "scenee draw call is at ", @
@ -283,6 +284,8 @@ println "scene draw is ", SCENE_DRAW - 1
call AwaitLine call AwaitLine
jp Loop jp Loop
SoundUpdate:
ChangeScene: ; hl should be a pointer to, in sequence, setup update draw teardown ChangeScene: ; hl should be a pointer to, in sequence, setup update draw teardown
;call SCENE_TEARDOWN - 1 ;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 dec a ; then set it to length-1
: :
ret ; a is return value 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. PassList: ; hl has the address of a list. step past it.
ld b, 0 ld b, 0

Binary file not shown.