function cyclone.init()

 local cyclone_bullet = load_particle("cyclone_bullet.obj")
 local gun_barrel = load_particle("cyclone_gun_barrel.obj")

 local gun_laser = load_particle("cyclone_gun_laser.obj")
 local gun_laserdot = load_particle("cyclone_gun_laserdot.obj")

 local sound_spin = sounds["cyclone_spin.wav"]
 local sound_spindown = sounds["cyclone_spindown.wav"]

 local spindown = 0.99
 local maxspeed = 25
 local lasermove = 0.25


 function cyclone.shoot(worm)
  worm:data().cyclone = 12
  sound_spin:play(worm,nil,100,0.9,0)
 end

 function cyclone.gun(worm)
  local ammo = worm:data().cyclone
  local barrel = worm:data().cyclone_barrel
  local speed = worm:data().cyclone_speed
  local dx,dy = angle_vector(worm:angle(),3)
  if ammo then
   ammo = ammo - 1
   if ammo % 10 == 0 then
    local bullet = worm:shoot(cyclone_bullet, 1, 1, 0, 0, 0, 20, 0, 8)
    local angle = worm:angle()
    bullet:set_angle(angle)
    bullet:set_spd(angle_vector(angle + math.random(-100,100) * 0.01, 1))
   end
   if ammo == 0 then
    ammo = nil
    sound_spindown:play(worm,nil,100,0.9,0)
   end
   worm:data().cyclone = ammo
   speed = maxspeed
  end
  if barrel then
   barrel = (barrel + speed) % 360
   speed = speed * spindown
  else
   barrel = 0
   speed = 0
  end
  worm:data().cyclone_barrel = barrel
  worm:data().cyclone_speed = speed
  for a = 0, 2 do
   local gun = worm:shoot(gun_barrel, 1, 0, 0, 0, 0, 0, ((a*120 + barrel) % 360), 1)
   gun:set_spd(dx,dy)
  end

  dx, dy = angle_vector(math.random(-speed,speed)*lasermove+worm:angle(),1)
  for a=1, 8 do
   local laser = worm:shoot(gun_laser, 1, 0, 0, 0, 0, 0, 330, 4)
   laser:set_spd(dx * a * 0.01, dy * a * 0.01)
  end
  local laserdot = worm:shoot(gun_laserdot, 1, 0, 0, 0, 0, 0, 30, 4)
  laserdot:set_spd(dx * 0.25, dy * 0.25)
 end
end