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