Index: branches/single_player_map/src/defs/class_id.h
===================================================================
--- branches/single_player_map/src/defs/class_id.h	(revision 8875)
+++ branches/single_player_map/src/defs/class_id.h	(revision 8876)
@@ -187,4 +187,5 @@
   CL_BSP_ENTITY                 =    0x00000312,
   CL_SKYDOME                    =    0x00000313,
+  CL_DOOR                       =    0x00000314,
 
   // Playables
@@ -212,4 +213,6 @@
   CL_TARGETING_TURRET           =    0x000003a4,
   CL_HYPERBLASTER               =    0x000003a5,
+  CL_FPS_SNIPER_RIFLE           =    0x000003a6,
+  CL_FPS_LASER_RIFLE            =    0x000003a7,
 
   // Projectiles
Index: branches/single_player_map/src/lib/collision_reaction/cr_physics_ground_walk.cc
===================================================================
--- branches/single_player_map/src/lib/collision_reaction/cr_physics_ground_walk.cc	(revision 8875)
+++ branches/single_player_map/src/lib/collision_reaction/cr_physics_ground_walk.cc	(revision 8876)
@@ -29,4 +29,6 @@
 
 #include "aabb.h"
+
+#include "cr_defs.h"
 
 using namespace std;
@@ -70,30 +72,46 @@
   WorldEntity* entity = collision->getEntityB();
 
+  // collision position maths
+  Vector collPos =  collision->getEntityB()->getAbsCoor()  + box->center - ce->getCollisionPosition();
+
   float CR_MAX_WALK_HEIGHT = 2.0f;
   float CR_THRESHOLD = 0.2f;
 
-  if( box != NULL)
+  if( box == NULL)
   {
-
-    Vector collPos =  collision->getEntityB()->getAbsCoor()  + box->center - ce->getCollisionPosition();
-    height = collPos.y - box->halfLength[1];
-
-    PRINTF(0)("height: %f          , model height: %f\n", height, box->halfLength[1]);
-    PRINTF(0)(" ground normal: %f, %f, %f\n", normal.x, normal.y, normal.z);
-
-    // object is beneath the plane (ground)
-    if( height < 0.0f )
-    {
-      entity->shiftCoor(Vector(0, -height, 0));
-    }
-    // object is already in the wall
-    else if( ce->isInWall())
-    {
-      entity->setAbsCoor(entity->getLastAbsCoor());
-    }
-
-
-
+    PRINTF(2)("this model has no aabb box so there is no correct collision reaction implemented. skipping\n");
+    return;
   }
+
+
+  switch( ce->getType())
+  {
+    case COLLISION_TYPE_AXIS_Y:
+
+      height = collPos.y - box->halfLength[1];
+      PRINTF(0)("height: %f          , model height: %f\n", height, box->halfLength[1]);
+      PRINTF(0)(" ground normal: %f, %f, %f\n", normal.x, normal.y, normal.z);
+
+      // object is beneath the plane (ground)
+      if( height <= 0.0f )
+      {
+        entity->shiftCoor(Vector(0, -height, 0));
+      }
+      // object is already in the wall
+      else if( ce->isInWall())
+      {
+        entity->setAbsCoor(entity->getLastAbsCoor());
+      }
+      break;
+
+
+    case COLLISION_TYPE_AXIS_X:
+    case COLLISION_TYPE_AXIS_Z:
+      break;
+
+    }
+
+
+
 
 
@@ -177,9 +195,5 @@
 void CRPhysicsGroundWalk::update(WorldEntity* owner)
 {
-  for( int i = 9; i > 0; i--) {
-    this->lastPositions[i] = this->lastPositions[i-1];
-    //     PRINTF(0)("lastPosition[%i]: %f, %f, %f\n", i, lastPositions[i].x, lastPositions[i].y, lastPositions[i].z);
-  }
-  this->lastPositions[0] = owner->getAbsCoor();
+
 }
 
Index: branches/single_player_map/src/lib/collision_reaction/cr_physics_ground_walk.h
===================================================================
--- branches/single_player_map/src/lib/collision_reaction/cr_physics_ground_walk.h	(revision 8875)
+++ branches/single_player_map/src/lib/collision_reaction/cr_physics_ground_walk.h	(revision 8876)
@@ -23,10 +23,6 @@
     virtual void update(WorldEntity* entity);
 
+
   private:
-    Vector       lastPosition;                //!< vector with the last valid position
-    Vector       afterLastPosition;           //!< vector for the after last
-    Quaternion   lastDirection;               //!< quat with the last valid direction
-
-    Vector       lastPositions[10];           //!< last 10 positions
     float        downspeed;
 };
Index: branches/single_player_map/src/world_entities/door.cc
===================================================================
--- branches/single_player_map/src/world_entities/door.cc	(revision 8875)
+++ branches/single_player_map/src/world_entities/door.cc	(revision 8876)
@@ -67,12 +67,12 @@
   WorldEntity::loadParams(root);
 
-//   LoadParam(root, "", this, Door, set)
-//       .describe("sets the animation of the md2 model")
-//       .defaultValues(1);
+  LoadParam(root, "", this, Door, setActionRadius)
+      .describe("sets the action radius of the door")
+      .defaultValues(1);
 
 }
 
 
-void  Door::setAnim(int animationIndex, int animPlaybackMode)
+void  Door::setAnimation(int animationIndex, int animPlaybackMode)
 {
   if( likely(this->getModel(0) != NULL))
@@ -86,4 +86,26 @@
     ((InteractiveModel*)this->getModel(0))->tick(time);
 
+
+}
+
+
+/**
+ * open the door
+ */
+void Door::open()
+{
+  if( this->bLocked)
+    return;
+
+//   this->setAnimation();
+
+}
+
+
+/**
+ * close the door
+ */
+void Door::close()
+{
 
 }
Index: branches/single_player_map/src/world_entities/door.h
===================================================================
--- branches/single_player_map/src/world_entities/door.h	(revision 8875)
+++ branches/single_player_map/src/world_entities/door.h	(revision 8876)
@@ -18,5 +18,4 @@
     virtual void loadParams(const TiXmlElement* root);
 
-    void setAnim(int animationIndex, int animPlaybackMode);
     void setActionRadius(float radius) { this->actionRadius = radius; }
 
@@ -26,10 +25,19 @@
     void close();
 
+    void lock() { this->bLocked = true; }
+    void unlock() { this->bLocked = false; }
+    bool isLocked() const { return this->bLocked; }
+
+
   private:
     bool checkOpen();
+    void setAnimation(int animationIndex, int animPlaybackMode);
+
 
   private:
     bool           bOpen;             //!< true if the door is open
+    bool           bLocked;           //!< true if this door is locked
     float          actionRadius;      //!< action radius
+
 
 };
