Index: branches/presentation/src/world_entities/npcs/npc.cc
===================================================================
--- branches/presentation/src/world_entities/npcs/npc.cc	(revision 10709)
+++ branches/presentation/src/world_entities/npcs/npc.cc	(revision 10710)
@@ -440,7 +440,7 @@
 
 // HACK just to make sure they explode as nice as possible :)
-void NPC::hit( float damage, WorldEntity* killer)
+/*void NPC::hit( float damage, WorldEntity* killer)
 {
   this->destroy( killer);
   this->setDamage(killer->getDamage());
-}
+}*/
Index: branches/presentation/src/world_entities/npcs/npc.h
===================================================================
--- branches/presentation/src/world_entities/npcs/npc.h	(revision 10709)
+++ branches/presentation/src/world_entities/npcs/npc.h	(revision 10710)
@@ -37,5 +37,5 @@
   void destroy( WorldEntity* killer );
 
-  void hit( float damage, WorldEntity* killer);
+  //void hit( float damage, WorldEntity* killer);
 
   inline void destroyThis() { this->destroy(NULL);};
Index: branches/presentation/src/world_entities/weapons/bsp_weapon.cc
===================================================================
--- branches/presentation/src/world_entities/weapons/bsp_weapon.cc	(revision 10709)
+++ branches/presentation/src/world_entities/weapons/bsp_weapon.cc	(revision 10710)
@@ -133,52 +133,60 @@
 	//gunFirExpl.explode(gunFire2,Vector(2,2,2));
 
-  for ( std::list<MuzzleFlash*>::iterator it = gunFire.begin(); it!=gunFire.end(); it++)
-	{
-    (*it)->explode( 0.2 );
-	}
-
-	std::list<WorldEntity*>::iterator entityIterator;
-	// for all bsp managers check all entities
-	Vector pos = this->getAbsCoor();
-	Vector dir = pos + this->getAbsDir().apply( Vector( 1, 0, 0 ) )*range;
-	
-	
-	float shortestDist = range;
-	for( ObjectList<BspEntity>::const_iterator bspIterator = BspEntity::objectList().begin();
-		bspIterator != BspEntity::objectList().end();
-		bspIterator++) {
-		float res = (dynamic_cast<BspEntity*>(*bspIterator)->getBspManager())->checkCollisionRay( pos, dir, dir.len() + 1 );
-	
-		if ( res < shortestDist )
-			shortestDist = res;
-	}
-
-	WorldEntity* target = aimingSystem->getNearestTarget();
-	aimingSystem->flushList();
-        
-	if ( target != NULL )
-	{
-		if (!alwaysHits){
-			float r = rand();
-			r = r/RAND_MAX;
-			float res = (target->getAbsCoor() - this->getAbsCoor()).len();
-			float p = 1 - res*res/range/range;
-			if (r < p ){
-				printf( "HIT %s\n", target->getClassName().c_str() );
-                                target->hit( this->damage, this );
-			}
-			else
-				printf( "MISHIT %s\n", target->getClassName().c_str() );
-			
-		}
-		else 
-                {
-                        printf( "HIT %s\n", target->getClassName().c_str() );
-                        target->hit( this->damage, this );
-                }
-	}
-
-	
-	
+for ( std::list<MuzzleFlash*>::iterator it = gunFire.begin(); it!=gunFire.end(); it++)
+{
+  (*it)->explode( 0.2 );
+}
+
+std::list<WorldEntity*>::iterator entityIterator;
+// for all bsp managers check all entities
+Vector pos = this->getAbsCoor();
+Vector dir = pos + this->getAbsDir().apply( Vector( 1, 0, 0 ) )*range;
+
+
+float shortestDist = range;
+for( ObjectList<BspEntity>::const_iterator bspIterator = BspEntity::objectList().begin();
+     bspIterator != BspEntity::objectList().end();
+     bspIterator++)
+{
+  float res = (dynamic_cast<BspEntity*>(*bspIterator)->getBspManager())->checkCollisionRay( pos, dir, dir.len() + 1 );
+
+  if ( res < shortestDist )
+    shortestDist = res;
+}
+
+WorldEntity* target = aimingSystem->getNearestTarget();
+aimingSystem->flushList();
+
+if ( target != NULL )
+{
+  if ( shortestDist < (pos - target->getAbsCoor()).len() )
+  {
+    printf("HIT WALL\n");
+    return;
+  }
+  if (!alwaysHits)
+  {
+    float r = rand();
+    r = r/RAND_MAX;
+    float res = (target->getAbsCoor() - this->getAbsCoor()).len();
+    float p = 1 - res*res/range/range;
+    if (r < p )
+    {
+      printf( "HIT %s\n", target->getClassName().c_str() );
+      target->hit( this->damage, this );
+    }
+    else
+      printf( "MISHIT %s\n", target->getClassName().c_str() );
+
+  }
+  else
+  {
+    printf( "HIT %s\n", target->getClassName().c_str() );
+    target->hit( this->damage, this );
+  }
+}
+
+
+
 	
 }
Index: branches/presentation/src/world_entities/weapons/fps_sniper_rifle.cc
===================================================================
--- branches/presentation/src/world_entities/weapons/fps_sniper_rifle.cc	(revision 10709)
+++ branches/presentation/src/world_entities/weapons/fps_sniper_rifle.cc	(revision 10710)
@@ -81,9 +81,10 @@
   this->registerObject(this, FPSSniperRifle::_objectList);
 
-  this->loadModel("models/guns/fps_sniper_rifle.obj", 0.2);
+  this->setAbsDir( this->getAbsDir() * Quaternion( -PI/2, Vector(1, 0, 0) ) );
+  this->loadModel("models/guns/fps_sniper_rifle.obj", 1.5);
   this->material = new Material();
   this->material->setIllum(3);
   this->material->setAmbient(1.0, 1.0, 1.0);
-  this->material->setDiffuseMap("textures/rifle01tex.jpg");
+  this->material->setDiffuseMap("textures/fps_sniper_rifle.jpg");
 
   this->setStateDuration(WS_SHOOTING, .1);
@@ -169,5 +170,5 @@
   glPushMatrix();
 
-  Vector pos = this->getAbsCoor() + this->getAbsDir().apply( Vector( 2, 0, 0 ) );
+  Vector pos = this->getAbsCoor() + this->getAbsDir().apply( Vector( 1, 0, 0 ) );
   glTranslatef (pos.x,
                 pos.y,
Index: branches/presentation/src/world_entities/world_entity.cc
===================================================================
--- branches/presentation/src/world_entities/world_entity.cc	(revision 10709)
+++ branches/presentation/src/world_entities/world_entity.cc	(revision 10710)
@@ -99,4 +99,5 @@
   
   this->forwardDamageToParent = false;
+  this->damageable = false;
 
   // registering default reactions:
@@ -183,4 +184,6 @@
   
   LoadParam(root, "forwardDamageToParent", this, WorldEntity, setForwardDamageToParent);
+  
+  LoadParam(root, "damageable", this, WorldEntity, setDamageable);
 
   // Track
@@ -994,4 +997,7 @@
   bool dead = this->getHealth()<=0;
   
+  if ( !damageable )
+    return;
+  
   this->decreaseHealth(damage);
 
Index: branches/presentation/src/world_entities/world_entity.h
===================================================================
--- branches/presentation/src/world_entities/world_entity.h	(revision 10709)
+++ branches/presentation/src/world_entities/world_entity.h	(revision 10710)
@@ -239,4 +239,7 @@
   void setElectronicTH(float th) { this->electronicTH = th; };
   void setElectronicRegen(float regen) { this->electronicRegen = regen; };
+  
+  void setDamageable( bool damageable ){ this->damageable = damageable; }
+  bool getDamageable(){ return this->damageable; }
 
   inline void drawDebugTrack(int flag) { this->bDrawTrack = (bool)flag; }
@@ -263,4 +266,5 @@
 
 
+  bool                    damageable;             //!< weather this we can be damaged/killed
   float                   damage;                 //!< the damage dealt to other objects by colliding.
   float                   health;                 //!< The Energy of this Entity, if the Entity has any energy at all.
