Index: trunk/src/world_entities/WorldEntities.am
===================================================================
--- trunk/src/world_entities/WorldEntities.am	(revision 8408)
+++ trunk/src/world_entities/WorldEntities.am	(revision 8490)
@@ -15,5 +15,5 @@
                 world_entities/test_entity.cc \
                 world_entities/planet.cc \
-		world_entities/bsp_entity.cc \
+                world_entities/bsp_entity.cc \
                 \
                 world_entities/weapons/test_gun.cc \
@@ -39,4 +39,5 @@
                 world_entities/space_ships/hover.cc \
                 world_entities/space_ships/turbine_hover.cc \
+                world_entities/space_ships/collision_probe.cc \
                 world_entities/creatures/md2_creature.cc \
                 world_entities/spectator.cc \
@@ -70,5 +71,5 @@
                 test_entity.h \
                 planet.h \
-		bsp_entity.h \
+                bsp_entity.h \
                 \
                 weapons/test_gun.h \
@@ -94,4 +95,5 @@
                 space_ships/hover.h \
                 space_ships/turbine_hover.h \
+                space_ships/collision_probe.cc \
                 creatures/md2_creature.h \
                 spectator.h \
Index: trunk/src/world_entities/bsp_entity.cc
===================================================================
--- trunk/src/world_entities/bsp_entity.cc	(revision 8408)
+++ trunk/src/world_entities/bsp_entity.cc	(revision 8490)
@@ -10,5 +10,5 @@
 
    ### File Specific:
-   main-programmer: ...
+   main-programmer: Claudio Botta
    co-programmer: ...
 */
@@ -17,14 +17,15 @@
 #include "util/loading/resource_manager.h"
 
-CREATE_FACTORY(BSPEntity, CL_BSP_ENTITY);
+CREATE_FACTORY(BspEntity, CL_BSP_ENTITY);
 
 
 /**
- * constructs and loads a BSPEntity from a XML-element
+ * constructs and loads a BspEntity from a XML-element
  * @param root the XML-element to load from
  */
-BSPEntity::BSPEntity(const TiXmlElement* root)
+BspEntity::BspEntity(const TiXmlElement* root)
 {
   this->init();
+
   if (root != NULL)
     this->loadParams(root);
@@ -35,12 +36,31 @@
  * standard deconstructor
  */
-BSPEntity::~BSPEntity ()
+BspEntity::~BspEntity ()
 {
-
+  if( this->bspManager)
+    delete this->bspManager;
 }
 
-void BSPEntity::setName(const std::string& name)
+
+/**
+ * initializes the BspEntity
+ * @todo change this to what you wish
+ */
+void BspEntity::init()
 {
-  printf("+++++++++++ LOADING NAME %s\n", name.c_str());
+  this->setClassID(CL_BSP_ENTITY, "BspEntity");
+
+  this->bspManager = new BspManager(this);
+  this->toList(OM_ENVIRON);
+
+  /**
+   * @todo: Write CL_BSP_ENTITY INTO THE src/defs/class_id.h (your own definition)
+   */
+}
+
+
+void BspEntity::setName(const std::string& name)
+{
+  PRINTF(0)("+++++++++++ LOADING NAME %s\n", name.c_str());
 
   this->bspManager->load(name.c_str(), 0.1f);
@@ -48,34 +68,15 @@
 
 
-
 /**
- * initializes the BSPEntity
- * @todo change this to what you wish
- */
-void BSPEntity::init()
-{
-  this->bspManager = new BspManager();
-  this->setClassID(CL_BSP_ENTITY, "BSPEntity");
-
-  this->toList(OM_ENVIRON);
-
-  /**
-   * @todo: Write CL_BSP_ENTITY INTO THE src/defs/class_id.h (your own definition)
-   */
-
-}
-
-
-/**
- * loads a BSPEntity from a XML-element
+ * loads a BspEntity from a XML-element
  * @param root the XML-element to load from
  * @todo make the class Loadable
  */
-void BSPEntity::loadParams(const TiXmlElement* root)
+void BspEntity::loadParams(const TiXmlElement* root)
 {
   // all the clases this Entity is directly derived from must be called in this way, to load all settings.
  // WorldEntity::loadParam(root);
 
-  LoadParam(root, "Name", this, BSPEntity, setName)
+  LoadParam(root, "Name", this, BspEntity, setName)
       .describe("Sets the of the BSP file.");
 
@@ -91,10 +92,10 @@
 
 /**
- * advances the BSPEntity about time seconds
+ * advances the BspEntity about time seconds
  * @param time the Time to step
  */
-void BSPEntity::tick(float time)
+void BspEntity::tick(float time)
 {
-
+  this->bspManager->tick(time);
 }
 
@@ -103,5 +104,5 @@
  * draws this worldEntity
  */
-void BSPEntity::draw () const
+void BspEntity::draw () const
 {
   this->bspManager->draw();
@@ -113,5 +114,5 @@
  *
  */
-void BSPEntity::collidesWith (WorldEntity* entity, const Vector& location)
+void BspEntity::collidesWith (WorldEntity* entity, const Vector& location)
 {
 
Index: trunk/src/world_entities/bsp_entity.h
===================================================================
--- trunk/src/world_entities/bsp_entity.h	(revision 8408)
+++ trunk/src/world_entities/bsp_entity.h	(revision 8490)
@@ -16,13 +16,13 @@
 
 //! A Class to ...
-class BSPEntity : public WorldEntity
+class BspEntity : public WorldEntity
 {
- 
+
  public:
-  BSPEntity(const TiXmlElement* root = NULL);
-  virtual ~BSPEntity();
+  BspEntity(const TiXmlElement* root = NULL);
+  virtual ~BspEntity();
 
   virtual void loadParams(const TiXmlElement* root);
-  
+
   void setName(const std::string& name);
 
@@ -33,4 +33,7 @@
   virtual void collidesWith (WorldEntity* entity, const Vector& location);
 
+  /** @returns the BspManager of this entity */
+  inline BspManager* getBspManager() { return this->bspManager; }
+
  private:
    BspManager* bspManager;
Index: trunk/src/world_entities/creatures/md2_creature.cc
===================================================================
--- trunk/src/world_entities/creatures/md2_creature.cc	(revision 8408)
+++ trunk/src/world_entities/creatures/md2_creature.cc	(revision 8490)
@@ -21,5 +21,5 @@
 
 #include "objModel.h"
-#include "md2Model.h"
+#include "md2/md2Model.h"
 #include "util/loading/resource_manager.h"
 #include "state.h"
@@ -256,17 +256,17 @@
   if( this->bJump && likely(this->getModel(0) != NULL))
   {
-    ((MD2Model*)this->getModel(0))->setAnim(JUMP);
+    ((MD2Model*)this->getModel(0))->setAnimation(JUMP);
   }
   else if( this->bFire && likely(this->getModel(0) != NULL))
   {
-    if( ((MD2Model*)this->getModel(0))->getAnim() != ATTACK) ((MD2Model*)this->getModel(0))->setAnim(ATTACK);
+    if( ((MD2Model*)this->getModel(0))->getAnim() != ATTACK) ((MD2Model*)this->getModel(0))->setAnimation(ATTACK);
   }
   else if( fabs(move.len()) > 0.0f && likely(this->getModel(0) != NULL))
   {
-    if( ((MD2Model*)this->getModel(0))->getAnim() != RUN) ((MD2Model*)this->getModel(0))->setAnim(RUN);
+    if( ((MD2Model*)this->getModel(0))->getAnim() != RUN) ((MD2Model*)this->getModel(0))->setAnimation(RUN);
   }
   else if (likely(this->getModel(0) != NULL))
   {
-    if( ((MD2Model*)this->getModel(0))->getAnim() != STAND) ((MD2Model*)this->getModel(0))->setAnim(STAND);
+    if( ((MD2Model*)this->getModel(0))->getAnim() != STAND) ((MD2Model*)this->getModel(0))->setAnimation(STAND);
   }
 
Index: trunk/src/world_entities/playable.cc
===================================================================
--- trunk/src/world_entities/playable.cc	(revision 8408)
+++ trunk/src/world_entities/playable.cc	(revision 8490)
@@ -65,4 +65,6 @@
 
   this->bDead = false;
+
+  this->subscribeReaction(CREngine::CR_PHYSICS_GROUND_WALK, CL_BSP_ENTITY);
 
   registerVar( new SynchronizeableInt( &score, &score, "score" ) );
Index: trunk/src/world_entities/space_ships/collision_probe.cc
===================================================================
--- trunk/src/world_entities/space_ships/collision_probe.cc	(revision 8490)
+++ trunk/src/world_entities/space_ships/collision_probe.cc	(revision 8490)
@@ -0,0 +1,116 @@
+/*
+   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
+*/
+
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
+
+
+#include "collision_probe.h"
+
+#include "util/loading/factory.h"
+#include "util/loading/load_param.h"
+
+#include "md2/md2Model.h"
+
+
+using namespace std;
+
+CREATE_FACTORY(CollisionProbe, CL_COLLISION_PROBE);
+
+
+/**
+ *  destructs the spaceship, deletes alocated memory
+ */
+CollisionProbe::~CollisionProbe ()
+{}
+
+
+/**
+ *  creates a new Spaceship from Xml Data
+ * @param root the xml element containing spaceship data
+
+   @todo add more parameters to load
+*/
+CollisionProbe::CollisionProbe(const TiXmlElement* root)
+{
+  this->init();
+
+  if (root != NULL)
+    this->loadParams(root);
+}
+
+
+/**
+ * initializes a Spaceship
+ */
+void CollisionProbe::init()
+{
+  this->setClassID(CL_COLLISION_PROBE, "CollisionProbe");
+
+  bUp = bDown = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = false;
+
+  this->setHealthMax(100);
+  this->setHealth(80);
+
+  this->toList(OM_GROUP_00);
+  this->loadMD2Texture("maps/dr_freak.pcx");
+  this->loadModel("models/dr_freak.md2");
+
+  this->localVelocity = Vector(0,-4,0);
+}
+
+
+/**
+ * loads the Settings of a CollisionProbe from an XML-element.
+ * @param root the XML-element to load the Spaceship's properties from
+ */
+void CollisionProbe::loadParams(const TiXmlElement* root)
+{
+  Playable::loadParams(root);
+}
+
+
+
+/**
+ *  draws the spaceship after transforming it.
+*/
+void CollisionProbe::draw () const
+{
+  WorldEntity::draw();
+}
+
+
+/**
+ *  the function called for each passing timeSnap
+ * @param time The timespan passed since last update
+ */
+void CollisionProbe::tick (float time)
+{
+  if( likely(this->getModel(0) != NULL))
+    ((MD2Model*)this->getModel(0))->tick(time);
+
+  this->shiftCoor(this->localVelocity * time);
+}
+
+
+/**
+ * @todo switch statement ??
+ */
+void CollisionProbe::process(const Event &event)
+{
+
+}
+
+
+
+
Index: trunk/src/world_entities/space_ships/collision_probe.h
===================================================================
--- trunk/src/world_entities/space_ships/collision_probe.h	(revision 8490)
+++ trunk/src/world_entities/space_ships/collision_probe.h	(revision 8490)
@@ -0,0 +1,57 @@
+/*!
+ * @file space_ship.h
+ * Implements the Control of a Spaceship
+ */
+
+#ifndef _COLLISION_PROBE_H
+#define _COLLISION_PROBE_H
+
+#include "playable.h"
+
+#include "vector.h"
+
+class CollisionProbe : public Playable
+{
+
+  public:
+    CollisionProbe(const std::string& fileName);
+    CollisionProbe(const TiXmlElement* root = NULL);
+    virtual ~CollisionProbe();
+
+    virtual void loadParams(const TiXmlElement* root);
+
+    virtual void tick(float time);
+    virtual void draw() const;
+
+    virtual void process(const Event &event);
+
+    virtual void enter() {}
+    virtual void leave() {}
+    virtual void setPlayDirection(const Quaternion& rot, float speed = 0.0f) {}
+
+  private:
+    void init();
+
+
+    bool                  bUp;                //!< up button pressed.
+    bool                  bDown;              //!< down button pressed.
+    bool                  bLeft;              //!< left button pressed.
+    bool                  bRight;             //!< right button pressed.
+    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)
+
+    float                 xMouse;             //!< mouse moved in x-Direction
+    float                 yMouse;             //!< mouse moved in y-Direction
+    float                 mouseSensitivity;   //!< the mouse sensitivity
+    int                   yInvert;
+    int                   controlVelocityX;
+    int                   controlVelocityY;
+
+    Vector                localVelocity;      //!< velocity this entity flights with
+
+};
+
+#endif /* _SPACE_SHIPS_H */
Index: trunk/src/world_entities/space_ships/turbine_hover.h
===================================================================
--- trunk/src/world_entities/space_ships/turbine_hover.h	(revision 8408)
+++ trunk/src/world_entities/space_ships/turbine_hover.h	(revision 8490)
@@ -59,5 +59,5 @@
     float                 rotation;
 
-    Vector                velocity;           //!< the velocity of the TurbineHover.
+   // Vector                velocity;           //!< the velocity of the TurbineHover.
     Quaternion            direction;          //!< the direction of the TurbineHover.
     float                 travelSpeed;        //!< the current speed of the Hove (to make soft movement)
Index: trunk/src/world_entities/test_entity.cc
===================================================================
--- trunk/src/world_entities/test_entity.cc	(revision 8408)
+++ trunk/src/world_entities/test_entity.cc	(revision 8490)
@@ -26,8 +26,9 @@
 
 #include "test_entity.h"
-#include "stdincl.h"
-#include "model.h"
-#include "md2Model.h"
-#include "obb_tree.h"
+
+
+#include "interactive_model.h"
+#include "md2/md2Model.h"
+
 #include "state.h"
 
@@ -90,5 +91,5 @@
 {
   if( likely(this->getModel(0) != NULL))
-    ((MD2Model*)this->getModel(0))->setAnim(animationIndex, animPlaybackMode);
+    ((InteractiveModel*)this->getModel(0))->setAnimation(animationIndex, animPlaybackMode);
 }
 
@@ -97,5 +98,5 @@
 {
   if( likely(this->getModel(0) != NULL))
-    ((MD2Model*)this->getModel(0))->tick(time);
+    ((InteractiveModel*)this->getModel(0))->tick(time);
 
 }
Index: trunk/src/world_entities/world_entity.cc
===================================================================
--- trunk/src/world_entities/world_entity.cc	(revision 8408)
+++ trunk/src/world_entities/world_entity.cc	(revision 8490)
@@ -21,5 +21,7 @@
 
 #include "model.h"
-#include "md2Model.h"
+#include "md2/md2Model.h"
+#include "md3/md3_model.h"
+
 #include "util/loading/resource_manager.h"
 #include "util/loading/load_param.h"
@@ -77,6 +79,5 @@
 
   // registering default reactions:
-  this->subscribeReaction(CREngine::CR_OBJECT_DAMAGE, CL_WORLD_ENTITY);
-  this->subscribeReaction(CREngine::CR_PHYSICS_GROUND, CL_TERRAIN);
+//   this->subscribeReaction(CREngine::CR_OBJECT_DAMAGE, CL_WORLD_ENTITY);
 
   this->toList(OM_NULL);
@@ -200,4 +201,13 @@
         this->buildObbTree(obbTreeDepth);
     }
+    else if(fileName.find(".md3") != std::string::npos)
+    {
+      PRINTF(4)("fetching MD3 file: %s\n", fileName.c_str());
+      Model* m = new md3::MD3Model(fileName, this->scaling);
+      this->setModel(m, 0);
+
+//       if( m != NULL)
+//         this->buildObbTree(obbTreeDepth);
+    }
   }
   else
@@ -411,5 +421,5 @@
  *  @param position it collides on the plane
  */
-bool WorldEntity::registerCollision(WorldEntity* entity, Plane* plane, Vector position)
+bool WorldEntity::registerCollision(WorldEntity* entity, WorldEntity* groundEntity, Vector normal, Vector position)
 {
   // is there any handler listening?
@@ -420,5 +430,5 @@
   CollisionEvent* c = CREngine::getInstance()->popCollisionEventObject();
   assert(c != NULL); // if this should fail: we got not enough precached CollisionEvents: alter value in cr_defs.h
-  c->collide(entity, plane, position);
+  c->collide(entity, groundEntity, normal, position);
 
   for( int i = 0; i < CREngine::CR_NUMBER; ++i)
@@ -501,15 +511,17 @@
 
   Vector v = this->getAbsDirX();
-  v.x *= 10;
-  v.y *= 10;
-  v.z *= 10;
-  Vector u = this->getAbsDirY();
-
-  if(feet.x == (u.x+this->getAbsCoor().x) &&  feet.y == u.y +this->getAbsCoor().y && feet.z == this->getAbsCoor().z)
+  v.x *= 10.1;
+  v.y *= 10.1;
+  v.z *= 10.1;
+  Vector u = Vector(0.0,-20.0,0.0);
+
+
+  if(!(this->getAbsCoor().x == ray_2.x && this->getAbsCoor().y == ray_2.y && this->getAbsCoor().z == ray_2.z) )
   {
 
   this->setAbsCoor(ray_2 - v);
-  }
-  else
+
+  }
+    else
   {
     if(ray_1.x == this->getAbsCoor().x + v.x && ray_1.y == this->getAbsCoor().y + v.y + 0.1 && ray_1.z ==this->getAbsCoor().z + v.z)
@@ -521,4 +533,6 @@
 
   }
+
+
 }
 
Index: trunk/src/world_entities/world_entity.h
===================================================================
--- trunk/src/world_entities/world_entity.h	(revision 8408)
+++ trunk/src/world_entities/world_entity.h	(revision 8490)
@@ -29,5 +29,4 @@
 class CollisionHandle;
 class Collision;
-class Plane;
 
 
@@ -86,5 +85,5 @@
 
   bool registerCollision(WorldEntity* entityA, WorldEntity* entityB, BoundingVolume* bvA, BoundingVolume* bvB);
-  bool registerCollision(WorldEntity* entity, Plane* plane, Vector position);
+  bool registerCollision(WorldEntity* entity, WorldEntity* groundEntity, Vector normal, Vector position);
   /** @return true if there is at least on collision reaction subscribed */
   inline bool isReactive() const { return this->bReactive; }
@@ -138,4 +137,5 @@
   inline float getMass() const { return this->physicsInterface.getMass(); }
   inline float getTotalMass() const { return this->physicsInterface.getTotalMass(); }
+  inline void setVelocity(const Vector& vel) { this->velocity = vel; }
 
 
@@ -187,4 +187,8 @@
   PhysicsInterface        physicsInterface;                //!< the physics object of the WorldEntity
 
+
+  protected:
+  Vector                  velocity;                        //!< speed of the entity
+
 };
 
