Index: /branches/playability/src/lib/coord/p_node.h
===================================================================
--- /branches/playability/src/lib/coord/p_node.h	(revision 10078)
+++ /branches/playability/src/lib/coord/p_node.h	(revision 10079)
@@ -133,5 +133,5 @@
   inline const Quaternion& getRelDir () const { return this->prevRelDirection; };
   /** @returns the Relative Directional Destination */
-inline const Quaternion& getRelDirSoft2D() const { return (this->toDirection)? *this->toDirection : this->relDirection; };
+  inline const Quaternion& getRelDirSoft2D() const { return (this->toDirection)? *this->toDirection : this->relDirection; };
   /** @returns a Vector pointing into the relative Direction */
   inline Vector getRelDirV() const { return this->prevRelDirection.apply(Vector(0,1,0)); };
Index: /branches/playability/src/world_entities/projectiles/hbolt.cc
===================================================================
--- /branches/playability/src/world_entities/projectiles/hbolt.cc	(revision 10078)
+++ /branches/playability/src/world_entities/projectiles/hbolt.cc	(revision 10079)
@@ -28,4 +28,5 @@
 
 // #include "effects/billboard.h"
+#include "space_ships/space_ship.h"
 
 
@@ -98,5 +99,5 @@
   }
 
-  this->setDamage(100);
+  this->setPhysDamage(100);
   this->setHealth(0);
 }
@@ -117,7 +118,10 @@
 void HBolt::collidesWith(WorldEntity* entity, const Vector& location)
 {
+  PRINTF(0)("Collision with HBolt\n");
   if (this->hitEntity != entity && entity->isA(CL_NPC))
     this->destroy( entity );
   this->hitEntity = entity;
+  dynamic_cast<SpaceShip*>(entity)->damage(this->getPhysDamage(),0);
+//   this->deactivate();
 }
 
@@ -142,10 +146,6 @@
     this->deactivate();
 
-  //float w = this->rotationSpeed * M_PI;
-  //Quaternion rotation(this->rotationSpeed * dt, this->axis);
-  //Quaternion u = this->getRelDir();
-  //this->setRelDir(u * rotation);
+  this->updateAngle(dt);
 
-  this->updateAngle(dt);
 
 }
Index: /branches/playability/src/world_entities/projectiles/lbolt.cc
===================================================================
--- /branches/playability/src/world_entities/projectiles/lbolt.cc	(revision 10078)
+++ /branches/playability/src/world_entities/projectiles/lbolt.cc	(revision 10079)
@@ -28,4 +28,6 @@
 #include <cassert>
 #include "debug.h"
+
+#include "space_ships/space_ship.h"
 
 
@@ -116,7 +118,10 @@
 void LBolt::collidesWith(WorldEntity* entity, const Vector& location)
 {
+  PRINTF(0)("Collision with LBolt\n");
   if (this->hitEntity != entity && entity->isA(CL_NPC))
     this->destroy( entity );
   this->hitEntity = entity;
+  dynamic_cast<SpaceShip*>(entity)->damage(this->getDamage(),0);
+//   this->deactivate();
 }
 
Index: /branches/playability/src/world_entities/projectiles/swarm_projectile.cc
===================================================================
--- /branches/playability/src/world_entities/projectiles/swarm_projectile.cc	(revision 10078)
+++ /branches/playability/src/world_entities/projectiles/swarm_projectile.cc	(revision 10079)
@@ -28,4 +28,6 @@
 
 #include "class_id_DEPRECATED.h"
+
+#include "math/vector.h"
 
 ObjectListDefinitionID(SwarmProjectile, CL_SWARM_PROJECTILE);
@@ -54,7 +56,4 @@
 
   this->target = NULL;
-
-  this->rotationSpeed = 100;
-  this->angle = 0;
 }
 
@@ -128,4 +127,9 @@
 
   this->setHealth(10.0* (float)rand()/(float)RAND_MAX);
+
+  this->maxVelocity = 300;
+
+  this->rotationSpeed = 100;
+  this->angle = 0;
 }
 
@@ -216,21 +220,24 @@
   this->shiftCoor(v);*/
 
-  float projectileVelocity = this->velocity.len();
-  if (target != NULL){
-    float tti;  //Time To Impact
-    float targetVelocity = this->target->getVelocity().len();
-    if (unlikely(projectileVelocity == 0 && targetVelocity == 0)) // TODO calculate this reasonably
-      tti = 1; // we do have a problem....
-    else
-      tti = this->target->getRelCoor().len() / sqrt ( projectileVelocity * projectileVelocity + targetVelocity * targetVelocity);
-    Vector estTargetDir = (this->target->getRelCoor() + this->target->getVelocity()) * tti;
-    this->velocity = this->newDirection(this->velocity, estTargetDir, this->turningSpeed * time );
-  }
-  else
-    if (likely(projectileVelocity != 0))
-      this->velocity *= maxVelocity / projectileVelocity; // set speed to max
-
-
-  this->shiftCoor(velocity * time);
+//   float projectileVelocity = this->getVelocity().len();
+//   if (target != NULL){
+//     float tti;  //Time To Impact
+// //     float targetVelocity = this->target->getVelocity().len();
+// // /*    if (unlikely(projectileVelocity == 0 && targetVelocity == 0)) // TODO calculate this reasonably*/
+//       tti = 1; // we do have a problem....
+// // //     else
+// // //       tti = (this->getAbsCoor() - this->target->getAbsCoor()).len() / sqrt ( projectileVelocity * projectileVelocity + targetVelocity * targetVelocity);
+//     Vector estTargetDir =  this->getAbsCoor() - this->target->getAbsCoor() + this->target->getVelocity() * (0.5);
+// //     this->setVelocity((this->getAbsCoor() - this->target->getAbsCoor()).getNormalized() * this->velocity.len());
+//     this->velocity = this->newDirection(this->velocity, estTargetDir, this->turningSpeed * time ) * this->maxVelocity;
+//   }
+//   else
+//     if (likely(projectileVelocity != 0))
+//       this->velocity *= (this->maxVelocity / projectileVelocity); // set speed to max
+/*
+  Vector v = this->velocity + this->target->getAbsCoor() - this->getAbsCoor();
+  v.normalize();
+  v *= projectileVelocity;*/
+  this->shiftCoor(velocity * (time));
 
   if(this->tickLifeCycle(time))
Index: /branches/playability/src/world_entities/projectiles/swarm_projectile.h
===================================================================
--- /branches/playability/src/world_entities/projectiles/swarm_projectile.h	(revision 10078)
+++ /branches/playability/src/world_entities/projectiles/swarm_projectile.h	(revision 10079)
@@ -45,5 +45,5 @@
     Vector                            correctionVector;
 
-    PNode*                            target;
+    WorldEntity*                      target;
 
     WorldEntity* hitEntity; // FIXME TEMPORARY
Index: /branches/playability/src/world_entities/weapons/swarm_launcher.cc
===================================================================
--- /branches/playability/src/world_entities/weapons/swarm_launcher.cc	(revision 10078)
+++ /branches/playability/src/world_entities/weapons/swarm_launcher.cc	(revision 10079)
@@ -99,5 +99,5 @@
 
   this->setEmissionPoint(1.684, 0.472, 0);
-  this->getProjectileFactory()->prepare(5);
+  this->getProjectileFactory()->prepare(50);
 
   this->setActionSound(WA_SHOOT, "sound/explosions/explosion_1.wav");
@@ -147,16 +147,18 @@
   for( ObjectList<Playable>::const_iterator eIterator = Playable::objectList().begin(); eIterator !=Playable::objectList().end(); eIterator++)
   {
-    if( ((*eIterator)->getOMListNumber() == OM_GROUP_00) && ((*eIterator)->getClassCName() != "Weapon") && ((*eIterator)->getClassCName() != "Projectile") && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 100)
+    if( ((*eIterator)->getOMListNumber() == OM_GROUP_00) && ((*eIterator)->getClassCName() != "Weapon") && ((*eIterator)->getClassCName() != "Projectile") && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 200)
     {
       pj  = this->getProjectile();
       if (pj == NULL)
         return;
-	  pj->setVelocity(this->getVelocity()+(this->getAbsDir().apply(Vector(1,0,0))*165.0 + VECTOR_RAND(20)));
-	
-	  pj->setParent( PNode::getNullParent());
-	  pj->setAbsCoor( this->getEmissionPoint());
-	  pj->setAbsDir( this->getAbsDir());
-	  pj->setTarget( *eIterator);
-	  pj->activate();
+
+      pj->setVelocity(this->getVelocity()+(this->getAbsDir().apply(Vector(1,0,0))*115.0 + VECTOR_RAND(10)));
+
+      pj->setParent(PNode::getNullParent());
+      pj->setAbsCoor(this->getEmissionPoint());
+      pj->setAbsDir(this->getAbsDir());
+      pj->setTarget( dynamic_cast<WorldEntity*>(*eIterator));
+      pj->activate();
+
     }
   }
