Index: /branches/hud/src/defs/orxonox_globals.h
===================================================================
--- /branches/hud/src/defs/orxonox_globals.h	(revision 10646)
+++ /branches/hud/src/defs/orxonox_globals.h	(revision 10647)
@@ -71,5 +71,5 @@
 #define   CONFIG_NAME_DEBUG_LEVEL          "Debug-Level"
 
-// evenets
+// events
 #define   CONFIG_NAME_PLAYER_FORWARD       "Forward"
 #define   CONFIG_NAME_PLAYER_BACKWARD      "Backward"
@@ -80,6 +80,11 @@
 #define   CONFIG_NAME_PLAYER_UP            "Up"
 #define   CONFIG_NAME_PLAYER_DOWN          "Down"
+#define   CONFIG_NAME_PLAYER_STRAFE_LEFT   "StrafeLeft"
+#define   CONFIG_NAME_PLAYER_STRAFE_RIGHT  "StrafeRight"
+#define   CONFIG_NAME_PLAYER_JUMP          "Jump"
+#define   CONFIG_NAME_PLAYER_CROUCH        "Crouch"
 
 #define   CONFIG_NAME_PLAYER_FIRE          "Fire"
+#define   CONFIG_NAME_PLAYER_FIRE2         "Fire2"
 #define   CONFIG_NAME_PLAYER_NEXT_WEAPON   "Next-Weapon"
 #define   CONFIG_NAME_PLAYER_PREV_WEAPON   "Previous-Weapon"
Index: /branches/hud/src/lib/event/key_mapper.cc
===================================================================
--- /branches/hud/src/lib/event/key_mapper.cc	(revision 10646)
+++ /branches/hud/src/lib/event/key_mapper.cc	(revision 10647)
@@ -46,4 +46,5 @@
 int KeyMapper::PEV_STRAFE_RIGHT      = EV_UNKNOWN;
 int KeyMapper::PEV_JUMP              = EV_UNKNOWN;
+int KeyMapper::PEV_CROUCH            = EV_UNKNOWN;
 
 int KeyMapper::PEV_FIRE1             = EV_UNKNOWN;
@@ -82,10 +83,11 @@
       {&KeyMapper::PEV_ROLL_RIGHT,           CONFIG_NAME_PLAYER_ROLL_LEFT,       SDLK_z},
       {&KeyMapper::PEV_ROLL_LEFT,            CONFIG_NAME_PLAYER_ROLL_RIGHT,      SDLK_c},
-      {&KeyMapper::PEV_STRAFE_LEFT,          "StrafeLeft",                       SDLK_q},
-      {&KeyMapper::PEV_STRAFE_RIGHT,         "StrafeRight",                      SDLK_e},
-      {&KeyMapper::PEV_JUMP,                 "Jump",                             SDLK_SPACE},
+      {&KeyMapper::PEV_STRAFE_LEFT,          CONFIG_NAME_PLAYER_STRAFE_LEFT,     SDLK_q},
+      {&KeyMapper::PEV_STRAFE_RIGHT,         CONFIG_NAME_PLAYER_STRAFE_RIGHT,    SDLK_e},
+      {&KeyMapper::PEV_JUMP,                 CONFIG_NAME_PLAYER_JUMP,            SDLK_SPACE},
+      {&KeyMapper::PEV_CROUCH,               CONFIG_NAME_PLAYER_CROUCH,          SDLK_LCTRL},
 
       {&KeyMapper::PEV_FIRE1,                CONFIG_NAME_PLAYER_FIRE,            EV_MOUSE_BUTTON_LEFT},
-      {&KeyMapper::PEV_FIRE2,                "Fire2",                            EV_MOUSE_BUTTON_RIGHT},
+      {&KeyMapper::PEV_FIRE2,                CONFIG_NAME_PLAYER_FIRE2,           EV_MOUSE_BUTTON_RIGHT},
       {&KeyMapper::PEV_NEXT_WEAPON,          CONFIG_NAME_PLAYER_NEXT_WEAPON,     EV_MOUSE_BUTTON_WHEELUP},
       {&KeyMapper::PEV_PREVIOUS_WEAPON,      CONFIG_NAME_PLAYER_PREV_WEAPON,     EV_MOUSE_BUTTON_WHEELDOWN},
Index: /branches/hud/src/lib/event/key_mapper.h
===================================================================
--- /branches/hud/src/lib/event/key_mapper.h	(revision 10646)
+++ /branches/hud/src/lib/event/key_mapper.h	(revision 10647)
@@ -57,4 +57,5 @@
 
   static int PEV_JUMP;              //!< jump
+  static int PEV_CROUCH;            //!< crouch
 
   static int PEV_FIRE1;             //!< fire button 1
Index: /branches/hud/src/world_entities/creatures/fps_player.cc
===================================================================
--- /branches/hud/src/world_entities/creatures/fps_player.cc	(revision 10646)
+++ /branches/hud/src/world_entities/creatures/fps_player.cc	(revision 10647)
@@ -19,4 +19,5 @@
 #include "interactive_model.h"
 #include "state.h"
+#include "tools/camera.h"
 
 #include "src/lib/util/loading/factory.h"
@@ -117,4 +118,5 @@
   registerEvent(KeyMapper::PEV_FIRE1);
   registerEvent(KeyMapper::PEV_JUMP);
+  registerEvent(KeyMapper::PEV_CROUCH);
   registerEvent(EV_MOUSE_MOTION);
 
@@ -149,5 +151,6 @@
 
   this->getWeaponManager().getFixedTarget()->setParent(&this->cameraNode);
-  this->getWeaponManager().getFixedTarget()->setRelCoor(1000,0,0);
+  this->getWeaponManager().getFixedTarget()->setParentMode(PNODE_ALL);
+  this->getWeaponManager().getFixedTarget()->setRelCoor(10,0,0);
 
 
@@ -179,5 +182,8 @@
 }
 
-
+/**
+ * was probabably designed for setting direction of FPSPlayer
+ * but hey, this connot work like this, can it?
+ */
 void FPSPlayer::setPlayDirection(const Quaternion& quat, float speed)
 {
@@ -186,5 +192,8 @@
 }
 
-
+/**
+ * Resets FPSPlayer stats and freezes its moving directions
+ *
+ */
 void FPSPlayer::reset()
 {
@@ -199,5 +208,8 @@
 }
 
-
+/**
+ * Defines what happens to camera and other important elements when changing
+ * into FPS-view
+ */
 void FPSPlayer::enter()
 {
@@ -206,7 +218,10 @@
   State::getCameraNode()->setParentSoft(&this->cameraNode);
   State::getCameraTargetNode()->setParentSoft(&this->cameraNode);
-
-  this->getWeaponManager().getFixedTarget()->setParent(State::getCameraTargetNode());
-  this->getWeaponManager().getFixedTarget()->setRelCoor(0,0,0);
+  
+  State::getCamera()->setViewMode(Camera::ViewFPS);
+  
+  this->getWeaponManager().getFixedTarget()->setParent(&this->cameraNode);
+  //this->getWeaponManager().getFixedTarget()->setParentMode(PNODE_ALL);
+  //this->getWeaponManager().getFixedTarget()->setRelCoor(100,0,0);
 
   if ( !State::isOnline() )
@@ -216,4 +231,8 @@
 }
 
+/**
+ * Defines what happens if active player leaves FPSPlayer
+ * (basicly hides crosshair and frees camera)
+ */
 void FPSPlayer::leave()
 {
@@ -239,5 +258,6 @@
     this->getWeaponManager().getParentNode()->setParentMode(PNODE_ROTATE_AND_MOVE);
     this->getWeaponManager().getFixedTarget()->setParent(&this->cameraNode);
-    this->getWeaponManager().getFixedTarget()->setParentMode(PNODE_ROTATE_AND_MOVE);
+    //this->getWeaponManager().getFixedTarget()->setParentMode(PNODE_ROTATE_AND_MOVE);
+    State::getCamera()->setViewMode(Camera::ViewFPS);
 
 
@@ -270,4 +290,5 @@
   {
     this->getWeaponManager().fire();
+    PRINTF(0)("Crosshair at position: %f, %f, %f\n", this->getWeaponManager().getFixedTarget()->getAbsCoor().x, this->getWeaponManager().getFixedTarget()->getAbsCoor().y, this->getWeaponManager().getFixedTarget()->getAbsCoor().z);
   }
 
@@ -346,28 +367,60 @@
     }*/
 
+
   velocity *= 100;
 
   if( this->getModel( 0) != NULL && this->getModel(0)->isA(InteractiveModel::staticClassID()))
   {
-    if( this->bJump)
-    {
-      if( this->jumpAcceleration < 1.0f)
+      if( this->bJump)
       {
-        this->jumpAcceleration = 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);
-    }
+          if( this->jumpAcceleration < 1.0f)
+          {
+              this->jumpAcceleration = 300.0f;
+
+              if( ((InteractiveModel*)this->getModel(0))->getAnimation() != JUMP)
+                  ((InteractiveModel*)this->getModel(0))->setAnimation(JUMP);
+          }
+       }
+       else if(velocity.len() != 0.0f)
+       {
+            if( this->bCrouch )
+            {
+                if( ((InteractiveModel*)this->getModel(0))->getAnimation() != CROUCH_WALK)
+                    ((InteractiveModel*)this->getModel(0))->setAnimation(CROUCH_WALK);
+            }
+            else
+            {
+                if( ((InteractiveModel*)this->getModel(0))->getAnimation() != RUN)
+                    ((InteractiveModel*)this->getModel(0))->setAnimation(RUN); 
+            }
+                 
+       }
+       else
+       {
+           if( this->bCrouch )
+           {
+               if( ((InteractiveModel*)this->getModel(0))->getAnimation() != CROUCH_STAND)
+                   ((InteractiveModel*)this->getModel(0))->setAnimation(CROUCH_STAND);
+           }
+           else
+           {
+               if( ((InteractiveModel*)this->getModel(0))->getAnimation() != STAND)
+                   ((InteractiveModel*)this->getModel(0))->setAnimation(STAND);
+           }
+       }
+       
+       if( this->bFire )
+       {
+           if( this->bCrouch )
+           {
+               if( ((InteractiveModel*)this->getModel(0))->getAnimation() != CROUCH_ATTACK)
+                   ((InteractiveModel*)this->getModel(0))->setAnimation(CROUCH_ATTACK);
+           }
+           else
+           {
+               if( ((InteractiveModel*)this->getModel(0))->getAnimation() != ATTACK)
+                   ((InteractiveModel*)this->getModel(0))->setAnimation(ATTACK);
+           }
+       }
   }
 
@@ -390,12 +443,11 @@
     this->fallVelocity = 0.0f;
   }
-  if((velocity *time).len() < 10.0f) this->shiftCoor( velocity*time );
-  else{	 
+  if((velocity * time).len() < 10.0f) this->shiftCoor( velocity*time );
+  else
+  {	 
 	 velocity.normalize();
 	 velocity *= 10.0f;
 	 this->shiftCoor( velocity );
-       }
-
-
+  }
 
 
@@ -426,5 +478,5 @@
 
 /**
- * process
+ * checks events
  */
 void FPSPlayer::process(const Event &event)
@@ -440,4 +492,10 @@
   else if( event.type == KeyMapper::PEV_BACKWARD)
     this->bBackward = event.bPressed; //this->shiftCoor(0,-.1,0);
+  else if( event.type == KeyMapper::PEV_JUMP)
+    this->bJump = event.bPressed;
+  else if( event.type == KeyMapper::PEV_FIRE1)
+    this->bFire = event.bPressed;
+  else if( event.type == KeyMapper::PEV_CROUCH)
+    this->bCrouch = event.bPressed;
   else if( event.type == EV_MOUSE_MOTION)
   {
@@ -445,15 +503,9 @@
     this->yMouse += event.yRel;
   }
-  else if( event.type == KeyMapper::PEV_JUMP)
-  {
-    this->bJump = event.bPressed;
-  }
-  else if( event.type == KeyMapper::PEV_FIRE1)
-  {
-    this->bFire = event.bPressed;
-  }
-}
-
-
+}
+
+/**
+ * respawns FPSplayer
+ */
 void FPSPlayer::respawn( )
 {
@@ -466,5 +518,7 @@
 }
 
-
+/**
+ * Kills the FPSplayer defining its killer
+ */
 void FPSPlayer::destroy( WorldEntity* killer )
 {
Index: /branches/hud/src/world_entities/creatures/fps_player.h
===================================================================
--- /branches/hud/src/world_entities/creatures/fps_player.h	(revision 10646)
+++ /branches/hud/src/world_entities/creatures/fps_player.h	(revision 10647)
@@ -43,29 +43,31 @@
     void init();
 
-    bool                  bLeft;
-    bool                  bRight;
-    bool                  bForward;
-    bool                  bBackward;
-    bool                  bJump;              //!< jumping
-    bool                  bPosBut;             //!< position button
-    bool                  bFire;              //!< fire button
+    bool                  bLeft;             //!< strafe left
+    bool                  bRight;            //!< strafe right
+    bool                  bForward;          //!< walk forward
+    bool                  bBackward;         //!< walk backward
+    bool                  bJump;             //!< jumping
+    bool                  bPosBut;           //!< position button
+    bool                  bFire;             //!< fire button
+    bool                  bCrouch;           //!< crouch button
 
-    float                 xMouse;             //!< mouse moved in x-Direction
-    float                 yMouse;             //!< mouse moved in y-Direction
+    float                 xMouse;            //!< mouse moved in x-Direction
+    float                 yMouse;            //!< mouse moved in y-Direction
 
 
-    float                 heading;
-    float                 attitude;
+    float                 heading;           //!< the direction where the player heads to
+    float                 attitude;          //!< defines the camera angle to the x-z-plane
 
-    PNode                 cameraNode;
+    PNode                 cameraNode;        //!< the "eyes" of the player (or call it head if you want)
 
-    float                 fallVelocity;        //!< velocity for falling down
-    float                 jumpAcceleration;    //!< the jump acceleration 
+    float                 fallVelocity;      //!< velocity for falling down
+    float                 jumpAcceleration;  //!< the jump acceleration 
 
     bool                  initWeapon;
 
-    AimingSystem*         aimingSystem;        //!< aiming system of the player
+    AimingSystem*         aimingSystem;      //!< aiming system of the player
 
-    float                 damageTicker;        //!< ticker for dealing damage
+    float                 damageTicker;      //!< ticker for dealing damage
+    
 };
 
Index: /branches/hud/src/world_entities/tools/camera.cc
===================================================================
--- /branches/hud/src/world_entities/tools/camera.cc	(revision 10646)
+++ /branches/hud/src/world_entities/tools/camera.cc	(revision 10647)
@@ -203,4 +203,12 @@
       this->setRelCoor(Vector(-0.05, this->viewTopDistance , 0));
       this->target->setRelCoor(0,0,0);
+      break;
+    }
+    case Camera::ViewFPS:
+    {
+      this->fovy = viewNormalFovy;
+      this->toFovy = viewNormalFovy;
+      this->setRelCoorSoft(this->viewFrontDistance, 0, 0, 5);
+      this->target->setRelCoorSoft(Vector(10,0,0), 5);
     }
   }
Index: /branches/hud/src/world_entities/tools/camera.h
===================================================================
--- /branches/hud/src/world_entities/tools/camera.h	(revision 10646)
+++ /branches/hud/src/world_entities/tools/camera.h	(revision 10647)
@@ -34,5 +34,6 @@
     ViewLeft,
     ViewRight,
-    ViewTop
+    ViewTop,
+    ViewFPS
   };
   public:
