;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 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