diff --git a/21TheWorld.inc b/21TheWorld.inc index 5e94e31..2bb4522 100644 --- a/21TheWorld.inc +++ b/21TheWorld.inc @@ -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 diff --git a/21theworld.aseprite b/21theworld.aseprite index 42a02c0..0c3c4e8 100644 Binary files a/21theworld.aseprite and b/21theworld.aseprite differ diff --git a/KeyArtTiles.asm b/KeyArtTiles.asm index 772c323..dd842b8 100644 --- a/KeyArtTiles.asm +++ b/KeyArtTiles.asm @@ -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 diff --git a/ScreenMainMenu.inc b/ScreenMainMenu.inc index 76b03d3..ba2e7bd 100644 --- a/ScreenMainMenu.inc +++ b/ScreenMainMenu.inc @@ -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 diff --git a/ScreenShuffle.inc b/ScreenShuffle.inc index 97156f6..5320628 100644 --- a/ScreenShuffle.inc +++ b/ScreenShuffle.inc @@ -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 diff --git a/main.asm b/main.asm index f921cb1..d08ad60 100644 --- a/main.asm +++ b/main.asm @@ -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 diff --git a/source.zip b/source.zip index a935c13..338c939 100644 Binary files a/source.zip and b/source.zip differ