Re: Turbo Rascal - Vic Bitmap Mode
Posted: Sun Jan 12, 2020 6:59 am
Hi good afternoon.
trse is great for the vic20.
a sprite 16 byte with vertical collison.
control with a / s / d / w
how do you get the horizontal collison down please?
greeting
trse is great for the vic20.
a sprite 16 byte with vertical collison.
control with a / s / d / w
how do you get the horizontal collison down please?
greeting
Code: Select all
program sprite;
var
i,b,x,y :byte;
spr16L : array[] of byte = (
%11111111,
%10000001,
%00111100,
%00100100,
%00100100,
%00111100,
%10000001,
%11111111,
%01100110,
%10011001,
%01100110,
%10011001,
%01100110,
%10011001,
%01100110,
%10011001
);
spr16R : array[] of byte = (
%01100110,
%10011001,
%01100110,
%10011001,
%01100110,
%10011001,
%01100110,
%10011001,
%11111111,
%10000001,
%00111100,
%00100100,
%00100100,
%00111100,
%10000001,
%11111111
);
spr16L0 : array[8] of integer;
spr16M0 : array[8] of integer;
spr16R0 : array[8] of integer;
procedure spritetest();
begin
if (vbmTestPixel( x+15, y+15 ) = 0) then
begin
y := y + 1;
if (y>176) then y:=176;
end;
if (vbmTestPixel( x, y+15 ) = 0) then
begin
y := y + 1;
if (y>176) then y:=176;
end;
if (vbmTestPixel( x+15, y-2 ) = 0) then
begin
y := y - 1;
if (y=255) then y:=0;
end;
if (vbmTestPixel( x, y-2 ) = 0) then
begin
y := y - 1;
if (y=255) then y:=0;
end;
end;
procedure linien();
begin
for b:=0 to 20 do
begin
vbmDrawblot( b,30 );
end;
for b:=50 to 80 do
begin
vbmDrawblot( b,60 );
end;
for b:=120 to 150 do
begin
vbmDrawblot( b,80 );
end;
for b:=0 to 80 do
begin
vbmDrawblot( b,100 );
end;
for b:=100 to 159 do
begin
vbmDrawblot( b,100 );
end;
for b:=0 to 159 do
begin
vbmDrawblot( b,180 );
end;
end;
begin
vbmSetDisplayMode( 0 );
vbmClear(0);
vbmClearColor(blue);
vbmSpriteShiftR( spr16L, ^$a000, 1, 16, spr16L0 );
vbmSpriteShiftL( spr16L, ^$a080, 1, 16, spr16M0 );
vbmSpriteShiftR( spr16R, ^$a100, 1, 16, spr16R0 );
vbmSpriteStitch( ^$a100, ^$a080, 128 ); // 8 x 16 = 128 ($80) bytes to stitch
vbmSpriteShiftL( spr16R, ^$a100, 1, 16, spr16R0 );
linien();
x:=40;
y:=70;
while (true) offpage do
begin
i := getkey();
case i of
KEY_d:
begin
x:=x+1;
if (x>144) then x:=144;
end;
KEY_a:
begin
x:=x-1;
if (x=255) then x:=0;
end;
KEY_s:
begin
y:=y+1;
if (y>176) then y:=176;
end;
KEY_w:
begin
y:=y-1;
if (y=255) then y:=0;
end;
end;
vbmSetPosition1( x, y );
vbmDrawSprite16e( spr16L0, spr16M0, spr16R0 );
waitforraster( 0 );
vbmSetPosition1( x, y );
vbmDrawSprite16e( spr16L0, spr16M0, spr16R0 );
spritetest();
end;
end.