Index: code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.cc
===================================================================
--- code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.cc	(revision 12274)
+++ code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.cc	(revision 12284)
@@ -21,5 +21,5 @@
  *
  *   Author:
- *      Joel Smely
+ *      Hagen Seifert
  *   Co-authors:
  *      simonmie
@@ -35,10 +35,16 @@
 
 #include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "core/command/Executor.h"
+
+#include "graphics/Model.h"
 #include "weaponsystem/Weapon.h"
 #include "weaponsystem/WeaponPack.h"
 #include "weaponsystem/WeaponSystem.h"
+#include "worldentities/WorldEntity.h"
 #include "worldentities/pawns/Pawn.h"
 
 #include "weapons/projectiles/HoverGunProjectile.h"
+#include "weapons/MuzzleFlash.h"
 
 namespace orxonox
@@ -50,12 +56,19 @@
         RegisterObject(HoverGun);
 
-        this->reloadTime_ = 1.0f;
-        this->damage_ = 0.0f;
+        this->reloadTime_ = 0.25f;
+        this->damage_ = 0.0f; //default 15
         this->speed_ = 750.0f;
+        this->delay_ = 0.0f;
+        this->setMunitionName("LaserMunition");
+        this->mesh_ = "laserbeam.mesh";
 
-        this->setMunitionName("HoverMunition");
-        this->setFireSound("sounds/Weapon_HoverGun.ogg");
 
-        hudImageString_ = "Orxonox/WSHUD_WM_HoverGun";
+        this->delayTimer_.setTimer(this->delay_, false, createExecutor(createFunctor(&HoverGun::shot, this)));
+        this->delayTimer_.stopTimer();
+
+        this->setFireSound("sounds/Weapon_HsW01.ogg");
+        this->setReloadSound("sounds/Reload_HsW01.ogg", 0.5);
+
+        hudImageString_ = "Orxonox/WSHUD_WM_HsW01";
     }
 
@@ -64,12 +77,46 @@
     }
 
+    void HoverGun::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(HoverGun, XMLPort, xmlelement, mode);
+
+        XMLPortParam(HoverGun, "delay", setDelay, getDelay, xmlelement, mode);
+        XMLPortParam(HoverGun, "material", setMaterial, getMaterial, xmlelement, mode);
+        XMLPortParam(HoverGun, "projectileMesh", setMesh, getMesh, xmlelement, mode);
+        XMLPortParam(HoverGun, "sound", setSound, getSound, xmlelement, mode);
+    }
+
+    /**
+    @brief
+        Set the firing delay.
+    @param delay
+        The firing delay in seconds.
+    */
+    void HoverGun::setDelay(float delay)
+    {
+        this->delay_ = delay;
+        this->delayTimer_.setInterval(this->delay_);
+    }
+
+    void HoverGun::fire()
+    {
+        this->delayTimer_.startTimer();
+    }
+
     /**
     @brief
         Fires the weapon. Creates a projectile and fires it.
     */
-    void HoverGun::fire()
+    void HoverGun::shot()
     {
+        assert( this->getWeapon() && this->getWeapon()->getWeaponPack() && this->getWeapon()->getWeaponPack()->getWeaponSystem() && this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn() );
+
+        // Create the projectile.
         HoverGunProjectile* projectile = new HoverGunProjectile(this->getContext());
-        projectile->setMaterial("Flares/HoverBall_");
+        Model* model = new Model(projectile->getContext());
+        model->setMeshSource(mesh_);
+        model->setCastShadows(false);
+        projectile->attach(model);
+        model->setScale(5);
 
         this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition());
@@ -82,4 +129,19 @@
         projectile->setShieldDamage(this->getShieldDamage());
         projectile->setHealthDamage(this->getHealthDamage());
+
+        // Display the muzzle flash.
+        this->HoverGun::muzzleflash();
+    }
+
+    /**
+    @brief
+        Displays the muzzle flash.
+    */
+    void HoverGun::muzzleflash()
+    {
+        MuzzleFlash *muzzleFlash = new MuzzleFlash(this->getContext());
+        this->getWeapon()->attach(muzzleFlash);
+        muzzleFlash->setPosition(this->getMuzzleOffset());
+        muzzleFlash->setMaterial(this->material_);
     }
 }
Index: code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.h
===================================================================
--- code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.h	(revision 12274)
+++ code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/HoverGun.h	(revision 12284)
@@ -21,5 +21,5 @@
  *
  *   Author:
- *      Joel Smely
+ *      Hagen Seifert
  *   Co-authors:
  *      ...
@@ -36,4 +36,6 @@
 
 #include "weapons/WeaponsPrereqs.h"
+
+#include "tools/Timer.h"
 #include "weaponsystem/WeaponMode.h"
 
@@ -43,7 +45,7 @@
     /**
     @brief
-        A slow ball of lightning.
+        Shoots laser beams.
     @author
-        Joel Smely
+        Hagen Seifert
     @ingroup WeaponsWeaponModes
     */
@@ -55,7 +57,68 @@
 
             virtual void fire() override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-       private:
+        protected:
+            /**
+            @brief Set the mesh.
+            @param mesh The mesh name.
+            */
+            void setMesh(const std::string& mesh)
+                { this->mesh_ = mesh; }
+
+            /**
+            @brief Get the mesh.
+            @return Returns the mesh name.
+            */
+            const std::string& getMesh() const
+                { return this->mesh_; }
+
+            /**
+            @brief Set the sound.
+            @param sound The Sound name.
+            */
+            void setSound(const std::string& sound)
+                { this->sound_ = sound; }
+
+            /**
+            @brief Get the sound.
+            @return Returns the sound name.
+            */
+            const std::string& getSound() const
+                { return this->sound_; }
+
+            /**
+            @brief Set the material.
+            @param material The material name.
+            */
+            void setMaterial(const std::string& material)
+                { this->material_ = material; }
+            /**
+            @brief Get the material.
+            @return Returns the material name.
+            */
+            const std::string& getMaterial() const
+                { return this->material_; }
+
+            void setDelay(float delay);
+            /**
+            @brief Get the firing delay.
+            @return Returns the firing delay in seconds.
+            */
+            float getDelay() const
+                { return this->delay_; }
+
+            virtual void shot();
+            void muzzleflash();
+
+            std::string material_; //!< The material.
+            std::string mesh_; //!< The mesh.
+            std::string sound_; //!< The sound.
+
+
+
             float speed_; //!< The speed of the fired projectile.
+            float delay_; //!< The firing delay.
+            Timer delayTimer_; //!< A timer to delay the firing.
     };
 }
Index: code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/IceGun.cc
===================================================================
--- code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/IceGun.cc	(revision 12274)
+++ code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/IceGun.cc	(revision 12284)
@@ -49,4 +49,5 @@
     IceGun::IceGun(Context* context) : WeaponMode(context)
     {
+        orxout() << "DEBUG Fire HoverGun";   
         RegisterObject(IceGun);
 
Index: code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/LightningGun.cc
===================================================================
--- code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 12274)
+++ code/branches/Boxhead_FS19/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 12284)
@@ -48,4 +48,5 @@
     LightningGun::LightningGun(Context* context) : WeaponMode(context)
     {
+        orxout() << "DEBUG Fire HoverGun";   
         RegisterObject(LightningGun);
 
@@ -70,4 +71,5 @@
     void LightningGun::fire()
     {
+
         LightningGunProjectile* projectile = new LightningGunProjectile(this->getContext());
         projectile->setMaterial("Flares/LightningBall_");
