A little demo. If you improve it...Please post

WARNING ! Will run slowly on ZX81 !
set display mode 1024,800,32
sync on : sync rate 60
create bitmap 2,54,54
cls 1
ink rgb(0,160,0)
box 0,0,27,27
box 28,28,54,54
ink rgb(0,100,0)
box 1,1,26,26
box 29,29,52,52
nn=2000
dim xtr#(nn)
dim ytr#(nn)
dim ztr#(nn)
sz3#=405.0
sz2#=605.0
e#=200.0
mmm#=0.005
ee#=270.0
dd#=0.1
g#=0.01
fl=1
for f=0 to nn
if f<600
xtr#(f)=abs(sz3#*sin(f*0.4))
ztr#(f)=abs(sz2#*cos(f*0.2))
ytr#(f)=e#
e#=e#*0.9976
e#=e#-mmm#
if mmm#<3.0 then inc mmm#,0.002
sz3#=sz3#*0.987
sz2#=sz2#*0.986
else
xtr#(f)=sz3#*sin(f*0.4)
ztr#(f)=sz2#*cos(f*0.2)
if sz3#<450.0
sz3#=sz3#+g#
sz2#=sz2#+g#
g#=g#+0.01
endif
ytr#(f)=188*sin(ee#)
ee#=ee#+(dd#*fl):dd#=dd#+0.0003
if ee#>340.0 then fl=-1
if ee#<20.0 then fl=1
endif
if f=600 then sz2#=0.1:sz3#=0.1
next f
ink rgb (0,255,0)
dot 53,53
dot 27,27
get image 2,0,0,54,54,1
set current bitmap 0
cls 0
for f=0 to 7000
r=100+rnd(255)
g=100+rnd(255)
b=100+rnd(255)
ink rgb(r,b,g)
dot rnd(1679),rnd(1049)
next f
get image 5,0,0,1024,800,1
sz#=500.0
sz1#=sz#
a=100
d=delay
dim xs#(782)
dim ys#(782)
dim zs#(782)
set ambient light 60
color backdrop 0
obj=100
set camera range 0.1,70000
```````````````````````````````
make object cube 1,0.2
e=0
d=delay
s7#=0.5
m#=1.1
n#=0.025
qq=0
j2=93
for y=-180 to 180 step 4
s7#=s7#*m#
m#=m#*0.9994
g#=y
if y>120
inc j2
g#=(y+70)*sin(j2*1.5)
endif
for x=-180 to 180 step 4
x#=s7#*sin(x)
y#=s7#*cos(x)
position object 1,x#,g#,y#
xs#(e)=x#
ys#(e)=g#
zs#(e)=y#
inc e:if e>181 then gosub make
next x
inc d
next y
make object sphere 3,-10000
set object transparency 3,5
texture object 3,5
make object sphere 4,-20020
set object transparency 4,5
rotate object 4,90,0,90
texture object 4,5
make light 1
hide light 0
hide object 1
set camera fov 50
tr2#=100.0
r3#=1.0
t3#=0.1
t4#=0.3
r2#=-2.0
dwn#=-1.0
`````````````````````````````````````
do
x55#=x44#
y55#=y44#
z55#=z44#
x44#=x#
y44#=y#
z44#=z#
x#=xtr#(tr)
y#=ytr#(tr)
z#=ztr#(tr)
inc tr:if tr>2000 then tr=0
position object 1,x#,y#,z#
position camera x55#,y55#,z55#
if tr>599
if r3#>0.0 then r3#=r3#-0.00125
dwn#=dwn#*0.995
endif
point camera x#*r3#,(y#*r3#)+dwn#,z#*r3#
inc delay
inc delay2
inc delay3
inc delay4
s=1+abs(2*sin(delay*0.25))
if tr>400 then s=2
gosub scroll:get image 2,0,0,54,54,1
set current bitmap 0
sync
loop
`````````````````````````````````````````````````
scroll:
set current bitmap 2
get image 4,0,0,54,s,1
get image 3,0,s,54,54,1
paste image 3,0,0
paste image 4,0,54-s
get image 3,0,0,s,54,1
get image 4,s,0,54,54,1
paste image 4,0,0
paste image 3,54-s,0
return
`````````````````````````````````````
make:
for f=0 to 90
MAKE OBJECT TRIANGLE 2,xs#(f+1),ys#(f+1),zs#(f+1),xs#(f),ys#(f),zs#(f),xs#(f+91),ys#(f+91),zs#(f+91)
MAKE OBJECT TRIANGLE obj,xs#(f),ys#(f),zs#(f),xs#(f+91),ys#(f+91),zs#(f+91),xs#(f+90),ys#(f+90),zs#(f+90)
make mesh from object 1,2
add limb obj,1,1
delete object 2
delete mesh 1
set object cull obj,0
texture object obj,2
texture limb obj,1,2
set object cull obj,0
inc obj
next f
for f=0 to 90
xs#(f)=xs#(f+91)
ys#(f)=ys#(f+91)
zs#(f)=zs#(f+91)
next f
e=91
return