REM *** Dart Racer by Fryer ***

setup()
gosub menusetup
repeat setdispbuf ss
  count=count+1
  mtp=mod(mtp+1,length)
  if count>99 count=0
  if count=0 is=mod(is+1,im)
  icol=3*(50-abs(count-50))
  ss=1-ss
  setdrawbuf ss
  clear window
  oj=j
  j=peek("port1")
  nj=j
  if oj=j nj=0
  menuy=1+mod(menuy+6+and(nj,64)/64-and(nj,16)/16,7)
  for i=1 to length-1
    if i=1 setrgb 1,255,0,0
    if i=3 setrgb 1,255,255,255
    x1=320-mz(i)/5
    y1=220-mx(i)/5
    if i=mtp setrgb 1,0,255,0
    fill rectangle x1-4,y1-4 to x1+4,y1+4
    if i=mtp setrgb 1,255,255,255
  next i
  line 320,230 to 300,230
  line 300,230 to 305,226
  line 300,230 to 305,234
  text 270,255,track$(opt(2))
  for m=1 to 7
    if n=2 and m=4 setrgb 1,100,100,100
    if n=2 and m=6 setrgb 1,255,255,255
    if m=4 text 470,393,"} 1 Player"
    text 270,280+m*25,opt$(m)
    if m<6 then
      if m<>4 text 380,280+m*25,str$(opt(m))
      if m=4 text 380,280+m*25,str$(opt(m)-1)
      if menuy=m then
        opt(m)=opt(m)+and(nj,32)/32-and(nj,128)/128
        opt(m)=min(max(opt(m),1),optmax(m))
        if m=2 and opt(m)<>course then
          course=opt(m)
          getdata()
        fi
      fi
    fi
  next m
  text 472,330,str$(optmax(2))
  setrgb 1,40+icol,70+icol,140+icol
  text 130,490,i$(is+1)
  setrgb 1,255,255,255
  win$="Last winner P"+str$(win)
  if win>0 text 260,40,win$
  x2=360
  if menuy<6 x2=398
  rectangle 260,266+menuy*25 to x2,285+menuy*25
  n=opt(1)
  laps=opt(3)
  nships=opt(4)
  level=13-opt(5)*3
if and(oj,16384)>0 and and(j,16384)=0 and menuy=6 gosub go
  if and(oj,16384)>0 and and(j,16384)=0 and menuy=7 ex=1 
  if j=7936 optmax(2)=courses
until (ex=1)  
setdrawbuf 1-ss
clear window
text 50,240,"Code by Fryer"
text 50,265,"e-mail R.Fryer@BTInternet.com"
text 50,300,"Big thanks to Shockwave (Nick Simpson) for the .xpo"
text 50,330,"Check out www.yabasic.co.uk for more games/demos/forums"
text 150,400,"Thankyou for playing"
pause 1
end
label menusetup
  dim opt(6),opt$(7),optmax(6),i$(10)
  i$(1)="          Dart Racer by Fryer"
  i$(2)="       With thanks to Shockwave"
  i$(3)="   Hi to everyone at www.yabasic.co.uk"
  i$(4)="    Win 1P races to unlock new tracks"
  i$(5)="  LEFT/RIGHT-steer X-Thrust SQUARE-brake"
  i$(6)="Don't go until green light for quick start"
  i$(7)="   START to pause then TRIANGLE to exit"
  i$(8)="  View other ships with X during replay"
  i$(9)="   Square to change view during replay"
  i$(10)="   Rotate and zoom with D-pad in replay"
  im=10
  is=0
  opt$(1)="PLAYERS       (1-2)"
  optmax(1)=2
  opt(1)=1
  opt$(2)=" TRACK        (1-5)   Unlocked"
  optmax(2)=1
  opt(2)=1
  opt$(3)="No. LAPS      (1-9)"
  optmax(3)=9
  opt(3)=3
  opt$(4)="AI SHIPS      (0-3)"
  optmax(4)=4
  opt(4)=2
  opt$(5)="AI LEVEL      (1-4)"
  optmax(5)=4
  opt(5)=1
  opt$(6)="  RACE  "
  opt$(7)="  QUIT  "
  menuy=6
  ex=0
  course=1
  getdata()
return
label go
  win=0
  reset()
  repeat setdispbuf ss
    ss=1-ss
    setdrawbuf ss
    clear window
    count=count+1
    j1=peek("port1")
    j(1)=j1
    j(2)=peek("port2")
    if r=1 then 
      if and(j1,4096)>0 setdispbuf 1-ss
      if oj1<j1 and and(j1,32768)>0 then
        cpv=mod(cpv+1,3)
        zoom=1000
        if cpv<2 then
          first=7
          last=-7
          rss=0:rsc=1
          dip=3
        else
          last=0
          if n=2 then
            first=16
          else
            first=20
          fi
          dip=5
        fi
        if cpv=1 then
          camt=mod(tp(ds)+13,length)
          camx=mx(camt)+ran(80)-40
          camz=mz(camt)+ran(80)-40
          camtt=mod(camt+13,length)
        fi
      fi
      if oj1<j1 and and(j1,16384)>0 then
        view=mod(view+1,s)
        if cpv=1 and abs(tp(view+1)-camt)>13 then
          camt=mod(tp(view+1)+13,length)
          camx=mx(camt)+ran(80)-40
          camz=mz(camt)+ran(80)-40
          camtt=mod(camt+13,length)
        fi
      fi
      rd=max(min(rd-and(j1,16)/16+and(j1,64)/64,200),30)
      ra=mod(ra+and(j1,32)/16-and(j1,128)/64+360,360)
      oj1=j1
    fi
    if and(j1,8)=8 then
      setdrawbuf 1-ss
      setrgb 1,0,0,0
text 110,25,"Triangle to exit anything else to continue"
      repeat until (peek("port1")=0)
      repeat 
        j3=peek("port1")
        if and(j3,4096)>0 race=4
        if and(j3,8)=8 j3=j3-8
      until (j3>0)
    fi
    js=j1+32768*j(2)
    if js<>bp and r=0 then
      pos(cnt)=count
      cnt1(cnt)=bp1
      cnt2(cnt)=bp2
      bp1=j1
      bp2=j(2)
      bp=js
      cnt=cnt+1
    fi
    if r=1 then
      if count=pos(cnt) cnt=cnt+1
      j(1)=cnt1(cnt)
      j(2)=cnt2(cnt)
    fi
    if race=3 and r=0 reset()
    for p=1 to s
      if n=1 and p>1 gosub ai
      if count<200 then
        if count>150 then
          if and(j(p),16384)>0 and qs(p)>0 then
            m(p)=-qs(p)
          else
            qs(p)=qs(p)-3
          fi
        fi
        if and(j(p),16384)>0 qs(p)=0
        if count<150 j(p)=0
      fi 
      if race>2 j(p)=j(p)-and(16384,j(p))
      ma=(ma(p)-and(j(p),32)/320+and(j(p),128)/1280)/1.08
      a=mod(a(p)+ma+360,360)
m=(m(p)-and(j(p),16384)/16384+and(j(p),32768)/32768)/1.01
      sna=snh(a*16)
      csa=csh(a*16)
      cx=cx(p)+m*sna/40
      cz=cz(p)-m*csa/40
      xg=cx+10*sna
      zg=cz-10*csa
      tp=tp(p)
      if tp=half and half(p)=full(p) half(p)=half(p)+1
      if tp=0 and half(p)>full(p) then
        full(p)=full(p)+1
        if full(p)=laps race=200
        if full(p)=laps and win=0 win=p
      fi
      cd=(mx(tp)-xg)^2+(mz(tp)-zg)^2
      np=mod(tp+1,length)
      nd=(mx(np)-xg)^2+(mz(np)-zg)^2
      lp=mod(tp+length-1,length)
      ld=(mx(lp)-xg)^2+(mz(lp)-zg)^2
      toff=(cd-ld+400)/40
      toff=cd-toff^2
      np(p)=np
      if toff>225 m=m/1.08
      if nd<cd tp(p)=np
      if ld<cd tp(p)=lp
      ma(p)=ma
      m(p)=m
      cx(p)=cx
      cz(p)=cz
      x(p)=xg
      z(p)=zg
      a(p)=a
      sna(p)=sna
      csa(p)=csa
      sa(p)=mod(ma*16+360,360)
      np(p)=np
    next p
    for i=1 to ships-1
      for j=i+1 to ships
        mul=0
        d1=(x(i)-cx(j))^2+(z(i)-cz(j))^2
        d2=(x(j)-cx(i))^2+(z(j)-cz(i))^2
        if d1<32 mul=(32-d1)/5
        if d2<32 mul=(d2-32)/5
        m(i)=m(i)-mul
        m(j)=m(j)+mul
      next j
    next i
    sort(1)=0
    if r=0 then  
      for p=1 to s
        if p<=n gosub track
        q=s+1-p
        if n=2 then 
          gosub drawship
        else
          pos=0
          zds(q)=csa*(z(q)-z)-sna*(x(q)-x)
          repeat
            pos=pos+1 
          until (zds(sort(pos))>zds(q))
          for j=p to pos step-1 
            sort(j+1)=sort(j) 
          next j
          sort(pos)=q
        fi
      next p
      if n=1 then     
        csa=csa(1)
        sna=sna(1)
        rss=snh(sa(1)*16)
        rsc=csh(sa(1)*16)
        x=x(1)
        z=z(1)
        va=a(1)
        yoff=256
        for pt=s to 1 step-1
          q=sort(pt)
          p=s+1-q
          if p<s gosub drawship
        next pt
        setrgb 1,0,0,0
        fill rectangle 0,400 to 640,512
      fi
    else
        ds=view+1
      if cpv=0 then
        x=x(ds)+rd*sn(ra)
        z=z(ds)-rd*cs(ra)
        va=ra
        csa=cs(ra)
        sna=sn(ra)
      fi
      if cpv=2 then
        x=x(ds)
        z=z(ds)
        va=a(ds)
        csa=csh(va*16)
        sna=snh(va*16)
        rss=snh(sa(ds)*16)
        rsc=csh(sa(ds)*16)
      fi
      if cpv=1 then
        x=camx
        z=camz
        if tp(ds)=camtt then
          camt=mod(tp(ds)+10+int(ran(20)),length)
          camx=mx(camt)+ran(80)-40
          camz=mz(camt)+ran(80)-40
          camtt=mod(camt+10+int(ran(20)),length)
          dx=camx-x(ds)
          dz=-camz+z(ds)
          va=mod(360+atan(dx,dz)/pi*180,360)
        fi
        tp=tp(ds)
        dx=camx-x(ds)
        dz=-camz+z(ds)
        aa=mod(360+atan(dx,dz)/pi*180,360)
        if va-aa>180 aa=aa+360
        if aa-va>180 va=va+360
        mca=mca+max(min((aa-va)/50,2.8),-2.8)
        mca=mca*.87
        va=mod(360+va+mca,360)
        csa=csh(va*16)
        sna=snh(va*16)
        d=sqrt(dx^2+dz^2)
        zoom=max(zoom+(d*14-zoom)/8,600)
      fi
      yoff=256
      gosub drawtrack
      for p=1 to s
        q=s+1-p
          pos=0
          zds(q)=csa*(z(q)-z)-sna*(x(q)-x)
          repeat
            pos=pos+1 
          until (zds(sort(pos))>zds(q))
          for j=p to pos step-1 
            sort(j+1)=sort(j) 
          next j
          sort(pos)=q
      next p
      for pt=s to 1 step-1
        q=sort(pt)
        p=s+1-q
        if cpv<2 or q<>ds gosub drawship
      next pt
      setrgb 1,0,0,0
      if cpv=2 fill rectangle 0,400 to 640,512
      if and(count,32)>0 fill triangle 20,20 to 20,40 to 33,30
    fi
    if race>2 race=race-1
  until (race=2)
  setdrawbuf ss
  setdispbuf ss
  clear window
  setrgb 1,200,200,200
  if win=1 and n=1 and ships>1 then
    text 230,200,"Congratulations"
    if course<courses text 225,240,"You won the race" 
    if course=courses text 215,240,"You won the series" 
    if course=optmax(2) then
      if course<courses text 215,320,"New track unlocked" 
      optmax(2)=min(optmax(2)+1,courses)
      course=optmax(2)
      opt(2)=course
      getdata()
    fi
    wait 4
  fi
  if n=2 and win>0 then
    w$="P"+str$(win)+" is the winner"
    text 225,240,w$
    wait 4
  fi
return
sub setup()
  open window 640,512
  ss=0
  dim sn(360),cs(360),snh(5760),csh(5760)
  for i=0 to 360
    sn(i)=sin(i/180*pi)
    cs(i)=cos(i/180*pi)
  next i
  for i=0 to 5760
    snh(i)=sin(i/2880*pi)
    csh(i)=cos(i/2880*pi)
  next i
  dim j(6),a(6),x(6),z(6),tp(6),sa(6)
  dim cx(6),cz(6),m(6),sa(6)
  dim ma(6),sna(6),csa(6),np(6)
  dim qs(6),rs(6),half(6),full(6),mxp(6)
  dim pos(5000),cnt1(5000),cnt2(5000),jet(6)
  dim track(1000),mx(1000),mz(1000),track$(10)
  dim red(10,2),green(10,2),blue(10,2)
  dim store(1000,10),length(10)
  dim sort(7),zds(7),yo(7)
  zds(0)=1000000
  dim lx(1000),lz(1000)
  dim rx(1000),rz(1000)
  read courses
  for tc=1 to courses
    read length(tc),track$(tc)
    for pal=1 to 2
      read red(tc,pal),green(tc,pal),blue(tc,pal)
    next pal
    for i=1 to length(tc)
      read track
      store(i,tc)=mod(store(i-1,tc)+track+360,360)
    next i
  next tc
  ra=315
  rd=100
  r=1
  setrgb 0,40,70,140
end sub
sub reset()
  ships=nships
  if n=2 ships=2
  r=1-r
  for i=1 to 4
    a(i)=0:tp(i)=0:ma(i)=0:m(i)=0
    j(i)=0
    race=0
    qs(i)=150
    jet(i)=0
    half(i)=0
    full(i)=0
    if r=0 rs(i)=150+ran(10)+(ships-i)*8
    cz(i)=-(ships-i)*16
    cx(i)=4
    if int((i+ships)/2)=(i+ships)/2 cx(i)=-4
  next i
  js=0
  bp=0
  bp1=0:bp2=0
  if r=1 then
    first=7
    last=-7
    rss=0:rsc=1
    dip=3
    camt=7
    camx=mx(camt)+ran(80)-40
    camz=mz(camt)+ran(80)-40
    camtt=mod(camt+15,length)
    ds=1
  else
    getdata()
    last=0
    if n=2 then
      first=16
    else
      first=20
    fi
    dip=5
    for res=0 to 5000
      pos(res)=0
      cnt1(res)=0
      cnt2(res)=0
    next res
  fi
  if n=1 s=ships
  if n=2 s=2
  half=int(length/2)
  cnt=0:count=0:cpv=1
  view=0
  zoom=1000
  if n=2 and win>0 view=win-1
end sub
sub getdata()
  x=0:z=0
  a=0
  length=length(course)
  red1=red(course,1)
  green1=green(course,1)
  blue1=blue(course,1)
  red2=red(course,2)
  green2=green(course,2)
  blue2=blue(course,2)
  for i=0 to length
    a=store(i,course)
    track(i)=a
    ox=x
    oy=y
    x=x+20*sn(a)
    z=z+20*cs(a)
    mx(i)=x
    mz(i)=z
    lx(i)=x-15*cs(a)
    lz(i)=z+15*sn(a)
    rx(i)=x+15*cs(a)
    rz(i)=z-15*sn(a)
  next i
end sub
label ai
  m=m(p)
  np1=mod(np(p)+2-int(m/80),length)
  np2=mod(np(p)+2-int(m/20),length)
  snai=sn(a(p))
  csai=cs(a(p))
  dx1=x(p)-mx(np1)
  dz1=z(p)-mz(np1)
  dxr1=csai*dx1+snai*dz1
  dzr1=csai*dz1-snai*dx1
  dx2=x(p)-mx(np2)
  dz2=z(p)-mz(np2)
  dxr2=csai*dx2+snai*dz2
  dzr2=csai*dz2-snai*dx2
  tn1=atan(dxr1/dzr1)/pi*180
  tn2=atan(dxr2/dzr2)/pi*180
  j(p)=32768
  if m>-60 j(p)=0
  if abs(tn2)<(20-m/10) j(p)=16384
  if tn1>level j(p)=j(p)+32
  if tn1<-level j(p)=j(p)+128
  if count<rs(p) j(p)=and(j(p),160)
return
label drawship
  cx=cx(q)
  cz=cz(q)
  m=m(q)
  jet=jet(q)
  jet=max(min(jet-and(j(q),16384)/2048+4,0),-100)
  jet(q)=jet
  sa1=sa(q)
  a=a(q)
  xp=x(q)
  zp=z(q)
  x1=cx-x
  z1=cz-z
  x2=xp-x
  z2=zp-z
  sz1=(z1*csa-x1*sna)/zoom
  if sz1>0 then
    sz2=(z2*csa-x2*sna)/zoom
    if sz2>0 then
      sx1=x1*csa+z1*sna
      sy1=0
      sx2=x2*csa+z2*sna
      sy2=-1
      rsx1=320+(sx1*rsc-sy1*rss)/sz1
      rsy1=yoff+(sy1*rsc+sx1*rss)/sz1
      rsx2=320+(sx2*rsc-sy2*rss)/sz2
      rsy2=yoff+(sy2*rsc+sx2*rss)/sz2
      rnf=ss+ran(10)/60
      flame=1.1-jet/250+rnf/2
      x5=(xp-cx)*flame+cx-x
      z5=(zp-cz)*flame+cz-z
      sx5=x5*csa+z5*sna
      sz5=(z5*csa-x5*sna)/zoom
      xo=4*cs(sa1)-2*sn(sa1)
      lta=mod(a+220,360)
      x3=xp+xo*cs(lta)-x
      z3=zp+xo*sn(lta)-z
      sz3=(z3*csa-x3*sna)/zoom
      sx3=x3*csa+z3*sna
      sy3=1+2*sn(sa1)
      rsx3=320+(sx3*rsc-sy3*rss)/sz3
      rsy3=yoff+(sy3*rsc+sx3*rss)/sz3
      rta=mod(a+320,360)
      x4=xp+xo*cs(rta)-x
      z4=zp+xo*sn(rta)-z
      sz4=(z4*csa-x4*sna)/zoom
      sx4=x4*csa+z4*sna
      sy4=1-2*sn(sa1)
      rsx4=320+(sx4*rsc-sy4*rss)/sz4
      rsy4=yoff+(sy4*rsc+sx4*rss)/sz4
      rsx5=320+(sx2*rsc-sy1*rss)/sz2
      rsy5=yoff+(sy1*rsc+sx2*rss)/sz2
      shad=3+ran(.003)*m
      rsx6=320+(sx1*rsc-shad*rss)/sz1
      rsy6=yoff+(shad*rsc+sx1*rss)/sz1
      rsx7=320+(sx3*rsc-shad*rss)/sz3
      rsy7=yoff+(shad*rsc+sx3*rss)/sz3
      rsx8=320+(sx4*rsc-shad*rss)/sz4
      rsy8=yoff+(shad*rsc+sx4*rss)/sz4
      setrgb 3,0,0,40
      if sz5>0 gosub flame
      setrgb 1,red1-5,green1-5,blue1-5
      fill triangle rsx6,rsy6 to rsx7,rsy7 to rsx8,rsy8
      vatest=mod(va-a+360,360)
      if vatest>70 and vatest<290 then
        fill triangle rsx2,rsy2 to rsx3,rsy3 to rsx4,rsy4
      fi
      if p=s then
        setrgb 1,0,0,145
        setrgb 3,150,0,0
      else
        setrgb 1,120,0,145
        setrgb 3,80,180,0
      fi
      if vatest<180 gtriangle rsx3,rsy3 to rsx2,rsy2 to rsx1,rsy1
      if vatest<90 and vatest>45 gosub engine
      gtriangle rsx4,rsy4 to rsx2,rsy2 to rsx1,rsy1
      if vatest>270 and vatest<315 gosub engine
      if vatest>=180 gtriangle rsx3,rsy3 to rsx2,rsy2 to rsx1,rsy1
      if vatest>=315 or vatest<=45 gosub engine
    fi
  fi
return
label engine
    setrgb 3,0,0,40
    setrgb 1,-jet*3,-jet,0
    gtriangle rsx5,rsy5 to rsx2,rsy2 to rsx3,rsy3
    gtriangle rsx5,rsy5 to rsx2,rsy2 to rsx4,rsy4
    gtriangle rsx5,rsy5 to rsx3,rsy3 to rsx4,rsy4
    if p=s then
      setrgb 1,0,0,145
      setrgb 3,150,0,0
    else
      setrgb 1,120,0,145
      setrgb 3,80,180,0
    fi
return
label flame
  setrgb 1,-jet*4,-jet*2*ss,0
  rsx5a=320+(sx5*rsc+rss)/sz5
  rsy5a=yoff+(sx5*rss-1+rsc)/sz5
  gtriangle rsx5a,rsy5a to rsx2,rsy2 to rsx3,rsy3
  gtriangle rsx5a,rsy5a to rsx2,rsy2 to rsx4,rsy4
return
label track
  ds=min(p,n)
  csa=csa(ds)
  sna=sna(ds)
  rss=snh(sa(ds)*16)
  rsc=csh(sa(ds)*16)
  x=x(ds)
  z=z(ds)
  va=a(ds)
  yoff=256
  if n=2 yoff=256*p-128
label drawtrack
  sa=sa(ds)
  tp=tp(ds)
  if r=1 and cpv=1 then
    if tp-camt>30 camt=camt+length
    if camt-tp>30 tp=tp+length
    tp=mod((tp*3+camt)/4,length)
  fi
  clear fill rectangle 0,512 to 640,yoff-128
  setrgb 1,60,210,240
  setrgb 2,10,20,30
  setrgb 3,10,20,30
  gtriangle 320,900 to 320-600*rsc,3+yoff-600*rss to 320+600*rsc,3+yoff+600*rss
  setrgb 1,red1,green1,blue1
  setrgb 2,red1,green1,blue1
  for i=first to last step-1
    j=mod(i+tp+length,length)
    rx1=rx(j)-x
    rz1=rz(j)-z
    lx1=lx(j)-x
    lz1=lz(j)-z
    x1=rx1*csa+rz1*sna
    z1=max(0.01,(rz1*csa-rx1*sna)/zoom)
    x2=lx1*csa+lz1*sna
    z2=max(0.01,(lz1*csa-lx1*sna)/zoom)
    sx1=320+(rsc*x1+rss*3)/z1
    sy1=yoff+(rsc*3+rss*x1)/z1
    sx2=320+(rsc*x2+rss*3)/z2
    sy2=yoff+(rsc*3+rss*x2)/z2
    if i<first gosub section
    osx1=sx1:osy1=sy1
    osx2=sx2:osy2=sy2
  next i
return 
label section
  fill triangle osx2,osy2 to osx1,osy1 to sx1,sy1
  fill triangle osx2,osy2 to sx2,sy2 to sx1,sy1
  if abs(i)<6 gosub lights
return
label lights
  mx=mx(j)-x
  mz=mz(j)-z
  x3=mx*csa+mz*sna
  z3=max(0.01,(mz*csa-mx*sna)/zoom)
  sx3=320+(rsc*x3+rss*dip)/z3
  sy3=yoff+(rsc*dip+rss*x3)/z3
  col=32*abs(i)
  if r=1 and cpv<2 col=0
  setrgb 3,red2-col,green2-col,blue2-col
  if int(j)=0 setrgb 3,0,255,0
  if (150-count)>j*50 setrgb 3,255,0,0
  gtriangle osx1,osy1 to osx2,osy2 to sx3,sy3
return

data 5

data 130,"Gracemount"
data 0,0,40
data 0,0,255
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 4,4,4,4,4,4,4,4,4,4
data 4,4,4,4,4,4,4,4,4,4
data 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
data 4,4,4,4,4,4,4,4,4,4
data 4,4,4,4,4,4,4,4,4,4
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 96,"Liberton"
data 0,0,40
data 0,0,255

data 0,0,0,0,0
data 0,0,0,0,0
data 10,10,10,10,10,10,10,10,10
data 0,0,0,0,0
data 0,0,0,0,0
data 10,10,10,10,10,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 10,10,10,10,10,10,10,10,10
data 0,0,0,0,0
data 0,0,0,0,0
data 10,10,10,10,10,10,10,10,10
data 0,0,0,0,0
data 0,0,0,0,0


data 192,"Marchmont"
data 0,0,0
data 255,0,255

data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 10,10,10,10,10,10,10,10,10
data -10,-10,-10,-10,-10,-10,-10,-10,-10
data 0,0,0,0,0,0,0,0,0,0
data 10,10,10,10,10,10,10,10,10
data 0,0,0,0,0,0,0,0,0,0
data 10,10,10,10,10,10,10,10,10
data 10,10,10,10,10,10,10,10,10
data -10,-10,-10,-10,-10,-10,-10,-10,-10
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 10,10,10,10,10,10,10,10,10
data 0,0,0,0,0,0,0,0,0,0
data 10,10,10,10,10,10,10,10,10
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0


data 111,"Inch"
data 10,10,10
data 180,180,180

data 0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 10,10,10,10,10,10,10,10,10
data 10,10,10,10,10,10,10,10,10
data -30,-30,-30,-10,-10,0,0,0,0,0
data 10,20,20,20,20,20,20,20,10
data 0,0,0,0,0,0,0,-10,-10
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,-10,0,-10,-5,0,0
data 10,0,10,10,10,10,10,15,15
data 15,15,15,15,10,10,10,0,0
data 0,0,0,0,0,0,0
data 0,0,0,0,0


data 207,"montreal"
data 20,0,40
data 170,0,255

data 0,0,0,0,0,0,0,0,0,0
data 5,5,5,5,-15,-15,-15,-15,-15,-15
data 20,20,20,20,20,20,20,20,20,20
data 0,0,0,0,0,0,0,0,0,0
data 10,10,10,10,10,-10,-10,-10,-10,-10
data 0,0,0,0,0,0,10,10,0,0
data -12,-12,-12,-12,10,10,10,10,10,10
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 15,15,15,15,15,15,-15,-15,-15,-15
data -10,-10,0,0,0,0,0,0,-5,-5
data -5,-5,0,0,0,0,0,0,0,0
data 20,20,20,20,20,20,20,20,20,20
data 0,0,-12,-12,-10,-10,-10,0,0,0
data 0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0
data 0,5,5,5,5,0,0,0,0,0
data 0,0
data 0,0,0,0,2,2,2,2,0,0
data 15,15,15,15,15,-13,-13,-12,-12,-11
data 0,0,0,0,0,0,0,0,0,0















