Index: branches/playability/src/world_entities/effects/trail.cc
===================================================================
--- branches/playability/src/world_entities/effects/trail.cc	(revision 10131)
+++ branches/playability/src/world_entities/effects/trail.cc	(revision 10132)
@@ -100,5 +100,5 @@
   for( int i = 1; i < sections; i++)
   {
-    this->nodeList[i] = (this->getAbsCoor() - (((this->getParent()->getAbsDir().apply(Vector(1,1,1))).getNormalized() * (i * this->maxLength / sections))));
+    this->nodeList[i] = (this->getAbsCoor());// - (((this->getParent()->getAbsDir().apply(Vector(1,1,1))).getNormalized() * (i * this->maxLength / sections))));
     //PRINTF(0)(" N%i (%f,%f,%f)",i,this->nodeList[i].x,this->nodeList[i].y,this->nodeList[i].z);
   }
@@ -133,22 +133,14 @@
 {
   // Update node positions
+  float len = 0;
   float secLen  = this->maxLength / this->sections;
-  this->nodeList[0] = (this->getAbsCoor());
-  for(int i = 1; i < this->sections; i++)
-  {
-    this->nodeList[i] = this->nodeList[i-1] - (this->nodeList[i-1] - this->nodeList[i]).getNormalized()*secLen;
-  }
-  /*
-  this->length  = this->maxLength / (this->getAbsCoor() - this->nodeList[this->sections-1]).len();
-  if (!likely(this->length == 1.0))
-    for(int i = 1; i < this->sections; i++)
-      this->nodeList[i] = this->getAbsCoor()- (this->getAbsCoor() - this->nodeList[i])*this->length;
-  */
-  /*PRINTF(0)("TRAIL POS ");
-  for( int i=0; i < this->sections; i++)
-  {
-    PRINTF(0)("N%i (%f,%f,%f)",i,this->nodeList[i].x,this->nodeList[i].y,this->nodeList[i].z);
-  }
-  PRINTF(0)("\n");*/
+  this->nodeList[0] = this->getAbsCoor();
+  this->nodeList[1] = this->getAbsCoor() - ((this->getParent()->getAbsDir().apply(Vector(1,0,0))).getNormalized() *  this->maxLength / sections);
+  for(int i = 2; i < this->sections; i++)
+  {
+    len = (this->nodeList[i-1] - this->nodeList[i]).len();
+    if( secLen < len) len = secLen;
+    this->nodeList[i] = this->nodeList[i-1] - (this->nodeList[i-1] - this->nodeList[i]).getNormalized()*len;
+  }
 }
 
Index: branches/playability/src/world_entities/projectiles/mbolt.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/mbolt.cc	(revision 10131)
+++ branches/playability/src/world_entities/projectiles/mbolt.cc	(revision 10132)
@@ -78,5 +78,5 @@
   this->buildObbTree(4);
   
-  this->trail = new Trail(6,4,.1, this);
+  this->trail = new Trail(6, 4, .1, this);
   //this->trail->setParent( this);
   this->trail->setTexture( "maps/laser.png");
@@ -124,5 +124,4 @@
   this->setHealth(0);
 
-
   this->emitter->setSpread(0);
   this->emitter->setEmissionRate(10.0);
@@ -150,12 +149,10 @@
   this->hitEntity = entity;
   dynamic_cast<SpaceShip*>(entity)->damage(this->getPhysDamage(),this->getElecDamage());
-  this->destroy(this);
+  //this->destroy(this);
+  this->deactivate();
   
   return;
 
-  if( entity == NULL || dynamic_cast<SpaceShip*>(entity) == NULL)
-    return;
-
-  dynamic_cast<SpaceShip*>(entity)->damage( this->getPhysDamage(), this->getElecDamage());
+  //dynamic_cast<SpaceShip*>(entity)->damage( this->getPhysDamage(), this->getElecDamage());
   //entity->destroy(this);
   //this->deactivate();
Index: branches/playability/src/world_entities/projectiles/swarm_projectile.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/swarm_projectile.cc	(revision 10131)
+++ branches/playability/src/world_entities/projectiles/swarm_projectile.cc	(revision 10132)
@@ -55,5 +55,5 @@
   this->emitter->setSpread(M_PI, M_PI);
 
-  this->turningSpeed = 30;
+  this->turningSpeed = 10;
 
   this->physDamage = 200;
@@ -164,9 +164,12 @@
 //   printf("turning angle: %f\ntemp: %f\n", angle, tmp);
 
-  if( fabsf(angle) >  fabsf(tmp) ) { angle = tmp; }
+  if( fabsf(angle) >  fabsf(tmp) ) 
+    angle = tmp;
+  else
+    angle *= tmp/fabsf(tmp);
 
   Vector d = curDirection.cross(estTargetDir).cross(curDirection);
   d.normalize();
-  if( unlikely( angle == 90)) { return d; } //avoid complication
+  if( unlikely( fabsf(angle) == 90)) { return d; } //avoid complication
 
   Vector newDir = curDirection + d *  curDirection.len() * tan (angle);
@@ -221,5 +224,5 @@
 //     else
 //       tti = (this->getAbsCoor() - this->target->getAbsCoor()).len() / sqrt ( projectileVelocity * projectileVelocity + targetVelocity * targetVelocity);
-    Vector estTargetDir = (this->target->getAbsCoor() - this->getAbsCoor());
+    Vector estTargetDir = (this->target->getAbsCoor() - this->getAbsCoor()).getNormalized();
 //     estTargetDir.slerpTo(this->velocity, 1);
     this->velocity = this->newDirection(this->velocity, estTargetDir, this->turningSpeed * time );
@@ -275,5 +278,6 @@
   glPushMatrix();
 
-  Vector tmpDir = this->curDir *.7 + this->lastDir * .3;
+  Vector tmpDir = this->curDir; // *.7 + this->lastDir * .3;
+  tmpDir.slerpTo(this->lastDir, .4);
 
   float matrix[4][4];
Index: branches/playability/src/world_entities/projectiles/swarm_projectile.h
===================================================================
--- branches/playability/src/world_entities/projectiles/swarm_projectile.h	(revision 10131)
+++ branches/playability/src/world_entities/projectiles/swarm_projectile.h	(revision 10132)
@@ -50,4 +50,5 @@
     Vector                            curDir;
     Vector                            lastDir;
+    Vector                            oldPos;
 
     WorldEntity* hitEntity; // FIXME TEMPORARY
Index: branches/playability/src/world_entities/space_ships/space_ship.cc
===================================================================
--- branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10131)
+++ branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10132)
@@ -343,13 +343,13 @@
 
   
-  this->trail = new Trail( 10, 10, .2, this);
+  this->trail = new Trail( 30, 100, .2, this);
   //this->trail->setParent( this);
   this->trail->setTexture( "maps/engine.png");
 
-  this->trailL = new Trail( 10, 10, .2, this);
+  this->trailL = new Trail( 30, 100, .2, this);
   //this->trailL->setParent( this);
   this->trailL->setTexture( "maps/engine.png");
 
-  this->trailR = new Trail( 10, 10, .2, this);
+  this->trailR = new Trail( 30, 100, .2, this);
   //this->trailR->setParent( this);
   this->trailR->setTexture( "maps/engine.png");
Index: branches/playability/src/world_entities/weapons/medium_blaster.cc
===================================================================
--- branches/playability/src/world_entities/weapons/medium_blaster.cc	(revision 10131)
+++ branches/playability/src/world_entities/weapons/medium_blaster.cc	(revision 10132)
@@ -56,6 +56,6 @@
 
   this->setStateDuration(WS_RELOADING, 0);
-  this->setStateDuration(WS_ACTIVATING, 0); //.5);
-  this->setStateDuration(WS_DEACTIVATING, 0); // 1);
+  this->setStateDuration(WS_ACTIVATING, .5); //.5);
+  this->setStateDuration(WS_DEACTIVATING, 1); // 1);
 
   this->setEnergyMax(500);
Index: branches/playability/src/world_entities/weapons/weapon_manager.cc
===================================================================
--- branches/playability/src/world_entities/weapons/weapon_manager.cc	(revision 10131)
+++ branches/playability/src/world_entities/weapons/weapon_manager.cc	(revision 10132)
@@ -435,4 +435,5 @@
   {
 	  firingWeapon = this->currentSlotConfig[i].currentWeapon;
+      if( firingWeapon != NULL && firingWeapon->getCurrentState() == WS_SHOOTING) continue;
 	  if( firingWeapon != NULL) firingWeapon->requestAction(WA_SHOOT);
   }
