Index: code/branches/Presentation_HS17/SOB.oxw
===================================================================
--- code/branches/Presentation_HS17/SOB.oxw	(revision 11678)
+++ code/branches/Presentation_HS17/SOB.oxw	(revision 11678)
@@ -0,0 +1,792 @@
+<LevelInfo
+	name = "Super Orxo Bros."
+	description = "The retro-game Super Mario Bros. in Orxonox."
+	tags = "minigame"
+	screenshot = "SOB.png"
+	/>
+
+	<?lua
+	include("HUDTemplates3.oxo")  
+	include("jumpHUD.oxo")
+	include("stats.oxo")
+	include("templates/lodInformation.oxt")
+	include("overlays/SOBHUD.oxo")
+	?>
+
+	<Template name=mushroom defaults=0>
+		<SOBMushroom collisionType="dynamic" speed=30>
+			<attached>
+				<Model mesh="Pilz.mesh" position="0,0,21" scale=3 pitch=90/> 
+			</attached>
+			<collisionShapes>
+				<BoxCollisionShape position="0,0,20" halfExtents="5,5,5" />
+			</collisionShapes>
+		</SOBMushroom>
+	</Template>
+
+	<Template name=coin defaults=0 >
+		<SOBCoin speed = 15 lifetime = 0.7>
+			<attached>
+				<Model mesh="Coin.mesh" position="0,0,11" scale=3 pitch=-90 roll=90/> 
+			</attached>
+			
+		</SOBCoin>
+	</Template>
+
+
+
+	<Template name=sobfigurecameras defaults=0>
+		<SOBFigure>
+			<camerapositions>
+				<CameraPosition position="0,-150,30" absolute=true mouselook=false drag=false direction="0,1,0"/>
+			</camerapositions>
+		</SOBFigure>
+	</Template>
+
+
+
+
+	<Template name=sobFigureTemplate>
+		<SOBFigure camerapositiontemplate=sobfigurecameras collisionType="dynamic" position="0,0,30">
+			<attached>
+				<Model  mesh="orxo.mesh" position = "0,0,12" scale=2.5 pitch=0 roll=90 yaw=90/>
+				<ParticleSpawner source="Orxonox/fire4" startdelay=0  position="-4,0,0" visible="false"/>
+			</attached>
+
+			<collisionShapes>
+				<BoxCollisionShape position="-2,0,2" halfExtents="3,1,10" />
+			</collisionShapes>
+
+
+		</SOBFigure>
+	</Template> 
+
+
+
+
+
+
+	<Level
+		plugins = "superorxobros"
+		gametype = "SOB"
+		>-
+
+
+		<templates>
+			<Template link=lodtemplate_default />
+		</templates>
+		<?lua include("includes/notifications.oxi") ?>
+
+		<WorldAmbientSound source="Ganymede.ogg" looping="true" playOnLoad="true"/>
+
+
+		<Scene ambientlight="1.0, 1.0, 1.0" skybox="Orxonox/skyBoxBasic">
+			<Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0" />
+			<SpawnPoint position="1984,-5,88 " orientation="0.534038, 0.563456, 0.212168, 0.593553" />
+
+
+
+			<MovableEntity >
+				<attached>
+					<SOBCenterpoint name=jumpcenter cameraOffset="10" figureTemplate=sobFigureTemplate>
+						<attached>  
+						</attached>
+					</SOBCenterpoint>
+
+				</attached>
+			</MovableEntity>
+
+
+					<!--Gumba-->
+
+					<SOBGumba collisionType="dynamic" speed=40 position = "240,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,1" scale=3 pitch=90/> 
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,3" /> 			
+						</collisionShapes>
+					</SOBGumba>
+					<SOBGumba collisionType="dynamic" speed=30 position = "420,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
+
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
+						</collisionShapes>
+					</SOBGumba>
+					<SOBGumba collisionType="dynamic" speed=30 position = "500,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
+						</collisionShapes>
+					</SOBGumba>
+
+					<SOBGumba collisionType="dynamic" speed=30 position = "510,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
+						</collisionShapes>
+					</SOBGumba>
+					<SOBGumba collisionType="dynamic" speed=30 position = "930,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
+						</collisionShapes>
+					</SOBGumba>
+
+					<SOBGumba collisionType="dynamic" speed=20 position = "940,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
+						</collisionShapes>
+					</SOBGumba>
+
+					<SOBGumba collisionType="dynamic" speed=30 position = "1180,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
+						</collisionShapes>
+					</SOBGumba>
+
+					<SOBGumba collisionType="dynamic" speed=20 position = "1190,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
+						</collisionShapes>
+					</SOBGumba>
+
+					<SOBGumba collisionType="dynamic" speed=30 position = "1320,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
+						</collisionShapes>
+					</SOBGumba>
+
+					<SOBGumba collisionType="dynamic" speed=20 position = "1330,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
+						</collisionShapes>
+					</SOBGumba>
+
+					<SOBGumba collisionType="dynamic" speed=30 position = "1750,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
+						</collisionShapes>
+					</SOBGumba>
+
+					<SOBGumba collisionType="dynamic" speed=20 position = "1770,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
+						</collisionShapes>
+					</SOBGumba>
+
+
+					<!--CollisionShape for Gumba-->
+					<StaticEntity collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,-20" halfExtents="5,5,5" />
+							<BoxCollisionShape position="890,0,-20" halfExtents="5,5,5" />
+							
+							
+							
+							
+						</collisionShapes>
+					</StaticEntity>
+
+
+
+					
+
+
+
+					<!-- Boden 1 -->
+					<Model mesh="Cube2.12.mesh" position="0,0,-30" scale=10 Pitch=90/> 					<!-- B1.1 -->
+					<Model mesh="Cube2.12.mesh" position="120,0,-30" scale=10 Pitch=90/> 				<!-- B1.2-->
+					<Model mesh="Cube2.12.mesh" position="240,0,-30" scale=10 Pitch=90/> 				<!-- B1.3 -->
+					<Model mesh="Cube2.12.mesh" position="360,0,-30" scale=10 Pitch=90/> 				<!-- B1.4 -->
+					<Model mesh="Cube2.12.mesh" position="480,0,-30" scale=10 Pitch=90/> 				<!-- B1.5 -->
+					<Model mesh="Cube2.6.mesh" position="600,0,-30" scale=10 Pitch=90/> 				<!-- B1.6 -->
+					<Model mesh="Cube2.3.mesh" position="660,0,-30" scale=10 Pitch=90/> 				<!-- B1.7 -->
+
+
+					<StaticEntity collisionType="static" mass='-1'>
+						<collisionShapes>
+							<BoxCollisionShape position="340,0,-20" halfExtents="345,5,5" />
+						</collisionShapes>
+					</StaticEntity>
+
+
+
+
+					<!-- Luft 1 -->
+
+
+					<SOBQBlock collisionType="static" type="Coin" position="170,0,20" mass='-1'> 						 	<!-- L1.1 -->
+						<attached>
+							<Model mesh="QCube.mesh" scale=10 pitch=90 />
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/> 
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock>
+
+					<SOBQBlock collisionType="static" type="Coin" position="230,0,60" mass='-1' > 
+						<attached>
+							<Model mesh="QCube.mesh"  scale=10 pitch=90/>
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>									<!-- L1.2 --> 
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" /> 			
+						</collisionShapes>
+					</SOBQBlock>
+
+					<Model mesh="Cube1.1.mesh" position="210,0,20" scale=10 /> 												<!-- L1.3 -->
+
+
+					<SOBQBlock collisionType="static" type="Mushroom" position="220,0,20" mass='-1'><!--ITEM-->
+						<attached>
+							<Model mesh="QCube.mesh" scale=10 pitch=90/> 													<!-- L1.4 --> 
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" /><!-- 3 -->
+						</collisionShapes>
+					</SOBQBlock>
+
+					<Model mesh="Cube1.1.mesh" position="230,0,20" scale=10/> 												<!-- L1.5 -->
+
+					<SOBQBlock collisionType="static" type="Coin" position="240,0,20" mass='-1'><!-- ? Block --> 
+						<attached>
+							<Model mesh="QCube.mesh" scale=10 pitch=90/> 
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/> 								<!-- L1.6 -->
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock> 
+					
+					<Model mesh="Cube1.1.mesh" position="250,0,20" scale=10/> 												<!-- L1.7 -->
+					<!-- Rohre-->
+					<Model mesh="Rohr.mesh" position="295,5,-35" scale=10 roll=90 yaw=90 pitch=-90/> 						<!-- L1.8 -->
+					<Model mesh="Rohr.mesh" position="395,5,-25" scale=10 roll=90 yaw=90 pitch=-90/>						<!-- L1.9 -->
+					<Model mesh="Rohr.mesh" position="475,5,-15" scale=10 roll=90 yaw=90 pitch=-90 />						<!-- L1.10 -->
+					<Model mesh="Rohr.mesh" position="585,5,-15" scale=10 roll=90 yaw=90 pitch=-90 />						<!-- L1.11 -->	
+
+					<SOBQBlock collisionType="static" type="Mushroom" position="650,0,30" mass='-1'>
+						<attached>
+							<Model mesh="QCube.mesh" scale=10 pitch=90/> 													<!-- L1.12 --> 
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock>			
+					
+					
+
+
+
+
+					<StaticEntity collisionType="static"  mass='-1'>
+						<collisionShapes>
+							
+							<BoxCollisionShape position="210,0,20" halfExtents="5,5,5" /> 						<!-- 1.3 -->
+							<BoxCollisionShape position="230,0,20" halfExtents="5,5,5" /> 						<!-- 1.5 -->
+							<BoxCollisionShape position="250,0,20" halfExtents="5,5,5" /> 						<!-- 1.7 -->
+							
+
+						</collisionShapes>
+					</StaticEntity>
+
+
+					<StaticEntity collisionType="static" >
+						<collisionShapes>
+							
+
+							<BoxCollisionShape position="295,0,-4" halfExtents="12,5,12" /> 					<!-- 1.8 -->
+							<BoxCollisionShape position="395,0,1" halfExtents="12,5,17" /> 						<!-- 1.9 -->
+							<BoxCollisionShape position="475,0,6" halfExtents="12,5,22" /> 						<!-- 1.10 -->
+							<BoxCollisionShape position="585,0,6" halfExtents="12,5,22" /> 						<!-- 1.11 -->
+
+						</collisionShapes>
+					</StaticEntity>
+
+
+
+
+
+
+
+					<!-- Boden 2 -->
+					<Model mesh="Cube2.12.mesh" position="710,0,-30" scale=10 Pitch=90/>						<!-- B2.1 -->
+					<Model mesh="Cube2.3.mesh" position="830,0,-30" scale=10 Pitch=90/>							<!-- B2.2 -->
+
+					<StaticEntity collisionType="static" mass='-1'>
+						<collisionShapes>
+							<BoxCollisionShape position="780,0,-20" halfExtents="75,5,5" />
+						</collisionShapes>
+					</StaticEntity>
+
+
+
+
+
+					<!-- Luft 2 -->
+					<Model mesh="Cube1.1.mesh" position="770,0,20" scale=10/>									<!-- L2.1 -->
+
+					<SOBQBlock collisionType="static" type="Mushroom" position="780,0,20" mass='-1'>			<!-- L2.2 -->
+						<attached>
+							<Model mesh="QCube.mesh"  scale=10 pitch=90/>
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock>
+
+					<Model mesh="Cube1.1.mesh" position="790,0,20" scale=10/>									<!-- L2.3 -->
+					<Model mesh="Cube1.6.mesh" position="800,0,60" scale=10/>									<!-- L2.4 -->
+					<Model mesh="Cube1.1.mesh" position="860,0,60" scale=10/>									<!-- L2.5 -->
+					<Model mesh="Cube1.1.mesh" position="870,0,60" scale=10/>									<!-- L2.6 -->
+
+					<StaticEntity collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="770,0,20" halfExtents="5,5,5" />									<!-- 2.1 -->
+							
+							<BoxCollisionShape position="790,0,20" halfExtents="5,5,5" />									<!-- 2.3 -->
+							<BoxCollisionShape position="835,0,60" halfExtents="40,5,5" />									<!-- 2.4 to 2.6 -->
+
+
+
+
+						</collisionShapes>
+					</StaticEntity>
+					
+
+					<!-- Luft 3 -->
+					<Model mesh="Cube1.3.mesh" position="910,0,60" scale=10/> 												<!-- L3.1 -->
+
+					<SOBQBlock collisionType="static" type="Coin" position="940,0,60" mass='-1'> 				 			<!-- L3.2 -->
+						<attached>
+							<Model mesh="QCube.mesh" scale=10 pitch=90/>
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock>
+
+					<SOBQBlock collisionType="static" type="Mushroom" position="940,0,20" mass='-1'> 						<!-- L3.3 -->
+						<attached>
+							<Model mesh="QCube.mesh" scale=10 pitch=90/>
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock>
+
+					<Model mesh="Cube1.1.mesh" position="1000,0,20" scale=10/>												<!-- L3.4 -->
+
+
+					<SOBQBlock collisionType="static" type="Mushroom" position="1010,0,20" mass='-1'> 						 <!-- L3.5 -->
+						<attached>
+							<Model mesh="QCube.mesh" scale=10 pitch=90/>
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock>
+
+					<SOBQBlock collisionType="static" type="Coin" position="1060,0,20" mass='-1'> 							<!-- L3.6 -->
+						<attached>
+							<Model mesh="QCube.mesh" scale=10 pitch=90/>
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock>
+
+					
+					<SOBQBlock collisionType="static" type="Mushroom" position="1090,0,60" mass='-1'> 						 <!-- L3.7 -->
+						<attached>
+							<Model mesh="QCube.mesh" scale=10 pitch=90/>
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock>
+
+					<SOBQBlock collisionType="static" type="Coin" position="1090,0,20" mass='-1'> 							<!-- L3.8 -->
+						<attached>
+							<Model mesh="QCube.mesh" scale=10 pitch=90/>
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock>
+					
+					<SOBQBlock collisionType="static" type="Coin" position="1120,0,20" mass='-1'> 							<!-- L3.9 -->
+						<attached>
+							<Model mesh="QCube.mesh" scale=10 pitch=90/>
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock>					
+
+					<Model mesh="Cube1.1.mesh" position="1180,0,20" scale=10/> 												<!-- L3.10 -->
+
+					<Model mesh="Cube1.3.mesh" position="1210,0,60" scale=10/> 												<!-- L3.11 -->
+
+					<Model mesh="Cube1.1.mesh" position="1280,0,60" scale=10/> 												<!-- L3.12 -->
+
+					<SOBQBlock collisionType="static" type="Coin" position="1290,0,60" mass='-1'> 							<!-- L3.13 -->
+						<attached>
+							<Model mesh="QCube.mesh" type="Mushroom" scale=10 pitch=90/>
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock>
+
+
+					<SOBQBlock collisionType="static" type="Coin" position="1300,0,60" mass='-1'> 							<!-- L3.14 -->
+						<attached>
+							<Model mesh="QCube.mesh" type="Mushroom" scale=10 pitch=90/>
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock>
+
+					<Model mesh="Cube1.1.mesh" position="1310,0,60" scale=10/> 												<!-- L3.15 -->
+					<Model mesh="Cube1.1.mesh" position="1290,0,20" scale=10/> 												<!-- L3.16 --> 
+					<Model mesh="Cube1.1.mesh" position="1300,0,20" scale=10/> 												<!-- L3.17 -->
+					
+
+					
+					<Model mesh="Dreieck.mesh" position="1370,0,-10" scale=10 Roll=90 Pitch=90 yaw=90/> 					<!-- L3.18 --> 
+					<Model mesh="Dreieck.mesh" position="1400,0,-10" scale=10 Roll=90 Pitch=-90 yaw=90/> 					<!-- L3.19 -->
+					<Model mesh="Dreieck_links+1.mesh" position="1510,0,-10" scale=10 Roll=90 Pitch=90 yaw=90/> 			<!-- L3.20 -->  
+					
+
+
+					<StaticEntity collisionType="static">
+						<collisionShapes>
+							
+							<BoxCollisionShape position="1355,0,-10" halfExtents="20,5,5" /> 								<!-- 3.18 -->
+							<BoxCollisionShape position="1360,0,0" halfExtents="15,5,5" />
+							<BoxCollisionShape position="1365,0,10" halfExtents="10,5,5" />
+							<BoxCollisionShape position="1370,0,20" halfExtents="5,5,5" />
+
+							<BoxCollisionShape position="1415,0,-10" halfExtents="20,5,5" /> 								<!-- 3.19--> 
+							<BoxCollisionShape position="1410,0,0" halfExtents="15,5,5" />
+							<BoxCollisionShape position="1405,0,10" halfExtents="10,5,5" />
+							<BoxCollisionShape position="1400,0,20" halfExtents="5,5,5" />
+
+							<BoxCollisionShape position="1500,0,-10" halfExtents="25,5,5" /> 								<!-- 3.20 -->
+							<BoxCollisionShape position="1505,0,0" halfExtents="20,5,5" />
+							<BoxCollisionShape position="1510,0,10" halfExtents="15,5,5" />
+							<BoxCollisionShape position="1515,0,20" halfExtents="10,5,5" />
+							
+
+
+
+
+						</collisionShapes>
+					</StaticEntity>
+
+					<StaticEntity collisionType="static" mass='-1'>
+						<collisionShapes>
+							<BoxCollisionShape position="920,0,60" halfExtents="15,5,5" /> 							<!-- 3.1 -->
+
+							<BoxCollisionShape position="1000,0,20" halfExtents="5,5,5" /> 							<!-- 3.4 -->
+
+
+							<BoxCollisionShape position="1180,0,20" halfExtents="5,5,5" /> 							<!-- 3.10 -->
+							<BoxCollisionShape position="1220,0,60" halfExtents="15,5,5" /> 						<!-- 3.11 -->
+							<BoxCollisionShape position="1280,0,60" halfExtents="5,5,5" /> 							<!-- 3.12 -->
+							<BoxCollisionShape position="1310,0,60" halfExtents="5,5,5" /> 							<!-- 3.15 -->
+							<BoxCollisionShape position="1300,0,20" halfExtents="10,5,5" /> 						<!-- 3.16 and 3.17-->
+							
+						</collisionShapes>
+					</StaticEntity>
+
+
+
+
+					<!-- Boden3 -->
+					<Model mesh="Cube2.12.mesh" position="890,0,-30" scale=10 Pitch=90/>
+					<Model mesh="Cube2.12.mesh" position="1010,0,-30" scale=10 Pitch=90/>
+					<Model mesh="Cube2.12.mesh" position="1130,0,-30" scale=10 Pitch=90/>
+					<Model mesh="Cube2.12.mesh" position="1250,0,-30" scale=10 Pitch=90/>
+
+					<Model mesh="Cube2.12.mesh" position="1370,0,-30" scale=10 Pitch=90/>
+					<Model mesh="Cube2.2.mesh" position="1490,0,-30" scale=10 Pitch=90/>
+					<Model mesh="Cube2.2.mesh" position="1510,0,-30" scale=10 Pitch=90/>
+					
+
+					<StaticEntity collisionType="static" mass='-1'>
+						<collisionShapes>
+							<BoxCollisionShape position="1205,0,-20" halfExtents="320,5,5" />
+						</collisionShapes>
+					</StaticEntity>
+
+
+
+
+
+					<!-- Luft4 -->
+					<Model mesh="Dreieck.mesh" position="1560,0,-10" scale=10 Roll=90 Pitch=-90 yaw=90/> 			<!-- L4.1 -->
+
+					<Model mesh="Rohr.mesh" position="1645,5,-35" scale=10  roll=90 yaw=90 pitch=-90 /> 			<!-- L4.2 -->
+
+					<Model mesh="Cube1.1.mesh" position="1690,0,20" scale=10/> 										<!-- L4.3 -->
+					<Model mesh="Cube1.1.mesh" position="1700,0,20" scale=10/> 										<!-- L4.4 -->
+
+					<SOBQBlock collisionType="static" type="Coin" position="1710,0,20" mass='-1'> 					<!-- L4.5 -->				
+						<attached>
+							<Model mesh="QCube.mesh" scale=10 pitch=90/>
+							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>				
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBQBlock> 
+
+					<Model mesh="Cube1.1.mesh" position="1720,0,20" scale=10/> 										<!-- L4.6 -->
+					<Model mesh="Rohr.mesh" position="1805,5,-35" scale=10  roll=90 yaw=90 pitch=-90 /> 			<!-- L4.7 -->
+					<Model mesh="Dreieckgross.mesh" position="1850,0,-10" scale=10 pitch=90 /> 						<!-- L4.8 -->
+
+
+
+
+					<Model mesh="Schloss.mesh" position="2050,40,60" scale=12 pitch=90/>					<!-- L4.12 -->
+					<Model mesh="Fahne.mesh" position="1984,-5,88" scale=10 pitch=90/>						<!-- L4.11 -->
+					<Model mesh="Fahnenstange.mesh" position="1990,0,95" pitch=90 scale=3/>					<!-- L4.10 -->
+					<Model mesh="Fundament.mesh" position="1990,0,-10" scale=10 yaw=180/>					<!-- L4.9 -->
+
+
+
+					
+					<!-- FLAG -->
+					<SOBFlagstone points = 100  position="1990,0,10" collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBFlagstone>
+					<SOBFlagstone points = 200  position="1990,0,20" collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBFlagstone>
+					<SOBFlagstone points = 400  position="1990,0,30" collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBFlagstone>
+					<SOBFlagstone points = 800  position="1990,0,40" collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBFlagstone>
+					<SOBFlagstone points = 1600  position="1990,0,50" collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBFlagstone>
+					<SOBFlagstone points = 2200  position="1990,0,60" collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBFlagstone>
+					<SOBFlagstone points = 2700  position="1990,0,70" collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBFlagstone>
+					<SOBFlagstone points = 3400  position="1990,0,80" collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBFlagstone>
+					<SOBFlagstone points = 4000  position="1990,0,90" collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBFlagstone>
+
+
+					<!-- Castlestone -->
+					<SOBCastlestone position="2060,0,-10" collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBCastlestone>
+
+					<SOBCastlestone position="2050,40,-10" collisionType="static">
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+						</collisionShapes>
+					</SOBCastlestone>
+					<StaticEntity collisionType="static" mass='-1'>
+						<collisionShapes>
+							<BoxCollisionShape position="2050,20,-20" halfExtents="5,20,5" />
+						</collisionShapes>
+					</StaticEntity>
+
+
+
+
+					<StaticEntity collisionType="static" mass='-1'>
+						<collisionShapes>
+
+							<BoxCollisionShape position="1690,0,20" halfExtents="5,5,5" /> 					<!-- 4.3 -->
+							<BoxCollisionShape position="1700,0,20" halfExtents="5,5,5" /> 					<!-- 4.4 -->
+							<BoxCollisionShape position="1720,0,20" halfExtents="5,5,5" /> 					<!-- 4.6 -->
+
+
+						</collisionShapes>
+					</StaticEntity>
+
+
+					<StaticEntity collisionType="static">
+						<collisionShapes>
+
+							<BoxCollisionShape position="1575,0,-10" halfExtents="20,5,5" /> 					<!-- 4.1--> 
+							<BoxCollisionShape position="1570,0,0" halfExtents="15,5,5" />
+							<BoxCollisionShape position="1565,0,10" halfExtents="10,5,5" />
+							<BoxCollisionShape position="1560,0,20" halfExtents="5,5,5" />
+
+							<BoxCollisionShape position="1645,0,-4" halfExtents="12,5,12" /> 					<!-- 4.2 -->
+
+
+							<BoxCollisionShape position="1805,0,-4" halfExtents="12,5,12" /> 					<!-- 4.7 -->
+
+							<BoxCollisionShape position="1860,0,-10" halfExtents="45,5,5" /> 					<!-- 4.8 -->
+							<BoxCollisionShape position="1865,0,0" halfExtents="40,5,5" />
+							<BoxCollisionShape position="1870,0,10" halfExtents="35,5,5" />
+							<BoxCollisionShape position="1875,0,20" halfExtents="30,5,5" />
+							<BoxCollisionShape position="1880,0,30" halfExtents="25,5,5" />
+							<BoxCollisionShape position="1885,0,40" halfExtents="20,5,5" />
+							<BoxCollisionShape position="1890,0,50" halfExtents="15,5,5" />
+							<BoxCollisionShape position="1895,0,60" halfExtents="10,5,5" />
+							<BoxCollisionShape position="1990,0,125" halfExtents="5,5,30" />
+							<BoxCollisionShape position="1940,0,150" halfExtents="45,5,5" />
+							
+
+
+						</collisionShapes>
+					</StaticEntity>
+
+
+
+
+
+					
+
+					//Boden4
+					<Model mesh="Cube2.12.mesh" position="1560,0,-30" scale=10 Pitch=90/>
+					<Model mesh="Cube2.12.mesh" position="1680,0,-30" scale=10 Pitch=90/>
+					<Model mesh="Cube2.12.mesh" position="1800,0,-30" scale=10 Pitch=90/>
+					<Model mesh="Cube2.12.mesh" position="1920,0,-30" scale=10 Pitch=90/>
+					<Model mesh="Cube2.12.mesh" position="2040,0,-30" scale=10 Pitch=90/>
+
+
+					
+					<Model mesh="Cube1.3.mesh" position="1990,10,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.3.mesh" position="1990,20,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.3.mesh" position="1990,30,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.3.mesh" position="1990,40,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.3.mesh" position="1960,10,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.1.mesh" position="1980,20,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.1.mesh" position="1970,20,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.1.mesh" position="1980,30,-20" scale=10 Pitch=90/>
+
+					<Model mesh="Cube1.1.mesh" position="2000,50,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.1.mesh" position="2010,50,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.1.mesh" position="2010,60,-20" scale=10 Pitch=90/>
+					
+
+					<Model mesh="Cube1.6.mesh" position="2020,10,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.6.mesh" position="2020,20,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.6.mesh" position="2020,30,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.6.mesh" position="2020,40,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.6.mesh" position="2020,50,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.6.mesh" position="2020,60,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.6.mesh" position="2020,70,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.6.mesh" position="2080,10,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.6.mesh" position="2080,20,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.6.mesh" position="2080,30,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.6.mesh" position="2080,40,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.6.mesh" position="2080,50,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.3.mesh" position="2080,60,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.1.mesh" position="2110,60,-20" scale=10 Pitch=90/>
+					<Model mesh="Cube1.3.mesh" position="2080,70,-20" scale=10 Pitch=90/>
+
+					
+
+					<StaticEntity collisionType="static" mass='-1'>
+						<collisionShapes>
+							<BoxCollisionShape position="1855,0,-20" halfExtents="300,5,5" />
+						</collisionShapes>
+					</StaticEntity>
+
+
+
+
+
+
+					
+
+
+				</Scene>
+			</Level>
+
Index: code/branches/Presentation_HS17/TRANSFER/orxo_material_fire.material
===================================================================
--- code/branches/Presentation_HS17/TRANSFER/orxo_material_fire.material	(revision 11678)
+++ code/branches/Presentation_HS17/TRANSFER/orxo_material_fire.material	(revision 11678)
@@ -0,0 +1,42 @@
+// orxo_material genrated by blender2ogre 0.6.0
+
+material orxo_material_fire 
+{
+    receive_shadows on 
+
+    technique
+    {
+        pass orxo_material_fire
+        {
+            ambient 0.800000011920929 0.800000011920929 0.800000011920929 1.0
+            diffuse 0.6400000190734865 0.6400000190734865 0.6400000190734865 1.0
+            specular 0.5 0.5 0.5 1.0 12.5
+            emissive 0.0 0.0 0.0 1.0
+
+            alpha_to_coverage off
+            colour_write on
+            cull_hardware clockwise
+            depth_check on
+            depth_func less_equal
+            depth_write on
+            illumination_stage 
+            light_clip_planes off
+            light_scissor off
+            lighting on
+            normalise_normals off
+            polygon_mode solid
+            scene_blend one zero
+            scene_blend_op add
+            shading gouraud
+            transparent_sorting on
+
+            texture_unit 
+            {
+                texture orxo_texture_fire.png
+                tex_address_mode wrap
+                scale 1.0 1.0
+                colour_op modulate
+            }
+        }
+    }
+}
Index: code/branches/Presentation_HS17/data/levels/FlappyOrx.oxw
===================================================================
--- code/branches/Presentation_HS17/data/levels/FlappyOrx.oxw	(revision 11678)
+++ code/branches/Presentation_HS17/data/levels/FlappyOrx.oxw	(revision 11678)
@@ -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/data/levels/SOB.oxw
===================================================================
--- code/branches/Presentation_HS17/data/levels/SOB.oxw	(revision 11677)
+++ code/branches/Presentation_HS17/data/levels/SOB.oxw	(revision 11678)
@@ -13,4 +13,5 @@
 	include("overlays/SOBHUD.oxo")
 	?>
+
 
 
@@ -48,5 +49,4 @@
 
 
-
 	<Template name=sobFigureTemplate>
 		<SOBFigure camerapositiontemplate=sobfigurecameras collisionType="dynamic" position="0,0,30">
@@ -57,10 +57,37 @@
 
 			<collisionShapes>
-				<BoxCollisionShape position="-2,0,2" halfExtents="3,1,10" />
+				<BoxCollisionShape position="0,0,2" halfExtents="3,1,10" />
 			</collisionShapes>
 
 
 		</SOBFigure>
+	</Template> 
+
+
+	<Template name=fireball>
+		<SOBFireball collisionType="dynamic" speed=90>
+			<attached>
+				<Model mesh="planets/sol.mesh" position="0,0,0" scale=3 pitch=90/> 
+
+				<ParticleSpawner source="Orxonox/fire4" startdelay=0  position="-4,0,0" visible="false"/>
+				
+			</attached>
+			<collisionShapes>
+				<SphereCollisionShape position="0,0,0" radius="3" /> 			
+			</collisionShapes>
+		</SOBFireball>
 	</Template>
+
+	<Template name=gumbaShootable>
+		<SOBGumbaBoss collisionType="dynamic" speed=60>
+			<attached>
+				<Model mesh="Goomba.mesh" position="0,0,1" scale=3 pitch=90/> 				
+			</attached>
+			<collisionShapes>
+				<BoxCollisionShape position="0,0,0" halfExtents="5,5,3" /> 			
+			</collisionShapes>
+		</SOBGumbaBoss>
+	</Template>
+
 
 	<Level
@@ -95,5 +122,8 @@
 
 
-					<!--Gumba-->
+
+
+
+
 
 					<SOBGumba collisionType="dynamic" speed=40 position = "240,0,0">
@@ -106,4 +136,5 @@
 						</collisionShapes>
 					</SOBGumba>
+
 					<SOBGumba collisionType="dynamic" speed=30 position = "420,0,0">
 						<attached>
@@ -193,24 +224,15 @@
 					</SOBGumba>
 
-					<SOBGumba collisionType="dynamic" speed=30 position = "1750,0,0">
-						<attached>
-							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
-							
-						</attached>
-						<collisionShapes>
-							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
-						</collisionShapes>
-					</SOBGumba>
-
-					<SOBGumba collisionType="dynamic" speed=20 position = "1770,0,0">
-						<attached>
-							<Model mesh="Goomba.mesh" position="0,0,21" scale=3 pitch=90/> 
-							
-						</attached>
-						<collisionShapes>
-							<BoxCollisionShape position="0,0,20" halfExtents="5,5,3" /> 			
-						</collisionShapes>
-					</SOBGumba>
-
+					<!--GumbaBoss-->
+					<SOBGumbaBoss collisionType="dynamic" speed=20 position = "1750,0,0">
+						<attached>
+							<Model mesh="Goomba.mesh" position="0,0,21" scale=6 pitch=90/> 
+							
+						</attached>
+						<collisionShapes>
+							<BoxCollisionShape position="0,0,20" halfExtents="10,10,6" /> 			
+						</collisionShapes>
+					</SOBGumbaBoss>
+x	
 
 					<!--CollisionShape for Gumba-->
@@ -225,9 +247,4 @@
 						</collisionShapes>
 					</StaticEntity>
-
-
-
-					
-
 
 
@@ -581,23 +598,8 @@
 
 
-					<!-- Luft4 -->
+					<!-- Luft4 (BossAbschnitt)-->
 					<Model mesh="Dreieck.mesh" position="1560,0,-10" scale=10 Roll=90 Pitch=-90 yaw=90/> 			<!-- L4.1 -->
 
 					<Model mesh="Rohr.mesh" position="1645,5,-35" scale=10  roll=90 yaw=90 pitch=-90 /> 			<!-- L4.2 -->
-
-					<Model mesh="Cube1.1.mesh" position="1690,0,20" scale=10/> 										<!-- L4.3 -->
-					<Model mesh="Cube1.1.mesh" position="1700,0,20" scale=10/> 										<!-- L4.4 -->
-
-					<SOBQBlock collisionType="static" type="Coin" position="1710,0,20" mass='-1'> 					<!-- L4.5 -->				
-						<attached>
-							<Model mesh="QCube.mesh" scale=10 pitch=90/>
-							<Model mesh="QCube-grey.mesh" scale=10 pitch=90 visible=false/>				
-						</attached>
-						<collisionShapes>
-							<BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
-						</collisionShapes>
-					</SOBQBlock> 
-
-					<Model mesh="Cube1.1.mesh" position="1720,0,20" scale=10/> 										<!-- L4.6 -->
 					<Model mesh="Rohr.mesh" position="1805,5,-35" scale=10  roll=90 yaw=90 pitch=-90 /> 			<!-- L4.7 -->
 					<Model mesh="Dreieckgross.mesh" position="1850,0,-10" scale=10 pitch=90 /> 						<!-- L4.8 -->
@@ -606,5 +608,5 @@
 
 
-					<Model mesh="Schloss.mesh" position="2050,40,60" scale=12 pitch=90/>					<!-- L4.12 -->
+					<Model mesh="Schloss.mesh" position="2050,40,80" scale=15 pitch=90/>					<!-- L4.12 -->
 					<Model mesh="Fahne.mesh" position="1984,-5,88" scale=10 pitch=90/>						<!-- L4.11 -->
 					<Model mesh="Fahnenstange.mesh" position="1990,0,95" pitch=90 scale=3/>					<!-- L4.10 -->
@@ -680,17 +682,4 @@
 					</StaticEntity>
 
-
-
-
-					<StaticEntity collisionType="static" mass='-1'>
-						<collisionShapes>
-
-							<BoxCollisionShape position="1690,0,20" halfExtents="5,5,5" /> 					<!-- 4.3 -->
-							<BoxCollisionShape position="1700,0,20" halfExtents="5,5,5" /> 					<!-- 4.4 -->
-							<BoxCollisionShape position="1720,0,20" halfExtents="5,5,5" /> 					<!-- 4.6 -->
-
-
-						</collisionShapes>
-					</StaticEntity>
 
 
Index: code/branches/Presentation_HS17/data/levels/templates/enemyFlappyOrx.oxt
===================================================================
--- code/branches/Presentation_HS17/data/levels/templates/enemyFlappyOrx.oxt	(revision 11678)
+++ code/branches/Presentation_HS17/data/levels/templates/enemyFlappyOrx.oxt	(revision 11678)
@@ -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/data/levels/templates/spaceshipFlappyOrx.oxt
===================================================================
--- code/branches/Presentation_HS17/data/levels/templates/spaceshipFlappyOrx.oxt	(revision 11678)
+++ code/branches/Presentation_HS17/data/levels/templates/spaceshipFlappyOrx.oxt	(revision 11678)
@@ -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/data/overlays/FlappyOrxHUD.oxo
===================================================================
--- code/branches/Presentation_HS17/data/overlays/FlappyOrxHUD.oxo	(revision 11678)
+++ code/branches/Presentation_HS17/data/overlays/FlappyOrxHUD.oxo	(revision 11678)
@@ -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/data/particle/fire3.particle
===================================================================
--- code/branches/Presentation_HS17/data/particle/fire3.particle	(revision 11677)
+++ code/branches/Presentation_HS17/data/particle/fire3.particle	(revision 11678)
@@ -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/src/libraries/tools/Mesh.cc
===================================================================
--- code/branches/Presentation_HS17/src/libraries/tools/Mesh.cc	(revision 11677)
+++ code/branches/Presentation_HS17/src/libraries/tools/Mesh.cc	(revision 11678)
@@ -79,4 +79,6 @@
     }
 
+    
+
     void Mesh::setCastShadows(bool bCastShadows)
     {
@@ -98,4 +100,15 @@
         if (this->entity_)
             this->entity_->setMaterialName(name);
+    }
+
+    // PRE: a valid  Ogre::Entity* entity with a valid subentity at index
+    // POST: changed material of subentity at index to name
+    void Mesh::setSubMaterial(const std::string& name, const int index){
+         if (this->entity_ && this->entity_->getSubEntity(index))
+        {
+                this->entity_->getSubEntity(index)->setMaterialName(name);
+        }
+        else 
+            orxout() << "ERROR at Index " << index << endl;
     }
 
Index: code/branches/Presentation_HS17/src/libraries/tools/Mesh.h
===================================================================
--- code/branches/Presentation_HS17/src/libraries/tools/Mesh.h	(revision 11677)
+++ code/branches/Presentation_HS17/src/libraries/tools/Mesh.h	(revision 11678)
@@ -50,5 +50,5 @@
             void setMaterial(const std::string& name);
             const std::string& getMaterial() const;
-
+            void setSubMaterial(const std::string& name, const int index);
             void setVisible(bool bVisible);
             bool isVisible() const;
Index: code/branches/Presentation_HS17/src/modules/CMakeLists.txt
===================================================================
--- code/branches/Presentation_HS17/src/modules/CMakeLists.txt	(revision 11677)
+++ code/branches/Presentation_HS17/src/modules/CMakeLists.txt	(revision 11678)
@@ -46,2 +46,3 @@
 ADD_SUBDIRECTORY(hover)
 ADD_SUBDIRECTORY(superorxobros)
+ADD_SUBDIRECTORY(flappyorx)
Index: code/branches/Presentation_HS17/src/modules/flappyorx/CMakeLists.txt
===================================================================
--- code/branches/Presentation_HS17/src/modules/flappyorx/CMakeLists.txt	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/flappyorx/CMakeLists.txt	(revision 11678)
@@ -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/src/modules/flappyorx/FlappyOrx.cc
===================================================================
--- code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrx.cc	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrx.cc	(revision 11678)
@@ -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/src/modules/flappyorx/FlappyOrx.h
===================================================================
--- code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrx.h	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrx.h	(revision 11678)
@@ -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/src/modules/flappyorx/FlappyOrxCenterPoint.cc
===================================================================
--- code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxCenterPoint.cc	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxCenterPoint.cc	(revision 11678)
@@ -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/src/modules/flappyorx/FlappyOrxCenterPoint.h
===================================================================
--- code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxCenterPoint.h	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxCenterPoint.h	(revision 11678)
@@ -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/src/modules/flappyorx/FlappyOrxHUDinfo.cc
===================================================================
--- code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxHUDinfo.cc	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxHUDinfo.cc	(revision 11678)
@@ -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/src/modules/flappyorx/FlappyOrxHUDinfo.h
===================================================================
--- code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxHUDinfo.h	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxHUDinfo.h	(revision 11678)
@@ -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/src/modules/flappyorx/FlappyOrxPrereqs.h
===================================================================
--- code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxPrereqs.h	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxPrereqs.h	(revision 11678)
@@ -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/src/modules/flappyorx/FlappyOrxShip.cc
===================================================================
--- code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxShip.cc	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxShip.cc	(revision 11678)
@@ -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/src/modules/flappyorx/FlappyOrxShip.h
===================================================================
--- code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxShip.h	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/flappyorx/FlappyOrxShip.h	(revision 11678)
@@ -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__ */
Index: code/branches/Presentation_HS17/src/modules/superorxobros/CMakeLists.txt
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/CMakeLists.txt	(revision 11677)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/CMakeLists.txt	(revision 11678)
@@ -9,7 +9,9 @@
   SOBHUDInfo.cc
   SOBGumba.cc
+  SOBFireball.cc
   SOBFlagstone.cc
   SOBCastlestone.cc
   SOBCoin.cc
+  SOBGumbaBoss.cc
 
 )
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOB.cc
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOB.cc	(revision 11677)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOB.cc	(revision 11678)
@@ -44,4 +44,5 @@
 #include "SOBFigure.h"
 #include "graphics/Camera.h"
+#include "Highscore.h"
 
 
@@ -49,5 +50,5 @@
 namespace orxonox
 {
-
+    bool newHighscore=0;
     RegisterUnloadableClass(SOB);
 
@@ -124,5 +125,5 @@
         GSLevel::startMainMenu();
         Deathmatch::end();
-    }
+}
 
     void SOB::restart() {
@@ -167,5 +168,10 @@
         if (this->figure_ != nullptr && figure_->lvlEnded_) {
             std::stringstream a;
-            a << "Nice! " << getPoints() << " Points in " << (400-getTimeLeft())/2 <<"s.\n\nPress <Space> to restart";
+            if(!newHighscore){
+                a << "Nice! " << getPoints() << " Points in " << (400-getTimeLeft())/2 <<"s.\n\nPress <Space> to restart";
+            }
+            else{
+                a << "Congrats, new Highscore! " << getPoints() << " Points in " << (400-getTimeLeft())/2 <<"s.\n\nPress <Space> to restart";
+            }
             info_ =a.str();
 
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOB.h
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOB.h	(revision 11677)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOB.h	(revision 11678)
@@ -76,4 +76,7 @@
                 points_+=100;
             }
+            void addGumbaBoss() {
+                points_+=5000;
+            }
             void addPoints(int poi) {
                 points_+=poi;
@@ -103,4 +106,5 @@
 
             WeakPtr<SOBCenterpoint> center_;
+            bool newHighscore;
 
         protected:
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOBFigure.cc
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOBFigure.cc	(revision 11677)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOBFigure.cc	(revision 11678)
@@ -23,4 +23,6 @@
  *      Julien Kindle
  *   Co-authors:
+ *      Noah Zarro
+ *      Theo von Arx
  *      
  *
@@ -39,10 +41,15 @@
 #include "graphics/Camera.h"
 #include "graphics/ParticleSpawner.h"
+#include <OgreMath.h>
 
 #include "SOBMushroom.h"
 #include "SOBGumba.h"
+#include "SOBGumbaBoss.h"
+#include "SOBFireball.h"
 #include "SOB.h"
 #include "SOBFlagstone.h"
 #include "SOBCastlestone.h"
+#include "SOBFireball.h"
+#include "Highscore.h"
 #include <BulletCollision/NarrowPhaseCollision/btManifoldPoint.h>
 
@@ -59,26 +66,35 @@
 
         //Vars for movement of player
-        moveUpPressed_ = false;
-        moveDownPressed_ = false;
-        moveLeftPressed_ = false;
-        moveDownPressed_ = false;
-        firePressed_ = false;
-        collDisZ_ = 0;
+        moveUpPressed_      = false;
+        moveDownPressed_    = false;
+        moveLeftPressed_    = false;
+        moveDownPressed_    = false;
+        firePressed_        = false;
+        collDisZ_           = 0;
+
         //Times and turning
-        timeSinceLastFire_ = 0.0;
-        lastSpeed_z = 0.0;
-        pitch_ = 0.0;
-        timeCounter_ = 0;
+        timeSinceLastFire_  = 0.0;
+        lastSpeed_z         = 0.0;
+        pitch_              = 0.0;
+        timeCounter_        = 0;
 
         //Properties of player
-        gotPowerUp_ = false;
-        isColliding_ = true;
-        particlespawner_ = NULL;
+
+        isColliding_        = true;
+        particlespawner_    = NULL;
 
         //Properties of players life
-        predead_ = false;
-        dead_ = false;
-        lvlEnded_ = false;
+        predead_            = false;
+        dead_               = false;
+        lvlEnded_           = false;
         reachedLvlEndState_ = 0;
+
+        // Properties concerning PowerUps and items
+        PowerUpCounter_     = 0;
+        maxPowerUp_         = 2;
+        FireballPower       = 2;
+        //Properties of fireing Fireballs, NOTE! fireballs are fired with the moveUP Key, not with the fire key
+        fireallowed_        = true;
+        firecooldown_       = 0;
 
         
@@ -97,39 +113,75 @@
 
         //Orxocast returns object with casted type if otherObject has that class, and if not a nullptr
-        SOBMushroom* mush = orxonox_cast<SOBMushroom*>(otherObject);
-        SOBGumba* gumba = orxonox_cast<SOBGumba*>(otherObject);
-        SOBFlagstone* flagstone = orxonox_cast<SOBFlagstone*>(otherObject);
-        SOBCastlestone* castlestone = orxonox_cast<SOBCastlestone*>(otherObject);
-
-        //Check if otherObject is a powerup
+        SOBMushroom*    mush        = orxonox_cast<SOBMushroom*>    (otherObject);
+        SOBGumba*       gumba       = orxonox_cast<SOBGumba*>       (otherObject);
+        SOBGumbaBoss*   gumbaBoss   = orxonox_cast<SOBGumbaBoss*>   (otherObject);
+        SOBFlagstone*   flagstone   = orxonox_cast<SOBFlagstone*>   (otherObject);
+        SOBCastlestone* castlestone = orxonox_cast<SOBCastlestone*> (otherObject);
+        SOBFireball*    fireball    = orxonox_cast<SOBFireball*>    (otherObject);
+        SOB* SOBGame                = orxonox_cast<SOB*>            (getGametype()); 
+
+
+        //Check if otherObject is a powerup-mushroom
         if (mush != nullptr && !(mush->hasCollided_)) {
             otherObject->destroyLater();
-            gotPowerUp_ = true;
-            SOB* SOBGame = orxonox_cast<SOB*>(getGametype()); //Get the Gametype
+
+            PowerUpCounter_++;
+            if(PowerUpCounter_ > maxPowerUp_)   PowerUpCounter_ = maxPowerUp_; // you had already the max
+            else                                this->changeClothes();
+
             SOBGame->addMushroom(); // Tell the gametype to increase points
             mush->hasCollided_ = true; // needed because of destroyLater takes some time and player should receive points only once
+            
+            
+        }
+
+        
 
         //Check if otherObject is a Gumba (that walking enemies)
-        } else if (gumba != nullptr && !(gumba->hasCollided_)) {
-
-            //If player jumps on its head, kill it, else, kill the player
+
+         else if (gumba != nullptr && gumbaBoss == nullptr && !(gumba->hasCollided_)) {
+
+            //If player jumps on its head, kill the Gumba, else, kill the player
             if (getVelocity().z >= -20) {
-              Vector3 vel = getVelocity();
-              vel.y = -80;
-              vel.z = 200;
-              setVelocity(vel);
-              predead_=true; 
-              SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
-              SOBGame->setDone(true);
+                // If player hasn't a power up, he dies. Else he shrinks and the gumba dies.
+                if(PowerUpCounter_ == 0){
+                    this->die();
+                } 
+                else{
+                    PowerUpCounter_--;
+                    this->changeClothes();
+
+                    gumba->destroyLater();
+                    gumba->hasCollided_ = true;
+                }
 
           } else {
             gumba->destroyLater();
             gumba->hasCollided_ = true;
-            SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
             SOBGame->addGumba();
 
 
-        }
-    }
+            }
+        }
+        else if (gumbaBoss != nullptr && !(gumbaBoss->hasCollided_)) {
+            if (getVelocity().z >= -20) {
+                // If player hasn't a power up, he dies. Else he dies directly.
+                this->die(); 
+            }
+
+            else {
+                gumbaBoss->destroyLater();
+                gumbaBoss->hasCollided_ = true;
+                SOBGame->addGumbaBoss();
+                }
+        }
+        else if (fireball != nullptr && !(fireball->hasCollided_)){
+            if(PowerUpCounter_ == 0){
+                    this->die();
+                } 
+            PowerUpCounter_--;
+            this->changeClothes();
+            fireball->destroyLater();
+        }
 
     //Purpose is that if player hits the flag, he should walk into the castle at the end of the level. For that we use SOBCastlestone
@@ -137,5 +189,5 @@
         flagstone->hasCollided_ = true;
         reachedLvlEndState_ = 1;
-        SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+
         SOBGame->setDone(true);
         SOBGame->addPoints(flagstone->getPoints());
@@ -159,4 +211,30 @@
 }
 
+//Function to spawn the Fireball
+void SOBFigure::spawnFireball() {
+        SOBCenterpoint* center_ = ((SOB*)getGametype())->center_;
+
+         SOBFireball* ball = new SOBFireball(center_->getContext());
+         Vector3 spawnpos = this->getWorldPosition();
+         spawnpos.z += 0;
+
+        if (ball != nullptr && center_ != nullptr)
+        {
+            ball->addTemplate("fireball");
+            bool direction = ((this->getWorldOrientation().getRoll().valueRadians())>-1.6&&(this->getWorldOrientation().getRoll().valueRadians()<1.6));
+            ball->setDirection(direction);
+            if(direction)
+            {
+                spawnpos.x+=10;
+            }
+            else
+            {
+                spawnpos.x-=10;
+            }
+            ball->setPosition(spawnpos);
+
+        }
+     }
+
 //For those of you who don't have an idea: the tick function is called about 50 times/sec
 void SOBFigure::tick(float dt)
@@ -166,4 +244,5 @@
 
     bool inputAllowed = true;
+    //SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
 
     //the particle spawner that generates the fire from the backpack when pressed
@@ -174,5 +253,7 @@
             particlespawner_ = object;
         }
-    }
+
+    }
+    
 
 
@@ -190,8 +271,8 @@
     //if input blocked, then cancel every movement operation
     if (!inputAllowed) {
-        moveUpPressed_ = false;
-        moveDownPressed_ = false;
-        moveLeftPressed_ = false;
-        moveRightPressed_ = false;
+        moveUpPressed_      = false;
+        moveDownPressed_    = false;
+        moveLeftPressed_    = false;
+        moveRightPressed_   = false;
     }
 
@@ -204,4 +285,5 @@
     if (hasLocalController())
     {
+        SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
         Vector3 velocity = getVelocity();
         Vector3 position = getPosition();
@@ -212,5 +294,4 @@
         if (position.z < -100) {
             dead_ = true;
-            SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
             SOBGame->setDone(true);
         }
@@ -221,5 +302,5 @@
             velocity.z = 0;
             setVelocity(velocity);
-            SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+           
             if (firePressed_)
                 SOBGame->restart();
@@ -242,10 +323,10 @@
         else
             particlespawner_->setVisible(false); 
-
+        
 
         //If player hits space and collides against an object under him then jump
-        if (inputAllowed && firePressed_ && isColliding_ && (collDisZ_ >= 7.75 && collDisZ_ <+ 8.25)) {
-            gravityAcceleration_ = 100.0;
-            velocity.z = 110; 
+        if (inputAllowed && firePressed_ && isColliding_ && (collDisZ_ >= 0 && collDisZ_ <+ 10)) {
+            gravityAcceleration_ = 350;
+            velocity.z = 175; 
         }
 
@@ -274,4 +355,21 @@
         }
 
+        //If moveUp pressed, fire a fireball
+        if(moveUpPressed_ && (PowerUpCounter_ >= FireballPower) && fireallowed_)
+        {
+            spawnFireball();
+            fireallowed_  = false;
+            firecooldown_ = 0;
+        }
+
+        //Increase the firecooldown
+        if(firecooldown_> 0.5)
+        {
+            fireallowed_ = true;
+        }
+        if(!fireallowed_)
+        {
+            firecooldown_ += dt;
+        }
 
         //Again another EndOfLevel behavior
@@ -283,6 +381,15 @@
             velocity.x = 0;
             velocity.y = 20;
+            setOrientation(Vector3::UNIT_Z, Degree(90));
         }
         if (reachedLvlEndState_ == 4) {
+            //Highscore
+            if (Highscore::exists()){
+                    int score = SOBGame->getPoints();
+                    if(score > Highscore::getInstance().getHighestScoreOfGame("Super Orxo Bros.")) 
+                        Highscore::getInstance().storeHighscore("Super Orxo Bros.",score);
+                        SOBGame->newHighscore=1;
+
+            }
             lvlEnded_ = true;
             dead_ = true;
@@ -307,16 +414,11 @@
         }
 
-
-
-
-    }
-
-
+    }
 
     // Reset key variables
-    moveUpPressed_ = false;
-    moveDownPressed_ = false;
-    moveLeftPressed_ = false;
-    moveRightPressed_ = false;
+    moveUpPressed_      = false;
+    moveDownPressed_    = false;
+    moveLeftPressed_    = false;
+    moveRightPressed_   = false;
 
     isColliding_ = false;
@@ -364,3 +466,34 @@
 
 
-}
+
+// PRE: name is an existing name of a material. Example orxo_material for orxo_material.material in data_extern/materials
+//      !!! PowerUpCounter_ has to be modified before changing the clothes!!!
+// POST: clothes of body of player are changed to name
+void SOBFigure::changeClothes(){
+            // clothes: white (basic), red (one PowerUp), orange (Fireball enabled)
+            std::string clothes[] = {"orxo_material", "orxo_material_gross", "orxo_material_fire"};
+
+            std::set<WorldEntity*> attachedObjects = this->getAttachedObjects();
+            std::set<WorldEntity*>::iterator it;
+            for (it = attachedObjects.begin(); it != attachedObjects.end(); ++it)
+            {
+                Model* FiguresModel = orxonox_cast<Model*>(*it);
+                if (FiguresModel != nullptr)
+                {
+                    FiguresModel->setSubMaterial(clothes[PowerUpCounter_] , 4); // 4 is the body
+                }
+            }   
+}
+// PRE:
+// POST: Player jumps out of the game, game is finished and can be restarted.
+void SOBFigure::die(){
+    Vector3 vel = getVelocity();
+    vel.y = -80;
+    vel.z = 200;
+    setVelocity(vel);
+    predead_= true; 
+    SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+    SOBGame->setDone(true);
+}
+
+}
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOBFigure.h
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOBFigure.h	(revision 11677)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOBFigure.h	(revision 11678)
@@ -46,4 +46,7 @@
             virtual void boost(bool boost) override;
             virtual  bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+            void changeClothes();
+            void spawnFireball();
+            void die();
 
             bool dead_;
@@ -54,5 +57,6 @@
 
             //Soooo many declarations
-            bool gotPowerUp_;
+            bool fireallowed_;
+
             bool moveUpPressed_;
             bool moveDownPressed_;
@@ -63,8 +67,12 @@
             float timeSinceLastFire_;
             float lastSpeed_z;
+            float firecooldown_;
             SOBCenterpoint* sobcenterpoint;
             float pitch_;
             bool isColliding_;
             WorldEntity* particlespawner_;
+            int PowerUpCounter_;
+            int maxPowerUp_;
+            int FireballPower;
             int sgn(float x);
             int reachedLvlEndState_;
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOBFireball.cc
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOBFireball.cc	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOBFireball.cc	(revision 11678)
@@ -0,0 +1,209 @@
+    /*
+ *   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:
+ *      Theo von Arx
+ *      Noah Zarro
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBFireball.cc
+    @brief Fireballs are the Projectile of the Fireflower Powerup
+*/
+
+#include "SOBFireball.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "SOBFigure.h"
+#include "SOBGumba.h"
+#include "SOBGumbaBoss.h"    
+#include "SOB.h"    
+#include "util/Output.h"
+#include <BulletCollision/NarrowPhaseCollision/btManifoldPoint.h>
+#include "graphics/ParticleSpawner.h"
+
+
+
+
+namespace orxonox
+{
+    RegisterClass(SOBFireball);
+
+    SOBFireball::SOBFireball(Context* context) : MovableEntity(context)
+    {
+        RegisterObject(SOBFireball);
+
+        attachedToFigure_ = false;
+        setAngularFactor(0.0);
+        figure_ = nullptr;
+        this->enableCollisionCallback();
+        gravityAcceleration_ = 350.0;
+
+        speed_ = 0;
+        hasCollided_=false;
+        lastPos_ = getPosition();
+        lastPos_.x -= 20;
+        changeAllowed_ = true;
+        changedOn_ = 0.0;
+        goesRight_ = true;
+        collDisX_ = 0;
+        collDisZ_ = 0;
+        hitCounter_ = 0;
+        particlespawner_ = NULL ;
+
+
+
+   
+
+    }
+
+    
+
+    void SOBFireball::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBFireball, XMLPort, xmlelement, mode);
+        XMLPortParam(SOBFireball, "speed", setSpeed, getSpeed, xmlelement, mode);
+
+
+    }
+
+    void SOBFireball::setDirection(const bool direction)
+    {
+        if(direction)
+        {
+            goesRight_=true;
+        }
+        else
+        {
+            goesRight_=false;
+        }
+    }
+
+    
+    bool SOBFireball::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) {
+        collDisX_ = getPosition().x - contactPoint.getPositionWorldOnB().getX();
+        collDisZ_ = getPosition().z - contactPoint.getPositionWorldOnB().getZ();
+
+        SOBGumba*       gumba       = orxonox_cast<SOBGumba*>       (otherObject);
+        SOBGumbaBoss*   gumbaBoss   = orxonox_cast<SOBGumbaBoss*>   (otherObject);
+
+        if(gumbaBoss != nullptr && !(gumba->hasCollided_))  //Fireballs can't destroy GumbaBosses, they get destroyed themselves instead
+        {
+            this->destroyLater();
+            this->hasCollided_ = true;
+        }
+
+
+        if(gumba!=nullptr && gumbaBoss == nullptr && !(gumba->hasCollided_)) //if other object is a Gumba, kill the Gumba and add score and destroy the fireball
+        {
+            gumba->destroyLater();
+            gumba->hasCollided_ = true;
+            SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+            SOBGame->addGumba();
+            this->destroyLater();
+            this->hasCollided_ = true;
+        }
+
+
+         //collision with either top or bottom of a block
+        else if(changeAllowed_ && (abs(collDisX_)<=abs(collDisZ_)))
+        {
+            changeAllowed_ = false;
+            Vector3 velocity = getVelocity();
+            velocity.z = -velocity.z;
+     
+
+            setVelocity(velocity);
+        }
+
+        //collision with the vertical side of a block 
+        else if(changeAllowed_ && (abs(collDisX_)>abs(collDisZ_))) 
+        {
+            changeAllowed_ = false;
+            goesRight_=!goesRight_;
+        }
+
+        hitCounter_++;
+        
+        collDisZ_=0;
+        collDisX_=0;
+
+        return true;
+    }
+
+
+    void SOBFireball::setFigure(SOBFigure* newFigure)
+    {
+        figure_ = newFigure;
+    }
+
+
+
+    void SOBFireball::tick(float dt)
+    {
+        SUPER(SOBFireball, tick, 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_ = object;
+            }
+
+        }
+
+        if(particlespawner_ != NULL)
+            particlespawner_->setVisible(true);
+        if (!changeAllowed_) {
+            changedOn_+= dt;
+            // After a collision, we don't listen for collisions for 200ms - that's because one wall can cause several collisions!
+            if (changedOn_> 0.2) {
+                changeAllowed_ = true;
+                changedOn_ = 0.0;
+
+            }
+        
+        }
+            int dir = 1;
+            if (!goesRight_)
+                dir = -1;
+
+            Vector3 velocity = getVelocity();
+            velocity.z -= gravityAcceleration_*dt;
+            velocity.x = dir*speed_;
+            velocity.y = 0;
+            if(hitCounter_ >= 3) velocity.y = 0.1*speed_;
+            setVelocity(velocity);
+
+            lastPos_ = getPosition();
+
+            if(abs(this->getPosition().z) > 1000) delete this;
+        
+    }
+    
+
+
+}
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOBFireball.h
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOBFireball.h	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOBFireball.h	(revision 11678)
@@ -0,0 +1,85 @@
+/*
+ *   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:
+ *      Theo von Arx
+        Noah Zarro
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBFireball.h
+    @brief Declaration of the SOBFireball class. Fireballs are the Projectile of the Fireflower Powerup
+    @ingroup SOB
+*/
+
+#ifndef _SOBFireball_H__
+#define _SOBFireball_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+    class _SOBExport SOBFireball : public MovableEntity
+    {
+        public:
+            SOBFireball(Context* context);
+            virtual ~SOBFireball() {}
+
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void setFigure(SOBFigure* newFigure);
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+            virtual void tick(float dt) override;
+            void setDirection(const bool direction);
+          
+            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_;
+            Vector3 lastPos_;
+            bool goesRight_;
+            bool changeAllowed_;
+            float changedOn_;
+            int hitCounter_;
+            WorldEntity* particlespawner_;
+
+ 
+
+
+            float collDisX_;    
+            float collDisZ_;
+           
+    };
+}
+
+#endif /* _SOBFireball_H__ */
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOBFlagstone.h
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOBFlagstone.h	(revision 11677)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOBFlagstone.h	(revision 11678)
@@ -29,5 +29,6 @@
 /**
     @file SOBFlagstone.h
-    @brief Declaration of the SOBFlagstone class. This class is used for the flag - for everz 10x10x10 stone we added a flagstone with different points. The higher you touch the flag, the more points you get.
+    @brief Declaration of the SOBFlagstone class. 
+            This class is used for the flag - for every 10x10x10 stone we added a flagstone with different points. The higher you touch the flag, the more points you get.
     @ingroup SOB
 */
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOBGumba.cc
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOBGumba.cc	(revision 11677)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOBGumba.cc	(revision 11678)
@@ -60,4 +60,7 @@
         changeAllowed_ = true;
         changedOn_ = 0.0;
+        creator_ = nullptr;
+        maxLifetime_ = 10;
+        lifetime_ = 0;
         
     }
@@ -91,5 +94,21 @@
     }
 
+    void SOBGumba::setDirection(const bool direction)
+    {
+        if(direction)
+        {
+            goesRight_=true;
+        }
+        else
+        {
+            goesRight_=false;
+        }
+    }
 
+    void SOBGumba::die(){
+        Vector3 velocity = this->getVelocity();
+        velocity.y = speed_;
+        this->setVelocity(velocity);
+    }
 
     void SOBGumba::tick(float dt)
@@ -100,5 +119,5 @@
             changedOn_+= dt;
             // After a collision, we don't listen for collisions for 200ms - that's because one wall can cause several collisions!
-            if (changedOn_> 0.200) {
+            if (changedOn_> 0.400) {
                 changeAllowed_ = true;
                 changedOn_ = 0.0;
@@ -106,5 +125,5 @@
             }
         }
-        
+    
 
         int dir = 1;
@@ -113,11 +132,25 @@
 
         Vector3 velocity = getVelocity();
+        if(velocity.z > -1 && velocity.z < 1)
+        {
+            velocity.x = dir*speed_;
+        }      
+
         velocity.z -= gravityAcceleration_*dt;
-        velocity.x = dir*speed_;
         setVelocity(velocity);
 
         lastPos_ = getPosition();
+
+        if (creator_ != nullptr)
+        {
+            lifetime_ += dt;
+            if(lifetime_>maxLifetime_)
+            {
+                
+            }
+        }
+
+        if(abs(this->getPosition().z) > 1000) delete this;
+
     }
-
-
 }
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOBGumba.h
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOBGumba.h	(revision 11677)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOBGumba.h	(revision 11678)
@@ -51,4 +51,6 @@
             virtual void tick(float dt) override;
 
+            void setDirection(const bool direction);
+            void die();
           
             bool attachedToFigure_;
@@ -60,4 +62,5 @@
 
             bool hasCollided_;
+            SOBGumbaBoss* creator_;
         protected:
             float gravityAcceleration_;
@@ -68,4 +71,7 @@
             bool changeAllowed_;
             float changedOn_;
+            float maxLifetime_;
+            float lifetime_;
+
            
     };
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOBGumbaBoss.cc
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOBGumbaBoss.cc	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOBGumbaBoss.cc	(revision 11678)
@@ -0,0 +1,189 @@
+/*
+ *   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:
+ *      Noah Zarro
+ *      Theo von Arx
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBGumbaBoss.cc
+    @brief A Boss Gumba, which shoots small Gumbas
+**/
+
+#include "SOB.h"
+#include "SOBGumba.h"
+#include "SOBGumbaBoss.h"
+#include "SOBFireball.h"
+#include "SOBFigure.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "util/Output.h"
+#include <BulletCollision/NarrowPhaseCollision/btManifoldPoint.h>
+
+
+
+namespace orxonox
+{
+    RegisterClass(SOBGumbaBoss);
+
+    SOBGumbaBoss::SOBGumbaBoss(Context* context) : SOBGumba(context)
+    {
+        RegisterObject(SOBGumbaBoss);
+
+        gumbaMaxTime_   = 1;  // time after which a Gumba is shot
+        gumbaTime_      = 0;  // time since last gumba was shot
+        maxGumbas_      = 50; // Max Gumbas spawnable by a Boss
+        jumpTimeMax_    = 5;  // time after which the gumba boss jumps
+        jumpTime_       = 0;  // time since last jump of gumba boss
+        
+    }
+
+    // PRE: otherObject collides with this.
+    // POST: collision is handled: velocity changed, small gumbas murdered
+    bool SOBGumbaBoss::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) {
+
+        SOBGumba*       gumba       = orxonox_cast<SOBGumba*>(otherObject);
+        SOBGumbaBoss*   gumbaBoss   = orxonox_cast<SOBGumbaBoss*>(otherObject);
+
+        // if boss collides with small gumbas, destroy them.
+        if (gumba != nullptr && gumbaBoss == nullptr && !(gumba->hasCollided_)) {
+            gumba->die();
+        }
+
+
+        //Every object with mass -1 does not change the direction of the GumbaBoss. For example the ground floor! The other objects switch the direction of the GumbaBoss.
+        else if (changeAllowed_ && otherObject->getMass() != -1) {
+            goesRight_ = !goesRight_;
+            changeAllowed_ = false;
+        }
+
+        return true;
+    }
+
+
+
+    // POST: done what was to do in a time dt
+    void SOBGumbaBoss::tick(float dt)
+    {
+        SUPER(SOBGumbaBoss, tick, dt);
+
+        // increase timers:
+        gumbaTime_ += dt;
+        jumpTime_  += dt; 
+
+        // set y-component of position of gumba boss to 0, so he doesn't fall in to the nothing
+        Vector3 position = getPosition();
+        position.y = 0;
+        setPosition(position);
+
+
+        if (!changeAllowed_) {
+            changedOn_+= dt;
+            // After a collision, we don't listen for collisions for 200ms - that's because one wall can cause several collisions!
+            if (changedOn_> 0.200) {
+                changeAllowed_ = true;
+                changedOn_ = 0.0;
+
+            }
+        }
+    
+
+        if(gumbaTime_ > gumbaMaxTime_){ //Spawn Gumba
+            int gumbaCounter=0;
+
+            for (SOBGumba*  gumbaInstance : ObjectList<SOBGumba>())
+            {
+                if (gumbaInstance != nullptr && gumbaInstance->creator_==this)
+                {
+                    gumbaCounter++;
+                }
+            } 
+
+
+            if(gumbaCounter<maxGumbas_){    //only maxGumbas are allowed at one time per Gumbaboss
+                spawnGumba();
+                gumbaTime_ = 0;
+            }
+        }
+
+        int dir = 1;
+        if (!goesRight_)
+            dir = -1;
+
+        // 
+        if(getPosition().x < 1640)
+            dir = 1;
+        else if (getPosition().x > 1750)
+            dir = -1;
+
+        //change velocity
+        Vector3 velocity = getVelocity();
+        if(jumpTime_ > jumpTimeMax_){ // jump if the time has come.
+            velocity.z = speed_*15;
+            jumpTime_ = 0;
+        }
+        else{
+            velocity.z -= gravityAcceleration_*dt;
+        }
+        velocity.x = dir*speed_;
+        setVelocity(velocity);
+
+        lastPos_ = getPosition();
+
+    }
+
+    // spawn gumbas
+    void SOBGumbaBoss::spawnGumba() {
+        SOBCenterpoint* center_ = ((SOB*)getGametype())->center_;
+
+         SOBGumba* gumba = new SOBGumba(center_->getContext());
+         Vector3 spawnpos = this->getWorldPosition();
+         gumba->creator_=this;
+
+         // we can shoot a gumba!
+        if (gumba != nullptr && center_ != nullptr)
+        {
+            gumba->addTemplate("gumbaShootable");
+            gumba->setDirection(goesRight_);
+            if(goesRight_)
+            {
+                spawnpos.x+=20;
+            }
+            else
+            {
+                spawnpos.x-=20;
+            }
+            spawnpos.z+=15;
+            gumba->setPosition(spawnpos);
+
+        }
+
+        Vector3 velocity = gumba->getVelocity();
+        velocity.x += (2*goesRight_ -1) * 100;
+        velocity.z += 200;
+        gumba->setVelocity(velocity);
+     }
+}
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOBGumbaBoss.h
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOBGumbaBoss.h	(revision 11678)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOBGumbaBoss.h	(revision 11678)
@@ -0,0 +1,68 @@
+/*
+ *   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:
+ *      Noah Zarro
+ *      Theo von Arx
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBGumbaBoss.h
+    @brief Declaration of the SOBGumbaBoss class. GumbaBosss are the enemie mushrooms - pretty sure it's written Goomba but, naaah
+    @ingroup SOB
+*/
+
+#ifndef _SOBGumbaBoss_H__
+#define _SOBGumbaBoss_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+    class _SOBExport SOBGumbaBoss : public SOBGumba
+    {
+        public:
+            SOBGumbaBoss(Context* context);
+            virtual  bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+            virtual void tick(float dt) override;
+
+            void spawnGumba();
+
+
+        protected:
+            float gumbaTime_;
+            float gumbaMaxTime_;
+            float jumpTimeMax_;
+            float jumpTime_;
+            int maxGumbas_;
+
+
+
+           
+    };
+}
+
+#endif /* _SOBGumbaBoss_H__ */
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOBPrereqs.h
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOBPrereqs.h	(revision 11677)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOBPrereqs.h	(revision 11678)
@@ -76,4 +76,5 @@
     class SOBHUDInfo;
     class SOBGumba;
+    class SOBGumbaBoss;
     class SOBFlagstone;
     class SOBCastlestone;
Index: code/branches/Presentation_HS17/src/modules/superorxobros/SOBQBlock.cc
===================================================================
--- code/branches/Presentation_HS17/src/modules/superorxobros/SOBQBlock.cc	(revision 11677)
+++ code/branches/Presentation_HS17/src/modules/superorxobros/SOBQBlock.cc	(revision 11678)
@@ -39,4 +39,6 @@
 #include "SOBMushroom.h"
 #include "SOBCoin.h"
+#include <BulletCollision/NarrowPhaseCollision/btManifoldPoint.h>
+
 
 namespace orxonox
@@ -62,5 +64,6 @@
         //If you hit the QBlock, the visibility of all attached objects get inverted! Pretty easy way to create changing blocks :)
         float v_z = otherObject->getVelocity().z;
-        if (!used_ && v_z > 50.0) {
+        int collDisZ_ = getPosition().z - contactPoint.getPositionWorldOnB().getZ();
+        if (!used_ && v_z > 50.0 && collDisZ_ > 0) {
             used_ = true;
 
Index: code/branches/Presentation_HS17/src/orxonox/graphics/Model.cc
===================================================================
--- code/branches/Presentation_HS17/src/orxonox/graphics/Model.cc	(revision 11677)
+++ code/branches/Presentation_HS17/src/orxonox/graphics/Model.cc	(revision 11678)
@@ -1,2 +1,3 @@
+
 /*
  *   ORXONOX - the hottest 3D action shooter ever to exist
@@ -40,4 +41,5 @@
 #include "graphics/MeshLodInformation.h"
 #include "Level.h"
+
 
 namespace orxonox
@@ -155,4 +157,11 @@
         this->mesh_.setMaterial(this->materialName_);
     }
+
+    // PRE: a valid  Ogre::Entity* entity with a valid subentity at index
+    // POST: changed material of subentity at index to name
+    void Model::setSubMaterial(const std::string& name, const int index){
+        this->mesh_.setSubMaterial(name, index);
+    }
+
 
     void Model::changedShadows()
Index: code/branches/Presentation_HS17/src/orxonox/graphics/Model.h
===================================================================
--- code/branches/Presentation_HS17/src/orxonox/graphics/Model.h	(revision 11677)
+++ code/branches/Presentation_HS17/src/orxonox/graphics/Model.h	(revision 11678)
@@ -86,4 +86,7 @@
                 { return this->materialName_; }
 
+            void setSubMaterial(const std::string& name, const int index);
+
+
         protected:
             /**
