Index: code/branches/ai/src/modules/weapons/projectiles/Rocket.cc
===================================================================
--- code/branches/ai/src/modules/weapons/projectiles/Rocket.cc	(revision 8239)
+++ code/branches/ai/src/modules/weapons/projectiles/Rocket.cc	(revision 8701)
@@ -59,4 +59,5 @@
         this->bDestroy_ = false;
         this->lifetime_ = 100;
+        this->bIsRocket=true;
 
         if (GameMode::isMaster())
@@ -115,4 +116,5 @@
     Rocket::~Rocket()
     {
+        this->bIsRocket=false;
         if(this->isInitialized())
         {
Index: code/branches/ai/src/orxonox/controllers/AIController.cc
===================================================================
--- code/branches/ai/src/orxonox/controllers/AIController.cc	(revision 8239)
+++ code/branches/ai/src/orxonox/controllers/AIController.cc	(revision 8701)
@@ -35,5 +35,5 @@
 #include "worldentities/pawns/Pawn.h"
 
-//Todo: Bot soll pickupspawner besuchen können, falls Pickup vorhanden
+//Todo: Bot soll pickupspawner besuchen können, falls Pickup vorhanden --modules/weapons/
 namespace orxonox
 {
@@ -205,11 +205,49 @@
         float random;
         float maxrand = 100.0f / ACTION_INTERVAL;
-	
+        
         if (!this->isActive())
             return;
 
-        if (this->state_ == MASTER)
-        {
-            if (this->specificMasterAction_ ==  NONE)
+        if(this->mode_ == DEFAULT)
+	{
+            if (this->state_ == MASTER)
+            {
+                if (this->specificMasterAction_ ==  NONE)
+                {
+                    if (this->target_)
+                    {
+                        if (!this->target_->getRadarVisibility()) /* So AI won't shoot invisible Spaceships */
+                            this->forgetTarget();
+                        else
+                        {
+                            this->aimAtTarget();
+                            random = rnd(maxrand);
+                            if(this->botlevel_*100 > random)
+                                this->follow();//If a bot is shooting a player, it shouldn't let him go away easily.
+                        }
+                    }
+
+                    if (this->bHasTargetPosition_)
+                        this->moveToTargetPosition();
+
+                    this->doFire();
+                }
+
+                if (this->specificMasterAction_  == TURN180)
+                    this->turn180();
+
+                if (this->specificMasterAction_ == SPIN)
+                    this->spin();
+                if (this->specificMasterAction_ == FOLLOW)
+                    this->follow();
+            }
+
+            if (this->state_ == SLAVE)
+            {
+                if (this->bHasTargetPosition_)
+                    this->moveToTargetPosition();
+            }
+
+            if (this->state_ == FREE)
             {
                 if (this->target_)
@@ -223,5 +261,5 @@
                         if(this->botlevel_*100 > random)
                             this->follow();//If a bot is shooting a player, it shouldn't let him go away easily.
-                    }
+                     }
                 }
 
@@ -231,43 +269,23 @@
                 this->doFire();
             }
-
-            if (this->specificMasterAction_  == TURN180)
-                    this->turn180();
-
-            if (this->specificMasterAction_ == SPIN)
-                    this->spin();
-            if (this->specificMasterAction_ == FOLLOW)
-                    this->follow();
-        }
-
-        if (this->state_ == SLAVE)
-        {
-            if (this->bHasTargetPosition_)
-                this->moveToTargetPosition();
-        }
-
-        if (this->state_ == FREE)
-        {
-            if (this->target_)
-            {
-                if (!this->target_->getRadarVisibility()) /* So AI won't shoot invisible Spaceships */
-                    this->forgetTarget();
-                else
-                {
-                    this->aimAtTarget();
-                    random = rnd(maxrand);
-                    if(this->botlevel_*100 > random)
-                        this->follow();//If a bot is shooting a player, it shouldn't let him go away easily.
+        }//END_OF DEFAULT MODE
+        else if (this->mode_ == ROCKET)
+        {   
+            ControllableEntity *controllable = this->getControllableEntity(); 
+            if(controllable)
+            {
+                 if(controllable->getRocket())//Check wether the bot is controlling the rocket.
+                 {
+                     this->follow(); //TODO: CHECK: does follow make the bot crash into the target_ ?
                  }
-            }
-
-            if (this->bHasTargetPosition_)
-                this->moveToTargetPosition();
-
-            this->doFire();
-        }
-
+                 else
+                     this->mode_ = DEFAULT;//no rocket -> get out of rocket mode
+            }
+            else
+                this->mode_ = DEFAULT;//If bot dies -> getControllableEntity == NULL -> get out of ROCKET mode
+        }//END_OF ROCKET MODE
         SUPER(AIController, tick, dt);
     }
 
 }
+
Index: code/branches/ai/src/orxonox/controllers/AIController.h
===================================================================
--- code/branches/ai/src/orxonox/controllers/AIController.h	(revision 8239)
+++ code/branches/ai/src/orxonox/controllers/AIController.h	(revision 8701)
@@ -55,2 +55,3 @@
 
 #endif /* _AIController_H__ */
+
Index: code/branches/ai/src/orxonox/controllers/ArtificialController.cc
===================================================================
--- code/branches/ai/src/orxonox/controllers/ArtificialController.cc	(revision 8239)
+++ code/branches/ai/src/orxonox/controllers/ArtificialController.cc	(revision 8701)
@@ -88,4 +88,5 @@
 	this->numberOfWeapons = 0;
 	this->botlevel_ = 1.0f;
+	this->mode_ = DEFAULT;
     }
 
@@ -1034,10 +1035,19 @@
         else if(this->getControllableEntity()&&(numberOfWeapons>0)&&this->bShooting_ && this->isCloseAtTarget((1 + 2*botlevel_)*1000) && this->isLookingAtTarget(math::pi / 20.0f))
         {
-            if (this->isCloseAtTarget(130) && this->isLookingAtTarget(math::pi / 20.0f)&&(weapons[1]==1) )
+            /*if (this->isCloseAtTarget(130) && this->isLookingAtTarget(math::pi / 20.0f)&&(weapons[1]==1) )
+            {//LENSFLARE: short range weapon     
                 this->getControllableEntity()->fire(1); //ai uses lens flare if they're close enough to the target
-
-          //default fire (laser)
-          else if ((weapons[0]==0))
-               this->getControllableEntity()->fire(0);
+            }
+            else if(this->isLookingAtTarget(math::pi / 20.0f)&&(weapons[3]==3)&& this->isCloseAtTarget(260) &&projectiles[3] )*/
+            {//ROCKET: mid range weapon
+                //TODO: Which weapon is the rocket? How many rockets are available?
+                this->mode_ = ROCKET;
+                //TODO: this->rockettimer->start()
+                this->getControllableEntity()->fire(3);//launch rocket
+                this->projectiles[3]-=1;//decrease ammo !!
+            }
+           
+            /*else if ((weapons[0]==0))//LASER: default weapon
+                this->getControllableEntity()->fire(0);*/
         }
     }
@@ -1045,5 +1055,5 @@
         @brief Information gathering: Which weapons are ready to use?
     */
-    void ArtificialController::setupWeapons()
+    void ArtificialController::setupWeapons() //TODO: Make this function generic!! (at the moment is is based on conventions)
     {
         if(this->getControllableEntity())
@@ -1057,4 +1067,5 @@
                       {
                           weapons[i]=i;
+			  projectiles[i]=1;//TODO: how to express infinite ammo? how to get data??
                           numberOfWeapons++;
                       }
@@ -1062,4 +1073,5 @@
                           weapons[i]=-1;
                  }
+                 //pawn->weaponSystem_->getMunition(SubclassIdentifier< Munition > *identifier)->getNumMunition (WeaponMode *user);
             }
         }
@@ -1070,8 +1082,8 @@
     {
         if (level < 0.0f)
-	    this->botlevel_ = 0.0f; 
-	else if (level > 1.0f)
-	    this->botlevel_ = 1.0f;
-	else
+            this->botlevel_ = 0.0f; 
+        else if (level > 1.0f)
+            this->botlevel_ = 1.0f;
+        else
             this->botlevel_ = level;
     }
@@ -1084,2 +1096,3 @@
     
 }
+
Index: code/branches/ai/src/orxonox/controllers/ArtificialController.h
===================================================================
--- code/branches/ai/src/orxonox/controllers/ArtificialController.h	(revision 8239)
+++ code/branches/ai/src/orxonox/controllers/ArtificialController.h	(revision 8701)
@@ -146,7 +146,11 @@
             bool bShooting_;
 	    
-            int numberOfWeapons;
+            int numberOfWeapons;//< Used for weapon init function. Displayes number of weapons available for a bot.
             int weapons[WeaponSystem::MAX_WEAPON_MODES];
+	    int projectiles[WeaponSystem::MAX_WEAPON_MODES];
 	    float botlevel_; //< Makes the level of a bot configurable. 
+
+            enum Mode {DEFAULT, ROCKET, DEFENCE, MOVING};//TODO; implement DEFENCE, MOVING modes
+            Mode mode_;
 
         private:
@@ -157,2 +161,3 @@
 
 #endif /* _ArtificialController_H__ */
+
Index: code/branches/ai/src/orxonox/worldentities/ControllableEntity.cc
===================================================================
--- code/branches/ai/src/orxonox/worldentities/ControllableEntity.cc	(revision 8239)
+++ code/branches/ai/src/orxonox/worldentities/ControllableEntity.cc	(revision 8701)
@@ -88,4 +88,5 @@
         this->setPriority( Priority::VeryHigh );
         this->registerVariables();
+        this->bIsRocket=false;
     }
 
Index: code/branches/ai/src/orxonox/worldentities/ControllableEntity.h
===================================================================
--- code/branches/ai/src/orxonox/worldentities/ControllableEntity.h	(revision 8239)
+++ code/branches/ai/src/orxonox/worldentities/ControllableEntity.h	(revision 8701)
@@ -155,4 +155,6 @@
                 { return this->target_.get(); }
             void setTargetInternal( uint32_t targetID );
+            inline bool getRocket() const
+                {return this-> bIsRocket;}
 
         protected:
@@ -168,4 +170,5 @@
 
             Ogre::SceneNode* cameraPositionRootNode_;
+            bool bIsRocket; //Workaround to see, if the controllable entity is a Rocket.
 
         private:
