Index: branches/playability/src/world_entities/space_ships/space_ship.cc
===================================================================
--- branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10149)
+++ branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10152)
@@ -161,8 +161,8 @@
   //wpLeft2->setParent( this);
   
-  Weapon* wpRight3 = new HeavyBlaster ();
+  Weapon* wpRight3 = new HeavyBlaster (1);
   wpRight3->setName( "HeavyBlaster");
   //wpRight3->setParent( this);
-  Weapon* wpLeft3 = new HeavyBlaster ();
+  Weapon* wpLeft3 = new HeavyBlaster (0);
   wpLeft3->setName( "HeavyBlaster");
   //wpLeft3->setParent( this);
@@ -182,8 +182,17 @@
   this->weaponMan.addWeapon( wpRight3, 2, 5);
 
+  this->weaponMan.addWeapon( wpLeft1, 3, 0);
+  this->weaponMan.addWeapon( wpRight1, 3, 1);
+
+  this->weaponMan.addWeapon( wpLeft2, 3, 2);
+  this->weaponMan.addWeapon( wpRight2, 3, 3);
+
+  this->weaponMan.addWeapon( wpLeft3, 3, 4);
+  this->weaponMan.addWeapon( wpRight3, 3, 5);
+
   this->secWeaponMan.addWeapon( cannon, 0, 0);
 
   
-  this->weaponMan.changeWeaponConfig(2);
+  this->weaponMan.changeWeaponConfig(3);
   this->secWeaponMan.changeWeaponConfig(0);
 
@@ -274,8 +283,8 @@
   this->weaponMan.setSlotCount(6);
 
-  this->weaponMan.setSlotPosition(0, Vector(-2.6, 0, -3.0));
+  this->weaponMan.setSlotPosition(0, Vector(0.0, 0, -3.0));
   this->weaponMan.setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
 
-  this->weaponMan.setSlotPosition(1, Vector(-2.6, 0, 3.0));
+  this->weaponMan.setSlotPosition(1, Vector(0.0, 0, 3.0));
   this->weaponMan.setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
 
Index: branches/playability/src/world_entities/weapons/heavy_blaster.cc
===================================================================
--- branches/playability/src/world_entities/weapons/heavy_blaster.cc	(revision 10149)
+++ branches/playability/src/world_entities/weapons/heavy_blaster.cc	(revision 10152)
@@ -15,8 +15,8 @@
  * Standard constructor
  */
-HeavyBlaster::HeavyBlaster ()
+HeavyBlaster::HeavyBlaster (int leftRight)
  : Weapon()
 {
-    this->init();
+    this->init(leftRight);
 }
 
@@ -24,5 +24,6 @@
  : Weapon()
 {
-    this->init();
+    // TODO add leftRight to params
+    this->init(0);
     if (root != NULL)
       this->loadParams(root);
@@ -34,5 +35,6 @@
 HeavyBlaster::~HeavyBlaster()
 {
-      // model will be deleted from WorldEntity-destructor
+  this->deconstr();
+     // model will be deleted from WorldEntity-destructor
 }
 
@@ -42,6 +44,8 @@
 }
 
-void HeavyBlaster::init()
-{
+void HeavyBlaster::init(int leftRight)
+{
+
+  this->leftRight = leftRight;
   //this->registerObject(this, HeavyBlaster::_objectList);
 
@@ -70,20 +74,42 @@
   this->setBarrels(3);
   this->setSegs(2);
-
-  this->objComp1 = new PNode;
-  this->objComp2 = new PNode;
-  this->objComp3 = new PNode;
-  this->objComp4 = new PNode;
-  this->objComp5 = new PNode;
-  this->objComp6 = new PNode;
-
-  Animation3D* animB0Shoot = this->getAnimation(WS_SHOOTING0, this->objComp1);
+  this->activeBarrel = 0;
+//   this->init2();
+
+
+
+  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);
+    }
+  }
+
+    this->emissionPoint[0]->setRelCoor(Vector(1.1, 0.14, 0.06));
+    this->emissionPoint[1]->setRelCoor(Vector(1.1, -.06, 0.14));
+    this->emissionPoint[2]->setRelCoor(Vector(1.1, 0.06, -.14));
+
+
+//   Animation3D* animB0Shoot = this->getAnimation(WS_SHOOTING0, this->objComp[0][0]);
 //   Animation3D* animB1Shoot = this->getAnimation(WS_SHOOTING1, this->objComp2);
 //   Animation3D* animB2Shoot = this->getAnimation(WS_SHOOTING2, this->objComp3);
-//   Animation3D* animT0Shoot = this->getAnimation(WS_SHOOTING3, this->objComp4);
+//   Animation3D* animT0Shoot = this->getAnimation(WS_SHOOTING3, this->objComp[0][1]);
 //   Animation3D* animT1Shoot = this->getAnimation(WS_SHOOTING4, this->objComp5);
 //   Animation3D* animT2Shoot = this->getAnimation(WS_SHOOTING5, this->objComp6);
 
-  animB0Shoot->setInfinity(ANIM_INF_CONSTANT);
+
+//   this->shootAnim[0][0]->setInfinity(ANIM_INF_CONSTANT);
 //   animB1Shoot->setInfinity(ANIM_INF_CONSTANT);
 //   animB2Shoot->setInfinity(ANIM_INF_CONSTANT);
@@ -92,27 +118,13 @@
 //   animT2Shoot->setInfinity(ANIM_INF_CONSTANT);
 
-  animB0Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
-  animB0Shoot->addKeyFrame(Vector(-0.1, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
-  animB0Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
-/*
-  animT0Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
-  animT0Shoot->addKeyFrame(Vector(-0.04, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
-  animT0Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);*/
-/*
-  animB1Shoot->addKeyFrame(Vector(0.1, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
-  animB1Shoot->addKeyFrame(Vector(-0.1, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
-  animB1Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);
-
-  animT1Shoot->addKeyFrame(Vector(0.04, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
-  animT1Shoot->addKeyFrame(Vector(-0.04, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
-  animT1Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);
-
-  animB2Shoot->addKeyFrame(Vector(0.1, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
-  animB2Shoot->addKeyFrame(Vector(-0.1, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
-  animB2Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);
-
-  animT2Shoot->addKeyFrame(Vector(0.04, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
-  animT2Shoot->addKeyFrame(Vector(-0.04, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
-  animT2Shoot->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);*/
+  for (int i = 0; i < this->getBarrels(); i++){
+    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][0]->addKeyFrame(Vector(-0.3, 0.0, 0.0), Quaternion(), 1.0, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.4, ANIM_LINEAR, ANIM_NULL);
+
+    this->shootAnim[i][1]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][1]->addKeyFrame(Vector(-0.4, 0.0, 0.0), Quaternion(), 1.0, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][1]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.4, ANIM_LINEAR, ANIM_NULL);
+  }
 
   Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
@@ -122,5 +134,5 @@
   animation3->setInfinity(ANIM_INF_CONSTANT);
 
-  this->setEmissionPoint(3.8, 1.2, 0, 0);
+//   this->setEmissionPoint(3.8, 1.2, 0, 0);
 
   animation2->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
@@ -140,5 +152,4 @@
   // set the owner
   pj->setOwner(this->getOwner());
-
   pj->setParent(PNode::getNullParent());
 
@@ -147,8 +158,16 @@
   pj->setVelocity(this->getAbsDir().apply(Vector(1,0,0))*130 + VECTOR_RAND(1));
 
-  pj->setAbsCoor(this->getEmissionPoint(0));
+  pj->setAbsCoor(this->emissionPoint[this->activeBarrel]->getAbsCoor());
+//   pj->setAbsCoor(this->getEmissionPoint(0));
   pj->setAbsDir(this->getAbsDir());
-  pj->toList(OM_GROUP_01_PROJ);
+//   pj->toList(OM_GROUP_01_PROJ);
   pj->activate();
+
+  // initiate animation
+  for (int i = 0; i < this->getSegs(); i++)
+    this->shootAnim[this->activeBarrel][i]->replay();
+
+  // switch barrel
+  this->activeBarrel = (this->activeBarrel + 1) % this->getBarrels();
 }
 
@@ -167,4 +186,5 @@
 }
 
+
 void HeavyBlaster::draw() const
 {
@@ -175,47 +195,39 @@
                 this->getAbsCoor ().z);
 
+  if (this->leftRight == W_LEFT)
+    glScalef(1.0, 1.0, -1.0);
+
   static_cast<StaticModel*>(this->getModel())->draw(6);
 
   glPushMatrix();
-    glTranslatef (this->objComp1->getAbsCoor().x, this->objComp1->getAbsCoor().y, this->objComp1->getAbsCoor().z);
+    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);
-    static_cast<StaticModel*>(this->getModel())->draw(2);
-    static_cast<StaticModel*>(this->getModel())->draw(0);
-
-    glPushMatrix();
-      glTranslatef (this->objComp4->getAbsCoor().x, this->objComp4->getAbsCoor().y, this->objComp4->getAbsCoor().z);
-      static_cast<StaticModel*>(this->getModel())->draw(4);
-      static_cast<StaticModel*>(this->getModel())->draw(5);
-      static_cast<StaticModel*>(this->getModel())->draw(3);
-    glPopMatrix();
-  glPopMatrix();
-/*
-  glPushMatrix();
-  glTranslatef (this->objComp2->getAbsCoor().x, this->objComp2->getAbsCoor().y, this->objComp2->getAbsCoor().z);
+  glPopMatrix();
+
+  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->objComp3->getAbsCoor().x, this->objComp3->getAbsCoor().y, this->objComp3->getAbsCoor().z);
+  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->objComp4->getAbsCoor().x, this->objComp4->getAbsCoor().y, this->objComp4->getAbsCoor().z);
-//   static_cast<StaticModel*>(this->getModel())->draw(4);
-//   static_cast<StaticModel*>(this->getModel())->draw(5);
-//   static_cast<StaticModel*>(this->getModel())->draw(3);
-//   glPopMatrix();
-/*
-  glPushMatrix();
-  glTranslatef (this->objComp5->getAbsCoor().x, this->objComp5->getAbsCoor().y, this->objComp5->getAbsCoor().z);
+  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->objComp6->getAbsCoor().x, this->objComp6->getAbsCoor().y, this->objComp6->getAbsCoor().z);
+  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();
-}
+  glPopMatrix();
+
+  glPopMatrix();
+}
Index: branches/playability/src/world_entities/weapons/heavy_blaster.h
===================================================================
--- branches/playability/src/world_entities/weapons/heavy_blaster.h	(revision 10149)
+++ branches/playability/src/world_entities/weapons/heavy_blaster.h	(revision 10152)
@@ -4,4 +4,7 @@
 
 #include "weapon.h"
+
+#define    W_LEFT        0
+#define    W_RIGHT       1
 
 /**
@@ -14,9 +17,9 @@
   //ObjectListDeclaration(HeavyBlaster);
   public:
-    HeavyBlaster();
+    HeavyBlaster(int leftRight);
     HeavyBlaster (const TiXmlElement* root);
     virtual ~HeavyBlaster();
 
-    void init();
+    void init(int leftRight);
     virtual void loadParams(const TiXmlElement* root);
 
@@ -29,10 +32,11 @@
 
   private:
-    PNode* objComp1;
-    PNode* objComp2;
-    PNode* objComp3;
-    PNode* objComp4;
-    PNode* objComp5;
-    PNode* objComp6;
+    PNode*** objComp;
+    Animation3D*** shootAnim;
+    PNode** emissionPoint;
+
+    int activeBarrel;
+
+    int leftRight;
 };
 
Index: branches/playability/src/world_entities/weapons/light_blaster.cc
===================================================================
--- branches/playability/src/world_entities/weapons/light_blaster.cc	(revision 10149)
+++ branches/playability/src/world_entities/weapons/light_blaster.cc	(revision 10152)
@@ -45,5 +45,5 @@
 {
 
-  this->loadModel("models/guns/plasmadriver_#.obj", 1.0);
+  this->loadModel("models/guns/gattling.obj", 0.333);
   
 
@@ -66,11 +66,45 @@
   this->prepareProjectiles(100);
 
+  this->setBarrels(3);
+  this->setSegs(1);
+  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->emissionPoint[i]->setRelCoor(Vector(1.19, 0.0, 0.1));
+
+//   Animation3D* animation1 = this->getAnimation(WS_SHOOTING, this);
   Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
   Animation3D* animation3 = this->getAnimation(WS_DEACTIVATING, this);
 
+//   animation1->setInfinity(ANIM_INF_CONSTANT);
   animation2->setInfinity(ANIM_INF_CONSTANT);
   animation3->setInfinity(ANIM_INF_CONSTANT);
 
-  this->setEmissionPoint(3.8, 1.2, 0);
+//   this->setEmissionPoint(3.8, 1.2, 0);
+
+  for (int i = 0; i < this->getBarrels(); i++){
+    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(0, 0, 0), 0.05, ANIM_NULL, ANIM_LINEAR);
+    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(120, 0, 0), 0.0, ANIM_NULL, ANIM_LINEAR);
+  }
+
 
   animation2->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
@@ -96,8 +130,14 @@
   pj->setVelocity(this->getAbsDir().apply(Vector(1,0,0))*180);
 
-  pj->setAbsCoor(this->getEmissionPoint());
+  pj->setAbsCoor(this->emissionPoint[this->activeBarrel]->getAbsCoor());
   pj->setAbsDir(this->getAbsDir());
-  pj->toList(OM_GROUP_01_PROJ);
+//   pj->toList(OM_GROUP_01_PROJ);
   pj->activate();
+
+  for (int i = 0; i < this->getSegs(); i++)
+    this->shootAnim[this->activeBarrel][i]->replay();
+
+  // switch barrel
+  this->activeBarrel = (this->activeBarrel + 1) % this->getBarrels();
 }
 
@@ -118,3 +158,10 @@
 void LightBlaster::draw() const
 {
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+    glTranslatef (this->getAbsCoor ().x, this->getAbsCoor ().y, this->getAbsCoor ().z);
+    Vector tmpRot = this->getAbsDir().getSpacialAxis();
+    glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
+    static_cast<StaticModel*>(this->getModel())->draw();
+  glPopMatrix();
 }
Index: branches/playability/src/world_entities/weapons/light_blaster.h
===================================================================
--- branches/playability/src/world_entities/weapons/light_blaster.h	(revision 10149)
+++ branches/playability/src/world_entities/weapons/light_blaster.h	(revision 10152)
@@ -28,4 +28,11 @@
     virtual void draw() const;
 
+  private:
+    PNode*** objComp;
+    Animation3D*** shootAnim;
+
+    PNode** emissionPoint;
+
+    int activeBarrel;
 };
 
Index: branches/playability/src/world_entities/weapons/weapon.cc
===================================================================
--- branches/playability/src/world_entities/weapons/weapon.cc	(revision 10149)
+++ branches/playability/src/world_entities/weapons/weapon.cc	(revision 10152)
@@ -124,4 +124,8 @@
   this->segs = 1;
 
+  this->shootAnim = new Animation3D**[this->getBarrels()];
+  for (int i = 0; i < this->getBarrels(); i++)
+    this->shootAnim[i] = new Animation3D* [this->getSegs()];
+
   this->emissionPoint = new PNode*[this->barrels];
   for(int i = 0; i < this->barrels; i++){
@@ -150,4 +154,44 @@
   // set this object to be synchronized over network
   //this->setSynchronized(true);
+}
+
+/**
+ * needed, if there are more than one barrel or segments
+ */
+void Weapon::init2() 
+{
+  if (this->barrels == 1 && this->segs == 1)
+    return;
+
+  delete this->emissionPoint[0];
+  delete this->emissionPoint;
+  delete this->shootAnim[0];
+  delete this->shootAnim;
+
+  this->shootAnim = new Animation3D**[this->barrels];
+  this->emissionPoint = new PNode*[this->barrels];
+  for(int i = 0; i < this->barrels; i++){
+    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->segs];
+  }
+}
+
+/**
+ * deconstructor for init2
+ */
+void Weapon::deconstr()
+{
+  for(int i = 0; i < this->barrels; i++) {
+    delete this->emissionPoint[i];
+    for (int j = 0; j < this->segs; j++)
+      delete this->shootAnim[i][j];
+    delete this->shootAnim[i];
+  }
+
+  delete this->emissionPoint;
+  delete this->shootAnim;
 }
 
@@ -327,13 +371,13 @@
 }
 
-Animation3D* Weapon::getAnimation(ShootingStates state, PNode* node)
-{
-  if (state >= WS_SS_MAX) // if the state is not known
+Animation3D* Weapon::getAnimation(int barrel, int seg, PNode* node)
+{
+  if (barrel >= this->getBarrels() || seg >= this->getSegs()) // if the state is not known
     return NULL;
 
-  if (unlikely(this->animation[state] == NULL)) // if the animation does not exist yet create it.
+  if (unlikely(this->shootAnim[barrel][seg] == NULL)) // if the animation does not exist yet create it.
   {
     if (likely(node != NULL))
-      return this->animation[state] = new Animation3D(node);
+      return this->shootAnim[barrel][seg] = new Animation3D(node);
     else
     {
@@ -343,5 +387,5 @@
   }
   else
-    return this->animation[state];
+    return this->shootAnim[barrel][seg];
 }
 
Index: branches/playability/src/world_entities/weapons/weapon.h
===================================================================
--- branches/playability/src/world_entities/weapons/weapon.h	(revision 10149)
+++ branches/playability/src/world_entities/weapons/weapon.h	(revision 10152)
@@ -55,18 +55,4 @@
   WS_STATE_COUNT  =     8     //!< This must match the count of enumerations-members.
 } WeaponState;
-
-typedef enum
-{
-  WS_SHOOTING0    = 0x00000001, //!< Fireing 1st Barrel
-  WS_SHOOTING1    = 0x00000002, //!< Fireing 2nd Barrel
-  WS_SHOOTING2    = 0x00000004, //!< Fireing 3rd Barrel
-  WS_SHOOTING3    = 0x00000008, //!< Fireing 4st Barrel
-  WS_SHOOTING4    = 0x00000010, //!< Fireing 5st Barrel
-  WS_SHOOTING5    = 0x00000020, //!< Fireing 6st Barrel
-  WS_SHOOTING6    = 0x00000040, //!< Fireing 7st Barrel
-  WS_SHOOTING7    = 0x00000080, //!< Fireing 8st Barrel
-
-  WS_SS_MAX       = 0x000000ff
-}ShootingStates;
 
 //! an enumerator defining capabilities of a WeaponSlot
@@ -177,5 +163,5 @@
 
     Animation3D* getAnimation(WeaponState state, PNode* node = NULL);
-    Animation3D* getAnimation(ShootingStates state, PNode* node = NULL);
+    Animation3D* getAnimation(int barrel, int seg, PNode* node);
     Animation3D* copyAnimation(WeaponState from, WeaponState to);
 
@@ -190,5 +176,14 @@
     void debug() const;
 
-    
+    inline int getBarrels() {return this->barrels; };
+    inline int getSegs() { return this->segs; };
+    inline void setBarrels(int barrels) { this->barrels = barrels; };
+    inline void setSegs(int segs) { this->segs = segs; };
+
+    inline Animation3D* getShootAnim(int barrel, int seg) { return this->shootAnim[barrel][seg]; };
+    inline void setShootAnim(int barrel, int seg, PNode* component) { this->shootAnim[barrel][seg] = this->getAnimation(barrel, seg, component); };
+
+    void init2();
+    void deconstr();
 
   protected:
@@ -208,8 +203,4 @@
 
 
-    inline int getBarrels() {return this->barrels; };
-    inline int getSeg() {return this->segs; };
-    inline void setBarrels(int barrels) { this->barrels = barrels; };
-    inline void setSegs(int segs) { this->segs = segs; };
 
   private:
@@ -268,4 +259,6 @@
     int                    barrels;                         //!< # of barrels
     int                    segs;                             //!< # of segments, one barrel has
+    Animation3D***         shootAnim;
+
   };
 
