Index: code/branches/gameimmersion/src/modules/weapons/projectiles/BasicProjectile.cc
===================================================================
--- code/branches/gameimmersion/src/modules/weapons/projectiles/BasicProjectile.cc	(revision 8492)
+++ code/branches/gameimmersion/src/modules/weapons/projectiles/BasicProjectile.cc	(revision 8492)
@@ -0,0 +1,140 @@
+/*
+ *   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:
+ *      simonmie
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "BasicProjectile.h"
+
+#include "core/CoreIncludes.h"
+#include "core/ConfigValueIncludes.h"
+#include "core/GameMode.h"
+#include "core/command/Executor.h"
+#include "objects/collisionshapes/SphereCollisionShape.h"
+#include "worldentities/pawns/Pawn.h"
+#include "graphics/ParticleSpawner.h"
+#include "core/OrxonoxClass.h"
+
+namespace orxonox
+{
+    /**
+    @brief
+        Constructor. Registers the object and initializes some default values.
+    */
+    BasicProjectile::BasicProjectile() : OrxonoxClass()
+    {
+        RegisterRootObject(BasicProjectile);// - register the BasicProjectile class to the core
+
+        this->bDestroy_ = false;
+//        this->owner_ = 0;
+
+        this->damage_ = 0;
+        this->healthdamage_ = 0;
+        this->shielddamage_ = 0;
+    }
+
+    BasicProjectile::~BasicProjectile()
+    {
+    }
+
+    bool BasicProjectile::basicCollidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint, Pawn* owner, BasicProjectile* this_)
+    {
+        if (!this_->getBDestroy() && GameMode::isMaster())
+        {
+            if (otherObject == /*this->*/owner/*_*/) //prevents you from shooting yourself
+                return false;
+
+            this_->setBDestroy(true); //if something is hit, the object is destroyed and can't hit something else
+// instead of returning false, bDestroy is returned
+
+            Pawn* victim = orxonox_cast<Pawn*>(otherObject); //if otherObject isn't a Pawn, then victim is NULL
+
+            WorldEntity* entity = orxonox_cast<WorldEntity*>(this_);
+            assert(entity); //entity must not be null
+
+
+            // if visual effects after destruction cause problems, put this block below the effects code block
+            if (victim)
+            {
+                victim->hit(/*this->*/owner/*_*/, contactPoint, this_->getDamage(), this_->getHealthDamage(), this_->getShieldDamage());
+                victim->startReloadCountdown();
+            }
+
+            // visual effects for being hit, depending on whether the shield is hit or not
+            if (/*this->*/owner/*_*/) //if the owner does not exist (anymore??), no effects are displayed.
+            {
+                if (!victim || (victim && !victim->hasShield())) //same like below
+                {
+                    {
+                        ParticleSpawner* effect = new ParticleSpawner(/*this->*/owner/*_*/->getCreator());
+                        effect->setPosition(entity->getPosition());
+                        effect->setOrientation(entity->getOrientation());
+                        effect->setDestroyAfterLife(true);
+                        effect->setSource("Orxonox/explosion3");
+                        effect->setLifetime(2.0f);
+                    }
+                        // second effect with same condition
+                    {
+                        ParticleSpawner* effect = new ParticleSpawner(/*this->*/owner/*_*/->getCreator());
+                        effect->setPosition(entity->getPosition());
+                        effect->setOrientation(entity->getOrientation());
+                        effect->setDestroyAfterLife(true);
+                        effect->setSource("Orxonox/smoke4");
+                        effect->setLifetime(3.0f);
+                    }
+                }
+                        // victim->isAlive() is not false until the next tick, so getHealth() is used instead
+                if (victim && victim->hasShield() && (this_->getDamage() > 0 || this_->getShieldDamage() > 0) && victim->getHealth() > 0)
+                {
+                    ParticleSpawner* effect = new ParticleSpawner(/*this->*/owner/*_*/->getCreator());
+                    effect->setPosition(entity->getPosition());
+                    effect->setOrientation(entity->getOrientation());
+                    effect->setDestroyAfterLife(true);
+                    effect->setSource("Orxonox/Shield");
+                    effect->setLifetime(0.5f);
+                }
+            }
+
+//            if (victim)
+//            {
+//                victim->hit(/*this->*/owner/*_*/, contactPoint, this_->getDamage(), this_->getHealthDamage(), this_->getShieldDamage());
+//                victim->startReloadCountdown();
+//            }
+        }
+        return false;
+    }
+
+/*    void BasicProjectile::setOwner(Pawn* owner)
+    {
+        this->owner_ = owner;
+    }
+
+    void BasicProjectile::destroyObject()
+    {
+        if (GameMode::isMaster())
+            this->destroy();
+    }
+*/
+}
Index: code/branches/gameimmersion/src/modules/weapons/projectiles/BasicProjectile.h
===================================================================
--- code/branches/gameimmersion/src/modules/weapons/projectiles/BasicProjectile.h	(revision 8492)
+++ code/branches/gameimmersion/src/modules/weapons/projectiles/BasicProjectile.h	(revision 8492)
@@ -0,0 +1,90 @@
+/*
+ *   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:
+ *      simonmie
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _BasicProjectile_H__
+#define _BasicProjectile_H__
+
+#include "weapons/WeaponsPrereqs.h"
+
+#include "tools/Timer.h"
+#include "core/OrxonoxClass.h"
+
+namespace orxonox
+{
+    class _WeaponsExport BasicProjectile : public virtual OrxonoxClass
+    {
+        public:
+            BasicProjectile();
+
+            virtual ~BasicProjectile();
+
+            static bool basicCollidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint, Pawn* owner, BasicProjectile* this_);
+
+            void basicDestroyObject();
+
+/*            void basicSetOwner(Pawn* owner);
+            inline Pawn* basicGetOwner() const
+                { return this->owner_; }
+*/
+
+            inline void setDamage(float damage)
+                { this->damage_ = damage;  }
+            inline float getDamage() const
+                { return this->damage_; }
+
+            inline void setHealthDamage(float healthdamage)
+                { this->healthdamage_ = healthdamage; }
+            inline float getHealthDamage() const
+                { return this->healthdamage_; }
+
+            inline void setShieldDamage(float shielddamage)
+                { this->shielddamage_ = shielddamage;  } //ShieldDamage wird korrekt gesettet vom XML-File
+            inline float getShieldDamage() const
+                { return this->shielddamage_; }
+
+
+            inline void setBDestroy(bool bDestroy)
+                { this->bDestroy_ = bDestroy;  }
+            inline float getBDestroy() const
+                { return this->bDestroy_; }
+
+
+
+        private:
+//            WeakPtr<Pawn> owner_;
+
+            float damage_;
+            float healthdamage_;
+            float shielddamage_;
+
+            bool bDestroy_;
+//            Timer destroyTimer_;
+    };
+}
+
+#endif /* _BasicProjectile_H__ */
Index: code/branches/gameimmersion/src/modules/weapons/projectiles/CMakeLists.txt
===================================================================
--- code/branches/gameimmersion/src/modules/weapons/projectiles/CMakeLists.txt	(revision 8490)
+++ code/branches/gameimmersion/src/modules/weapons/projectiles/CMakeLists.txt	(revision 8492)
@@ -6,3 +6,4 @@
   Rocket.cc
   SimpleRocket.cc
+  BasicProjectile.cc
 )
Index: code/branches/gameimmersion/src/modules/weapons/projectiles/Projectile.cc
===================================================================
--- code/branches/gameimmersion/src/modules/weapons/projectiles/Projectile.cc	(revision 8490)
+++ code/branches/gameimmersion/src/modules/weapons/projectiles/Projectile.cc	(revision 8492)
@@ -36,4 +36,5 @@
 #include "worldentities/pawns/Pawn.h"
 #include "graphics/ParticleSpawner.h"
+#include "BasicProjectile.h"
 
 namespace orxonox
@@ -41,15 +42,15 @@
     CreateFactory(Projectile);
 
-    Projectile::Projectile(BaseObject* creator) : MovableEntity(creator)
+    Projectile::Projectile(BaseObject* creator) : MovableEntity(creator), BasicProjectile()
     {
         RegisterObject(Projectile);
 
         this->setConfigValues();
-        this->bDestroy_ = false;
+//        this->bDestroy_ = false;
         this->owner_ = 0;
-        this->damage_ = 115;
+//        this->damage_ = 115;
 ///////////////////me
-        this->healthdamage_ = 0;
-        this->shielddamage_ = 0;
+//        this->healthdamage_ = 0;
+//        this->shielddamage_ = 0;
 ///////////////////end me
 
@@ -88,5 +89,5 @@
             return;
 
-        if (this->bDestroy_)
+        if (this->getBDestroy())
             this->destroy(); // TODO: use a scheduler instead of deleting the object right here in tick()
     }
@@ -98,6 +99,11 @@
     }
 
+    bool Projectile::collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint)
+    {
+        return BasicProjectile::basicCollidesAgainst(otherObject,contactPoint,this->owner_,this);
+    }
+
 //////////////////////////me edit
-    bool Projectile::collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint)
+/*    bool Projectile::collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint)
     {
         if (!this->bDestroy_ && GameMode::isMaster())
@@ -150,8 +156,9 @@
     }
 //////////////////////////////////////////////////////////////////////end edit
-
+*/
     void Projectile::setOwner(Pawn* owner)
     {
         this->owner_ = owner;
     }
+
 }
Index: code/branches/gameimmersion/src/modules/weapons/projectiles/Projectile.h
===================================================================
--- code/branches/gameimmersion/src/modules/weapons/projectiles/Projectile.h	(revision 8490)
+++ code/branches/gameimmersion/src/modules/weapons/projectiles/Projectile.h	(revision 8492)
@@ -35,7 +35,9 @@
 #include "worldentities/MovableEntity.h"
 
+#include "BasicProjectile.h"
+
 namespace orxonox
 {
-    class _WeaponsExport Projectile : public MovableEntity
+    class _WeaponsExport Projectile : public MovableEntity, public BasicProjectile
     {
         public:
@@ -49,14 +51,14 @@
             virtual bool collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint);
 
-            inline void setDamage(float damage)
+/*            inline void setDamage(float damage)
                 { this->damage_ = damage;  COUT(3) << "DAMAGE-SET-FUNKTION WIRD AUFGERUFEN" << endl; }
             inline float getDamage() const
                 { return this->damage_; }
-
+*/
             void setOwner(Pawn* owner);
             inline Pawn* getOwner() const
                 { return this->owner_; }
 
-////////////////////me
+/*///////////////////me
 
             inline void setHealthDamage(float healthdamage)
@@ -71,10 +73,10 @@
 
 ///////////////////end me
-
+*/
 
         private:
             WeakPtr<Pawn> owner_;
             float lifetime_;
-            float damage_;
+/*            float damage_;
 ///////me
             float healthdamage_;
@@ -82,5 +84,5 @@
 ///////end me
             bool bDestroy_;
-            Timer destroyTimer_;
+*/            Timer destroyTimer_;
     };
 }
Index: code/branches/gameimmersion/src/modules/weapons/weaponmodes/EnergyDrink.cc
===================================================================
--- code/branches/gameimmersion/src/modules/weapons/weaponmodes/EnergyDrink.cc	(revision 8490)
+++ code/branches/gameimmersion/src/modules/weapons/weaponmodes/EnergyDrink.cc	(revision 8492)
@@ -112,4 +112,6 @@
         projectile->setOwner(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
         projectile->setDamage(this->getDamage());
+        projectile->setShieldDamage(this->getShieldDamage());
+        projectile->setHealthDamage(this->getHealthDamage());
 
         EnergyDrink::muendungsfeuer();
Index: code/branches/gameimmersion/src/modules/weapons/weaponmodes/FusionFire.cc
===================================================================
--- code/branches/gameimmersion/src/modules/weapons/weaponmodes/FusionFire.cc	(revision 8490)
+++ code/branches/gameimmersion/src/modules/weapons/weaponmodes/FusionFire.cc	(revision 8492)
@@ -65,4 +65,7 @@
         projectile->setOwner(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
         projectile->setDamage(this->getDamage());
+        projectile->setShieldDamage(this->getShieldDamage());
+        projectile->setHealthDamage(this->getHealthDamage());
+
         projectile->setColour(ColourValue(1.0f, 0.7f, 0.3f, 1.0f));
     }
Index: code/branches/gameimmersion/src/modules/weapons/weaponmodes/HsW01.cc
===================================================================
--- code/branches/gameimmersion/src/modules/weapons/weaponmodes/HsW01.cc	(revision 8490)
+++ code/branches/gameimmersion/src/modules/weapons/weaponmodes/HsW01.cc	(revision 8492)
@@ -126,4 +126,6 @@
         projectile->setOwner(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
         projectile->setDamage(this->getDamage());
+        projectile->setShieldDamage(this->getShieldDamage());
+        projectile->setHealthDamage(this->getHealthDamage());
 
         HsW01::muendungsfeuer();
Index: code/branches/gameimmersion/src/modules/weapons/weaponmodes/LaserFire.cc
===================================================================
--- code/branches/gameimmersion/src/modules/weapons/weaponmodes/LaserFire.cc	(revision 8490)
+++ code/branches/gameimmersion/src/modules/weapons/weaponmodes/LaserFire.cc	(revision 8492)
@@ -61,4 +61,6 @@
         projectile->setOwner(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
         projectile->setDamage(this->getDamage());
+        projectile->setShieldDamage(this->getShieldDamage());
+        projectile->setHealthDamage(this->getHealthDamage());
     }
 }
Index: code/branches/gameimmersion/src/modules/weapons/weaponmodes/LightningGun.cc
===================================================================
--- code/branches/gameimmersion/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 8490)
+++ code/branches/gameimmersion/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 8492)
@@ -70,4 +70,5 @@
         projectile->setDamage(this->getDamage());
         projectile->setShieldDamage(this->getShieldDamage());
+        projectile->setHealthDamage(this->getHealthDamage());
     }
 }
Index: code/branches/gameimmersion/src/modules/weapons/weaponmodes/RocketFire.cc
===================================================================
--- code/branches/gameimmersion/src/modules/weapons/weaponmodes/RocketFire.cc	(revision 8490)
+++ code/branches/gameimmersion/src/modules/weapons/weaponmodes/RocketFire.cc	(revision 8492)
@@ -71,4 +71,6 @@
         rocket->setOwner(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
         rocket->setDamage(this->getDamage());
+//        rocket->setShieldDamage(this->getShieldDamage());
+//        rocket->setHealthDamage(this->getHealthDamage());
     }
 }
Index: code/branches/gameimmersion/src/modules/weapons/weaponmodes/SimpleRocketFire.cc
===================================================================
--- code/branches/gameimmersion/src/modules/weapons/weaponmodes/SimpleRocketFire.cc	(revision 8490)
+++ code/branches/gameimmersion/src/modules/weapons/weaponmodes/SimpleRocketFire.cc	(revision 8492)
@@ -71,5 +71,9 @@
         rocket->setVelocity(this->getMuzzleDirection()*this->speed_);
         rocket->setOwner(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
+
         rocket->setDamage(this->damage_);
+//        rocket->setShieldDamage(this->getShieldDamage());
+//        rocket->setHealthDamage(this->getHealthDamage());
+
         WorldEntity* pawnn=static_cast<ControllableEntity*>(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn())->getTarget();
         if (pawnn) con->setTarget(pawnn);
Index: code/branches/gameimmersion/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/gameimmersion/src/orxonox/worldentities/pawns/Pawn.cc	(revision 8490)
+++ code/branches/gameimmersion/src/orxonox/worldentities/pawns/Pawn.cc	(revision 8492)
@@ -201,5 +201,5 @@
     {
         this->reloadRate_ = reloadrate;
-        COUT(2) << "RELOAD RATE SET TO " << this->reloadRate_ << endl;
+        //COUT(2) << "RELOAD RATE SET TO " << this->reloadRate_ << endl;
     }
 
@@ -207,5 +207,5 @@
     {
         this->reloadWaitTime_ = reloadwaittime;
-        COUT(2) << "RELOAD WAIT TIME SET TO " << this->reloadWaitTime_ << endl;
+        //COUT(2) << "RELOAD WAIT TIME SET TO " << this->reloadWaitTime_ << endl;
     }
 
@@ -293,5 +293,5 @@
             // play damage effect
         }
-        COUT(3) << "neue damage-Funktion wurde aufgerufen // " << "Shield:" << this->getShieldHealth() << endl;
+        //COUT(3) << "neue damage-Funktion wurde aufgerufen // " << "Shield:" << this->getShieldHealth() << endl;
     }
 
@@ -346,5 +346,5 @@
     void Pawn::hit(Pawn* originator, btManifoldPoint& contactpoint, float damage, float healthdamage, float shielddamage)
     {
-        COUT(3) << "neue hit2-Funktion wurde aufgerufen // shielddamage: " << shielddamage << std::flush;
+//        COUT(3) << "neue hit2-Funktion wurde aufgerufen // shielddamage: " << shielddamage << std::flush;
         if (this->getGametype() && this->getGametype()->allowPawnHit(this, originator) && (!this->getController() || !this->getController()->getGodMode()) )
         {
