Page 1 of 2
nxtbasic: 64x64 8bit sprite that I can paint.
Posted: Mon Jul 29, 2024 4:37 pm
by funkheld
hello, good day.
I have a 64x64 8bit sprite that I can a small
plot-demo with key "A".
The sprite address for the 32kb is:
$1:3000-$1:AFFF Sprite Image Data (up to $1000 per sprite at 64x64 8-bit)
The sprite could be used as a painting surface with 64x64 pixels.
The address for my first 64x64 sprite is $1:3100
Who can create a command for "line , rectangle and circle" for a 64x64 sprite with color.
greeting
Code: Select all
screen 128
Dim Sprites(3)
Sprites(1) = ADDSPRITE("sprleer64.raw",64,64,8,0)
x=0
y=0
f=0
x1=-1
y1=-1
ShowSprite 1,100,100,3
StartEdit:
Loop:
Key$=GET
if Key$="Q" then GOSUB links
if Key$="E" then GOSUB rechts
if Key$="W" then GOSUB oben
if Key$="S" then GOSUB unten
if Key$="A" then
x1=x1+1
y1=y1+1
f=4
spritep(x1,y1,f)
end if
Goto loop
end
links:
x=-1
y=0
MoveSprite Sprites(1),x,y
return
rechts:
x=1
y=0
MoveSprite Sprites(1),x,y
return
oben:
y=-1
x=0
MoveSprite Sprites(1),x,y
return
unten:
y=1
x=0
MoveSprite Sprites(1),x,y
return
sub spritep(xp,yp,f)
xy=yp*64+xp
VPOKE 1,$3100+xy,f
end sub
gruss
Re: nxtbasic: 64x64 8bit sprite that I can paint.
Posted: Mon Jul 29, 2024 6:19 pm
by unartic
I'm not sure what you mean.
Do you want a line. rect and circle command to draw 'on' the sprite? Like in sprite memory?
That would be quite a chalenge for which there are no default solutions. The easiest way is probably to just draw on the bitmap layer and copy the bitmap bytes to the sprite location when you are finished with the drawing.
Re: nxtbasic: 64x64 8bit sprite that I can paint.
Posted: Mon Jul 29, 2024 8:03 pm
by funkheld
thanks for the info.
-----------------------------
The easiest way is probably to just draw on the bitmap layer and copy the bitmap bytes to the sprite location when you are finished with the drawing.
-----------------------------
Please show me how to copy this to this address.
addresse : 1,$3100
greeting
Re: nxtbasic: 64x64 8bit sprite that I can paint.
Posted: Tue Jul 30, 2024 7:07 am
by unartic
Here it is
The file 'splash.bin' (attached) should be in the same folder as the compiled prg file.
Code: Select all
SCREEN 128
'Load an image to the bitmap layer
BVLOAD "splash.bin",0,0
'Add a sprite
nr = ADDSPRITE("",64,64,8,0)
'Coordinates of left top corner
xStart=30
yStart=100
' Copy a bit of the bitmap layer to sprite address (NOTE: yStart*320 + xStart must be < $FFFF
' because read bank 0 is hardcoded here)
for y = 0 to 63
line$ = VPEEKN(0,y*320 + yStart*320 + xStart,64)
VPOKEN 1,$3100 + (y*64),line$
next
'Show sprite
SHOWSPRITE nr,5,5,3
'Move sprite with ASDW keys
Loop:
key$ = GET
if key$="D" then MoveSprite nr,5,0
if key$="A" then MoveSprite nr,-5,0
if key$="W" then MoveSprite nr,0,-5
if key$="S" then MoveSprite nr,0,5
goto loop
Re: nxtbasic: 64x64 8bit sprite that I can paint.
Posted: Tue Jul 30, 2024 4:00 pm
by funkheld
hey you master....it's great, thanks for your help.
your nxtbasic has a lot of power.
greetings
Re: nxtbasic: 64x64 8bit sprite that I can paint.
Posted: Thu Aug 01, 2024 6:13 pm
by funkheld
hello, you once asked who had ideas for programming games with nxtbasic.
my idea above was to create graphics on the 64x64 sprites, so that this sprite is then a moving screen 64x64.
plot-rect-circle-line etc.
if you then use several 64x64 sprites as screen graphics, it is another good basis for a game.
since you have a lot of ASM knowledge, I can see that from your ASM integrations for nextbasic, I don't think it would be that difficult for you to realize my idea.
thanks.
greeting
Re: nxtbasic: 64x64 8bit sprite that I can paint.
Posted: Thu Aug 01, 2024 7:08 pm
by unartic
Hi!
Im unsure what your idea is all about
Can you elaborate on that a bit?
Re: nxtbasic: 64x64 8bit sprite that I can paint.
Posted: Fri Aug 02, 2024 6:48 am
by funkheld
Use the 64x64 sprite as a screen, draw graphics. I've just shown a line as a plot above because it was easy for me.
You then have several 64x64 sprites as screens that move, you can then create displays and other things for a
game that you can then change in the game.
greeting
Re: nxtbasic: 64x64 8bit sprite that I can paint.
Posted: Sun Aug 04, 2024 1:55 pm
by funkheld
hello unartic , good day.
can you please implement this in nxtbasic?
thanks.
greetings
-----------------------------
void plotLine(int x0, int y0, int x1, int y1)
{
int dx = abs(x1-x0), sx = x0<x1 ? 1 : -1;
int dy = -abs(y1-y0), sy = y0<y1 ? 1 : -1;
int err = dx+dy, e2; /* error value e_xy */
for(;;){ /* loop */
print x0; y0;
if (x0==x1 && y0==y1) break;
e2 = 2*err;
if (e2 >= dy) { err += dy; x0 += sx; } /* e_xy+e_x > 0 */
if (e2 <= dx) { err += dx; y0 += sy; } /* e_xy+e_y < 0 */
}
}
-------------------------------
-------------------------------
void plotCircle(int xm, int ym, int r)
{
int x = -r, y = 0, err = 2-2*r; /* II. Quadrant */
do {
print xm-x ; ym+y; /* I. Quadrant */
print xm-y ; ym-x; /* II. Quadrant */
print xm+x ; ym-y; /* III. Quadrant */
print xm+y ; ym+x; /* IV. Quadrant */
r = err;
if (r <= y) err += ++y*2+1; /* e_xy+e_y < 0 */
if (r > x || err > y) err += ++x*2+1; /* e_xy+e_x > 0 or no 2nd y-step */
} while (x < 0);
}
-------------------------------
Re: nxtbasic: 64x64 8bit sprite that I can paint.
Posted: Mon Aug 05, 2024 5:44 am
by unartic
funkheld wrote: ↑Sun Aug 04, 2024 1:55 pm
hello unartic , good day.
can you please implement this in nxtbasic?
thanks.
greetings
-----------------------------
void plotLine(int x0, int y0, int x1, int y1)
{
int dx = abs(x1-x0), sx = x0<x1 ? 1 : -1;
int dy = -abs(y1-y0), sy = y0<y1 ? 1 : -1;
int err = dx+dy, e2; /* error value e_xy */
for(;;){ /* loop */
print x0; y0;
if (x0==x1 && y0==y1) break;
e2 = 2*err;
if (e2 >= dy) { err += dy; x0 += sx; } /* e_xy+e_x > 0 */
if (e2 <= dx) { err += dx; y0 += sy; } /* e_xy+e_y < 0 */
}
}
-------------------------------
-------------------------------
void plotCircle(int xm, int ym, int r)
{
int x = -r, y = 0, err = 2-2*r; /* II. Quadrant */
do {
print xm-x ; ym+y; /* I. Quadrant */
print xm-y ; ym-x; /* II. Quadrant */
print xm+x ; ym-y; /* III. Quadrant */
print xm+y ; ym+x; /* IV. Quadrant */
r = err;
if (r <= y) err += ++y*2+1; /* e_xy+e_y < 0 */
if (r > x || err > y) err += ++x*2+1; /* e_xy+e_x > 0 or no 2nd y-step */
} while (x < 0);
}
-------------------------------
Currently nxtBasic already includes a (very fast) line drawing function
https://github.com/unartic/nxtBasic/blo ... cs.md#line
A circle function is still on the todo-list though