Index: trunk/src/world_entities/playable.cc
===================================================================
--- trunk/src/world_entities/playable.cc	(revision 7338)
+++ trunk/src/world_entities/playable.cc	(revision 7339)
@@ -128,5 +128,5 @@
  * @returns true on success, false otherwise
  */
-bool Playable::setPlayMode(Playable::Playmode playmode)
+bool Playable::setPlaymode(Playable::Playmode playmode)
 {
   if (!this->playmodeSupported(playmode))
@@ -302,5 +302,5 @@
 
 /**
- * remove an event to the event list this Playable can capture.
+ * @brief remove an event to the event list this Playable can capture.
  * @param event the event to unregister.
  */
@@ -431,2 +431,36 @@
   return flags!=oldFlags;
 }
+
+
+Playable::Playmode Playable::stringToPlaymode(const std::string& playmode)
+{
+  if (playmode == "Vertical")
+    return Playable::Vertical;
+  if (playmode == "Horizontal")
+    return Playable::Horizontal;
+  if (playmode == "FromBehind")
+    return Playable::FromBehind;
+  if (playmode == "Full3D")
+    return Playable::Full3D;
+
+  return Playable::Full3D;
+}
+
+const char* Playable::playmodeToString(Playable::Playmode playmode)
+{
+  switch(playmode)
+  {
+    case Playable::Vertical:
+      return "Vertical";
+    case Playable::Horizontal:
+      return "Horizontal";
+    case Playable::FromBehind:
+      return "FromBehind";
+    case Playable::Full3D:
+      return "Full3D";
+
+    default:
+      return "Full3D";
+  }
+
+}
Index: trunk/src/world_entities/playable.h
===================================================================
--- trunk/src/world_entities/playable.h	(revision 7338)
+++ trunk/src/world_entities/playable.h	(revision 7339)
@@ -61,5 +61,6 @@
   virtual void setCameraMode(unsigned int cameraMode = 0);
   bool playmodeSupported(Playable::Playmode playmode) const { return this->supportedPlaymodes & playmode; };
-  bool setPlayMode(Playable::Playmode playmode);
+  bool setPlaymode(Playable::Playmode playmode);
+  Playable::Playmode getPlaymode() const { return this->playmode; };
 
   virtual void collidesWith(WorldEntity* entity, const Vector& location);
@@ -83,4 +84,8 @@
   inline int  getScore() { return this->score; }
 
+
+  // Transformations:
+  static Playable::Playmode stringToPlaymode(const std::string& playmode);
+  static const char* playmodeToString(Playable::Playmode playmode);
 protected:
   Playable();
Index: trunk/src/world_entities/player.h
===================================================================
--- trunk/src/world_entities/player.h	(revision 7338)
+++ trunk/src/world_entities/player.h	(revision 7339)
@@ -29,6 +29,6 @@
 
     bool              setPlayable(Playable* controllalble);
+    bool              eject();
     inline Playable*  getPlayable() const  { return this->playable; };
-    bool              eject();
 
     void              weaponConfigChanged();
@@ -39,5 +39,5 @@
   private:
     Playable*         playable;                  //!< The one we controll or NULL if none
-    Hud               hud;                           //!< The HUD to be displayed for this Player.
+    Hud               hud;                       //!< The HUD to be displayed for this Player.
 };
 
Index: trunk/src/world_entities/space_ships/turbine_hover.cc
===================================================================
--- trunk/src/world_entities/space_ships/turbine_hover.cc	(revision 7338)
+++ trunk/src/world_entities/space_ships/turbine_hover.cc	(revision 7339)
@@ -46,5 +46,5 @@
 
 /**
- * loads a TurbineHover information from a specified file.
+ * @brief loads a TurbineHover information from a specified file.
  * @param fileName the name of the File to load the turbine_hover from (absolute path)
  */
@@ -64,5 +64,5 @@
 
 /**
- *  creates a new Spaceship from Xml Data
+ * @brief creates a new Spaceship from Xml Data
  * @param root the xml element containing spaceship data
 
@@ -96,5 +96,5 @@
 
 /**
- * initializes a TurbineHover
+ * @brief initializes a TurbineHover
  */
 void TurbineHover::init()
@@ -102,4 +102,6 @@
   //  this->setRelDir(Quaternion(M_PI, Vector(1,0,0)));
   this->setClassID(CL_TURBINE_HOVER, "TurbineHover");
+
+  this->setSupportedPlaymodes(Playable::Full3D | Playable::Horizontal);
 
   this->loadModel("models/ships/hoverglider_wing.obj", 1.0f, 3);
@@ -275,5 +277,5 @@
 void TurbineHover::tick (float dt)
 {
-//  this->debugNode(1);
+  //  this->debugNode(1);
   Playable::tick(dt);
 
@@ -324,31 +326,72 @@
   }
 
-  Vector accelerationDir = this->getAbsDir().apply(accel * this->acceleration);
-
-  // this is the air friction (necessary for a smooth control)
-  Vector damping = (this->velocity * this->airFriction);
-
-
-  this->velocity += (accelerationDir - damping)* dt;
-  this->shiftCoor (this->velocity * dt);
-
-  // limit the maximum rotation speed.
-  if (this->rotation != 0.0f)
-  {
-    float maxRot = 10.0 * dt;
-    if (unlikely(this->rotation > maxRot)) this->rotation = maxRot;
-    if (unlikely(this->rotation < -maxRot)) this->rotation = -maxRot;
-    this->direction *= Quaternion(-M_PI/4.0*this->rotation, Vector(0,1,0));
-
-    this->rotation = 0.0f;
-  }
-
-  this->setRelDirSoft(this->direction * Quaternion(-cameraLook, Vector(0,0,1)), 5);
-
-  this->wingNodeLeft.setRelDirSoft(Quaternion(accel.z * .05 +this->rotation, Vector(1,0,0)), 5);
-  this->rotorNodeLeft.setRelDirSoft(Quaternion(-accel.x * .07+this->rotation + cameraLook, Vector(0,0,1)), 5);
-
-  this->wingNodeRight.setRelDirSoft(Quaternion(accel.z * .05 +this->rotation, Vector(1,0,0)), 5);
-  this->rotorNodeRight.setRelDirSoft(Quaternion(-accel.x*.07 -this->rotation + cameraLook, Vector(0,0,1)), 5);
+  switch(this->getPlaymode())
+  {
+    case Playable::Full3D:
+      {
+        Vector accelerationDir = this->getAbsDir().apply(accel * this->acceleration);
+
+        // this is the air friction (necessary for a smooth control)
+        Vector damping = (this->velocity * this->airFriction);
+
+
+        this->velocity += (accelerationDir - damping)* dt;
+        this->shiftCoor (this->velocity * dt);
+
+        // limit the maximum rotation speed.
+        if (this->rotation != 0.0f)
+        {
+          float maxRot = 10.0 * dt;
+          if (unlikely(this->rotation > maxRot)) this->rotation = maxRot;
+          if (unlikely(this->rotation < -maxRot)) this->rotation = -maxRot;
+          this->direction *= Quaternion(-M_PI/4.0*this->rotation, Vector(0,1,0));
+
+          this->rotation = 0.0f;
+        }
+
+        this->setRelDirSoft(this->direction * Quaternion(-cameraLook, Vector(0,0,1)), 5);
+
+        this->wingNodeLeft.setRelDirSoft(Quaternion(accel.z * .05 +this->rotation, Vector(1,0,0)), 5);
+        this->rotorNodeLeft.setRelDirSoft(Quaternion(-accel.x * .07+this->rotation + cameraLook, Vector(0,0,1)), 5);
+
+        this->wingNodeRight.setRelDirSoft(Quaternion(accel.z * .05 +this->rotation, Vector(1,0,0)), 5);
+        this->rotorNodeRight.setRelDirSoft(Quaternion(-accel.x*.07 -this->rotation + cameraLook, Vector(0,0,1)), 5);
+      }
+      break;
+
+    case Playable::Horizontal:
+      {
+        accel.z = 0.0;
+        Vector accelerationDir = this->getAbsDir().apply(accel * this->acceleration);
+        accelerationDir.z = 0.0;
+
+        // this is the air friction (necessary for a smooth control)
+        Vector damping = (this->velocity * this->airFriction);
+
+
+        this->velocity += (accelerationDir - damping)* dt;
+        this->shiftCoor (this->velocity * dt);
+
+        // limit the maximum rotation speed.
+        if (this->rotation != 0.0f)
+        {
+          float maxRot = 10.0 * dt;
+          if (unlikely(this->rotation > maxRot)) this->rotation = maxRot;
+          if (unlikely(this->rotation < -maxRot)) this->rotation = -maxRot;
+          this->direction *= Quaternion(-M_PI/4.0*this->rotation, Vector(0,1,0));
+
+          this->rotation = 0.0f;
+        }
+
+        this->setRelDirSoft(this->direction, 5);
+
+        this->wingNodeLeft.setRelDirSoft(Quaternion(accel.z * .05 +this->rotation, Vector(1,0,0)), 5);
+        this->rotorNodeLeft.setRelDirSoft(Quaternion(-accel.x * .07+this->rotation, Vector(0,0,1)), 5);
+
+        this->wingNodeRight.setRelDirSoft(Quaternion(accel.z * .05 +this->rotation, Vector(1,0,0)), 5);
+        this->rotorNodeRight.setRelDirSoft(Quaternion(-accel.x*.07 -this->rotation, Vector(0,0,1)), 5);
+      }
+      break;
+  }
 }
 
Index: trunk/src/world_entities/space_ships/turbine_hover.h
===================================================================
--- trunk/src/world_entities/space_ships/turbine_hover.h	(revision 7338)
+++ trunk/src/world_entities/space_ships/turbine_hover.h	(revision 7339)
@@ -17,5 +17,4 @@
 {
   public:
-
     TurbineHover(const std::string& fileName);
     TurbineHover(const TiXmlElement* root = NULL);
