Index: branches/playability/src/world_entities/projectiles/mbolt.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/mbolt.cc	(revision 10111)
+++ branches/playability/src/world_entities/projectiles/mbolt.cc	(revision 10113)
@@ -24,5 +24,4 @@
 
 #include "particles/dot_emitter.h"
-#include "particles/box_emitter.h"
 #include "particles/sprite_particles.h"
 
@@ -47,5 +46,5 @@
 {
   this->registerObject(this, MBolt::_objectList);
-  this->loadModel("models/projectiles/mbolt.obj");
+  this->loadModel("models/projectiles/mbolt.obj",4);
 
   
@@ -59,5 +58,5 @@
 
   //this->emitter = new DotEmitter(1000, 0, 0);
-  this->emitter = new DotEmitter(200, 0, 0);
+  this->emitter = new DotEmitter(50, 0, 0);
   this->emitter->setParent(this);
   this->emitter->setSpread(M_PI,M_PI);
@@ -76,9 +75,11 @@
   dynamic_cast<StaticModel*>(this->getModel())->finalize();
 
+  dynamic_cast<StaticModel*>(this->getModel())->rebuild();
+  this->buildObbTree(4);
   
   this->trail = new Trail(6,4,.1, this);
   //this->trail->setParent( this);
   this->trail->setTexture( "maps/laser.png");
-  this->trail->setAbsCoor(this->getAbsCoor() - Vector(1,0,0));
+  this->trail->setAbsCoor(this->getAbsCoor() - Vector(.7,0,0));
 }
 
@@ -110,5 +111,5 @@
     MBolt::explosionParticles = new SpriteParticles(1000);
     MBolt::explosionParticles->setName("MBoltExplosionParticles");
-    MBolt::explosionParticles->setLifeSpan(.5, .3);
+    MBolt::explosionParticles->setLifeSpan(.2, .1);
     MBolt::explosionParticles->setRadius(0.0, 10.0);
     MBolt::explosionParticles->setRadius(.5, 6.0);
@@ -126,5 +127,5 @@
   this->emitter->setSpread(0);
   this->emitter->setEmissionRate(10.0);
-  this->emitter->setEmissionVelocity(0);
+  this->emitter->setEmissionVelocity(50);
 }
 
@@ -136,6 +137,7 @@
   this->lifeCycle = 0.0;
 
-  this->toList(OM_NULL);
-  this->removeNode();
+  //this->toList(OM_NULL);
+  this->toList(OM_DEAD);
+  //this->removeNode();
   MBolt::fastFactory->kill(this);
 }
@@ -145,4 +147,5 @@
 {
   PRINTF(0)("MBolt collides pretest\n");
+
   if( entity == NULL)
     return;
@@ -196,16 +199,15 @@
   glMultMatrixf((float*)matrix);
 
-  glScalef(0.75, 0.7/4, 0.7/4);  // no double rescale
+  glScalef(0.75/4, 0.7/16, 0.7/16);  // no double rescale
 
   this->mat->select();
   dynamic_cast<StaticModel*>(this->getModel())->draw();
   this->mat->unselect();
-  glScalef(1/.75,4/.7,4/.7);
-  glTranslatef(-4,0,0);
+  glScalef(4/.75,16/.7,16/.7);
+  glTranslatef(-3,0,0);
   this->trail->draw();
   glPopMatrix();
   glPopAttrib();
 
-
-}
-
+}
+
Index: branches/playability/src/world_entities/space_ships/space_ship.cc
===================================================================
--- branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10111)
+++ branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10113)
@@ -34,5 +34,4 @@
 #include "particles/emitter_node.h"
 #include "particles/sprite_particles.h"
-#include "effects/explosion.h"
 #include "effects/trail.h"
 
@@ -52,4 +51,5 @@
 #include "state.h"
 #include "player.h"
+
 
 #include "util/loading/load_param.h"
@@ -173,16 +173,15 @@
   this->weaponMan.addWeapon( wpLeft1, 0, 0);
   this->weaponMan.addWeapon( wpRight1, 0, 1);
-  this->weaponMan.addWeapon( wpLeft2, 0, 2);
-  this->weaponMan.addWeapon( wpRight2, 0, 3);
-  this->weaponMan.addWeapon( wpLeft3, 0, 4);
-  this->weaponMan.addWeapon( wpRight3, 0, 5);
-
-  this->secWeaponMan.addWeapon( cannon, 1, 0);
-
-  this->weaponMan.changeWeaponConfig(0);
-  this->secWeaponMan.changeWeaponConfig(1);
+  this->weaponMan.addWeapon( wpLeft2, 1, 0);
+  this->weaponMan.addWeapon( wpRight2, 1, 1);
+  this->weaponMan.addWeapon( wpLeft3, 2, 0);
+  this->weaponMan.addWeapon( wpRight3, 2, 1);
+
+  this->secWeaponMan.addWeapon( cannon, 0, 0);
+
 
   wpRight1->requestAction(WA_ACTIVATE);
   wpLeft1->requestAction(WA_ACTIVATE);
+
   wpRight2->requestAction(WA_ACTIVATE);
   wpLeft2->requestAction(WA_ACTIVATE);
@@ -192,5 +191,9 @@
   cannon->requestAction(WA_ACTIVATE);
 
-  curWeaponPrimary    = 0;
+  
+  this->weaponMan.changeWeaponConfig(1);
+  this->secWeaponMan.changeWeaponConfig(0);
+
+  curWeaponPrimary    = 1;
   curWeaponSecondary  = 0;
 
@@ -339,5 +342,5 @@
   this->trailR->setTexture( "maps/engine.png");
 
-  
+
   this->toList(OM_GROUP_00);
 }
@@ -376,10 +379,4 @@
   this->secWeaponMan.showCrosshair();
   this->toList( OM_GROUP_01 );
-  
-  for(ObjectList<PNode>::const_iterator it = this->getNodesChildren().begin(); it != this->getNodesChildren().end(); it++)
-  {
-    if( likely( dynamic_cast<Weapon*>(*it) != NULL))
-      dynamic_cast<WorldEntity*>(*it)->toList( OM_GROUP_01);
-  }
   //dynamic_cast<Element2D*>(this->secWeaponMan.getFixedTarget())->setVisibility( true);
   //this->attachCamera();
@@ -391,10 +388,4 @@
   this->secWeaponMan.hideCrosshair();
   this->toList( OM_GROUP_00);
-  
-  for(ObjectList<PNode>::const_iterator it = this->getNodesChildren().begin(); it != this->getNodesChildren().end(); it++)
-  {
-    if( likely( dynamic_cast<Weapon*>(*it) != NULL))
-      dynamic_cast<WorldEntity*>(*it)->toList( OM_GROUP_00);
-  }
   //dynamic_cast<Element2D*>(this->secWeaponMan.getFixedTarget())->setVisibility( false);
   //this->detachCamera();
@@ -516,4 +507,7 @@
   this->trailR->tick(time);
 
+  this->weaponMan.setParentEntity( this);
+  this->secWeaponMan.setParentEntity( this);
+
   //orient the spaceship in direction of the mouse
   /*
@@ -558,5 +552,5 @@
 {
   //Playable::process(event);
-
+  
   if( event.type == KeyMapper::PEV_LEFT)
     this->bLeft = event.bPressed;
@@ -571,4 +565,10 @@
   else if( event.type == KeyMapper::PEV_FIRE1)
     this->bFire = event.bPressed;
+  else if( event.type == KeyMapper::PEV_NEXT_WEAPON && event.bPressed)
+  {
+    this->nextWeaponConfig();
+  }
+  else if ( event.type == KeyMapper::PEV_PREVIOUS_WEAPON && event.bPressed)
+    this->previousWeaponConfig();
 
 
@@ -632,5 +632,5 @@
   else
   {
-    this->setAbsCoor( this->getAbsCoor() + Vector(150,0,0) + Vector(1,0,0) * VECTOR_RAND(50).dot(Vector(1,0,0)));
+    this->setAbsCoor( this->getAbsCoor() + Vector(100,0,0) + Vector(1,0,0) * VECTOR_RAND(150).dot(Vector(1,0,0)));
   }
 
@@ -963,2 +963,22 @@
 }
 
+/**
+ * @brief jumps to the next WeaponConfiguration
+ */
+void SpaceShip::nextWeaponConfig()
+{
+  
+  this->curWeaponPrimary    = (curWeaponPrimary + 1) % 3;
+  this->weaponMan.changeWeaponConfig(this->curWeaponPrimary);
+  Playable::weaponConfigChanged();
+}
+
+/**
+ * @brief moves to the last WeaponConfiguration
+ */
+void SpaceShip::previousWeaponConfig()
+{
+  this->curWeaponPrimary    = (curWeaponPrimary + 1) % 3;
+  this->weaponMan.changeWeaponConfig(this->curWeaponPrimary);
+  Playable::weaponConfigChanged();
+}
Index: branches/playability/src/world_entities/space_ships/space_ship.h
===================================================================
--- branches/playability/src/world_entities/space_ships/space_ship.h	(revision 10111)
+++ branches/playability/src/world_entities/space_ships/space_ship.h	(revision 10113)
@@ -78,4 +78,9 @@
     void setPlaymodeXML(const std::string& playmode);
     virtual void movement (float dt);
+
+    void nextWeaponConfig();
+    void previousWeaponConfig();
+
+    inline void hit(float damage, WorldEntity* killer) { this->collidesWith(killer, this->getAbsCoor()); killer->collidesWith(this, this->getAbsCoor()); } ;
 
   private:
Index: branches/playability/src/world_entities/weapons/swarm_launcher.cc
===================================================================
--- branches/playability/src/world_entities/weapons/swarm_launcher.cc	(revision 10111)
+++ branches/playability/src/world_entities/weapons/swarm_launcher.cc	(revision 10113)
@@ -150,5 +150,5 @@
   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() <= 200)
+    if( ((*eIterator)->getOMListNumber() == OM_GROUP_00) && ((*eIterator)->getClassCName() != "Weapon") && ((*eIterator)->getClassCName() != "Projectile") && ((*eIterator)->getAbsCoor() - this->getAbsCoor()).len() <= 300)
     {
       pj  = this->getProjectile();
Index: branches/playability/src/world_entities/world_entity.cc
===================================================================
--- branches/playability/src/world_entities/world_entity.cc	(revision 10111)
+++ branches/playability/src/world_entities/world_entity.cc	(revision 10113)
@@ -803,4 +803,5 @@
 void WorldEntity::hit(float damage, WorldEntity* killer)
 {
+
   this->decreaseHealth(damage);
 
