gosub initialise
gosub main
exit

label main
 repeat
  setdispbuf cb : cb=1-cb : setdrawbuf cb
  setrgb 0,fl,fl,fl
  clear window

  if fl>0 fl=max(0,fl-10)
  if fl=0 and int(ran(100))=1 fl=int(ran(100)+155)

  gosub drawrain
  gosub drawsplashes
 until (1=2)
return

label drawsplashes
 for a=1 to numsplash
  if splashy(a)>512 goto skipsplash
   setrgb 1,200,200,200
   x=splashx(a) : y=splashy(a)
   fill rect x,y,x+2,y+2

   splashy(a)=splashy(a)+splashyv(a)
   splashx(a)=splashx(a)+splashxv(a)

   splashyv(a)=splashyv(a)+0.4
  label skipsplash
 next a
return

label addsplash
 found=0:b=0
 repeat
  b=b+1
  if splashy(b)>512 found=1
 until (found=1 or b=numsplash)

 if found=0 return
 splashy(b)=510
 splashyv(b)=-int(ran(4)+3)
 splashx(b)=x
return

label drawrain
 for a=1 to numrain
  x=rainx(a) : y=rainy(a)
  s=rains(a)
  b1=br1(s) : b2=br2(s) : b3=br3(s)
  s1=s1(s)  : s2=s2(s)  : s3=s3(s)
  setrgb 1,b1,b1,b1 : line x,y-s1 to x,y+s1
  setrgb 1,b2,b2,b2 : line x,y-s2 to x,y+s2
  setrgb 1,b3,b3,b3 : line x,y-s3 to x,y+s3
  y=y+6*rains(a)
  if y<540 goto skiprain
  rainx(a)=int(ran(640))
  y=-50
  gosub addsplash
  gosub addsplash

  label skiprain
  rainy(a)=y
 next a
return

label initialise
 open window 640,512

 dim co(360),si(360)
 for a=0 to 360
  co(a)=cos(a*(pi/180))
  si(a)=sin(a*(pi/180))
 next a

 numrain=50
 dim rainx(numrain),rainy(numrain),rains(numrain)
 for a=1 to numrain
  rainx(a)=int(ran(640))
  rainy(a)=int(ran(512))
  rains(a)=mod(a,3)+2
 next a

 numsplash=40
 dim splashx(numsplash),splashy(numsplash)
 dim splashxv(numsplash),splashyv(numsplash)
 for a=1 to numsplash
  splashxv(a)=int(ran(6))-3
  splashy(a)=520
 next a

 dim br1(4),br2(4),br3(4),s1(4),s2(4),s3(4)
 for a=1 to 4
  br1(a)=a*25
  br2(a)=a*30
  br3(a)=a*50
  s1(a)=a*10
  s2(a)=a*8
  s3(a)=a*5
 next a

return



