Index: code/branches/ai/src/orxonox/controllers/AIController.cc
===================================================================
--- code/branches/ai/src/orxonox/controllers/AIController.cc	(revision 7832)
+++ code/branches/ai/src/orxonox/controllers/AIController.cc	(revision 7833)
@@ -76,15 +76,15 @@
             // search enemy
             random = rnd(maxrand);
-            if (random < 15 && (!this->target_))
+            if (random < (15 + botlevel_* 2) && (!this->target_))
                 this->searchNewTarget();
 
             // forget enemy
             random = rnd(maxrand);
-            if (random < 5 && (this->target_))
+            if (random < (5/botlevel_) && (this->target_))
                 this->forgetTarget();
 
             // next enemy
             random = rnd(maxrand);
-            if (random < 10 && (this->target_))
+            if (random < (10 + botlevel_) && (this->target_))
                 this->searchNewTarget();
 
@@ -106,10 +106,10 @@
             // shoot
             random = rnd(maxrand);
-            if (!(this->passive_) && random < 75 && (this->target_ && !this->bShooting_))
+            if (!(this->passive_) && random < (75 + botlevel_*3) && (this->target_ && !this->bShooting_))
                 this->bShooting_ = true;
 
             // stop shooting
             random = rnd(maxrand);
-            if (random < 25 && (this->bShooting_))
+            if (random < (25 - botlevel_*2 ) && (this->bShooting_))
                 this->bShooting_ = false;
 
@@ -176,5 +176,4 @@
                 if (random < 50 && (!this->bHasTargetPosition_ && !this->target_))
                     this->searchRandomTargetPosition();
-
 
                 // fly somewhere else
@@ -193,5 +192,5 @@
                 // stop shooting
                 random = rnd(maxrand);
-                if (random < 25 && (this->bShooting_))
+                if (random < (25 - botlevel_*2 ) && (this->bShooting_))
                     this->bShooting_ = false;
 
Index: code/branches/ai/src/orxonox/controllers/ArtificialController.cc
===================================================================
--- code/branches/ai/src/orxonox/controllers/ArtificialController.cc	(revision 7832)
+++ code/branches/ai/src/orxonox/controllers/ArtificialController.cc	(revision 7833)
@@ -86,4 +86,5 @@
 	this->bSetupWorked = false;
 	this->numberOfWeapons = 0;
+	this->botlevel_ = 10.0f;
     }
 
@@ -128,4 +129,5 @@
         XMLPortParam(ArtificialController, "formationSize", setFormationSize, getFormationSize, xmlelement, mode).defaultValues(STANDARD_MAX_FORMATION_SIZE);
         XMLPortParam(ArtificialController, "passive", setPassive, getPassive, xmlelement, mode).defaultValues(false);
+	XMLPortParam(ArtificialController, "level", setBotLevel, getBotLevel, xmlelement, mode).defaultValues(1.0f);
     }
 
@@ -1018,5 +1020,7 @@
         return (team1 == team2 && team1 != -1);
     }
-    
+    /**
+        @brief DoFire is called when a bot should shoot and decides which weapon is used and whether the bot shoots at all.
+    */
     void ArtificialController::doFire()
     {
@@ -1027,7 +1031,7 @@
                 bSetupWorked=true;
         }
-        else if(this->getControllableEntity()&&(numberOfWeapons>0)&&this->bShooting_ && this->isCloseAtTarget(1000) && this->isLookingAtTarget(math::pi / 20.0f))
-        {
-            if (this->isCloseAtTarget(140) && this->isLookingAtTarget(math::pi / 20.0f)&&(weapons[1]==1) )
+        else if(this->getControllableEntity()&&(numberOfWeapons>0)&&this->bShooting_ && this->isCloseAtTarget(1000 + botlevel_*200) && this->isLookingAtTarget(math::pi / 20.0f))
+        {
+            if (this->isCloseAtTarget(130) && this->isLookingAtTarget(math::pi / 20.0f)&&(weapons[1]==1) )
                 this->getControllableEntity()->fire(1); //ai uses lens flare if they're close enough to the target
 
@@ -1037,4 +1041,7 @@
         }
     }
+    /**
+        @brief Information gathering: Which weapons are ready to use?
+    */
     void ArtificialController::setupWeapons()
     {
@@ -1057,3 +1064,13 @@
         }
     }
+    
+    void ArtificialController::setBotLevel(float level)
+    {
+        if (level < 1)
+	    this->botlevel_ = 1 ; 
+	else if (level > 10)
+	    this->botlevel_ = 10;
+	else
+            this->botlevel_ = level;
+    }
 }
Index: code/branches/ai/src/orxonox/controllers/ArtificialController.h
===================================================================
--- code/branches/ai/src/orxonox/controllers/ArtificialController.h	(revision 7832)
+++ code/branches/ai/src/orxonox/controllers/ArtificialController.h	(revision 7833)
@@ -80,4 +80,7 @@
 	    
             virtual void doFire();
+	    void setBotLevel(float level=1.0f);
+	    inline float getBotLevel() const
+                { return this->botlevel_; }
 
         protected:
@@ -144,4 +147,5 @@
             int numberOfWeapons;
             int weapons[WeaponSystem::MAX_WEAPON_MODES];
+	    float botlevel_; //< Makes the level of a bot configurable. 
 
         private:
