Index: /branches/presentation/src/defs/class_id.h
===================================================================
--- /branches/presentation/src/defs/class_id.h	(revision 9166)
+++ /branches/presentation/src/defs/class_id.h	(revision 9167)
@@ -226,8 +226,9 @@
   CL_ROCKET                     =    0x000003e1,
   CL_LASER                      =    0x000003e2,
-  CL_BOMB                       =    0x000003e3,
-  CL_GROUND_TURRET              =    0x000003e4,
-  CL_GUIDED_MISSILE             =    0x000003e5,
-  CL_HYPERBLAST                 =    0x000003e6,
+  CL_RAIL_PROJECTILE            =    0x000003e3,
+  CL_BOMB                       =    0x000003e4,
+  CL_GROUND_TURRET              =    0x000003e5,
+  CL_GUIDED_MISSILE             =    0x000003e6,
+  CL_HYPERBLAST                 =    0x000003e7,
 
   // NPC's
Index: /branches/presentation/src/world_entities/WorldEntities.am
===================================================================
--- /branches/presentation/src/world_entities/WorldEntities.am	(revision 9166)
+++ /branches/presentation/src/world_entities/WorldEntities.am	(revision 9167)
@@ -34,4 +34,5 @@
                 world_entities/projectiles/bomb.cc \
                 world_entities/projectiles/laser.cc \
+                world_entities/projectiles/rail_projectile.cc \
                 world_entities/projectiles/test_bullet.cc \
                 world_entities/projectiles/rocket.cc \
@@ -101,4 +102,5 @@
                 projectiles/bomb.h \
                 projectiles/laser.h \
+                projectiles/rail_projectile.h \
                 projectiles/test_bullet.h \
                 projectiles/rocket.h \
Index: /branches/presentation/src/world_entities/environments/model_entity.cc
===================================================================
--- /branches/presentation/src/world_entities/environments/model_entity.cc	(revision 9166)
+++ /branches/presentation/src/world_entities/environments/model_entity.cc	(revision 9167)
@@ -32,5 +32,5 @@
 {
   this->setClassID(CL_MODEL_ENTITY, "ModelEntity");
-  this->toList(OM_ENVIRON_NOTICK);
+  this->toList(OM_ENVIRON);
 
   this->speed = NULL;
@@ -71,11 +71,14 @@
 void ModelEntity::setMomentum (float angle, float x, float y, float z)
 {
+  Vector v(x,y,z);
+  v.normalize();
   if (this->momentum == NULL)
     this->momentum = new Quaternion;
-  *this->momentum = Quaternion(angle, Vector(x, y, z));
+  *this->momentum = Quaternion(angle, v);
 }
 
 void ModelEntity::tick(float dt)
 {
+  printf("TEST\n");
   if (this->speed != NULL)
     this->shiftCoor(*this->speed * dt);
Index: /branches/presentation/src/world_entities/projectiles/rail_projectile.cc
===================================================================
--- /branches/presentation/src/world_entities/projectiles/rail_projectile.cc	(revision 9167)
+++ /branches/presentation/src/world_entities/projectiles/rail_projectile.cc	(revision 9167)
@@ -0,0 +1,159 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific
+   main-programmer: Patrick Boenzli
+   co-programmer: Benjamin Grauer
+
+*/
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON
+
+#include "rail_projectile.h"
+
+#include "state.h"
+#include "class_list.h"
+#include "model.h"
+
+#include "dot_emitter.h"
+#include "sprite_particles.h"
+
+#include <cassert>
+#include "debug.h"
+
+using namespace std;
+
+CREATE_FAST_FACTORY_STATIC(RailProjectile, CL_RAIL_PROJECTILE);
+
+/**
+ *  standard constructor
+*/
+RailProjectile::RailProjectile () : Projectile()
+{
+  this->setClassID(CL_RAIL_PROJECTILE, "RailProjectile");
+
+  this->loadModel("models/projectiles/test_projectile.obj", 100);
+
+  this->setMinEnergy(10);
+  this->setHealthMax(10);
+  this->lifeSpan = .5f;
+
+  this->emitter = new DotEmitter(100, 5, M_2_PI);
+  this->emitter->setParent(this);
+  this->emitter->setSpread(M_PI, M_PI);
+  this->emitter->setEmissionRate(300.0);
+  this->emitter->setEmissionVelocity(50.0);
+}
+
+
+/**
+ *  standard deconstructor
+*/
+RailProjectile::~RailProjectile ()
+{
+  // delete this->emitter;
+
+  /* this is normaly done by World.cc by deleting the ParticleEngine */
+  if (RailProjectile::explosionParticles != NULL && ClassList::getList(CL_RAIL_PROJECTILE)->size() <= 1)
+  {
+    //if (ClassList::exists(RailProjectile::explosionParticles, CL_PARTICLE_SYSTEM))
+    //  delete RailProjectile::explosionParticles;
+    PRINTF(1)("Deleting RailProjectile Particles\n");
+    RailProjectile::explosionParticles = NULL;
+  }
+
+}
+
+SpriteParticles* RailProjectile::explosionParticles = NULL;
+
+void RailProjectile::activate()
+{
+  if (unlikely(RailProjectile::explosionParticles == NULL))
+  {
+    RailProjectile::explosionParticles = new SpriteParticles(1000);
+    RailProjectile::explosionParticles->setName("RailProjectileExplosionParticles");
+    RailProjectile::explosionParticles->setLifeSpan(.5, .3);
+    RailProjectile::explosionParticles->setRadius(0.0, 10.0);
+    RailProjectile::explosionParticles->setRadius(.5, 6.0);
+    RailProjectile::explosionParticles->setRadius(1.0, 3.0);
+    RailProjectile::explosionParticles->setColor(0.0, 1,1,0,.9);
+    RailProjectile::explosionParticles->setColor(0.5, .8,.8,0,.5);
+    RailProjectile::explosionParticles->setColor(1.0, .8,.8,.7,.0);
+  }
+
+  this->setHealth(10);
+}
+
+
+void RailProjectile::deactivate()
+{
+  assert (RailProjectile::explosionParticles != NULL);
+  RailProjectile::explosionParticles->removeEmitter(this->emitter);
+  this->lifeCycle = 0.0;
+
+  this->toList(OM_NULL);
+  this->removeNode();
+  RailProjectile::fastFactory->kill(this);
+}
+
+
+void RailProjectile::collidesWith(WorldEntity* entity, const Vector& location)
+{
+  if (this->hitEntity != entity && entity->isA(CL_NPC))
+    this->destroy( entity );
+  this->hitEntity = entity;
+}
+
+/**
+ *  signal tick, time dependent things will be handled here
+ * @param dt time since last tick
+*/
+void RailProjectile::tick (float dt)
+{
+  //Vector v = *this->flightDirection * ( this->speed * time * 1000 + 0.1);
+  Vector v = this->velocity * dt;
+  this->shiftCoor(v);
+
+  if (this->tickLifeCycle(dt))
+    this->deactivate();
+}
+
+/**
+ *  the function gets called, when the projectile is destroyed
+*/
+void RailProjectile::destroy (WorldEntity* killer)
+{
+  Projectile::destroy( killer );
+  PRINTF(5)("DESTROY RailProjectile\n");
+  this->lifeCycle = .95; //!< @todo calculate this usefully.
+
+  this->emitter->setSystem(RailProjectile::explosionParticles);
+}
+
+
+void RailProjectile::draw () const
+{
+  glPushAttrib(GL_ENABLE_BIT);
+  glDisable(GL_LIGHTING);
+
+  WorldEntity::draw();
+/*  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+
+  float matrix[4][4];
+  glTranslatef (this->getAbsCoor ().x, this->getAbsCoor ().y, this->getAbsCoor ().z);
+  this->getAbsDir().matrix (matrix);
+  glMultMatrixf((float*)matrix);
+  glScalef(2.0, 2.0, 2.0);
+  this->getModel()->draw();
+  glPopMatrix();*/
+
+  glPopAttrib();
+}
+
Index: /branches/presentation/src/world_entities/projectiles/rail_projectile.h
===================================================================
--- /branches/presentation/src/world_entities/projectiles/rail_projectile.h	(revision 9167)
+++ /branches/presentation/src/world_entities/projectiles/rail_projectile.h	(revision 9167)
@@ -0,0 +1,46 @@
+/*!
+ * @file rail_projectile.h
+ * @brief a projectile, that is been shooted by a weapon
+*/
+
+#ifndef _RAIL_PROJECTILE_H
+#define _RAIL_PROJECTILE_H
+
+#include "projectile.h"
+
+class Vector;
+class Weapon;
+class SpriteParticles;
+class ParticleEmitter;
+class FastFactory;
+
+class RailProjectile : public Projectile
+{
+  public:
+    RailProjectile ();
+    virtual ~RailProjectile ();
+
+
+    virtual void activate();
+    virtual void deactivate();
+
+    virtual void collidesWith(WorldEntity* entity, const Vector& location);
+
+    virtual void destroy (WorldEntity* killer);
+
+    virtual void tick (float dt);
+    virtual void draw () const;
+
+
+  private:
+    static FastFactory*               fastFactory;
+
+    static SpriteParticles*           explosionParticles;
+
+    ParticleEmitter*                  emitter;
+
+
+    WorldEntity* hitEntity; // FIXME TEMPORARY
+};
+
+#endif /* _RAIL_PROJECTILE_H */
Index: anches/presentation/src/world_entities/projectiles/rail_projectiles.cc
===================================================================
--- /branches/presentation/src/world_entities/projectiles/rail_projectiles.cc	(revision 9166)
+++ 	(revision )
@@ -1,159 +1,0 @@
-/*
-   orxonox - the future of 3D-vertical-scrollers
-
-   Copyright (C) 2004 orx
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   ### File Specific
-   main-programmer: Patrick Boenzli
-   co-programmer: Benjamin Grauer
-
-*/
-#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON
-
-#include "rail_projectile.h"
-
-#include "state.h"
-#include "class_list.h"
-#include "model.h"
-
-#include "dot_emitter.h"
-#include "sprite_particles.h"
-
-#include <cassert>
-#include "debug.h"
-
-using namespace std;
-
-CREATE_FAST_FACTORY_STATIC(RailProjectile, CL_RAIL_PROJECTILE);
-
-/**
- *  standard constructor
-*/
-RailProjectile::RailProjectile () : Projectile()
-{
-  this->setClassID(CL_RAIL_PROJECTILE, "RailProjectile");
-
-  this->loadModel("models/projectiles/rail_projectile.obj");
-
-  this->setMinEnergy(10);
-  this->setHealthMax(10);
-  this->lifeSpan = 5.0;
-
-  this->emitter = new DotEmitter(100, 5, M_2_PI);
-  this->emitter->setParent(this);
-  this->emitter->setSpread(M_PI, M_PI);
-  this->emitter->setEmissionRate(300.0);
-  this->emitter->setEmissionVelocity(50.0);
-}
-
-
-/**
- *  standard deconstructor
-*/
-RailProjectile::~RailProjectile ()
-{
-  // delete this->emitter;
-
-  /* this is normaly done by World.cc by deleting the ParticleEngine */
-  if (RailProjectile::explosionParticles != NULL && ClassList::getList(CL_RAIL_PROJECTILE)->size() <= 1)
-  {
-    //if (ClassList::exists(RailProjectile::explosionParticles, CL_PARTICLE_SYSTEM))
-    //  delete RailProjectile::explosionParticles;
-    PRINTF(1)("Deleting RailProjectile Particles\n");
-    RailProjectile::explosionParticles = NULL;
-  }
-
-}
-
-SpriteParticles* RailProjectile::explosionParticles = NULL;
-
-void RailProjectile::activate()
-{
-  if (unlikely(RailProjectile::explosionParticles == NULL))
-  {
-    RailProjectile::explosionParticles = new SpriteParticles(1000);
-    RailProjectile::explosionParticles->setName("RailProjectileExplosionParticles");
-    RailProjectile::explosionParticles->setLifeSpan(.5, .3);
-    RailProjectile::explosionParticles->setRadius(0.0, 10.0);
-    RailProjectile::explosionParticles->setRadius(.5, 6.0);
-    RailProjectile::explosionParticles->setRadius(1.0, 3.0);
-    RailProjectile::explosionParticles->setColor(0.0, 1,1,0,.9);
-    RailProjectile::explosionParticles->setColor(0.5, .8,.8,0,.5);
-    RailProjectile::explosionParticles->setColor(1.0, .8,.8,.7,.0);
-  }
-
-  this->setHealth(10);
-}
-
-
-void RailProjectile::deactivate()
-{
-  assert (RailProjectile::explosionParticles != NULL);
-  RailProjectile::explosionParticles->removeEmitter(this->emitter);
-  this->lifeCycle = 0.0;
-
-  this->toList(OM_NULL);
-  this->removeNode();
-  RailProjectile::fastFactory->kill(this);
-}
-
-
-void RailProjectile::collidesWith(WorldEntity* entity, const Vector& location)
-{
-  if (this->hitEntity != entity && entity->isA(CL_NPC))
-    this->destroy( entity );
-  this->hitEntity = entity;
-}
-
-/**
- *  signal tick, time dependent things will be handled here
- * @param dt time since last tick
-*/
-void RailProjectile::tick (float dt)
-{
-  //Vector v = *this->flightDirection * ( this->speed * time * 1000 + 0.1);
-  Vector v = this->velocity * dt;
-  this->shiftCoor(v);
-
-  if (this->tickLifeCycle(dt))
-    this->deactivate();
-}
-
-/**
- *  the function gets called, when the projectile is destroyed
-*/
-void RailProjectile::destroy (WorldEntity* killer)
-{
-  Projectile::destroy( killer );
-  PRINTF(5)("DESTROY RailProjectile\n");
-  this->lifeCycle = .95; //!< @todo calculate this usefully.
-
-  this->emitter->setSystem(RailProjectile::explosionParticles);
-}
-
-
-void RailProjectile::draw () const
-{
-  glPushAttrib(GL_ENABLE_BIT);
-  glDisable(GL_LIGHTING);
-
-  WorldEntity::draw();
-/*  glMatrixMode(GL_MODELVIEW);
-  glPushMatrix();
-
-  float matrix[4][4];
-  glTranslatef (this->getAbsCoor ().x, this->getAbsCoor ().y, this->getAbsCoor ().z);
-  this->getAbsDir().matrix (matrix);
-  glMultMatrixf((float*)matrix);
-  glScalef(2.0, 2.0, 2.0);
-  this->getModel()->draw();
-  glPopMatrix();*/
-
-  glPopAttrib();
-}
-
Index: anches/presentation/src/world_entities/projectiles/rail_projectiles.h
===================================================================
--- /branches/presentation/src/world_entities/projectiles/rail_projectiles.h	(revision 9166)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*!
- * @file rail_projectile.h
- * @brief a projectile, that is been shooted by a weapon
-*/
-
-#ifndef _RAIL_PROJECTILE_H
-#define _RAIL_PROJECTILE_H
-
-#include "projectile.h"
-
-class Vector;
-class Weapon;
-class SpriteParticles;
-class ParticleEmitter;
-class FastFactory;
-
-class RailProjectile : public Projectile
-{
-  public:
-    RailProjectile ();
-    virtual ~RailProjectile ();
-
-
-    virtual void activate();
-    virtual void deactivate();
-
-    virtual void collidesWith(WorldEntity* entity, const Vector& location);
-
-    virtual void destroy (WorldEntity* killer);
-
-    virtual void tick (float dt);
-    virtual void draw () const;
-
-
-  private:
-    static FastFactory*               fastFactory;
-
-    static SpriteParticles*           explosionParticles;
-
-    ParticleEmitter*                  emitter;
-
-
-    WorldEntity* hitEntity; // FIXME TEMPORARY
-};
-
-#endif /* _RAIL_PROJECTILE_H */
Index: /branches/presentation/src/world_entities/space_ships/spacecraft_2d.cc
===================================================================
--- /branches/presentation/src/world_entities/space_ships/spacecraft_2d.cc	(revision 9166)
+++ /branches/presentation/src/world_entities/space_ships/spacecraft_2d.cc	(revision 9167)
@@ -424,5 +424,5 @@
         if (this->toTravelHeight != NULL)
         {
-          this->travelNode->shiftCoor(Vector(0, (*toTravelHeight - this->travelNode->getAbsCoor().y) * dt, 0));
+          this->travelNode->shiftCoor(Vector(0, (*toTravelHeight - this->travelNode->getAbsCoor().y) * dt * 10.0, 0));
           if (fabsf(this->travelNode->getAbsCoor().y - *this->toTravelHeight) < .1)
           {
@@ -435,20 +435,6 @@
         accel.y = 0.0;
 
-
         Vector accelerationDir = this->getAbsDir().apply(accel * this->acceleration);
         accelerationDir.y = 0.0;
-
-
-        /*
-                if (this->getRelCoor().z > this->travelDistance.y && accel.z > 0.0)
-                accel.z = 0.0f;
-                if (this->getRelCoor().z < -this->travelDistance.y && accel.z < 0.0)
-                accel.z = 0.0f;
-
-                if (this->getRelCoor().x > this->travelDistance.x && accel.x > 0.0)
-                accel.x = 0.0f;
-                if (this->getRelCoor().x < -this->travelDistance.x && accel.x < 0.0)
-                accel.x = 0.0f;*/
-
 
         // this is the air friction (necessary for a smooth control)
@@ -523,5 +509,4 @@
       else if (cameraLook < -M_PI_4)
         cameraLook = -M_PI_4;
-      //this->cameraNode.setRelDirSoft(this->direction,10);
     }
   }
Index: /branches/presentation/src/world_entities/weapons/laser_cannon.cc
===================================================================
--- /branches/presentation/src/world_entities/weapons/laser_cannon.cc	(revision 9166)
+++ /branches/presentation/src/world_entities/weapons/laser_cannon.cc	(revision 9167)
@@ -72,5 +72,5 @@
 
   this->setCapability(WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
-  this->setProjectileType(CL_LASER);
+  this->setProjectileType(CL_RAIL_PROJECTILE);
   this->prepareProjectiles(100);
   this->setEmissionPoint(Vector(2.8,0,0) * 5.0);
