Index: trunk/src/world_entities/creatures/fps_player.cc
===================================================================
--- trunk/src/world_entities/creatures/fps_player.cc	(revision 9062)
+++ trunk/src/world_entities/creatures/fps_player.cc	(revision 9110)
@@ -21,4 +21,6 @@
 
 #include "src/lib/util/loading/factory.h"
+
+#include "md2/md2Model.h"
 
 #include "weapons/weapon_manager.h"
@@ -28,8 +30,11 @@
 #include "weapons/fps_sniper_rifle.h"
 
+#include "aabb.h"
+
 #include "key_mapper.h"
 
 #include "debug.h"
 
+#include "shared_network_data.h"
 
 
@@ -92,4 +97,5 @@
 
   this->fallVelocity = 0.0f;
+  this->jumpForce = 0.0f;
 
   this->cameraNode.setParent(this);
@@ -123,9 +129,10 @@
 
   this->getWeaponManager().setSlotCount(2);
-  this->getWeaponManager().setSlotPosition(0, Vector(1.5, -0.7, 1.1));
 //   this->getWeaponManager().setSlotDirection(0, Quaternion(M_PI_2, Vector(0,1,0)));
   this->getWeaponManager().setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+  this->getWeaponManager().setSlotDirection(1, Quaternion(M_PI_4*.5, Vector(1,0,0)));
+  this->getWeaponManager().setSlotPosition(0, Vector(1.5, -0.7, 1.1));
   this->getWeaponManager().setSlotPosition(1, Vector(5.0, 0.0, 0.0));
-  this->getWeaponManager().setSlotDirection(1, Quaternion(M_PI_4*.5, Vector(1,0,0)));
+
 
   this->getWeaponManager().setParentNode(&this->cameraNode);
@@ -141,9 +148,6 @@
   registerVar( new SynchronizeableBool( &bForward, &bForward, "bForward", PERMISSION_OWNER ) );
   registerVar( new SynchronizeableBool( &bBackward, &bBackward, "bBackward", PERMISSION_OWNER ) );
-//  registerVar( new SynchronizeableQuaternion( &mouseDir, &mouseDir, "mouseDir", PERMISSION_OWNER ) );
-
-
-  // collision reaction registration
-  this->subscribeReaction(CREngine::CR_PHYSICS_GROUND_WALK, CL_BSP_ENTITY);
+  registerVar( new SynchronizeableFloat( &heading, &heading, "heading", PERMISSION_OWNER ) );
+  registerVar( new SynchronizeableFloat( &attitude, &attitude, "attitude", PERMISSION_OWNER ) );
 }
 
@@ -189,6 +193,13 @@
 
 
-  State::getCameraNode()->setRelCoor(0,0,0);
-  State::getCameraTargetNode()->setRelCoor(10,0,0);
+  AABB* box = this->getModelAABB();
+  if( box != NULL)
+  {
+    State::getCameraNode()->setRelCoor(0, box->halfLength[1] * 2.0f, 0);
+    State::getCameraTargetNode()->setRelCoor(10, box->halfLength[1] * 2.0f, 0);
+
+    this->getWeaponManager().setSlotPosition(0, Vector(1.5, box->halfLength[1] * 2.0f - 0.7, 1.1));
+    this->getWeaponManager().setSlotPosition(1, Vector(5.0, box->halfLength[1] * 2.0f, 0.0));
+  }
 }
 
@@ -207,14 +218,14 @@
 void FPSPlayer::tick (float time)
 {
-  
+
   if( this->bPosBut)
   {
     this->bPosBut = false;
-    printf("prisoner:walkTo( %f, height, %f)\n",this->getAbsCoorX(),this->getAbsCoorZ());
-  }
-  
+    printf("mechanic2:walkTo( %f, mtheight, %f)\n",this->getAbsCoorX(),this->getAbsCoorZ());
+  }
+
   Playable::tick( time );
 
-  if( ( xMouse != 0 || yMouse != 0 ) /*&& this->getOwner() == this->getHostID() */)
+  if( ( xMouse != 0 || yMouse != 0 ) && (this->getOwner() == SharedNetworkData::getInstance()->getHostID() || !State::isOnline() ) )
   {
     xMouse *= time ;
@@ -230,11 +241,9 @@
       attitude = -1.15;
 
-    this->setAbsDir(Quaternion(heading, Vector(0,1,0)));
-    this->cameraNode.setRelDir(Quaternion( attitude, Vector( 0, 0, 1 ) ));
-
     xMouse = yMouse = 0;
   }
 
- // this->setAbsDir( this->mouseDir );
+  this->setAbsDir(Quaternion(heading, Vector(0,1,0)));
+  this->cameraNode.setRelDir(Quaternion( attitude, Vector( 0, 0, 1 ) ));
 
   Vector velocity;
@@ -262,4 +271,30 @@
 
   velocity *= 100;
+
+  if( this->bJump && likely(this->getModel(0) != NULL))
+  {
+    if( this->jumpForce < 1.0f)
+    {
+      this->jumpForce = 300.0f;
+
+      if( ((InteractiveModel*)this->getModel(0))->getAnimation() != JUMP)
+        ((InteractiveModel*)this->getModel(0))->setAnimation(JUMP);
+    }
+  }
+  else if(velocity.len() != 0.0f)
+  {
+    if( ((InteractiveModel*)this->getModel(0))->getAnimation() != RUN)
+      ((InteractiveModel*)this->getModel(0))->setAnimation(RUN);
+  }
+  else
+  {
+    if( ((InteractiveModel*)this->getModel(0))->getAnimation() != STAND)
+      ((InteractiveModel*)this->getModel(0))->setAnimation(STAND);
+  }
+
+
+  velocity.y += this->jumpForce;
+  if( this->jumpForce > 1.0f)
+    this->jumpForce *= 0.9f;
 
 
@@ -287,10 +322,11 @@
   {
     ((InteractiveModel*)this->getModel(0))->tick(time);
-//
-//     // handle animations differently
-//     if( this->bJump && likely(this->getModel(0) != NULL))
-//     {
-//       ((InteractiveModel*)this->getModel(0))->setAnimation(JUMP);
-//     }
+
+    // handle animations differently
+
+
+
+
+
 //     else if( this->bFire && likely(this->getModel(0) != NULL))
 //     {
@@ -347,4 +383,5 @@
   }
   else if( event.type == KeyMapper::PEV_JUMP)
+    this->bJump = event.bPressed;
     this->bPosBut = event.bPressed;
 }
Index: trunk/src/world_entities/creatures/fps_player.h
===================================================================
--- trunk/src/world_entities/creatures/fps_player.h	(revision 9062)
+++ trunk/src/world_entities/creatures/fps_player.h	(revision 9110)
@@ -54,4 +54,5 @@
 
     float                 fallVelocity;        //!< velocity for falling down
+    float                 jumpForce;           //!< the jump force
 };
 
Index: trunk/src/world_entities/environments/mapped_water.cc
===================================================================
--- trunk/src/world_entities/environments/mapped_water.cc	(revision 9062)
+++ trunk/src/world_entities/environments/mapped_water.cc	(revision 9110)
@@ -20,5 +20,5 @@
 #include "state.h"
 #include "t_animation.h"
-#include "math.h"
+#include <cmath>
 #include "glgui.h"
 #include "shell_command.h"
Index: trunk/src/world_entities/npcs/door.cc
===================================================================
--- trunk/src/world_entities/npcs/door.cc	(revision 9062)
+++ trunk/src/world_entities/npcs/door.cc	(revision 9110)
@@ -45,10 +45,4 @@
 
 
-Door::Door ()
-{
-  this->init();
-}
-
-
 Door::Door(const TiXmlElement* root)
 {
@@ -56,4 +50,5 @@
   this->setClassID(CL_DOOR, "Door");
   this->scale = 1.0f;
+  this->actionRadius = 1.0;
 
   if( root != NULL)
@@ -62,4 +57,5 @@
   this->toList(OM_COMMON);
   this->bLocked = false;
+  this->bOpen = false;
 
   this->loadMD2Texture("maps/doors.jpg");
Index: trunk/src/world_entities/npcs/door.h
===================================================================
--- trunk/src/world_entities/npcs/door.h	(revision 9062)
+++ trunk/src/world_entities/npcs/door.h	(revision 9110)
@@ -22,6 +22,5 @@
 {
   public:
-    Door ();
-    Door(const TiXmlElement* root);
+    Door(const TiXmlElement* root = NULL);
     virtual ~Door ();
 
@@ -43,4 +42,5 @@
 
   private:
+    void init();
     bool checkOpen();
     void setAnimation(int animNum, int playbackMode = 0);
Index: trunk/src/world_entities/npcs/generic_npc.cc
===================================================================
--- trunk/src/world_entities/npcs/generic_npc.cc	(revision 9062)
+++ trunk/src/world_entities/npcs/generic_npc.cc	(revision 9110)
@@ -84,6 +84,4 @@
   this->toList(OM_GROUP_00);
 
-  if (this->soundBuffer != NULL)
-    ResourceManager::getInstance()->unload(this->soundBuffer);
   this->soundBuffer = (OrxSound::SoundBuffer*)ResourceManager::getInstance()->load("sound/rain.wav", WAV);
 
@@ -93,5 +91,5 @@
 
   // collision reaction registration
-//   this->subscribeReaction(CREngine::CR_PHYSICS_GROUND_WALK, CL_BSP_ENTITY);
+   this->subscribeReaction(CREngine::CR_PHYSICS_GROUND_WALK, CL_BSP_ENTITY);
 }
 
@@ -186,4 +184,7 @@
   this->animationStack.push(this->behaviourList);
   this->behaviourList = new std::list<GenericNPC::Anim>;
+
+  if( this->getAnimation() != STAND)
+    this->setAnimation(STAND, MD2_ANIM_LOOP);
 }
 
@@ -194,5 +195,7 @@
 void GenericNPC::resume()
 {
-  //if()
+  if( this->animationStack.size() == 0)
+    return;
+
   delete this->behaviourList;
   this->behaviourList = this->animationStack.top();
@@ -219,5 +222,5 @@
         Vector dir = (currentAnimation.v - this->getAbsCoor());
         dir.y = 0.0f;
-        dir.getNormalized();
+        dir.normalize();
         this->setAbsDir(Quaternion(dir, Vector(0.0, 1.0, 0.0)) * Quaternion(-M_PI_2, Vector(0.0, 1.0, 0.0)));
 
@@ -518,4 +521,5 @@
       {
         Vector dest = currentAnimation.v - this->getAbsCoor();
+        dest.y = 0.0f;
         if (dest.len() < .5)
           this->nextStep();
@@ -530,4 +534,5 @@
       {
         Vector dest = currentAnimation.v - this->getAbsCoor();
+        dest.y = 0.0f;
         if (dest.len() < .5)
           this->nextStep();
Index: trunk/src/world_entities/playable.cc
===================================================================
--- trunk/src/world_entities/playable.cc	(revision 9062)
+++ trunk/src/world_entities/playable.cc	(revision 9110)
@@ -67,4 +67,5 @@
   this->bDead = false;
 
+  //subscribe to collision reaction
   this->subscribeReaction(CREngine::CR_PHYSICS_GROUND_WALK, CL_BSP_ENTITY);
 
Index: trunk/src/world_entities/script_trigger.cc
===================================================================
--- trunk/src/world_entities/script_trigger.cc	(revision 9062)
+++ trunk/src/world_entities/script_trigger.cc	(revision 9110)
@@ -115,14 +115,14 @@
   LoadParam(root, "invert", this, ScriptTrigger, setInvert)
       .describe("")
-      .defaultValues("false");
+      .defaultValues(false);
   LoadParam(root, "triggerlasts", this, ScriptTrigger, setTriggerLasts)
       .describe("")
-      .defaultValues("true");
+      .defaultValues(true);
   LoadParam(root, "debugdraw", this, ScriptTrigger, setDebugDraw)
       .describe("")
-      .defaultValues("false");
+      .defaultValues(false);
   LoadParam(root, "addtoscript", this, ScriptTrigger, setAddToScript)
       .describe("True if this scripttrigger should be aviable in the script")
-      .defaultValues("false");
+      .defaultValues(false);
 }
 
Index: trunk/src/world_entities/space_ships/space_ship.cc
===================================================================
--- trunk/src/world_entities/space_ships/space_ship.cc	(revision 9062)
+++ trunk/src/world_entities/space_ships/space_ship.cc	(revision 9110)
@@ -58,4 +58,9 @@
 CREATE_SCRIPTABLE_CLASS(SpaceShip, CL_SPACE_SHIP,
                         addMethod("hasPlayer", ExecutorLua0ret<Playable,bool>(&Playable::hasPlayer))
+                       //Coordinates
+                        ->addMethod("setAbsCoor", ExecutorLua3<PNode,float,float,float>(&PNode::setAbsCoor))
+                        ->addMethod("getAbsCoorX", ExecutorLua0ret<PNode, float>(&PNode::getAbsCoorX))
+                        ->addMethod("getAbsCoorY", ExecutorLua0ret<PNode, float>(&PNode::getAbsCoorY))
+                        ->addMethod("getAbsCoorZ", ExecutorLua0ret<PNode, float>(&PNode::getAbsCoorZ))
                        );
 
Index: trunk/src/world_entities/space_ships/spacecraft_2d.cc
===================================================================
--- trunk/src/world_entities/space_ships/spacecraft_2d.cc	(revision 9062)
+++ trunk/src/world_entities/space_ships/spacecraft_2d.cc	(revision 9110)
@@ -25,4 +25,5 @@
 
 #include "util/loading/factory.h"
+#include "util/loading/load_param.h"
 #include "key_mapper.h"
 #include "state.h"
@@ -36,4 +37,12 @@
 CREATE_FACTORY(Spacecraft2D, CL_SPACECRAFT_2D);
 
+/**
+ *  destructs the spacecraft_2d, deletes alocated memory
+ */
+Spacecraft2D::~Spacecraft2D ()
+{
+  this->setPlayer(NULL);
+  delete this->toTravelHeight;
+}
 
 /**
@@ -86,12 +95,4 @@
 
 /**
- *  destructs the spacecraft_2d, deletes alocated memory
- */
-Spacecraft2D::~Spacecraft2D ()
-{
-  this->setPlayer(NULL);
-}
-
-/**
  * @brief initializes a Spacecraft2D
  */
@@ -101,6 +102,5 @@
   this->setClassID(CL_SPACECRAFT_2D, "Spacecraft2D");
 
-  this->setSupportedPlaymodes(Playable::Full3D | Playable::Horizontal);
-
+  this->setSupportedPlaymodes(Playable::Full3D | Playable::Horizontal );
 
   bForward = bBackward = bLeft = bRight = false;
@@ -110,5 +110,6 @@
   this->rotation = 0.0f;
   this->acceleration = 10.0f;
-  this->altitude = 0.0f;
+  this->airFriction = 2.0f;
+
 
   this->setHealthMax(100);
@@ -116,17 +117,22 @@
 
 
+  /// 2D-MODE
+  this->toTravelHeight = NULL;
+  this->travelSpeed = 0.0f;
+  this->travelNode = new PNode();
+
+
   // camera - issue
-  this->travelNode.addNodeFlags(PNODE_PROHIBIT_CHILD_DELETE);
+  this->cameraNode.addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
+  this->cameraNode.addNodeFlags(PNODE_PROHIBIT_CHILD_DELETE);
   //this->cameraNode.setParentMode(PNODE_ROTATE_MOVEMENT);
   //this->cameraNode.setParent(this);
 
-  // rotors
   // PARTICLES
   this->burstEmitter = new DotEmitter(200, 5.0, .01);
   this->burstEmitter->setParent(this);
   this->burstEmitter->setRelCoor(0, -0.7, 0);
-  this->burstEmitter->setRelDir(Quaternion(-M_PI_2, Vector(0,0,1)));
+  this->burstEmitter->setRelDir(Quaternion(-M_PI, Vector(0,0,1)));
   this->burstEmitter->setName("Spacecraft2D_Burst_emitter_Left");
-
 
   this->burstSystem = new SpriteParticles(1000);
@@ -150,6 +156,4 @@
   this->registerEvent(KeyMapper::PEV_LEFT);
   this->registerEvent(KeyMapper::PEV_RIGHT);
-  this->registerEvent(KeyMapper::PEV_UP);
-  this->registerEvent(KeyMapper::PEV_DOWN);
   this->registerEvent(KeyMapper::PEV_FIRE1);
   this->registerEvent(KeyMapper::PEV_NEXT_WEAPON);
@@ -178,7 +182,7 @@
   this->getWeaponManager().setSlotDirection(4, Quaternion(24/180 * M_PI, Vector(1,0,0)));
 
-  this->travelNode.setRelCoor(0,0,0);
-  //this->getWeaponManager().getFixedTarget()->setParent(&this->cameraNode);
-  //this->getWeaponManager().getFixedTarget()->setRelCoor(1000,0,0);
+  this->cameraNode.setRelCoor(1,5,0);
+  this->getWeaponManager().getFixedTarget()->setParent(&this->cameraNode);
+  this->getWeaponManager().getFixedTarget()->setRelCoor(1000,0,0);
 
   registerVar( new SynchronizeableBool( &bForward, &bForward, "bForward", PERMISSION_OWNER ) );
@@ -198,4 +202,8 @@
 {
   Playable::loadParams(root);
+
+  LoadParam(root, "travel-speed", this, Spacecraft2D, setTravelSpeed);
+  LoadParam(root, "travel-height", this, Spacecraft2D, setTravelHeight);
+  LoadParam(root, "travel-distance", this, Spacecraft2D, setTravelDistance);
 }
 
@@ -205,9 +213,4 @@
 }
 
-void Spacecraft2D::setTravelDirecton(const Quaternion& rot, float speed)
-{
-  this->setPlayDirection(rot, speed);
-}
-
 void Spacecraft2D::setTravelSpeed(float travelSpeed)
 {
@@ -216,15 +219,28 @@
 
 
+void Spacecraft2D::setTravelHeight(float travelHeight)
+{
+  if (this->toTravelHeight == NULL)
+    this->toTravelHeight = new float;
+  *this->toTravelHeight = travelHeight;
+}
+
+
+void Spacecraft2D::setTravelDistance(const Vector2D& distance)
+{
+  this->travelDistance = distance;
+}
+
+void Spacecraft2D::setTravelDistance(float x, float y)
+{
+  this->setTravelDistance(Vector2D(x, y));
+}
+
+
 
 void Spacecraft2D::enter()
 {
   dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( true);
-
-  if (State::getCameraNode != NULL)
-  {
-    State::getCameraNode()->setParentSoft(&this->travelNode);
-    State::getCameraNode()->setRelCoorSoft(-10, 50,0);
-    State::getCameraTargetNode()->setParentSoft(&this->travelNode);
-  }
+  this->setPlaymode(this->getPlaymode());
 }
 
@@ -235,4 +251,53 @@
 
 }
+
+
+void Spacecraft2D::enterPlaymode(Playable::Playmode playmode)
+{
+  switch(playmode)
+  {
+    case Playable::Full3D:
+      if (State::getCameraNode != NULL)
+      {
+        Vector absCoor = this->getAbsCoor();
+        this->setParent(PNode::getNullParent());
+        this->setAbsCoor(absCoor);
+        State::getCameraNode()->setParentSoft(&this->cameraNode);
+        State::getCameraNode()->setRelCoorSoft(-10, 0,0);
+        State::getCameraTargetNode()->setParentSoft(&this->cameraNode);
+        State::getCameraTargetNode()->setRelCoorSoft(100, 0,0);
+
+      }
+      break;
+
+
+    case Playable::Horizontal:
+      if (State::getCameraNode != NULL)
+      {
+        this->debugNode(1);
+        this->travelNode->debugNode(1);
+
+        this->travelNode->setAbsCoor(this->getAbsCoor());
+        this->travelNode->updateNode(0.01f);
+
+        this->setParent(this->travelNode);
+        this->setRelCoor(0,0,0);
+
+        State::getCameraNode()->setParentSoft(this->travelNode);
+        State::getCameraNode()->setRelCoorSoft(-3, 50,0);
+        State::getCameraTargetNode()->setParentSoft(this->travelNode);
+        State::getCameraTargetNode()->setRelCoorSoft(0,0,0);
+
+
+        this->debugNode(1);
+        this->travelNode->debugNode(1);
+      }
+      break;
+
+    default:
+      PRINTF(2)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassName());
+  }
+}
+
 
 
@@ -277,6 +342,6 @@
 
   // TRYING TO FIX PNode.
-  //this->travelNode.setAbsCoorSoft(this->getAbsCoor() + Vector(0.0f, 5.0f, 0.0f), 30.0f);
-  //this->travelNode.setRelDirSoft(this->getAbsDir(), 30.0f);
+  this->cameraNode.setAbsCoorSoft(this->getAbsCoor() + Vector(0.0f, 5.0f, 0.0f), 30.0f);
+  this->cameraNode.setRelDirSoft(this->getAbsDir(), 30.0f);
 }
 
@@ -307,5 +372,4 @@
     accel += Vector(0, 0, this->acceleration);
   }
-
 
   switch(this->getPlaymode())
@@ -316,6 +380,8 @@
 
         // this is the air friction (necessary for a smooth control)
-
-        this->velocity += (accelerationDir)* dt;
+        Vector damping = (this->velocity * this->airFriction);
+
+
+        this->velocity += (accelerationDir - damping)* dt;
         this->shiftCoor (this->velocity * dt);
 
@@ -332,5 +398,4 @@
 
         this->setRelDirSoft(this->direction * Quaternion(-cameraLook, Vector(0,0,1)), 5);
-
       }
       break;
@@ -338,4 +403,16 @@
     case Playable::Horizontal:
       {
+
+        if (this->toTravelHeight != NULL)
+        {
+          this->travelNode->shiftCoor(Vector(0, (*toTravelHeight - this->travelNode->getAbsCoor().y) * dt, 0));
+          if (fabsf(this->travelNode->getAbsCoor().y - *this->toTravelHeight) < .1)
+          {
+            delete this->toTravelHeight;
+            this->toTravelHeight = NULL;
+          }
+        }
+        this->travelNode->shiftCoor(Vector(this->travelSpeed * dt, 0, 0));
+
         accel.y = 0.0;
         Vector accelerationDir = this->getAbsDir().apply(accel * this->acceleration);
@@ -343,25 +420,15 @@
 
         // this is the air friction (necessary for a smooth control)
-
-
-        this->velocity += (accelerationDir )* dt;
+        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 > 0.01 || this->rotation < 0.01)) this->rotation /=1.5;
-          this->direction *= Quaternion(-M_PI/4.0*this->rotation, Vector(0,1,0));
-
-          this->rotation = 0.0f;
-        }
-
-        this->setRelDirSoft(this->direction, 5);
+        this->setRelDirSoft(Quaternion(0, Vector(0,0,0)), 1.0f);
       }
       break;
 
     default:
-      PRINTF(2)("Playmode %s Not Implemented\n", Playable::playmodeToString(this->getPlaymode()).c_str());
+      PRINTF(2)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassName());
   }
 }
@@ -390,19 +457,24 @@
   else if( event.type == EV_MOUSE_MOTION)
   {
-    float xMouse, yMouse;
-    xMouse = event.xRel*mouseSensitivity;
-    yMouse = event.yRel*mouseSensitivity;
-
-    // rotate the Player around the y-axis
+
+
+
     if (this->getPlaymode() == Playable::Full3D)
+    {
+      float xMouse, yMouse;
+      xMouse = event.xRel*mouseSensitivity;
+      yMouse = event.yRel*mouseSensitivity;
+
+      // rotate the Player around the y-axis
       this->rotation += xMouse;
 
-    this->cameraLook += yMouse;
-    // rotate the Camera around the z-axis
-    if (cameraLook > M_PI_4)
-      cameraLook = M_PI_4;
-    else if (cameraLook < -M_PI_4)
-      cameraLook = -M_PI_4;
-    //this->cameraNode.setRelDirSoft(this->direction,10);
-  }
-}
+      this->cameraLook += yMouse;
+      // rotate the Camera around the z-axis
+      if (cameraLook > M_PI_4)
+        cameraLook = M_PI_4;
+      else if (cameraLook < -M_PI_4)
+        cameraLook = -M_PI_4;
+      //this->cameraNode.setRelDirSoft(this->direction,10);
+    }
+  }
+}
Index: trunk/src/world_entities/space_ships/spacecraft_2d.h
===================================================================
--- trunk/src/world_entities/space_ships/spacecraft_2d.h	(revision 9062)
+++ trunk/src/world_entities/space_ships/spacecraft_2d.h	(revision 9110)
@@ -22,11 +22,14 @@
 
     virtual void loadParams(const TiXmlElement* root);
+
+    void setTravelSpeed(float travelSpeed);
+    void setTravelHeight(float travelHeight);
+    void setTravelDistance(const Vector2D& distance);
+    void setTravelDistance(float x, float y);
+
+
     virtual void setPlayDirection(const Quaternion& rot, float speed = 0.0f);
-    void setTravelDirecton(const Quaternion& rot, float speed = 0.0);
-    void setTravelSpeed(float travelSpeed);
-
     virtual void enter();
     virtual void leave();
-
 
 
@@ -39,4 +42,7 @@
 
     virtual void process(const Event &event);
+
+  protected:
+    virtual void enterPlaymode(Playable::Playmode playmode);
 
   private:
@@ -53,18 +59,24 @@
     float                 mouseSensitivity;   //!< the mouse sensitivity
 
+    /// Normal Movement.
+    Quaternion            direction;          //!< the direction of the Spacecraft2D.
+    float                 acceleration;       //!< the acceleration of the Spacecraft2D.
+    float                 airFriction;        //!< AirFriction.
+
+    float                 airViscosity;
 
 
-    PNode                 travelNode;
-    float                 travelSpeed;
+    /// 2D-traveling
+    PNode*                travelNode;
+    float*                toTravelHeight;
+    float                 travelSpeed;        //!< the current speed of the Hove (to make soft movement)
 
+    Vector2D              travelDistance;     //!< Travel-Distance away from the TravelNode.
+
+    /// Camera
+    PNode                 cameraNode;
     float                 cameraLook;
     float                 rotation;
 
-   // Vector                velocity;           //!< the velocity of the Spacecraft2D.
-    Quaternion            direction;          //!< the direction of the Spacecraft2D.
-    float                 acceleration;       //!< the acceleration of the Spacecraft2D.
-    float                 maxSpeed;           //!< The Maximal speed of the Spacecraft2D.
-
-    float                 altitude;           //!< The height in the Entity.
 
     ParticleEmitter*      burstEmitter;
Index: trunk/src/world_entities/world_entity.cc
===================================================================
--- trunk/src/world_entities/world_entity.cc	(revision 9062)
+++ trunk/src/world_entities/world_entity.cc	(revision 9110)
@@ -85,8 +85,12 @@
 
   this->toList(OM_NULL);
-
+  
+  registerVar( new SynchronizeableString( &this->md2TextureFileName, &this->md2TextureFileName, "md2TextureFileName" ) );
   modelFileName_handle = registerVarId( new SynchronizeableString( &modelFileName, &modelFileName, "modelFileName" ) );
   scaling_handle = registerVarId( new SynchronizeableFloat( &scaling, &scaling, "scaling" ) );
   list_handle = registerVarId( new SynchronizeableInt( (int*)&objectListNumber, &list_write, "list" ) );
+  
+  health_handle = registerVarId( new SynchronizeableFloat( &this->health, &this->health_write, "health" ) );
+  healthMax_handle = registerVarId( new SynchronizeableFloat( &this->healthMax, &this->healthMax_write, "maxHealth" ) );
 }
 
@@ -837,4 +841,14 @@
     this->toList( (OM_LIST)list_write );
   }
+  
+  if ( std::find( id.begin(), id.end(), health_handle ) != id.end() )
+  {
+    this->setHealth( health_write );
+  }
+  
+  if ( std::find( id.begin(), id.end(), healthMax_handle ) != id.end() )
+  {
+    this->setHealthMax( healthMax_write );
+  }
 
   PNode::varChangeHandler( id );
Index: trunk/src/world_entities/world_entity.h
===================================================================
--- trunk/src/world_entities/world_entity.h	(revision 9062)
+++ trunk/src/world_entities/world_entity.h	(revision 9110)
@@ -198,4 +198,10 @@
   int                     list_write;                      //!< entity's list
   int                     list_handle;                     //!< handle for list changes
+  
+  float                   health_write;
+  int                     health_handle;
+  
+  float                   healthMax_write;
+  int                     healthMax_handle;
 
   CollisionHandle*        collisionHandles[CREngine::CR_NUMBER];  //!< the list of the collision reactions
