Re: SNES Splatoon (Not Even A Demo Yet Though...)
Posted: Wed Feb 24, 2016 7:33 am
I'm fairly certain this should work (if I actually build the jump table, of course.) I just got rid of the indexing on the "SplatRequestTable" because I'm only loading one splat right now, but I'll add it back latter. I'm just trying to take baby steps.
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