Index: /code/branches/sagerjFS16/data/levels/emptyLevel.oxw
===================================================================
--- /code/branches/sagerjFS16/data/levels/emptyLevel.oxw	(revision 11188)
+++ /code/branches/sagerjFS16/data/levels/emptyLevel.oxw	(revision 11189)
@@ -13,5 +13,5 @@
 
 <?lua
-  include("templates/spaceshipEscort.oxt")
+  include("templates/spaceshipEscortDischarger.oxt")
 ?>
 
@@ -28,5 +28,5 @@
 
     <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
-    <SpawnPoint team=0 position="-200,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipescort />
+    <SpawnPoint team=0 position="-200,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipescortdischarger />
     
   </Scene>
Index: /code/branches/sagerjFS16/data/levels/includes/weaponSettingsEscort.oxi
===================================================================
--- /code/branches/sagerjFS16/data/levels/includes/weaponSettingsEscort.oxi	(revision 11188)
+++ /code/branches/sagerjFS16/data/levels/includes/weaponSettingsEscort.oxi	(revision 11189)
@@ -24,5 +24,5 @@
             munitionpershot=1
             delay=0
-            damage=0.5
+            damage=0.8
             material="Flares/point_lensflare"
             muzzleoffset=" 1.6, 1.3, -2.0"
Index: /code/branches/sagerjFS16/data/levels/includes/weaponSettingsEscortDischarger.oxi
===================================================================
--- /code/branches/sagerjFS16/data/levels/includes/weaponSettingsEscortDischarger.oxi	(revision 11189)
+++ /code/branches/sagerjFS16/data/levels/includes/weaponSettingsEscortDischarger.oxi	(revision 11189)
@@ -0,0 +1,50 @@
+    <weaponslots>
+      <WeaponSlot position="-9.2,2,-13" />
+      <WeaponSlot position=" 9.2,2,-13" />
+    </weaponslots>
+    <weaponsets>
+      <WeaponSet firemode=0 />
+      <WeaponSet firemode=1 />
+    </weaponsets>
+    <weaponpacks>
+      <WeaponPack>
+        <links>
+          <DefaultWeaponmodeLink firemode=0 weaponmode=0 />
+          <DefaultWeaponmodeLink firemode=1 weaponmode=1 />
+        </links>
+        <Weapon>
+          <Discharger
+            mode=0
+            munitionpershot=1
+            delay=0
+            damage=0.8
+            material="Flares/point_lensflare"
+            projectileMesh="LaserBeam2.mesh"
+          />
+        </Weapon>
+        <Weapon>
+          <Discharger
+            mode=0
+            munitionpershot=1
+            delay=0
+            damage=0.8
+            material="Flares/point_lensflare"
+            projectileMesh="LaserBeam2.mesh"
+          />
+        </Weapon>
+      </WeaponPack>
+      <WeaponPack>
+        <links>
+          <DefaultWeaponmodeLink firemode=1 weaponmode=0 />
+        </links>
+      </WeaponPack>
+    </weaponpacks>
+    <munition>
+      <LaserMunition
+        initialmagazines=2
+        maxmagazines=4
+        munitionpermagazine=5
+        replenishamount=2
+        replenishinterval=30
+      />
+    </munition>
Index: /code/branches/sagerjFS16/data/levels/templates/spaceshipEscortDischarger.oxt
===================================================================
--- /code/branches/sagerjFS16/data/levels/templates/spaceshipEscortDischarger.oxt	(revision 11189)
+++ /code/branches/sagerjFS16/data/levels/templates/spaceshipEscortDischarger.oxt	(revision 11189)
@@ -0,0 +1,127 @@
+<Template name=spaceshipescortdischarger>
+  <SpaceShip
+   hudtemplate            = spaceshiphud
+   camerapositiontemplate = spaceshipescortcameras
+   spawnparticlesource    = "Orxonox/fairytwirl"
+   spawnparticleduration  = 3
+   explosionchunks        = 10
+
+   health            = 80
+   maxhealth         = 200
+   initialhealth     = 80
+
+   shieldhealth        = 35
+   initialshieldhealth = 35
+   maxshieldhealth     = 60
+   shieldabsorption    = 0.9
+   shieldrechargerate  = 1
+   shieldrechargewaittime = 1
+
+   primaryThrust     = 150
+   auxilaryThrust    = 30
+   rotationThrust    = 50
+
+   lift = 1;
+   stallSpeed = 220;
+
+   boostPower            = 20
+   boostPowerRate        = 1
+   boostRate             = 5
+   boostCooldownDuration = 10
+
+   shakeFrequency = 15
+   shakeAmplitude = 6
+
+   collisionType     = "dynamic"
+   mass              = 80
+   linearDamping     = 0.7
+   angularDamping    = 0.9999999
+  >
+    <engines>
+      <MultiStateEngine position=" 7.6, 0, 6" template=spaceshipescortengine />
+      <MultiStateEngine position="-7.6, 0, 0" template=spaceshipescortengine />
+    </engines>
+    <attached>
+      <Model position="0,0,0" yaw=90 pitch=0 roll=0 scale=4 mesh="escortShip.mesh" />
+      <Model position="0,0,0" yaw=180 pitch=90 roll=0 scale=4 mesh="escortWeapon.mesh" />
+<!--Model mesh="cube.mesh" mass=10 position="0,0,3" scale3D="10,4,8" />
+<Model mesh="cube.mesh" mass=10 position="12.6,-2,3" scale3D="2.8,2.8,11" />
+<Model mesh="cube.mesh" mass=10 position="-12.6,-2,3" scale3D="2.8,2.8,11" />
+<Model mesh="cube.mesh" mass=10 position="0,0,-12" scale3D="4,4,7" /-->
+    </attached>
+    <collisionShapes>
+      <BoxCollisionShape position="0    ,0 ,  3" halfExtents="10,   4,8" />
+      <BoxCollisionShape position="12.6 ,-2,  3" halfExtents="2.8,2.8,11"/>
+      <BoxCollisionShape position="-12.6,-2,  3" halfExtents="2.8,2.8,11"/>
+      <BoxCollisionShape position="0,     0,-12" halfExtents="4  , 4 ,7" />
+    </collisionShapes>
+    <explosion>
+      <ExplosionPart minspeed=0 maxspeed=0 effect1="orxonox/explosion_flash2" effect2="orxonox/explosion_flame2" />
+      <ExplosionPart minspeed=0 maxspeed=0 effect1="orxonox/explosion_shockwave2" effect2="orxonox/explosion_sparks2" />
+      <ExplosionPart minspeed=0 maxspeed=0 effect1="orxonox/explosion_streak2" effect2="orxonox/explosion_afterglow" />
+
+      <ExplosionPart mesh="explosionparts/escort_part_1.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="explosionparts/escort_part_2.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="explosionparts/escort_part_3.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="explosionparts/escort_part_4.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="explosionparts/escort_part_5.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="explosionparts/escort_part_6.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+    </explosion>
+<?lua
+  include("../includes/weaponSettingsEscortDischarger.oxi")
+?>
+  </SpaceShip>
+</Template>
+
+<Template name=spaceshipescortcameras defaults=0>
+  <SpaceShip>
+    <camerapositions>
+      <CameraPosition position="0,15, 60" drag=true mouselook=true />
+      <CameraPosition position="0,20, 90" drag=true mouselook=true />
+      <CameraPosition position="0,30,120" drag=true mouselook=true />
+    </camerapositions>
+  </SpaceShip>
+</Template>
+
+<Template name=spaceshipescortengine baseclass=MultiStateEngine>
+  <MultiStateEngine
+   boostfactor    = 2.2
+
+   speedfront     = 200
+   speedback      =  70
+   speedleftright =  70
+   speedupdown    =  70
+
+   defEngineSndNormal = "sounds/Engine_low.ogg"
+   defEngineSndBoost = "sounds/Engine_high.ogg"
+
+   accelerationfront     = 700
+   accelerationbrake     = 700
+   accelerationback      =  125
+   accelerationleftright =  125
+   accelerationupdown    =  125
+  >
+    <EffectContainer condition="idle">
+      <WorldSound mainstate="activity" source="sounds/Engine_idle.ogg" looping=1 active=false/>
+       />
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position=" 12, -2, 14" colour="0.2, 0.5, 0.65, 1.0" width=150 length=15 lifetime=2 elements=1 trailmaterial="Trail/backlighttrail" turnontime=2 turnofftime=1 material="Flares/ThrusterFlare1" />
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position="-12, -2, 14" colour="0.2, 0.5, 0.65, 1.0" width=15 length=15 lifetime=2 elements=1 trailmaterial="Trail/backlighttrail" turnontime=2 turnofftime=1 material="Flares/ThrusterFlare1" />
+    </EffectContainer>
+    <EffectContainer condition="not idle">
+      <FadingBillboard mainstate=activity active=false scale=0.09 position="12, -2, 13" colour="0.2, 1.0, 0.65, 1.0" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+      <FadingBillboard mainstate=activity active=false scale=0.09 position="-12, -2, 13" colour="0.2, 1.0, 0.65, 1.0" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+    </EffectContainer>
+    <EffectContainer condition="normal or brake">
+
+    </EffectContainer>
+    <EffectContainer condition="normal or boost">
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position=" 12, -2, 14" colour="0.2, 1.0, 0.65, 1.0" width=5 length=1500 lifetime=2 elements=1 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1" />
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position="-12, -2, 14" colour="0.2, 1.0, 0.65, 1.0" width=15 length=1500 lifetime=2 elements=1 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1" />
+    </EffectContainer>
+    <EffectContainer condition="boost">
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position=" 12, 0, 10" colour="0.6, 0.8, 0.75, 0.7" width=25 length=1000 lifetime=1 elements=30 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Examples/Flare" />
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position="-12, 0, 10" colour="0.6, 0.8, 0.75, 0.7" width=25 length=1000 lifetime=1 elements=30 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Examples/Flare" />
+    </EffectContainer>
+
+  </MultiStateEngine>
+</Template>
Index: /code/branches/sagerjFS16/data/overlays/HUDTemplates3.oxo
===================================================================
--- /code/branches/sagerjFS16/data/overlays/HUDTemplates3.oxo	(revision 11188)
+++ /code/branches/sagerjFS16/data/overlays/HUDTemplates3.oxo	(revision 11189)
@@ -192,5 +192,5 @@
      pickpoint     = "0, 1"
      correctaspect = true
-     iconmaterial  = "Orxonox/BarIconSpeed"
+     iconmaterial  = "Orxonox/BarIconCharge"
     >
       <BarColour position = 0.0 colour = "0.7,0.5,0.2" />
Index: /code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.cc
===================================================================
--- /code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.cc	(revision 11188)
+++ /code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.cc	(revision 11189)
@@ -31,5 +31,4 @@
 #include "util/Convert.h"
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
 #include "worldentities/pawns/Pawn.h"
 #include "overlays/OverlayGroup.h"
@@ -45,46 +44,8 @@
 
         this->owner_ = nullptr;
-        this->bUseBarColour_ = false;
-        this->textOffset_ = Vector2(0.0f, 0.0f);
-        this->textScale_ = 1.0f;
-        this->correspondingMode_ = nullptr;
-
-        this->setIconPosition(Vector2(0.05f,0.5f));
-        this->setIconDimensions(Vector2(0.1f,0.5f));
-
-        this->textoverlay_ = new OverlayText(this->getContext());
-
-        assert(this->textoverlay_.get());
-
-        this->textoverlay_->setCaption("");
-        this->textoverlay_->setAspectCorrection(false);
-
-        positionText();
+        this->correspondingMode_ = nullptr;             // usually no chargeable weapon equipped
     }
 
-    HUDChargeBar::~HUDChargeBar()
-    {
-        if (this->isInitialized())
-        {
-            this->textoverlay_->destroy();
-            this->textoverlay_ = nullptr;
-        }
-    }
-
-    void HUDChargeBar::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(HUDChargeBar, XMLPort, xmlelement, mode);
-
-        XMLPortParam(HUDChargeBar, "showtext",          setTextVisible,          getTextVisible,          xmlelement, mode).defaultValues(true);
-        XMLPortParam(HUDChargeBar, "textfont",          setTextFont,             getTextFont,             xmlelement, mode).defaultValues("Monofur");
-        XMLPortParam(HUDChargeBar, "textusebarcolour",  setTextUseBarColour,     getTextUseBarColour,     xmlelement, mode).defaultValues(false);
-        XMLPortParam(HUDChargeBar, "textcolour",        setTextColour,           getTextColour,           xmlelement, mode).defaultValues(ColourValue(1.0, 1.0, 1.0, 1.0));
-        XMLPortParam(HUDChargeBar, "textalign",         setTextAlignmentString,  getTextAlignmentString,  xmlelement, mode).defaultValues("left");
-        XMLPortParam(HUDChargeBar, "textoffset",        setTextOffset,           getTextOffset,           xmlelement, mode).defaultValues(Vector2::ZERO);
-        XMLPortParam(HUDChargeBar, "textscale",         setTextScale,            getTextScale,            xmlelement, mode).defaultValues(1.0f);
-        XMLPortParam(HUDChargeBar, "textpickpoint",     setTextPickPoint,        getTextPickPoint,        xmlelement, mode).defaultValues(Vector2::ZERO);
-        XMLPortParam(HUDChargeBar, "textrotation",      setTextRotation,         getTextRotation,         xmlelement, mode).defaultValues(0.0f);
-        XMLPortParam(HUDChargeBar, "textspacewidth",    setTextSpaceWidth,       getTextSpaceWidth,       xmlelement, mode).defaultValues(true);
-    }
+    HUDChargeBar::~HUDChargeBar() { }
 
     void HUDChargeBar::tick(float dt)
@@ -94,20 +55,21 @@
         if (this->owner_)
         {
-            if(correspondingMode_ != nullptr){
-                this->setValue( correspondingMode_->getCharges() * 1.0f / correspondingMode_->getMaxCharges() );
-                this->textoverlay_->setCaption(multi_cast<std::string>(static_cast<int>(this->owner_->getHealth())));
+            if(correspondingMode_ != nullptr)                                                                       // if there is a chargeable weapon equipped we want to show the charged amount with a HUDBar
+            {
+                this->setValue( correspondingMode_->getCharges() * 1.0f / correspondingMode_->getMaxCharges() );    // The Value of the HUDBar is the ratio of current Charges and the maximum Charges possible
+                
+                if(this->correspondingMode_->getCharges() > 0)                                                      // The HUDBar should only be visible when we are charging up
+                    this->setVisible(true);
+                }
+                else
+                {
+                    this->setVisible(false);
+                }
             }
-
-            
         }
         else
         {
             this->setValue(0);
-            this->textoverlay_->setCaption("0");
         }
-
-        if (this->bUseBarColour_)
-            this->textoverlay_->setColour(this->getCurrentBarColour());
-
 
     }
@@ -116,4 +78,7 @@
     {
         SUPER(HUDChargeBar, changedOwner);
+
+        this->setVisible(false);
+        this->correspondingMode_ = nullptr;
 
         this->owner_ = orxonox_cast<Pawn*>(this->getOwner());
@@ -141,56 +106,3 @@
         }
     }
-
-    void HUDChargeBar::changedOverlayGroup()
-    {
-        SUPER(HUDChargeBar, changedOverlayGroup);
-
-        this->getOverlayGroup()->addElement(this->textoverlay_.get());
-    }
-
-    void HUDChargeBar::changedVisibility()
-    {
-        SUPER(HUDChargeBar, changedVisibility);
-
-        this->textoverlay_->setVisible(this->isVisible());
-    }
-
-    void HUDChargeBar::changedName()
-    {
-        SUPER(HUDChargeBar, changedName);
-
-        this->textoverlay_->setName(this->getName() + "text");
-    }
-
-    void HUDChargeBar::setTextColour(const ColourValue& colour)
-    {
-        this->textColour_ = colour;
-        if (!this->bUseBarColour_)
-            this->textoverlay_->setColour(colour);
-    }
-
-    void HUDChargeBar::setTextUseBarColour(bool bUseBarColour)
-    {
-        this->bUseBarColour_ = bUseBarColour;
-        if (!bUseBarColour)
-            this->textoverlay_->setColour(this->textColour_);
-    }
-
-    void HUDChargeBar::positionText()
-    {
-        this->textoverlay_->setPosition(this->getPosition() + this->textOffset_*this->getActualSize());
-        this->textoverlay_->setTextSize(this->getActualSize().y*this->textScale_);
-    }
-
-    void HUDChargeBar::positionChanged()
-    {
-        HUDBar::positionChanged();
-        positionText();
-    }
-
-    void HUDChargeBar::sizeChanged()
-    {
-        HUDBar::sizeChanged();
-        positionText();
-    }    
 }
Index: /code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.h
===================================================================
--- /code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.h	(revision 11188)
+++ /code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.h	(revision 11189)
@@ -22,5 +22,5 @@
  *
  *   Author:
- *      Fabian 'x3n' Landau
+ *      Johannes Sager
  *   Co-authors:
  *      ...
@@ -28,13 +28,13 @@
  */
 
-#ifndef _HUDHealthBar_H__
-#define _HUDHealthBar_H__
+#ifndef _HUDChargeBar_H__
+#define _HUDChargeBar_H__
 
 #include "overlays/OverlaysPrereqs.h"
-
 #include "util/Math.h"
 #include "tools/interfaces/Tickable.h"
 #include "overlays/OverlayText.h"
 #include "HUDBar.h"
+
 #include "weaponsystem/WeaponSystem.h"
 #include "weaponsystem/WeaponPack.h"
@@ -44,4 +44,10 @@
 namespace orxonox
 {
+    /**
+    @brief
+        The HUDChargeBar displays the amount of charges of its owner (a @ref Pawn).
+        The length of the bar is given by the ratio of the current charges and the maximal charges of the @ref Pawn.
+    */
+
     class _OverlaysExport HUDChargeBar : public HUDBar, public Tickable
     {
@@ -50,82 +56,13 @@
             virtual ~HUDChargeBar();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             virtual void tick(float dt) override;
             virtual void changedOwner() override;
-            virtual void changedOverlayGroup() override;
-            virtual void changedVisibility() override;
-            virtual void changedName() override;
-
-            inline void setTextFont(const std::string& font)
-                { if (!font.empty()) { this->textoverlay_->setFont(font); } }
-            inline const std::string& getTextFont() const
-                { return this->textoverlay_->getFont(); }
-
-            void setTextColour(const ColourValue& colour);
-            inline const ColourValue& getTextColour() const
-                { return this->textoverlay_->getColour(); }
-
-            void setTextUseBarColour(bool bUseBarColour);
-            inline bool getTextUseBarColour() const
-                { return this->bUseBarColour_; }
-
-            inline void setTextAlignment(OverlayText::Alignment alignment)
-                { this->textoverlay_->setAlignment(alignment); }
-            inline OverlayText::Alignment getTextAlignment() const
-                { return this->textoverlay_->getAlignment(); }
-
-            void setTextAlignmentString(const std::string& alignment)
-                { this->textoverlay_->setAlignmentString(alignment); }
-            std::string getTextAlignmentString() const
-                { return this->textoverlay_->getAlignmentString(); }
-
-            inline void setTextVisible(bool bVisible)
-                { this->textoverlay_->setVisible(bVisible); }
-            inline bool getTextVisible() const
-                { return this->textoverlay_->isVisible(); }
-
-            inline void setTextScale(float scale)
-                { this->textScale_ = scale;
-                  positionText();
-                }
-            inline float getTextScale() const
-                { return this->textScale_; }
-
-            inline void setTextPickPoint(const Vector2& pickpoint)
-                { this->textoverlay_->setPickPoint(pickpoint); }
-            inline Vector2 getTextPickPoint() const
-                { return this->textoverlay_->getPickPoint(); }
-
-            inline void setTextOffset(const Vector2& position)
-                { this->textOffset_ = position;
-                  this->positionText();
-                }
-            inline Vector2 getTextOffset() const
-                { return this->textOffset_; }
-
-            inline void setTextRotation(const Degree& angle)
-                { this->textoverlay_->setRotation(angle); }
-            inline const Degree& getTextRotation() const
-                { return this->textoverlay_->getRotation(); }
-
-            inline void setTextSpaceWidth(float width)
-                { this->textoverlay_->setSpaceWidth(width); }
-            inline float getTextSpaceWidth() const
-                { return this->textoverlay_->getSpaceWidth(); }
 
             inline void setHealthBarOwner(Pawn* owner)
                 { this->owner_ = owner; }
-        protected:
-            virtual void positionChanged() override;
-            virtual void sizeChanged() override;
+        
         private:
-            WeaponMode* correspondingMode_;
-            void positionText();
+            WeaponMode* correspondingMode_;         // pointer on the chargeable weaponmode (=nullptr if no chargeable weapons equipped)
             WeakPtr<Pawn> owner_;
-            StrongPtr<OverlayText> textoverlay_;
-            bool bUseBarColour_;
-            ColourValue textColour_;
-            Vector2 textOffset_;
-            float textScale_;
     };
 }
Index: /code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.cc
===================================================================
--- /code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.cc	(revision 11188)
+++ /code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.cc	(revision 11189)
@@ -21,5 +21,5 @@
  *
  *   Author:
- *      God of everything
+ *      Johannes Sager
  *   Co-authors:
  *    
@@ -51,8 +51,8 @@
         RegisterObject(Discharger);
 
-        this->reloadTime_ = 3.14159f;
-        this->damage_ = 0.0f;
-        this->speed_ = 100.0f;
-        this->chargeable_ = true;
+        this->reloadTime_ = 3.14159f;           // how long you cannot charge after fire
+        this->damage_ = 0.0f;                   // if 0.0f then it uses weaponsettings.oxi
+        this->speed_ = 100.0f;                  // base projectile speed
+        this->chargeable_ = true;               // true if weapon chargeable
 
         this->setMunitionName("LaserMunition");
@@ -70,11 +70,10 @@
         projectile->setOrientation(this->getMuzzleOrientation());
         projectile->setPosition(this->getMuzzlePosition());
-        projectile->setVelocity(this->getMuzzleDirection() * this->speed_ * this->charges_ / 5);
-
+        projectile->setVelocity(this->getMuzzleDirection() * this->speed_ * this->charges_ / 5);// we scale the projectile speed with the current charges / 5
         projectile->setShooter(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
         projectile->setDamage(this->getDamage() * this->charges_);
-        projectile->setShieldDamage(this->getShieldDamage() * this->charges_);
-        projectile->setHealthDamage(this->getHealthDamage() * this->charges_);
-        this->charges_ = 0;
+        projectile->setShieldDamage(this->getShieldDamage() * this->charges_);                  // we scale both types of damage with the current charges as
+        projectile->setHealthDamage(this->getHealthDamage() * this->charges_);                  // well since this is the whole purpose of a chareable weapon
+        this->charges_ = 0;                                                                     // firing "consumes" the current charges (reset after fire)
     }
 }
Index: /code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.h
===================================================================
--- /code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.h	(revision 11188)
+++ /code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.h	(revision 11189)
@@ -21,5 +21,5 @@
  *
  *   Author:
- *       God of everything
+ *       Johannes Sager
  *   Co-authors:
  *      
Index: /code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.cc
===================================================================
--- /code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.cc	(revision 11188)
+++ /code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.cc	(revision 11189)
@@ -24,5 +24,5 @@
  *      Fabian 'x3n' Landau
  *   Co-authors:
- *      ...
+ *      Johannes Sager
  *
  */
@@ -63,7 +63,7 @@
         this->bAutoReload_ = true;
         this->bParallelReload_ = true;
-        this->chargeable_ = false;
-        this->charges_ = 0;
-        this->maxCharges_ = 100;
+        this->chargeable_ = false;              // most weapons are not chargeable
+        this->charges_ = 0;                     // always start with no charges
+        this->maxCharges_ = 100;                // default maximum charges one can have are 100
 
         this->reloadTimer_.setTimer(0.0f, false, createExecutor(createFunctor(&WeaponMode::reloaded, this)));
@@ -123,5 +123,4 @@
     bool WeaponMode::fire(float* reloadTime)
     {
-        orxout() << "--- " << endl;
         (*reloadTime) = this->reloadTime_;
         // Fireing is only possible if this weapon mode is not reloading and there is enough munition
@@ -175,21 +174,27 @@
     {
 
-        if( this->chargeable_)
-        {
-            if(this->charges_ < this->maxCharges_){
-                this->charges_ += 1;
-            }
+        if( this->chargeable_)                                                                                                          // chargeable weapons are supposed to charge on push
+        {
+            this->munition_ = this->weapon_->getWeaponPack()->getWeaponSystem()->getMunition(&this->munitiontype_);                     // updates the pointer to the munition(which we use in the next step)
+            if(this->charges_ < this->maxCharges_ && this->bReloading_ == false && this->munition_->canTakeMunition(1, this))           // charges up unless:
+            {                                                                                                                           // - we are fully charged
+                this->charges_ += 1;                                                                                                    // - we are reloading
+            }                                                                                                                           // - we have no munition
             return false;
-        } else {
+        }
+        else                                                                                                                            // normal (not chargeable) weapons are supposed to fire on push
+        {
             return fire(reloadTime);
         }
     }
 
-    bool WeaponMode::release(float* reloadTime)
-    {
-        if( this->chargeable_)
+    bool WeaponMode::release(float* reloadTime)                 
+    {
+        if( this->chargeable_)                                                                                                          // chargeable weapons are supposed to fire on release
         { 
             return fire(reloadTime);
-        }else{
+        }
+        else                                                                                                                            // normal (not chargeable) weapons should do nothing on release
+        {
             return false;
         }
Index: /code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.h
===================================================================
--- /code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.h	(revision 11188)
+++ /code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.h	(revision 11189)
@@ -24,5 +24,5 @@
  *      Fabian 'x3n' Landau
  *   Co-authors:
- *      ...
+ *      Johannes Sager
  *
  */
@@ -110,9 +110,9 @@
 
             // Fire
-            inline unsigned int getMaxCharges()
+            inline unsigned int getMaxCharges()                 // get the maximum of charges one can have
                 { return this->maxCharges_;}
-            inline unsigned int getCharges()
+            inline unsigned int getCharges()                    // get the current amount of charges
                 { return this->charges_;}
-            inline bool isChargeable()
+            inline bool isChargeable()                          // returns if the weaponmode is chargeable
                 { return this->chargeable_;}
             inline void setDamage(float damage)
@@ -176,11 +176,11 @@
             unsigned int initialMagazines_;
             unsigned int munitionPerShot_;
-            unsigned int charges_;
-            unsigned int maxCharges_;
+            unsigned int charges_;                  // current amount of charges only matters for chargeable weapons(chargeable == true)
+            unsigned int maxCharges_;               // maximum amount of charges (is initialized with 100 in weaponmode.cc) only matters for chargeable weapons(chargeable == true)
 
             float reloadTime_;
-            bool bAutoReload_; // If true, the weapon reloads the magazine automatically.
-            bool bParallelReload_; // If true, the weapon reloads in parallel to the magazine reloading.
-            bool chargeable_; // If true, the weapon fires at release instead at push(where he charges up)
+            bool bAutoReload_;                      // If true, the weapon reloads the magazine automatically.
+            bool bParallelReload_;                  // If true, the weapon reloads in parallel to the magazine reloading.
+            bool chargeable_;                       // If true, the weapon charges up on push and fires on release
 
             float damage_;
@@ -202,14 +202,14 @@
 
             Timer reloadTimer_;
-            bool bReloading_; // If true, this weapon mode is marked as reloading.
+            bool bReloading_;                       // If true, this weapon mode is marked as reloading.
 
             Vector3 muzzlePosition_;
             Quaternion muzzleOrientation_;
 
-            std::string fireSoundPath_; // The path of the sound played when fireing
-            float fireSoundVolume_; // The volume of the sound played when fireing
-            std::vector<WorldSound*> fireSounds_; // List of sounds used by the weapon mode. Because multiple sounds may overlap, we need mor than one WorldSound instance.
-            std::string reloadSoundPath_; // The path of the sound played when reloading
-            float reloadSoundVolume_; // The volume of the sound played when reloading
+            std::string fireSoundPath_;             // The path of the sound played when fireing
+            float fireSoundVolume_;                 // The volume of the sound played when fireing
+            std::vector<WorldSound*> fireSounds_;   // List of sounds used by the weapon mode. Because multiple sounds may overlap, we need mor than one WorldSound instance.
+            std::string reloadSoundPath_;           // The path of the sound played when reloading
+            float reloadSoundVolume_;               // The volume of the sound played when reloading
             WorldSound* reloadSound_;
     };
