1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-03-27 18:35:06 +00:00

Add sprite center

This commit is contained in:
David Schmenk 2019-12-28 08:19:31 -08:00
parent b5f832b0b2
commit 322546a0b1
3 changed files with 16 additions and 9 deletions

View File

@ -1,5 +1,5 @@
import sprite
predef spriteCompile(w, h, srcptr)#1
predef spriteCompile(w, h, xcenter, ycenter, srcptr)#1
predef spriteDup(sprtsrc)#1
predef spriteRead(filestr)#1
predef spriteSave(filestr, sprtptr)#1

View File

@ -8,6 +8,8 @@ struc t_sprite
var s_undery[2]
var s_underofst[2]
byte s_undermap[2]
byte s_xcenter
byte s_ycenter
byte s_pitch
byte s_height
var s_size
@ -121,7 +123,7 @@ def spriteBLTMask(x, y, w, h, srcptr)#0
srcptr = srcptr + (w + 1) / 2
next
end
export def spriteCompile(w, h, srcptr)#1
export def spriteCompile(w, h, xcenter, ycenter, srcptr)#1
var sprtptr, bytewidth, spritesize, i
sprtptr = heapalloc(t_sprite)
@ -130,6 +132,8 @@ export def spriteCompile(w, h, srcptr)#1
spritesize = bytewidth * h
sprtptr=>s_size = spritesize
sprtptr->s_height = h
sprtptr->s_xcenter = xcenter
sprtptr->s_ycenter = ycenter
sprtptr=>s_under[0] = heapalloc(spritesize)
sprtptr=>s_under[1] = heapalloc(spritesize)
for i = 0 to 13
@ -155,6 +159,9 @@ export def spriteDup(sprtsrc)#1
sprtdup=>s_size = spritesize
sprtdup->s_pitch = sprtsrc->s_pitch
sprtdup->s_height = sprtsrc->s_height
sprtdup->s_height = sprtsrc->s_height
sprtdup->s_xcenter = sprtsrc->s_xcenter
sprtdup->s_ycenter = sprtsrc->s_ycenter
sprtdup=>s_under[0] = heapalloc(spritesize)
sprtdup=>s_under[1] = heapalloc(spritesize)
for i = 0 to 13
@ -250,14 +257,14 @@ export def spriteUnDrawXor(sprtptr)#0
hgrXorSrc(sprtptr=>s_underofst[drawpage], sprtptr=>s_undery[drawpage], sprtptr->s_pitch, sprtptr->s_height, sprtptr=>s_map[sprtptr->s_undermap[drawpage]])
end
export def spritePos(x, y, sprtptr)#0
sprtptr=>s_ypos = y
sprtptr=>s_xpos = x
sprtptr=>s_ypos = y - sprtptr->s_ycenter
sprtptr=>s_xpos = x - sprtptr->s_xcenter
end
export def spritePosIndex(x, y, i)#0
i = i & 15
if drawList[i]
drawList[i]=>s_ypos = y
drawList[i]=>s_xpos = x
drawList[i]=>s_ypos = y - drawList[i]->s_ycenter
drawList[i]=>s_xpos = x - drawList[i]->s_xcenter
fin
end
export def spriteDrawList#0

View File

@ -51,11 +51,11 @@ def testblt(sprtnum)#0
while ^$C000 < 128
for k = 0 to sprtnum
i[k] = i[k] + ii[k]
if i[k] < -10 or i[k] > 280
if i[k] < 0 or i[k] > 279
ii[k] = -ii[k]
fin
j[k] = j[k] + jj[k]
if j[k] < -10 or j[k] > 192
if j[k] < 0 or j[k] > 191
jj[k] = -jj[k]
fin
spritePosIndex(i[k], j[k], k)
@ -67,7 +67,7 @@ end
hgrMode
spriteDrawBuf(hgrDrawBuf(0)) // So we can see the compile process
sprtBall = spriteCompile(10, 10, @ball)
sprtBall = spriteCompile(10, 10, 5, 5, @ball)
hgrColor(0)
hgrClear()
testline