593 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			593 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| PUSHS UNION "Screen Variables", WRAM0[SCREEN_VARS_START]
 | |
| vAnimationFrame: db ;def vAnimationFrame EQU SCREEN_VARS_START
 | |
| vState: db ;def vState EQU vAnimationFrame+1
 | |
| vCurrentAnimation: dw ;def vCurrentAnimation EQU vState+1 ; 2 bytes
 | |
| vShuffleIndex: db ;def vShuffleIndex equ vCurrentAnimation+2
 | |
| vShuffleTime: dw ;def vShuffleTime equ vShuffleIndex+1 ; 2 bytes
 | |
| vShuffleCount: db
 | |
| def cShuffleMax equ 8 ; the number of times you have to shuffle before you've "fully shuffled"
 | |
| POPS
 | |
| 
 | |
| 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
 | |
|   dw ShuffleDraw
 | |
|   dw ShuffleTeardown
 | |
| 
 | |
| ShuffleSetup:
 | |
|   ld a, [SHUFFLED_DECK]
 | |
|   dec a
 | |
|   ld [vShuffleIndex], a 
 | |
|   
 | |
|   ld a, 0 
 | |
|   ld [vAnimationFrame], a 
 | |
|   ld [vShuffleCount], a 
 | |
|   
 | |
|   ld a, S_Center
 | |
|   ld [vState], a 
 | |
|   
 | |
|   ld hl, .asyncTask
 | |
|   call Async_Spawn_HL
 | |
|   
 | |
|   ld hl, ZEROES
 | |
|   ld de, MY_OAM
 | |
|   ld bc, $100
 | |
|   call CopyRange
 | |
|   ret 
 | |
|   
 | |
|   
 | |
| .asyncTask
 | |
|   ld hl, ONES ; origin
 | |
|   ld de, _SCRN0 ; destination
 | |
|   ld b, 18 ; height
 | |
|   ld c, 20 ; width
 | |
|   call CopyTilesToMap
 | |
|   
 | |
|   ld hl, Shuffle.BigCard
 | |
|   ld de, _SCRN0 + 32*5 + 8
 | |
|   ld b, 8
 | |
|   ld c, 4
 | |
|   call CopyTilesToMap
 | |
|   
 | |
|   ld a, VARIABLE_TILES_START + 9
 | |
|   
 | |
|   ; draw left arrow
 | |
|   ld [_SCRN0 + 32*8 + 3], a  
 | |
|   inc a 
 | |
|   ld [_SCRN0 + 32*9 + 3], a
 | |
|   
 | |
|   ; right arrow
 | |
|   inc a 
 | |
|   ld [_SCRN0 + 32*8 + 16], a
 | |
|   inc a 
 | |
|   ld [_SCRN0 + 32*9 + 16], a
 | |
|   
 | |
|   ; up arrow
 | |
|   inc a 
 | |
|   ld [_SCRN0 + 32*2 + 9], a
 | |
|   inc a 
 | |
|   ld [_SCRN0 + 32*2 + 10], a
 | |
|   
 | |
|   ; down arrow
 | |
|   inc a 
 | |
|   ld [_SCRN0 + 32*15 + 9], a
 | |
|   inc a 
 | |
|   ld [_SCRN0 + 32*15 + 10], a 
 | |
|   
 | |
|   ld hl, Shuffle.UITileData
 | |
|   ld de, _VRAM + $1000 + 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
 | |
|   call IncrementTimer
 | |
|   
 | |
|   call ScrollBackgroundTile
 | |
| 
 | |
|   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 
 | |
|     
 | |
|     ; check for A button press and change scene
 | |
|     ld hl, rMYBTNP
 | |
|     bit 5, [hl]
 | |
|     jp z, .doneWithB
 | |
|       ld hl, ScreenMainMenu
 | |
|       call ChangeScene
 | |
|       ret
 | |
|     .doneWithB
 | |
|     call ShuffleButtonHandler
 | |
|   .doneWithButtons
 | |
| 
 | |
|   call ShufflePickAnimation
 | |
|   
 | |
|   ld a, [vAnimationFrame]
 | |
|   inc a 
 | |
|   ld [vAnimationFrame], a
 | |
|   cp a, [hl]
 | |
|   call z, ShuffleAdvanceState
 | |
|   
 | |
|   call ShufflePickAnimation
 | |
|   ld a, [vAnimationFrame]
 | |
|   call ArrayClamp
 | |
|   ld [vAnimationFrame], a 
 | |
|   
 | |
|   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:
 | |
|   
 | |
|   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, :+
 | |
|   
 | |
|   call DoSomeShuffling ; shuffle whenever we move into an inward state
 | |
|   ld a, S_RightIn
 | |
|   ld [vState], a 
 | |
| : ret
 | |
| 
 | |
| LeftButtonHandler:
 | |
|   ld hl, rMYBTNP
 | |
| : bit 0, [hl]
 | |
|   jp z, :+
 | |
|   
 | |
|   call DoSomeShuffling
 | |
|   ld a, S_LeftIn
 | |
|   ld [vState], a 
 | |
| : ret
 | |
| 
 | |
| UpButtonHandler:
 | |
|   ld hl, rMYBTNP
 | |
| : bit 3, [hl]
 | |
|   jp z, :+
 | |
|   
 | |
|   call DoSomeShuffling
 | |
|   ld a, S_UpIn
 | |
|   ld [vState], a 
 | |
| : ret
 | |
| 
 | |
| DownButtonHandler:
 | |
|   ld hl, rMYBTNP
 | |
| : bit 2, [hl]
 | |
|   jp z, :+
 | |
|   
 | |
|   call DoSomeShuffling
 | |
|   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 
 | |
|   add hl, bc
 | |
|   add hl, bc ; two bytes per entry
 | |
|   
 | |
|   ; hl points to xy offsets
 | |
|   ld b, [hl]
 | |
|   inc hl 
 | |
|   ld c, [hl]
 | |
|   ld a, 32
 | |
|   ld e, a 
 | |
|   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 a, [vCurrentBackgroundTile]
 | |
|   ld l, a 
 | |
|   ld a, [vCurrentBackgroundTile+1]
 | |
|   ld h, a 
 | |
|   ld de, _VRAM + $1000 + 1*16
 | |
|   call CopyOneTileData
 | |
| 
 | |
|   ld de, SAFE_DMA_LOCATION 
 | |
|   ld a, HIGH(MY_OAM)
 | |
|   call RunDMA
 | |
|   
 | |
|   ret
 | |
| 
 | |
| ShuffleTeardown:
 | |
|   ret
 | |
| 
 | |
| DoSomeShuffling:
 | |
|   call OneSwap
 | |
|   call OneSwap
 | |
|   call OneSwap
 | |
|   call OneSwap
 | |
|   call OneSwap
 | |
|   call OneSwap
 | |
|   call OneSwap
 | |
|   call OneSwap
 | |
|   call OneSwap
 | |
|   call OneSwap; 10 shuffles
 | |
|   
 | |
|   ld hl, vAsyncIsBusy
 | |
|   xor a, a
 | |
|   cp a, [hl]
 | |
|   ld hl, .asyncTask
 | |
|   call z, Async_Spawn_HL
 | |
|   
 | |
|   ret
 | |
|   
 | |
|   
 | |
| .asyncTask
 | |
|   ld hl, vShuffleCount
 | |
|   ld a, cShuffleMax
 | |
|   cp a, [hl]
 | |
|   jr z, .lastCharge
 | |
|   jr nc, .addCharge
 | |
|   jr c, .done
 | |
|   .addCharge
 | |
|     inc [hl]
 | |
|     ld b, [hl]
 | |
|     
 | |
|     ld hl, _SCRN0 + 32*13
 | |
|     ld de, _SCRN0 + 32*13 + 19
 | |
|     
 | |
|     : ; loop
 | |
|       ld a, l 
 | |
|       sub a, 32
 | |
|       ld l, a 
 | |
|       ld a, h
 | |
|       sbc a, 0
 | |
|       ld h, a 
 | |
|       ld [hl], VARIABLE_TILES_START + 17
 | |
|       
 | |
|       ld a, e
 | |
|       sub a, 32
 | |
|       ld e, a 
 | |
|       ld a, d
 | |
|       sbc a, 0
 | |
|       ld d, a 
 | |
|       ld a, VARIABLE_TILES_START + 17
 | |
|       ld [de], a
 | |
|       
 | |
|       
 | |
|       dec b 
 | |
|       jr nz, :-
 | |
|     jr .done
 | |
|   .lastCharge
 | |
|    ; copy tiles from where they are linearly packed at an origin (hl)
 | |
|   ; to a rectangle in the tilemap in vram (de)
 | |
|   ; assuming it has height in b and width in c.
 | |
|     ld hl, Shuffle.ShuffledPopup
 | |
|     ld de, _SCRN0 + 32*14 + 5
 | |
|     ld b, 3
 | |
|     ld c, 11
 | |
|     call CopyTilesToMap
 | |
|     
 | |
|     ld hl, Shuffle.ShuffledText
 | |
|     ld de, _SCRN0 + 32*15 + 6
 | |
|     call PrintString
 | |
|   .done
 | |
|   ret
 | |
| 
 | |
| OneSwap: ; shuffles once and decrements vshuffleindex
 | |
|   ; vShuffleIndex holds the index of the next card to swap with something
 | |
|   ld a, [vShuffleIndex]
 | |
|   cp a, 1
 | |
|   jp z, .zeroIndex ; if we're swapping index 1 with index 0 skip it
 | |
|   
 | |
|   ld d, a 
 | |
|   dec d ; this holds the highest index we could want to swap with
 | |
| 
 | |
|   call RandomUnderD ; takes d as limit (inclusive)
 | |
|   ld e, a ; shuffle 2 is randint(vshuffleindex-1)
 | |
|   ld c, d ; shuffle 1 is vshuffleindex
 | |
|   ld hl, SHUFFLED_DECK
 | |
|   call SwapCards ; arguments c and e as indices to swap, hl as array in memory
 | |
|   
 | |
|   call ClockLFSR
 | |
|   ld a, [vShuffleIndex]
 | |
|   ld b, 0
 | |
|   ld c, a 
 | |
|   ld hl, DECK_FLIPS+1
 | |
|   add hl, bc 
 | |
|   ld a, [rLFSR]
 | |
|   and a, %10000000
 | |
|   ld [hl], a 
 | |
|   
 | |
|   
 | |
|   ld a, [vShuffleIndex]
 | |
|   dec a
 | |
|   ld [vShuffleIndex], a ; decrement vshuffleindex so the next time around
 | |
|   ; we do the next step of the shuffle
 | |
|   ret
 | |
| .zeroIndex
 | |
|   ld a, [SHUFFLED_DECK]
 | |
|   dec a 
 | |
|   ld [vShuffleIndex], a 
 | |
|   ret
 | |
| 
 | |
| 
 | |
| 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
 | |
| 	db $00,$ff,$fe,$ff,$fe,$ff,$06,$ff,$f6,$ff,$56,$bf,$b6,$5f,$56,$bf ; top-right
 | |
| 	db $6a,$fd,$6d,$fa,$6a,$fd,$6d,$fa,$6a,$fd,$6d,$fa,$6a,$fd,$6d,$fa ; middle-left
 | |
| 	db $aa,$55,$55,$aa,$aa,$55,$55,$aa,$aa,$55,$55,$aa,$aa,$55,$55,$aa ; middle-middle
 | |
| 	db $b6,$5f,$56,$bf,$b6,$5f,$56,$bf,$b6,$5f,$56,$bf,$b6,$5f,$56,$bf ; middle-right
 | |
| 	db $6a,$fd,$6d,$fa,$6a,$fd,$6f,$ff,$60,$ff,$7f,$ff,$7f,$ff,$00,$ff ; bottom-left
 | |
| 	db $aa,$55,$55,$aa,$aa,$55,$ff,$ff,$00,$ff,$ff,$ff,$ff,$ff,$00,$ff ; bottom-middle
 | |
| 	db $b6,$5f,$56,$bf,$b6,$5f,$f6,$ff,$06,$ff,$fe,$ff,$fe,$ff,$00,$ff ; bottom-right
 | |
| 	
 | |
| 	db $60,$1f,$ce,$3f,$d2,$33,$92,$73,$a2,$63,$22,$e3,$4a,$cb,$5a,$db ; arrows, starting at VTS+9
 | |
| 	db $5a,$db,$4a,$cb,$22,$e3,$a2,$63,$92,$73,$d2,$33,$ce,$3f,$60,$1f 
 | |
| 	db $06,$f8,$73,$fc,$4b,$cc,$49,$ce,$45,$c6,$44,$c7,$52,$d3,$5a,$db ; right arrow
 | |
| 	db $5a,$db,$52,$d3,$44,$c7,$45,$c6,$49,$ce,$4b,$cc,$73,$fc,$06,$f8
 | |
| 	db $78,$07,$e3,$1f,$8c,$7c,$31,$f1,$43,$c3,$40,$c0,$7f,$ff,$00,$ff ; up arrow
 | |
| 	db $1e,$e0,$c7,$f8,$31,$3e,$8c,$8f,$c2,$c3,$02,$03,$fe,$ff,$00,$ff
 | |
| 	db $00,$ff,$7f,$ff,$40,$c0,$43,$c3,$31,$f1,$8c,$7c,$e3,$1f,$78,$07 ; down arrow
 | |
| 	db $00,$ff,$fe,$ff,$02,$03,$c2,$c3,$8c,$8f,$31,$3e,$c7,$f8,$1e,$e0
 | |
| 
 | |
|   db $00,$00,$7e,$7e,$00,$7e,$7e,$00,$7e,$00,$00,$7e,$7e,$7e,$00,$00 ; fill marker
 | |
| Shuffle.UITileDataEnd:
 | |
| 
 | |
| Shuffle.BigCard:
 | |
| def VTS = VARIABLE_TILES_START
 | |
|   db VTS,   VTS+1, VTS+1, VTS+2
 | |
|   db VTS+3, VTS+4, VTS+4, VTS+5
 | |
|   db VTS+3, VTS+4, VTS+4, VTS+5
 | |
|   db VTS+3, VTS+4, VTS+4, VTS+5
 | |
|   db VTS+3, VTS+4, VTS+4, VTS+5
 | |
|   db VTS+3, VTS+4, VTS+4, VTS+5
 | |
|   db VTS+3, VTS+4, VTS+4, VTS+5
 | |
|   db VTS+6, VTS+7, VTS+7, VTS+8
 | |
|   
 | |
| Shuffle.ShuffledText:
 | |
|   db 9, "Shuffled!"
 | |
| 
 | |
| Shuffle.ShuffledPopup1:
 | |
|   db 9, 8
 | |
|   db 3, 4
 | |
|   db 6, 7
 | |
| Shuffle.ShuffledPopup2:
 | |
|   db 9, 2, 8
 | |
|   db 3, 0, 4
 | |
|   db 6, 5, 7
 | |
| Shuffle.ShuffledPopup:
 | |
|   db 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8
 | |
|   db 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
 | |
|   db 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7 |