Index: /branches/playability/src/util/hud.cc
===================================================================
--- /branches/playability/src/util/hud.cc	(revision 10041)
+++ /branches/playability/src/util/hud.cc	(revision 10042)
@@ -237,5 +237,5 @@
   std::list<OrxGui::GLGuiWidget*>::iterator weaponWidget;
   Vector2D pos(0.3, .9);
-  for (weaponWidget = this->weaponsWidgets.begin(); weaponWidget != this->weaponsWidgets.end(); weaponWidget++, pos.x+=.2)
+  for (weaponWidget = this->weaponsWidgets.begin(); weaponWidget != this->weaponsWidgets.end(); weaponWidget++, pos.x+=.1)
   {
     if (pos.x > .8)
Index: /branches/playability/src/world_entities/projectiles/mbolt.cc
===================================================================
--- /branches/playability/src/world_entities/projectiles/mbolt.cc	(revision 10041)
+++ /branches/playability/src/world_entities/projectiles/mbolt.cc	(revision 10042)
@@ -29,4 +29,6 @@
 #include "debug.h"
 
+#include "static_model.h"
+
 
 #include "class_id_DEPRECATED.h"
@@ -39,16 +41,26 @@
 {
 
-  //this->loadModel("models/projectiles/mbolt.obj");   //!< Model not yet in repo
-  this->loadModel("models/projectiles/laser.obj");
+  this->loadModel("models/projectiles/mbolt.obj",0.25);
+  //this->loadModel("models/projectiles/laser.obj");
 
   this->setMinEnergy(4);
   this->setHealthMax(0);
   this->lifeSpan = 5.0;
-
-  this->emitter = new DotEmitter(100, 5, M_2_PI);
+  this->angle     = 0;
+
+  this->emitter = new DotEmitter(40, 0, M_2_PI);
   this->emitter->setParent(this);
   this->emitter->setSpread(M_PI, M_PI);
   this->emitter->setEmissionRate(300.0);
   this->emitter->setEmissionVelocity(50.0);
+
+  this->mat = new Material("mBolt");
+  //this->mat->setBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
+  this->mat->setBlendFunc(GL_SRC_ALPHA,GL_ONE);
+  this->mat->setDiffuse(1,1,1);
+  this->mat->setDiffuseMap("laser.png");
+  this->mat->setDiffuseMap("laser.png",1);
+  dynamic_cast<StaticModel*>(this->getModel())->addMaterial(this->mat);
+  dynamic_cast<StaticModel*>(this->getModel())->finalize();
 }
 
@@ -56,4 +68,6 @@
 /**
  *  standard deconstructor
+
+/**
 */
 MBolt::~MBolt ()
@@ -61,19 +75,36 @@
   // delete this->emitter;
 
-  /* this is normaly done by World.cc by deleting the ParticleEngine */
+  if (MBolt::trailParticles != NULL && MBolt::objectList().size() <= 1)
+  {
+    if (ParticleSystem::objectList().exists(MBolt::trailParticles))
+      delete MBolt::trailParticles;
+    MBolt::trailParticles = NULL;
+  }
   if (MBolt::explosionParticles != NULL && MBolt::objectList().size() <= 1)
   {
-    //if (ClassList::exists(MBolt::explosionParticles, CL_PARTICLE_SYSTEM))
-    //  delete MBolt::explosionParticles;
-    PRINTF(1)("Deleting MBolt Particles\n");
+    if (ParticleSystem::objectList().exists(MBolt::explosionParticles))
+      delete MBolt::explosionParticles;
     MBolt::explosionParticles = NULL;
   }
-
-}
-
+}
+
+SpriteParticles* MBolt::trailParticles = NULL;
 SpriteParticles* MBolt::explosionParticles = NULL;
 
 void MBolt::activate()
 {
+  if (unlikely(MBolt::trailParticles == NULL))
+  {
+    MBolt::trailParticles = new SpriteParticles(3000);
+    MBolt::trailParticles->setName("BoomerangProjectileTrailParticles");
+    MBolt::trailParticles->setMaterialTexture("maps/radial-trans-noise.png");
+    MBolt::trailParticles->setLifeSpan(1, 0);
+    MBolt::trailParticles->setRadius(0.0, 1);
+    MBolt::trailParticles->setRadius(1.0, 1);
+    MBolt::trailParticles->setColor(0.0, 1,0,0,.9);
+    MBolt::trailParticles->setColor(0.2, .8,.2,0,.9);
+    MBolt::trailParticles->setColor(0.5, .8,.4,0,.8);
+    MBolt::trailParticles->setColor(1.0, .8,.8,0,.7);
+  }
   if (unlikely(MBolt::explosionParticles == NULL))
   {
@@ -91,4 +122,11 @@
   this->setDamage(50);
   this->setHealth(0);
+
+  this->emitter->setSystem(MBolt::trailParticles);
+
+  this->updateNode(0);
+  this->emitter->setSpread(0);
+  this->emitter->setEmissionRate(20.0);
+  this->emitter->setEmissionVelocity(this->velocity.len());
 }
 
@@ -96,4 +134,7 @@
 void MBolt::deactivate()
 {
+  assert (MBolt::trailParticles != NULL);
+  MBolt::trailParticles->removeEmitter(this->emitter);
+
   assert (MBolt::explosionParticles != NULL);
   MBolt::explosionParticles->removeEmitter(this->emitter);
@@ -125,4 +166,6 @@
   if (this->tickLifeCycle(dt))
     this->deactivate();
+
+  this->angle += MBolt::rotationSpeed * dt;
 }
 
@@ -145,7 +188,21 @@
   glDisable(GL_LIGHTING);
 
-  WorldEntity::draw();
-
+  glPushMatrix();
+
+  float matrix[4][4];
+  glTranslatef (this->getAbsCoor ().x, this->getAbsCoor ().y, this->getAbsCoor ().z);
+  glRotatef(this->angle, 1.0f, 0.0f, 0.0f); //spinning missile
+  this->getAbsDir().matrix (matrix);
+  glMultMatrixf((float*)matrix);
+
+  glScalef(3.0, 0.7, 0.7);  // no double rescale
+
+  this->mat->select();
+  dynamic_cast<StaticModel*>(this->getModel())->draw();
+  this->mat->unselect();
+  glPopMatrix();
   glPopAttrib();
-}
-
+
+
+}
+
Index: /branches/playability/src/world_entities/projectiles/mbolt.h
===================================================================
--- /branches/playability/src/world_entities/projectiles/mbolt.h	(revision 10041)
+++ /branches/playability/src/world_entities/projectiles/mbolt.h	(revision 10042)
@@ -8,4 +8,5 @@
 
 #include "projectile.h"
+#include "material.h"
 
 class Vector;
@@ -36,8 +37,13 @@
   private:
     static FastFactory*               fastFactory;
-
+    static SpriteParticles*           trailParticles;
     static SpriteParticles*           explosionParticles;
 
+    float                             angle;
+    static const float                rotationSpeed = 540;
+
     ParticleEmitter*                  emitter;
+
+    Material*                         mat;
 
 
Index: /branches/playability/src/world_entities/weapons/medium_blaster.cc
===================================================================
--- /branches/playability/src/world_entities/weapons/medium_blaster.cc	(revision 10041)
+++ /branches/playability/src/world_entities/weapons/medium_blaster.cc	(revision 10042)
@@ -96,5 +96,5 @@
   pj->setParent(PNode::getNullParent());
 
-  pj->setVelocity(this->getAbsDir().apply(Vector(1,0,0))*250 + VECTOR_RAND(5));
+  pj->setVelocity(this->getAbsDir().apply(Vector(1,0,0))*150);
 
   pj->setAbsCoor(this->getEmissionPoint());
