Index: branches/playability/src/world_entities/projectiles/spike_ball.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/spike_ball.cc	(revision 10217)
+++ branches/playability/src/world_entities/projectiles/spike_ball.cc	(revision 10224)
@@ -68,4 +68,7 @@
   this->weaponMan = new WeaponManager(dynamic_cast<WorldEntity*>(this));
   this->weaponMan->setParentEntity(this);
+  this->weaponMan->setSlotCount(1);
+  this->weaponMan->setSlotPosition(0, Vector(0, 0, 0));
+  this->weaponMan->setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
 
   Weapon* cannon = new SpikeLauncher();
@@ -73,6 +76,4 @@
   this->weaponMan->addWeapon(cannon, 0, 0);
   this->weaponMan->changeWeaponConfig(0);
-
-  this->ttd = false;
 }
 
@@ -176,10 +177,11 @@
   this->shiftCoor(v);
 
-  if (this->tickLifeCycle(dt)){
-    this->weaponMan->getWeapon(0)->requestAction(WA_SHOOT);
-    if (this->ttd)
+  if(this->lifeCycle > .9){
+    printf("called by spikeball  ");
+    this->weaponMan->fire();
+  }
+
+  if (this->tickLifeCycle(dt))
       this->deactivate();
-    this->ttd = true;
-  }
 
   angle += rotationSpeed * dt;
Index: branches/playability/src/world_entities/projectiles/spike_ball.h
===================================================================
--- branches/playability/src/world_entities/projectiles/spike_ball.h	(revision 10217)
+++ branches/playability/src/world_entities/projectiles/spike_ball.h	(revision 10224)
@@ -64,6 +64,4 @@
 
     WeaponManager*                   weaponMan;
-
-    bool                             ttd;
 };
 
Index: branches/playability/src/world_entities/space_ships/space_ship.cc
===================================================================
--- branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10217)
+++ branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10224)
@@ -175,7 +175,9 @@
   cannon->setName( "SwarmLauncher");
 
-  Weapon* spike = new SpikeLauncher();
+  Weapon* spike = new SpikeThrower();
   spike->setName( "SpikeThrower" );
 
+  Weapon* spike2 = new SpikeLauncher();
+  spike->setName( "SpikeLauncher" );
 
   this->weaponMan.addWeapon( wpLeft1, 0, 0);
@@ -199,4 +201,5 @@
   this->secWeaponMan.addWeapon( cannon, 0, 0);
   this->secWeaponMan.addWeapon( spike, 1, 1);
+  this->secWeaponMan.addWeapon( spike2, 2, 2);
 
   
@@ -205,5 +208,5 @@
 
   curWeaponPrimary    = 3;
-  curWeaponSecondary  = 0;
+  curWeaponSecondary  = 2;
 
   Playable::weaponConfigChanged();
Index: branches/playability/src/world_entities/weapons/spike_launcher.cc
===================================================================
--- branches/playability/src/world_entities/weapons/spike_launcher.cc	(revision 10217)
+++ branches/playability/src/world_entities/weapons/spike_launcher.cc	(revision 10224)
@@ -219,5 +219,5 @@
   float x, y, z;
   for (int i = 0; i < this->spikes;i++){
-
+    printf("%i ", i);
     x = m[0][0] * this->launcher[i].x + m[0][1] * this->launcher[i].y + m[0][2] * this->launcher[i].z;
     y = m[1][0] * this->launcher[i].x + m[1][1] * this->launcher[i].y + m[1][2] * this->launcher[i].z;
@@ -229,4 +229,5 @@
     this->launcher[i] = Vector (x, y, z);
   }
+  printf("\n");
 
   for( int i = 0; i < 3 ; i++)
@@ -241,5 +242,5 @@
   updateFireDir(VECTOR_RAND(1), 20);
 
-  printf("fireing spikes\n");
+  printf("firing spikes\n");
   Projectile* pj = NULL;
   for (int i = 0; i < this->spikes; i++)
@@ -250,13 +251,13 @@
 
 //     pj->setVelocity(this->getVelocity()+(this->getAbsDir().apply(Vector(1,0,0))*115.0 + VECTOR_RAND(10)));
-    pj->setVelocity(this->launcher[i] * 300.0);
+    pj->setVelocity(this->launcher[i].getNormalized() * 300.0);
 
     pj->setParent(PNode::getNullParent());
     pj->setAbsCoor(this->getAbsCoor() + this->launcher[i] * this->size);
-//     Quaternion q;
-//     pj->setRelDir(q.lookAt(Vector(), this->launcher[i], VECTOR_RAND(1)));
-    pj->setRelDir(90, this->launcher[i].x, this->launcher[i].y, this->launcher[i].z);
-
-    pj->toList(this->getOMListNumber());
+    Quaternion q;
+    pj->setRelDir(q.lookAt(Vector(), this->launcher[i], VECTOR_RAND(1)));
+//     pj->setRelDir(90, this->launcher[i].x, this->launcher[i].y, this->launcher[i].z);
+
+/*    pj->toList(this->getOMListNumber());*/
     pj->activate();
   }
Index: branches/playability/src/world_entities/weapons/spike_thrower.cc
===================================================================
--- branches/playability/src/world_entities/weapons/spike_thrower.cc	(revision 10217)
+++ branches/playability/src/world_entities/weapons/spike_thrower.cc	(revision 10224)
@@ -157,4 +157,5 @@
   pj->setVelocity(this->getAbsDir().apply(Vector(1,0,0))*150);
   pj->setAbsCoor(this->getEmissionPoint());
+  pj->toList(this->getOMListNumber());
 
   pj->setAbsDir(this->getAbsDir());
Index: branches/playability/src/world_entities/weapons/weapon_manager.cc
===================================================================
--- branches/playability/src/world_entities/weapons/weapon_manager.cc	(revision 10217)
+++ branches/playability/src/world_entities/weapons/weapon_manager.cc	(revision 10224)
@@ -431,12 +431,14 @@
 void WeaponManager::fire()
 {
+  printf("firing WM: ");
   Weapon* firingWeapon;
   for(int i = 0; i < this->slotCount; i++)
   {
+    printf("%i ", i);
 	  firingWeapon = this->currentSlotConfig[i].currentWeapon;
       if( firingWeapon != NULL && firingWeapon->getCurrentState() == WS_SHOOTING) continue;
 	  if( firingWeapon != NULL) firingWeapon->requestAction(WA_SHOOT);
   }
-
+  printf("\n");
   /*
 	this->crosshair->setRotationSpeed(500);
