Now for the fun bit, debugging. hopefully it'll not be too bad but from what i remember from the magazines there was always something.
'page 10
'page 11
xl=tx
tx=xr*cs-yr*sn
yr=xr*sn+ry*cs
xr=tx
dx=oxc-xc:dy=oyc-yc
xc=xc+(8-yc)*dx/dy
dx=oxl-xl:dy=oyl-yl
xl=xl+(8-yl)*dx/dy
dx=oxr-xr:dy=oyr-yr
xr=xr+(8-yr)*dx/dy
vz=600/8
xc2=xc*vz
yc2=vz*2
xr2=xr*vz
xl2=xl*vz
vz=600/oyc
xc1=oxc*vz
yc1=vz*2
vz=600/oyr
xr1=oxr*vz
'page 12
yr1=vz*2
vz=600/oyl
xl1=oxl*vz
yl1=vz*2
clear fill triangle xl1,yl1 to xl2,yc2 to xc2,yc2
clear fill triangle xl1,yl1 to xc1,yc1 to xc2,yc2
clear fill triangle xr1,yr1 to xr2,yc2 to xc2,yc2
clear fill triangle xr1,yr1 to xc1,yc1 to xc2,yc2
'loop to draw track/barriers/trees
lt=34
donet=0
doneb=0
mem=mod(lt+tp,l)
xr=x(mem)-xp
yr=y(mem)-yp
x=xr*cs-yr*sn
y=xr*sn+yr*cs
repeat lt=lt-1
mem=mod(lt+tp+1,l)
an=mod(va(mem)-a+5760,5760)
'page 13
x=x-st(an)
y=y-ct(an)
if y<0 goto none
xo=ce(an)
yo=se(an)
c=20+60-(y/8) '************************
c2=c*1.5
if lt>28 goto trees
if lt>22 goto barriers
if lt=22 or lt=12 goto track
if lt>8 goto barriers
label track
ocxr=cxr:ocyr=cyr
ocxl=cxl:ocyl=cyl
vz=600/(y+y0)
cxr=(x+xo)*vz
cyr=vz*2
vz=600/(y-yo)
cxl=(x-xo)*vz
cyl=vz*2
'page 14
donet=donet+1
if donet<2 goto barriers
clear fill triangle ocxl,ocyl to ocxr,ocyr to cxl,cyl
clear fill triangle ocxr,ocyr to cxl,cyl to cxr,cyr
if lt>7 goto barriers
orxr=rxr:oryr=ryr
orxl=rxl:oryl=ryl
w=rm(mem)
xr=xo*w:yr=yo*w
vz=600/(y+yr)
rxr=(x+xr)*vz
ryr=vz*2
vz=600/(y-yr)
rxl=(x-xr)*vz
ryl=vz*2
if lt=7 goto barriers
setrgb 1,12,20,3
ac=and(mem,1)*c2
setrgb 2,c2,ac,ac
gtriangle orxl,oryl to ocxl,ocyl to rxl,ryl
'page 15
gtriangle orxr,oryr to ocxr,ocyr to rxr,ryr
setrgb 1,c2,ac,ac
gtriangle ocxl,ocyl to cxl,cyl to rxl,ryl
gtriangle ocxr,ocyr to cxr,cyr to rxr,ryr
label barriers
if lt=28 or lt=15 goto cb
if lt>12 goto trees
label cb
obxr=bxr:obyr1=byr1:obyr2=byr2
obxl=bxl:obyl1=byl1:obyl2=byl2
xr=xo*2
yr=yo*2
byr2=600/(y+yr)
bxr=(x+xr)*byr2
byr1=byr2*2
byl2=600/(y-yr)
bxl=(x-xr)*byl2
byl1=byl2*2
doneb=doneb+1
if doneb<2 goto trees
'page 16
setrgb 1,c2,c2,c2
fill triangle obxr,obyr1 to obxr,obyr2 to bxr,byr1
fill triangle obxl,obyl1 to obxl,obyl2 to bxl,byl1
fill triangle bxr,byr1 to bxr,byr2 to obxr,obyr2
fill triangle bxl,byl1 to bxl,byl2 to obxl,obyl2
label trees
if mem=1 gosub sl
w=td(mem)
xr=xo*w:yr=yo*w
vz=600/(y+yr)
txr=(x+xr)*vz
tyr1=vz*2
tyr2=-tyr1*th(mem)
tys=-tyr1*12
vz=600/(y-yr)
txl=(x-xr)*vz
tyl1=vz*2
tyl2=-tyl1*13
c5=c*.5
setrgb 1,0,c5,0
'page 17
setrgb 2,0,c5+15,0
w=(tyr1-tys)/4.5
if w>0 gtriangle txr-w,tyr1 to txr,tyr2 to txr+w,tyr1
w=(tyl1-tyl2)/5
if w>0 gtriangle txl-w,tyl1 to txl,tyl2 to txl+w,tyl1
label none
tc=mod(lt+tp+1,l)
if tc(tc)>0 gosub testcar
until(lt=1)
tc=mod(tp+1,l)
if tc(tc)>0 gosub testcar
tc=tp
if tc(tc)>0 gosub testcar
'draw cockpit
setrgb 1,4,4,4
fillrect 202,102 to 320,256
fillrect -202,102 to -320,256
sa=(left(1)-right(1))*50
fill triangle 202,102 to 202+sa,200 to 202-sa,200
fill triangle -202,102 to -202-sa,200 to -202+sa,200
'page 18
setrgb 1,40,40,40
line 202,102 to 202+sa,200
line -202,102 to -202+sa,200
setrgb 1,0,0,0
fill rect -320,150 to 320,256
fill triangle -320,150 to 320,150 to 0,110
triangle -320,150 to 320,150 to 0,90
setrgb 1,0,255,0
n=2+int(mod(ve(1)*100,30)/6)
for i=1 to n
x=(i-4)*10
if i=4 setrgb 1,255,0,0
next i
setrgb 1,255,0,0
ve=ve(1)*100
text -15,200,str$(int(ve))
g=1+int(ve/30)
text -55,170,str$(int(g))
'page 19
until(1=0)
label testcar
temp=0
car=1
'remove next line(test only)
'if mxcar=1 return
repeat car=car+1
if tp(car)<>tc goto blank
if tc(tc)<>car gosub car
if tc(tc)=car temp=car
label blank
until(car=mxcar)
if temp=0 return
car=temp
gosub car
return
label car
arx=xp(car)-xp:ary=yp(car)-yp
carx=arx*c(5760-a)+ary*s(5760-a)
cary=-arx*s(5760-a)+ary*c(5760-a)
'page 20
if cary<0 return
wa=mod(720-(a(car)-a)/16,360)
setrgb 1,4,4,4
r=pr(car)+c
g=pg(car)+c
b=pb(car)+c
w=0
repeat w=w+1
wx=cx(w,wa)+carx
wy=cy(w,wa)+cary
vz=600/wy
cx=wx*vz
cy=vz*1.2
wsv=vz*0.7
wsh=vz*0.5
if wy>0 fill rect cx-wsh,cy-wsv to cx+wsh,cy+wsv
if w=2 gosub body
until(w=4)
setrgb 1,r/2,g/2,b/2
setrgb 2,r,g,b
'page 21
setrgb 3,r,g,b
if cary<3 return
repeat w=w+1
wx=cx(w,wa)+carx
wy=cy(w,wa)+cary
vz=600/wy
tx(w)=wx*vz
if w=6 or w=7 ty(w)=vz*.4
if w=5 or w=8 ty(w)=vz*.6
until(w=8)
gtriangle tx(5),ty(5) to tx(6),ty(6) to tx(7),ty(7)
setrgb 2,r/2,g/2,b/2
gtriangle tx(5),ty(5) to tx(8),ty(8) to tx(7),ty(7)
setrgb 3,12,20,3
return
label body
' setrgb 1,0,0,0
vz=600/cary
cx=carx*vz
cy=vz*1.8*c(wa*16)
'page 22
wx=cx(9,wa)+carx
wy=cy(9,wa)+cary
if wy<0 return
uz=600/wy
ex=wx*uz
ey=uz*1.4
setrgb 1,r,g,b
fill triangle ex,ey to cx-cy,vz to cx+cy,vz
setrgb 1,r/2,g/2,b/2
fill triangle cx-cy,cy to cx-cy,vz to ex,ey
fill triangle cx+cy,cy to cx+cy,vz to ex,ey
setrgb 1,7,7,7
return
label sl
vx=fl/(y+yo)
cxr=(x+xo)*vz
cyr=vz+vz
vz=fl/(y-yo)
cxl=(x-xo)*vz
'page 23
cyl=vz+vz
clear line cxr,cyr to cxr,-cyr*2
clear line cxl,cyl to cxl,-cyl*2
setrgb 1,35,35,35
fill triangle cxl,-cyl*1.6 to cxl,-cyl*2.2 to cxr,-cyr*1.6
fill triangle cxr,-cyr*1.6 to cxr,-cyr*2.2 to cxl,-cyl*2.2
return
end
label setup
open window 640,512
window origin "CC"
dim s(5760),c(5760),tx(20),ty(20)
dim st(5760),ct(5760)
dim se(5760),ce(5760)
mxlen=1000
dim mh(36),th(mxlen),td(mxlen)
'page 24
dim x(mxlen),y(mxlen),xo(mxlen),yo(mxlen),va(mxlen)
dim rm(mxlen)
dim cx(20,360),cy(20,360)
mxcar=6
dim xp(mxcar),yp(mxcar),tp(mxcar),a(mxcar),ve(mxcar)
dim ac(mxcar),br(mxcar),left(mxcar),right(mxcar)
dim tc(mxlen),oa(mxcar),pr(mxcar),pg(mxcar),pb(mxcar)
dim cf(mxcar)
dim dat(1000,10),length(10)
for i=0 to 5760
s(i)=sin(i/2880*pi)
c(i)=cos(i/2880*pi)
st(i)=sin(i/2880*pi)*15
ct(i)=cos(i/2880*pi)*15
se(i)=sin(i/2880*pi)*12
ce(i)=-cos(i/2880*pi)*12
next i
for i=0 to 1000
td(i)=5.5+2.8*sin(i*i)
th(i)=12+4*sin(l1*i+i)
'page 25
next i
for i=1 to 36
mh(i)=-100-50*sin(i*cos(i))
next i
restore trackdata
read tracks,track
for i=1 to tracks
read length(i)
for j=1 to length(i)
read dat(j,i)
next j
next i
level=800-(4-level)*40
gosub makecar
return
'page 26
fl=600
setrgb 0,15,15,15
ctp=1
for i=2 to mxcar
yp(i)=i*20
xp(i)=10*(and(i,1)-.5)
next i
return
label maketrack
a=0
for i=0 to length(track)
w=0
for j=i-5 to i+5
k=mod(j+length(track),length(track))
w=w+abs(dat(k,track))
next j
rm(i)=1.1+w/300
a=mod(a+dat(i,track)*16+5760,5760)
va(i)=a
'page 27
if i>0 then
x(i)=x(i-1)+s(a)*15
y(i)=y(i-1)+c(a)*15
fi
xo(i)=c(a)*12
yo(i)=-s(a)*12
rect x(i)/8,y(i)/8 to x(i)/8+1,y(i)/8+1
next i
return
label makecar
restore cardata
for i=1 to 9
read cx(i,0),cy(i,0)
for j=1 to 360
a=j*16
cx(i,j)=cx(i,0)*c(a)-cy(i,0)*s(a)
cy(i,j)=cx(i,0)*s(a)+cy(i,0)*c(a)
next j
next i
'page 28
ar=.002:bm=.02:am=.014
for i=1 to mxcar
read pr(i),pg(i),pb(i)
next i
return
label cardata
data 1.5,3,-1.5,3,1.5,-3,-1.5,-3
data -1.2,-3.1,-1.2,-3.6,1.2,-3.6,1.2,-3.6,1.2,-3.1
data 0,-3
data 80,0,0
data 80,80,0
data 80,80,80
data 0,0,80
data 80,40,0
data 0,60,0
data 0,40,80
data 40,40,40
'page 29
data 5,5
data 79
data 0,0,0,0,0
data 9,9,9,9,9
data 9,9,9,9,9
data 0,0,0,0,0
data 0,0,0,0,0
data 9,9,9,9,9
data 9,9,9,9,9
data 0,0,0,0,0
data 0,0,0,0,0
data 9,9,9,9,9
data 9,9,9,9,9
data 0,0,0,0,0
data 0,0,0,0,0
data 9,9,9,9,9
data 9,9,9,9,9
data 0,0,0,0
'page 30
data 0,0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 1,1,1,1,1
data 0,0,0,0,0
data 9,9,9,9,9
data 9,9,9,9,9
data 0,0,0,0,0
data 9,9,9,9,9
data -9,-9,-9,-9,-9
data 0,0,0,0,0
data 9,9,9,9,9
data 9,9,9,9,9
data 9,0,9,9,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
'page 31
data 0,0,0,0,0
data 7,7,8,8,8
data 8,7,7,8,8
data 8,7,8,9,8
data 8,9,7,4,4,0
data 265
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 9,9,9,9,9
data 9,9,9,9,9
data 0,0,0,0,0
data 0,0,0,0,0
data 9,9,9,9,9
data 9,9,9,9,9
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
'page 32
data 0,0,0,0,0
data 0,0,0,0,0
data -9,-9,-9,-9,-9
data -9,-9,-9,-9,-9
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 9,9,9,9,9
data 9,9,9,9,9
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 9,9,9,9,9
data 9,9,9,9,9
data 0,0,0,0,0
data 0,0,0,0,0
'page 33
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 9,9,9,9,9
data 9,9,9,9,9
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,1,0,0
data 0,0,0,0,0
data 0,0,0,0,0,0,0,0
'page 34
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 10,10,10,10,10
data 10,10,10,10
data 10,10,10,10,10
data 10,10,10,10
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0,0
data 10,10,10,10,10
data 10,10,10,10
data 10,10,10,10,10
data 10,10,10,10
data 0,0,0,0,0
data 0,0,0,0,0
data 0,0,0,0
'page 35
data 553
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 9,9,9,9,9,9,9,-9,-9,-9
data -9,-9,-9,-9,-9,-9,8,7,6,6
data 2,2,2,2,2,2,2,2,2,2
data 2,2,2,2,2,2,2,2,2,2
data 2,2,2,2,2,2,2,2,2,2
data 2,2,2,2,2,2,2,2,2,2
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data -8,-8,-8,-8,-8,-8,-8,-8,0,0
data 0,0,8,8,8,8,8,8,8,8
'page 36
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 4,4,4,4,4,4,4,4,4,4
data 4,4,4,4,4,4,4,4,4,4
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 4,4,4,4,4,4,4,4,4,4
data 4,4,4,4,4,4,4,4,4,4
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data -2,-2,-2,-2,-2,-2,-2,-2,-2,-2
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data -7,-7,-7,-7,-7,-7,-7,-7,-7,-2
data 7,7,7,7,7,7,7,7,7,7
data -6,-6,-6,-6,-6,-5,-5,-5,-5,-4
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
'page 37
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 5,5,5,5,5,5,5,5,5,5
data 4,4,4,4,4,4,4,4,4,4
data 3,3,3,3,3,3,3,3,3,3
data 2,2,2,2,2,2,2,2,2,2
data 2,2,2,2,2,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,1,0,0,0,0,0
data -1,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0