gb-tarot/01TheMagician.inc
2025-03-11 17:01:21 -04:00

412 lines
13 KiB
PHP

TheMagician:
db 10, "THE "
db 10, "MAGICIAN "
db 9, "capacity "
db 9, "knowing "
db 9, "manifest "
dw MagicianMapEnd - MagicianMap
dw MagicianMap
dw MagicianTilesEnd - MagicianTiles
dw MagicianTiles
dw .SpriteTilesEnd - .SpriteTiles
dw .SpriteTiles
dw .fInit
dw .fUpdate
dw .fDraw
; CARD_VARS_START + 0 ; timer for lemniscate
; CARD_VARS_START + 2 ; frame counter 1
; CARD_VARS_START + 3 ; frame counter 2
.fInit:
ld hl, CVS
ld a, 0
ld [hl+], a ; CVS timer for flame
ld [hl+], a
ld [hl+], a ; CVS+2 frame of flame 1
ld [hl+], a ; CVS+3 frame of flame 2
ld [hl+], a ; CVS+4 color cycling frame
ld [hl+], a ; CVS+5 sprite frame
ld [hl+], a ; CVS+6 delay timer for sheen
ld [hl+], a
ld [hl+], a ; CVS+8 frame of sheen animation
; starting values for flame 1
ld a, 0 ; starting frame number for flame 1
ld [CVS+2], a
ld hl, MY_OAM
ld [hl], 36 ; y
inc hl
ld [hl], 39 ; x
inc hl
ld [hl], 1 ; tile
inc hl
set OAMB_PAL1, [hl]
; srtarting values for flame 2
ld a, 10
ld [CVS+3], a
ld hl, MY_OAM + 1*4 ; pre-populate with flame 2
ld [hl], 36 ; y
inc hl
ld [hl], 59 ; x
inc hl
ld [hl], 2 ; tile
inc hl
set OAMB_PAL1, [hl]
; starting values for sheens
ld hl, MY_OAM + 2*4 ; sword sheen sprite goes in OAM+2
ld [hl], 0
inc hl
ld [hl], 0
inc hl
ld [hl], 3 ; sword sheen sprite
ld hl, MY_OAM + 3*4 ; pentaacle sheen ggoes in OAM+3
ld [hl], 0
inc hl
ld [hl], 0
inc hl
ld [hl], 4 ; pentacle sheen sprite
inc hl
set OAMB_PRI, [hl]
ret
.fUpdate:
ld hl, CVS
call IncrementTimer
ld a, [CVS+1] ; checking the high byte of the timer
cp a, $01 ; $10 = 1 second, $02 = 1/8 of a second
jp c, .doneWithTimer1 ; 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
call .drawFlames
.doneWithTimer1
ld hl, CVS+6
call IncrementTimer
ld a, [CVS+6+1]
cp a, $40 ; this should go off every four seconds
jp c, .doneWithTimer2
ld a, 0
ld [CVS+6], a
ld [CVS+6+1], a
ld a, 1
ld [CVS+8], a ; set the sheen animation to run
.doneWithTimer2
ld a, [CVS+8]
cp a, 0
jp z, .doneWithTimer3
; play the sheen animation
call .runSheen
.doneWithTimer3
ret
.drawFlames:
;update positions based on animation data
;draw frame 1
ld hl, .flameAnimation
ld a, [CVS+2]
inc a
call ArrayClampLooping
ld [CVS+2], a
ld b, 0
ld c, a
ld hl, .flameAnimation+1
add hl, bc ; add bc twice (it's a list of pairs) to jump to the bc'th element
add hl, bc ; of the list
ld b, [hl] ; load y into b
inc hl
ld c, [hl] ; load x into c
ld hl, MY_OAM
ld [hl], b
inc hl
ld [hl], c
inc hl
;draw frame 2
ld hl, .flameAnimation
ld a, [CVS+3]
inc a
call ArrayClampLooping
ld [CVS+3], a
ld b, 0
ld c, a
ld hl, .flameAnimation+1
add hl, bc ; add bc twice (it's a list of pairs) to jump to the bc'th element
add hl, bc ; of the list
ld b, [hl] ; load y into b
inc hl
ld c, [hl] ; load x into c
ld hl, MY_OAM + 1*4
ld [hl], b
inc hl
ld [hl], c
inc hl
; advance the three-frame palette cyclling animation
ld b, 12
ld a, [CVS+4]
inc a
call ArrayClampLoopingB
ld [CVS+4], a
cp a, 0
jp z, :+
cp a, 4
jp z, :++
cp a, 8
jp z, :+++
jp .doneWithPalette
:
ld a, %10_10_00_00
ld [rOBP1], a
jp .doneWithPalette
:
ld a, %00_10_10_00
ld [rOBP1], a
jp .doneWithPalette
:
ld a, %10_00_10_00
ld [rOBP1], a
jp .doneWithPalette
.doneWithPalette
; advance the two-frame sprite swapping animation
ld b, 8
ld a, [CVS+5]
inc a
call ArrayClampLoopingB
ld [CVS+5], a
cp a, 0
jp z, :+
cp a, 4
jp z, :++
jp .doneWithSpriteSwap
:
ld hl, MY_OAM + 0*4 + 2
ld [hl], 1
ld hl, MY_OAM + 1*4 + 2
ld [hl], 2
jp .doneWithSpriteSwap
:
ld hl, MY_OAM + 0*4 + 2
ld [hl], 2
ld hl, MY_OAM + 1*4 + 2
ld [hl], 1
jp .doneWithSpriteSwap
.doneWithSpriteSwap
; two-frame left-right animation
ld a, [CVS+5]
bit 0, a
jp z, :+
jp :++
:
ld hl, MY_OAM + 0*4 + 3
ld a, OAMF_XFLIP
xor a, [hl]
ld [hl], a
ld hl, MY_OAM + 1*4 + 3
ld a, OAMF_XFLIP
xor a, [hl]
ld [hl], a
:
ret
.flameAnimation:
db 32, 29, 35, 28, 35, 26, 36, 25, 37, 24, 39, 24, 40, 25, 42, 27, 44, 29, 45, 31, 46, 33, 48, 34, 50, 34, 51, 33, 53, 32, 54, 30, 55, 29, 55, 28, 55, 26, 54, 25, 53, 24, 51, 24, 50, 25, 48, 27, 46, 29, 45, 31, 44, 33, 42, 34, 40, 34, 39, 33, 37, 32, 36, 30, 35
.runSheen:
ld hl, .swordSheen
ld a, [CVS+8]
inc a
call ArrayClampLooping
ld [CVS+8], a
ld b, 0
ld c, a
ld hl, .swordSheen+1
add hl, bc ; add bc twice (it's a list of pairs) to jump to the bc'th element
add hl, bc ; of the list
ld b, [hl] ; load y into b
dec b
inc hl
ld c, [hl] ; load x into c
ld hl, MY_OAM + 2*4
ld [hl], b
inc hl
ld [hl], c
ld a, [CVS+8]
ld b, 0
ld c, a
ld hl, .pentacleSheen+1
add hl, bc ; add bc twice (it's a list of pairs) to jump to the bc'th element
add hl, bc ; of the list
ld b, [hl] ; load y into b
inc hl
ld c, [hl] ; load x into c
ld hl, MY_OAM + 3*4
ld [hl], b
inc hl
ld [hl], c
inc hl
ret
.swordSheen:
db 22, 96, 0, 96, 21, 96, 22, 96, 23, 96, 24, 96, 25, 96, 26, 96, 27, 96, 28, 96, 29, 96, 30, 96, 31, 96, 32, 96, 33, 96, 34, 96, 35, 96, 36, 96, 37, 96, 38, 96, 39, 96, 40, 96, 41,
.pentacleSheen:
db 22, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 0, 96, 32, 96, 33, 96, 34, 96, 35, 96, 36, 96, 37, 96, 38, 96, 39, 96, 40, 96, 41,
.fDraw:
ret
.SpriteTiles:
db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $20,$20,$30,$30,$38,$28,$3c,$24,$6c,$54,$c6,$fa,$6c,$54,$38,$38
db $0c,$0c,$18,$18,$38,$28,$3c,$24,$6c,$54,$c6,$fa,$6c,$54,$38,$38
db $00,$d0,$00,$68,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$80,$00,$80,$00,$80
.SpriteTilesEnd:
MagicianTiles:
db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $ff,$ff,$ff,$ff,$e0,$e0,$fe,$fe,$fe,$fe,$fe,$fe,$fe,$fe,$fe,$fe
db $01,$21,$03,$23,$03,$22,$03,$3e,$01,$02,$01,$02,$01,$02,$01,$02
db $fe,$81,$d5,$aa,$bb,$c4,$d5,$aa,$ae,$d1,$d5,$aa,$c2,$9d,$d1,$8e
db $ff,$00,$ff,$00,$ff,$00,$ff,$70,$df,$50,$df,$50,$df,$50,$57,$d8
db $ff,$00,$ff,$00,$ff,$00,$77,$88,$ff,$01,$dd,$23,$ff,$01,$57,$a9
db $df,$50,$df,$50,$df,$50,$d7,$d8,$df,$58,$dd,$56,$fb,$26,$fb,$96
db $ff,$01,$dd,$23,$ff,$01,$55,$aa,$ff,$00,$5d,$a2,$ff,$00,$55,$aa
db $fb,$56,$f2,$ad,$f0,$4b,$c0,$b3,$c0,$60,$40,$a0,$c0,$20,$40,$a0
db $ff,$00,$dd,$22,$ff,$00,$55,$aa,$7f,$80,$5d,$a2,$7f,$80,$15,$6a
db $3f,$40,$15,$6a,$3b,$44,$15,$2a,$0f,$10,$05,$0a,$00,$07,$01,$04
db $01,$04,$01,$04,$01,$04,$01,$04,$01,$0c,$05,$88,$85,$58,$45,$b0
db $ff,$00,$dd,$22,$ff,$3f,$60,$a0,$c0,$60,$40,$c0,$80,$df,$8f,$90
db $ff,$00,$dd,$22,$ff,$fc,$03,$06,$03,$02,$01,$01,$01,$f1,$e1,$19
db $8f,$90,$8f,$90,$8f,$96,$89,$96,$8f,$91,$8f,$91,$8f,$90,$8f,$93
db $f1,$09,$f1,$09,$f1,$69,$91,$69,$f1,$09,$71,$89,$f1,$09,$f0,$c9
db $d0,$8b,$d0,$89,$50,$89,$50,$08,$50,$08,$40,$18,$40,$10,$40,$10
db $c0,$20,$40,$a0,$c0,$20,$40,$a0,$c0,$20,$40,$a0,$80,$60,$40,$a0
db $8e,$91,$87,$88,$81,$86,$80,$87,$83,$84,$83,$84,$80,$87,$80,$84
db $70,$88,$e0,$10,$80,$70,$00,$f0,$e0,$10,$e0,$10,$00,$f0,$00,$20
db $40,$10,$40,$10,$40,$10,$40,$10,$40,$10,$40,$10,$40,$10,$40,$10
db $48,$14,$40,$1c,$40,$1c,$40,$1e,$50,$0e,$50,$0e,$50,$0e,$50,$0f
db $fe,$fe,$fe,$fe,$fe,$fe,$fe,$fe,$fe,$fe,$e0,$e0,$ff,$ff,$ff,$ff
db $7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$07,$07,$ff,$ff,$ff,$ff
db $ff,$ff,$ff,$ff,$07,$07,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f
db $c0,$20,$40,$b0,$b0,$48,$50,$ac,$ec,$13,$55,$aa,$aa,$55,$55,$aa
db $e5,$10,$45,$b0,$85,$70,$55,$a0,$95,$60,$55,$a0,$95,$60,$15,$e0
db $95,$60,$55,$a0,$95,$60,$15,$e0,$95,$60,$00,$ff,$00,$00,$7f,$7f
db $40,$20,$40,$20,$40,$20,$40,$10,$40,$10,$00,$ff,$00,$00,$fe,$fe
db $01,$02,$01,$02,$01,$02,$01,$02,$01,$02,$01,$e2,$01,$22,$01,$12
db $81,$92,$41,$52,$41,$4a,$41,$4a,$81,$8a,$c1,$ca,$31,$36,$21,$e6
db $41,$46,$81,$82,$00,$03,$00,$03,$80,$81,$40,$40,$20,$20,$40,$40
db $50,$0f,$50,$0f,$52,$0d,$50,$87,$50,$87,$50,$87,$50,$87,$50,$87
db $50,$87,$50,$87,$50,$87,$00,$77,$60,$ff,$f8,$ff,$fc,$ff,$fe,$ff
db $80,$84,$80,$84,$80,$82,$80,$82,$80,$82,$80,$82,$80,$82,$80,$82
db $80,$82,$80,$c2,$40,$62,$60,$3e,$40,$20,$40,$20,$40,$20,$40,$20
db $00,$20,$00,$20,$01,$21,$01,$21,$01,$21,$01,$21,$01,$21,$01,$21
db $02,$05,$00,$07,$02,$05,$00,$03,$00,$03,$00,$03,$00,$03,$00,$03
db $00,$03,$00,$03,$00,$3f,$1e,$63,$3e,$43,$3e,$c3,$ff,$81,$ff,$80
db $ff,$84,$ff,$a3,$ff,$a9,$7f,$fd,$8f,$7d,$07,$fd,$07,$fd,$05,$ff
db $e8,$57,$c0,$ff,$20,$df,$00,$ff,$80,$7f,$00,$ff,$00,$ff,$00,$ff
db $8a,$77,$00,$ff,$00,$ff,$00,$ff,$07,$ff,$0f,$ff,$1f,$ff,$3f,$ff
db $40,$10,$40,$10,$40,$10,$40,$10,$40,$18,$40,$18,$40,$18,$40,$18
db $ee,$11,$55,$aa,$aa,$55,$55,$aa,$2a,$d5,$15,$6a,$2a,$55,$11,$6e
db $0a,$35,$15,$2a,$0a,$35,$01,$1e,$0a,$15,$04,$1b,$02,$0d,$01,$0e
db $ff,$00,$ff,$00,$8f,$70,$03,$8c,$01,$02,$00,$03,$03,$8c,$07,$f8
db $ff,$00,$ff,$00,$ff,$00,$77,$88,$fe,$01,$dc,$23,$ff,$00,$57,$a8
db $ff,$00,$ff,$00,$f1,$0e,$40,$b1,$00,$c0,$80,$40,$c0,$31,$51,$ae
db $ff,$00,$ff,$00,$ff,$00,$77,$88,$7f,$80,$5d,$a2,$ff,$00,$57,$a8
db $1f,$1f,$20,$20,$1f,$1f,$00,$00,$02,$02,$06,$06,$3f,$7f,$46,$46
db $ff,$ff,$00,$00,$ff,$ff,$00,$00,$00,$00,$00,$00,$ff,$ff,$00,$00
db $80,$80,$00,$00,$80,$80,$7f,$7f,$00,$00,$00,$00,$ff,$ff,$00,$00
db $01,$01,$00,$00,$00,$00,$fe,$fe,$01,$01,$07,$07,$f8,$f8,$38,$3f
db $00,$00,$ff,$ff,$00,$00,$3e,$3e,$c1,$c9,$00,$77,$00,$1c,$c1,$f7
db $64,$64,$c2,$c2,$01,$01,$01,$01,$83,$83,$44,$45,$48,$48,$84,$84
db $03,$03,$00,$00,$00,$ff,$fe,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
db $80,$80,$00,$00,$00,$ff,$00,$81,$00,$ff,$83,$ff,$c7,$ff,$af,$ff
db $00,$00,$00,$00,$00,$ff,$00,$18,$00,$ff,$ff,$ff,$ff,$ff,$ff,$ff
db $00,$00,$00,$00,$00,$ff,$00,$00,$00,$ff,$80,$ff,$80,$ff,$c0,$ff
db $c3,$ff,$c7,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$1f,$ff,$1f,$bf,$1f,$3f
db $3e,$3e,$00,$00,$00,$ff,$01,$07,$03,$ff,$03,$ff,$07,$ff,$f3,$ff
db $f9,$ff,$fd,$ff,$fc,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$ff,$ff,$ff,$ff
db $2f,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
db $ff,$ff,$ff,$ff,$fe,$ff,$fc,$ff,$fd,$ff,$ff,$ff,$ff,$ff,$ff,$ff
db $3f,$ff,$7f,$ff,$7f,$ff,$ff,$ff,$ff,$ff,$e0,$ff,$c0,$fe,$c0,$e6
db $80,$7f,$00,$ff,$00,$ff,$f0,$ff,$fc,$ff,$fc,$ff,$ff,$ff,$ff,$ff
db $80,$e4,$80,$fd,$80,$fd,$80,$e6,$80,$cc,$80,$eb,$c1,$ff,$ff,$ff
db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$7f,$ff,$3f,$ff,$1f,$7f
db $1f,$bf,$1f,$7f,$3f,$7f,$3f,$ff,$3f,$ff,$ff,$ff,$ff,$ff,$ff,$ff
db $fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$fe,$ff,$ff,$ff,$ff,$ff,$ff,$ff
db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$f9,$ff,$f0,$ff,$f0,$f8
db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$7f,$ff,$07,$ff
db $f0,$f8,$f0,$fe,$e0,$fc,$e0,$f0,$e0,$f1,$e0,$fb,$f0,$ff,$fe,$ff
db $07,$8f,$07,$0f,$07,$0f,$07,$7f,$0f,$1f,$0f,$1f,$0f,$3f,$1f,$ff
db $3f,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
db $1f,$3f,$1f,$ff,$1f,$7f,$1f,$3f,$1f,$7f,$3f,$ff,$ff,$ff,$fe,$ff
db $ff,$ff,$ff,$ff,$ff,$ff,$c1,$ff,$80,$ef,$00,$cf,$00,$dc,$00,$d4
db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$1f,$ff,$1f,$7f,$0f,$7f
db $00,$56,$00,$63,$00,$61,$00,$38,$00,$97,$00,$90,$00,$d1,$80,$ff
db $0f,$7f,$0f,$ff,$0f,$ff,$1f,$3f,$1f,$ff,$3f,$ff,$7f,$ff,$ff,$ff
db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$f1,$ff,$e1,$fb,$e0,$f1,$e0,$f9
db $f0,$fc,$c0,$f0,$80,$e2,$80,$c6,$80,$ec,$c0,$ff,$ff,$ff,$ff,$ff
db $95,$60,$55,$a0,$95,$60,$15,$e0,$95,$60,$55,$a0,$95,$60,$15,$e0
db $00,$00,$ff,$ff,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$00,$00
db $aa,$55,$00,$ff,$a2,$5d,$00,$ff,$aa,$55,$00,$ff,$22,$dd,$80,$ff
db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$77,$88
db $ff,$00,$ff,$00,$ff,$00,$77,$88,$ff,$00,$dd,$22,$ff,$00,$57,$a8
db $ff,$00,$dd,$22,$ff,$00,$55,$aa,$ff,$00,$5d,$a2,$ff,$00,$55,$aa
db $ff,$00,$55,$aa,$fb,$04,$55,$aa,$ff,$00,$55,$aa,$bb,$44,$55,$aa
db $ff,$00,$55,$aa,$fb,$04,$55,$aa,$ff,$00,$55,$aa,$bb,$44,$d5,$aa
db $fe,$01,$55,$aa,$bb,$44,$55,$aa,$ee,$11,$55,$aa,$aa,$55,$55,$aa
db $ee,$11,$55,$aa,$aa,$55,$55,$aa,$aa,$55,$55,$aa,$aa,$55,$11,$ee
db $aa,$55,$55,$aa,$aa,$55,$11,$ee,$aa,$55,$44,$bb,$aa,$55,$01,$fe
db $aa,$55,$44,$bb,$aa,$55,$00,$ff,$aa,$55,$00,$ff,$00,$00,$00,$00
db $aa,$55,$44,$bb,$aa,$55,$00,$ff,$aa,$55,$04,$fb,$aa,$55,$00,$ff
db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
db $46,$46,$3f,$7f,$06,$06,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00
MagicianTilesEnd:
MagicianMap:
db $6f, $1e, $6f, $6f, $6f, $6f, $6f, $6f
db $1f, $20, $70, $70, $70, $70, $70, $70
db $21, $22, $23, $26, $27, $71, $71, $71
db $72, $2b, $24, $28, $29, $73, $72, $72
db $74, $33, $25, $2c, $2d, $1d, $74, $74
db $75, $75, $34, $3c, $3e, $2a, $45, $75
db $76, $76, $6c, $3d, $1c, $2e, $46, $76
db $77, $77, $35, $36, $37, $44, $3f, $78
db $4b, $4c, $4d, $4e, $38, $2f, $40, $6e
db $7a, $6d, $4f, $50, $39, $3a, $41, $42
db $53, $54, $56, $51, $52, $3b, $43, $5b
db $6a, $55, $57, $79, $58, $59, $5a, $5d
db $6b, $65, $66, $67, $60, $61, $5c, $5e
db $79, $5f, $68, $69, $62, $63, $79, $79
db $79, $79, $79, $1b, $32, $64, $79, $79
db $79, $79, $79, $30, $31, $79, $79, $79
MagicianMapEnd: