-   
- ' Video. 
- 'SCREEN _NEWIMAGE(800, 600, 32) 
- 'SCREEN _NEWIMAGE(1024, 768, 32) 
- plotmode = 1 
-   
- ' Memory. 
- bignumber = 3000000 
- numparticleorig = bignumber 
- numparticlevisible = bignumber 
- numgroupvisible = 0 
-   
- ' Structure to store groups of particles. 
- DIM-  VectorGroup (- bignumber  / 10) AS-  GroupElement 
 
-   
- ' Constant(s). 
- pi = 3.1415926536 
- ee = 2.7182818285 
-   
- ' Camera orientation vectors. 
-   
- ' Clipping planes. 
- DIM-  nearplane (1 TO 4),-  farplane (1 TO 4),-  rightplane (1 TO 4),-  leftplane (1 TO 4),-  topplane (1 TO 4),-  bottomplane (1 TO 4)
 
-   
- ' Basis vectors defined in xyz three-space. 
- xhat(1) = 1: xhat(2) = 0: xhat(3) = 0 
- yhat(1) = 0: yhat(2) = 1: yhat(3) = 0 
- zhat(1) = 0: zhat(2) = 0: zhat(3) = 1 
-   
- ' Basis vectors projected in uv two-space. 
- DIM-  xhatp (1 TO 2),-  yhatp (1 TO 2),-  zhatp (1 TO 2)
 
-   
- ' Particle vectors defined in xyz three-space. 
- DIM-  vecorig (- numparticleorig , 3)
 
- DIM-  vecorigvel (- numparticleorig , 3)
 
- DIM-  vecorigrot (- numparticleorig , 3)
 
- DIM-  vecorigacc (- numparticleorig , 3)
 
- DIM-  vec (- numparticleorig , 3)
 
- DIM-  vecvisible (- numparticlevisible , 3)
 
- DIM-  vecvisiblecolor (- numparticlevisible ) AS LONG
 
-   
- ' Particle vectors projected in uv two-space. 
- DIM-  vecpuv (- numparticleorig , 1 TO 2)
 
- DIM-  vecvisiblepuv (- numparticlevisible , 1 TO 2)
 
-   
- ' Particle projections adjusted for screen uv two-space. 
- DIM-  vecpuvs (- numparticleorig , 1 TO 2)
 
- DIM-  vecvisiblepuvs (- numparticlevisible , 1 TO 2)
 
-   
- ' State. 
- nearplane(4) = 1 
- farplane(4) = -100 
- rightplane(4) = 0 '*' fovd * (nhat(1) * rightplane(1) + nhat(2) * rightplane(2) + nhat(3) * rightplane(3)) 
- leftplane(4) = 0 
- topplane(4) = 0 
- bottomplane(4) = 0 
- centerx = screenwidth / 2 
- centery = screenheight / 2 
- fovd = -256 
- numparticleorig = 0 
- numparticlevisible = 0 
- particleindex = 0 
- vecgroupcounter = 0 
- vecgroupindex = 0 
- speeddamp = 1 / 66 ' Rotation damper. 
- speedboost = 1.5 ' Linear boost. 
- timevar = 0 
- 'camx = -42 
- 'camy = 28 
- 'camz = 40 
- camx = 18.69336: camy = 24.12129: camz = 20.24639 
- uhat(1) = -1: uhat(2) = 0: uhat(3) = 0 
- vhat(1) = 0: vhat(2) = 0: vhat(3) = 1 
- 'uhat(1) = -.2078192: uhat(2) = -.9781672: uhat(3) = 0 
- 'vhat(1) = 0: vhat(2) = 0: vhat(3) = 1 
- toggleanimatestandard = 1 
- toggleanimateforced = 1 
- toggleinvertmouse = -1 
- togglehud = -1 
-   
- ' Prime main loop. 
-   
- ' Begin main loop. 
-     IF-  toggleanimatestandard  = 1 THEN-  flagredraw  = 1
 
-         flagredraw = -1 
-   
-   
-   
- ' Gosubs. 
-   
- mouseprocess: 
- mx = 0 
- my = 0 
-   
-         IF-  toggleinvertmouse  = -1 THEN
 
-         IF-  toggleinvertmouse  = -1 THEN
 
-     mx = 0 
-     my = 0 
-   
- 'MouseLB = _MOUSEBUTTON(1) 
- 'MouseRB = _MOUSEBUTTON(2) 
- flagredraw = 1 
-   
- keyprocess: 
-         GOSUB-  rotate.counterclockwise 
 
-         GOSUB-  strafe.camera.nhat.plus 
 
-         GOSUB-  strafe.camera.nhat.minus 
 
-         GOSUB-  strafe.camera.uhat.plus 
 
-         GOSUB-  strafe.camera.uhat.minus 
 
-         GOSUB-  strafe.camera.vhat.plus 
 
-         GOSUB-  strafe.camera.vhat.minus 
 
-         uhat(1) = 0: uhat(2) = 1: uhat(3) = 0 
-         vhat(1) = 0: vhat(2) = 0: vhat(3) = 1 
-         uhat(1) = 0: uhat(2) = -1: uhat(3) = 0 
-         vhat(1) = 0: vhat(2) = 0: vhat(3) = 1 
-         uhat(1) = -1: uhat(2) = 0: uhat(3) = 0 
-         vhat(1) = 0: vhat(2) = 0: vhat(3) = 1 
-         uhat(1) = 1: uhat(2) = 0: uhat(3) = 0 
-         vhat(1) = 0: vhat(2) = 0: vhat(3) = 1 
-         uhat(1) = 1: uhat(2) = 0: uhat(3) = 0 
-         vhat(1) = 0: vhat(2) = 1: vhat(3) = 0 
-         uhat(1) = 0: uhat(2) = 1: uhat(3) = 0 
-         vhat(1) = 1: vhat(2) = 0: vhat(3) = 0 
-         farplane(4) = farplane(4) - 1 
-         farplane(4) = farplane(4) + 1 
-         togglehud = -togglehud 
-         toggleanimatestandard = -toggleanimatestandard 
-         toggleinvertmouse = -toggleinvertmouse 
-         plotmode = -plotmode 
-         PRINT #1,-  camx ,-  camy ,-  camz 
 
-         PRINT #1,-  uhat (1),-  uhat (2),-  uhat (3)
 
-         PRINT #1,-  vhat (1),-  vhat (2),-  vhat (3)
 
-         explodex  =-  camx  --  nhat (1) * (1 - .1 * RND) * 60
-         explodey  =-  camy  --  nhat (2) * (1 - .1 * RND) * 60
-         explodez  =-  camz  --  nhat (3) * (1 - .1 * RND) * 60
-         VectorGroup(closestgroup).ContentName = "Newtonian" 
-         FOR-  particleindex  =-  VectorGroup (- closestgroup )- .FirstParticle  TO-  VectorGroup (- closestgroup )- .LastParticle 
 
-             vecorigvel (- particleindex , 1) = (RND - .5) * 20
-             vecorigvel (- particleindex , 2) = (RND - .5) * 20
-             vecorigvel (- particleindex , 3) = (RND - .5) * 20
-             vecorigacc(particleindex, 3) = -30 
-         VectorGroup (- closestgroup )- .EventTimer  = INT(TIMER)
-         'IF LTRIM$(RTRIM$(VectorGroup(closestgroup).ContentName)) <> "Sparks" THEN 
-         explodex = VectorGroup(closestgroup).COMx 
-         explodey = VectorGroup(closestgroup).COMy 
-         explodez = VectorGroup(closestgroup).COMz 
-         p = VectorGroup(closestgroup).Pointer 
-         l = VectorGroup(closestgroup).Lagger 
-         VectorGroup(l).Pointer = p 
-             VectorGroup(p).Lagger = l 
-             'determine last object id 
-             p = 1 
-                 k = VectorGroup(p).Identity 
-                 p = VectorGroup(k).Pointer 
-             lastobjectid = k 
-             VectorGroup(lastobjectid).Pointer = -999 
-         'END IF 
-         'determine last object id 
-         p = 1 
-             k = VectorGroup(p).Identity 
-             p = VectorGroup(k).Pointer 
-         lastobjectid = k 
-         particleindex = VectorGroup(lastobjectid).LastParticle 
-         'create new group 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = -999 
-         VectorGroup(vecgroupindex).Lagger = lastobjectid 
-         VectorGroup(vecgroupindex).ContentName = "Block" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-             particleindex = particleindex + 1 
-             vecorig (- particleindex , 1) =-  camx  + -40 *-  nhat (1) + RND *-  tilesize  / 2
-             vecorig (- particleindex , 2) =-  camy  + -40 *-  nhat (2) + RND *-  tilesize  / 2
-             vecorig (- particleindex , 3) =-  camz  + -40 *-  nhat (3) + RND *-  tilesize  / 2
-                 veccolor(particleindex) = Lime 
-                 veccolor(particleindex) = Purple 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-         'connect new group to last group 
-         VectorGroup(lastobjectid).Pointer = vecgroupindex 
-   
- convert: 
- ' Convert graphics from uv-cartesian coordinates to monitor coordinates. 
- x0 = x: y0 = y 
- x = x0 + centerx 
- y = -y0 + centery 
-   
- rotate.uhat.plus: 
- uhat(1) = uhat(1) + nhat(1) * speeddamp 
- uhat(2) = uhat(2) + nhat(2) * speeddamp 
- uhat(3) = uhat(3) + nhat(3) * speeddamp 
-   
- rotate.uhat.minus: 
- uhat(1) = uhat(1) - nhat(1) * speeddamp 
- uhat(2) = uhat(2) - nhat(2) * speeddamp 
- uhat(3) = uhat(3) - nhat(3) * speeddamp 
-   
- rotate.vhat.plus: 
- vhat(1) = vhat(1) + nhat(1) * speeddamp 
- vhat(2) = vhat(2) + nhat(2) * speeddamp 
- vhat(3) = vhat(3) + nhat(3) * speeddamp 
-   
- rotate.vhat.minus: 
- vhat(1) = vhat(1) - nhat(1) * speeddamp 
- vhat(2) = vhat(2) - nhat(2) * speeddamp 
- vhat(3) = vhat(3) - nhat(3) * speeddamp 
-   
- rotate.counterclockwise: 
- v1 = vhat(1) 
- v2 = vhat(2) 
- v3 = vhat(3) 
- vhat(1) = vhat(1) + uhat(1) * speeddamp 
- vhat(2) = vhat(2) + uhat(2) * speeddamp 
- vhat(3) = vhat(3) + uhat(3) * speeddamp 
- uhat(1) = uhat(1) - v1 * speeddamp 
- uhat(2) = uhat(2) - v2 * speeddamp 
- uhat(3) = uhat(3) - v3 * speeddamp 
-   
- rotate.clockwise: 
- v1 = vhat(1) 
- v2 = vhat(2) 
- v3 = vhat(3) 
- vhat(1) = vhat(1) - uhat(1) * speeddamp 
- vhat(2) = vhat(2) - uhat(2) * speeddamp 
- vhat(3) = vhat(3) - uhat(3) * speeddamp 
- uhat(1) = uhat(1) + v1 * speeddamp 
- uhat(2) = uhat(2) + v2 * speeddamp 
- uhat(3) = uhat(3) + v3 * speeddamp 
-   
- strafe.camera.uhat.plus: 
- camx = camx + uhat(1) * speedboost 
- camy = camy + uhat(2) * speedboost 
- camz = camz + uhat(3) * speedboost 
-   
- strafe.camera.uhat.minus: 
- camx = camx - uhat(1) * speedboost 
- camy = camy - uhat(2) * speedboost 
- camz = camz - uhat(3) * speedboost 
-   
- strafe.camera.vhat.plus: 
- camx = camx + vhat(1) * speedboost 
- camy = camy + vhat(2) * speedboost 
- camz = camz + vhat(3) * speedboost 
-   
- strafe.camera.vhat.minus: 
- camx = camx - vhat(1) * speedboost 
- camy = camy - vhat(2) * speedboost 
- camz = camz - vhat(3) * speedboost 
-   
- strafe.camera.nhat.plus: 
- camx = camx + nhat(1) * speedboost 
- camy = camy + nhat(2) * speedboost 
- camz = camz + nhat(3) * speedboost 
-   
- strafe.camera.nhat.minus: 
- camx = camx - nhat(1) * speedboost 
- camy = camy - nhat(2) * speedboost 
- camz = camz - nhat(3) * speedboost 
-   
- uhatmag  = SQR(- uhat (1) ^ 2 +-  uhat (2) ^ 2 +-  uhat (3) ^ 2)
- uhat(1) = uhat(1) / uhatmag: uhat(2) = uhat(2) / uhatmag: uhat(3) = uhat(3) / uhatmag 
- vhatmag  = SQR(- vhat (1) ^ 2 +-  vhat (2) ^ 2 +-  vhat (3) ^ 2)
- vhat(1) = vhat(1) / vhatmag: vhat(2) = vhat(2) / vhatmag: vhat(3) = vhat(3) / vhatmag 
- uhatdotvhat = uhat(1) * vhat(1) + uhat(2) * vhat(2) + uhat(3) * vhat(3) 
-     BEEP ' ... if vectors are somenow not normalized. This has never happened. 
-     uhat(1) = 0.8251367: uhat(2) = -0.564903: uhat(3) = -0.005829525 
-     vhat(1) = 0.065519: vhat(2) = 0.08544215: vhat(3) = 0.9941866 
- ' The normal vector points toward the eye. 
- nhat(1) = uhat(2) * vhat(3) - uhat(3) * vhat(2) 
- nhat(2) = uhat(3) * vhat(1) - uhat(1) * vhat(3) 
- nhat(3) = uhat(1) * vhat(2) - uhat(2) * vhat(1) 
- nhatmag  = SQR(- nhat (1) ^ 2 +-  nhat (2) ^ 2 +-  nhat (3) ^ 2)
- nhat(1) = nhat(1) / nhatmag: nhat(2) = nhat(2) / nhatmag: nhat(3) = nhat(3) / nhatmag 
-   
- redraw: 
- GOSUB-  calculate.clippingplanes 
 
- ' Project the three-space basis vectors onto the screen plane. 
- xhatp(1) = xhat(1) * uhat(1) + xhat(2) * uhat(2) + xhat(3) * uhat(3) 
- xhatp(2) = xhat(1) * vhat(1) + xhat(2) * vhat(2) + xhat(3) * vhat(3) 
- yhatp(1) = yhat(1) * uhat(1) + yhat(2) * uhat(2) + yhat(3) * uhat(3) 
- yhatp(2) = yhat(1) * vhat(1) + yhat(2) * vhat(2) + yhat(3) * vhat(3) 
- zhatp(1) = zhat(1) * uhat(1) + zhat(2) * uhat(2) + zhat(3) * uhat(3) 
- zhatp(2) = zhat(1) * vhat(1) + zhat(2) * vhat(2) + zhat(3) * vhat(3) 
- GOSUB-  compute.visible.groups 
 
-   
- compute.visible.groups: 
- numparticlevisible = 0 
- numgroupvisible = 0 
- closestdist2 = 10000 ^ 2 
- closestgroup = 1 
- ci = -1 
- cf = -1 
-   
- k = 1 
- k = VectorGroup(k).Identity 
-   
-     xcom = VectorGroup(k).COMx 
-     ycom = VectorGroup(k).COMy 
-     zcom = VectorGroup(k).COMz 
-   
-     ' Force animation regardless of distance from camera. 
-         vecgroupindex = k 
-   
-     dist2 = (camx - xcom) ^ 2 + (camy - ycom) ^ 2 + (camz - zcom) ^ 2 
-   
-     IF-  dist2  <-  farplane (4) ^ 2 THEN
 
-   
-         groupinview = 1 ' Disable near plane group clipping to make things more interesting at zero distance. 
-         'IF (xcom - camx) * nearplane(1) + (ycom - camy) * nearplane(2) + (zcom - camz) * nearplane(3) - nearplane(4) < 0 THEN groupinview = 0 
-         'IF (xcom - camx) * farplane(1) + (ycom - camy) * farplane(2) + (zcom - camz) * farplane(3) - farplane(4) < 0 THEN groupinview = 0 
-         IF (- xcom  --  camx ) *-  rightplane (1) + (- ycom  --  camy ) *-  rightplane (2) + (- zcom  --  camz ) *-  rightplane (3) --  rightplane (4) < 0 THEN-  groupinview  = 0
 
-         IF (- xcom  --  camx ) *-  leftplane (1) + (- ycom  --  camy ) *-  leftplane (2) + (- zcom  --  camz ) *-  leftplane (3) --  leftplane (4) < 0 THEN-  groupinview  = 0
 
-         IF (- xcom  --  camx ) *-  topplane (1) + (- ycom  --  camy ) *-  topplane (2) + (- zcom  --  camz ) *-  topplane (3) --  topplane (4) < 0 THEN-  groupinview  = 0
 
-         IF (- xcom  --  camx ) *-  bottomplane (1) + (- ycom  --  camy ) *-  bottomplane (2) + (- zcom  --  camz ) *-  bottomplane (3) --  bottomplane (4) < 0 THEN-  groupinview  = 0
 
-   
-             numgroupvisible = numgroupvisible + 1 
-   
-             IF-  toggleanimatestandard  = 1 THEN
 
-                 vecgroupindex = k 
-   
-             IF-  dist2  <-  closestdist2  AND-  thename$  <> "Sparks" AND-  thename$  <> "Newtonian" THEN
 
-                 closestdist2 = dist2 
-                 closestgroup = k 
-   
-             IF-  k  =-  closestgroup  THEN-  ci  =-  numparticlevisible 
 
-   
-             FOR-  i  =-  VectorGroup (- k )- .FirstParticle  TO-  VectorGroup (- k )- .LastParticle 
 
-                 vec(i, 1) = vecorig(i, 1) - camx 
-                 vec(i, 2) = vecorig(i, 2) - camy 
-                 vec(i, 3) = vecorig(i, 3) - camz 
-                 GOSUB-  clip.particle.viewplanes 
 
-   
-             IF-  k  =-  closestgroup  THEN-  cf  =-  numparticlevisible 
 
-   
-   
-   
-     k = VectorGroup(k).Pointer 
-     k = VectorGroup(k).Identity 
-   
-   
-         vecvisiblecolor(i) = Yellow 
-   
-   
- clip.particle.viewplanes: 
- ' requires i 
- particleinview = 1 
- fogswitch = -1 
- ' Perform standard view plane clipping and implement fog effect. 
- IF-  vec (- i , 1) *-  nearplane (1) +-  vec (- i , 2) *-  nearplane (2) +-  vec (- i , 3) *-  nearplane (3) --  nearplane (4) < 0 THEN-  particleinview  = 0
 
- IF-  vec (- i , 1) *-  farplane (1) +-  vec (- i , 2) *-  farplane (2) +-  vec (- i , 3) *-  farplane (3) --  farplane (4) < 0 THEN-  particleinview  = 0
 
- IF-  vec (- i , 1) *-  farplane (1) +-  vec (- i , 2) *-  farplane (2) +-  vec (- i , 3) *-  farplane (3) --  farplane (4) * .9 < 0 THEN-  fogswitch  = 1
 
- IF-  vec (- i , 1) *-  rightplane (1) +-  vec (- i , 2) *-  rightplane (2) +-  vec (- i , 3) *-  rightplane (3) --  rightplane (4) < 0 THEN-  particleinview  = 0
 
- IF-  vec (- i , 1) *-  leftplane (1) +-  vec (- i , 2) *-  leftplane (2) +-  vec (- i , 3) *-  leftplane (3) --  leftplane (4) < 0 THEN-  particleinview  = 0
 
- IF-  vec (- i , 1) *-  topplane (1) +-  vec (- i , 2) *-  topplane (2) +-  vec (- i , 3) *-  topplane (3) --  topplane (4) < 0 THEN-  particleinview  = 0
 
- IF-  vec (- i , 1) *-  bottomplane (1) +-  vec (- i , 2) *-  bottomplane (2) +-  vec (- i , 3) *-  bottomplane (3) --  bottomplane (4) < 0 THEN-  particleinview  = 0
 
-     numparticlevisible = numparticlevisible + 1 
-     vecvisible(numparticlevisible, 1) = vec(i, 1) 
-     vecvisible(numparticlevisible, 2) = vec(i, 2) 
-     vecvisible(numparticlevisible, 3) = vec(i, 3) 
-     'IF closestgroup = k THEN 
-     'vecvisiblecolor(numparticlevisible) = Yellow 
-     'ELSE 
-     vecvisiblecolor(numparticlevisible) = veccolor(i) 
-     'END IF 
-     IF-  fogswitch  = 1 THEN-  vecvisiblecolor (- numparticlevisible ) =-  Gray 
 
-   
- project.particles: 
- ' Project vectors onto the screen plane. 
- FOR-  i  = 1 TO-  numparticlevisible 
 
-     vecvisibledotnhat = vecvisible(i, 1) * nhat(1) + vecvisible(i, 2) * nhat(2) + vecvisible(i, 3) * nhat(3) 
-     vecvisiblepuv(i, 1) = vecvisible(i, 1) * uhat(1) + vecvisible(i, 2) * uhat(2) + vecvisible(i, 3) * uhat(3) 
-     vecvisiblepuv(i, 2) = vecvisible(i, 1) * vhat(1) + vecvisible(i, 2) * vhat(2) + vecvisible(i, 3) * vhat(3) 
-     vecvisiblepuvs(i, 1) = vecvisiblepuv(i, 1) * fovd / vecvisibledotnhat 
-     vecvisiblepuvs(i, 2) = vecvisiblepuv(i, 2) * fovd / vecvisibledotnhat 
-   
- ' Redraw compass. 
- x  = 30 *-  xhatp (1)- : y  = 30 *-  xhatp (2)- :  GOSUB-  convert 
- LINE (- centerx ,-  centery )-(- x ,-  y ),-  Red 
 
- x  = 30 *-  yhatp (1)- : y  = 30 *-  yhatp (2)- :  GOSUB-  convert 
- LINE (- centerx ,-  centery )-(- x ,-  y ),-  Green 
 
- x  = 30 *-  zhatp (1)- : y  = 30 *-  zhatp (2)- :  GOSUB-  convert 
- LINE (- centerx ,-  centery )-(- x ,-  y ),-  Blue 
 
-   
-     dist  = INT(SQR((- camx  --  VectorGroup (- closestgroup )- .COMx ) ^ 2 + (- camy  --  VectorGroup (- closestgroup )- .COMy ) ^ 2 + (- camz  --  VectorGroup (- closestgroup )- .COMz ) ^ 2))
-     a$  = "SPACE = Hide Info"- :  LOCATE (- screenheight  / 16) - 3, (- screenwidth  / 8) / 2 - LEN(- a$ ) / 2- :  PRINT-  a$ 
-     a$  = "You See: " + LTRIM$(RTRIM$(- VectorGroup (- closestgroup )- .ContentName ))- :  LOCATE (- screenheight  / 16) - 3, (- screenwidth  / 8) / 2 - LEN(- a$ ) / 2- :  PRINT-  a$ 
-   
- calculate.clippingplanes: 
- ' Calculate normal vectors to all clipping planes. 
- nearplane(1) = -nhat(1) 
- nearplane(2) = -nhat(2) 
- nearplane(3) = -nhat(3) 
- farplane(1) = nhat(1) 
- farplane(2) = nhat(2) 
- farplane(3) = nhat(3) 
- rightplane(1) = (screenheight / 2) * fovd * uhat(1) - (screenheight / 2) * (screenwidth / 2) * nhat(1) 
- rightplane(2) = (screenheight / 2) * fovd * uhat(2) - (screenheight / 2) * (screenwidth / 2) * nhat(2) 
- rightplane(3) = (screenheight / 2) * fovd * uhat(3) - (screenheight / 2) * (screenwidth / 2) * nhat(3) 
- mag  = SQR((- rightplane (1)) ^ 2 + (- rightplane (2)) ^ 2 + (- rightplane (3)) ^ 2)
- rightplane(1) = rightplane(1) / mag 
- rightplane(2) = rightplane(2) / mag 
- rightplane(3) = rightplane(3) / mag 
- leftplane(1) = -(screenheight / 2) * fovd * uhat(1) - (screenheight / 2) * (screenwidth / 2) * nhat(1) 
- leftplane(2) = -(screenheight / 2) * fovd * uhat(2) - (screenheight / 2) * (screenwidth / 2) * nhat(2) 
- leftplane(3) = -(screenheight / 2) * fovd * uhat(3) - (screenheight / 2) * (screenwidth / 2) * nhat(3) 
- mag  = SQR((- leftplane (1)) ^ 2 + (- leftplane (2)) ^ 2 + (- leftplane (3)) ^ 2)
- leftplane(1) = leftplane(1) / mag 
- leftplane(2) = leftplane(2) / mag 
- leftplane(3) = leftplane(3) / mag 
- topplane(1) = (screenwidth / 2) * fovd * vhat(1) - (screenheight / 2) * (screenwidth / 2) * nhat(1) 
- topplane(2) = (screenwidth / 2) * fovd * vhat(2) - (screenheight / 2) * (screenwidth / 2) * nhat(2) 
- topplane(3) = (screenwidth / 2) * fovd * vhat(3) - (screenheight / 2) * (screenwidth / 2) * nhat(3) 
- mag  = SQR((- topplane (1)) ^ 2 + (- topplane (2)) ^ 2 + (- topplane (3)) ^ 2)
- topplane(1) = topplane(1) / mag 
- topplane(2) = topplane(2) / mag 
- topplane(3) = topplane(3) / mag 
- bottomplane(1) = -(screenwidth / 2) * fovd * vhat(1) - (screenheight / 2) * (screenwidth / 2) * nhat(1) 
- bottomplane(2) = -(screenwidth / 2) * fovd * vhat(2) - (screenheight / 2) * (screenwidth / 2) * nhat(2) 
- bottomplane(3) = -(screenwidth / 2) * fovd * vhat(3) - (screenheight / 2) * (screenwidth / 2) * nhat(3) 
- mag  = SQR((- bottomplane (1)) ^ 2 + (- bottomplane (2)) ^ 2 + (- bottomplane (3)) ^ 2)
- bottomplane(1) = bottomplane(1) / mag 
- bottomplane(2) = bottomplane(2) / mag 
- bottomplane(3) = bottomplane(3) / mag 
-   
- plot.particles: 
- FOR-  i  = 1 TO-  numparticlevisible  - 1
 
-     x  =-  vecvisiblepuvs (- i , 1)- : y  =-  vecvisiblepuvs (- i , 2)- :  GOSUB-  convert: x1  =-  x: y1  =-  y 
-     x  =-  vecvisiblepuvs (- i  + 1, 1)- : y  =-  vecvisiblepuvs (- i  + 1, 2)- :  GOSUB-  convert: x2  =-  x: y2  =-  y 
-     IF ((- x2  --  x1 ) ^ 2 + (- y2  --  y1 ) ^ 2) < 15 ^ 2 THEN
 
-             LINE (- x1 ,-  y1 )-(- x2 ,-  y2 ),-  vecvisiblecolor (- i )
 
-             LINE (- x1 ,-  y1 )-(- x2 ,-  y2 ),-  vecvisiblecolor (- i ),-  B 
 
-         CIRCLE (- x1 ,-  y1 ), 1,-  vecvisiblecolor (- i )
 
-   
- ' Data. 
-   
- initialize.objects: 
- particleindex = 0 
- vecgroupcounter = 0 
- gridsize = 550 
- tilesize = 15 
-   
- '__AAA 
- vecgroupcounter = vecgroupcounter + 1 
- vecgroupindex = vecgroupcounter 
- VectorGroup(vecgroupindex).Identity = vecgroupindex 
- VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
- VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
- VectorGroup(vecgroupindex).ContentName = "__AAA" 
- VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-     particleindex = particleindex + 1 
-     vecorig(particleindex, 1) = -1000 
-     vecorig(particleindex, 2) = -1000 
-     vecorig(particleindex, 3) = -1000 
-     veccolor(particleindex) = White 
- VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Banner 
- vecgroupcounter = vecgroupcounter + 1 
- vecgroupindex = vecgroupcounter 
- VectorGroup(vecgroupindex).Identity = vecgroupindex 
- VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
- VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
- VectorGroup(vecgroupindex).ContentName = "Banner" 
- VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
- xl = -1.9: xr = 1.9: dx = .32 
- yl = -1: yr = 1: dy = .32 
- xl = xl * 4: xr = xr * 4: yl = yl * 4: yr = yr * 4 
- xrange  = 1 + INT((-- xl  +-  xr ) /-  dx )
- yrange  = 1 + INT((-- yl  +-  yr ) /-  dy )
- t = 0 
-         particleindex = particleindex + 1 
-         vecorig (- particleindex , 1) = 70 + 1.25 * COS(- i  - 2 *-  t ) ^ 2 - 1.25 * SIN(- j  --  t ) ^ 2
-         vecorig(particleindex, 2) = 30 + i 
-         vecorig(particleindex, 3) = 40 + j 
-         IF-  vecorig (- particleindex , 1) < 70 THEN
 
-             veccolor(particleindex) = Red 
-             veccolor(particleindex) = DarkOrange 
- VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Clock Face (Rolex) 
- vecgroupcounter = vecgroupcounter + 1 
- vecgroupindex = vecgroupcounter 
- VectorGroup(vecgroupindex).Identity = vecgroupindex 
- VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
- VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
- VectorGroup(vecgroupindex).ContentName = "Clock Face (Rolex)" 
- VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-         particleindex = particleindex + 1 
-         vecorig (- particleindex , 1) = 40 +-  r  * COS(- q )
-         vecorig(particleindex, 2) = -20 + r 
-         vecorig (- particleindex , 3) = 40 +-  r  * SIN(- q )
-         veccolor(particleindex) = DarkSlateGray 
- VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Clock Hands 
- vecgroupcounter = vecgroupcounter + 1 
- vecgroupindex = vecgroupcounter 
- VectorGroup(vecgroupindex).Identity = vecgroupindex 
- VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
- VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
- VectorGroup(vecgroupindex).ContentName = "Clock Hands" 
- VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
- phase = pi / 2 
- hcol(1) = Gold 
- hcol(2) = Lime 
- hcol(3) = OrangeRed 
-         particleindex = particleindex + 1 
-         vecorig (- particleindex , 1) = 40 +-  r  * COS(- hand (- q ) +-  phase )
-         vecorig(particleindex, 2) = -10 
-         vecorig (- particleindex , 3) = 40 +-  r  * SIN(- hand (- q ) +-  phase )
-         veccolor(particleindex) = hcol(q) 
- VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Dirt 
- h = 5 
-             vecgroupcounter = vecgroupcounter + 1 
-             vecgroupindex = vecgroupcounter 
-             VectorGroup(vecgroupindex).Identity = vecgroupindex 
-             VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-             VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-             VectorGroup(vecgroupindex).ContentName = "Dirt" 
-             VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                         particleindex = particleindex + 1 
-                         vecorig (- particleindex , 1) =-  i  + RND *-  h  - RND *-  h 
-                         vecorig (- particleindex , 2) =-  j  + RND *-  h  - RND *-  h 
-                         vecorig (- particleindex , 3) = -(- w  - 1) * 70 - RND * 70
-                             veccolor(particleindex) = DarkGoldenRod 
-                                 veccolor(particleindex) = SaddleBrown 
-                                 veccolor(particleindex) = Sienna 
-             VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Grass and Puddles 
- h = 2 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Grass and Puddles" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig (- particleindex , 1) =-  i  + RND *-  h  - RND *-  h 
-                 vecorig (- particleindex , 2) =-  j  + RND *-  h  - RND *-  h 
-                 vecorig (- particleindex , 3) = .5 + 1 * COS((- i  - 15) * .08) - 1 * COS((- j  - 6) * .12)
-                 IF-  vecorig (- particleindex , 3) > 0 THEN
 
-                         veccolor(particleindex) = Green 
-                         veccolor(particleindex) = ForestGreen 
-                         veccolor(particleindex) = LightSeaGreen 
-                         veccolor(particleindex) = Blue 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Grave 
- 'xloc = -90 
- 'yloc = 0 
- thickness = 2.5 
- span = 20 
- height = 30 
- crux = 22 
-             vecgroupcounter = vecgroupcounter + 1 
-             vecgroupindex = vecgroupcounter 
-             VectorGroup(vecgroupindex).Identity = vecgroupindex 
-             VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-             VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-             VectorGroup(vecgroupindex).ContentName = "Grave" 
-             VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-             FOR-  i  = -- thickness  TO-  thickness  STEP-  thickness  / 2
 
-                 FOR-  j  = -- thickness  TO-  thickness  STEP-  thickness  / 2
 
-                     particleindex = particleindex + 1 
-                     vecorig (- particleindex , 1) =-  xloc  +-  i  + (RND - .5) * 2
-                     vecorig (- particleindex , 2) =-  yloc  +-  j  + (RND - .5) * 2
-                     vecorig (- particleindex , 3) =-  k  + (RND - .5) * 2
-                         veccolor(particleindex) = SlateGray 
-                         veccolor(particleindex) = DarkGray 
-             VectorGroup(vecgroupindex).LastParticle = particleindex 
-         FOR-  j  = -- span  / 2 TO -- thickness 
 
-             vecgroupcounter = vecgroupcounter + 1 
-             vecgroupindex = vecgroupcounter 
-             VectorGroup(vecgroupindex).Identity = vecgroupindex 
-             VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-             VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-             VectorGroup(vecgroupindex).ContentName = "Grave" 
-             VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-             FOR-  k  = -- thickness  TO-  thickness  STEP-  thickness  / 2
 
-                 FOR-  i  = -- thickness  TO-  thickness  STEP-  thickness  / 2
 
-                     particleindex = particleindex + 1 
-                     vecorig (- particleindex , 1) =-  xloc  +-  i  + (RND - .5) * 2
-                     vecorig (- particleindex , 2) =-  yloc  +-  j  + (RND - .5) * 2
-                     vecorig (- particleindex , 3) =-  crux  +-  k  + (RND - .5) * 2
-                         veccolor(particleindex) = SlateGray 
-                         veccolor(particleindex) = DarkGray 
-             VectorGroup(vecgroupindex).LastParticle = particleindex 
-         FOR-  j  =-  thickness  TO-  span  / 2
 
-             vecgroupcounter = vecgroupcounter + 1 
-             vecgroupindex = vecgroupcounter 
-             VectorGroup(vecgroupindex).Identity = vecgroupindex 
-             VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-             VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-             VectorGroup(vecgroupindex).ContentName = "Grave" 
-             VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-             FOR-  k  = -- thickness  TO-  thickness  STEP-  thickness  / 2
 
-                 FOR-  i  = -- thickness  TO-  thickness  STEP-  thickness  / 2
 
-                     particleindex = particleindex + 1 
-                     vecorig (- particleindex , 1) =-  xloc  +-  i  + (RND - .5) * 2
-                     vecorig (- particleindex , 2) =-  yloc  +-  j  + (RND - .5) * 2
-                     vecorig (- particleindex , 3) =-  crux  +-  k  + (RND - .5) * 2
-                         veccolor(particleindex) = SlateGray 
-                         veccolor(particleindex) = DarkGray 
-             VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Heaven's Bottom Layer 
- h = 2 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Heaven's Bottom Layer" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig (- particleindex , 1) =-  i  + RND *-  h  - RND *-  h 
-                 vecorig (- particleindex , 2) =-  j  + RND *-  h  - RND *-  h 
-                 vecorig (- particleindex , 3) = 420 - RND
-                     veccolor(particleindex) = BlueViolet 
-                     veccolor(particleindex) = Cyan 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Hell Spawn 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Hell Spawn" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig (- particleindex , 1) =-  i  + RND *-  tilesize  / 5
-                 vecorig (- particleindex , 2) =-  j  + RND *-  tilesize  / 5
-                 vecorig (- particleindex , 3) = -350 - RND * 70
-                     veccolor(particleindex) = Red 
-                     veccolor(particleindex) = DarkGoldenRod 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Icewall East 
- h = 2 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Icewall East" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig(particleindex, 1) = gridsize 
-                 vecorig (- particleindex , 2) =-  i  + RND *-  h  - RND *-  h 
-                 vecorig (- particleindex , 3) =-  j  + RND *-  h  - RND *-  h 
-                     veccolor(particleindex) = White 
-                     veccolor(particleindex) = Ivory 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Icewall South 
- h = 2 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Icewall South" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig(particleindex, 1) = -gridsize 
-                 vecorig (- particleindex , 2) =-  i  + RND *-  h  - RND *-  h 
-                 vecorig (- particleindex , 3) =-  j  + RND *-  h  - RND *-  h 
-                     veccolor(particleindex) = White 
-                     veccolor(particleindex) = Ivory 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Icewall North 
- h = 2 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Icewall North" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig (- particleindex , 1) =-  i  + RND *-  h  - RND *-  h 
-                 vecorig(particleindex, 2) = gridsize 
-                 vecorig (- particleindex , 3) =-  j  + RND *-  h  - RND *-  h 
-                     veccolor(particleindex) = White 
-                     veccolor(particleindex) = Ivory 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Icewall West 
- h = 2 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Icewall West" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig (- particleindex , 1) =-  i  + RND *-  h  - RND *-  h 
-                 vecorig(particleindex, 2) = -gridsize 
-                 vecorig (- particleindex , 3) =-  j  + RND *-  h  - RND *-  h 
-                     veccolor(particleindex) = White 
-                     veccolor(particleindex) = Ivory 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Lake of Fire 
- h = 2 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Lake of Fire" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig (- particleindex , 1) =-  i  + RND *-  h  - RND *-  h 
-                 vecorig (- particleindex , 2) =-  j  + RND *-  h  - RND *-  h 
-                 vecorig (- particleindex , 3) = -350 - 70 - RND
-                     veccolor(particleindex) = Red 
-                     veccolor(particleindex) = Indigo 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Megalith 
- ctrx = -90 
- ctry = -320 
- ctrz = 4 
- w = 8 
- h = 256 
- dens = 100 
-     FOR-  i  = -- h  / 20 +-  k  / 20 TO-  h  / 20 --  k  / 20 STEP-  w 
 
-         FOR-  j  = -- h  / 20 +-  k  / 20 TO-  h  / 20 --  k  / 20 STEP-  w 
 
-             vecgroupcounter = vecgroupcounter + 1 
-             vecgroupindex = vecgroupcounter 
-             VectorGroup(vecgroupindex).Identity = vecgroupindex 
-             VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-             VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-             VectorGroup(vecgroupindex).ContentName = "Megalith" 
-             VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig (- particleindex , 1) =-  ctrx  +-  i  + (RND - .5) *-  w 
-                 vecorig (- particleindex , 2) =-  ctry  +-  j  + (RND - .5) *-  w 
-                 vecorig (- particleindex , 3) =-  ctrz  +-  k  + (RND - .5) *-  w 
-                     veccolor(particleindex) = Cyan 
-                     veccolor(particleindex) = Teal 
-             VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Moon 
- vecgroupcounter = vecgroupcounter + 1 
- vecgroupindex = vecgroupcounter 
- VectorGroup(vecgroupindex).Identity = vecgroupindex 
- VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
- VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
- VectorGroup(vecgroupindex).ContentName = "Moon" 
- VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
- radius = 4 
- au = 60 
- dx = (2 * pi / radius) * .05 
- dy = (2 * pi / radius) * .05 
- xl = 0: xr = 2 * pi 
- yl = 0: yr = pi 
- xrange  = 1 + INT((-- xl  +-  xr ) /-  dx )
- yrange  = 1 + INT((-- yl  +-  yr ) /-  dy )
-         particleindex = particleindex + 1 
-         theta = i * dx - dx 
-         phi = j * dy - dy 
-         vecorig (- particleindex , 1) =-  au  +-  radius  * SIN(- phi ) * COS(- theta )
-         vecorig (- particleindex , 2) =-  radius  * SIN(- phi ) * SIN(- theta )
-         vecorig (- particleindex , 3) = 90 +-  radius  * COS(- phi )
-             veccolor(particleindex) = Gray 
-             veccolor(particleindex) = PaleGoldenRod 
- VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Pyramid 
- ctrx = -90 
- ctry = -120 
- ctrz = 4 
- w = 8 
- h = 56 
- dens = 50 
-     FOR-  i  = -- h  / 2 +-  k  / 2 TO-  h  / 2 --  k  / 2 STEP-  w 
 
-         FOR-  j  = -- h  / 2 +-  k  / 2 TO-  h  / 2 --  k  / 2 STEP-  w 
 
-             vecgroupcounter = vecgroupcounter + 1 
-             vecgroupindex = vecgroupcounter 
-             VectorGroup(vecgroupindex).Identity = vecgroupindex 
-             VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-             VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-             VectorGroup(vecgroupindex).ContentName = "Pyramid" 
-             VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig (- particleindex , 1) =-  ctrx  +-  i  + (RND - .5) *-  w 
-                 vecorig (- particleindex , 2) =-  ctry  +-  j  + (RND - .5) *-  w 
-                 vecorig (- particleindex , 3) =-  ctrz  +-  k  + (RND - .5) *-  w 
-                     veccolor(particleindex) = DarkGoldenRod 
-                     veccolor(particleindex) = GoldenRod 
-             VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Rain 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Rain" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig (- particleindex , 1) =-  i  + RND *-  tilesize 
-                 vecorig (- particleindex , 2) =-  j  + RND *-  tilesize 
-                 vecorig (- particleindex , 3) = RND * 70
-                     veccolor(particleindex) = Aquamarine 
-                     veccolor(particleindex) = DodgerBlue 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- ''Rotor 
- 'vecgroupcounter = vecgroupcounter + 1 
- 'vecgroupindex = vecgroupcounter 
- 'VectorGroup(vecgroupindex).Identity = vecgroupindex 
- 'VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
- 'VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
- 'VectorGroup(vecgroupindex).ContentName = "Rotor" 
- 'VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
- 'xc = 5 
- 'yc = 5 
- 'zc = 40 
- 'rad = 20 
- 'FOR k = 1 TO 600 
- '    xx = RND * 2 * rad - rad 
- '    yy = 0 
- '    zz = RND * 2 * rad - rad 
- '    IF xx ^ 2 + yy ^ 2 + zz ^ 2 < rad ^ 2 THEN 
- '        particleindex = particleindex + 1 
- '        vecorig(particleindex, 1) = xc + xx 
- '        vecorig(particleindex, 2) = yc + yy 
- '        vecorig(particleindex, 3) = zc + zz 
- '        vecorigrot(particleindex, 1) = 50 
- '        vecorigrot(particleindex, 2) = 50 
- '        vecorigrot(particleindex, 3) = 50 
- '        GOSUB calccom 
- '        veccolor(particleindex) = _RGB(INT(RND * 255), INT(RND * 255), INT(RND * 255)) 
- '    END IF 
- 'NEXT 
- 'VectorGroup(vecgroupindex).LastParticle = particleindex 
- 'GOSUB adjustcom 
- 'VectorGroup(vecgroupindex).CORx = VectorGroup(vecgroupindex).COMx 
- 'VectorGroup(vecgroupindex).CORy = VectorGroup(vecgroupindex).COMy 
- 'VectorGroup(vecgroupindex).CORz = VectorGroup(vecgroupindex).COMz 
-   
- 'Sky 
- h = 2 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Sky" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig (- particleindex , 1) =-  i  + RND *-  h  - RND *-  h 
-                 vecorig (- particleindex , 2) =-  j  + RND *-  h  - RND *-  h 
-                 vecorig (- particleindex , 3) = 70 + RND *-  h  - RND *-  h 
-                     veccolor(particleindex) = Snow 
-                     veccolor(particleindex) = RoyalBlue 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Snake? 
- vecgroupcounter = vecgroupcounter + 1 
- vecgroupindex = vecgroupcounter 
- VectorGroup(vecgroupindex).Identity = vecgroupindex 
- VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
- VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
- VectorGroup(vecgroupindex).ContentName = "Snake?" 
- VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-     particleindex = particleindex + 1 
-     vecorig (- particleindex , 1) = -10 + 5 * COS(- i )
-     vecorig (- particleindex , 2) = -20 + 5 * SIN(- i )
-     vecorig (- particleindex , 3) = 25 - 3 * COS(6 *-  i ) * SIN(3 *-  i )
-     veccolor(particleindex) = Coral 
- VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Sparks 
- vecgroupcounter = vecgroupcounter + 1 
- vecgroupindex = vecgroupcounter 
- VectorGroup(vecgroupindex).Identity = vecgroupindex 
- VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
- VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
- VectorGroup(vecgroupindex).ContentName = "Sparks" 
- VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
- u = 0 
- v = 0 
-     particleindex = particleindex + 1 
-     vecorig (- particleindex , 1) = RND - .5
-     vecorig (- particleindex , 2) = RND - .5
-     vecorig (- particleindex , 3) = 20 + RND - .5
-     vecorigvel (- particleindex , 1) = 8 * (RND - .5)
-     vecorigvel (- particleindex , 2) = 8 * (RND - .5)
-     vecorigvel (- particleindex , 3) = 20 * RND
-     vecorigacc(particleindex, 1) = 0 
-     vecorigacc(particleindex, 2) = 0 
-     vecorigacc(particleindex, 3) = -40 
- VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Stars 
- h = 5 
-             vecgroupcounter = vecgroupcounter + 1 
-             vecgroupindex = vecgroupcounter 
-             VectorGroup(vecgroupindex).Identity = vecgroupindex 
-             VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-             VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-             VectorGroup(vecgroupindex).ContentName = "Stars" 
-             VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                         particleindex = particleindex + 1 
-                         vecorig (- particleindex , 1) =-  i  + RND *-  h  - RND *-  h 
-                         vecorig (- particleindex , 2) =-  j  + RND *-  h  - RND *-  h 
-                         vecorig (- particleindex , 3) =-  w  * 70 + RND * 70
-                             veccolor(particleindex) = GhostWhite 
-                                 veccolor(particleindex) = White 
-                                 veccolor(particleindex) = DarkGray 
-             VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Sun 
- radius = 10 
- dx = .0628 
- dy = .0628 
- xl = 0: xr = 2 * pi 
- yl = 0: yr = pi 
- xrange  = 1 + INT((-- xl  +-  xr ) /-  dx )
- yrange  = 1 + INT((-- yl  +-  yr ) /-  dy )
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Sun" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 theta = u * dx - dx 
-                 phi = v * dy - dy 
-                 vecorig (- particleindex , 1) =-  radius  * SIN(- phi ) * COS(- theta )
-                 vecorig (- particleindex , 2) =-  radius  * SIN(- phi ) * SIN(- theta )
-                 vecorig (- particleindex , 3) = 90 +-  radius  * COS(- phi )
-                     veccolor(particleindex) = Sunglow 
-                     veccolor(particleindex) = SunsetOrange 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'UFO!!! 
- vecgroupcounter = vecgroupcounter + 1 
- vecgroupindex = vecgroupcounter 
- VectorGroup(vecgroupindex).Identity = vecgroupindex 
- VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
- VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
- VectorGroup(vecgroupindex).ContentName = "UFO!!!" 
- VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-         particleindex = particleindex + 1 
-         vecorig (- particleindex , 1) = -90 +-  r  * COS(- q )
-         vecorig (- particleindex , 2) = -120 +-  r  * SIN(- q )
-         vecorig(particleindex, 3) = 100 + r - 12 
-         veccolor(particleindex) = HotPink 
-         particleindex = particleindex + 1 
-         vecorig (- particleindex , 1) = -90 +-  r  * COS(- q )
-         vecorig (- particleindex , 2) = -120 +-  r  * SIN(- q )
-         vecorig(particleindex, 3) = 100 - r + 12 
-         veccolor(particleindex) = Red 
- r = 5 
- h = 30 
-     IF-  xx  ^ 2 +-  yy  ^ 2 <-  r  ^ 2 THEN
 
-         particleindex = particleindex + 1 
-         vecorig(particleindex, 1) = -90 + xx 
-         vecorig(particleindex, 2) = -120 + yy 
-         vecorig (- particleindex , 3) = 100 - RND *-  h 
-             veccolor(particleindex) = Aquamarine 
-             veccolor(particleindex) = Lime 
- VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Waves or Particles? (1) 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Waves or Particles?" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig(particleindex, 1) = 70 + 7 * u 
-                 vecorig (- particleindex , 2) = 80 + 1 * COS((- u  ^ 2 --  v  ^ 2))
-                 vecorig(particleindex, 3) = 10 + 7 * v 
-                 IF-  vecorig (- particleindex , 2) < 80 THEN
 
-                     veccolor(particleindex) = DarkBlue 
-                     veccolor(particleindex) = DeepPink 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'Waves or Particles? (2) 
-         vecgroupcounter = vecgroupcounter + 1 
-         vecgroupindex = vecgroupcounter 
-         VectorGroup(vecgroupindex).Identity = vecgroupindex 
-         VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-         VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-         VectorGroup(vecgroupindex).ContentName = "Waves or Particles?" 
-         VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-                 particleindex = particleindex + 1 
-                 vecorig(particleindex, 1) = -7 * u 
-                 vecorig (- particleindex , 2) = 80 + 1 * COS(2 * ((- u  - 7) ^ 2 - (- v  - 5) ^ 2))
-                 vecorig(particleindex, 3) = 10 + 7 * v 
-                 IF-  vecorig (- particleindex , 2) < 80 THEN
 
-                     veccolor(particleindex) = Magenta 
-                     veccolor(particleindex) = Chocolate 
-         VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- 'File 
-         recordtype = 0 
-         IF-  xx  = -111111 AND-  yy  = -111111 AND-  zz  = -111111 AND-  co  = -111111 THEN ' Next record begins a group.
 
-             recordtype = 111111 
-             vecgroupcounter = vecgroupcounter + 1 
-             vecgroupindex = vecgroupcounter 
-             VectorGroup(vecgroupindex).Identity = vecgroupindex 
-             VectorGroup(vecgroupindex).Pointer = vecgroupindex + 1 
-             VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
-             VectorGroup(vecgroupindex).ContentName = n$ 
-             VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-         IF-  xx  = -222222 AND-  yy  = -222222 AND-  zz  = -222222 AND-  co  = -222222 THEN ' Next record is position offset for entire group.
 
-             recordtype = 222222 
-             vecorigvel(particleindex, 1) = 0 'xx 
-             vecorigvel(particleindex, 2) = 0 'yy 
-             vecorigvel(particleindex, 3) = 0 'zz 
-   
-         IF-  xx  = -333333 AND-  yy  = -333333 AND-  zz  = -333333 AND-  co  = -333333 THEN ' Next record is previous particle's linear velocity vector.
 
-             recordtype = 333333 
-             vecorigvel(particleindex, 1) = xx 
-             vecorigvel(particleindex, 2) = yy 
-             vecorigvel(particleindex, 3) = zz 
-         IF-  xx  = -444444 AND-  yy  = -444444 AND-  zz  = -444444 AND-  co  = -444444 THEN ' Next record is previous particle's linear acceleration vector.
 
-             recordtype = 444444 
-             vecorigacc(particleindex, 1) = xx 
-             vecorigacc(particleindex, 2) = yy 
-             vecorigacc(particleindex, 3) = zz 
-         IF-  xx  = -555555 AND-  yy  = -555555 AND-  zz  = -555555 AND-  co  = -555555 THEN ' Next record is rotation point for entire group.
 
-             recordtype = 555555 
-             VectorGroup(vecgroupindex).CORx = xx 
-             VectorGroup(vecgroupindex).CORy = yy 
-             VectorGroup(vecgroupindex).CORz = zz 
-         IF-  xx  = -666666 AND-  yy  = -666666 AND-  zz  = -666666 AND-  co  = -666666 THEN ' Next record is previous particle's angular velocity vector.
 
-             recordtype = 666666 
-             vecorigrot(particleindex, 1) = xx 
-             vecorigrot(particleindex, 2) = yy 
-             vecorigrot(particleindex, 3) = zz 
-   
-         IF-  xx  = -999999 AND-  yy  = -999999 AND-  zz  = -999999 AND-  co  = -999999 THEN ' Previous record was last in group.
 
-             recordtype = 999999 
-             VectorGroup(vecgroupindex).LastParticle = particleindex 
-         IF-  recordtype  = 0 THEN ' Not a special record. Store position and color.
 
-             particleindex = particleindex + 1 
-             vecorig(particleindex, 1) = xx 
-             vecorig(particleindex, 2) = yy 
-             vecorig(particleindex, 3) = zz 
-                     veccolor(particleindex) = Black 
-                     veccolor(particleindex) = Blue 
-                     veccolor(particleindex) = Green 
-                     veccolor(particleindex) = Cyan 
-                     veccolor(particleindex) = Red 
-                     veccolor(particleindex) = Purple 
-                     veccolor(particleindex) = Orange 
-                     veccolor(particleindex) = LightGray 
-                     veccolor(particleindex) = DarkGray 
-                     veccolor(particleindex) = LightBlue 
-                     veccolor(particleindex) = LightGreen 
-                     veccolor(particleindex) = LightCyan 
-                     veccolor(particleindex) = OrangeRed 'lightred 
-                     veccolor(particleindex) = Violet 'lightpurple 
-                     veccolor(particleindex) = Yellow 
-                     veccolor(particleindex) = White 
-                     veccolor(particleindex) = White 
-   
- '__ZZZ 
- vecgroupcounter = vecgroupcounter + 1 
- vecgroupindex = vecgroupcounter 
- VectorGroup(vecgroupindex).Identity = vecgroupindex 
- VectorGroup(vecgroupindex).Pointer = -999 
- VectorGroup(vecgroupindex).Lagger = vecgroupindex - 1 
- VectorGroup(vecgroupindex).ContentName = "__ZZZ" 
- VectorGroup(vecgroupindex).FirstParticle = particleindex + 1 
-     particleindex = particleindex + 1 
-     vecorig(particleindex, 1) = -1000 
-     vecorig(particleindex, 2) = -1000 
-     vecorig(particleindex, 3) = -1000 
-     veccolor(particleindex) = White 
- VectorGroup(vecgroupindex).LastParticle = particleindex 
-   
- numparticleorig = particleindex 
-   
- animateforced: 
- ' requires vecgroupindex 
- ' protects timevar 
-     FOR-  particleindex  =-  VectorGroup (- vecgroupindex )- .FirstParticle  TO-  VectorGroup (- vecgroupindex )- .LastParticle 
 
-         x = vecorig(particleindex, 1) - VectorGroup(vecgroupindex).CORx 
-         y = vecorig(particleindex, 2) - VectorGroup(vecgroupindex).CORy 
-         z = vecorig(particleindex, 3) - VectorGroup(vecgroupindex).CORz 
-         ax = vecorigrot(particleindex, 1) 
-         ay = vecorigrot(particleindex, 2) 
-         az = vecorigrot(particleindex, 3) 
-             da = timestep * az 
-             xx = x 
-             yy = y 
-             x  =-  xx  * COS(- da ) --  yy  * SIN(- da )
-             y  =-  xx  * SIN(- da ) +-  yy  * COS(- da )
-             da = timestep * ay 
-             xx = x 
-             zz = z 
-             x  =-  xx  * COS(- da ) +-  zz  * SIN(- da )
-             z  = -- xx  * SIN(- da ) +-  zz  * COS(- da )
-             da = timestep * ax 
-             yy = y 
-             zz = z 
-             y  =-  yy  * COS(- da ) --  zz  * SIN(- da )
-             z  =-  yy  * SIN(- da ) +-  zz  * COS(- da )
-         vecorig(particleindex, 1) = x + VectorGroup(vecgroupindex).CORx 
-         vecorig(particleindex, 2) = y + VectorGroup(vecgroupindex).CORy 
-         vecorig(particleindex, 3) = z + VectorGroup(vecgroupindex).CORz 
-   
-   
- animatestandard: 
- ' requires vecgroupindex 
- ' protects timevar 
- timestep = .001 
- timevar = timevar + timestep 
- IF-  timevar  > 10 ^ 6 THEN-  timevar  = 0
 
- thename$  = LTRIM$(RTRIM$(- VectorGroup (- vecgroupindex )- .ContentName ))
- IF-  thename$  = "Clock Hands" THEN
 
-     pin = VectorGroup(vecgroupindex).FirstParticle 
-             pin = pin + 1 
-             vecorig (- pin , 1) = 40 +-  r  * COS(- hands (- q , 1) +-  pi  / 2)
-             vecorig(pin, 2) = -10 
-             vecorig (- pin , 3) = 40 +-  r  * SIN(- hands (- q , 1) +-  pi  / 2)
-     pin = VectorGroup(vecgroupindex).FirstParticle 
-     t = timevar / 50 
-     xl = -1.9: xr = 1.9: dx = .32 
-     yl = -1: yr = 1: dy = .32 
-     xl = xl * 4: xr = xr * 4: yl = yl * 4: yr = yr * 4 
-             pin = pin + 1 
-             vecorig (- pin , 1) = 70 + 1.25 * COS(- i  - 2 *-  t ) ^ 2 - 1.25 * SIN(- j  --  t ) ^ 2
-             vecorig(pin, 2) = 30 + i 
-             vecorig(pin, 3) = 40 + j 
-                 veccolor(pin) = Red 
-                 veccolor(pin) = DarkOrange 
- IF-  thename$  = "Hell Spawn" THEN
 
-     FOR-  i  =-  VectorGroup (- vecgroupindex )- .FirstParticle  TO-  VectorGroup (- vecgroupindex )- .LastParticle 
 
-         vecorig(i, 3) = vecorig(i, 3) + .3 
-         IF-  vecorig (- i , 3) > -350 THEN-  vecorig (- i , 3) = -350 - 70
 
-     t = timevar * .00001 
-     FOR-  particleindex  =-  VectorGroup (- vecgroupindex )- .FirstParticle  TO-  VectorGroup (- vecgroupindex )- .LastParticle 
 
-         xx = vecorig(particleindex, 1) 
-         yy = vecorig(particleindex, 2) 
-         vecorig (- particleindex , 1) =-  xx  * COS(- t ) --  yy  * SIN(- t )
-         vecorig (- particleindex , 2) =-  xx  * SIN(- t ) +-  yy  * COS(- t )
-     FOR-  i  =-  VectorGroup (- vecgroupindex )- .FirstParticle  TO-  VectorGroup (- vecgroupindex )- .LastParticle 
 
-         vecorig(i, 3) = vecorig(i, 3) - .3 
-         IF-  vecorig (- i , 3) < 0 THEN-  vecorig (- i , 3) = 70
 
-     pin = VectorGroup(vecgroupindex).FirstParticle 
-     t = timevar * .1 
-         vecorig (- pin , 1) = -10 + 5 * COS(- i  +-  t )
-         vecorig (- pin , 2) = -20 + 5 * SIN(- i  +-  t )
-         vecorig (- pin , 3) = 25 - 3 * COS(6 *-  i  +-  t ) * SIN(3 *-  i  +-  t )
-         pin = pin + 1 
-     dt = timestep * 100 
-     FOR-  particleindex  =-  VectorGroup (- vecgroupindex )- .FirstParticle  TO-  VectorGroup (- vecgroupindex )- .LastParticle 
 
-         vecorigvel(particleindex, 1) = vecorigvel(particleindex, 1) + vecorigacc(particleindex, 1) * dt 
-         vecorigvel(particleindex, 2) = vecorigvel(particleindex, 2) + vecorigacc(particleindex, 2) * dt 
-         vecorigvel(particleindex, 3) = vecorigvel(particleindex, 3) + vecorigacc(particleindex, 3) * dt 
-         vecorig(particleindex, 1) = vecorig(particleindex, 1) + vecorigvel(particleindex, 1) * dt 
-         vecorig(particleindex, 2) = vecorig(particleindex, 2) + vecorigvel(particleindex, 2) * dt 
-         vecorig(particleindex, 3) = vecorig(particleindex, 3) + vecorigvel(particleindex, 3) * dt 
-         IF-  vecorig (- particleindex , 3) < 0 THEN
 
-             vecorig(particleindex, 3) = 0 
-             vecorigvel(particleindex, 1) = vecorigvel(particleindex, 1) * .75 
-             vecorigvel(particleindex, 2) = vecorigvel(particleindex, 2) * .75 
-             vecorigvel(particleindex, 3) = -vecorigvel(particleindex, 3) * .5 
- IF-  thename$  = "Newtonian" THEN
 
-     dt = timestep * 100 
-     FOR-  particleindex  =-  VectorGroup (- vecgroupindex )- .FirstParticle  TO-  VectorGroup (- vecgroupindex )- .LastParticle 
 
-         vecorigvel(particleindex, 1) = vecorigvel(particleindex, 1) + vecorigacc(particleindex, 1) * dt 
-         vecorigvel(particleindex, 2) = vecorigvel(particleindex, 2) + vecorigacc(particleindex, 2) * dt 
-         vecorigvel(particleindex, 3) = vecorigvel(particleindex, 3) + vecorigacc(particleindex, 3) * dt 
-         vecorig(particleindex, 1) = vecorig(particleindex, 1) + vecorigvel(particleindex, 1) * dt 
-         vecorig(particleindex, 2) = vecorig(particleindex, 2) + vecorigvel(particleindex, 2) * dt 
-         vecorig(particleindex, 3) = vecorig(particleindex, 3) + vecorigvel(particleindex, 3) * dt 
-         IF-  vecorig (- particleindex , 3) < 0 THEN
 
-             vecorig(particleindex, 3) = 0 
-             vecorigvel(particleindex, 1) = vecorigvel(particleindex, 1) * .75 
-             vecorigvel(particleindex, 2) = vecorigvel(particleindex, 2) * .75 
-             vecorigvel(particleindex, 3) = -vecorigvel(particleindex, 3) * .5 
-         PRINT-  VectorGroup (- vecgroupindex )- .EventTimer 
 
-   
-         VectorGroup(vecgroupindex).ContentName = "Destroyed" 
-     dt = timestep 
-     FOR-  particleindex  =-  VectorGroup (- vecgroupindex )- .FirstParticle  TO-  VectorGroup (- vecgroupindex )- .LastParticle 
 
-         xx = vecorig(particleindex, 1) - 150 
-         yy = vecorig(particleindex, 2) - 150 
-         vecorig (- particleindex , 1) =-  xx  * COS(- dt ) --  yy  * SIN(- dt ) + 150
-         vecorig (- particleindex , 2) =-  xx  * SIN(- dt ) +-  yy  * COS(- dt ) + 150
-   
-   
- explode: 
- vecgroupindex = VectorGroup(1).Identity 
-         FOR-  particleindex  =-  VectorGroup (- vecgroupindex )- .FirstParticle  TO-  VectorGroup (- vecgroupindex )- .LastParticle 
 
-             vecorig(particleindex, 1) = explodex 
-             vecorig(particleindex, 2) = explodey 
-             vecorig(particleindex, 3) = explodez 
-             vecorigvel (- particleindex , 1) = (RND - .5) * 20
-             vecorigvel (- particleindex , 2) = (RND - .5) * 20
-             vecorigvel (- particleindex , 3) = (RND - .2) * 40
-             vecorigacc(particleindex, 3) = -30 
-     vecgroupindex = VectorGroup(vecgroupindex).Pointer 
-     vecgroupindex = VectorGroup(vecgroupindex).Identity 
-   
- calccom: 
- VectorGroup(vecgroupindex).COMx = vecorig(particleindex, 1) + VectorGroup(vecgroupindex).COMx 
- VectorGroup(vecgroupindex).COMy = vecorig(particleindex, 2) + VectorGroup(vecgroupindex).COMy 
- VectorGroup(vecgroupindex).COMz = vecorig(particleindex, 3) + VectorGroup(vecgroupindex).COMz 
-   
- adjustcom: 
- f = 1 + VectorGroup(vecgroupindex).LastParticle - VectorGroup(vecgroupindex).FirstParticle 
- VectorGroup(vecgroupindex).COMx = VectorGroup(vecgroupindex).COMx / f 
- VectorGroup(vecgroupindex).COMy = VectorGroup(vecgroupindex).COMy / f 
- VectorGroup(vecgroupindex).COMz = VectorGroup(vecgroupindex).COMz / f 
-   
- resetcom: 
- VectorGroup(vecgroupindex).COMx = 0 
- VectorGroup(vecgroupindex).COMy = 0 
- VectorGroup(vecgroupindex).COMz = 0