Index: code/branches/Presentation_HS17_merge/data/levels/FlappyOrx.oxw
===================================================================
--- code/branches/Presentation_HS17_merge/data/levels/FlappyOrx.oxw	(revision 11752)
+++ code/branches/Presentation_HS17_merge/data/levels/FlappyOrx.oxw	(revision 11752)
@@ -0,0 +1,69 @@
+<LevelInfo
+ name = "Flappy Orx"
+ description = "A clone of the iconic Flappy Bird"
+ tags = "minigame"
+ screenshot = "FlappyOrx.png"
+/>
+
+<?lua
+  include("templates/lodInformation.oxt")
+  include("templates/spaceshipFlappyOrx.oxt")
+  include("overlays/FlappyOrxHUD.oxo")
+
+?>
+
+<Level
+  plugins = flappyorx
+  gametype = FlappyOrx
+>
+  <templates>
+    <Template link=lodtemplate_default />
+  </templates>
+
+  <Scene
+    ambientlight = "0.8, 0.7, 0.4"
+    skybox     = "Orxonox/skyBoxBasic"
+  >
+  <WorldAmbientSound
+    source="Earth.ogg"
+    looping="true"
+    playOnLoad="true"
+  />
+
+ <Light type=directional position="11000, 11000, -7000" lookat="0, 0, 0" diffuse="1, 1, 1, 1" specular="1.0, 0.9, 0.9, 1.0" />
+    <SpawnPoint team=0 position="0,0,0" lookat="0,0,0" spawnclass=FlappyOrxShip pawndesign=spaceshipFlappyOrx />
+  
+    <FlappyOrxCenterPoint name=flappyorxcenter />
+    
+    
+
+    <?lua
+      for i = 1, 5, 1 do
+        for j = 3, 12,3 do
+    ?>
+
+        <Template name=Asteroid<?lua print(j) ?>_<?lua print(i) ?>>
+          <MovableEntity
+            collisionType = dynamic
+            linearDamping = 0.8
+            angularDamping = 1
+            scale = "<?lua print(j) ?>"
+            collisiondamage = 10000
+            enablecollisiondamage = true
+          >
+          
+            <attached>
+              <Model mass="1000" mesh="ast<?lua print(i) ?>.mesh" />
+            </attached>
+            <collisionShapes>
+               <SphereCollisionShape radius="<?lua print(j + 8) ?>" />
+            </collisionShapes>
+          </MovableEntity>
+        </Template>
+
+    <?lua
+        end
+      end
+    ?>
+  </Scene>
+</Level>
Index: code/branches/Presentation_HS17_merge/data/levels/templates/enemyFlappyOrx.oxt
===================================================================
--- code/branches/Presentation_HS17_merge/data/levels/templates/enemyFlappyOrx.oxt	(revision 11752)
+++ code/branches/Presentation_HS17_merge/data/levels/templates/enemyFlappyOrx.oxt	(revision 11752)
@@ -0,0 +1,174 @@
+<Template name=enemyFlappyOrx>
+  <FlappyOrxEnemy
+   hudtemplate            = spaceshiphud
+   camerapositiontemplate = spaceshipescortcameras
+   spawnparticlesource    = "Orxonox/fairytwirl"
+   spawnparticleduration  = 3
+   explosionchunks        = 4
+
+   health            = 10
+   maxhealth         = 10
+   initialhealth     = 10
+
+   shieldhealth        = 10
+   initialshieldhealth = 10
+   maxshieldhealth     = 10
+   shieldabsorption    = 0.9
+   shieldrechargerate  = 1
+   shieldrechargewaittime = 1
+
+   primaryThrust     = 150
+   auxilaryThrust    = 30
+   rotationThrust    = 50
+
+   lift = 1;
+   stallSpeed = 220;
+
+   boostPower            = 20
+   boostPowerRate        = 1
+   boostRate             = 5
+   boostCooldownDuration = 10
+
+   shakeFrequency = 15
+   shakeAmplitude = 6
+
+   collisionType     = "dynamic"
+   mass              = 0.00001
+   linearDamping     = 0
+   angularDamping    = 0
+
+    collisiondamage = 100
+    enablecollisiondamage = true
+  >
+    <engines>
+      <MultiStateEngine position=" 7.6, 0, 6" template=spaceshipescortengine />
+      <MultiStateEngine position="-7.6, 0, 0" template=spaceshipescortengine />
+    </engines>
+    <attached>
+      <Model position="0,0,0" yaw=180 pitch=270 roll=0 scale=2 mesh="swallow_mat.mesh" />
+      <Model position="0,0,0" yaw=180 pitch=270 roll=0 scale=2 mesh="escortWeapon.mesh" />
+    </attached>
+    <collisionShapes>
+      <BoxCollisionShape position="0    ,0 ,  3" halfExtents="10,   4,8" />
+      <BoxCollisionShape position="12.6 ,-2,  3" halfExtents="2.8,2.8,11"/>
+      <BoxCollisionShape position="-12.6,-2,  3" halfExtents="2.8,2.8,11"/>
+      <BoxCollisionShape position="0,     0,-12" halfExtents="4  , 4 ,7" />
+    </collisionShapes>
+    <explosion >
+      <ExplosionPart minspeed=0 maxspeed=0 effect1="orxonox/explosion_flash2" effect2="orxonox/explosion_flame2" />
+      <ExplosionPart minspeed=0 maxspeed=0 effect1="orxonox/explosion_shockwave2" effect2="orxonox/explosion_sparks2" />
+      <ExplosionPart minspeed=0 maxspeed=0 effect1="orxonox/explosion_streak2" effect2="orxonox/explosion_afterglow" />
+
+      <ExplosionPart minspeed=0 maxspeed=0 effect1="Orxonox/explosion2b" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="CockpitDebris.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="BodyDebris1.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="WingDebris1.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="WingDebris2.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+    </explosion>
+<?lua
+  include("../includes/FlappyOrxWeapon.oxi")
+?>
+  </FlappyOrxEnemy>
+</Template>
+
+<Template name=enemyFlappyOrxshooter>
+  <FlappyOrxEnemyShooter
+   hudtemplate            = spaceshiphud
+   camerapositiontemplate = spaceshipescortcameras
+   spawnparticlesource    = "Orxonox/fairytwirl"
+   spawnparticleduration  = 3
+   explosionchunks        = 4
+
+   health            = 20
+   maxhealth         = 20
+   initialhealth     = 20
+
+   shieldhealth        = 20
+   initialshieldhealth = 20
+   maxshieldhealth     = 20
+   shieldabsorption    = 0.9
+   shieldrechargerate  = 1
+   shieldrechargewaittime = 1
+
+   primaryThrust     = 150
+   auxilaryThrust    = 30
+   rotationThrust    = 50
+
+   lift = 1;
+   stallSpeed = 220;
+
+   boostPower            = 20
+   boostPowerRate        = 1
+   boostRate             = 5
+   boostCooldownDuration = 10
+
+   shakeFrequency = 15
+   shakeAmplitude = 6
+
+   collisionType     = "dynamic"
+   mass              = 100
+   linearDamping     = 0
+   angularDamping    = 0
+
+    collisiondamage = 100
+    enablecollisiondamage = true
+  >
+    <engines>
+      <MultiStateEngine position=" 7.6, 0, 6" template=spaceshipescortengine />
+      <MultiStateEngine position="-7.6, 0, 0" template=spaceshipescortengine />
+    </engines>
+    <attached>
+      <Model position="0,0,0" yaw=180 pitch=270 roll=0 scale=2 mesh="ghost.mesh" />
+      <Model position="0,0,0" yaw=180 pitch=270 roll=0 scale=2 mesh="escortWeapon.mesh" />
+    </attached>
+    <collisionShapes>
+      <BoxCollisionShape position="0    ,0 ,  3" halfExtents="10,   4,8" />
+      <BoxCollisionShape position="12.6 ,-2,  3" halfExtents="2.8,2.8,11"/>
+      <BoxCollisionShape position="-12.6,-2,  3" halfExtents="2.8,2.8,11"/>
+      <BoxCollisionShape position="0,     0,-12" halfExtents="4  , 4 ,7" />
+    </collisionShapes>
+<?lua
+  include("../includes/FlappyOrxWeaponEnemy.oxi")
+?>
+  </FlappyOrxEnemyShooter>
+</Template>
+
+<Template name=spaceshipescortengine baseclass=MultiStateEngine>
+  <MultiStateEngine
+   boostfactor    = 2.2
+
+   speedfront     = 200
+   speedback      =  70
+   speedleftright =  70
+   speedupdown    =  70
+
+   defEngineSndNormal = "sounds/Engine_low.ogg"
+   defEngineSndBoost = "sounds/Engine_high.ogg"
+
+   accelerationfront     = 700
+   accelerationbrake     = 700
+   accelerationback      =  125
+   accelerationleftright =  125
+   accelerationupdown    =  125
+  >
+    <EffectContainer condition="idle">
+      <WorldSound mainstate="activity" source="sounds/Engine_idle.ogg" looping=1 active=false/>
+    </EffectContainer>
+    <EffectContainer condition="not idle">
+      <FadingBillboard mainstate=activity active=false scale=0.09 position="12, -2, 13" colour="0.2, 1.0, 0.65, 1.0" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+      <FadingBillboard mainstate=activity active=false scale=0.09 position="-12, -2, 13" colour="0.2, 1.0, 0.65, 1.0" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+    </EffectContainer>
+    <EffectContainer condition="normal or brake">
+
+    </EffectContainer>
+    <EffectContainer condition="normal or boost">
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position=" 12, 0, 10" colour="0.2, 1.0, 0.65, 1.0" width=15 length=1500 lifetime=2 elements=50 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1" />
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position="-12, 0, 10" colour="0.2, 1.0, 0.65, 1.0" width=15 length=1500 lifetime=2 elements=50 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1" />
+    </EffectContainer>
+    <EffectContainer condition="boost">
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position=" 12, 0, 10" colour="0.6, 0.8, 0.75, 0.7" width=25 length=1000 lifetime=1 elements=30 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Examples/Flare" />
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position="-12, 0, 10" colour="0.6, 0.8, 0.75, 0.7" width=25 length=1000 lifetime=1 elements=30 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Examples/Flare" />
+    </EffectContainer>
+
+  </MultiStateEngine>
+</Template>
Index: code/branches/Presentation_HS17_merge/data/levels/templates/spaceshipFlappyOrx.oxt
===================================================================
--- code/branches/Presentation_HS17_merge/data/levels/templates/spaceshipFlappyOrx.oxt	(revision 11752)
+++ code/branches/Presentation_HS17_merge/data/levels/templates/spaceshipFlappyOrx.oxt	(revision 11752)
@@ -0,0 +1,56 @@
+<Template name=spaceshipFlappyOrx>
+  <FlappyOrxShip
+
+   camerapositiontemplate = spaceshipescortcameras
+   spawnparticlesource    = "Orxonox/fairytwirl"
+   spawnparticleduration  = 6
+
+   health            = 80
+   maxhealth         = 200
+   initialhealth     = 80
+
+   primaryThrust     = 150
+   auxilaryThrust    = 30
+   rotationThrust    = 50
+
+   collisionType     = "dynamic"
+   mass              = 4200000
+   linearDamping     = 0.7
+   angularDamping    = 0.9999999
+
+  collisiondamage = 100
+  enablecollisiondamage = true
+
+  speedBase = 100
+  speedIncrease = 0.5
+  tubeDistanceBase = 200
+  tubeDistanceIncrease = -1
+
+  upwardThrust = 220
+  gravity = 700
+
+  >
+   
+    <attached>
+      <Model position="0,0,0" yaw=180 pitch=90 roll=270 scale=9 mesh="FlappyOrxShip.mesh" />
+
+      <ParticleSpawner source="Orxonox/fire3" startdelay=0  position="0,0,20" visible="true"/>
+    
+    </attached>
+    <collisionShapes>
+      <SphereCollisionShape position="-1.8    ,0 ,  -11" radius="15" />
+      <SphereCollisionShape position="-0.8   ,0 ,  0" radius="16" />
+      <!-- <SphereCollisionShape position="0   ,0 ,  11" radius="12.5" /> -->
+    </collisionShapes>
+  
+  </FlappyOrxShip>
+</Template>
+
+<Template name=spaceshipescortcameras defaults=0>
+  <FlappyOrxShip>
+    <camerapositions>
+      <CameraPosition position="0,300,-100" direction="0, -1, 0" drag=false absolute=true mouselook=true />
+    </camerapositions>
+  </FlappyOrxShip>
+</Template>
+
Index: code/branches/Presentation_HS17_merge/data/overlays/FlappyOrxHUD.oxo
===================================================================
--- code/branches/Presentation_HS17_merge/data/overlays/FlappyOrxHUD.oxo	(revision 11752)
+++ code/branches/Presentation_HS17_merge/data/overlays/FlappyOrxHUD.oxo	(revision 11752)
@@ -0,0 +1,69 @@
+<Template name="spectatorhud">
+  <OverlayGroup name = "spectatorhud" scale = "1, 1">
+  </OverlayGroup>
+</Template>
+<Template name="FlappyOrxHUD">
+  <OverlayGroup name="FlappyOrxHUD" scale = "1, 1">
+   
+    <FlappyOrxHUDinfo
+     position  = "0.02, 0.01"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.04
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "left"
+
+     showpoints     = true
+    />
+
+    <FlappyOrxHUDinfo
+     position  = "0.5, 0.5"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.04
+     colour    = "1.0, 0.0, 0.0, 1.0"
+     align     = "center"
+
+     showmessage     = true
+     messageID = 0
+
+    />
+
+    <FlappyOrxHUDinfo
+         position  = "0.5, 0.6"
+         pickpoint = "0.0, 0.0"
+         font      = "ShareTechMono"
+         textsize  = 0.04
+         colour    = "1.0, 1.0, 1.0, 1.0"
+         align     = "center"
+
+         showmessage     = true
+         messageID = 1
+    />
+    <FlappyOrxHUDinfo
+     position  = "0.5, 0.65"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.04
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "center"
+
+     showmessage     = true
+     messageID = 2
+    />
+    <FlappyOrxHUDinfo
+     position  = "0.5, 0.7"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.04
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "center"
+
+     showmessage     = true
+     messageID = 3
+
+    />
+
+    
+  </OverlayGroup>
+</Template>
Index: code/branches/Presentation_HS17_merge/data/particle/fire3.particle
===================================================================
--- code/branches/Presentation_HS17_merge/data/particle/fire3.particle	(revision 11751)
+++ code/branches/Presentation_HS17_merge/data/particle/fire3.particle	(revision 11752)
@@ -65,8 +65,5 @@
 		colour3	0 0 0 0
 		time3	1
-		colour4	0.5 0.5 0.5 0
-		time4	1
-		colour5	0.5 0.5 0.5 0
-		time5	1
+		
 	}
 }
Index: code/branches/Presentation_HS17_merge/src/modules/CMakeLists.txt
===================================================================
--- code/branches/Presentation_HS17_merge/src/modules/CMakeLists.txt	(revision 11751)
+++ code/branches/Presentation_HS17_merge/src/modules/CMakeLists.txt	(revision 11752)
@@ -48,2 +48,3 @@
 ADD_SUBDIRECTORY(superorxobros)
 ADD_SUBDIRECTORY(asteroids2D)
+ADD_SUBDIRECTORY(flappyorx)
Index: code/branches/Presentation_HS17_merge/src/modules/flappyorx/CMakeLists.txt
===================================================================
--- code/branches/Presentation_HS17_merge/src/modules/flappyorx/CMakeLists.txt	(revision 11752)
+++ code/branches/Presentation_HS17_merge/src/modules/flappyorx/CMakeLists.txt	(revision 11752)
@@ -0,0 +1,18 @@
+SET_SOURCE_FILES(FlappyOrx_SRC_FILES
+BUILD_UNIT FlappyOrxBuildUnit.cc
+  FlappyOrx.cc
+  FlappyOrxCenterPoint.cc
+  FlappyOrxShip.cc
+  FlappyOrxHUDinfo.cc
+END_BUILD_UNIT
+)
+
+ORXONOX_ADD_LIBRARY(flappyorx
+  PLUGIN
+  FIND_HEADER_FILES
+  LINK_LIBRARIES
+    orxonox
+    overlays
+    weapons
+  SOURCE_FILES ${FlappyOrx_SRC_FILES}
+)
Index: code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrx.cc
===================================================================
--- code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrx.cc	(revision 11752)
+++ code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrx.cc	(revision 11752)
@@ -0,0 +1,291 @@
+/*
+ *   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:
+ *      Leo Merholz
+ *      Pascal Schärli
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file FlappyOrx.cc
+    @brief Implementation of the FlappyOrx class.
+*/
+
+#include "FlappyOrx.h"
+#include "Highscore.h"
+#include "core/CoreIncludes.h"
+
+
+#include "core/EventIncludes.h"
+#include "core/command/Executor.h"
+#include "core/config/ConfigValueIncludes.h"
+#include "core/XMLPort.h"
+#include "gamestates/GSLevel.h"
+#include "chat/ChatManager.h"
+
+// ! HACK
+#include "infos/PlayerInfo.h"
+
+#include "FlappyOrxCenterPoint.h"
+#include "FlappyOrxShip.h"
+
+#include "core/command/ConsoleCommand.h"
+#include "worldentities/ExplosionPart.h"
+#include <vector>
+
+namespace orxonox
+{
+    RegisterUnloadableClass(FlappyOrx);
+
+    FlappyOrx::FlappyOrx(Context* context) : Deathmatch(context)
+    {
+        RegisterObject(FlappyOrx);
+        this->center_ = nullptr;
+        point = 0;                          //number of cleared tubes
+        bIsDead = true;
+        firstGame = true;                   //needed for the HUD
+
+        tubeDistance=200;                  //distance between tubes
+        tubeOffsetX=500;                    //tube offset (so that we can't see them spawn)
+
+        circlesUsed=0;
+        setHUDTemplate("FlappyOrxHUD");
+    }
+    
+    void FlappyOrx::updatePlayerPos(int x){
+
+        //Spawn a new Tube when the spawn distance is reached
+        if(this->tubes.size()==0||x-tubes.back()+tubeOffsetX>tubeDistance){
+            spawnTube();
+            this->tubes.push(x+tubeOffsetX);
+        }
+        //Delete Tubes when we pass through them
+        if(this->tubes.size()!=0&&x>this->tubes.front()){
+            this->tubes.pop();
+            levelUp();
+        }
+        //Delete Asteroids which are not visible anymore
+        while((this->asteroids.front())->getPosition().x<x-tubeOffsetX){
+            MovableEntity* deleteMe = asteroids.front();
+            asteroids.pop();
+            deleteMe->destroy();
+        }
+    }
+
+    //Gets called when we pass through a Tube
+    void FlappyOrx::levelUp(){
+        point++;
+        tubeDistance = tubeDistanceBase-tubeDistanceIncrease*point;            //smaller spawn Distance
+        getPlayer()->setSpeed(speedBase+speedIncrease*point);    //increase speed
+    }
+
+    //Returns our Ship
+    FlappyOrxShip* FlappyOrx::getPlayer(){
+        if (player == nullptr){
+            for (FlappyOrxShip* ship : ObjectList<FlappyOrxShip>()) {
+                player = ship;
+            }
+        }
+        return player;
+    }
+
+    //Spawn new Tube
+    void FlappyOrx::spawnTube(){
+        if (getPlayer() == nullptr)
+            return;
+
+        int space = 130;    //vertical space between top and bottom tube
+        int height = (float(rand())/RAND_MAX-0.5)*(280-space);  //Randomize height
+           
+        Vector3 pos = player->getPosition();
+
+        //create the two Asteroid fields (Tubes)
+        asteroidField(pos.x+tubeOffsetX,height-space/2,0.8);  //bottom  
+        asteroidField(pos.x+tubeOffsetX,height+space/2,-0.8); //top
+    }
+
+    //Creates a new asteroid Field
+    void FlappyOrx::asteroidField(int x, int y, float slope){
+        int r = 20;     //Radius of added Asteroids
+        int noadd = 0;  //how many times we failed to add a new asteroid
+
+        clearCircles();   //Delete Circles (we use circles to make sure we don't spawn two asteroids on top of eachother)
+        Circle newAsteroid = Circle();
+        newAsteroid.x=x;
+        newAsteroid.y=y;
+        newAsteroid.r=r;
+        addIfPossible(newAsteroid); //Add Asteroid at peak
+
+        //Fill up triangle with asteroids
+        while(noadd<5&&circlesUsed<nCircles){
+            if(slope>0)
+                newAsteroid.y=float(rand())/RAND_MAX*(150+y)-150;   //create asteroid on bottom
+            else
+                newAsteroid.y=float(rand())/RAND_MAX*(150-y)+y;     //create asteroid on top
+            
+            newAsteroid.x=x+(float(rand())/RAND_MAX-0.5)*(y-newAsteroid.y)/slope;
+            newAsteroid.r=r;
+           
+            int i = addIfPossible(newAsteroid); //Add Asteroid if it doesn't collide
+            if(i==0)
+                noadd++;
+            else if(i==2)
+                noadd=5;
+        }
+    }
+
+    //Create a new Asteroid
+    void FlappyOrx::createAsteroid(Circle &c){
+        MovableEntity* newAsteroid = new MovableEntity(this->center_->getContext());
+
+        //Add Model fitting the Size of the Asteroid
+        if(c.r<=5)
+            newAsteroid->addTemplate(Asteroid5[rand()%NUM_ASTEROIDS]);
+        else if(c.r<=10)
+            newAsteroid->addTemplate(Asteroid10[rand()%NUM_ASTEROIDS]);
+        else if(c.r<=15)
+            newAsteroid->addTemplate(Asteroid15[rand()%NUM_ASTEROIDS]);
+        else
+            newAsteroid->addTemplate(Asteroid20[rand()%NUM_ASTEROIDS]);
+        
+        //Set position
+        newAsteroid->setPosition(Vector3(c.x, 0, c.y));
+
+        //Randomize orientation
+        newAsteroid->setOrientation(Vector3::UNIT_Z, Degree(rand()%360));
+        newAsteroid->setOrientation(Vector3::UNIT_Y, Degree(rand()%360));
+
+        //add to Queue (so that we can delete it again)
+        asteroids.push(newAsteroid);
+    }
+
+    //Deletes Asteroids array which stores all the circles used to make sure no asteroids collide when spawning
+    void FlappyOrx::clearCircles(){
+        circlesUsed=0;
+        for(int i = 0; i<this->nCircles; i++){
+            circles[i].r=0;
+        }
+    }
+
+    //checks if two circles collide
+    bool FlappyOrx::circleCollision(Circle &c1, Circle &c2){
+        if(c1.r<=0 || c2.r<=0)
+            return false;
+        int x = c1.x - c2.x;
+        int y = c1.y - c2.y;
+        int r = c1.r + c2.r;
+
+        return x*x+y*y<r*r*1.5;
+    }
+
+    //Adds a circle if its not colliding
+    int FlappyOrx::addIfPossible(Circle c){
+        int i;
+        for(i=0; i<this->nCircles && this->circles[i].r!=0 && c.r>0;i++){
+            while(circleCollision(c,this->circles[i])){
+                c.r-=5; //when it collides, try to make it smaller
+            }
+        }
+        if(c.r<=0){
+            return 0;
+        }
+        circlesUsed++;
+        this->circles[i].x=c.x;
+        this->circles[i].y=c.y;
+        this->circles[i].r=c.r;
+        createAsteroid(c);
+        return 1;
+    }
+
+    void FlappyOrx::setCenterpoint(FlappyOrxCenterPoint* center){
+        this->center_ = center;
+    }
+
+    bool FlappyOrx::isDead(){
+        return bIsDead;
+    }
+
+    void FlappyOrx::setDead(bool value){
+        bIsDead = value;
+        if(not value){
+            point = -1;
+            levelUp();
+        }
+    }
+
+    void FlappyOrx::start()
+    {
+        // Set variable to temporarily force the player to spawn.
+        this->bForceSpawn_ = true;
+
+        if (this->center_ == nullptr)  // abandon mission!
+        {
+            orxout(internal_error) << "FlappyOrx: No Centerpoint specified." << endl;
+            GSLevel::startMainMenu();
+            return;
+        }
+        // Call start for the parent class.
+        Deathmatch::start();
+    }
+
+    //RIP
+    void FlappyOrx::death(){
+        bIsDead = true;
+        firstGame = false;
+        
+        //Set randomized deathmessages
+        if(point<7)         sDeathMessage = DeathMessage7[rand()%(DeathMessage7.size())];
+        else if(point<20)   sDeathMessage = DeathMessage20[rand()%(DeathMessage20.size())];
+        else if(point<30)   sDeathMessage = DeathMessage30[rand()%(DeathMessage30.size())];
+        else                sDeathMessage = DeathMessageover30[rand()%(DeathMessageover30.size())];
+        
+        //Update Highscore
+        if (Highscore::exists()){
+                    int score = this->getPoints();
+                    if(score > Highscore::getInstance().getHighestScoreOfGame("Flappy Orx")) 
+                        Highscore::getInstance().storeHighscore("Flappy Orx",score);
+        }
+
+        //Delete all Tubes and asteroids
+        while (!tubes.empty()){
+            tubes.pop();
+        }
+        while (!asteroids.empty()){
+            MovableEntity* deleteMe = asteroids.front();
+            asteroids.pop();
+            deleteMe->destroy();
+        }
+    }
+
+    void FlappyOrx::end()
+    {
+        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/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrx.h
===================================================================
--- code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrx.h	(revision 11752)
+++ code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrx.h	(revision 11752)
@@ -0,0 +1,185 @@
+/*
+ *   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:
+ *      Leo Merholz
+ *      Pascal Schärli
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file FlappyOrx.h
+    @brief Gametype.
+    @ingroup FlappyOrx
+*/
+
+#ifndef _FlappyOrx_H__
+#define _FlappyOrx_H__
+
+#include "flappyorx/FlappyOrxPrereqs.h"
+    
+
+#include "gametypes/Deathmatch.h"
+#include <vector>
+
+namespace orxonox
+{
+    struct Circle{
+        int r;
+        int x;
+        int y;
+        Circle(int new_r, int new_x, int new_y){
+            r=new_r;
+            x=new_x;
+            y=new_y;
+        }
+        Circle(){
+            r=0;
+            x=0;
+            y=0;
+        }
+    };
+
+    class _FlappyOrxExport FlappyOrx : public Deathmatch
+    {
+        public:
+            FlappyOrx(Context* context);
+
+            virtual void start() override;
+            virtual void end() override;
+            virtual void death();
+           
+            void updatePlayerPos(int x);
+            void createAsteroid(Circle &c);
+            void asteroidField(int x, int y, float slope);
+            void spawnTube();
+            
+            void setCenterpoint(FlappyOrxCenterPoint* center);
+           
+            int getPoints(){return this->point;}
+            
+            void levelUp();
+            
+            bool isDead();
+            void setDead(bool value);
+
+            FlappyOrxShip* getPlayer();
+            
+            float speedBase;
+            float speedIncrease;
+
+            int tubeDistanceBase;
+            int tubeDistanceIncrease;
+            int tubeDistance;
+            int tubeOffsetX;
+
+            int upwardThrust;
+            int gravity;
+
+            inline void setSpeedBase(int speedBase){ this-> speedBase =  speedBase;}
+            inline float  getSpeedBase(){ return speedBase;}
+            inline void setSpeedIncrease(int speedIncrease){ this-> speedIncrease =  speedIncrease;}
+            inline float  getSpeedIncrease(){ return speedIncrease;}
+
+            inline void setTubeDistanceBase(int tubeDistanceBase){ this-> tubeDistanceBase =  tubeDistanceBase;}
+            inline int  getTubeDistanceBase(){ return tubeDistanceBase;}
+            inline void setTubeDistanceIncrease(int tubeDistanceIncrease){ this-> tubeDistanceIncrease =  tubeDistanceIncrease;}
+            inline int  getTubeDistanceIncrease(){ return tubeDistanceIncrease;}
+
+            
+            bool bEndGame;
+            bool bIsDead;
+            bool firstGame;
+            std::string sDeathMessage;
+            std::queue<int> tubes;                  //Saves Position of Tubes
+            std::queue<MovableEntity*> asteroids;   //Stores Asteroids which build up the tubes
+            float speed = 100;
+            
+        private:
+             
+            const static int nCircles = 6;
+            int circlesUsed;
+            Circle circles[nCircles];
+
+            void clearCircles();
+            bool circleCollision(Circle &c1, Circle &c2);
+            int addIfPossible(Circle c);
+
+            WeakPtr<FlappyOrxCenterPoint> center_;
+            WeakPtr<FlappyOrxShip> player;
+
+            int level;
+            int point;
+            bool b_combo;
+
+            const int NUM_ASTEROIDS = 5;
+
+
+           const std::string Asteroid5[5] = {"Asteroid3_1","Asteroid3_2","Asteroid3_3","Asteroid3_4","Asteroid3_5"};
+           const std::string Asteroid10[5] = {"Asteroid6_1","Asteroid6_2","Asteroid6_3","Asteroid6_4","Asteroid6_5"};
+           const std::string Asteroid15[5] = {"Asteroid9_1","Asteroid9_2","Asteroid9_3","Asteroid9_4","Asteroid9_5"};
+           const std::string Asteroid20[5] = {"Asteroid12_1","Asteroid12_2","Asteroid12_3","Asteroid12_4","Asteroid12_5"};
+           
+            std::vector<std::string> DeathMessage7 = {
+                "You should really try that again",
+                "You can do better, can you?",
+                "Hey, maybe you get a participation award, that's good isn't it?",
+                "Congratulations, you get a medal, a wooden one",
+                "That was flappin bad!",
+                "Well, that was a waste of time",
+                "You suck!",
+                "Maybe try SuperOrxoBros. That game is not as hard.",
+                "Here's a tip: Try not to fly into these grey thingies.",
+                "We won't comment on that."};
+            std::vector<std::string> DeathMessage20 = {
+                "Getting better!",
+                "Training has paid off, huh?",
+                "Good average!",
+                "That was somehow enjoyable to watch",
+                "Flappin average",
+                "Getting closer to something",
+                "That wasn't crap, not bad",
+                "Surprisingly not bad."};
+            std::vector<std::string> DeathMessage30 = {
+                "Flappin great",
+                "Good job!",
+                "Okay, we give you a shiny medal, not a golden one, tough",
+                "Maybe you should do that professionally",
+                "That was really good,!",
+                "We are proud of you"};
+            std::vector<std::string> DeathMessageover30 = {
+                "You're flappin amazing",
+                "Fucking great job",
+                "Wow, we're really impressed",
+                "We will honor you!",
+                "Please, please do that again!",
+                "Take that golden medal! You've earned it",
+                "We are completely speechless! That was magnificent"};
+            
+
+
+
+    };
+}
+
+#endif /* _FlappyOrx_H__ */
Index: code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxCenterPoint.cc
===================================================================
--- code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxCenterPoint.cc	(revision 11752)
+++ code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxCenterPoint.cc	(revision 11752)
@@ -0,0 +1,60 @@
+/*
+ *   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:
+ *      Leo Merholz
+ *      Pascal Schärli
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file FlappyOrxCenterPoint.cc
+    @brief Implementation of the FlappyOrxCenterPoint class.
+*/
+
+#include "FlappyOrxCenterPoint.h"
+
+#include "core/CoreIncludes.h"
+
+#include "FlappyOrx.h"
+
+namespace orxonox
+{
+    RegisterClass(FlappyOrxCenterPoint);
+
+    FlappyOrxCenterPoint::FlappyOrxCenterPoint(Context* context) : StaticEntity(context)
+    {
+        RegisterObject(FlappyOrxCenterPoint);
+
+        this->checkGametype();
+    }
+
+    void FlappyOrxCenterPoint::checkGametype()
+    {
+        if (this->getGametype() != nullptr && this->getGametype()->isA(Class(FlappyOrx)))
+        {
+            FlappyOrx* FlappyOrxGametype = orxonox_cast<FlappyOrx*>(this->getGametype());
+            FlappyOrxGametype->setCenterpoint(this);
+        }
+    }
+}
Index: code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxCenterPoint.h
===================================================================
--- code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxCenterPoint.h	(revision 11752)
+++ code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxCenterPoint.h	(revision 11752)
@@ -0,0 +1,56 @@
+/*
+ *   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:
+ *      Leo Merholz
+ *      Pascal Schärli
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file FlappyOrxCenterPoint.h
+    @brief Declaration of the FlappyOrxCenterPoint class.
+    @ingroup FlappyOrx
+*/
+
+#ifndef _FlappyOrxCenterPoint_H__
+#define _FlappyOrxCenterPoint_H__
+
+#include "flappyorx/FlappyOrxPrereqs.h"
+
+#include "worldentities/StaticEntity.h"
+
+namespace orxonox
+{
+    class _FlappyOrxExport FlappyOrxCenterPoint : public StaticEntity
+    {
+        public:
+            FlappyOrxCenterPoint(Context* context); //checks whether the gametype is actually FlappyOrx.
+
+        private:
+            void checkGametype();
+
+    };
+}
+
+#endif /* _FlappyOrxCenterPoint_H__ */
Index: code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxHUDinfo.cc
===================================================================
--- code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxHUDinfo.cc	(revision 11752)
+++ code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxHUDinfo.cc	(revision 11752)
@@ -0,0 +1,136 @@
+/*
+ *   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:
+ *      Leo Merholz
+ *      Pascal Schärli
+ *
+ *      Co-authors:
+ *      ...
+ */
+
+#include "FlappyOrxHUDinfo.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "util/Convert.h"
+#include "FlappyOrx.h"
+
+namespace orxonox
+{
+    RegisterClass(FlappyOrxHUDinfo);
+
+    FlappyOrxHUDinfo::FlappyOrxHUDinfo(Context* context) : OverlayText(context)
+    {
+        RegisterObject(FlappyOrxHUDinfo);
+
+        this->FlappyOrxGame = nullptr;
+        this->bShowLives_ = false;
+        this->bShowLevel_ = true;
+        this->bShowPoints_ = false;
+        this->bShowMultiplier_ = false;
+        this->bShowGameOver_ = false;
+        this->sGameOverMessage_ = "";
+    }
+
+    void FlappyOrxHUDinfo::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(FlappyOrxHUDinfo, XMLPort, xmlelement, mode);
+
+        XMLPortParam(FlappyOrxHUDinfo, "showpoints",    setShowPoints,    getShowPoints,    xmlelement, mode).defaultValues(false);
+        XMLPortParam(FlappyOrxHUDinfo, "showmessage",   setShowMessage,   getShowMessage,   xmlelement, mode).defaultValues(false);
+        XMLPortParam(FlappyOrxHUDinfo, "messageID",     setMessageID,     getMessageID,     xmlelement, mode).defaultValues(0);
+       
+    
+    }
+
+    void FlappyOrxHUDinfo::tick(float dt)
+    {
+        SUPER(FlappyOrxHUDinfo, tick, dt);
+
+        if (this->FlappyOrxGame)
+        {
+            if(not this->FlappyOrxGame->isDead()){
+                if(this->bShowPoints_){
+                    const std::string& points = "Score: "+multi_cast<std::string>(this->FlappyOrxGame->getPoints());
+                    setTextSize(0.04);
+                    this->setCaption(points);
+                }
+                else if(this->bShowGameOver_){
+                    setTextSize(0);
+                }
+            }
+            else{
+                if(this->bShowPoints_){
+                    setTextSize(0);
+                }
+                else if(this->bShowGameOver_){
+                    if(this->FlappyOrxGame->firstGame){
+                        if(messageID==3){
+                            setTextSize(0.05);
+                            this->setCaption("First click, then press space to start");
+                        }
+                    }
+                    else{
+                        std::string message;
+                        setTextSize(0.05);
+                        switch(messageID){
+                            case 0:
+                                message = "Game Over";
+                                setTextSize(0.1);
+                                this->setCaption(message);
+                            break;
+                            case 1:
+                                message = this->FlappyOrxGame->sDeathMessage;
+                            break;
+                            case 2:
+                                message = "Your Score: "+multi_cast<std::string>(this->FlappyOrxGame->getPoints())+
+                                                        "  Local High Score: "+multi_cast<std::string>(Highscore::getInstance().getHighestScoreOfGame("Flappy Orx"));
+                            break;
+                            case 3:
+                                int time = this->FlappyOrxGame->getPlayer()->timeUntilRespawn();
+                                if(time<=0)
+                                    message = "Press space to restart.";
+                                else
+                                    message = "Please wait "+multi_cast<std::string>(time)+" seconds.";
+                            break;
+                        }
+                        this->setCaption(message);
+                    }
+                }
+            }   
+        }
+    }
+
+    void FlappyOrxHUDinfo::changedOwner()
+    {
+        SUPER(FlappyOrxHUDinfo, changedOwner);
+
+        if (this->getOwner() && this->getOwner()->getGametype())
+        {
+            this->FlappyOrxGame = orxonox_cast<FlappyOrx*>(this->getOwner()->getGametype());
+        }
+        else
+        {
+            this->FlappyOrxGame = nullptr;
+        }
+    }
+}
Index: code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxHUDinfo.h
===================================================================
--- code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxHUDinfo.h	(revision 11752)
+++ code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxHUDinfo.h	(revision 11752)
@@ -0,0 +1,93 @@
+/*
+ *   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 _FlappyOrxHUDinfo_H__
+#define _FlappyOrxHUDinfo_H__
+
+#include "flappyorx/FlappyOrxPrereqs.h"
+
+#include "tools/interfaces/Tickable.h"
+#include "overlays/OverlayText.h"
+#include <cstring>
+
+namespace orxonox
+{
+    class _FlappyOrxExport FlappyOrxHUDinfo : public OverlayText, public Tickable
+    {
+        public:
+            FlappyOrxHUDinfo(Context* context);
+
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedOwner() override;
+
+            inline void setShowLives(bool value)
+                { this->bShowLives_ = false; }
+            inline bool getShowLives() const
+                { return this->bShowLives_; }
+
+            inline void setShowLevel(bool value)
+                { this->bShowLevel_ = false; }
+            inline bool getShowLevel() const
+                { return this->bShowLevel_; }
+
+            inline void setShowPoints(bool value)
+                { this->bShowPoints_ = value; }
+            inline bool getShowPoints() const
+                { return this->bShowPoints_; }
+
+            inline void setShowMultiplier(bool value)
+                { this->bShowMultiplier_ = false; }
+            inline bool getShowMultiplier() const
+                { return this->bShowMultiplier_; }
+
+            inline void setShowMessage(bool value){
+                bShowGameOver_ = value;
+            }
+            inline bool getShowMessage() const
+                { return this->bShowGameOver_; }
+
+            inline void setMessageID(int value){
+                messageID = value;
+            }
+            inline int getMessageID() const
+                { return messageID; }
+
+
+
+
+        private:
+            FlappyOrx* FlappyOrxGame;
+            bool bShowLives_;
+            bool bShowLevel_;
+            bool bShowPoints_;
+            bool bShowMultiplier_;
+            bool bShowGameOver_;
+            int messageID;
+            std::string sGameOverMessage_;
+    };
+}
+#endif /* _FlappyOrxHUDinfo_H__ */
Index: code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxPrereqs.h
===================================================================
--- code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxPrereqs.h	(revision 11752)
+++ code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxPrereqs.h	(revision 11752)
@@ -0,0 +1,81 @@
+/*
+ *   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:
+ *      Leo Merholz
+ *      Pascal Schärli
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+@file
+@brief
+    Shared library macros, enums, constants and forward declarations for the FlappyOrx module
+*/
+
+#ifndef _FlappyOrxPrereqs_H__
+#define _FlappyOrxPrereqs_H__
+
+#include "OrxonoxConfig.h"
+#include "OrxonoxPrereqs.h"
+
+//-----------------------------------------------------------------------
+// Shared library settings
+//-----------------------------------------------------------------------
+
+#if defined(ORXONOX_PLATFORM_WINDOWS) && !defined(FlappyOrx_STATIC_BUILD)
+#  ifdef FlappyOrx_SHARED_BUILD
+#    define _FlappyOrxExport __declspec(dllexport)
+#  else
+#    if defined( __MINGW32__ )
+#      define _FlappyOrxExport
+#    else
+#      define _FlappyOrxExport __declspec(dllimport)
+#    endif
+#  endif
+#  define _FlappyOrxPrivate
+#elif defined (ORXONOX_GCC_VISIBILITY)
+#  define _FlappyOrxExport  __attribute__ ((visibility("default")))
+#  define _FlappyOrxPrivate __attribute__ ((visibility("hidden")))
+#else
+#  define _FlappyOrxExport
+#  define _FlappyOrxPrivate
+#endif
+
+//-----------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------
+
+namespace orxonox
+{
+    class FlappyOrx;
+    class FlappyOrxCenterPoint;
+    class FlappyOrxShip;
+    class FlappyOrxEnemy;
+    class FlappyOrxEnemyShooter;
+    class FlappyOrxWeapon;
+    class FlappyOrxWeaponEnemy;
+    class FlappyOrxHUDinfo;
+}
+
+#endif /* _FlappyOrxPrereqs_H__ */
Index: code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxShip.cc
===================================================================
--- code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxShip.cc	(revision 11752)
+++ code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxShip.cc	(revision 11752)
@@ -0,0 +1,180 @@
+/*
+ *   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:
+ *      FLeo Merholz
+ *      Pascal Schärli
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file FlappyOrxShip.cc
+    @brief Implementation of the FlappyOrxShip class.
+*/
+
+#include "FlappyOrxShip.h"
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "graphics/Camera.h"
+#include "graphics/ParticleSpawner.h"
+#include <math.h> 
+#include <ctime>
+
+namespace orxonox
+{
+    RegisterClass(FlappyOrxShip);
+
+    FlappyOrxShip::FlappyOrxShip(Context* context) : SpaceShip(context)
+    {
+        RegisterObject(FlappyOrxShip);
+
+        
+        isDead = true;
+        deathTime = 0;
+
+        particleLifespan = 0.1;
+        particleAge = 0;
+
+        particlespawner_ = NULL;
+        
+    }
+
+    void FlappyOrxShip::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {   
+        SUPER(FlappyOrxShip, XMLPort, xmlelement, mode);
+        XMLPortParam(FlappyOrxShip,"speedBase", setSpeedBase, getSpeedBase, xmlelement,mode);
+        XMLPortParam(FlappyOrxShip,"speedIncrease", setSpeedIncrease, getSpeedIncrease, xmlelement,mode);
+        XMLPortParam(FlappyOrxShip,"tubeDistanceBase", setTubeDistanceBase, getTubeDistanceBase, xmlelement,mode);
+        XMLPortParam(FlappyOrxShip,"tubeDistanceIncrease", setTubeDistanceIncrease, getTubeDistanceIncrease, xmlelement,mode);
+
+        XMLPortParam(FlappyOrxShip,"upwardThrust", setUpwardthrust, getUpwardthrust, xmlelement,mode);
+        XMLPortParam(FlappyOrxShip,"gravity", setGravity, getGravity, xmlelement,mode);
+    }
+
+    void FlappyOrxShip::tick(float dt)
+    {
+        SUPER(FlappyOrxShip, tick, dt);
+
+
+        particleAge+=dt;
+        //the particle spawner that generates the fire from the backpack when pressed
+        if (particlespawner_ == NULL) {
+            for (WorldEntity* object : this->getAttachedObjects())
+            {
+                if (object->isA(Class(ParticleSpawner)))
+                particlespawner_ = (ParticleSpawner*) object;
+            }
+        }
+        else if(particleAge>particleLifespan){
+            particlespawner_->setLifetime(1);
+        }
+
+
+        //Execute movement
+        if (this->hasLocalController())
+        {
+            if(getHealth()<0){
+                setHealth(1);
+                getGame()->death();
+                death();   
+            }
+            Vector3 pos = getPosition();
+
+            getGame()->updatePlayerPos(pos.x);
+            
+
+            if(not isDead){
+                velocity.y += gravity*dt;
+                if(isFlapping){
+                    isFlapping = false;
+                    if(pos.z > -150)
+                        velocity.y = -upwardThrust;
+                }
+
+                pos += Vector3(speed + velocity.x, 0, velocity.y) * dt; 
+            }
+            
+                        
+            // Camera
+            Camera* camera = this->getCamera();
+            if (camera != nullptr)
+            {
+                camera->setPosition(pos.x,-100,0);
+                camera->setOrientation(Vector3::UNIT_Z, Degree(0));
+
+            }
+
+            
+            setPosition(pos);
+            setOrientation(Vector3::UNIT_Y, Degree(270-velocity.y/10));
+
+            if(pos.z > 150){
+                getGame()->death();
+                death();
+            }
+            
+        }
+    }
+
+    int FlappyOrxShip::timeUntilRespawn(){
+        return 2-time(0)+deathTime;
+    }
+
+    void FlappyOrxShip::boost(bool boost){
+
+        if(not isDead){
+            particleAge = 0;
+        }  
+    
+        if(isDead&&timeUntilRespawn()<=0){
+            isDead = false;
+            getGame()->setDead(false);
+        }
+        isFlapping=boost;
+    }
+
+  
+    FlappyOrx* FlappyOrxShip::getGame()
+    {
+        if (game == nullptr)
+        {
+            for (FlappyOrx* flappyOrx : ObjectList<FlappyOrx>())
+                game = flappyOrx;
+        }
+        return game;
+    }
+
+    void FlappyOrxShip::death()
+    {
+        isDead = true;
+
+        deathTime = time(0);
+        Vector3 pos = getPosition();
+        pos.x = 0;
+        pos.z = 0;
+        pos.y = 0;
+        velocity.y = 0;
+        setPosition(pos);
+        usleep(1000u);
+    }
+}
Index: code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxShip.h
===================================================================
--- code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxShip.h	(revision 11752)
+++ code/branches/Presentation_HS17_merge/src/modules/flappyorx/FlappyOrxShip.h	(revision 11752)
@@ -0,0 +1,103 @@
+/*
+ *   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:
+ *      Leo Merholz
+ *      Pascal Schärli
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file FlappyOrxShip.h
+    @brief Declaration of the FlappyOrxShip class.
+*/
+
+#ifndef _FlappyOrxShip_H__
+#define _FlappyOrxShip_H__
+
+#include "flappyorx/FlappyOrxPrereqs.h"
+
+#include "weapons/WeaponsPrereqs.h"
+#include "worldentities/pawns/SpaceShip.h"
+#include "graphics/ParticleSpawner.h"
+#include "FlappyOrx.h"
+
+
+namespace orxonox
+{
+    class _FlappyOrxExport FlappyOrxShip : public SpaceShip
+    {
+        public:
+            FlappyOrxShip(Context* context);
+
+            virtual void tick(float dt) override;
+
+            // Starts or stops fireing
+            virtual void boost(bool bBoost) override;
+            
+            inline void  setSpeedBase(float speedBase){ getGame()->setSpeedBase(speedBase);}
+            inline float getSpeedBase(){ return getGame()->getSpeedBase();}
+            inline void  setSpeedIncrease(int speedIncrease){ getGame()->setSpeedIncrease(speedIncrease);}
+            inline float getSpeedIncrease(){ return getGame()->getSpeedIncrease();}
+
+            inline void setTubeDistanceBase(int tubeDistanceBase){ getGame()->setTubeDistanceBase(tubeDistanceBase);}
+            inline int  getTubeDistanceBase(){ return getGame()->getTubeDistanceBase();}
+            inline void setTubeDistanceIncrease(int tubeDistanceIncrease){ getGame()->setTubeDistanceIncrease(tubeDistanceIncrease);}
+            inline int  getTubeDistanceIncrease(){ return getGame()->getTubeDistanceIncrease();}
+
+            inline void  setUpwardthrust( float upwardThrust ){ this->upwardThrust = upwardThrust; }
+            inline float getUpwardthrust(){ return this->upwardThrust; }
+            inline void  setGravity( float gravity ){ this->gravity = gravity; }
+            inline float getGravity(){ return this->gravity; }
+
+            inline void setSpeed( float speed ){ this->speed = speed; }
+            inline float getSpeed( ){ return this->speed; }
+            
+   
+            virtual int timeUntilRespawn();
+            
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+
+
+        protected:
+            virtual void death() override;
+        private:
+            FlappyOrx* getGame();
+            WeakPtr<FlappyOrx> game;
+            Camera* camera;
+            ParticleSpawner* particlespawner_;
+            bool isFlapping;
+            bool isDead;
+            float speed, upwardThrust, gravity;
+            float particleAge, particleLifespan;
+            long deathTime;
+            struct Velocity
+            {
+                float x;
+                float y;
+            } velocity;
+
+    };
+}
+
+#endif /* _FlappyOrxShip_H__ */
