From 6925e624fcdfe0f20745a61e20fefa0262b81618 Mon Sep 17 00:00:00 2001 From: shoofle Date: Sat, 19 Jul 2025 13:04:28 -0400 Subject: [PATCH] finally finished the last card, the devil --- 10WheelOfFortune.inc | 2 +- 14Temperance.inc | 44 ++- 15TheDevil.inc | 394 ++++++++++++++++------- card_art/14temperance.aseprite | Bin 3891 -> 3835 bytes card_art/15thedevil.aseprite | Bin 6798 -> 6084 bytes card_art/KeyArtTiles.asm | 230 ++++++------- card_art/SpriteTiles.asm | 67 ++-- hardware_compat.inc | 573 +++++++++++++++++++++++++++++++++ misc.py | 48 +++ source.zip | Bin 477407 -> 501948 bytes 10 files changed, 1062 insertions(+), 296 deletions(-) create mode 100644 hardware_compat.inc diff --git a/10WheelOfFortune.inc b/10WheelOfFortune.inc index 9c94553..9bf7967 100644 --- a/10WheelOfFortune.inc +++ b/10WheelOfFortune.inc @@ -18,7 +18,7 @@ WheelOfFortune: .fInit: ld hl, CVS ld a, 0 - ld [hl+], a ; CVS timer for smoke + ld [hl+], a ; CVS timer for numbers ld [hl+], a ; drawing 12 characters total ; top sprites diff --git a/14Temperance.inc b/14Temperance.inc index 935bfbb..a09a871 100644 --- a/14Temperance.inc +++ b/14Temperance.inc @@ -152,7 +152,6 @@ db $00, $11 db $7e,$81,$7c,$83,$18,$e7,$00,$ff,$00,$00,$00,$fe,$00,$00,$00,$00 db $07,$f8,$00,$0f,$00,$7f,$00,$01,$00,$00,$00,$0f,$00,$00,$00,$00 db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00 - db $ff,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$00,$ff,$00,$ff,$00 db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$01,$ff,$03,$ff,$03 db $ff,$00,$ff,$00,$ff,$03,$ff,$1f,$ff,$7f,$ff,$ff,$ff,$3f,$ff,$cf db $ff,$00,$ff,$00,$ff,$c0,$ff,$f8,$ff,$fe,$ff,$ff,$ff,$ff,$ff,$ff @@ -170,8 +169,8 @@ db $00, $11 db $ff,$e0,$ff,$e0,$ff,$e0,$ff,$c0,$ff,$80,$ff,$80,$ff,$00,$ff,$00 db $e0,$3f,$e0,$3f,$e0,$3f,$e0,$3e,$e0,$1e,$f0,$1e,$e8,$0e,$e6,$0e db $00,$c0,$01,$81,$01,$01,$01,$01,$03,$03,$01,$01,$02,$02,$0f,$0e - db $e0,$e4,$b0,$87,$b0,$80,$b3,$83,$98,$00,$c7,$00,$03,$04,$c3,$04 - db $0b,$07,$0b,$16,$1e,$05,$b5,$8b,$29,$17,$db,$27,$fa,$03,$00,$03 + db $e0,$e4,$b0,$87,$b0,$80,$b3,$83,$98,$00,$c4,$00,$03,$04,$c3,$04 + db $0b,$07,$0b,$06,$1e,$05,$95,$8b,$09,$17,$1b,$27,$fa,$03,$00,$03 db $b7,$6f,$e5,$ff,$cd,$ff,$db,$fe,$b3,$fe,$37,$fc,$6f,$fc,$dc,$ff db $e0,$06,$e0,$06,$e0,$04,$e0,$04,$e0,$04,$e0,$04,$e0,$04,$e0,$04 db $04,$0c,$06,$0f,$03,$0c,$07,$08,$07,$08,$06,$08,$04,$08,$00,$08 @@ -223,41 +222,40 @@ db $00, $11 db $40,$ff,$40,$ff,$83,$ff,$83,$ff,$06,$fe,$06,$fe,$1c,$fc,$18,$f8 db $3f,$ff,$e0,$e0,$80,$80,$00,$00,$1c,$00,$fe,$00,$ff,$00,$03,$fc db $f3,$fc,$03,$04,$03,$04,$03,$04,$02,$05,$00,$0f,$e7,$18,$cf,$30 - db $01,$01,$03,$03,$03,$03,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07 + db $01,$01,$03,$03,$03,$03,$07,$07,$07,$07,$07,$07,$07,$37,$07,$47 db $ff,$ef,$ff,$fd,$ff,$3f,$ff,$cf,$ff,$f8,$ff,$ff,$ff,$ff,$ff,$ff db $ff,$fb,$ff,$5f,$ff,$ff,$ff,$fc,$ff,$07,$ff,$ff,$ff,$ff,$ff,$ff db $e0,$ef,$f0,$ff,$f0,$3f,$f8,$ff,$fb,$ff,$f8,$ff,$f8,$ff,$ff,$ff db $00,$ff,$00,$ff,$00,$ff,$01,$ff,$ff,$ff,$01,$ff,$01,$ff,$ff,$ff db $38,$f8,$78,$f8,$78,$f8,$f0,$f0,$e3,$e0,$80,$e0,$c0,$30,$e0,$18 db $78,$87,$7e,$81,$7e,$81,$3c,$c3,$b9,$46,$13,$6c,$47,$38,$e7,$18 - db $07,$77,$07,$87,$03,$73,$00,$00,$00,$1c,$00,$07,$00,$00,$00,$00 - db $ff,$ff,$ff,$ff,$ff,$ff,$7f,$7f,$01,$01,$00,$80,$00,$fc,$00,$00 + db $07,$87,$07,$87,$03,$43,$00,$30,$00,$04,$00,$03,$00,$00,$00,$00 + db $ff,$ff,$ff,$ff,$ff,$ff,$7f,$7f,$01,$01,$00,$80,$00,$7c,$00,$00 db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$e0,$e0,$00,$00,$00,$03,$00,$00 - db $ff,$ff,$ff,$ff,$ff,$ff,$80,$80,$00,$00,$00,$0f,$00,$f8,$00,$00 - db $ff,$ff,$ff,$ff,$fc,$ff,$00,$07,$00,$1d,$00,$9f,$00,$e0,$00,$00 + db $ff,$ff,$ff,$ff,$ff,$ff,$80,$80,$00,$00,$00,$07,$00,$f8,$00,$00 + db $ff,$ff,$ff,$ff,$fc,$ff,$00,$01,$00,$01,$00,$1f,$00,$e0,$00,$00 db $f0,$0f,$f8,$07,$ff,$00,$ff,$00,$7f,$80,$7f,$80,$00,$7f,$00,$00 db $07,$f8,$17,$e8,$f3,$0c,$f3,$0c,$f3,$0c,$e0,$1f,$0f,$f0,$0f,$f0 - db $ff,$00,$ff,$00,$ff,$00,$7f,$80,$ff,$00,$ff,$00,$ff,$00,$ff,$00 db $1f,$e0,$00,$ff,$1e,$e1,$7f,$80,$ff,$00,$ff,$00,$ff,$00,$fe,$01 db $fe,$01,$fe,$01,$fe,$01,$fe,$01,$fc,$03,$00,$ff,$3c,$c3,$7e,$81 db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$00,$ff,$7f,$80,$ff,$00 .KeyArtTilesEnd: .BackgroundCopy: ; tiles start at 26 - db $25, $25, $25, $27, $28, $29, $2a, $25 - db $25, $25, $2b, $2c, $2d, $2e, $2f, $25 - db $25, $30, $31, $32, $33, $34, $35, $25 - db $25, $36, $37, $38, $39, $3a, $25, $25 - db $25, $3b, $3c, $3d, $3e, $3f, $40, $25 - db $25, $41, $42, $43, $44, $45, $46, $25 - db $25, $47, $48, $49, $4a, $4b, $4c, $25 - db $25, $4d, $4e, $4f, $50, $50, $51, $25 - db $25, $52, $53, $54, $50, $55, $56, $25 - db $57, $58, $59, $5a, $5b, $5c, $5d, $5e - db $7e, $5f, $60, $61, $50, $62, $63, $64 - db $65, $66, $67, $68, $69, $6a, $6b, $6c - db $6d, $6e, $6f, $70, $71, $72, $73, $7c - db $74, $75, $76, $77, $78, $79, $7a, $7d + db $25, $25, $25, $26, $27, $28, $29, $25 + db $25, $25, $2a, $2b, $2c, $2d, $2e, $25 + db $25, $2f, $30, $31, $32, $33, $34, $25 + db $25, $35, $36, $37, $38, $39, $25, $25 + db $25, $3a, $3b, $3c, $3d, $3e, $3f, $25 + db $25, $40, $41, $42, $43, $44, $45, $25 + db $25, $46, $47, $48, $49, $4a, $4b, $25 + db $25, $4c, $4d, $4e, $4f, $4f, $50, $25 + db $25, $51, $52, $53, $4f, $54, $55, $25 + db $56, $57, $58, $59, $5a, $5b, $5c, $5d + db $7c, $5e, $5f, $60, $4f, $61, $62, $63 + db $64, $65, $66, $67, $68, $69, $6a, $6b + db $6c, $6d, $6e, $6f, $70, $71, $72, $7a + db $73, $74, $75, $76, $77, $78, $79, $7b db $1a, $1a, $1f, $21, $20, $1e, $24, $23 db $1a, $1a, $1b, $22, $1c, $1d, $1a, $1a diff --git a/15TheDevil.inc b/15TheDevil.inc index 789acae..6730d04 100644 --- a/15TheDevil.inc +++ b/15TheDevil.inc @@ -15,134 +15,286 @@ TheDevil: dw .fDraw dw .fPrintPrep -.fInit: ret -.fUpdate: ret +.fInit: + ld hl, CVS + ld a, 0 + ld [hl+], a ; CVS+0 timer for animatinos + ld [hl+], a + ld [hl+], a ; CVS+2 frame for locks + ld [hl+], a ; CVS+3 frame for chain + ld [hl+], a ; CVS+4 index into chain + + ld a, [.chains] + ld c, a + ld hl, MY_OAM + 14*4 + ld a, 5 + .drawSprites + inc hl ; x + inc hl ; tile id + ld [hl], a + inc hl ; attrs + inc hl ; y + dec c + jp nz, .drawSprites + + ret +.fUpdate: + ld hl, CVS + call IncrementTimer + + ld a, [CVS+1] ; checking the high byte of the timer + cp a, $06 ; $10 00 = 1 second + jp c, :+ ; if the timer is less than $0600, skip + ; if the timer is greater or equal to $0600, reset it + ld a, 0 + ld [CVS], a + ld [CVS+1], a + + + ; increment the frame for the locks + ld b, 3 + ld a, [CVS+2] + inc a + call ArrayClampLoopingB + ld [CVS+2], a + + + ; increment the frame for the chain animation + ld hl, .chains + 1 + ld a, [CVS+3] + inc a + call ArrayClampLooping + ld [CVS+3], a + : + + ;set index into links to zero + ld a, 0 + ld [CVS+4], a + .chainLoop + ; draw a link using index into links + ; find the link animation we're interested in + ld de, MY_OAM + 14*4 ; zeroth link OAM entry + + ; this is complex so that i don't have to provide labels for individual paths. + ; ld bc, .chain2 - .chain1 ; i.e., we're replacing this with a calculation. + ld a, [.chains+1] ; get the length of the first animation. + add a, a ; double that bc each point in an animation is 2 bytes. + inc a ; increment because each animation has a length prefix. + ld b, 0 + ld c, a ; now bc contains the length of a chain animation. + + ld hl, .chains+1 ; zeroth link + ld a, [CVS+4] ; index into links + + ; add bc to hl a times and also add 4 to de a times + cp a, 0 + jp z, .foundLinkAnim + .lookingForLinkAnim + add hl, bc + inc de + inc de + inc de + inc de + dec a + jp nz, .lookingForLinkAnim + .foundLinkAnim + ; now hl points to a chain + + ld a, [CVS+3] ; index into link animation + ld b, 0 + ld c, a + inc hl ; skip length of animation + add hl, bc + add hl, bc ; hl + 2*a = frame of animation + + ; set y,x for that llink to the animaion values + ; load [hl] into [de] and [hl+1] into [de+1] + ld a, [hl] + inc hl + ld [de], a + inc de + ld a, [hl] + ld [de], a + + ; increment index into links + ld hl, .chains + ld a, [CVS+4] + inc a + call ArrayClampLooping + ld [CVS+4], a + + ; if index into links is not zero, jump back to .chainLoop + cp a, 0 + jp nz, .chainLoop + .doneWithChain + + ret .fDraw: ret .fPrintPrep: ret + + +.chains + db 13 +db 9, 37, 31, 37, 31, 37, 31, 37, 31, 37, 31, 37, 31, 37, 31, 37, 31, 37, 31 +db 9, 43, 30, 44, 30, 45, 32, 45, 33, 43, 34, 43, 35, 43, 34, 43, 32, 43, 31 +db 9, 51, 32, 52, 34, 53, 36, 51, 37, 48, 38, 48, 39, 49, 37, 51, 35, 50, 34 +db 9, 56, 37, 57, 39, 58, 42, 56, 42, 53, 43, 53, 45, 54, 43, 56, 41, 56, 39 +db 9, 61, 43, 61, 44, 61, 46, 60, 47, 59, 48, 59, 49, 60, 49, 61, 46, 61, 44 +db 9, 67, 49, 67, 50, 66, 52, 65, 51, 66, 51, 65, 52, 66, 52, 66, 51, 66, 50 +db 9, 71, 54, 71, 55, 71, 55, 71, 54, 71, 53, 71, 54, 72, 54, 72, 53, 71, 54 +db 9, 76, 59, 76, 59, 77, 58, 77, 57, 77, 55, 78, 55, 78, 54, 78, 55, 77, 58 +db 9, 83, 61, 83, 61, 84, 59, 84, 58, 84, 57, 85, 56, 84, 56, 84, 57, 84, 59 +db 9, 91, 61, 91, 61, 92, 60, 91, 58, 91, 59, 91, 57, 91, 56, 91, 58, 91, 60 +db 9, 98, 60, 98, 60, 98, 59, 97, 57, 98, 58, 98, 56, 97, 56, 98, 57, 98, 59 +db 9, 105, 58, 104, 57, 104, 56, 103, 55, 104, 56, 104, 55, 104, 56, 105, 57, 106, 57 +db 9, 110, 52, 110, 52, 110, 52, 110, 52, 110, 52, 110, 52, 110, 52, 110, 52, 110, 52 + + + + + + .SpriteTiles: + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$1f,$1f,$2f,$38,$4f,$7f,$48,$78,$48,$78,$47,$7f + db $00,$00,$00,$00,$f0,$f0,$e8,$38,$e4,$fc,$24,$3c,$24,$3c,$c4,$fc + db $40,$7f,$40,$7f,$40,$7f,$40,$7f,$20,$3f,$10,$1f,$0f,$0f,$00,$00 + db $04,$fc,$04,$fc,$04,$fc,$04,$fc,$08,$f8,$10,$f0,$e0,$e0,$00,$00 + db $00,$00,$18,$3c,$3c,$66,$66,$42,$66,$42,$3c,$66,$18,$3c,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$0f,$0f,$10,$1f,$20,$3f,$40,$79 + db $00,$00,$38,$38,$7c,$44,$fe,$92,$ee,$2a,$de,$d2,$7c,$e4,$38,$e8 + db $80,$f0,$80,$e0,$80,$e0,$80,$f0,$40,$79,$20,$3f,$10,$1f,$0f,$0f + db $10,$f0,$10,$70,$10,$70,$10,$f0,$20,$e0,$40,$c0,$80,$80,$00,$00 + db $00,$00,$00,$00,$0c,$0c,$3f,$33,$3f,$2c,$73,$53,$71,$51,$71,$51 + db $00,$00,$00,$00,$00,$00,$00,$00,$80,$80,$c0,$40,$c0,$40,$c0,$40 + db $39,$29,$38,$28,$38,$28,$1f,$1f,$70,$7f,$40,$7f,$40,$7f,$20,$3f + db $c0,$40,$e0,$a0,$f8,$b8,$c8,$f8,$08,$f8,$04,$fc,$04,$fc,$04,$fc + db $20,$3f,$20,$3f,$20,$3f,$20,$3f,$20,$3f,$10,$1f,$13,$1f,$1c,$1c + db $04,$fc,$04,$fc,$04,$fc,$02,$fe,$02,$fe,$0e,$fe,$f0,$f0,$00,$00 .SpriteTilesEnd: ; original export script by gabriel reis, modified by shoofle - - + .KeyArtTiles: - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $ff,$ff,$84,$ff,$24,$ff,$a4,$ff,$95,$ff,$55,$ff,$77,$ff,$3f,$ff - db $ff,$ff,$3f,$ff,$8f,$ff,$87,$ff,$b0,$ff,$63,$fc,$cf,$f0,$9f,$e0 - db $ff,$ff,$fc,$ff,$f3,$ff,$e3,$ff,$0c,$ff,$e6,$1f,$f3,$0f,$f9,$07 - db $3f,$40,$78,$00,$60,$00,$a0,$de,$a4,$c6,$a0,$c0,$e0,$80,$e2,$82 - db $fc,$00,$1e,$00,$06,$00,$05,$7b,$25,$63,$05,$03,$05,$03,$4d,$43 - db $3e,$3f,$7c,$7f,$fe,$ff,$ff,$ff,$fc,$ff,$fe,$ff,$fb,$ff,$f8,$ff - db $3f,$7f,$3f,$7f,$1f,$7f,$4f,$3f,$0f,$5f,$0f,$1f,$0f,$3f,$df,$3f - db $3f,$ff,$f8,$ff,$f3,$fc,$e6,$f8,$ec,$f0,$c8,$f0,$c8,$f0,$98,$e0 - db $31,$c1,$98,$61,$9f,$23,$1c,$07,$08,$17,$06,$19,$05,$0a,$02,$cd - db $99,$87,$b0,$8f,$ff,$c0,$2b,$f4,$98,$64,$f0,$08,$50,$a0,$c0,$31 - db $f9,$ff,$1f,$ff,$8f,$7f,$f7,$0f,$73,$0f,$19,$07,$0c,$03,$06,$01 - db $b8,$c0,$30,$c1,$30,$c1,$63,$80,$67,$81,$c7,$01,$8e,$03,$8e,$03 - db $00,$87,$00,$03,$00,$01,$00,$01,$00,$00,$00,$00,$10,$80,$00,$c0 - db $c0,$21,$00,$e1,$00,$c1,$00,$80,$00,$00,$00,$00,$04,$00,$00,$01 - db $02,$01,$01,$80,$80,$c0,$80,$e0,$70,$80,$3c,$c0,$3e,$e0,$3f,$f0 - db $7f,$ff,$bf,$7f,$9f,$7f,$df,$3f,$6f,$1f,$2f,$1f,$37,$0f,$13,$0f - db $0e,$03,$1e,$07,$1e,$27,$3e,$0f,$7f,$0f,$ff,$1f,$81,$7f,$00,$ff - db $3f,$f8,$3f,$fc,$3f,$fe,$3f,$ff,$3f,$ff,$7f,$ff,$7e,$ff,$7e,$ff - db $99,$07,$89,$07,$c1,$27,$e0,$03,$f0,$81,$b0,$c9,$f8,$c1,$f8,$e0 - db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$7f,$ff,$7f,$ff,$3f,$ff - db $ff,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff - db $07,$f8,$34,$cb,$76,$89,$70,$8f,$4f,$b0,$69,$96,$0d,$f2,$60,$9f - db $80,$7f,$52,$ad,$5a,$a5,$c3,$3c,$3a,$c5,$a3,$5c,$30,$cf,$86,$79 - db $08,$f0,$c8,$34,$10,$fe,$90,$7e,$38,$ff,$38,$ff,$7d,$fe,$ff,$fe - db $3f,$ff,$1f,$7f,$1f,$3f,$1f,$0f,$1f,$07,$0f,$c7,$0f,$c7,$0f,$47 - db $fe,$ff,$ff,$ff,$ff,$ff,$c3,$ff,$81,$ff,$00,$ff,$00,$ff,$00,$ff - db $4e,$b1,$68,$97,$8e,$f1,$80,$ff,$c0,$fe,$c8,$f0,$fe,$f0,$f3,$fc - db $04,$fb,$1e,$e1,$08,$f7,$00,$7f,$1f,$2f,$1f,$27,$0f,$03,$07,$01 - db $4a,$b5,$6b,$94,$00,$ff,$00,$ff,$fe,$fd,$fe,$f8,$fc,$f3,$f8,$e6 - db $74,$8b,$45,$bb,$69,$97,$03,$ff,$26,$df,$0e,$7f,$0e,$3f,$1c,$7f - db $fd,$fe,$fd,$fe,$fd,$fe,$85,$fe,$00,$ff,$00,$cf,$80,$07,$80,$07 - db $4f,$87,$4f,$87,$cf,$07,$8f,$07,$9f,$07,$ff,$0f,$ff,$ff,$ff,$ff - db $fe,$ff,$fe,$ff,$fe,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff - db $02,$e1,$02,$81,$06,$81,$07,$81,$87,$c1,$01,$c7,$04,$fb,$04,$cf - db $f1,$fe,$fe,$ff,$fe,$ff,$f8,$ff,$f0,$f8,$e0,$f8,$e9,$f0,$d2,$e0 - db $c3,$00,$43,$80,$03,$c0,$03,$e0,$0e,$31,$18,$07,$37,$0f,$6f,$1f - db $70,$ce,$30,$c0,$30,$c0,$20,$c0,$39,$c0,$0d,$f0,$e4,$f8,$f6,$f8 - db $1c,$fe,$7c,$fe,$7c,$ff,$3e,$7f,$5e,$3f,$2e,$1f,$97,$0f,$97,$4f - db $80,$05,$80,$05,$80,$07,$80,$07,$c0,$0f,$c6,$ff,$c7,$ff,$c7,$ff - db $ff,$ff,$fc,$ff,$f8,$fc,$f0,$f8,$f0,$f8,$f0,$f9,$f0,$f9,$f0,$f9 - db $7d,$ff,$7f,$7c,$18,$18,$08,$08,$0e,$0c,$06,$04,$02,$02,$02,$03 - db $d2,$e4,$d2,$24,$72,$84,$72,$04,$62,$14,$63,$14,$20,$1f,$30,$1f - db $96,$48,$94,$48,$9c,$40,$98,$40,$90,$60,$31,$e0,$71,$e0,$72,$e1 - db $ff,$ff,$3f,$ff,$bf,$7f,$bf,$7f,$df,$3f,$5f,$3f,$3f,$df,$2f,$df - db $f0,$f9,$f0,$f9,$f0,$f9,$f0,$f9,$f0,$f9,$f0,$f9,$f0,$f9,$f0,$f9 - db $43,$01,$02,$01,$02,$01,$02,$01,$02,$01,$02,$01,$02,$01,$02,$01 - db $be,$9f,$fe,$df,$7e,$5f,$7e,$7f,$3e,$3f,$2e,$1f,$22,$1f,$38,$1f - db $73,$e1,$73,$e1,$63,$e1,$63,$e2,$63,$e2,$67,$e6,$7d,$ee,$68,$ff - db $2f,$9f,$2f,$9f,$2f,$9f,$2f,$df,$0f,$5f,$0f,$5f,$0f,$5f,$0f,$5f - db $f0,$f9,$f0,$f9,$f0,$fe,$e0,$fb,$e0,$ff,$e0,$fb,$e0,$fe,$e0,$fe - db $00,$45,$00,$29,$00,$11,$00,$10,$00,$10,$00,$10,$00,$10,$00,$10 - db $3e,$9f,$3e,$df,$3e,$9f,$3e,$8f,$3e,$8f,$7e,$0f,$7e,$0f,$7e,$1f - db $00,$f3,$30,$e3,$70,$e1,$70,$e3,$78,$e2,$78,$f2,$78,$f6,$78,$fe - db $10,$08,$30,$08,$30,$09,$30,$08,$00,$18,$00,$10,$00,$10,$00,$10 - db $0f,$df,$07,$9f,$07,$df,$07,$df,$07,$df,$07,$df,$0f,$df,$0f,$ff - db $fc,$fe,$fc,$fe,$fc,$fe,$fc,$fe,$fc,$fe,$fc,$ff,$fe,$ff,$fe,$ff - db $10,$00,$10,$00,$10,$00,$10,$00,$00,$08,$10,$08,$11,$08,$01,$98 - db $7e,$3f,$7e,$3f,$7e,$3f,$7e,$3f,$fe,$3f,$fe,$7f,$fe,$7f,$fe,$7f - db $7f,$fc,$7f,$fe,$7f,$fe,$7f,$fe,$7f,$fe,$7f,$fe,$7f,$ff,$7f,$ff - db $00,$10,$01,$10,$01,$10,$01,$10,$81,$10,$81,$10,$81,$10,$80,$11 - db $1f,$ff,$3f,$ff,$3f,$ff,$7f,$ff,$7f,$ff,$7f,$ff,$7f,$ff,$ff,$ff - db $fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$ff,$ff,$ff,$ff - db $11,$08,$01,$88,$01,$88,$01,$88,$01,$88,$03,$88,$03,$88,$03,$88 - db $fe,$7f,$fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff - db $82,$11,$82,$11,$82,$11,$82,$11,$82,$11,$82,$11,$82,$11,$82,$11 - db $ff,$ff,$ff,$ff,$fe,$ff,$fc,$ff,$f8,$fe,$f8,$fc,$f0,$fe,$f0,$ff - db $03,$c8,$01,$c0,$01,$80,$00,$00,$00,$00,$00,$10,$00,$1f,$00,$ff - db $fe,$ff,$fe,$ff,$fe,$ff,$7e,$ff,$7e,$ff,$3e,$ff,$3e,$ff,$3e,$ff - db $7f,$ff,$7f,$ff,$7f,$ff,$7f,$fe,$7f,$fc,$7e,$f0,$78,$e4,$70,$ef - db $82,$11,$82,$11,$82,$11,$80,$11,$01,$10,$00,$10,$00,$10,$00,$ff - db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$7f,$ff,$df,$3f,$ef,$1f,$0f,$ff - db $7f,$ff,$7f,$ff,$7f,$ff,$7f,$ff,$7f,$ff,$7f,$ff,$7f,$ff,$7f,$ff - db $f3,$fc,$fe,$fc,$fc,$fe,$fc,$fe,$fe,$ff,$fe,$ff,$ff,$ff,$ff,$ff - db $81,$c0,$80,$c0,$80,$e0,$c0,$e0,$c0,$f0,$cf,$f0,$ff,$e0,$ff,$ff - db $8f,$3f,$0f,$0f,$07,$0f,$07,$07,$02,$07,$02,$87,$01,$82,$01,$80 - db $c1,$f4,$91,$c4,$91,$c4,$91,$c4,$88,$e5,$c0,$e1,$c0,$f0,$e0,$f0 - db $ff,$ff,$0f,$ff,$41,$ff,$e0,$ff,$e6,$ff,$6c,$ff,$f9,$ff,$fb,$ff - db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$7f,$ff,$7f,$ff,$ff,$ff,$7f,$ff - db $7f,$ff,$3f,$ff,$bf,$ff,$3f,$ff,$7f,$ff,$7f,$ff,$ff,$ff,$ff,$ff - db $bc,$fc,$fe,$fe,$7f,$ff,$ff,$ff,$7f,$ff,$bf,$ff,$3f,$ff,$3f,$ff - db $ff,$ff,$ff,$ff,$ff,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$ff,$ff - db $fd,$ff,$fc,$ff,$ff,$ff,$ff,$ff,$fe,$ff,$ff,$ff,$3e,$ff,$3e,$7f - db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff - db $f7,$f7,$f7,$f7,$eb,$eb,$eb,$eb,$eb,$eb,$dd,$dd,$80,$80,$ff,$ff - db $d7,$d7,$d7,$d7,$d7,$d7,$d7,$d7,$ef,$ef,$ef,$ef,$03,$03,$ff,$ff - db $ff,$ff,$80,$80,$dd,$dd,$eb,$eb,$eb,$eb,$eb,$eb,$f7,$f7,$f7,$f7 - db $ff,$ff,$00,$00,$7d,$7d,$7d,$7d,$bb,$bb,$bb,$bb,$bb,$bb,$bb,$bb - db $1f,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff - db $f9,$ff,$fe,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff - db $64,$9b,$77,$88,$47,$b8,$64,$9b,$06,$f9,$30,$cf,$a7,$58,$37,$c8 - db $2d,$d2,$61,$9e,$0e,$f1,$79,$86,$4d,$b2,$61,$9e,$0a,$f5,$7b,$84 - db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$f8,$ff,$f1,$fc - db $00,$7f,$00,$00,$00,$00,$01,$00,$01,$00,$1f,$00,$60,$1f,$88,$77 - db $00,$fe,$40,$80,$40,$80,$40,$80,$40,$80,$38,$c0,$06,$f8,$31,$ce - db $50,$3f,$c0,$30,$80,$43,$81,$4f,$87,$5f,$8f,$5f,$0f,$df,$80,$df - db $0a,$fc,$02,$0c,$02,$c0,$82,$f0,$e2,$f8,$f3,$f8,$f1,$fb,$01,$fb - db $96,$ff,$c4,$f4,$e4,$ff,$fb,$ff,$f3,$ff,$f7,$ff,$e7,$ff,$cf,$ff - db $6b,$ff,$23,$2f,$27,$ff,$df,$ff,$df,$ff,$cf,$ff,$e7,$ff,$f3,$ff - db $fe,$ff,$fc,$ff,$30,$30,$20,$20,$60,$60,$40,$41,$c0,$c1,$81,$a0 - db $46,$21,$00,$e7,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$10,$02 +db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$fe,$00,$ff,$00,$fa,$00,$fd,$00,$ea,$00,$f5,$00 + db $a8,$00,$f4,$00,$a0,$00,$d4,$00,$80,$00,$40,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$1f,$00,$35,$0a,$05,$3a,$10,$6f + db $00,$00,$01,$03,$01,$03,$00,$03,$80,$03,$80,$03,$00,$83,$00,$83 + db $00,$00,$08,$7b,$8c,$ff,$02,$ff,$10,$ff,$8b,$ff,$44,$ff,$09,$ff + db $00,$00,$40,$c0,$40,$c0,$00,$f0,$90,$f0,$f0,$f0,$a0,$f8,$58,$f8 + db $a8,$00,$54,$00,$a0,$00,$50,$00,$80,$00,$40,$00,$00,$00,$00,$00 + db $02,$81,$02,$81,$04,$83,$7c,$82,$3f,$43,$ff,$ff,$fc,$fe,$00,$66 + db $1f,$60,$1f,$60,$0f,$70,$30,$0f,$30,$0e,$30,$0e,$28,$16,$28,$16 + db $00,$c2,$00,$c2,$00,$c3,$01,$83,$04,$02,$08,$04,$04,$08,$00,$0e + db $1f,$3f,$06,$3f,$05,$9f,$83,$1f,$07,$1f,$2f,$1f,$73,$0f,$2d,$13 + db $e0,$ff,$fd,$ff,$f8,$fc,$fc,$fc,$70,$f8,$f8,$fc,$fc,$fc,$f0,$f0 + db $64,$02,$6c,$02,$6e,$01,$6e,$01,$77,$00,$37,$00,$33,$00,$33,$00 + db $60,$1e,$40,$3e,$40,$3e,$40,$3e,$00,$fc,$00,$fc,$83,$7c,$9f,$60 + db $02,$07,$00,$04,$00,$07,$01,$00,$1f,$00,$e3,$00,$83,$00,$03,$00 + db $21,$1f,$00,$7f,$03,$ff,$c6,$3e,$e6,$1e,$02,$fe,$80,$7e,$f9,$07 + db $f0,$f0,$f0,$f0,$f0,$f0,$30,$30,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$03,$00,$0f,$00,$3f,$00,$30,$00,$60,$00 + db $00,$00,$74,$08,$f6,$08,$c1,$00,$e0,$00,$e0,$00,$39,$00,$07,$08 + db $31,$00,$39,$00,$18,$00,$18,$00,$9c,$00,$9e,$00,$cf,$00,$e3,$04 + db $be,$40,$f8,$00,$60,$00,$01,$00,$07,$00,$bf,$00,$fe,$01,$60,$9f + db $03,$00,$07,$00,$7f,$00,$fe,$01,$fc,$03,$9c,$63,$3e,$c1,$fe,$c1 + db $fb,$07,$e3,$1f,$c3,$3f,$03,$ff,$07,$ff,$0f,$ff,$1f,$ff,$1e,$fe + db $e0,$00,$07,$c0,$0f,$c0,$0f,$40,$3f,$40,$1f,$60,$0f,$70,$0f,$70 + db $07,$00,$03,$00,$f9,$00,$fc,$00,$fc,$00,$ff,$00,$3f,$c0,$1f,$e0 + db $f0,$03,$f8,$01,$f8,$00,$ec,$10,$33,$0c,$1d,$02,$86,$01,$e3,$00 + db $03,$ff,$1c,$fd,$71,$00,$e1,$00,$83,$00,$07,$00,$0f,$00,$1f,$00 + db $3c,$c3,$fc,$03,$fc,$03,$f8,$07,$f0,$0f,$f1,$0f,$e1,$1f,$c3,$3f + db $3e,$fe,$3c,$fc,$78,$f8,$f8,$f8,$f0,$f0,$e0,$e0,$c0,$c0,$80,$80 + db $0f,$70,$0f,$70,$07,$38,$07,$38,$07,$18,$07,$18,$07,$78,$07,$78 + db $0f,$f0,$87,$78,$03,$fc,$21,$fe,$10,$ff,$18,$ff,$0c,$ff,$0e,$ff + db $f1,$00,$f8,$00,$fc,$00,$ff,$00,$ff,$00,$7f,$80,$3f,$c0,$0f,$f0 + db $3f,$00,$7f,$00,$ff,$00,$fe,$01,$fe,$01,$fc,$03,$f9,$07,$e3,$1f + db $87,$7f,$8e,$7e,$1c,$fc,$38,$f8,$70,$f0,$e0,$e0,$c0,$c0,$80,$80 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$03,$07,$07,$0e,$0f + db $03,$fc,$23,$dc,$33,$cc,$33,$cc,$f3,$0c,$f0,$0e,$68,$96,$18,$e7 + db $09,$f9,$80,$70,$80,$60,$80,$60,$c0,$30,$40,$30,$c0,$38,$c0,$38 + db $00,$ff,$c0,$ff,$78,$7f,$0f,$0f,$00,$00,$00,$00,$00,$00,$00,$00 + db $0f,$ff,$3c,$fc,$f8,$f8,$e0,$e0,$01,$01,$0f,$0f,$3f,$3f,$fe,$ff + db $00,$00,$00,$00,$1f,$1f,$7f,$7f,$fc,$ff,$e0,$ff,$81,$fe,$03,$fc + db $00,$00,$00,$00,$f8,$f8,$fe,$fe,$07,$ff,$03,$ff,$e1,$1f,$fc,$03 + db $00,$00,$01,$01,$03,$03,$02,$03,$00,$03,$80,$83,$c0,$c1,$60,$e0 + db $1c,$1f,$f8,$ff,$f0,$ff,$00,$ff,$01,$fe,$63,$9c,$73,$88,$70,$88 + db $30,$cf,$e0,$1f,$c0,$3f,$80,$7f,$03,$ff,$0c,$fc,$18,$f8,$20,$e0 + db $00,$f8,$00,$f8,$38,$f8,$e0,$e0,$80,$80,$00,$00,$00,$00,$00,$00 + db $01,$01,$03,$03,$07,$07,$0f,$0f,$1f,$1f,$3f,$3f,$3e,$3f,$7e,$7f + db $fc,$ff,$f8,$ff,$f0,$ff,$e1,$fe,$83,$fc,$07,$f8,$0f,$f0,$0f,$f0 + db $1f,$e0,$3f,$c0,$7f,$80,$ff,$00,$ff,$00,$fe,$00,$f8,$00,$f1,$00 + db $fc,$03,$fe,$01,$fe,$01,$ff,$00,$ff,$00,$87,$00,$83,$40,$83,$60 + db $38,$f0,$18,$f1,$18,$f9,$0c,$f9,$8c,$7f,$85,$7f,$c7,$3f,$c7,$3e + db $70,$88,$70,$88,$70,$88,$70,$89,$f0,$0b,$f0,$0f,$f0,$0e,$f0,$0e + db $7c,$7f,$78,$7f,$78,$7f,$f0,$ff,$f8,$ff,$f8,$ff,$f8,$ff,$f8,$ff + db $1f,$e0,$3f,$c0,$7f,$80,$ff,$00,$ef,$1e,$e7,$1f,$f0,$0f,$fe,$01 + db $e1,$00,$c1,$00,$83,$00,$07,$00,$0c,$03,$9e,$80,$f0,$e0,$08,$f0 + db $03,$e0,$01,$f0,$01,$f8,$c1,$f8,$64,$f8,$26,$f8,$03,$7c,$03,$1c + db $e3,$1e,$e7,$1e,$f7,$0c,$f3,$0c,$f9,$06,$79,$06,$39,$06,$3d,$02 + db $f0,$0c,$f0,$08,$f0,$08,$b0,$09,$90,$09,$90,$0b,$90,$0a,$90,$0e + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$01 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$ff,$ff,$ff + db $f8,$ff,$f0,$ff,$f0,$ff,$f0,$ff,$e0,$ff,$c0,$ff,$83,$fc,$c0,$ff + db $ff,$00,$ff,$00,$7f,$80,$3f,$c0,$03,$fc,$00,$ff,$e0,$1f,$fc,$03 + db $80,$7c,$c0,$3f,$f0,$0f,$fc,$03,$ff,$00,$7f,$80,$1f,$e0,$03,$fc + db $01,$0e,$01,$06,$01,$c2,$01,$f0,$00,$f8,$c8,$30,$f8,$00,$f8,$00 + db $9f,$00,$8f,$00,$c7,$00,$c0,$00,$e0,$00,$e0,$00,$70,$00,$3f,$00 + db $80,$0c,$00,$08,$00,$08,$08,$00,$08,$00,$18,$00,$70,$00,$e0,$00 + db $03,$03,$03,$03,$07,$07,$07,$07,$06,$07,$0e,$0f,$0c,$0f,$0c,$0f + db $f8,$ff,$c0,$ff,$07,$f8,$1f,$e0,$3f,$c0,$7f,$80,$7f,$80,$70,$80 + db $de,$e1,$18,$e1,$00,$f0,$00,$78,$00,$1c,$00,$04,$20,$04,$10,$28 + db $00,$fe,$00,$fe,$0c,$f2,$0f,$f0,$0f,$f0,$87,$78,$07,$78,$07,$78 + db $0f,$30,$03,$0c,$03,$0c,$07,$08,$07,$18,$0f,$10,$8e,$10,$8e,$10 + db $98,$00,$98,$00,$18,$00,$10,$00,$30,$00,$20,$00,$20,$00,$60,$00 + db $1f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $c0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $0c,$0f,$0c,$0f,$06,$07,$02,$03,$00,$01,$00,$00,$00,$00,$00,$00 + db $71,$82,$31,$c3,$10,$e1,$10,$e1,$30,$c1,$00,$ff,$00,$00,$00,$00 + db $00,$10,$00,$90,$00,$f0,$00,$80,$00,$80,$01,$01,$00,$03,$00,$07 + db $43,$3c,$43,$3c,$03,$3c,$27,$38,$c7,$f8,$0f,$f0,$0f,$f0,$3f,$c0 + db $8e,$10,$8c,$10,$8c,$10,$8c,$10,$be,$3e,$bf,$3f,$82,$73,$01,$e3 + db $40,$00,$40,$00,$c0,$00,$80,$40,$80,$00,$80,$00,$80,$80,$00,$80 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$0f,$00,$0f,$00,$07,$0c,$30 + db $00,$07,$01,$0e,$03,$1c,$06,$38,$1c,$e0,$77,$80,$3c,$80,$30,$00 + db $ff,$00,$cc,$00,$18,$00,$30,$00,$e0,$00,$80,$00,$00,$00,$00,$00 + db $01,$e0,$01,$c0,$01,$80,$03,$c0,$02,$f0,$04,$78,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$8a,$00,$00,$00,$2a,$00,$00,$00 + db $0c,$30,$24,$38,$16,$18,$08,$0f,$04,$07,$00,$00,$00,$00,$00,$00 + db $30,$00,$00,$60,$00,$c0,$00,$c0,$00,$80,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$08,$00,$00,$00,$22,$00,$00,$00 + db $08,$00,$00,$00,$22,$00,$00,$00,$aa,$00,$04,$00,$2a,$00,$01,$00 + db $aa,$00,$00,$00,$aa,$00,$01,$00,$aa,$00,$45,$00,$aa,$00,$15,$00 + db $aa,$00,$45,$00,$aa,$00,$11,$00,$aa,$00,$55,$00,$ab,$00,$55,$00 + db $88,$00,$ff,$ff,$41,$63,$63,$63,$aa,$63,$36,$36,$9c,$36,$19,$1c + db $aa,$00,$ff,$ff,$ca,$61,$71,$61,$ab,$61,$35,$61,$bb,$33,$56,$33 + db $aa,$00,$d5,$c0,$aa,$80,$d5,$80,$2e,$80,$55,$80,$bb,$00,$55,$00 + db $ae,$00,$55,$00,$bb,$00,$55,$00,$ff,$00,$55,$00,$ff,$00,$57,$00 + db $ff,$00,$55,$00,$ff,$00,$55,$00,$ff,$00,$df,$00,$ff,$00,$7f,$00 + db $ae,$1c,$55,$3e,$bf,$36,$36,$63,$ef,$63,$55,$63,$ff,$ff,$55,$00 + db $de,$33,$57,$12,$bf,$1e,$4d,$1e,$ff,$0c,$5d,$0c,$ff,$ff,$77,$00 + db $ff,$00,$55,$00,$ff,$00,$77,$00,$ff,$00,$df,$00,$ff,$00,$7f,$00 + db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7e,$00,$c2,$01,$02,$81 .KeyArtTilesEnd: .BackgroundCopy: ; tiles start at 26 - db $6d, $6b, $1b, $1c, $1d, $67, $68, $6d - db $76, $6c, $6a, $1e, $1f, $20, $69, $6d - db $66, $21, $22, $23, $24, $25, $6d, $6d - db $63, $65, $26, $27, $28, $29, $2a, $6d - db $6d, $64, $2b, $78, $77, $2c, $2d, $2e - db $6d, $2f, $30, $74, $75, $31, $32, $33 - db $6d, $34, $35, $36, $37, $38, $39, $3a - db $3b, $3c, $3d, $3e, $3f, $40, $41, $6d - db $42, $43, $44, $79, $7a, $45, $7d, $46 - db $47, $48, $49, $7b, $7c, $4a, $7e, $4b - db $4c, $4d, $4e, $72, $73, $4f, $50, $51 - db $52, $53, $54, $6d, $6d, $55, $56, $57 - db $58, $59, $5a, $6d, $6d, $62, $5b, $6d - db $5c, $5d, $5e, $6d, $6d, $5f, $60, $61 - db $6d, $6d, $6d, $70, $71, $6d, $6d, $6d - db $6d, $6d, $6d, $6e, $6f, $6d, $6d, $6d + db $1b, $1c, $7e, $1d, $1e, $1f, $20, $1a + db $21, $1a, $22, $23, $24, $25, $26, $1a + db $1a, $1a, $27, $28, $29, $2a, $2b, $1a + db $2c, $2d, $2e, $2f, $30, $31, $1a, $1a + db $32, $33, $34, $35, $36, $37, $1a, $1a + db $38, $39, $3a, $3b, $3c, $1a, $1a, $3d + db $3e, $3f, $40, $41, $42, $43, $44, $45 + db $46, $47, $48, $49, $4a, $4b, $4c, $4d + db $1a, $1a, $4e, $4f, $50, $51, $52, $53 + db $54, $55, $56, $57, $58, $59, $5a, $5b + db $5c, $5d, $5e, $5f, $60, $61, $62, $63 + db $64, $65, $66, $67, $68, $69, $1a, $1a + db $1a, $6a, $6b, $6c, $6d, $1a, $1a, $6e + db $1a, $6f, $70, $1a, $71, $72, $73, $74 + db $1a, $1a, $6e, $75, $76, $77, $78, $79 + db $72, $73, $74, $7a, $7b, $7c, $7d, $7d + + .BackgroundCopyEnd: diff --git a/card_art/14temperance.aseprite b/card_art/14temperance.aseprite index 0404a46999bb21e45d18e10488fd63c573da5ac6..0674dbb31bfb6427f51f688f36c7b5306eb8ef86 100644 GIT binary patch delta 1277 zcmV&qX1+8005)0jk*C31_S^ABOn0)000I6003i? zRstk{&jSDec$~dh3AW@Q2o$*gohJf?fM)r#(eHI728I8<6gd9d5-bEVRdomw&E z&aB^~9eQCma-S?4|D?j~!1IciB#QIxDD9VjC9azycinDJ|5wDJ;ie|~cL_-qqIz|- z4CB!5-K740YXY|;|7PA^?}&!$kM;HntJ!GL)xeNra9t#Colw^c=7;IX9 zS8H6uZ)Xm>+^XG7AjfMaK6=N=D?7hO^tVt9wew%rXRO!zC3)o4apni0I9@X`oU=hj zX=%M-&)X;!x`@>H;*zwE49jJP%9A$OUrw5a!+CTxRiR1v6-1VVN%=SWb;?msc&g9} zs2l|f4M#il|IpReWBN*BAQqTXLUM!*skM+!D&bnEI*( zti(-6D}joHN6IZnL z6XLAf&U|~Ur{3Za~60&uK36D!cWgDuvnJA%O4I^f54x}#>a+!K{t3K#VM8g=7@Ci zAX@uoGxzucY8@=twiVWgSJI$6v@cNLyD5r^qs`~tBkO*|I@`GE2MZY$XNEvmTR zpD|~KPZG6pGn9kk-u&3_H?x+|LduzCxVyc95n5~;QpLHy!meh{BWco9SO#2#1 z4^%xy$iK>5v6xcKWL!ZM!L)+P=1xDBwokbASD*xzW9$8i`a!&$<(9sGo;nH;`%P3@ zJ$rm-+KuVXCzfwH=RV|MWCwenBZs8W3_u(f)*X-@`nuMk4$=)vh#jc`*Q>XdS zooN^37btk=ZN@wR80gtrZ2FU`F8fP>gWPaqc*5>JVoQ`-fDHpyG!;V+z^uY+!vDj{hXD+t*l5{q0rn{YBY4$uCcR zCCRg43oHS%a0a{rvsenN0s#V(1Pxmm@c;k-1t0+c2mlBG{{sL300000000O85R-lm zAAeoU)lNfE5J1t3OVQ$5w8h=6xVyXk|3|P$PQnS3te4rDNhL{=3aY54hT3TVtB!io zG|(8eCYouXl{VU=-a#i_bd&k_yN6!-=x2bzsAtJB#4sa_MtzKNCYWT3>8Q^z%N+B; zLev*oVmY)GRzq83oelDAvc)z#e6!0Q`#RzNfJ2Tr=7dwuIOl>(uDIrgTkg2$fk!@h n;+Yp-dE=cAzLLKwp^Q?BsiY$61(Z`rQMCU7P%9LAlVuLh$-{E{ delta 1294 zcmV+p1@Zd(9kU(+GY^phehsq@008>&r2u3A005=2jk*C36$AhPBOn0)000I6003o^ zRstk{-U9#tc$~FZfp+8|2o(7Lf4&F<0-9{L?a}u-#t6|tKzEEk5e5ptkJoSYq+hM~8`KZ04Pbb#pLpX-Cj`CvH*Y`@LA%j{m z!=yZF}j;c_I|X0+nK*pZ=VNx$Mui(@e0e?Y0=rhkYjPN~pVcc!`;S<+2$PHaVj~kx#gm$!k4x+GiOaTpmg!SiLVkEY|F^P&^BN zlZ@~VJDX-|&1>Ls=D^FXYGwifua#i-z{x9v-y`BH6jSZ|m;D+0^?pkpc?Hh6cNE~Y z62rL~&q%E-H0*ibOO0+KRlc|+twY0dk)iUW9r$N?N|UYO0FU~_M(ed$wKF^BTbitr z(XUI6dc>-;0xCy=0%2>A^{NTB+{4&^r!>usisLovETXcZDq&qw7Zzgqg>!x3ij0nM zOAL05rLS7TO5Aj`5~xUCi6{lm)QS4!ffh-`LvW;0wLVwp9Ee@WwUCm(@X8ZN6<_d7 zj_C$4CRfIzJ6@;_thnrJ3xmZX5($a|1c$!asY<{3Q2j`g8WHQV2vvzP>bvXvSN z==tIf-EWysb{y}~d2C1-4{;E9$7?VAz?yAQFR2!BKmU{ctEcBYx%%W&nvF6G=IvUU&?;LpUB3?hG@_Y z-bisurM@{L-CT&)x!KeaUyfRT2Me}ih1oC-IxQ!QY3Qi}dDG)CJqsEhi_!$S(2)-q z-|xEOC%;7%_vbU_%~Cx+`8~|`P2A5qmRn2e z_ot-#okXVn7)cLQJx0j?%3QITQp{vrK@`EXg38uTUrReD-1;j}0?W03_5McvASh?K zr|+kZ;^^m1ue5sic+WJH_sBhZSt8o~qX{MEFziqW$p@}1v`(+<*lJ%R97oo@<_065 zMUn-$9|3pgyjx5z)@J{G1^WtJ|F@KHG z)oMgB6hP5ix2d~M-QC^Y-M#()Z|Eva;WA{Pf%TGX&Ur{8ilW3nl%y%8jB+Xh@4qUk zqM90N15F+EG|)&B&4I3kR@z9?o?&MPopjMn550k|kA4OiWQgHFH^L}mj5EPxpqpZv z8D>-F0^K|dET)?&N%0S%UE~C zH8#`^$o1EBv=$|wB0kkL=bCWF& E&Io{s-2eap diff --git a/card_art/15thedevil.aseprite b/card_art/15thedevil.aseprite index 3975ad1158b2cea9aba41bd438b56eaeb23daa73..759d2f0e027208db5c282ad614f28b10daff3bf7 100644 GIT binary patch delta 3123 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 delta 3481 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 is determined at link time. + +def _ROM equ $0000 ; $0000-$3FFF / $0000-$7FFF (prefer `STARTOF(ROM0)`) +def _ROMBANK equ $4000 ; $4000-$7FFF (prefer `STARTOF(ROMX)`) +def _VRAM equ $8000 ; $8000-$9FFF (prefer `STARTOF(VRAM)`) +def _SRAM equ $A000 ; $A000-$BFFF (prefer `STARTOF(SRAM)`) +def _RAM equ $C000 ; $C000-$CFFF / $C000-$DFFF (prefer `STARTOF(WRAM0)`) +def _RAMBANK equ $D000 ; $D000-$DFFF (prefer `STARTOF(WRAMX)`) +def _OAMRAM equ $FE00 ; $FE00-$FE9F (prefer `STARTOF(OAM)`) +def _IO equ $FF00 ; $FF00-$FF7F, $FFFF (prefer `ldh [c]` to `ld [_IO+c]`) +def _HRAM equ $FF80 ; $FF80-$FFFE (prefer `STARTOF(HRAM)`) + + +;****************************************************************************** +; Cartridge header +;****************************************************************************** + +; Prefer RGBFIX instead of these values. +; Zero-filled space can be reserved for fixable header values like this: +; +; SECTION "Cartridge header", ROM0[$0100] +; nop :: jp $0150 ; Entry point ($0100-$0104) +; ds $150 - @, $00 ; Header ($0104-$014FF) filled with $00s for RGBFIX to populate + +; -- Nintendo logo ($0104-$0133) ---------------------------------------------- +; Prefer `rgbfix -f/--fix-spec l` for the official logo, or `rgbfix -L ` for a custom one +MACRO NINTENDO_LOGO + db $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D + db $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99 + db $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E +ENDM + +; -- CGB compatibility code ($0143) ------------------------------------------- +def CART_COMPATIBLE_DMG equ $00 ; default value if header is zero-filled +def CART_COMPATIBLE_DMG_GBC equ $80 ; prefer `rgbfix -c/--color-compatible` +def CART_COMPATIBLE_GBC equ $C0 ; prefer `rgbfix -C/--color-only` + +; -- SGB flag ($0146) --------------------------------------------------------- +def CART_INDICATOR_GB equ $00 ; default value if header is zero-filled +def CART_INDICATOR_SGB equ $03 ; prefer `rgblink -s/--sgb-compatible` + +; -- Cartridge type ($0147) --------------------------------------------------- +; Prefer `rgblink -m/--mbc_type ` +def CART_ROM equ $00 +def CART_ROM_MBC1 equ $01 +def CART_ROM_MBC1_RAM equ $02 +def CART_ROM_MBC1_RAM_BAT equ $03 +def CART_ROM_MBC2 equ $05 +def CART_ROM_MBC2_BAT equ $06 +def CART_ROM_RAM equ $08 +def CART_ROM_RAM_BAT equ $09 +def CART_ROM_MMM01 equ $0B +def CART_ROM_MMM01_RAM equ $0C +def CART_ROM_MMM01_RAM_BAT equ $0D +def CART_ROM_MBC3_BAT_RTC equ $0F +def CART_ROM_MBC3_RAM_BAT_RTC equ $10 +def CART_ROM_MBC3 equ $11 +def CART_ROM_MBC3_RAM equ $12 +def CART_ROM_MBC3_RAM_BAT equ $13 +def CART_ROM_MBC5 equ $19 +def CART_ROM_MBC5_RAM equ $1A +def CART_ROM_MBC5_RAM_BAT equ $1B +def CART_ROM_MBC5_RUMBLE equ $1C +def CART_ROM_MBC5_RAM_RUMBLE equ $1D +def CART_ROM_MBC5_RAM_BAT_RUMBLE equ $1E +def CART_ROM_MBC7_RAM_BAT_GYRO equ $22 +def CART_ROM_POCKET_CAMERA equ $FC +def CART_ROM_BANDAI_TAMA5 equ $FD +def CART_ROM_HUDSON_HUC3 equ $FE +def CART_ROM_HUDSON_HUC1 equ $FF + +; -- ROM size ($0148) --------------------------------------------------------- +; Prefer `rgbfix -p/--pad_value `, which pads to the smallest valid size +def CART_ROM_32KB equ $00 ; 2 banks +def CART_ROM_64KB equ $01 ; 4 banks +def CART_ROM_128KB equ $02 ; 8 banks +def CART_ROM_256KB equ $03 ; 16 banks +def CART_ROM_512KB equ $04 ; 32 banks +def CART_ROM_1024KB equ $05 ; 64 banks +def CART_ROM_2048KB equ $06 ; 128 banks +def CART_ROM_4096KB equ $07 ; 256 banks +def CART_ROM_8192KB equ $08 ; 512 banks +def CART_ROM_1152KB equ $52 ; 72 banks +def CART_ROM_1280KB equ $53 ; 80 banks +def CART_ROM_1536KB equ $54 ; 96 banks + +; -- SRAM size ($0149) -------------------------------------------------------- +; Prefer `rgbfix -r/--ram_size ` +def CART_SRAM_NONE equ 0 ; none +def CART_SRAM_2KB equ 1 ; 1 incomplete bank (homebrew only) +def CART_SRAM_8KB equ 2 ; 1 bank +def CART_SRAM_32KB equ 3 ; 4 banks +def CART_SRAM_128KB equ 4 ; 16 banks + +; -- Destination code ($014A) ------------------------------------------------- +def CART_DEST_JAPANESE equ $00 ; default value if header is zero-filled +def CART_DEST_NON_JAPANESE equ $01 ; prefer `rgbfix -j/--non-japanese` + + +;****************************************************************************** +; Deprecated constants +;****************************************************************************** + +def AUDLENF_DUTY equ AUD1LENF_DUTY + def AUDLEN_DUTY_12_5 equ AUD1LEN_DUTY_12_5 + def AUDLEN_DUTY_25 equ AUD1LEN_DUTY_25 + def AUDLEN_DUTY_50 equ AUD1LEN_DUTY_50 + def AUDLEN_DUTY_75 equ AUD1LEN_DUTY_75 + +def AUDLENF_TIMER equ AUD1LENF_TIMER + +def AUDENVF_INIT_VOL equ AUD1ENVF_INIT_VOL + +def AUDENVB_DIR equ AUD1ENVB_DIR + def AUDENVF_DIR equ AUD1ENVF_DIR + def AUDENV_DOWN equ AUD1ENV_DOWN + def AUDENV_UP equ AUD1ENV_UP + +def AUDENVF_PACE equ AUD1ENVF_PACE + +def AUDHIGHB_RESTART equ AUD1HIGHB_RESTART +def AUDHIGHB_LEN_ENABLE equ AUD1HIGHB_LEN_ENABLE + def AUDHIGH_RESTART equ AUD1HIGH_RESTART + def AUDHIGH_LENGTH_OFF equ AUD1HIGH_LENGTH_OFF + def AUDHIGH_LENGTH_ON equ AUD1HIGH_LENGTH_ON + +def AUDHIGHF_PERIOD_HIGH equ AUD1HIGHF_PERIOD_HIGH + +def LCDCB_BG8000 equ LCDCB_BLKS + def LCDCF_BG8800 equ LCDCF_BLK21 + def LCDCF_BG8000 equ LCDCF_BLK01 + +def IEB_HILO equ IEB_JOYPAD + def IEF_HILO equ IEF_JOYPAD +def IEF_LCDC equ IEF_STAT + +def sizeof_OAM_ATTRS equ OBJ_B + +def _VRAM8000 equ _VRAM +def _VRAM8800 equ _VRAM + $800 +def _VRAM9000 equ _VRAM + $1000 + +endc ; HARDWARE_COMPAT_INC diff --git a/misc.py b/misc.py index 9720805..dc558b0 100644 --- a/misc.py +++ b/misc.py @@ -1,3 +1,5 @@ +import re + def splitfour(the_string): """ takes a block of sprites output by gb-export.lua from aseprite. divides it into four line-by-line and returns them as separate sprite maps. @@ -42,3 +44,49 @@ def transpose_gb_tiles(the_string): return out +def list_from_length_prefix(the_string): + """ converts a string containing a length-prefixed list of entries into a python list""" + raw_list = the_string.strip(', \t').split(",") + length = int(re.search(r'db ([0-9]+)', raw_list[0]).group(1)) + rest = [int(s) for s in raw_list[1:]] + + step = len(rest) // length + return [rest[i : i+step] for i in range(0, len(rest), step)] + +def length_prefix_from_list(l, size=None): + """converts a python list into a length-prefixed asssembly thing""" + flat_list = ", ".join(", ".join(f'{x}' for x in s) for s in l) + + return f'db {len(l)}, {flat_list}' + +def transpose_paths(paths): + """takes a list of paths. returns a list of paths: the first element of each list, etc""" + new_paths = [[] for point in paths[0]] + + for path in paths: + for i, point in enumerate(path): + new_paths[i].append(point) + + return new_paths + +def transpose_and_length_prefix_path(text): + lines = list(text.strip().splitlines()) + paths = [list_from_length_prefix(s) for s in lines if s.strip()] + new_paths = transpose_paths(paths) + output = "\n".join(length_prefix_from_list(p) for p in new_paths) + + return output + +chain_lines = """ +db 13, 37, 31, 43, 30, 51, 32, 56, 37, 61, 43, 67, 49, 71, 54, 76, 59, 83, 61, 91, 61, 98, 60, 105, 58, 110, 52, +db 13, 37, 31, 44, 30, 52, 34, 57, 39, 61, 44, 67, 50, 71, 55, 76, 59, 83, 61, 91, 61, 98, 60, 104, 57, 110, 52, +db 13, 37, 31, 45, 32, 53, 36, 58, 42, 61, 46, 66, 52, 71, 55, 77, 58, 84, 59, 92, 60, 98, 59, 104, 56, 110, 52, +db 13, 37, 31, 45, 33, 51, 37, 56, 42, 60, 47, 65, 51, 71, 54, 77, 57, 84, 58, 91, 58, 97, 57, 103, 55, 110, 52, +db 13, 37, 31, 43, 34, 48, 38, 53, 43, 59, 48, 66, 51, 71, 53, 77, 55, 84, 57, 91, 59, 98, 58, 104, 56, 110, 52, +db 13, 37, 31, 43, 35, 48, 39, 53, 45, 59, 49, 65, 52, 71, 54, 78, 55, 85, 56, 91, 57, 98, 56, 104, 55, 110, 52, +db 13, 37, 31, 43, 34, 49, 37, 54, 43, 60, 49, 66, 52, 72, 54, 78, 54, 84, 56, 91, 56, 97, 56, 104, 56, 110, 52, +db 13, 37, 31, 43, 32, 51, 35, 56, 41, 61, 46, 66, 51, 72, 53, 78, 55, 84, 57, 91, 58, 98, 57, 105, 57, 110, 52, +db 13, 37, 31, 43, 31, 50, 34, 56, 39, 61, 44, 66, 50, 71, 54, 77, 58, 84, 59, 91, 60, 98, 59, 106, 57, 110, 52, +""" +#db 13, 1, 4, 3, 3, 0, 3, 0, 0, 2, 3, 2, 4, 2, 3, 4, 2, 4, 3, 1, 1, 0, 1, 2, 1, 1, 2, +print(transpose_and_length_prefix_path(chain_lines)) \ No newline at end of file diff --git a/source.zip b/source.zip index f3e44dcad7154bb0bbe4bc75a41beceaaeb1ed24..ae144d977f4dead3ab78cf64d3e133a009a32008 100644 GIT binary patch delta 28749 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 OtE)qy?>*Xp^8W)GH87U| delta 8068 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 B;EezP