rem Firework - A simple firework effect
rem Copyright Marc gale (aka Xalthorn)

gosub initialise
gosub mainloop
exit

label mainloop
 repeat
  setdrawbuf cb : cb=1-cb : setdispbuf cb : clear window

  cx=320+si(cax)*200 : cy=256+co(cay)*200
  cax=mod(cax+2,360) : cay=mod(cay+3,360)
  gosub drawstars
 until (1=2)
return

label drawstars
 wind=0
 for star=1 to ns
  x=starx(star)+starxv(star)+wind
  y=stary(star)+staryv(star)
  z=starz(star)+starzv(star)
  yv=staryv(star)
  sl=starl(star)-1

  yv=yv+0.15

  if sl<0 then
   x=cx : y=cy : z=0 : sl=int(ran(100))
   ang=int(ran(360))
   starxv(star)=co(ang)*2
   yv=-si(ang)*3
  fi

  starx(star)=x
  stary(star)=y
  starz(star)=z
  staryv(star)=yv
  starl(star)=sl

  size=(128-z)/25
  bri=size*sl
  setrgb 1,bri*2,bri/3,0
  fill rectangle x,y to x+size,y+size
 next star
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

 ns=110
 dim starx(ns)  , stary(ns)  , starz(ns)  , starxv(ns)
 dim staryv(ns) , starzv(ns) , starl(ns)
return

