Index: /branches/vs-enhencements/src/util/track/track.h
===================================================================
--- /branches/vs-enhencements/src/util/track/track.h	(revision 10661)
+++ /branches/vs-enhencements/src/util/track/track.h	(revision 10662)
@@ -50,4 +50,6 @@
    int                   nodeCount;            //!< The count of points this Track has.
    Curve*                curve;                //!< The Curve of this Track
+   
+   ActionBox*            getActionBox(){ return this->actionBox; }
 
  private:
Index: /branches/vs-enhencements/src/world_entities/npcs/actionbox_enemy.cc
===================================================================
--- /branches/vs-enhencements/src/world_entities/npcs/actionbox_enemy.cc	(revision 10661)
+++ /branches/vs-enhencements/src/world_entities/npcs/actionbox_enemy.cc	(revision 10662)
@@ -40,4 +40,8 @@
   this->pitch = 0.0f;
   this->dPitch = 0.0;
+  
+  this->maxSpeed = 10;
+  this->acceleration = 3;
+  this->speed = 0;
   
   if ( root )
@@ -96,5 +100,8 @@
 void ActionboxEnemy::moveTowardsBox( ActionBox * box, float dt )
 {
-  Vector targetPos = State::getPlayer()->getPlayable()->getAbsCoor();
+  //Vector targetPos = State::getPlayer()->getPlayable()->getAbsCoor();
+  static float time = 0;
+  time += dt;
+  Vector targetPos = State::getPlayer()->getPlayable()->getAbsCoor() + State::getPlayer()->getPlayable()->getAbsDir().apply(Vector(1, 0, 0))*50*(1.5 + sin(time/5));
   Vector targetDir = targetPos - myCoor;
   
@@ -127,5 +134,12 @@
     cur = tmp2;
   
-  myDir = cur; 
+  myDir = cur;
+  
+  Vector fw = cur.apply( Vector(1, 0, 0) );
+  
+  this->speed += this->acceleration*dt;
+  if ( this->speed > this->maxSpeed )
+    this->speed = this->maxSpeed;
+  this->myCoor += fw*speed*dt;
 }
 
Index: /branches/vs-enhencements/src/world_entities/npcs/actionbox_enemy.h
===================================================================
--- /branches/vs-enhencements/src/world_entities/npcs/actionbox_enemy.h	(revision 10661)
+++ /branches/vs-enhencements/src/world_entities/npcs/actionbox_enemy.h	(revision 10662)
@@ -26,4 +26,8 @@
     Quaternion qPitch;
     
+    float acceleration;
+    float maxSpeed;
+    float speed;
+    
     Quaternion myDir;
     Vector     myCoor;
Index: /branches/vs-enhencements/src/world_entities/space_ships/space_ship.cc
===================================================================
--- /branches/vs-enhencements/src/world_entities/space_ships/space_ship.cc	(revision 10661)
+++ /branches/vs-enhencements/src/world_entities/space_ships/space_ship.cc	(revision 10662)
@@ -69,4 +69,5 @@
 
 #include "track/track.h"
+#include "track/action_box.h"
 
 
@@ -345,5 +346,7 @@
   LoadParam(root, "actionWidthPercentage", this, SpaceShip, setActionWidthPercentage);
 
-  State::getCamera()->setViewMode(Camera::ViewTop);
+  State::getCamera()->setViewMode(Camera::ViewNormal);
+  State::getCameraTargetNode()->setParent(this);
+  State::getCamera()->setParent(this);
 
   LoadParam(root, "reactor", this, SpaceShip, setReactor);
@@ -828,4 +831,38 @@
       break;
 
+    
+    case Playable::Vertical:
+    {
+        this->travelNode->setAbsCoor(this->getAbsCoor());
+        this->travelNode->updateNode(0.01f);
+
+        this->isTravelDistanceInit = false;
+
+        if(this->entityTrack)
+           this->travelNode->setParent(this->entityTrack->getTrackNode());
+
+        this->setParent(this->travelNode);
+        this->setRelCoor(0,0,0);
+
+        State::getCameraNode()->setParentSoft(this->travelNode);
+        //State::getCameraNode()->setParentSoft(this);
+        //State::getCameraNode()->setRelCoorSoft(-0.01, 40, 0);
+        State::getCameraTargetNode()->setParentSoft(this->travelNode);
+        //State::getCameraTargetNode()->setParentSoft(this);
+        //State::getCameraTargetNode()->setRelCoorSoft(0,0,0);
+        this->setCameraMode(Camera::ViewNormal);
+        State::getCamera()->setEventHandling(false);
+        registerEvent(KeyMapper::PEV_VIEW0);
+        registerEvent(KeyMapper::PEV_VIEW1);
+        registerEvent(KeyMapper::PEV_VIEW2);
+        registerEvent(KeyMapper::PEV_VIEW3);
+        registerEvent(KeyMapper::PEV_VIEW4);
+        registerEvent(KeyMapper::PEV_VIEW5);
+
+        State::getCamera()->setParentMode(PNODE_ALL);
+      
+      break;
+    }
+      
     default:
       PRINTF(2)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassCName());
@@ -990,4 +1027,41 @@
     }
     case Playable::Vertical:
+    {
+      if ( !entityTrack || !entityTrack->getActionBox() )
+      {
+        break;
+      }
+      ActionBox * box = entityTrack->getActionBox();
+      
+      this->travelVelocity = Vector(0, 0, 0);
+      float ssss = 50;
+      if ( this->bForward )
+      {
+        this->travelVelocity += Vector( 0, ssss, 0 );
+      }
+      if ( this->bBackward )
+      {
+        this->travelVelocity += Vector( 0, -ssss, 0 );
+      }
+      if ( this->bLeft )
+      {
+        this->travelVelocity += Vector( 0, 0, -ssss );
+      }
+      if ( this->bRight )
+      {
+        this->travelVelocity += Vector( 0, 0, ssss );
+      }
+      
+      Vector ds = this->travelVelocity*dt;
+      Vector newPos = this->getRelCoor() + ds;
+      if ( newPos.y < -(box->getHeight_2()) || newPos.y > box->getHeight_2() )
+      {
+        this->travelVelocity.y = 0;
+      }
+      if ( newPos.z > box->getWidth_2() || newPos.z < -(box->getWidth_2()) )
+      {
+        this->travelVelocity.z = 0;
+      }
+    }
       break;
     default:
