Index: code/trunk/src/modules/weapons/weaponmodes/CMakeLists.txt
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/CMakeLists.txt	(revision 11099)
+++ code/trunk/src/modules/weapons/weaponmodes/CMakeLists.txt	(revision 11108)
@@ -7,4 +7,5 @@
   SplitGun.cc
   IceGun.cc
+  FlameGun.cc
   RocketFire.cc
   RocketFireOld.cc
Index: code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.cc	(revision 11099)
+++ code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.cc	(revision 11108)
@@ -59,5 +59,7 @@
         this->speed_ = 750.0f;
         this->delay_ = 0.0f;
+        this->timerStarted_ = false;
         this->setMunitionName("FusionMunition");
+        this->setFireSound("sounds/Weapon_EnergyDrink.ogg");
 
         this->delayTimer_.setTimer(1.0f, false, createExecutor(createFunctor(&EnergyDrink::shot, this)));
@@ -93,5 +95,19 @@
     void EnergyDrink::fire()
     {
-        this->delayTimer_.startTimer();
+        if (!timerStarted_)
+        {
+            this->delayTimer_.startTimer();
+            this->timerStarted_ = true;
+        }
+    }
+
+    bool EnergyDrink::fire(float* reloadTime)
+    {
+        if (!timerStarted_)
+        {
+            return WeaponMode::fire(reloadTime);
+        }
+
+        return false;
     }
 
@@ -102,4 +118,6 @@
     void EnergyDrink::shot()
     {
+        this->timerStarted_ = false;
+
         // Create the projectile
         Projectile* projectile = new Projectile(this->getContext());
Index: code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.h	(revision 11099)
+++ code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.h	(revision 11108)
@@ -57,4 +57,5 @@
             virtual ~EnergyDrink() {}
 
+            virtual bool fire(float* reloadTime) override;
             virtual void fire() override;
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
@@ -89,4 +90,5 @@
             float delay_; //!< The firing delay.
             Timer delayTimer_; //!< The timer to delay the firing.
+            bool timerStarted_;
     };
 }
Index: code/trunk/src/modules/weapons/weaponmodes/FlameGun.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/FlameGun.cc	(revision 11108)
+++ code/trunk/src/modules/weapons/weaponmodes/FlameGun.cc	(revision 11108)
@@ -0,0 +1,136 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabien Vultier
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file FlameGun.cc
+    @brief Implementation of the FlameGun class.
+*/
+
+#include "FlameGun.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "weaponsystem/Weapon.h"
+#include "weaponsystem/WeaponPack.h"
+#include "weaponsystem/WeaponSystem.h"
+#include "worldentities/pawns/Pawn.h"
+
+#include "weapons/projectiles/FlameGunProjectile.h"
+
+namespace orxonox
+{
+    RegisterClass(FlameGun);
+
+    const int FlameGun::PROJECTILES_PER_FIRE = 3;
+
+    FlameGun::FlameGun(Context* context) : WeaponMode(context)
+    {
+        RegisterObject(FlameGun);
+
+        this->reloadTime_ = 0.1f;
+        this->damage_ = 0.0f;
+        this->speed_ = 550.0f;
+        this->lifetime_ = 1.0;
+        this->sideAcceleration_ = 2000.0;
+
+        this->setMunitionName("FlameMunition");
+        this->setFireSound("sounds/Weapon_FlameGun.ogg");
+
+        hudImageString_ = "Orxonox/WSHUD_WM_FlameGun";
+    }
+
+    FlameGun::~FlameGun()
+    {
+    }
+
+    /**
+    @brief
+        XMLPort for the FlameGun. You can define how often the projectiles Flame, how many childs should be created per Flame, the spread and the time between two Flames.
+    */
+    void FlameGun::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(FlameGun, XMLPort, xmlelement, mode);
+
+        XMLPortParam(FlameGun, "Lifetime", setLifetime, getLifetime, xmlelement, mode);
+    }
+
+    /**
+    @brief
+        Fires the weapon. Creates a projectile and fires it.
+    */
+    void FlameGun::fire()
+    {
+        this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition());
+
+        Vector3 muzzleDirection = this->getMuzzleDirection();
+        Vector3 directionOffset = muzzleDirection.perpendicular();
+        directionOffset.normalise();
+        Degree angle = Degree(rnd(0,360));
+        directionOffset = Quaternion(angle, muzzleDirection.normalisedCopy()) * directionOffset;
+        directionOffset.normalise();
+
+        FlameGunProjectile* projectile = new FlameGunProjectile(this->getContext());
+
+        projectile->setOrientation(this->getMuzzleOrientation());
+        projectile->setPosition(this->getMuzzlePosition());
+        projectile->setVelocity(muzzleDirection * this->speed_);
+
+        projectile->setLifetime(getLifetime());
+
+        projectile->setShooter(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
+        projectile->setDamage(this->getDamage());
+        projectile->setShieldDamage(this->getShieldDamage());
+        projectile->setHealthDamage(this->getHealthDamage());
+
+        angle = Degree(360.0/PROJECTILES_PER_FIRE);
+
+        for (int i = 0; i < PROJECTILES_PER_FIRE; ++i)
+        {
+            FlameGunProjectile* projectile = new FlameGunProjectile(this->getContext());
+
+            projectile->setOrientation(this->getMuzzleOrientation());
+            projectile->setPosition(this->getMuzzlePosition());
+            projectile->setVelocity(muzzleDirection * this->speed_);
+            projectile->setAcceleration(directionOffset*sideAcceleration_);
+
+            projectile->setLifetime(getLifetime());
+
+            projectile->setShooter(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
+            projectile->setDamage(this->getDamage());
+            projectile->setShieldDamage(this->getShieldDamage());
+            projectile->setHealthDamage(this->getHealthDamage());
+
+            directionOffset = Quaternion(angle, muzzleDirection.normalisedCopy()) * directionOffset;
+            directionOffset.normalise();
+        }
+
+
+
+        
+    }
+}
Index: code/trunk/src/modules/weapons/weaponmodes/FlameGun.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/FlameGun.h	(revision 11108)
+++ code/trunk/src/modules/weapons/weaponmodes/FlameGun.h	(revision 11108)
@@ -0,0 +1,73 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabien Vultier
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file FlameGun.h
+    @brief Definition of the FlameGun class.
+*/
+
+#ifndef _FlameGun_H__
+#define _FlameGun_H__
+
+#include "weapons/WeaponsPrereqs.h"
+#include "weaponsystem/WeaponMode.h"
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        A WeaponMode that fires burning projectiles.
+    @author
+        Fabien Vultier
+    @ingroup WeaponsWeaponModes
+    */
+    class _WeaponsExport FlameGun : public WeaponMode
+    {
+        public:
+            FlameGun(Context* context);
+            virtual ~FlameGun();
+
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void fire() override;
+
+            inline void setLifetime(float lifetime)
+                { this->lifetime_ = lifetime; }
+            inline float getLifetime() const
+                { return this->lifetime_; }
+
+       private:
+            float speed_; //The speed of the fired projectile.
+            float lifetime_; //The lifetime of the fired projectile.
+            float sideAcceleration_;
+
+            static const int PROJECTILES_PER_FIRE;
+    };
+}
+
+#endif /* _FlameGun_H__ */
Index: code/trunk/src/modules/weapons/weaponmodes/FusionFire.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/FusionFire.cc	(revision 11099)
+++ code/trunk/src/modules/weapons/weaponmodes/FusionFire.cc	(revision 11108)
@@ -58,4 +58,5 @@
 
         this->setMunitionName("FusionMunition");
+        this->setFireSound("sounds/Weapon_FusionFire.ogg");
 
         hudImageString_ = "Orxonox/WSHUD_WM_FusionFire";
Index: code/trunk/src/modules/weapons/weaponmodes/GravityBombFire.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/GravityBombFire.cc	(revision 11099)
+++ code/trunk/src/modules/weapons/weaponmodes/GravityBombFire.cc	(revision 11108)
@@ -30,5 +30,5 @@
 
         this->setMunitionName("GravityBombMunition");
-        this->setDefaultSoundWithVolume("sounds/Rocket_launch.ogg",0.8);    ///< sets sound of the bomb as it is fired.
+        this->setFireSound("sounds/Rocket_launch.ogg",0.8);    ///< sets sound of the bomb as it is fired.
 
         hudImageString_ = "Orxonox/WSHUD_WM_GravityBombFire";
Index: code/trunk/src/modules/weapons/weaponmodes/HsW01.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/HsW01.cc	(revision 11099)
+++ code/trunk/src/modules/weapons/weaponmodes/HsW01.cc	(revision 11108)
@@ -62,5 +62,4 @@
         this->setMunitionName("LaserMunition");
         this->mesh_ = "laserbeam.mesh";
-        this->sound_ = "sounds/Weapon_HsW01.ogg";
 
 
@@ -68,5 +67,6 @@
         this->delayTimer_.stopTimer();
 
-        this->setDefaultSound(this->sound_);
+        this->setFireSound("sounds/Weapon_HsW01.ogg");
+        this->setReloadSound("sounds/Reload_HsW01.ogg", 0.5);
 
         hudImageString_ = "Orxonox/WSHUD_WM_HsW01";
Index: code/trunk/src/modules/weapons/weaponmodes/IceGun.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/IceGun.cc	(revision 11099)
+++ code/trunk/src/modules/weapons/weaponmodes/IceGun.cc	(revision 11108)
@@ -60,5 +60,6 @@
 
         this->setMunitionName("IceMunition");
-        this->setDefaultSound("sounds/Weapon_LightningGun.ogg");
+        this->setFireSound("sounds/Weapon_LightningGun.ogg");
+        this->setReloadSound("sounds/Reload_IceGun.ogg", 0.4);
 
         hudImageString_ = "Orxonox/WSHUD_WM_IceGun";
Index: code/trunk/src/modules/weapons/weaponmodes/LaserFire.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/LaserFire.cc	(revision 11099)
+++ code/trunk/src/modules/weapons/weaponmodes/LaserFire.cc	(revision 11108)
@@ -41,5 +41,5 @@
 #include "worldentities/pawns/Pawn.h"
 
-#include "weapons/projectiles/ParticleProjectile.h"
+#include "weapons/projectiles/BillboardProjectile.h"
 
 namespace orxonox
@@ -56,4 +56,6 @@
 
         this->setMunitionName("LaserMunition");
+        this->setFireSound("sounds/Weapon_LaserFire.ogg");
+        this->setReloadSound("sounds/Reload_LaserFire.ogg", 0.8);
 
         hudImageString_ = "Orxonox/WSHUD_WM_LaserFire";
@@ -66,5 +68,5 @@
     void LaserFire::fire()
     {
-        ParticleProjectile* projectile = new ParticleProjectile(this->getContext());
+        BillboardProjectile* projectile = new BillboardProjectile(this->getContext());
 
         this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition());
Index: code/trunk/src/modules/weapons/weaponmodes/LightningGun.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 11099)
+++ code/trunk/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 11108)
@@ -55,5 +55,5 @@
 
         this->setMunitionName("LightningMunition");
-        this->setDefaultSound("sounds/Weapon_LightningGun.ogg");
+        this->setFireSound("sounds/Weapon_LightningGun.ogg");
 
         hudImageString_ = "Orxonox/WSHUD_WM_LightningGun";
Index: code/trunk/src/modules/weapons/weaponmodes/MineGun.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/MineGun.cc	(revision 11099)
+++ code/trunk/src/modules/weapons/weaponmodes/MineGun.cc	(revision 11108)
@@ -57,5 +57,5 @@
 
         this->setMunitionName("MineMunition");
-        this->setDefaultSound("sounds/mineactivate.ogg");
+        this->setFireSound("sounds/mineactivate.ogg");
 
         hudImageString_ = "Orxonox/WSHUD_WM_MineGun";
Index: code/trunk/src/modules/weapons/weaponmodes/SimpleRocketFire.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/SimpleRocketFire.cc	(revision 11099)
+++ code/trunk/src/modules/weapons/weaponmodes/SimpleRocketFire.cc	(revision 11108)
@@ -62,5 +62,5 @@
 
         this->setMunitionName("RocketMunition");
-        this->setDefaultSoundWithVolume("sounds/Rocket_launch.ogg",0.4f);
+        this->setFireSound("sounds/Rocket_launch.ogg",0.4f);
         // The firing sound of the Rocket is played in Rocket.cc (because of OpenAl sound positioning)
 
Index: code/trunk/src/modules/weapons/weaponmodes/SplitGun.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/SplitGun.cc	(revision 11099)
+++ code/trunk/src/modules/weapons/weaponmodes/SplitGun.cc	(revision 11108)
@@ -61,5 +61,6 @@
 
         this->setMunitionName("SplitMunition");
-        this->setDefaultSound("sounds/Weapon_LightningGun.ogg");
+        this->setFireSound("sounds/Weapon_SplitGun.ogg", 0.5);
+        this->setReloadSound("sounds/Reload_SplitGun.ogg", 0.8);
 
         hudImageString_ = "Orxonox/WSHUD_WM_SplitGun";
