Index: code/branches/ai2/src/orxonox/controllers/AIController.cc
===================================================================
--- code/branches/ai2/src/orxonox/controllers/AIController.cc	(revision 8735)
+++ code/branches/ai2/src/orxonox/controllers/AIController.cc	(revision 8736)
@@ -211,4 +211,5 @@
             this->resetDeathFlag();
         }
+        this->boostControl();//TEST
         float random;
         float maxrand = 100.0f / ACTION_INTERVAL;
@@ -281,5 +282,5 @@
                 if(controllable->getRocket())//Check wether the bot is controlling the rocket and if the timeout is over.
                 {
-                    this->follow(); //TODO: CHECK: does follow make the bot crash into the target_ ?
+                    this->follow();
                     this->timeout_ -= dt;
                     if((timeout_< 0)||(!target_))//Check if the timeout is over or target died.
Index: code/branches/ai2/src/orxonox/controllers/ArtificialController.cc
===================================================================
--- code/branches/ai2/src/orxonox/controllers/ArtificialController.cc	(revision 8735)
+++ code/branches/ai2/src/orxonox/controllers/ArtificialController.cc	(revision 8736)
@@ -39,4 +39,5 @@
 #include "worldentities/pawns/Pawn.h"
 #include "worldentities/pawns/TeamBaseMatchBase.h"
+#include "worldentities/pawns/SpaceShip.h"
 #include "gametypes/TeamDeathmatch.h"
 #include "gametypes/Dynamicmatch.h"
@@ -47,4 +48,5 @@
 #include "weaponsystem/WeaponPack.h"
 #include "weaponsystem/Weapon.h"
+
 
 namespace orxonox
@@ -1038,29 +1040,28 @@
         {
             this->setupWeapons();
-            if(numberOfWeapons>0)
-                bSetupWorked=true;
-        }
-        else if(this->getControllableEntity()&&(numberOfWeapons>0)&&this->bShooting_ && this->isCloseAtTarget((1 + 2*botlevel_)*1000) && this->isLookingAtTarget(math::pi / 20.0f))
-        {
-            if (this->isCloseAtTarget(130) &&weapons[1] )
+            if(numberOfWeapons > 0)
+                bSetupWorked = true;
+        }
+        else if(this->getControllableEntity() && (numberOfWeapons>0)&&this->bShooting_ && this->isCloseAtTarget((1 + 2*botlevel_)*1000) && this->isLookingAtTarget(math::pi / 20.0f))
+        {
+            float random = rnd(1);//
+            if (this->isCloseAtTarget(130) && weapons[1] )
             {//LENSFLARE: short range weapon     
                 this->getControllableEntity()->fire(1); //ai uses lens flare if they're close enough to the target
             }
-            else if(weapons[3]&& this->isCloseAtTarget(400) /*&&projectiles[3]*/ )
+            else if(weapons[3] && this->isCloseAtTarget(400) && (projectiles[3] > 0) && (random < this->botlevel_) )
             {//ROCKET: mid range weapon
-                //TODO: How many rockets are available?
-                this->mode_ = ROCKET;//Vector-implementation: mode_.push_back(ROCKET);
-                this->getControllableEntity()->fire(3);//launch rocket
-                if(this->getControllableEntity()&&this->target_)//after fire(3) getControllableEntity() refers to the rocket!
+                this->mode_ = ROCKET; //Vector-implementation: mode_.push_back(ROCKET);
+                this->getControllableEntity()->fire(3); //launch rocket
+                if(this->getControllableEntity() && this->target_) //after fire(3) is called, getControllableEntity() refers to the rocket!
                 {
                     float speed = this->getControllableEntity()->getVelocity().length() - target_->getVelocity().length();
                     if(!speed) speed = 0.1f;
                     float distance = target_->getPosition().length() - this->getControllableEntity()->getPosition().length();
-                    this->timeout_= distance/speed*sgn(speed*distance) + 1.8f;//predicted time of target hit (+ tolerance)
+                    this->timeout_= distance/speed*sgn(speed*distance) + 1.8f; //predicted time of target hit (+ tolerance)
                 }
                 else
-                    this->timeout_ = 4.0f;//TODO: find better default value
-                
-                this->projectiles[3]-=1;//decrease ammo !!
+                    this->timeout_ = 4.0f; //TODO: find better default value
+                this->projectiles[3] -= 1; //decrease ammo
             }
             else if (weapons[0])//LASER: default weapon
@@ -1079,8 +1080,8 @@
             if(pawn)
             {
-                for(unsigned int i=0; i<WeaponSystem::MAX_WEAPON_MODES; i++)
+                for(unsigned int i=0; i < WeaponSystem::MAX_WEAPON_MODES; i++)
                 {
-                    //const std::string wpn = getWeaponname(i, pawn); COUT(0)<<wpn<< std::endl;//Temporary debug info.
-                    /*if(wpn=="")
+                    const std::string wpn = getWeaponname(i, pawn); COUT(0)<<wpn<< std::endl;//Temporary debug info.
+                    /*if(wpn=="") //future, more generic implementation; until now, only LaserMunition works. Is this a bug??
                         weapons[i]=false;
                     else if(wpn=="LaserMunition")//other munitiontypes are not defined yet :-(
@@ -1097,10 +1098,10 @@
                     if(pawn->getWeaponSet(i)) //main part: find which weapons a pawn can use; hard coded at the moment!
                     {
-                        weapons[i]=true;
-                        projectiles[i]=1;//TODO: how to express infinite ammo? how to get data?? getWeaponmode(i)->getMunition()->getNumMunition(WeaponMode* user)
+                        weapons[i] = true;
+                        projectiles[i] = 10; //TODO: how to get data?? getWeaponmode(i)->getMunition()->getNumMunition(WeaponMode* user)
                           numberOfWeapons++;
                     }
                     else
-                        weapons[i]=-false;
+                        weapons[i] = false;
                 }
                  //pawn->weaponSystem_->getMunition(SubclassIdentifier< Munition > *identifier)->getNumMunition (WeaponMode *user);
@@ -1143,3 +1144,13 @@
     }
     
+    void ArtificialController::boostControl()
+    {
+        SpaceShip* ship = orxonox_cast<SpaceShip*>(this->getControllableEntity());
+        if(ship == NULL) return;
+        if(ship->getBoostPower()*1.5f > ship->getInitialBoostPower() )//upper limit ->boost
+            this->getControllableEntity()->boost(true);
+        else if(ship->getBoostPower()*4.0f < ship->getInitialBoostPower())//lower limit ->do not boost
+            this->getControllableEntity()->boost(false);
+    }
+
 }
Index: code/branches/ai2/src/orxonox/controllers/ArtificialController.h
===================================================================
--- code/branches/ai2/src/orxonox/controllers/ArtificialController.h	(revision 8735)
+++ code/branches/ai2/src/orxonox/controllers/ArtificialController.h	(revision 8736)
@@ -142,4 +142,5 @@
 
             static bool sameTeam(ControllableEntity* entity1, ControllableEntity* entity2, Gametype* gametype); // hack
+            void boostControl();
 
             bool bHasTargetPosition_;
