Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/CMakeLists.txt
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/CMakeLists.txt	(revision 11370)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/CMakeLists.txt	(revision 11378)
@@ -1,5 +1,8 @@
-SET_SOURCE_FILES(Superorxobros_SRC_FILES
-  Orxo.cc
+SET_SOURCE_FILES(SOB_SRC_FILES
 
+  SOBCenterpoint.cc
+  SOB.cc
+  SOBFigure.cc
+  
 
 )
@@ -11,5 +14,4 @@
     orxonox
     overlays
-    weapons
-  SOURCE_FILES ${Superorxobros_SRC_FILES}
+  SOURCE_FILES ${SOB_SRC_FILES}
 )
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.cc
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.cc	(revision 11370)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.cc	(revision 11378)
@@ -21,5 +21,5 @@
  *
  *   Author:
- *      Florian Zinggeler
+ *      Fabian 'x3n' Landau
  *   Co-authors:
  *      ...
@@ -28,10 +28,10 @@
 
 /**
-    @file Invader.cc
-    @brief Implementation of the Invader class.
+    @file Pong.cc
+    @brief Implementation of the Pong class.
 */
 
-#include "Invader.h"
-#include "Highscore.h"
+#include "SOB.h"
+
 #include "core/CoreIncludes.h"
 #include "core/EventIncludes.h"
@@ -42,158 +42,112 @@
 #include "chat/ChatManager.h"
 
-// ! HACK
-#include "infos/PlayerInfo.h"
+#include "SOBCenterpoint.h"
 
-#include "InvaderCenterPoint.h"
-#include "InvaderShip.h"
-#include "InvaderEnemy.h"
-#include "InvaderEnemyShooter.h"
-
-#include "core/command/ConsoleCommand.h"
-#include "worldentities/ExplosionPart.h"
+//#include "PongBat.h"
+//#include "PongBot.h"
+//#include "PongAI.h"
 
 namespace orxonox
 {
-    RegisterUnloadableClass(Invader);
+  
+    RegisterUnloadableClass(SOB);
 
-    Invader::Invader(Context* context) : Deathmatch(context)
+    /**
+    @brief
+        Constructor. Registers and initializes the object.
+    */
+    SOB::SOB(Context* context) : Deathmatch(context)
     {
-        RegisterObject(Invader);
-        this->numberOfBots_ = 0; //sets number of default bots temporarly to 0
+        RegisterObject(SOB);
+
         this->center_ = nullptr;
-        bEndGame = false;
-        lives = 3;
-        level = 1;
-        point = 0;
-        bShowLevel = false;
-        multiplier = 1;
-        b_combo = false;
-        // spawn enemy every 3.5 seconds
-        enemySpawnTimer.setTimer(3.5f, true, createExecutor(createFunctor(&Invader::spawnEnemy, this)));
-        comboTimer.setTimer(3.0f, true, createExecutor(createFunctor(&Invader::comboControll, this)));
-        this->setHUDTemplate("InvaderHUD");
+           figure_ = nullptr;
+
     }
 
-    void Invader::levelUp()
+    /**
+    @brief
+        Destructor. Cleans up, if initialized.
+    */
+    SOB::~SOB()
     {
-        level++;
-        if (getPlayer() != nullptr)
-        {
-            for (int i = 0; i < 7; i++)
-            {
-
-                WeakPtr<ExplosionPart> chunk5 = new ExplosionPart(this->center_->getContext());
-                chunk5->setPosition(this->center_->getPosition());
-                chunk5->setVelocity(Vector3(1000, 0, 0));  //player->getVelocity()
-                chunk5->setScale(10);
-                chunk5->setEffect1("Orxonox/explosion2b");
-                chunk5->setEffect2("Orxonox/smoke6");
-                chunk5->setMinSpeed(0);
-                chunk5->setMaxSpeed(0);
-                chunk5->Explode();
-
-            }
-        }
-        addPoints(multiplier * 42);
-        multiplier *= 2;
-        toggleShowLevel();
-        showLevelTimer.setTimer(1.0f, false, createExecutor(createFunctor(&Invader::toggleShowLevel, this)));
+        if (this->isInitialized())
+            this->cleanup();
     }
 
-    InvaderShip* Invader::getPlayer()
+
+
+        void SOB::start()
     {
-        if (player == nullptr)
+        if (center_ != nullptr) // There needs to be a SOBCenterpoint, i.e. the area the game takes place.
         {
-            for (InvaderShip* ship : ObjectList<InvaderShip>())
-                player = ship;
+            if (figure_ == nullptr)
+            {
+                figure_ = new SOBFigure(center_->getContext());
+                figure_->addTemplate(center_->getFigureTemplate()); /
+                figure_->InitializeAnimation(center_->getContext()); //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+            }
+
+            center_->attach(figure_);   //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+            figure_->setPosition(0, 0, 0);
         }
-        return player;
+        else // If no centerpoint was specified, an error is thrown and the level is exited.
+        {
+            orxout(internal_error) << "SOB: No Centerpoint specified." << endl;
+            GSLevel::startMainMenu();
+            return;
+        }
+
+        // Call start for the parent class.
+        Deathmatch::start();
+
+        if (figure_ != nullptr)
+        {
+            camera = figure_->getCamera();
+        }
+
+        totalScreenShift_ = 0.0;
+        screenShiftSinceLastUpdate_ = 0.0;
+        sectionNumber_ = 0;
+        adventureNumber_ = 0;
+
+        addStartSection();
+        addSection();
+        addSection();
     }
 
-    void Invader::spawnEnemy()
+    void SOB::end()
     {
-        if (getPlayer() == nullptr)
-            return;
+        cleanup();
+        GSLevel::startMainMenu();
+ 
+        Deathmatch::end();
+    }
 
-        for (int i = 0; i < (3*log10(static_cast<double>(level)) + 1); i++)
+    void SOB::spawnPlayer(PlayerInfo* player)
+    {
+        assert(player);
+
+        if (figure_->getPlayer() == nullptr)
         {
-            InvaderEnemy* newPawn;
-            if (rand() % 42/(1 + level*level) == 0)
-            {
-                newPawn = new InvaderEnemyShooter(this->center_->getContext());
-                newPawn->addTemplate("enemyinvadershooter");
-            }
-            else
-            {
-                newPawn = new InvaderEnemy(this->center_->getContext());
-                newPawn->addTemplate("enemyinvader");
-            }
-            newPawn->setInvaderPlayer(player);
-            newPawn->level = level;
-            // spawn enemy at random points in front of player.
-            newPawn->setPosition(player->getPosition() + Vector3(500.f + 100 * i, 0, float(rand())/RAND_MAX * 400 - 200));
+            player->startControl(figure_);
+            players_[player].state_ = PlayerState::Alive;
         }
     }
 
-    void Invader::setCenterpoint(InvaderCenterPoint* center)
+    PlayerInfo* SOB::getPlayer() const
     {
-        this->center_ = center;
-    }
-
-    void Invader::costLife()
-    {
-        lives--;
-        multiplier = 1;
-        // end the game in 30 seconds.
-        if (lives <= 0)
-            enemySpawnTimer.setTimer(30.0f, false, createExecutor(createFunctor(&Invader::end, this)));
-    };
-
-    void Invader::comboControll()
-    {
-        if (b_combo)
-            multiplier++;
-        // if no combo was performed before, reset multiplier
+        if (this->figure_ != nullptr)
+        {
+            return this->figure_->getPlayer();
+        }
         else
-            multiplier = 1;
-        b_combo = false;
-    }
-
-    void Invader::start()
-    {
-        // Set variable to temporarily force the player to spawn.
-        this->bForceSpawn_ = true;
-
-        if (this->center_ == nullptr)  // abandon mission!
         {
-            orxout(internal_error) << "Invader: No Centerpoint specified." << endl;
-            GSLevel::startMainMenu();
-            return;
-        }
-        // Call start for the parent class.
-        Deathmatch::start();
-    }
-    void Invader::addPoints(int numPoints)
-    {
-        if (!bEndGame)
-        {
-            point += numPoints * multiplier;
-            b_combo = true;
+            return nullptr;
         }
     }
 
-    void Invader::end()
-    {
-        // DON'T CALL THIS!
-        //      Deathmatch::end();
-        // It will misteriously crash the game!
-        // Instead startMainMenu, this won't crash.
-        if (Highscore::exists()){
-                    int score = this->getPoints();
-                    if(score > Highscore::getInstance().getHighestScoreOfGame("Orxonox Arcade")) 
-                        Highscore::getInstance().storeHighscore("Orxonox Arcade",score);
 
-          }
-        GSLevel::startMainMenu();
-    }
+   
+ 
 }
Index: code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.h
===================================================================
--- code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.h	(revision 11370)
+++ code/branches/SuperOrxoBros_FS17/src/modules/superorxobros/SOB.h	(revision 11378)
@@ -21,5 +21,5 @@
  *
  *   Author:
- *      Florian Zinggeler
+ *      Fabian 'x3n' Landau
  *   Co-authors:
  *      ...
@@ -28,62 +28,49 @@
 
 /**
-    @file Invader.h
-    @brief Gametype.
-    @ingroup Invader
+    @file Pong.h
+    @brief Declaration of the Pong class.
+    @ingroup Pong
 */
 
-#ifndef _Invader_H__
-#define _Invader_H__
+#ifndef _SOB_H__
+#define _SOB_H__
 
-#include "invader/InvaderPrereqs.h"
+#include "superorxobros/SOBPrereqs.h"
+
+#include "tools/Timer.h"
 
 #include "gametypes/Deathmatch.h"
-#include "tools/Timer.h"
+#include "SOBCenterpoint.h"
 
 namespace orxonox
 {
 
-    class _InvaderExport Invader : public Deathmatch
+  
+    class _SOBExport SOB : public Deathmatch
     {
         public:
-            Invader(Context* context);
+            SOB(Context* context); //!< Constructor. Registers and initializes the object.
+            virtual ~SOB(); //!< Destructor. Cleans up, if initialized.
 
-            virtual void start() override;
-            virtual void end() override;
-            virtual void addBots(unsigned int amount) override{} //<! overwrite function in order to bypass the addbots command
+       
+            void setCenterpoint(SOBCenterpoint* center)
+                { this->center_ = center; }
+            void setFigureTemplate(const std::string& newTemplate)
+                { this->figureTemplate_ = newTemplate; }
+            
+            const std::string& getFigureTemplate() const
+                { return this->figureTemplate_; }
+        
+          
+        protected:
+        
 
-            void spawnEnemy();
-
-            void setCenterpoint(InvaderCenterPoint* center);
-
-            int getLives(){return this->lives;}
-            int getLevel(){return this->level;}
-            int getPoints(){return this->point;}
-            int getMultiplier(){return this->multiplier;}
-
-            void costLife();
-            void levelUp();
-            void addPoints(int numPoints);
-            // checks if multiplier should be reset.
-            void comboControll();
-            int lives;
-            int multiplier;
-            bool bEndGame;
-            bool bShowLevel;
-        private:
-            void toggleShowLevel(){bShowLevel = !bShowLevel;}
-            InvaderShip* getPlayer();
-            WeakPtr<InvaderCenterPoint> center_;
-            WeakPtr<InvaderShip> player;
-
-            Timer enemySpawnTimer;
-            Timer comboTimer;
-            Timer showLevelTimer;
-            //Context* context;
-            int level;
-            int point;
-            bool b_combo;
+            void cleanup(); //!< Cleans up the Gametype by destroying the ball and the bats.
+             WeakPtr<SOBCenterpoint> center_;
+            WeakPtr<SOBFigure> figure_;
+            WeakPtr<Camera> camera;
+          
     };
 }
 
-#endif /* _Invader_H__ */
+#endif /* _Pong_H__ */
