Index: branches/playability/src/story_entities/game_world_data.cc
===================================================================
--- branches/playability/src/story_entities/game_world_data.cc	(revision 10285)
+++ branches/playability/src/story_entities/game_world_data.cc	(revision 10286)
@@ -232,5 +232,5 @@
   State::setPlayer(this->localPlayer);
 
-  Playable* playable;
+//   Playable* playable;
   if (!Playable::objectList().empty())
   {
Index: branches/playability/src/world_entities/projectiles/spike.h
===================================================================
--- branches/playability/src/world_entities/projectiles/spike.h	(revision 10285)
+++ branches/playability/src/world_entities/projectiles/spike.h	(revision 10286)
@@ -48,4 +48,6 @@
 
     WorldEntity* hitEntity; // FIXME TEMPORARY
+
+    Vector                            velocity;
 };
 
Index: branches/playability/src/world_entities/projectiles/spike_ball.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/spike_ball.cc	(revision 10285)
+++ branches/playability/src/world_entities/projectiles/spike_ball.cc	(revision 10286)
@@ -55,8 +55,4 @@
   this->emitter->setEmissionVelocity(50.0);
 
-//   this->speed = 150;
-/*
-  this->angle = 0;
-  this->rotationSpeed = 130;*/
   this->setRotationSpeed(130);
 
@@ -70,20 +66,4 @@
 
   this->launcher = new Vector [this->getFragments()];
-
-//   this->fastFactory = tFastFactory<Spike>::getFastFactory(CL_SPIKE, "Spike");
-
-/*
-  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();
-  cannon->setName( "SpikeLauncher");
-  this->weaponMan->addWeapon(cannon, 0, 0);
-  this->weaponMan->changeWeaponConfig(0);
-
-  this->weaponMan->getWeapon(0)->increaseEnergy(50);*/
 }
 
@@ -172,5 +152,4 @@
   this->hitEntity = entity;
   dynamic_cast<SpaceShip*>(entity)->damage(this->getDamage(),0);
-//   this->deactivate();
 }
 
@@ -178,11 +157,11 @@
 void SpikeBall::blow()
 {
+  updateFireDir();
+
   Spike* pj = NULL;
-/*  printf( "KA-" );*/
   for ( int i = 0; i < this->getFragments(); i++)
   {
     pj  = new Spike();
     assert( pj );
-/*    printf(" %i", i);*/
     pj->setParent(PNode::getNullParent());
 
@@ -191,15 +170,11 @@
     pj->setParent(PNode::getNullParent());
     pj->setAbsCoor(this->getAbsCoor() + this->launcher[i] * this->size);
-    Quaternion q;
-    pj->setAbsDir(q.lookAt(Vector(), this->launcher[i], VECTOR_RAND(1)));
+//     Quaternion q;
+    pj->setAbsDir(Quaternion(this->launcher[i], 0));
 
     pj->toList(this->getOMListNumber());
 
-/*
-    pj->setAbsCoor(this->getAbsCoor() + VECTOR_RAND(3));
-    pj->setAbsDir(this->getAbsDir());*/
     pj->activate();
   }
-/*  printf( "BOOM\n" );*/
 }
 
@@ -219,5 +194,4 @@
   ca = cos (this->getAngle());
   sa = sin (this->getAngle());
-// final version below... easier to to cheat with the one above.
 
   m[0][0] = nx * nx * (1 - ca) + ca;
@@ -233,5 +207,4 @@
   float x, y, z;
   for (int i = 0; i < this->getFragments(); 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;
@@ -240,5 +213,4 @@
     this->launcher[i] = Vector (x, y, z);
   }
-//   printf("\n");
 
   for( int i = 0; i < 3 ; i++)
@@ -254,13 +226,6 @@
 void SpikeBall::tick (float dt)
 {
-  //Vector v = *this->flightDirection * ( this->speed * time * 1000 + 0.1);
-  Vector v = this->getVelocity() * dt;
+  Vector v = this->velocity * dt;
   this->shiftCoor(v);
-
-//   if(this->lifeCycle > .9){
-// /*    printf("time to blow:  ");*/
-// //     this->weaponMan->fire();
-// /*    this->blow();*/
-//   }
 
   if (this->tickLifeCycle(dt)){
@@ -270,5 +235,4 @@
 
   this->updateAngle( dt );
-//   angle += rotationSpeed * dt;
 }
 
@@ -289,6 +253,4 @@
 {
   glPushAttrib(GL_ENABLE_BIT);
-  //glDisable(GL_LIGHTING);
-
   glMatrixMode(GL_MODELVIEW);
   glPushMatrix();
@@ -305,5 +267,4 @@
 
   glPopMatrix();
-
   glPopAttrib();
 }
Index: branches/playability/src/world_entities/projectiles/spike_ball.h
===================================================================
--- branches/playability/src/world_entities/projectiles/spike_ball.h	(revision 10285)
+++ branches/playability/src/world_entities/projectiles/spike_ball.h	(revision 10286)
@@ -10,6 +10,4 @@
 #include "spike.h"
 #include "effects/billboard.h"
-
-// #include "../weapons/spike_launcher.h"
 
 
Index: branches/playability/src/world_entities/space_ships/space_ship.cc
===================================================================
--- branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10285)
+++ branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10286)
@@ -204,5 +204,5 @@
 
   curWeaponPrimary    = 3;
-  curWeaponSecondary  = 1;
+  curWeaponSecondary  = 0;
 
   Playable::weaponConfigChanged();
@@ -295,8 +295,8 @@
   this->weaponMan.setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
 
-  this->weaponMan.setSlotPosition(2, Vector(-1.5, 0, -.5));
+  this->weaponMan.setSlotPosition(2, Vector(1.0, 0, -1.5));
   this->weaponMan.setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0)));
 
-  this->weaponMan.setSlotPosition(3, Vector(-1.5, 0, .5));
+  this->weaponMan.setSlotPosition(3, Vector(1.0, 0, 1.5));
   this->weaponMan.setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0)));
 
Index: branches/playability/src/world_entities/weapons/heavy_blaster.cc
===================================================================
--- branches/playability/src/world_entities/weapons/heavy_blaster.cc	(revision 10285)
+++ branches/playability/src/world_entities/weapons/heavy_blaster.cc	(revision 10286)
@@ -235,28 +235,28 @@
 
   glPushMatrix();
-  glTranslatef (this->objComp[1][0]->getAbsCoor().x, this->objComp[1][0]->getAbsCoor().y, this->objComp[1][0]->getAbsCoor().z);
-  static_cast<StaticModel*>(this->getModel())->draw(2);
-  glPopMatrix();
-
-  glPushMatrix();
-  glTranslatef (this->objComp[2][0]->getAbsCoor().x, this->objComp[2][0]->getAbsCoor().y, this->objComp[2][0]->getAbsCoor().z);
-  static_cast<StaticModel*>(this->getModel())->draw(0);
-  glPopMatrix();
-
-  glPushMatrix();
-  glTranslatef (this->objComp[0][1]->getAbsCoor().x, this->objComp[0][1]->getAbsCoor().y, this->objComp[0][1]->getAbsCoor().z);
+    glTranslatef (this->objComp[1][0]->getAbsCoor().x, this->objComp[1][0]->getAbsCoor().y, this->objComp[1][0]->getAbsCoor().z);
+    static_cast<StaticModel*>(this->getModel())->draw(2);
+  glPopMatrix();
+
+  glPushMatrix();
+    glTranslatef (this->objComp[2][0]->getAbsCoor().x, this->objComp[2][0]->getAbsCoor().y, this->objComp[2][0]->getAbsCoor().z);
+    static_cast<StaticModel*>(this->getModel())->draw(0);
+  glPopMatrix();
+
+  glPushMatrix();
+    glTranslatef (this->objComp[0][1]->getAbsCoor().x, this->objComp[0][1]->getAbsCoor().y, this->objComp[0][1]->getAbsCoor().z);
     static_cast<StaticModel*>(this->getModel())->draw(4);
   glPopMatrix();
 
   glPushMatrix();
-  glTranslatef (this->objComp[1][1]->getAbsCoor().x, this->objComp[1][1]->getAbsCoor().y, this->objComp[1][1]->getAbsCoor().z);
-  static_cast<StaticModel*>(this->getModel())->draw(5);
-  glPopMatrix();
-
-  glPushMatrix();
-  glTranslatef (this->objComp[2][1]->getAbsCoor().x, this->objComp[2][1]->getAbsCoor().y, this->objComp[2][1]->getAbsCoor().z);
-  static_cast<StaticModel*>(this->getModel())->draw(3);
-  glPopMatrix();
-
-  glPopMatrix();
-}
+    glTranslatef (this->objComp[1][1]->getAbsCoor().x, this->objComp[1][1]->getAbsCoor().y, this->objComp[1][1]->getAbsCoor().z);
+    static_cast<StaticModel*>(this->getModel())->draw(5);
+  glPopMatrix();
+
+  glPushMatrix();
+    glTranslatef (this->objComp[2][1]->getAbsCoor().x, this->objComp[2][1]->getAbsCoor().y, this->objComp[2][1]->getAbsCoor().z);
+    static_cast<StaticModel*>(this->getModel())->draw(3);
+  glPopMatrix();
+
+  glPopMatrix();
+}
Index: branches/playability/src/world_entities/weapons/medium_blaster.cc
===================================================================
--- branches/playability/src/world_entities/weapons/medium_blaster.cc	(revision 10285)
+++ branches/playability/src/world_entities/weapons/medium_blaster.cc	(revision 10286)
@@ -37,4 +37,11 @@
 {
       // model will be deleted from WorldEntity-destructor
+  for (int i = 0; i < this->getBarrels(); i++)
+  {
+   delete [] this->shootAnim[i];
+//    delete [] this->objComp[i];
+  }
+  delete [] this->shootAnim;
+//   delete [] this->objComp;
 }
 
@@ -50,5 +57,5 @@
 //  this->model = (Model*)ResourceManager::getInstance()->load("models/guns/test_gun.obj", OBJ, RP_CAMPAIGN);
 
-  this->loadModel("models/guns/plasmadriver_#.obj", 1.0);
+  this->loadModel("models/guns/blaster.obj", .33);
   
 
@@ -71,4 +78,38 @@
   this->prepareProjectiles(100);
 
+
+  this->setBarrels(1);
+  this->setSegs(2);
+  this->activeBarrel = 0;
+
+  this->objComp = new PNode**[this->getBarrels()];
+//   this->emissionPoint = new PNode*[this->getBarrels()];
+  this->shootAnim = new Animation3D**[this->getBarrels()];
+  for (int i = 0; i < this->getBarrels(); i++)
+  {
+    this->objComp[i] = new PNode* [this->getSegs()];
+//     this->emissionPoint[i] = new PNode;
+//     this->emissionPoint[i]->setParent(this);             //< One EmissionPoint, that is a PNode connected to the weapon. You can set this to the exitting point of the Projectiles
+//     this->emissionPoint[i]->setName("EmissionPoint");
+//     this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
+    this->shootAnim[i] = new Animation3D* [this->getSegs()];
+    for(int j = 0; j < this->getSegs(); j++)
+    {
+      this->objComp[i][j] = new PNode;
+      this->shootAnim[i][j] = new Animation3D(this->objComp[i][j]);
+      this->shootAnim[i][j]->setInfinity(ANIM_INF_CONSTANT);
+    }
+  }
+
+  for (int i = 0; i < this->getBarrels(); i++){
+    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.04, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][0]->addKeyFrame(Vector(-0.333, 0.0, 0.0), Quaternion(), 0.15, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.01, ANIM_LINEAR, ANIM_NULL);
+
+    this->shootAnim[i][1]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.04, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][1]->addKeyFrame(Vector(.166, 0.0, 0.0), Quaternion(), 0.15, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][1]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.01, ANIM_LINEAR, ANIM_NULL);
+  }
+
   Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
   Animation3D* animation3 = this->getAnimation(WS_DEACTIVATING, this);
@@ -77,5 +118,6 @@
   animation3->setInfinity(ANIM_INF_CONSTANT);
 
-  this->setEmissionPoint(3.8, 1.2, 0);
+
+  this->setEmissionPoint(1.3, 0, 0);
 
   animation2->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
@@ -103,4 +145,7 @@
   pj->setAbsDir(this->getAbsDir());
   pj->activate();
+
+  for (int i = 0; i < this->getSegs(); i++)
+    this->shootAnim[this->activeBarrel][i]->replay();
 }
 
@@ -121,3 +166,24 @@
 void MediumBlaster::draw() const
 {
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  glTranslatef (this->getAbsCoor ().x,
+                this->getAbsCoor ().y,
+                this->getAbsCoor ().z);
+
+  static_cast<StaticModel*>(this->getModel())->draw(2);
+
+  glPushMatrix();
+    glTranslatef (this->objComp[0][0]->getAbsCoor().x, this->objComp[0][0]->getAbsCoor().y, this->objComp[0][0]->getAbsCoor().z);
+    static_cast<StaticModel*>(this->getModel())->draw(1);
+  glPopMatrix();
+
+  glPushMatrix();
+  glTranslatef (this->objComp[0][1]->getAbsCoor().x, this->objComp[0][1]->getAbsCoor().y, this->objComp[0][1]->getAbsCoor().z);
+  static_cast<StaticModel*>(this->getModel())->draw(0);
+  glPopMatrix();
+
+  glPopMatrix();
+
+  glPopMatrix();
 }
Index: branches/playability/src/world_entities/weapons/medium_blaster.h
===================================================================
--- branches/playability/src/world_entities/weapons/medium_blaster.h	(revision 10285)
+++ branches/playability/src/world_entities/weapons/medium_blaster.h	(revision 10286)
@@ -28,4 +28,10 @@
     virtual void draw() const;
 
+  private:
+    PNode*** objComp;
+    Animation3D*** shootAnim;
+
+    int activeBarrel;
+
 };
 
