Skip to content

Instantly share code, notes, and snippets.

@nurpax
Created August 19, 2018 21:53
Show Gist options
  • Save nurpax/525811316cdbbb1657940cd6cfa7426d to your computer and use it in GitHub Desktop.
Save nurpax/525811316cdbbb1657940cd6cfa7426d to your computer and use it in GitHub Desktop.
spd sprite loading in kickassembler
.var spdDataTemplate = "Magic=$0,Version=$3,NumSprites=$4,NumAnims=$5,Bg=$6,Multicol1=$7,Multicol2=$8"
.var iiro = LoadBinary("sprites/iiro.spd", spdDataTemplate)
.macro setupSprites(spd, data, dblw, dblh) {
.const numSprites = spd.getNumSprites()+1
.const spriteMask = ((1 << numSprites)-1)
.var xScale = 1
.var yScale = 1
lda #spriteMask
.if (dblw || dblh) {
.if (dblw) {
.eval xScale = 2
sta $d01d
}
.if (dblh) {
.eval yScale = 2
sta $d017
}
}
sta $d015 // enable sprites
.const multicolor = true
.if (multicolor) {
sta $d01c // multicolor
lda #spd.getMulticol1()
sta $d025
lda #spd.getMulticol2()
sta $d026
}
.for (var si = 0; si < numSprites; si++) {
lda data + si*64 + 63
sta $d027 + si
// init sprite ptrs (note: have to config ptrs to both screen RAMs
// since we are double buffering.
lda #(data/64) + si
sta screen0+$03f8 + si
sta screen1+$03f8 + si
}
// load x,y position
ldx #100
.for (var s = 0; s < 4; s++) {
stx $d000+s*2
ldy #850+s*21*yScale
sty $d000+s*2+1
}
}
// how to use the macro
main:
setupSprites(iiro, iiro_spritedata, true, true)
.align 64
iiro_spritedata:
.for (var si = 0; si < iiro.getNumSprites()+1; si++) {
.for (var bi = 0; bi < 64; bi++) {
.byte iiro.get(si*64 + bi + 9)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment