Index: branches/playability/src/story_entities/game_world.cc
===================================================================
--- branches/playability/src/story_entities/game_world.cc	(revision 10031)
+++ branches/playability/src/story_entities/game_world.cc	(revision 10032)
@@ -346,9 +346,9 @@
       this->dataTank->localPlayer->getPlayable()->setPlaymode(playmode))
   {
-    PRINTF(4)("Set Playmode to %d:%s\n", playmode, Playable::playmodeToString(playmode).c_str());
+    PRINTF(0)("Set Playmode to %d:%s\n", playmode, Playable::playmodeToString(playmode).c_str());
   }
   else
   {
-    PRINTF(2)("Unable to set Playmode %d:'%s'\n", playmode, Playable::playmodeToString(playmode).c_str());
+    PRINTF(0)("Unable to set Playmode %d:'%s'\n", playmode, Playable::playmodeToString(playmode).c_str());
   }
 }
Index: branches/playability/src/world_entities/playable.cc
===================================================================
--- branches/playability/src/world_entities/playable.cc	(revision 10031)
+++ branches/playability/src/world_entities/playable.cc	(revision 10032)
@@ -44,6 +44,6 @@
 
 Playable::Playable()
-    : weaponMan(this),
-    supportedPlaymodes(Playable::Full3D),
+    : weaponMan(this)
+    ,supportedPlaymodes(Playable::Full3D),
     playmode(Playable::Full3D)
 {
Index: branches/playability/src/world_entities/playable.h
===================================================================
--- branches/playability/src/world_entities/playable.h	(revision 10031)
+++ branches/playability/src/world_entities/playable.h	(revision 10032)
@@ -71,5 +71,5 @@
   void setCameraMode(unsigned int cameraMode = 0);
   bool playmodeSupported(Playable::Playmode playmode) const { return this->supportedPlaymodes & playmode; };
-  bool setPlaymode(Playable::Playmode playmode);
+  virtual bool setPlaymode(Playable::Playmode playmode);
   Playable::Playmode getPlaymode() const { return this->playmode; };
   virtual void setPlayDirection(const Quaternion& rot, float speed = 0.0f) = 0;
Index: branches/playability/src/world_entities/space_ships/space_ship.cc
===================================================================
--- branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10031)
+++ branches/playability/src/world_entities/space_ships/space_ship.cc	(revision 10032)
@@ -133,6 +133,4 @@
   srand(time(0));   //initialize Random Nomber Generator
 
-  this->setSupportedPlaymodes(Playable::Vertical);
-
   //  this->setRelDir(Quaternion(M_PI, Vector(1,0,0)));
   this->registerObject(this, SpaceShip::_objectList);
@@ -386,4 +384,6 @@
 
   this->travelNode->debugDraw();
+
+  this->setSupportedPlaymodes(Playable::Horizontal | Playable::Vertical);
 }
 
@@ -396,9 +396,12 @@
 {
   Playable::loadParams(root);
-}
+
+  LoadParam(root, "playmode", this, SpaceShip, setPlaymodeXML);
+}
+
 
 void SpaceShip::setPlayDirection(const Quaternion& rot, float speed)
 {
-  this->direction = Quaternion (rot.getHeading(), Vector(0,1,0));
+  //this->direction = Quaternion (rot.getHeading(), Vector(0,1,0));
 }
 
@@ -446,7 +449,6 @@
   this->secWeaponMan.showCrosshair();
   //dynamic_cast<Element2D*>(this->secWeaponMan.getFixedTarget())->setVisibility( true);
-  if (!this->setPlaymode(Playable::Vertical))
-    std::cout << "playmode not supported";
   //this->attachCamera();
+ // this->setPlaymode(Playable::Horizontal);
 }
 
@@ -791,6 +793,6 @@
       //break;
 
-
-    case Playable::Vertical:
+      break;
+    case Playable::Horizontal:
       if (State::getCameraNode != NULL)
       {
@@ -805,5 +807,5 @@
 
         State::getCameraNode()->setParentSoft(this->travelNode);
-        State::getCameraNode()->setRelCoorSoft(-0.01, 40,0);
+        State::getCameraNode()->setRelCoorSoft(-0.01, 40, 0);
         State::getCameraTargetNode()->setParentSoft(this->travelNode);
         State::getCameraTargetNode()->setRelCoorSoft(0,0,0);
@@ -817,5 +819,4 @@
       PRINTF(2)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassCName());
   }
-  std::cout << Playable::playmodeToString(this->getPlaymode());
 }
 
@@ -833,140 +834,153 @@
   float pi = 3.14;
 
-  // these routines will change the travel movement into zero in a short amout of time, if the player
-  // doesn't press any buttons.
-  if (this->velocity.x >= 0)
-  {
-    if (this->velocity.x > airCoeff*this->acceleration * dt)
-      this->velocity.x -= airCoeff* this->acceleration * dt;
-    else
-      this->velocity.x = 0;
-  }
-  else
-  {
-    if (this->velocity.x < -airCoeff*this->acceleration * dt)
-      this->velocity.x += airCoeff* this->acceleration * dt;
-    else
-      this->velocity.x = 0;
-  }
-  if (this->velocity.z >= 0)
-  {
-    if (this->velocity.z > airCoeff*this->acceleration * dt)
-      this->velocity.z -= airCoeff* this->acceleration * dt;
-    else
-      this->velocity.z = 0;
-  }
-  else
-  {
-    if (this->velocity.z < -airCoeff*this->acceleration * dt)
-      this->velocity.z += airCoeff* this->acceleration * dt;
-    else
-      this->velocity.z = 0;
-  }
-
-  // this will evite, that the ship moves outside the travelDistance- borders,when the player releases all buttons
-  // and its continuing to slide a bit.
-  Vector oldCoor = this->getRelCoor();
-  if (this->getRelCoor().x > this->travelDistancePlus.x) this->setRelCoor(this->travelDistancePlus.x, oldCoor.y, oldCoor.z);
-  if (this->getRelCoor().x < this->travelDistanceMinus.x) this->setRelCoor(this->travelDistanceMinus.x, oldCoor.y, oldCoor.z);
-  if (this->getRelCoor().z > this->travelDistancePlus.y) this->setRelCoor(oldCoor.x, oldCoor.y, this->travelDistancePlus.y);
-  if (this->getRelCoor().z < this->travelDistanceMinus.y) this->setRelCoor(oldCoor.x, oldCoor.y, this->travelDistanceMinus.y);
-
-  if( this->systemFailure() )
-    bForward = bBackward = bLeft = bRight = false;
-
-
-  if( this->bForward )
-  {
-    if(this->getRelCoor().x < this->travelDistancePlus.x)
+  
+
+  switch(this->getPlaymode())
+  {
+    case Playable::Horizontal:
     {
-      if (this->velocity.x < this->travelSpeed)
-      {
-        this->velocity.x += (airCoeff + 1.0)*this->acceleration*dt;
+      // these routines will change the travel movement into zero in a short amout of time, if the player
+      // doesn't press any buttons.
+      if (this->velocity.x >= 0)
+      {
+        if (this->velocity.x > airCoeff*this->acceleration * dt)
+          this->velocity.x -= airCoeff* this->acceleration * dt;
+        else
+          this->velocity.x = 0;
       }
       else
       {
-        this->velocity.x = this->travelSpeed;
-      }
+        if (this->velocity.x < -airCoeff*this->acceleration * dt)
+          this->velocity.x += airCoeff* this->acceleration * dt;
+        else
+          this->velocity.x = 0;
+      }
+      if (this->velocity.z >= 0)
+      {
+        if (this->velocity.z > airCoeff*this->acceleration * dt)
+          this->velocity.z -= airCoeff* this->acceleration * dt;
+        else
+          this->velocity.z = 0;
+      }
+      else
+      {
+        if (this->velocity.z < -airCoeff*this->acceleration * dt)
+          this->velocity.z += airCoeff* this->acceleration * dt;
+        else
+          this->velocity.z = 0;
+      }
+    
+      // this will evite, that the ship moves outside the travelDistance- borders,when the player releases all buttons
+      // and its continuing to slide a bit.
+      Vector oldCoor = this->getRelCoor();
+      if (this->getRelCoor().x > this->travelDistancePlus.x) this->setRelCoor(this->travelDistancePlus.x, oldCoor.y, oldCoor.z);
+      if (this->getRelCoor().x < this->travelDistanceMinus.x) this->setRelCoor(this->travelDistanceMinus.x, oldCoor.y, oldCoor.z);
+      if (this->getRelCoor().z > this->travelDistancePlus.y) this->setRelCoor(oldCoor.x, oldCoor.y, this->travelDistancePlus.y);
+      if (this->getRelCoor().z < this->travelDistanceMinus.y) this->setRelCoor(oldCoor.x, oldCoor.y, this->travelDistanceMinus.y);
+    
+      if( this->systemFailure() )
+        bForward = bBackward = bLeft = bRight = false;
+    
+    
+      if( this->bForward )
+      {
+        if(this->getRelCoor().x < this->travelDistancePlus.x)
+        {
+          if (this->velocity.x < this->travelSpeed)
+          {
+            this->velocity.x += (airCoeff + 1.0)*this->acceleration*dt;
+          }
+          else
+          {
+            this->velocity.x = this->travelSpeed;
+          }
+        }
+        else
+        {
+          this->velocity.x = 0.0f;
+        }
+      }
+    
+      if( this->bBackward )
+      {
+        if(this->getRelCoor().x > this->travelDistanceMinus.x)
+        {
+          if (this->velocity.x > -this->travelSpeed)
+          {
+            this->velocity.x -= (airCoeff + 1.0)*this->acceleration*dt;
+          }
+          else
+          {
+            this->velocity.x = -this->travelSpeed;
+          }
+        }
+        else
+        {
+          this->velocity.x = 0.0f;
+        }
+      }
+    
+      if( this->bLeft)
+      {
+        if(this->getRelCoor().z > this->travelDistanceMinus.y)
+        {
+          if (this->velocity.z > -this->travelSpeed)
+          {
+            this->velocity.z -= (airCoeff + 1.0)*this->acceleration*dt;
+          }
+          else
+          {
+            this->velocity.z = -this->travelSpeed;
+          }
+        }
+        else
+        {
+          this->velocity.z = 0.0f;
+        }
+        this->setRelDirSoft(Quaternion(-pi/6, Vector(1,0,0)), 3);
+      }
+    
+      if( this->bRight)
+      {
+        if(this->getRelCoor().z < this->travelDistancePlus.y)
+        {
+          if (this->velocity.z < this->travelSpeed)
+          {
+            this->velocity.z += (airCoeff + 1.0)*this->acceleration*dt;
+          }
+          else
+          {
+            this->velocity.z = this->travelSpeed;
+          }
+        }
+        else
+        {
+          this->velocity.z = 0.0f;
+        }
+        this->setRelDirSoft(Quaternion(pi/6, Vector(1,0,0)), 3);
+      }
+      if (!this->bRight && !this->bLeft)
+      {
+        this->setRelDirSoft(Quaternion(0, Vector(1,0,0)), 3);
+      }
+
+      this->travelNode->shiftCoor(Vector(this->cameraSpeed * dt, 0, 0));
+      this->shiftCoor (this->velocity * dt);
+
+
+      break;
     }
-    else
+    case Playable::Vertical:
     {
-      this->velocity.x = 0.0f;
+      break;
     }
-  }
-
-  if( this->bBackward )
-  {
-    if(this->getRelCoor().x > this->travelDistanceMinus.x)
-    {
-      if (this->velocity.x > -this->travelSpeed)
-      {
-        this->velocity.x -= (airCoeff + 1.0)*this->acceleration*dt;
-      }
-      else
-      {
-        this->velocity.x = -this->travelSpeed;
-      }
-    }
-    else
-    {
-      this->velocity.x = 0.0f;
-    }
-  }
-
-  if( this->bLeft)
-  {
-    if(this->getRelCoor().z > this->travelDistanceMinus.y)
-    {
-      if (this->velocity.z > -this->travelSpeed)
-      {
-        this->velocity.z -= (airCoeff + 1.0)*this->acceleration*dt;
-      }
-      else
-      {
-        this->velocity.z = -this->travelSpeed;
-      }
-    }
-    else
-    {
-      this->velocity.z = 0.0f;
-    }
-  }
-
-  if( this->bRight)
-  {
-    if(this->getRelCoor().z < this->travelDistancePlus.y)
-    {
-      if (this->velocity.z < this->travelSpeed)
-      {
-        this->velocity.z += (airCoeff + 1.0)*this->acceleration*dt;
-      }
-      else
-      {
-        this->velocity.z = this->travelSpeed;
-      }
-    }
-    else
-    {
-      this->velocity.z = 0.0f;
-    }
-  }
-  
-  this->travelNode->shiftCoor(Vector(this->cameraSpeed * dt, 0, 0));
-  this->shiftCoor (this->velocity * dt);
-  
-  float angle = this->velocity.z / travelSpeed * pi / 3;
-  if (angle > pi/3) angle = pi/3;
-  if (angle < -pi/3) angle = -pi/3;
-  this->setRelDirSoft(Quaternion(angle, Vector(1,0,0)), 5.0f);
-
-  /*
-  switch(this->getPlaymode())
-  {
-    case Playable::Vertical:
-      break;
     default:
-      PRINTF(2)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassCName());
-  }
-  */
-}
-
+      PRINTF(4)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassCName());
+  }
+}
+
+void SpaceShip::setPlaymodeXML(const std::string& playmode)
+{
+  this->setPlaymode(Playable::stringToPlaymode(playmode));
+}
+
Index: branches/playability/src/world_entities/space_ships/space_ship.h
===================================================================
--- branches/playability/src/world_entities/space_ships/space_ship.h	(revision 10031)
+++ branches/playability/src/world_entities/space_ships/space_ship.h	(revision 10032)
@@ -72,4 +72,5 @@
 
     virtual void enterPlaymode(Playable::Playmode playmode);
+    void setPlaymodeXML(const std::string& playmode);
     virtual void movement (float dt);
 
@@ -77,5 +78,5 @@
     void init();
 
-    void calculateVelocity(float time);
+    //void calculateVelocity(float time);
 
     void regen(float time);  //!< handler for shield and electronic regeneration
@@ -131,5 +132,4 @@
     bool                  bAscend;            //!< ascend button pressed.
     bool                  bDescend;           //!< descend button presses.
-//    bool                  bFire;              //!< fire button pressed.(moved to playable)
     bool                  bRollL;             //!< rolling button pressed (left)
     bool                  bRollR;             //!< rolling button pressed (right)
@@ -144,11 +144,6 @@
     int                   controlVelocityY;
     */
-//   float                 cycle;              //!< hovercycle
 
-
-    Vector                velocity;           //!< the velocity of the player.
-    //Vector                oldVelocity;        //!< the velocity the player had last synced
-
-
+Vector                velocity;           //!< the velocity of the player.
 
 // 2D-traveling
@@ -173,5 +168,5 @@
     */
 
-    Quaternion            direction;          //!< the direction of the ship.
+    //Quaternion            direction;          //!< the direction of the ship.
     float                 acceleration;       //!< the acceleration of the ship.
     //float                 airFriction;        //!< AirFriction.
