diff --git a/Async.inc b/Async.inc index 24eb7ca..2196c9b 100644 --- a/Async.inc +++ b/Async.inc @@ -7,6 +7,7 @@ vAsyncBC: dw vAsyncPC: dw vAsyncMainSP: dw vAsyncThreadSP: dw +vAsyncIsBusy: db POPS ; canonical ordering to push should be: AF, BC, DE, HL, @@ -26,6 +27,9 @@ Async_Kill: ld [vAsyncThreadSP], a ld a, h ld [vAsyncThreadSP+1], a + + ld a, 0 + ld [vAsyncIsBusy], a ; unset next call ld hl, rIE @@ -140,7 +144,8 @@ Async_Spawn: ld hl, rIF res 1, [hl] ; clear the interrupt so we don't immediately fire it - + ld a, 1 + ld [vAsyncIsBusy], a ; restore main sp ld a, [vAsyncMainSP] @@ -264,6 +269,8 @@ Async_EarlyReturn: ; store side thread SP, so everyone knows that the side thread stack is empty ld [vAsyncThreadSP], sp ; 5 cycles instead of 13 + ld a, 0 + ld [vAsyncIsBusy], a ; unset next call ld hl, rIE diff --git a/ScreenShuffle.inc b/ScreenShuffle.inc index 85a91ef..009d861 100644 --- a/ScreenShuffle.inc +++ b/ScreenShuffle.inc @@ -4,6 +4,8 @@ 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 @@ -33,6 +35,7 @@ ShuffleSetup: ld a, 0 ld [vAnimationFrame], a + ld [vShuffleCount], a ld a, S_Center ld [vState], a @@ -45,6 +48,8 @@ ShuffleSetup: ld bc, $100 call CopyRange ret + + .asyncTask ld hl, ONES ; origin ld de, _SCRN0 ; destination @@ -58,6 +63,31 @@ ShuffleSetup: 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 @@ -158,7 +188,6 @@ ShuffleButtonHandler: ret CenterButtonHandler: - call DoSomeShuffling ld hl, rMYBTNP : bit 0, [hl] @@ -184,6 +213,7 @@ RightButtonHandler: : bit 1, [hl] jp z, :+ + call DoSomeShuffling ; shuffle whenever we move into an inward state ld a, S_RightIn ld [vState], a : ret @@ -193,6 +223,7 @@ LeftButtonHandler: : bit 0, [hl] jp z, :+ + call DoSomeShuffling ld a, S_LeftIn ld [vState], a : ret @@ -202,6 +233,7 @@ UpButtonHandler: : bit 3, [hl] jp z, :+ + call DoSomeShuffling ld a, S_UpIn ld [vState], a : ret @@ -211,6 +243,7 @@ DownButtonHandler: : bit 2, [hl] jp z, :+ + call DoSomeShuffling ld a, S_DownIn ld [vState], a : ret @@ -351,7 +384,67 @@ DoSomeShuffling: 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 @@ -459,6 +552,17 @@ Shuffle.UITileData: 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: @@ -470,4 +574,12 @@ def VTS = VARIABLE_TILES_START 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 \ No newline at end of file + db VTS+6, VTS+7, VTS+7, VTS+8 + +Shuffle.ShuffledText: + db 9, "Shuffled!" + +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 \ No newline at end of file diff --git a/card_art/coins14king.aseprite b/card_art/coins14king.aseprite new file mode 100644 index 0000000..9c40e8b Binary files /dev/null and b/card_art/coins14king.aseprite differ diff --git a/card_art/cups14king.aseprite b/card_art/cups14king.aseprite new file mode 100644 index 0000000..4476c8d Binary files /dev/null and b/card_art/cups14king.aseprite differ diff --git a/card_art/screendesigns.aseprite b/card_art/screendesigns.aseprite index 66ab659..d5448e2 100644 Binary files a/card_art/screendesigns.aseprite and b/card_art/screendesigns.aseprite differ diff --git a/card_art/swords14king.aseprite b/card_art/swords14king.aseprite new file mode 100644 index 0000000..14b596d Binary files /dev/null and b/card_art/swords14king.aseprite differ diff --git a/card_art/tileset.asm b/card_art/tileset.asm new file mode 100644 index 0000000..a1768bd --- /dev/null +++ b/card_art/tileset.asm @@ -0,0 +1,46 @@ + ; original export script by gabriel reis, modified by shoofle + + +tileset: + + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$ff,$7f,$ff,$7f,$ff,$60,$ff,$6f,$ff,$6d,$fa,$6a,$fd,$6d,$fa + db $00,$ff,$ff,$ff,$ff,$ff,$00,$ff,$ff,$ff,$55,$aa,$aa,$55,$55,$aa + db $00,$ff,$fe,$ff,$fe,$ff,$06,$ff,$f6,$ff,$56,$bf,$b6,$5f,$56,$bf + db $6a,$fd,$6d,$fa,$6a,$fd,$6d,$fa,$6a,$fd,$6d,$fa,$6a,$fd,$6d,$fa + db $aa,$55,$55,$aa,$aa,$55,$55,$aa,$aa,$55,$55,$aa,$aa,$55,$55,$aa + db $b6,$5f,$56,$bf,$b6,$5f,$56,$bf,$b6,$5f,$56,$bf,$b6,$5f,$56,$bf + db $6a,$fd,$6d,$fa,$6a,$fd,$6f,$ff,$60,$ff,$7f,$ff,$7f,$ff,$00,$ff + db $aa,$55,$55,$aa,$aa,$55,$ff,$ff,$00,$ff,$ff,$ff,$ff,$ff,$00,$ff + db $b6,$5f,$56,$bf,$b6,$5f,$f6,$ff,$06,$ff,$fe,$ff,$fe,$ff,$00,$ff + db $60,$1f,$ce,$3f,$d2,$33,$92,$73,$a2,$63,$22,$e3,$4a,$cb,$5a,$db + 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 + 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 + 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 + 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 + + + +ShuffleUI: + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $01, $02, $03, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $04, $05, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $04, $05, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $04, $05, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $07, $08, $09, $00, $0a, $0c, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $0b, $0d, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $0e, $0f, $10, $11, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $12, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 diff --git a/card_art/wands14king.aseprite b/card_art/wands14king.aseprite new file mode 100644 index 0000000..7e0751c Binary files /dev/null and b/card_art/wands14king.aseprite differ diff --git a/source.zip b/source.zip index cb1d598..f0c2a76 100644 Binary files a/source.zip and b/source.zip differ diff --git a/swords01ace.inc b/swords01ace.inc index f893dd9..580ba42 100644 --- a/swords01ace.inc +++ b/swords01ace.inc @@ -3,7 +3,7 @@ Swords01Ace: db 10, "SWORDS " db 10, " " db 10, "triumph " - db 10, "new ideas " + db 10, "excess " db 10, "clarity " db 10, "ACE of "