Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/CMakeLists.txt
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/CMakeLists.txt	(revision 11402)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/CMakeLists.txt	(revision 11405)
@@ -7,4 +7,5 @@
   SOBQBlock.cc
   SOBMushroom.cc
+  SOBHUDInfo.cc
 
 )
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/Orxo.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/Orxo.h	(revision 11402)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/Orxo.h	(revision 11405)
@@ -44,40 +44,46 @@
     class Orxo : public SpaceShip
     {
-        public:
-            Orxo(Context* context);
+    public:
+        Orxo(Context* context);
 
-            virtual void tick(float dt) override;
+        virtual void tick(float dt) override;
 
 
             // overwrite for 2d movement
-            virtual void moveFrontBack(const Vector2& value) override;
-            virtual void moveRightLeft(const Vector2& value) override;
+        virtual void moveFrontBack(const Vector2& value) override;
+        virtual void moveRightLeft(const Vector2& value) override;
 
             // Starts or stops fireing
-            virtual void boost(bool bBoost) override;
+        virtual void boost(bool bBoost) override;
 
             //no rotation!
-            virtual void rotateYaw(const Vector2& value) override{};
-            virtual void rotatePitch(const Vector2& value) override{};
+        virtual void rotateYaw(const Vector2& value) override{};
+        virtual void rotatePitch(const Vector2& value) override{};
             //return to main menu if game has ended.
-            virtual void rotateRoll(const Vector2& value) override;
+        virtual void rotateRoll(const Vector2& value) override;
 
-            virtual void updateLevel();
+        virtual void updateLevel();
 
-            virtual inline bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+        virtual inline bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
 
-        protected:
-            virtual void death() override;
-        private:
+
+
+
+      
+
+
+    protected:
+        virtual void death() override;
+    private:
             //SOB* getGame();
             //WeakPtr<SOB> game;
-            Camera* camera;
-            float speed, damping, posforeward;
-            float lastTimeFront, lastTimeLeft, lastTime;
-            struct Velocity
-            {
-                float x;
-                float y;
-            } velocity, desiredVelocity;
+        Camera* camera;
+        float speed, damping, posforeward;
+        float lastTimeFront, lastTimeLeft, lastTime;
+        struct Velocity
+        {
+            float x;
+            float y;
+        } velocity, desiredVelocity;
 
            // WeakPtr<InvaderEnemy> lastEnemy;
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.cc
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.cc	(revision 11402)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.cc	(revision 11405)
@@ -64,5 +64,8 @@
         this->center_ = nullptr;
         figure_ = nullptr;
-        setHUDTemplate("JumpHUD");
+        setHUDTemplate("SOBHUD");
+        coins_=0;
+        points_=0;
+        timeLeft_=400.0;
 
     }
@@ -105,5 +108,5 @@
 
         // Call start for the parent class.
-        Deathmatch::start();
+        Gametype::start();
 
         if (figure_ != nullptr)
@@ -152,4 +155,6 @@
             orxout() << "DEED" << endl;
        
+
+       timeLeft_-=dt*2.5;
     }
 
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.h	(revision 11402)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.h	(revision 11405)
@@ -46,33 +46,59 @@
 {
 
-  
+
     class _SOBExport SOB : public Deathmatch
     {
-        public:
+    public:
             SOB(Context* context); //!< Constructor. Registers and initializes the object.
             virtual ~SOB(); //!< Destructor. Cleans up, if initialized.
             virtual void tick(float dt) override;
 
-       
+
             void setCenterpoint(SOBCenterpoint* center)
-                { this->center_ = center; }
-                virtual void start() override;
+            { this->center_ = center; }
+            virtual void start() override;
             virtual void end() override;
             virtual void spawnPlayer(PlayerInfo* player) override;
-                        PlayerInfo* getPlayer() const;
+            PlayerInfo* getPlayer() const;
 
-       
-          
+            int getPoints() {
+                return points_;
+            }
+            int getCoins() {
+                return coins_;
+            }
+            void addCoin() {
+                ++coins_;
+                points_+=200;
+            }
+            void addMushroom() {
+                points_+=1000;
+            }
+            int getTimeLeft() {
+                return timeLeft_;
+            }
+            
+
+           virtual void playerEntered(PlayerInfo* player) override
+            {
+                Gametype::playerEntered(player);
+            }  
+
+
+            WeakPtr<SOBCenterpoint> center_;
+
         protected:
-        
+
 
             void cleanup(); //!< Cleans up the Gametype 
-             WeakPtr<SOBCenterpoint> center_;
             WeakPtr<SOBFigure> figure_;
             WeakPtr<Camera> camera;
-       
-          
-    };
-}
+            int points_;
+            int coins_;
+            float timeLeft_;
+
+
+        };
+    }
 
 #endif /* _Pong_H__ */
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFigure.cc
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFigure.cc	(revision 11402)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFigure.cc	(revision 11405)
@@ -41,4 +41,5 @@
 
 #include "SOBMushroom.h"
+#include "SOB.h"
 
 namespace orxonox
@@ -66,6 +67,8 @@
 
         dead_ = false;
+        gotPowerUp_ = false;
+        
         setAngularFactor(0.0);
-         this->enableCollisionCallback();
+        this->enableCollisionCallback();
     }
 
@@ -76,10 +79,15 @@
         isColliding_ = true;
         SOBMushroom* mush = orxonox_cast<SOBMushroom*>(otherObject);
-        if (mush != nullptr) {
-            orxout() << "YEPPIE" << endl;
-            //DESTROY THE OTHER OBJECT otherObject.destroyLater();
-        }
-
-return true;
+        // ADD ANOTHER OBJECT FOR BAD GUMBAS AND REMOVE POWERUP OR KILL PLAYER ON COLLISION WITHOUT Z-ACCELERATION
+        if (mush != nullptr && !(mush->hasCollided_)) {
+            otherObject->destroyLater();
+            gotPowerUp_ = true;
+            SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+            SOBGame->addMushroom();
+            mush->hasCollided_ = true;
+
+        }
+
+        return true;
     }
 
@@ -101,56 +109,56 @@
             for (WorldEntity* object : this->getAttachedObjects())
             {
-                 if (object->isA(Class(ParticleSpawner)))
-                    particlespawner_ = object;
-                    
-            }
- 
-        }
-       
-
-
-
-
-
-        if (firePressed_ == false) {
-             gravityAcceleration_ = 350.0;
-
-        }
-
-        if (hasLocalController())
-        {
-          Vector3 velocity = getVelocity();
-          Vector3 position = getPosition();
-
-
-          if (position.z < -100)
-            dead_ = true;
-
-          if (dead_) {
-            velocity.x = 0;
-            velocity.z = 0;
-            setVelocity(velocity);
-            return;
-        }
-
-
-        int maxvelocity_x = 100;
-        int speedAddedPerTick = 5;
-        int camMaxOffset = 25;
-
-        timeSinceLastFire_ += dt;
-        lastSpeed_z = velocity.z;
+               if (object->isA(Class(ParticleSpawner)))
+                particlespawner_ = object;
+
+        }
+
+    }
+
+
+
+
+
+
+    if (firePressed_ == false) {
+       gravityAcceleration_ = 350.0;
+
+   }
+
+   if (hasLocalController())
+   {
+      Vector3 velocity = getVelocity();
+      Vector3 position = getPosition();
+
+
+      if (position.z < -100)
+        dead_ = true;
+
+    if (dead_) {
+        velocity.x = 0;
+        velocity.z = 0;
+        setVelocity(velocity);
+        return;
+    }
+
+
+    int maxvelocity_x = 100;
+    int speedAddedPerTick = 5;
+    int camMaxOffset = 25;
+
+    timeSinceLastFire_ += dt;
+    lastSpeed_z = velocity.z;
 
 
 
         //Handle the rocket fire from the jetpack
-        if (velocity.z > 40)
-            particlespawner_->setVisible(true); 
-        else
-            particlespawner_->setVisible(false); 
+    if (velocity.z > 40)
+        particlespawner_->setVisible(true); 
+    else
+        particlespawner_->setVisible(false); 
 
         //If player hits space and does not move in z-dir
-        if (firePressed_ && isColliding_ && std::abs(velocity.z) < 0.1 && std::abs(lastSpeed_z) < 0.1) {
-            gravityAcceleration_ = 100.0;
+    if (firePressed_ && isColliding_ && std::abs(velocity.z) < 0.1 && std::abs(lastSpeed_z) < 0.1) {
+        gravityAcceleration_ = 100.0;
             velocity.z = 110; //150
         }
@@ -163,5 +171,5 @@
         if (moveRightPressed_) {
             if (rot < 0.0)
-                    setOrientation(Vector3::UNIT_Z, getOrientation().getRoll() + dt*Radian(6));
+                setOrientation(Vector3::UNIT_Z, getOrientation().getRoll() + dt*Radian(6));
 
             if (std::abs(velocity.x) < maxvelocity_x) {
@@ -178,5 +186,5 @@
         } else if (moveLeftPressed_) {
             if (rot >= 0.0)
-                    setOrientation(Vector3::UNIT_Z, getOrientation().getRoll() + dt*Radian(6));
+                setOrientation(Vector3::UNIT_Z, getOrientation().getRoll() + dt*Radian(6));
 
             if (std::abs(velocity.x) < maxvelocity_x) {
@@ -200,5 +208,5 @@
             cam->setPosition(campos);
         }
-           if (campos.x - camMaxOffset > position.x) {
+        if (campos.x - camMaxOffset > position.x) {
             campos.x = position.x + camMaxOffset;
             cam->setPosition(campos);
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFigure.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFigure.h	(revision 11402)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFigure.h	(revision 11405)
@@ -61,4 +61,5 @@
         private:
             
+            bool gotPowerUp_;
             bool moveUpPressed_;
             bool moveDownPressed_;
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBHUDInfo.cc
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBHUDInfo.cc	(revision 11405)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBHUDInfo.cc	(revision 11405)
@@ -0,0 +1,154 @@
+/*
+ *   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:
+ *      Florian Zinggeler
+ *
+ */
+
+#include "SOBHUDInfo.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "util/Convert.h"
+#include "SOB.h"
+#include <sstream>
+#include <iomanip>
+
+
+
+namespace orxonox
+{
+    RegisterClass(SOBHUDInfo);
+
+    SOBHUDInfo::SOBHUDInfo(Context* context) : OverlayText(context)
+    {
+        RegisterObject(SOBHUDInfo);
+
+        this->SOBGame = nullptr;
+        
+    }
+
+    void SOBHUDInfo::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBHUDInfo, XMLPort, xmlelement, mode);
+        XMLPortParam(SOBHUDInfo, "type",     setType,     getType,     xmlelement, mode).defaultValues(false);
+
+
+    }
+
+    void SOBHUDInfo::tick(float dt)
+    {
+        SUPER(SOBHUDInfo, tick, dt);
+
+        if (this->SOBGame)
+        {
+          
+         // setPosition(Vector2(0.1, 0.65));
+          if (this->type_ == "Coins") {
+                // this->setCaption("Game ends in 30 seconds.\nPress (e)xit / (q)uit to go to the main menu.\nTo restart fly out of the screen!");
+                    
+                    
+            std::stringstream ss;
+            ss << "cc x " << std::setw(2) << std::setfill('0') << SOBGame->getCoins();
+            std::string s = ss.str();
+
+            this->setCaption(s);
+            
+          }
+           if (this->type_ == "Points") {
+            std::stringstream ss;
+            ss << std::setw(6) << std::setfill('0') << SOBGame->getPoints();
+            std::string s = ss.str();
+            this->setCaption(s);
+          }
+          if (this->type_ == "Time") {
+            std::stringstream ss;
+            ss << SOBGame->getTimeLeft();
+            std::string s = ss.str();
+            this->setCaption(s);
+          }
+               
+
+
+            //     const std::string& Level = multi_cast<std::string>(this->SOBGame->getLevel());
+            //     if (this->SOBGame->lives <= 0)
+            //     {
+            //         setPosition(Vector2(0.1, 0.65));
+            //         this->setCaption("Game ends in 30 seconds.\nPress (e)xit / (q)uit to go to the main menu.\nTo restart fly out of the screen!");
+            //         setTextSize(0.05);
+            //         this->SOBGame->bEndGame = true;
+            //     }
+            //     else if (this->SOBGame->bShowLevel)
+            //     {
+            //         setTextSize(0.1);
+            //         setPosition(Vector2(0.3, 0.55));
+            //         std::stringstream sstm;
+            //         sstm << "Level " << Level;
+            //         this->setCaption(sstm.str()); // + level
+            //     }
+            //     else
+            //     {
+            //         setTextSize(0.04);
+            //         setPosition(Vector2(0.14, 0.055));
+            //         this->setCaption(Level);
+            //     }
+            // ////////////
+            //     const std::string& points = multi_cast<std::string>(this->SOBGame->getPoints());
+            //     if (this->SOBGame->lives <= 0)
+            //     {
+            //         setTextSize(0.2);
+            //         setPosition(Vector2(0.1, 0.25));
+            //         this->setCaption("Final score:\n" + points);
+            //         this->setColour(ColourValue(1, 0, 0, 1));
+            //     }
+            //     else
+            //     {
+            //         setTextSize(0.04);
+            //         setPosition(Vector2(0.14, 0.1));
+            //         this->setColour(ColourValue(1, 1, 1, 1));
+            //         this->setCaption(points);
+            //     }
+            
+            // /////////////
+            //     int mult = this->SOBGame->getMultiplier();
+            //     const std::string& Multiplier = "X " + multi_cast<std::string>(mult);
+            //     this->setCaption(Multiplier);
+            //     this->setColour(ColourValue(1, 0, 0, clamp(float(mult * 0.1), 0.0f, 1.0f)));
+            //     this->setTextSize(clamp(float(mult * 0.1), 0.0f, 1.0f) * 0.01f + 0.04f);
+            
+        }
+    }
+
+    void SOBHUDInfo::changedOwner()
+    {
+        SUPER(SOBHUDInfo, changedOwner);
+
+        if (this->getOwner() && this->getOwner()->getGametype())
+        {
+            this->SOBGame = orxonox_cast<SOB*>(this->getOwner()->getGametype());
+        }
+        else
+        {
+            this->SOBGame = nullptr;
+        }
+    }
+}
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBHUDInfo.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBHUDInfo.h	(revision 11405)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBHUDInfo.h	(revision 11405)
@@ -0,0 +1,58 @@
+/*
+ *   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:
+ *      Florian Zinggeler
+ *
+ */
+
+#ifndef _SOBHUDInfo_H__
+#define _SOBHUDInfo_H__
+
+#include "superorxobros/SOBPrereqs.h"
+
+#include "tools/interfaces/Tickable.h"
+#include "overlays/OverlayText.h"
+
+namespace orxonox
+{
+    class _SOBExport SOBHUDInfo : public OverlayText, public Tickable
+    {
+        public:
+            SOBHUDInfo(Context* context);
+
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedOwner() override;
+
+            inline void setType(std::string type)
+                { this->type_ = type; }
+            inline std::string getType() const
+                { return this->type_; }
+        
+
+        private:
+            SOB* SOBGame;
+            std::string type_;
+      
+    };
+}
+#endif /* _SOBHUDInfo_H__ */
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBMushroom.cc
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBMushroom.cc	(revision 11402)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBMushroom.cc	(revision 11405)
@@ -54,4 +54,5 @@
         gravityAcceleration_ = 350.0;
         speed_ = 0.0;
+        hasCollided_=false;
        
     }
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBMushroom.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBMushroom.h	(revision 11402)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBMushroom.h	(revision 11405)
@@ -60,5 +60,5 @@
                 { return speed_; }
 
-
+            bool hasCollided_;
         protected:
             float gravityAcceleration_;
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBPrereqs.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBPrereqs.h	(revision 11402)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBPrereqs.h	(revision 11405)
@@ -80,4 +80,5 @@
     class SOBQBlock;
     class SOBMushroom;
+    class SOBHUDInfo;
     /*
     class PongScore;*/
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBQBlock.cc
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBQBlock.cc	(revision 11402)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBQBlock.cc	(revision 11405)
@@ -35,4 +35,7 @@
 
 #include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "SOB.h"
+#include "SOBMushroom.h"
 
 namespace orxonox
@@ -62,14 +65,15 @@
         if (!used_ && v_z > 50.0) {
             used_ = true;
-        orxout() << "WDestrozed the block" << v_z << endl;
 
-          for (WorldEntity* object : this->getAttachedObjects())
-            {
-                
-                    
-                object->setVisible(!object->isVisible());    
+            for (WorldEntity* object : this->getAttachedObjects())
+                object->setVisible(!object->isVisible());            
+
+            SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+            if (type_ == "Coin") {
+                SOBGame->addCoin();
             }
-
-
+            if (type_ == "Mushroom") {
+                spawnMushroom();
+            }
 
         }
@@ -78,3 +82,34 @@
 
 
+    void SOBQBlock::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBQBlock, XMLPort, xmlelement, mode);
+        XMLPortParam(SOBQBlock, "type",     setType,     getType,     xmlelement, mode).defaultValues(false);
+
+
+     }
+
+
+     void SOBQBlock::spawnMushroom() {
+        SOBCenterpoint* center_ = ((SOB*)getGametype())->center_;
+
+         SOBMushroom* mush = new SOBMushroom(center_->getContext());
+         Vector3 spawnpos = this->getWorldPosition();
+         spawnpos.z += 0;
+
+        if (mush != nullptr && center_ != nullptr)
+        {
+            mush->addTemplate("mushroom");
+           
+
+
+            //newBoots->addTemplate(center_->getBootsTemplate());
+            mush->setPosition(spawnpos);
+            //newBoots->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
+            //newBoots->setFigure(figure_);
+            //center_->attach(newBoots);
+        }
+     }
+
+
 }
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBQBlock.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBQBlock.h	(revision 11402)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBQBlock.h	(revision 11405)
@@ -41,7 +41,16 @@
             virtual ~SOBQBlock();
             virtual  bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
+            void setType(std::string type) {
+                this->type_=type;
+            }
+            std::string getType() {
+                return this->type_;
+            }
         protected:
             bool used_;
+            std::string type_;
+            void spawnMushroom();
     };
            
