;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; graphics routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TILEMAP dcb $80,$82,$A0,$A2 ;1番目のアニメーションに使う4つのタイル
dcb $84,$86,$A4,$A6 ;2番目のアニメーションに使う4つのタイル
dcb $88,$8A,$A8,$AA ;3番目のアニメーションに使う4つのタイル
dcb $8C,$8E,$AC,$AE ;4番目のアニメーションに使う4つのタイル
X_OFFSET dcb $08,$F8,$08,$F8,$F8,$08,$F8,$08 ;右向き時タイルのx座標/左向き時タイルのx座標
Y_OFFSET dcb $F0,$F0,$00,$00 ;タイルのy座標
SUB_GFX JSR GET_DRAW_INFO ; sets y = OAM offset
LDA $157C,x ; \ $02 = direction
ASL A
ASL A
STA $02 ; /
LDA $14
LSR A
LSR A
LSR A
AND #$03
ASL A
ASL A
STA $03
PHX
LDX #$03
LOOP_START PHX
TXA
CLC
ADC $02
TAX
LDA X_OFFSET,x
CLC
ADC $00 ; \ tile x position = sprite y location ($01)
STA $0300,y ; /
PLX
LDA Y_OFFSET,x
CLC
ADC $01 ; \ tile y position = sprite x location ($00)
STA $0301,y ; /
PHX
TXA
CLC
ADC $03
TAX
LDA TILEMAP,x
STA $0302,y
PLX
PHX
LDX $15E9
LDA $15F6,x ; tile properties xyppccct, format
LDX $02 ; \ if direction == 0...
BNE NO_FLIP ; |
ORA #$40 ; / ...flip tile
NO_FLIP ORA $64 ; add in tile priority of level
STA $0303,y ; store tile properties
PLX
INY ; \ increase index to sprite tile map ($300)...
INY ; | ...we wrote 1 16x16 tile...
INY ; | ...sprite OAM is 8x8...
INY ; / ...so increment 4 times
DEX
BPL LOOP_START
PLX
LDY #$02 ; \ 460 = 2 (all 16x16 tiles)
LDA #$03 ; | A = (number of tiles drawn - 1)
JSL $01B7B3 ; / don't draw if offscreen
RTS ; return