Code: Select all
start_draw_splat:
rep #$30 ;A=16, X/Y=16
lda SplatRequestTable+YPosition
and #$0000000000000111
asl
bne continue_calculating_vertical_offset
sta SplatSubTileYPosition
continue_calculating_vertical_offset:
lda SplatRequestTable+YPosition
ror
ror
ror
sep #$20 ;A=8
sta $4202
lda DataPerRowInBuffer
sta $4203 ;Apparently, there's some sort of waiting time for this?
lda SplatRequestTable+Height
sta FullTileSplatHeight
asl
asl
asl
asl
asl
sta DataSplatHeight
lda SplatRequestTable+Width
sta TileSplatWidth
rep #$30 ;A=16, X/Y=16
lda $4216
sta SplatBufferPosition
;======================================================================
lda SplatRequestTable+XPosition
ror
ror
and #%0011111111111111
clc
adc SplatBufferPosition
sta SplatBufferPosition
lda SplatRequestTable+XPosition
and #%0000000000000111
bne continue_calculating_x_offset
inc TileSplatWidth
lda SplatRequestTable+XPosition
and #%0000000000000111
continue_calculating_x_offset:
clc
adc SplatRequestTable+GraphicOffset
sta SplatGraphicOffset
lda SplatSubTileYPosition
asl
tax
jsr (VariableYOffsetCodeJumpTable,x)
;======================================================================
VariableYOffsetCodeJumpTable: (I don't remember the structure for
tables... I'm using the school's computer)
;======================================================================
start_draw_offset_3_splat:
ldx SplatBufferPosition
cpx EndOfBuffer
bcs draw_offset_3_splat_done
ldy SplatGraphicOffset
lda SplatGraphicOffset
clc
adc #$0014
sta SplatGraphicOffset
draw_offset_3_splat_first_rows:
lda Buffer+6,x
and #$0000,y
ora #$0002,y
sta Buffer+6,x
lda Buffer+8,x
and #$0004,y
ora #$0006,y
sta Buffer+8,x
lda Buffer+10,x
and #$0008,y
ora #$000A,y
sta Buffer+10,x
lda Buffer+12,x
and #$000C,y
ora #$000E,y
sta Buffer+12,x
lda Buffer+14,x
and #$0010,y
ora #$0012,y
sta Buffer+14,x
inc TilesDrawnHorizontally
cmp SplatTileWidth
bcs start_offset_3_splat_middle_rows
txa
clc
adc #$0010
tax
tya
clc
adc SplatDataHeight
tay
bra draw_offset_3_splat_first_rows
;======================================================================
start_draw_offset_3_splat_middle_rows:
ldx SplatBufferPosition
stz TilesDrawnHorizontally
txa
clc
adc DataPerRowInBuffer
tax
ldy SplatGraphicOffset
draw_offset_3_splat_middle_rows:
lda Buffer,x
and #$0000,y
ora #$0002,y
sta Buffer,x
lda Buffer+2,x
and #$0004,y
ora #$0006,y
sta Buffer+2,x
lda Buffer+4,x
and #$0008,y
ora #$000A,y
sta Buffer+4,x
lda Buffer+6,x
and #$000C,y
ora #$000E,y
sta Buffer+6,x
lda Buffer+8,x
and #$0010,y
ora #$0012,y
sta Buffer+8,x
lda Buffer+10,x
and #$0014,y
ora #$0016,y
sta Buffer+10,x
lda Buffer+12,x
and #$0018,y
ora #$001A,y
sta Buffer+12,x
lda Buffer+14,x
and #$001C,y
ora #$001E,y
sta Buffer+14,x
lda FullTilesDrawnVertically
cmp FullTileSplatHeight
bcs start_draw_offset_3_splat_last_rows
inc TilesDrawnHorizontally
cmp SplatTileWidth
bcs offset_3_splat_next_row
txa
clc
adc #$0010
tax
tya
clc
adc SplatDataHeight
tay
bra draw_offset_3_splat_middle_rows
offset_3_splat_next_row:
cpx EndOfBuffer
bcs draw_offset_3_splat_done
inc FullTilesDrawnVertically
inc TilesDrawnHorizontally
txa
clc
adc DataPerRowInBuffer
tax
lda SplatGraphicOffset
clc
adc #$0020
sta SplatGraphicOffset
tay
bra draw_offset_3_splat_middle_rows
;======================================================================
start_draw_offset_3_splat_last_rows:
ldx SplatBufferPosition
cpx EndOfBuffer
bcs draw_offset_3_splat_done
stz TilesDrawnHorizontally
txa
clc
adc DataPerRowInBuffer
tax
ldy SplatGraphicOffset
draw_offset_3_splat_last_rows:
lda Buffer,x
and #$0000,y
ora #$0002,y
sta Buffer,x
lda Buffer+2,x
and #$0004,y
ora #$0006,y
sta Buffer+2,x
lda Buffer+4,x
and #$0008,y
ora #$000A,y
sta Buffer+4,x
inc TilesDrawnHorizontally
cmp SplatTileWidth
bcs draw_offset_3_splat_done
txa
clc
adc #$0010
tax
tya
clc
adc SplatDataHeight
tay
bra draw_offset_3_splat_last_rows
;======================================================================
draw_offset_3_splat_done:
stz FullTilesDrawnVertically
rts