Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/CMakeLists.txt
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/CMakeLists.txt	(revision 11405)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/CMakeLists.txt	(revision 11412)
@@ -8,4 +8,6 @@
   SOBMushroom.cc
   SOBHUDInfo.cc
+  SOBGumba.cc
+  SOBFlagstone.cc
 
 )
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.cc
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.cc	(revision 11405)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.cc	(revision 11412)
@@ -38,4 +38,5 @@
 #include "core/command/Executor.h"
 #include "core/config/ConfigValueIncludes.h"
+#include "core/Game.h"
 
 #include "gamestates/GSLevel.h"
@@ -68,4 +69,6 @@
         points_=0;
         timeLeft_=400.0;
+        
+        lvl_ = 1;
 
     }
@@ -86,5 +89,5 @@
     }
 
-        void SOB::start()
+    void SOB::start()
     {
         if (center_ != nullptr) // There needs to be a SOBCenterpoint, i.e. the area the game takes place.
@@ -125,4 +128,14 @@
     }
 
+    void SOB::restart() {
+        cleanup();
+
+        // HACK
+        Game::getInstance().popState();
+        Game::getInstance().popState();
+        Game::getInstance().requestStates("standalone, level");
+
+        
+    }
     void SOB::spawnPlayer(PlayerInfo* player)
     {
@@ -148,13 +161,15 @@
     }
 
-void SOB::tick(float dt)
+    void SOB::tick(float dt)
     {
         SUPER(SOB, tick, dt);
 
-        if (this->figure_ != nullptr && figure_->dead_)
+        if (this->figure_ != nullptr && figure_->dead_) {
+            info_ = "Game over. Press <Space> to restart";
             orxout() << "DEED" << endl;
-       
+        }
+        
 
-       timeLeft_-=dt*2.5;
+        timeLeft_-=dt*2.5;
     }
 
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.h	(revision 11405)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.h	(revision 11412)
@@ -62,4 +62,5 @@
             PlayerInfo* getPlayer() const;
 
+            void restart();
             int getPoints() {
                 return points_;
@@ -75,10 +76,21 @@
                 points_+=1000;
             }
+            void addGumba() {
+                points_+=100;
+            }
             int getTimeLeft() {
                 return timeLeft_;
             }
+            std::string getInfoText() {
+                return info_;
+            }
             
-
-           virtual void playerEntered(PlayerInfo* player) override
+            void setLvl(int lvl) {
+                lvl_ = lvl;
+            }
+            int getLvl() {
+                return lvl_;
+            }
+            virtual void playerEntered(PlayerInfo* player) override
             {
                 Gametype::playerEntered(player);
@@ -97,4 +109,7 @@
             int coins_;
             float timeLeft_;
+        
+            int lvl_;
+            std::string info_;
 
 
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFigure.cc
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFigure.cc	(revision 11405)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFigure.cc	(revision 11412)
@@ -41,5 +41,7 @@
 
 #include "SOBMushroom.h"
+#include "SOBGumba.h"
 #include "SOB.h"
+#include "SOBFlagstone.h"
 
 namespace orxonox
@@ -66,4 +68,5 @@
         pitch_ = 0.0;
 
+        predead_ = false;
         dead_ = false;
         gotPowerUp_ = false;
@@ -79,5 +82,7 @@
         isColliding_ = true;
         SOBMushroom* mush = orxonox_cast<SOBMushroom*>(otherObject);
-        // ADD ANOTHER OBJECT FOR BAD GUMBAS AND REMOVE POWERUP OR KILL PLAYER ON COLLISION WITHOUT Z-ACCELERATION
+        SOBGumba* gumba = orxonox_cast<SOBGumba*>(otherObject);
+        SOBFlagstone* flagstone = orxonox_cast<SOBFlagstone*>(otherObject);
+
         if (mush != nullptr && !(mush->hasCollided_)) {
             otherObject->destroyLater();
@@ -87,78 +92,110 @@
             mush->hasCollided_ = true;
 
-        }
-
-        return true;
-    }
-
-
-
-    void SOBFigure::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(SOBFigure, XMLPort, xmlelement, mode);
-
-    }
-
-
-
-    void SOBFigure::tick(float dt)
-    {
-        SUPER(SOBFigure, tick, dt);
-
-        if (particlespawner_ == NULL) {
-            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;
+        } else if (gumba != nullptr && !(gumba->hasCollided_)) {
+
+            if (getVelocity().z >= -20) {
+              Vector3 vel = getVelocity();
+              vel.y = -80;
+              vel.z = 200;
+              setVelocity(vel);
+              predead_=true; 
+          } else {
+            gumba->destroyLater();
+            gumba->hasCollided_ = true;
+            SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+            SOBGame->addGumba();
+
+
+        }
+    }
+
+     if (flagstone != nullptr && !(flagstone->hasCollided_)) {
+            flagstone->hasCollided_ = true;
+
+     }
+
+    return true;
+}
+
+
+
+void SOBFigure::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+{
+    SUPER(SOBFigure, XMLPort, xmlelement, mode);
+
+}
+
+
+int SOBFigure::sgn(float x) {
+
+    if (x < 0.0) return -1;
+    return 1;
+}
+
+void SOBFigure::tick(float dt)
+{
+    SUPER(SOBFigure, tick, dt);
+
+    if (particlespawner_ == NULL) {
+        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 (!predead_)
+    velocity.y = 0;
+if (position.z < -100) {
+    dead_ = true;
+
+}
+
+if (dead_) {
+    velocity.x = 0;
+    velocity.z = 0;
+    setVelocity(velocity);
+    SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+    if (firePressed_)
+        SOBGame->restart();
+    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
         }
@@ -169,22 +206,19 @@
         //Left-right movement with acceleration
         float rot = getOrientation().getRoll().valueDegrees();
+        orxout() << rot << endl;
         if (moveRightPressed_) {
-            if (rot < 0.0)
-                setOrientation(Vector3::UNIT_Z, getOrientation().getRoll() + dt*Radian(6));
+            if (!(rot < 5.0 && -5.0 < rot))
+                setOrientation(Vector3::UNIT_Z, getOrientation().getRoll() - sgn(rot)*dt*Radian(6));
+
 
             if (std::abs(velocity.x) < maxvelocity_x) {
                 velocity.x += speedAddedPerTick;
 
-                
-
-                
-
-                // if (pitch_ > 0.0) {
-                //     pitch -= turn_fac*dt);
-                // }
             }
         } else if (moveLeftPressed_) {
-            if (rot >= 0.0)
-                setOrientation(Vector3::UNIT_Z, getOrientation().getRoll() + dt*Radian(6));
+            if (!(abs(rot) > 175.0 ))
+                setOrientation(Vector3::UNIT_Z, getOrientation().getRoll() + sgn(rot)*dt*Radian(6));
+
+
 
             if (std::abs(velocity.x) < maxvelocity_x) {
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFigure.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFigure.h	(revision 11405)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFigure.h	(revision 11412)
@@ -38,5 +38,5 @@
     class _SOBExport SOBFigure : public ControllableEntity
     {
-        public:
+    public:
             SOBFigure(Context* context); //!< Constructor. Registers and initializes the object.
             virtual ~SOBFigure() {}
@@ -46,19 +46,19 @@
             virtual void moveRightLeft(const Vector2& value) override; //!< Overloaded the function to steer the figure up and down.
             
-          
+
             virtual void boost(bool boost) override;
             virtual  bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
 
-        
+
             //virtual void CollisionWithEnemy(SOBEnemy* enemy);
             
             
-   
-          
+
+
             bool dead_;
+            bool predead_;
 
-          
         private:
-            
+
             bool gotPowerUp_;
             bool moveUpPressed_;
@@ -74,10 +74,12 @@
             bool isColliding_;
             WorldEntity* particlespawner_;
+            int sgn(float x);
 
-           
+
+
             
-           
-    };
-}
+
+        };
+    }
 
 #endif /* _SOBFigure_H__ */
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFlagstone.cc
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFlagstone.cc	(revision 11412)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFlagstone.cc	(revision 11412)
@@ -0,0 +1,82 @@
+/*
+ *   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 SOBFlagstone.cc
+    @brief All items in this minigame inherit from this class. Items can move around like platforms and enemies.
+*/
+
+#include "SOBFlagstone.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "SOBFigure.h"
+#include "util/Output.h"
+
+
+namespace orxonox
+{
+    RegisterClass(SOBFlagstone);
+
+    SOBFlagstone::SOBFlagstone(Context* context) : MovableEntity(context)
+    {
+        RegisterObject(SOBFlagstone);
+
+        setAngularFactor(0.0);
+        this->enableCollisionCallback();
+       
+        hasCollided_=false;
+        
+       
+    }
+
+    
+
+    void SOBFlagstone::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBFlagstone, XMLPort, xmlelement, mode);
+        XMLPortParam(SOBFlagstone, "points", setPoints, getPoints, xmlelement, mode);
+
+
+     }
+
+   
+    bool SOBFlagstone::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) {
+
+
+
+orxout() << "Watshc bum baem" << otherObject->getMass()<< endl;
+return true;
+    }
+
+
+  
+
+
+   
+}
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFlagstone.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFlagstone.h	(revision 11412)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBFlagstone.h	(revision 11412)
@@ -0,0 +1,65 @@
+/*
+ *   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 SOBFlagstone.h
+    @brief Declaration of the SOBFlagstone class.
+    @ingroup SOB
+*/
+
+#ifndef _SOBFlagstone_H__
+#define _SOBFlagstone_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+    class _SOBExport SOBFlagstone : public MovableEntity
+    {
+        public:
+            SOBFlagstone(Context* context);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual  bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+
+            void setPoints(int points) {
+                points_ = points;
+            }
+            int getPoints() {
+                return points_;
+            }
+
+      
+            bool hasCollided_;
+        protected:
+            int points_;
+    };
+}
+
+#endif /* _SOBFlagstone_H__ */
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBGumba.cc
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBGumba.cc	(revision 11412)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBGumba.cc	(revision 11412)
@@ -0,0 +1,202 @@
+/*
+ *   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 SOBGumba.cc
+    @brief All items in this minigame inherit from this class. Items can move around like platforms and enemies.
+*/
+
+#include "SOBGumba.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "SOBFigure.h"
+#include "util/Output.h"
+
+
+namespace orxonox
+{
+    RegisterClass(SOBGumba);
+
+    SOBGumba::SOBGumba(Context* context) : MovableEntity(context)
+    {
+        RegisterObject(SOBGumba);
+
+        attachedToFigure_ = false;
+        setAngularFactor(0.0);
+        figure_ = nullptr;
+        this->enableCollisionCallback();
+        gravityAcceleration_ = 350.0;
+        speed_ = 0.0;
+        hasCollided_=false;
+        goesRight_ = true;
+        lastPos_ = getPosition();
+        lastPos_.x -= 20;
+        changeAllowed_ = true;
+        changedOn_ = 0.0;
+        
+    }
+
+    
+
+    void SOBGumba::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBGumba, XMLPort, xmlelement, mode);
+        XMLPortParam(SOBGumba, "speed", setSpeed, getSpeed, xmlelement, mode);
+
+
+    }
+
+    
+    bool SOBGumba::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) {
+
+
+        if (changeAllowed_ && otherObject->getMass() != -1) {
+            goesRight_ = !goesRight_;
+            changeAllowed_ = false;
+        }
+
+        return true;
+    }
+
+
+    void SOBGumba::setFigure(SOBFigure* newFigure)
+    {
+        figure_ = newFigure;
+    }
+
+    void SOBGumba::touchFigure()
+    {
+
+    }
+
+    void SOBGumba::tick(float dt)
+    {
+        SUPER(SOBGumba, tick, dt);
+
+        if (!changeAllowed_) {
+            changedOn_+= dt;
+            if (changedOn_> 200) {
+                changeAllowed_ = true;
+                changedOn_ = 0.0;
+
+            }
+        }
+        
+
+        int dir = 1;
+        if (!goesRight_)
+            dir = -1;
+
+        Vector3 velocity = getVelocity();
+        velocity.z -= gravityAcceleration_*dt;
+        velocity.x = dir*speed_;
+        setVelocity(velocity);
+
+
+        
+        lastPos_ = getPosition();
+    }
+
+
+}
+/*
+ *   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 SOBGumba.h
+    @brief Declaration of the SOBGumba class.
+    @ingroup SOB
+*/
+
+#ifndef _SOBGumba_H__
+#define _SOBGumba_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+    class _SOBExport SOBGumba : public MovableEntity
+    {
+    public:
+        SOBGumba(Context* context);
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+        virtual void setFigure(SOBFigure* newFigure);
+        virtual void touchFigure();
+        virtual  bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+        virtual void tick(float dt) override;
+
+        
+        bool attachedToFigure_;
+
+        void setSpeed(const float speed)
+        { this->speed_ = speed; }
+        float getSpeed() const
+        { return speed_; }
+
+        bool hasCollided_;
+    protected:
+        float gravityAcceleration_;
+        float speed_;
+        WeakPtr<SOBFigure> figure_;
+        bool goesRight_;
+        Vector3 lastPos_;
+        bool changeAllowed_;
+        float changedOn_;
+        
+    };
+}
+
+#endif /* _SOBGumba_H__ */
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBGumba.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBGumba.h	(revision 11412)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBGumba.h	(revision 11412)
@@ -0,0 +1,75 @@
+/*
+ *   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 SOBGumba.h
+    @brief Declaration of the SOBGumba class.
+    @ingroup SOB
+*/
+
+#ifndef _SOBGumba_H__
+#define _SOBGumba_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+    class _SOBExport SOBGumba : public MovableEntity
+    {
+        public:
+            SOBGumba(Context* context);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void setFigure(SOBFigure* newFigure);
+            virtual void touchFigure();
+            virtual  bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+            virtual void tick(float dt) override;
+
+          
+            bool attachedToFigure_;
+
+            void setSpeed(const float speed)
+                { this->speed_ = speed; }
+            float getSpeed() const
+                { return speed_; }
+
+            bool hasCollided_;
+        protected:
+            float gravityAcceleration_;
+            float speed_;
+            WeakPtr<SOBFigure> figure_;
+            bool goesRight_;
+            Vector3 lastPos_;
+            bool changeAllowed_;
+            float changedOn_;
+           
+    };
+}
+
+#endif /* _SOBGumba_H__ */
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 11412)
@@ -66,6 +66,6 @@
           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();
@@ -74,81 +74,41 @@
             this->setCaption(s);
             
-          }
-           if (this->type_ == "Points") {
+        }
+        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") {
+        }
+        if (this->type_ == "Time") {
             std::stringstream ss;
             ss << SOBGame->getTimeLeft();
             std::string s = ss.str();
             this->setCaption(s);
-          }
-               
+        }
+        if (this->type_ == "Info") {
+            std::stringstream ss;
+            ss << SOBGame->getInfoText();
+            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;
-        }
+        
     }
 }
+
+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/SOBMushroom.cc
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBMushroom.cc	(revision 11405)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBMushroom.cc	(revision 11412)
@@ -55,4 +55,9 @@
         speed_ = 0.0;
         hasCollided_=false;
+        goesRight_ = true;
+        lastPos_ = getPosition();
+        lastPos_.x -= 20;
+        changeAllowed_ = true;
+        changedOn_ = 0.0;
        
     }
@@ -71,5 +76,11 @@
     bool SOBMushroom::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) {
 
-//orxout() << "Watshc bum baem" << endl;
+
+if (changeAllowed_ && otherObject->getMass() != -1) {
+                goesRight_ = !goesRight_;
+                changeAllowed_ = false;
+}
+
+orxout() << "Watshc bum baem" << otherObject->getMass()<< endl;
 return true;
     }
@@ -90,12 +101,28 @@
         SUPER(SOBMushroom, tick, dt);
 
-          Vector3 velocity = getVelocity();
+        if (!changeAllowed_) {
+            changedOn_+= dt;
+            if (changedOn_> 200) {
+                changeAllowed_ = true;
+                changedOn_ = 0.0;
+
+        }
+    }
+        
+
+        int dir = 1;
+        if (!goesRight_)
+            dir = -1;
+
+        Vector3 velocity = getVelocity();
         velocity.z -= gravityAcceleration_*dt;
-        velocity.x = speed_;
+        velocity.x = dir*speed_;
         setVelocity(velocity);
 
 
     
+        lastPos_ = getPosition();
+            }
+
 
 }
-}
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBMushroom.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBMushroom.h	(revision 11405)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBMushroom.h	(revision 11412)
@@ -65,4 +65,8 @@
             float speed_;
             WeakPtr<SOBFigure> figure_;
+            bool goesRight_;
+            Vector3 lastPos_;
+            bool changeAllowed_;
+            float changedOn_;
            
     };
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBPrereqs.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBPrereqs.h	(revision 11405)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOBPrereqs.h	(revision 11412)
@@ -81,4 +81,6 @@
     class SOBMushroom;
     class SOBHUDInfo;
+    class SOBGumba;
+    class SOBFlagstone;
     /*
     class PongScore;*/
