Index: code/branches/OrxoBlox_FS19/src/modules/weapons/projectiles/BallProjectile.cc
===================================================================
--- code/branches/OrxoBlox_FS19/src/modules/weapons/projectiles/BallProjectile.cc	(revision 12281)
+++ code/branches/OrxoBlox_FS19/src/modules/weapons/projectiles/BallProjectile.cc	(revision 12281)
@@ -0,0 +1,147 @@
+/*
+ *   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:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file ParticleProjectile.h
+    @brief Implementation of the ParticleProjectile class.
+*/
+
+#include "BallProjectile.h"
+
+#include <OgreParticleEmitter.h>
+#include "core/CoreIncludes.h"
+#include "tools/ParticleInterface.h"
+#include "Scene.h"
+#include "core/command/Executor.h"
+#include "util/Convert.h"
+
+namespace orxonox
+{
+    RegisterClass(BallProjectile);
+
+    BallProjectile::BallProjectile(Context* context) : BillboardProjectile(context)
+    {
+        RegisterObject(BallProjectile);
+        this->textureIndex_ = 1;
+        this->setMass(0.1f);
+        this->maxTextureIndex_ = 8;
+        this->setDestroyAfterCollision(false); //I want the ball to bounce, not to be destroyed
+
+        //setEffect("Orxonox/sparks2");
+    }
+
+    void BallProjectile::registerVariables()
+    {
+        registerVariable(this->materialBase_);
+    }
+
+    /**
+    @brief
+        Set the material.
+    @param material
+        The name of the material. Material names with 1 to 8 appended must exist.
+    */
+    void BallProjectile::setMaterial(const std::string& material)
+    {
+        this->materialBase_ = material;
+
+        BillboardProjectile::setMaterial(material + multi_cast<std::string>(this->textureIndex_));
+    }
+
+    /**
+    @brief
+        Change the texture.
+    */
+    void BallProjectile::changeTexture()
+    {
+        this->textureIndex_++;
+        if (this->textureIndex_ > this->maxTextureIndex_)
+            this->textureIndex_ = 1;
+
+        this->setMaterial(this->materialBase_);
+    }
+
+    void BallProjectile::Bounce(WorldEntity* otherObject, btManifoldPoint& contactPoint, const btCollisionShape* cs) {
+
+        Vector3 velocity = this->getVelocity();
+        Vector3 positionOtherObject = otherObject->getPosition();
+        Vector3 contactPosition = this->getPosition();
+
+        //if (positionOtherObject.y < 0) {
+            //this.destroy()
+        //}
+        //else {
+        
+            int distance_X = positionOtherObject.x - contactPosition.x;
+            int distance_Y = positionOtherObject.y - contactPosition.y;
+
+            if (distance_X < 0)
+                distance_Y = -distance_Y;
+    
+
+            if (distance_Y < 0)
+                distance_X = -distance_X;
+
+            if (distance_X < distance_Y)
+                velocity.x = -velocity.x;
+            if (distance_Y < distance_X)
+                velocity.y = -velocity.y;
+            else {
+                velocity.x = -velocity.x;
+                velocity.y = -velocity.y;
+            }
+        //}
+    }
+
+/**
+    @brief
+        The function called when a projectile hits another thing.
+        Calls the hit-function, starts the shield recharge countdown, displays visual hit effects defined in Pawn.
+        Needs to be called in the collidesAgainst() function by every Class directly inheriting from BasicProjectile.
+    @param otherObject
+        A pointer to the object the Projectile has collided against.
+    @param contactPoint
+        A btManifoldPoint indicating the point of contact/impact.
+    @param cs
+        The btCollisionShape of the other object
+    @return
+        Returns true if the collision resulted in a successful hit.
+    @see Pawn.h
+    */
+    
+    bool BallProjectile::processCollision(WorldEntity* otherObject, btManifoldPoint& contactPoint, const btCollisionShape* cs)
+    {
+
+        orxout() << "wanna bounce..." << endl;
+        bool result = BasicProjectile::processCollision(otherObject, contactPoint, cs);
+        Bounce(otherObject, contactPoint, cs);
+        orxout() << "BOUNCED!" << endl;
+
+        return result;
+    }
+}
Index: code/branches/OrxoBlox_FS19/src/modules/weapons/projectiles/BallProjectile.h
===================================================================
--- code/branches/OrxoBlox_FS19/src/modules/weapons/projectiles/BallProjectile.h	(revision 12281)
+++ code/branches/OrxoBlox_FS19/src/modules/weapons/projectiles/BallProjectile.h	(revision 12281)
@@ -0,0 +1,71 @@
+/*
+ *   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:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file ParticleProjectile.h
+    @brief Definition of the ParticleProjectile class.
+*/
+
+#ifndef _BallProjectile_H__
+#define _BallProjectile_H__
+
+#include "weapons/WeaponsPrereqs.h"
+#include "weapons/projectiles/BillboardProjectile.h"
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        A projectile that is represented by particles.
+    @author
+        Fabian 'x3n' Landau
+    @ingroup WeaponsProjectiles
+    */
+    class _WeaponsExport BallProjectile : public BillboardProjectile
+    {
+        public:
+            BallProjectile(Context* context);
+            void Bounce(WorldEntity* otherObject, btManifoldPoint& contactPoint, const btCollisionShape* cs);
+            virtual void setMaterial(const std::string& material) override;
+
+        protected:
+            bool processCollision(WorldEntity* otherObject, btManifoldPoint& contactPoint, const btCollisionShape* cs) override;
+
+        private:
+
+            void registerVariables();
+            void changeTexture();
+            
+            unsigned int textureIndex_; //!< The current index of the texture. (i.e. the index of the currently displayed texture)
+            unsigned int maxTextureIndex_; //!< The maximal index.
+            std::string materialBase_; //!< The base name of the material.
+    };
+}
+
+#endif /* _ParticleProjectile_H__ */
Index: code/branches/OrxoBlox_FS19/src/modules/weapons/projectiles/BasicProjectile.h
===================================================================
--- code/branches/OrxoBlox_FS19/src/modules/weapons/projectiles/BasicProjectile.h	(revision 12208)
+++ code/branches/OrxoBlox_FS19/src/modules/weapons/projectiles/BasicProjectile.h	(revision 12281)
@@ -117,5 +117,5 @@
 
         protected:
-            bool processCollision(WorldEntity* otherObject, btManifoldPoint& contactPoint, const btCollisionShape* cs);
+            virtual bool processCollision(WorldEntity* otherObject, btManifoldPoint& contactPoint, const btCollisionShape* cs);
             void destroyCheck(void);
             inline void setDestroyAfterCollision(bool destroyAfterCollision)
Index: code/branches/OrxoBlox_FS19/src/modules/weapons/projectiles/CMakeLists.txt
===================================================================
--- code/branches/OrxoBlox_FS19/src/modules/weapons/projectiles/CMakeLists.txt	(revision 12208)
+++ code/branches/OrxoBlox_FS19/src/modules/weapons/projectiles/CMakeLists.txt	(revision 12281)
@@ -15,3 +15,4 @@
   MineProjectile.cc
   WagnisProjectile.cc
+  BallProjectile.cc
 )
