Index: code/trunk/data/levels/SOB.oxw
===================================================================
--- code/trunk/data/levels/SOB.oxw	(revision 11449)
+++ code/trunk/data/levels/SOB.oxw	(revision 11449)
@@ -0,0 +1,789 @@
+<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/trunk/data/overlays/SOBHUD.oxo
===================================================================
--- code/trunk/data/overlays/SOBHUD.oxo	(revision 11449)
+++ code/trunk/data/overlays/SOBHUD.oxo	(revision 11449)
@@ -0,0 +1,123 @@
+<Template name="spectatorhud">
+  <OverlayGroup name = "spectatorhud" scale = "1, 1">
+  </OverlayGroup>
+</Template>
+
+<Template name="SOBHUD">
+  <OverlayGroup name="SOBHUD" scale = "1, 1">
+  
+    <OverlayText
+     position  = "0.02, 0.02"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.04
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "left"
+     caption   = "O R X O\n"
+    />
+    <SOBHUDInfo
+     position  = "0.02, 0.06"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.045
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "left"
+     type      = "Points"
+     
+    />
+
+
+
+    <SOBHUDInfo
+     position  = "0.22, 0.06"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.045
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "left"
+     type      = "Coins"
+     
+    />
+
+
+
+    <OverlayText
+     position  = "0.75, 0.02"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.04
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "center"
+     caption   = "WORLD\n1-1"
+    />
+
+
+
+
+
+
+    <OverlayText
+     position  = "0.98, 0.02"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.04
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "right"
+     caption   = "TIME\n"
+    />
+    <SOBHUDInfo
+     position  = "0.98, 0.06"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.04
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "right"
+     type      = "Time"
+  
+    />
+
+    
+
+    <SOBHUDInfo
+     position = "0.55,0.5"
+     pickpoint = "0.5, 0.5"
+     textposition  = "0.5, 0.5"
+     textpickpoint = "0.5, 0.5"
+     font      = "ShareTechMono"
+     textsize  = 0.07
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "center"
+     type      = "Info"
+     
+    />
+   
+
+    
+  </OverlayGroup>
+</Template>
+
+
+<Template name="spaceshiphud">
+  <OverlayGroup name = "spaceshiphud" scale = "1, 1">
+    <HUDHealthBar
+     name              = "HealthBar1"
+     background        = "Orxonox/HealthBarBackground"
+     size              = "0.35, 0.0875"
+     position          = "0.0 , 0.9 "
+     pickpoint         = "0, 1"
+     bartexture        = "healthbar_bar.png"
+     textfont          = "VeraMono"
+     textusebarcolour  = true
+     textscale          = 0.4
+     textoffset        = "0.325, -0.825"
+     textpickpoint     = "0, 0"
+     textalign         = "right"
+     correctaspect     = true
+     iconmaterial      = "Orxonox/BarIconHealth"
+    >
+      <BarColour position = 0.0 colour = "0.7,0.2,0.2" />
+      <BarColour position = 0.5 colour = "0.7,0.7,0.2" />
+      <BarColour position = 1.0 colour = "0.2,0.7,0.2" />
+    </HUDHealthBar>
+ </OverlayGroup>
+</Template>
Index: code/trunk/src/modules/CMakeLists.txt
===================================================================
--- code/trunk/src/modules/CMakeLists.txt	(revision 11448)
+++ code/trunk/src/modules/CMakeLists.txt	(revision 11449)
@@ -45,2 +45,3 @@
 ADD_SUBDIRECTORY(dodgerace)
 ADD_SUBDIRECTORY(hover)
+ADD_SUBDIRECTORY(superorxobros)
Index: code/trunk/src/modules/superorxobros/CMakeLists.txt
===================================================================
--- code/trunk/src/modules/superorxobros/CMakeLists.txt	(revision 11449)
+++ code/trunk/src/modules/superorxobros/CMakeLists.txt	(revision 11449)
@@ -0,0 +1,24 @@
+SET_SOURCE_FILES(SOB_SRC_FILES
+
+  SOBCenterpoint.cc
+  SOB.cc
+  SOBFigure.cc
+  SOBItem.cc
+  SOBQBlock.cc
+  SOBMushroom.cc
+  SOBHUDInfo.cc
+  SOBGumba.cc
+  SOBFlagstone.cc
+  SOBCastlestone.cc
+  SOBCoin.cc
+
+)
+
+ORXONOX_ADD_LIBRARY(superorxobros
+  PLUGIN
+  FIND_HEADER_FILES
+  LINK_LIBRARIES
+    orxonox
+    overlays
+  SOURCE_FILES ${SOB_SRC_FILES}
+)
Index: code/trunk/src/modules/superorxobros/Orxo.cc
===================================================================
--- code/trunk/src/modules/superorxobros/Orxo.cc	(revision 11449)
+++ code/trunk/src/modules/superorxobros/Orxo.cc	(revision 11449)
@@ -0,0 +1,196 @@
+/*
+ *   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
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file InvaderShip.cc
+    @brief Implementation of the InvaderShip class.
+*/
+
+#include "Orxo.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+//#include "Invader.h"
+//#include "InvaderEnemy.h"
+#include "graphics/Camera.h"
+//#include "weapons/projectiles/Projectile.h"
+
+namespace orxonox
+{
+    RegisterClass(Orxo);
+
+    Orxo::Orxo(Context* context) : SpaceShip(context)
+    {
+        RegisterObject(Orxo);
+
+        speed = 500;
+        damping = 10;
+    }
+
+    void Orxo::tick(float dt)
+    {
+        /*Vector3 pos = getPosition();
+
+        //Movement calculation
+        lastTimeFront += dt * damping;
+        lastTimeLeft += dt * damping;
+        lastTime += dt;
+
+        velocity.x = interpolate(clamp(lastTimeLeft, 0.0f, 1.0f), desiredVelocity.x, 0.0f);
+        velocity.y = interpolate(clamp(lastTimeFront, 0.0f, 1.0f), desiredVelocity.y, 0.0f);
+
+        //Execute movement
+        if (this->hasLocalController())
+        {
+            float dist_y = velocity.y * dt;
+            float dist_x = velocity.x * dt;
+            if(dist_y + posforeward > -42*3 && dist_y + posforeward < 42*6)
+                posforeward += dist_y;
+            else
+            {
+                velocity.y = 0;
+                // restart if game ended
+                if (getGame())
+                    if (getGame()->bEndGame)
+                    {
+                        getGame()->start();
+                        return;
+                    }
+            }
+            if (pos.z + dist_x > 42*2.5 || pos.z + dist_x < -42*3)
+                velocity.x = 0;
+            pos += Vector3(1000 + velocity.y, 0, velocity.x) * dt;
+        }
+
+    
+        // Camera
+        Camera* camera = this->getCamera();
+        if (camera != nullptr)
+        {
+            camera->setPosition(Vector3(-pos.z, -posforeward, 0));
+            camera->setOrientation(Vector3::UNIT_Z, Degree(90));
+        }
+
+
+
+        // bring back on track!
+        if(pos.y != 0)
+            pos.y = 0;
+
+        setPosition(pos);
+        setOrientation(Vector3::UNIT_Y, Degree(270));
+
+        // Level up!
+        if (pos.x > 42000)
+        {
+            updateLevel();
+            setPosition(Vector3(0, 0, pos.z)); // pos - Vector3(30000, 0, 0)
+        }*/
+
+        SUPER(Orxo, tick, dt);
+    }
+
+    void Orxo::updateLevel()
+    {
+        lastTime = 0;
+        /*if (getGame())
+            getGame()->levelUp();*/
+    }
+
+    void Orxo::moveFrontBack(const Vector2& value)
+    {
+        Pawn::moveFrontBack(value);
+        lastTimeLeft = 0;
+        desiredVelocity.x = -value.x * speed;
+    }
+
+    void Orxo::moveRightLeft(const Vector2& value)
+    {
+        lastTimeFront = 0;
+        desiredVelocity.y = value.y * speed * 42;
+    }
+    void Orxo::boost(bool bBoost)
+    {
+       // isFireing = bBoost;
+    }
+    void Orxo::rotateRoll(const Vector2& value)
+    {/*
+        if (getGame())
+            if (getGame()->bEndGame)
+                getGame()->end();
+    */}
+    inline bool Orxo::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint)
+    {
+        /*// orxout() << "touch!!! " << endl; //<< otherObject << " at " << contactPoint;
+        InvaderEnemy* enemy = orxonox_cast<InvaderEnemy*>(otherObject);
+        Projectile* shot = orxonox_cast<Projectile*>(otherObject);
+        // ensure that this gets only called once per enemy.
+        if (enemy != nullptr && lastEnemy != enemy)
+        {
+            lastEnemy = enemy;
+
+            removeHealth(20);
+            if (getGame())
+            {
+                getGame()->multiplier = 1;                   
+            }
+        }
+        // was shot, decrease multiplier
+        else if (shot != nullptr  && lastShot != shot)
+        {
+            if (getGame() && orxonox_cast<InvaderEnemy*>(shot->getShooter()) != nullptr)
+            {
+                if (getGame()->multiplier > 1)
+                {
+                    lastShot = shot;
+                    getGame()->multiplier -= 1;     
+                }
+            }
+        }
+        return false;
+        // SUPER(InvaderShip, collidesAgainst, otherObject, contactPoint);
+        */
+        return false;
+    }
+
+    /*SOB* Orxo::getGame()
+    {
+        if (game == nullptr)
+        {
+            for (SOB* sob : ObjectList<SOB>())
+                game = sob;
+        }
+        return game;
+    }*/
+
+    void Orxo::death()
+    {
+        //getGame()->costLife();
+        Pawn::death();
+    }
+}
Index: code/trunk/src/modules/superorxobros/Orxo.h
===================================================================
--- code/trunk/src/modules/superorxobros/Orxo.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/Orxo.h	(revision 11449)
@@ -0,0 +1,95 @@
+/*
+ *   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
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file InvaderShip.h
+    @brief Declaration of the InvaderShip class.
+*/
+
+#ifndef _Orxo_H__
+#define _Orxo_H__
+
+//#include "invader/InvaderPrereqs.h"
+
+//#include "weapons/WeaponsPrereqs.h"
+#include "worldentities/pawns/SpaceShip.h"
+
+namespace orxonox
+{
+    class Orxo : public SpaceShip
+    {
+    public:
+        Orxo(Context* context);
+
+        virtual void tick(float dt) override;
+
+
+            // overwrite for 2d movement
+        virtual void moveFrontBack(const Vector2& value) override;
+        virtual void moveRightLeft(const Vector2& value) override;
+
+            // Starts or stops fireing
+        virtual void boost(bool bBoost) override;
+
+            //no rotation!
+        virtual void rotateYaw(const Vector2& value) override{};
+        virtual void rotatePitch(const Vector2& value) override{};
+            //return to main menu if game has ended.
+        virtual void rotateRoll(const Vector2& value) override;
+
+        virtual void updateLevel();
+
+        virtual inline bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+
+
+
+
+      
+
+
+    protected:
+        virtual void death() override;
+    private:
+            //SOB* getGame();
+            //WeakPtr<SOB> game;
+        Camera* camera;
+        float speed, damping, posforeward;
+        float lastTimeFront, lastTimeLeft, lastTime;
+        struct Velocity
+        {
+            float x;
+            float y;
+        } velocity, desiredVelocity;
+
+           // WeakPtr<InvaderEnemy> lastEnemy;
+            //WeakPtr<Projectile> lastShot;
+
+    };
+}
+
+#endif /* _InvaderShip_H__ */
Index: code/trunk/src/modules/superorxobros/SOB.cc
===================================================================
--- code/trunk/src/modules/superorxobros/SOB.cc	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOB.cc	(revision 11449)
@@ -0,0 +1,187 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOB.cc
+    @brief Implementation of the SOB class.
+*/
+
+#include "SOB.h"
+#include "core/CoreIncludes.h"
+#include "core/EventIncludes.h"
+#include "core/command/Executor.h"
+#include "core/config/ConfigValueIncludes.h"
+#include "core/Game.h"
+#include "gamestates/GSLevel.h"
+#include "chat/ChatManager.h"
+#include "infos/PlayerInfo.h"
+#include "SOBCenterpoint.h"
+#include "SOBFigure.h"
+#include "graphics/Camera.h"
+
+
+
+namespace orxonox
+{
+
+    RegisterUnloadableClass(SOB);
+
+    /**
+    @brief
+        Constructor. Registers and initializes the object.
+    */
+    SOB::SOB(Context* context) : Deathmatch(context)
+    {
+        RegisterObject(SOB);
+        camera = nullptr;
+
+        this->center_ = nullptr;
+        figure_ = nullptr;
+        setHUDTemplate("SOBHUD");
+        coins_=0;
+        points_=0;
+        timeLeft_=400.0;
+        done_ = true;
+        lvl_ = 1;
+
+    }
+
+    /**
+    @brief
+        Destructor. Cleans up, if initialized.
+    */
+    SOB::~SOB()
+    {
+        if (this->isInitialized())
+            this->cleanup();
+    }
+
+    void SOB::cleanup()
+    {
+        camera = nullptr;
+    }
+
+
+
+    void SOB::start()
+    {
+        if (center_ != nullptr) // There needs to be a SOBCenterpoint, i.e. the area the game takes place.
+        {
+            if (figure_ == nullptr)
+            {
+                figure_ = new SOBFigure(center_->getContext());     //add a new instance of a player to the game
+                figure_->addTemplate(center_->getFigureTemplate());
+            }
+
+            center_->attach(figure_);
+            figure_->setPosition(0, 0, 0);
+        }
+        else // If no centerpoint was specified, an error is thrown and the level is exited.
+        {
+            orxout(internal_error) << "SOB: No Centerpoint specified." << endl;
+            GSLevel::startMainMenu();
+            return;
+        }
+
+        // Call start for the parent class.
+        Gametype::start();
+
+        if (figure_ != nullptr)
+        {
+            camera = figure_->getCamera();
+        }
+
+    }
+
+    void SOB::end()
+    {
+        cleanup();
+        GSLevel::startMainMenu();
+        Deathmatch::end();
+    }
+
+    void SOB::restart() {
+        cleanup();
+
+        // HACK - only method I found to simply reload the level
+        Game::getInstance().popState();
+        Game::getInstance().popState();
+        Game::getInstance().requestStates("standalone, level");
+
+        
+    }
+    void SOB::spawnPlayer(PlayerInfo* player)
+    {
+        assert(player);
+
+        if (figure_->getPlayer() == nullptr)
+        {
+            player->startControl(figure_); //Give the control of the instance player to the real person
+            players_[player].state_ = PlayerState::Alive;
+            done_ = false;
+        }
+    }
+
+    PlayerInfo* SOB::getPlayer() const
+    {
+        if (this->figure_ != nullptr)
+        {
+            return this->figure_->getPlayer();
+        }
+        else
+        {
+            return nullptr;
+        }
+    }
+
+    void SOB::tick(float dt)
+    {
+        SUPER(SOB, tick, dt);
+
+        //If player has reached end of level
+        if (this->figure_ != nullptr && figure_->lvlEnded_) {
+            std::stringstream a;
+            a << "Nice! " << getPoints() << " Points in " << (400-getTimeLeft())/2 <<"s.\n\nPress <Space> to restart";
+            info_ =a.str();
+
+        //If player has died
+        } else if (this->figure_ != nullptr && figure_->dead_) {
+            info_ = "Game over. Press <Space> to restart";
+        }
+        
+
+        //Kill the player if time is up
+        if (this->figure_ != nullptr && timeLeft_ <= 0)
+            this->figure_->dead_ = true;
+        //The time on the HUD
+        if (!done_)
+            timeLeft_-=dt*2.5;
+    }
+
+
+}
Index: code/trunk/src/modules/superorxobros/SOB.h
===================================================================
--- code/trunk/src/modules/superorxobros/SOB.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOB.h	(revision 11449)
@@ -0,0 +1,123 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOB.h
+    @brief Declaration of the SOB class.
+*/
+
+#ifndef _SOB_H__
+#define _SOB_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "gametypes/Deathmatch.h"
+#include "SOBCenterpoint.h"
+
+namespace orxonox
+{
+
+    class _SOBExport SOB : public Deathmatch
+    {
+    public:
+            SOB(Context* context); //!< Constructor. Registers and initializes the object.
+            virtual ~SOB(); //!< Destructor. Cleans up, if initialized.
+            virtual void tick(float dt) override;
+
+
+            void setCenterpoint(SOBCenterpoint* center)
+            { this->center_ = center; }
+            virtual void start() override;
+            virtual void end() override;
+            virtual void spawnPlayer(PlayerInfo* player) override;
+            PlayerInfo* getPlayer() const;
+
+            void restart();
+
+            //Functions for points and coins
+            int getPoints() {
+                return points_;
+            }
+            int getCoins() {
+                return coins_;
+            }
+            void addCoin() {
+                ++coins_;
+                points_+=200;
+            }
+            void addMushroom() {
+                points_+=1000;
+            }
+            void addGumba() {
+                points_+=100;
+            }
+            void addPoints(int poi) {
+                points_+=poi;
+            }
+            int getTimeLeft() {
+                return timeLeft_;
+            }
+            std::string getInfoText() {
+                return info_;
+            }    
+            void setDone(bool tr) {
+                done_ = tr;
+            }
+
+
+            //Not used yet - placed if somebody wants to develop lvl 1-2 etc
+            void setLvl(int lvl) {
+                lvl_ = lvl;
+            }
+            int getLvl() {
+                return lvl_;
+            }
+            virtual void playerEntered(PlayerInfo* player) override
+            {
+                Gametype::playerEntered(player);
+            }  
+
+            WeakPtr<SOBCenterpoint> center_;
+
+        protected:
+
+
+            void cleanup(); //!< Cleans up the Gametype 
+            WeakPtr<SOBFigure> figure_;
+            WeakPtr<Camera> camera;
+            int points_;
+            int coins_;
+            float timeLeft_;
+            bool done_;
+            int lvl_;
+            std::string info_;
+
+
+        };
+    }
+
+#endif /* _SOB_H__ */
Index: code/trunk/src/modules/superorxobros/SOBCastlestone.cc
===================================================================
--- code/trunk/src/modules/superorxobros/SOBCastlestone.cc	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBCastlestone.cc	(revision 11449)
@@ -0,0 +1,59 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBCastlestone.cc
+    @brief Mainly used to guide the player into the castle after he has touched the flag and the control goes to the game
+*/
+
+#include "SOBCastlestone.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "SOBFigure.h"
+#include "util/Output.h"
+
+
+namespace orxonox
+{
+    RegisterClass(SOBCastlestone);
+
+    SOBCastlestone::SOBCastlestone(Context* context) : StaticEntity(context)
+    {
+        RegisterObject(SOBCastlestone);
+        setAngularFactor(0.0);
+        this->enableCollisionCallback();
+        hasCollided_=false;
+    
+    }
+
+    bool SOBCastlestone::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) {
+        return true;
+    }
+
+}
Index: code/trunk/src/modules/superorxobros/SOBCastlestone.h
===================================================================
--- code/trunk/src/modules/superorxobros/SOBCastlestone.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBCastlestone.h	(revision 11449)
@@ -0,0 +1,53 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBCastlestone.h
+    @brief Declaration of the SOBCastlestone class.
+*/
+
+#ifndef _SOBCastlestone_H__
+#define _SOBCastlestone_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/StaticEntity.h"
+
+
+namespace orxonox
+{
+    class _SOBExport SOBCastlestone : public StaticEntity
+    {
+    public:
+        SOBCastlestone(Context* context);
+        virtual  bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+        bool hasCollided_;
+        
+    };
+}
+
+#endif /* _SOBCastlestone_H__ */
Index: code/trunk/src/modules/superorxobros/SOBCenterpoint.cc
===================================================================
--- code/trunk/src/modules/superorxobros/SOBCenterpoint.cc	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBCenterpoint.cc	(revision 11449)
@@ -0,0 +1,70 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBCenterpoint.cc
+    @brief The SOBCenterpoint is a StaticEntity which represents the level of the minigame. 
+*/
+
+#include "SOBCenterpoint.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "SOB.h"
+
+namespace orxonox
+{
+    RegisterClass(SOBCenterpoint);
+
+    SOBCenterpoint::SOBCenterpoint(Context* context) : StaticEntity(context)
+    {
+        RegisterObject(SOBCenterpoint);
+        checkGametype();
+    }
+
+    void SOBCenterpoint::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBCenterpoint, XMLPort, xmlelement, mode);
+
+      
+        
+        XMLPortParam(SOBCenterpoint, "cameraOffset", setCameraOffset, getCameraOffset, xmlelement, mode);
+        
+        XMLPortParam(SOBCenterpoint, "figureTemplate", setFigureTemplate, getFigureTemplate, xmlelement, mode);
+        
+    }
+
+    void SOBCenterpoint::checkGametype()
+    {
+        if (getGametype() != nullptr && this->getGametype()->isA(Class(SOB)))
+        {
+            SOB* SOBGametype = orxonox_cast<SOB*>(this->getGametype());
+            SOBGametype->setCenterpoint(this);
+        }
+    }
+}
Index: code/trunk/src/modules/superorxobros/SOBCenterpoint.h
===================================================================
--- code/trunk/src/modules/superorxobros/SOBCenterpoint.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBCenterpoint.h	(revision 11449)
@@ -0,0 +1,72 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+#ifndef _SOBCenterpoint_H__
+#define _SOBCenterpoint_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/StaticEntity.h"
+
+namespace orxonox
+{
+    
+    /**
+    @brief
+        @brief The SOBCenterpoint is a StaticEntity which represents the level of the minigame. Everybody used it so I used it too, do not ask my why..
+    */
+    class _SOBExport SOBCenterpoint : public StaticEntity
+    {
+        public:
+            SOBCenterpoint(Context* context); //!< Constructor. Registers and initializes the object and checks whether the gametype is actually SOB.
+            virtual ~SOBCenterpoint() {}
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method to create a SOBCenterpoint through XML.
+            
+            void setFigureTemplate(const std::string& newTemplate)
+                { this->figureTemplate_ = newTemplate;
+                }
+            const std::string& getFigureTemplate() const
+                { return this->figureTemplate_; }
+            
+
+            void setCameraOffset(const float cameraOffset)
+                { this->cameraOffset_ = cameraOffset; }
+            float getCameraOffset() const
+                { return cameraOffset_; }
+
+
+        private:
+            void checkGametype();
+           
+            std::string figureTemplate_;
+    
+       
+            float cameraOffset_;
+    };
+}
+
+#endif /* _SOBCenterpoint_H__ */
Index: code/trunk/src/modules/superorxobros/SOBCoin.cc
===================================================================
--- code/trunk/src/modules/superorxobros/SOBCoin.cc	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBCoin.cc	(revision 11449)
@@ -0,0 +1,83 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBCoin.cc
+    @brief This is the object that appears when player hits a QBlock with type coin - it should be a coin floating ontop of the QBlock
+*/
+
+#include "SOBCoin.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "SOBFigure.h"
+#include "util/Output.h"
+
+
+namespace orxonox
+{
+    RegisterClass(SOBCoin);
+
+    SOBCoin::SOBCoin(Context* context) : MovableEntity(context)
+    {
+        RegisterObject(SOBCoin);
+        setAngularFactor(0.0);
+
+    }
+
+    
+    void SOBCoin::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBCoin, XMLPort, xmlelement, mode);
+        XMLPortParam(SOBCoin, "lifetime", setLifetime, getLifetime, xmlelement, mode);
+        XMLPortParam(SOBCoin, "speed", setSpeed, getSpeed, xmlelement, mode);
+
+    }
+
+
+    void SOBCoin::tick(float dt)
+    {
+        SUPER(SOBCoin, tick, dt);
+
+        lifetime_-=dt;
+
+        if (lifetime_ <+ 0) {
+            destroyLater();
+        }
+
+        Vector3 velocity = getVelocity();
+        velocity.z = speed_;
+        setOrientation(Vector3::UNIT_Z, getOrientation().getRoll() + 2*dt*Radian(6));
+        setVelocity(velocity);
+
+
+
+    }
+
+
+}
Index: code/trunk/src/modules/superorxobros/SOBCoin.h
===================================================================
--- code/trunk/src/modules/superorxobros/SOBCoin.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBCoin.h	(revision 11449)
@@ -0,0 +1,72 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBCoin.h
+    @brief Declaration of the SOBCoin class.
+    @ingroup SOB
+*/
+
+#ifndef _SOBCoin_H__
+#define _SOBCoin_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+    class _SOBExport SOBCoin : public MovableEntity
+    {
+    public:
+        SOBCoin(Context* context);
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+        virtual void tick(float dt) override;
+
+
+        bool attachedToFigure_;
+
+        void setLifetime(const float lt)
+        { this->lifetime_ = lt; }
+        float getLifetime() const
+        { return lifetime_; }
+        void setSpeed(const float lt)
+        { this->speed_ = lt; }
+        float getSpeed() const
+        { return speed_; }
+
+
+    protected:
+
+        float lifetime_;
+        float speed_;
+
+    };
+}
+
+#endif /* _SOBCoin_H__ */
Index: code/trunk/src/modules/superorxobros/SOBFigure.cc
===================================================================
--- code/trunk/src/modules/superorxobros/SOBFigure.cc	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBFigure.cc	(revision 11449)
@@ -0,0 +1,366 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBFigure.cc
+    @brief This class represents your figure when you play the minigame. Here the movement of the figure, activating items, ... are handled.
+*/
+
+#include "SOBFigure.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "graphics/Model.h"
+#include "graphics/Camera.h"
+#include "graphics/ParticleSpawner.h"
+
+#include "SOBMushroom.h"
+#include "SOBGumba.h"
+#include "SOB.h"
+#include "SOBFlagstone.h"
+#include "SOBCastlestone.h"
+#include <BulletCollision/NarrowPhaseCollision/btManifoldPoint.h>
+
+namespace orxonox
+{
+    RegisterClass(SOBFigure);
+
+    SOBFigure::SOBFigure(Context* context) : ControllableEntity(context)
+    {
+        RegisterObject(SOBFigure);
+
+        // initialize variables
+        gravityAcceleration_ = 350.0;
+
+        //Vars for movement of player
+        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;
+
+        //Properties of player
+        gotPowerUp_ = false;
+        isColliding_ = true;
+        particlespawner_ = NULL;
+
+        //Properties of players life
+        predead_ = false;
+        dead_ = false;
+        lvlEnded_ = false;
+        reachedLvlEndState_ = 0;
+
+        
+        setAngularFactor(0.0); //Means player doesn't turn on collision, so he doesn't fall over while walking over the ground
+        this->enableCollisionCallback(); // Turns on that on every collision function collidesAgainst is executed
+    }
+
+
+
+    bool SOBFigure::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) {
+
+        //Inform tick fct that player is colliding and tell him how far away the collision point is from player middle point in z dir
+        isColliding_ = true;
+        collDisZ_ = getPosition().z - contactPoint.getPositionWorldOnB().getZ();
+
+
+        //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
+        if (mush != nullptr && !(mush->hasCollided_)) {
+            otherObject->destroyLater();
+            gotPowerUp_ = true;
+            SOB* SOBGame = orxonox_cast<SOB*>(getGametype()); //Get the Gametype
+            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
+            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);
+
+          } else {
+            gumba->destroyLater();
+            gumba->hasCollided_ = true;
+            SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+            SOBGame->addGumba();
+
+
+        }
+    }
+
+    //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
+    if (reachedLvlEndState_ == 0 && flagstone != nullptr && !(flagstone->hasCollided_)) {
+        flagstone->hasCollided_ = true;
+        reachedLvlEndState_ = 1;
+        SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+        SOBGame->setDone(true);
+        SOBGame->addPoints(flagstone->getPoints());
+        
+
+    }
+    if (castlestone != nullptr && !(castlestone->hasCollided_)) {
+        castlestone->hasCollided_ = true;
+        reachedLvlEndState_++;
+
+    }
+
+    return true;
+}
+
+
+//Self implemented sign function that returns either 1 or -1 (and never 0)
+int SOBFigure::sgn(float x) {
+    if (x < 0.0) return -1;
+    return 1;
+}
+
+//For those of you who don't have an idea: the tick function is called about 50 times/sec
+void SOBFigure::tick(float dt)
+{
+    SUPER(SOBFigure, tick, dt);
+
+
+    bool inputAllowed = true;
+
+    //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;
+        }
+    }
+
+
+    //Behavior on level end - this is like described above for the movement from the player when hit the flag. He moves then into the castle
+    if (reachedLvlEndState_ != 0) {
+        timeCounter_+= dt;
+        inputAllowed = false;
+    }
+    if (reachedLvlEndState_ == 1 && timeCounter_ >= 1.5) {
+        timeCounter_ = 0;
+        reachedLvlEndState_ = 2;
+    }
+
+
+    //if input blocked, then cancel every movement operation
+    if (!inputAllowed) {
+        moveUpPressed_ = false;
+        moveDownPressed_ = false;
+        moveLeftPressed_ = false;
+        moveRightPressed_ = false;
+    }
+
+    //set the gravityto standard 350
+    if (firePressed_ == false) {
+        gravityAcceleration_ = 350.0;
+
+    }
+
+    if (hasLocalController())
+    {
+        Vector3 velocity = getVelocity();
+        Vector3 position = getPosition();
+
+        if (!predead_)
+            velocity.y = 0;
+        //If player falls in a hole
+        if (position.z < -100) {
+            dead_ = true;
+            SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+            SOBGame->setDone(true);
+        }
+
+
+        if (dead_) {
+            velocity.x = 0;
+            velocity.z = 0;
+            setVelocity(velocity);
+            SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+            if (firePressed_)
+                SOBGame->restart();
+            return;
+        }
+
+
+        int maxvelocity_x = 100;
+        int speedAddedPerTick = 5;
+        int camMaxOffset = 25;
+
+        timeSinceLastFire_ += dt;
+        lastSpeed_z = velocity.z;
+
+
+
+        //Handle the rocket fire from the jetpack
+        if (velocity.z > 40)
+            particlespawner_->setVisible(true); 
+        else
+            particlespawner_->setVisible(false); 
+
+
+        //If 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; 
+        }
+
+
+        //Left-right movement with acceleration and rotation
+        float rot = getOrientation().getRoll().valueDegrees();
+        if (moveRightPressed_) {
+            if (!(rot < 5.0 && -5.0 < rot))
+                setOrientation(Vector3::UNIT_Z, getOrientation().getRoll() - sgn(rot)*dt*Radian(6));
+
+            if (std::abs(velocity.x) < maxvelocity_x) {
+                velocity.x += speedAddedPerTick;
+
+            }
+        } else if (moveLeftPressed_) {
+            if (!(abs(rot) > 175.0 ))
+                setOrientation(Vector3::UNIT_Z, getOrientation().getRoll() + sgn(rot)*dt*Radian(6));
+
+
+
+            if (std::abs(velocity.x) < maxvelocity_x) {
+                velocity.x -= speedAddedPerTick;
+            }
+        } else {
+            velocity.x /= 1.1;
+        }
+
+
+        //Again another EndOfLevel behavior
+        if (reachedLvlEndState_ == 1)
+            velocity.x = -2;
+        if (reachedLvlEndState_ == 2)
+            velocity.x = 30;
+        if (reachedLvlEndState_ == 3) {
+            velocity.x = 0;
+            velocity.y = 20;
+        }
+        if (reachedLvlEndState_ == 4) {
+            lvlEnded_ = true;
+            dead_ = true;
+        }
+
+        //velocity = acc. * time
+        velocity.z -= gravityAcceleration_*dt;
+        setVelocity(velocity);
+
+
+        //Camera operation - the camera should always follow the player in a specific region
+        Camera* cam = getCamera();
+        Vector3 campos = cam->getPosition();
+
+        if (campos.x + camMaxOffset < position.x) {
+            campos.x = position.x - camMaxOffset;
+            cam->setPosition(campos);
+        }
+        if (campos.x - camMaxOffset > position.x) {
+            campos.x = position.x + camMaxOffset;
+            cam->setPosition(campos);
+        }
+
+
+
+
+    }
+
+
+
+    // Reset key variables
+    moveUpPressed_ = false;
+    moveDownPressed_ = false;
+    moveLeftPressed_ = false;
+    moveRightPressed_ = false;
+
+    isColliding_ = false;
+    collDisZ_ = 0;
+
+}
+
+
+
+
+
+//The following functions read the input of the player and then set the bools for the movement
+void SOBFigure::moveFrontBack(const Vector2& value)
+{
+    if (value.x > 0)
+    {
+        moveUpPressed_ = true;
+        moveDownPressed_ = false;
+    }
+    else
+    {
+        moveUpPressed_ = false;
+        moveDownPressed_ = true;
+    }
+}
+
+void SOBFigure::moveRightLeft(const Vector2& value)
+{
+    if (value.x > 0)
+    {
+        moveLeftPressed_ = false;
+        moveRightPressed_ = true;
+    }
+    else
+    {
+        moveLeftPressed_ = true;
+        moveRightPressed_ = false;
+    }
+}
+
+void SOBFigure::boost(bool boost)
+{
+    firePressed_ = boost;
+}
+
+
+}
Index: code/trunk/src/modules/superorxobros/SOBFigure.h
===================================================================
--- code/trunk/src/modules/superorxobros/SOBFigure.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBFigure.h	(revision 11449)
@@ -0,0 +1,80 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+#ifndef _SOBFigure_H__
+#define _SOBFigure_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/ControllableEntity.h"
+
+
+namespace orxonox
+{
+    class _SOBExport SOBFigure : public ControllableEntity
+    {
+    public:
+            SOBFigure(Context* context); //!< Constructor. Registers and initializes the object.
+            virtual ~SOBFigure() {}
+            virtual void tick(float dt) override;
+            virtual void moveFrontBack(const Vector2& value) override; //!< Overloaded the function to steer the figure up and down.
+            virtual void moveRightLeft(const Vector2& value) override; //!< Overloaded the function to steer the figure up and down.
+            virtual void boost(bool boost) override;
+            virtual  bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+
+            bool dead_;
+            bool predead_;
+            bool lvlEnded_;
+
+        private:
+
+            //Soooo many declarations
+            bool gotPowerUp_;
+            bool moveUpPressed_;
+            bool moveDownPressed_;
+            bool moveLeftPressed_;
+            bool moveRightPressed_;
+            bool firePressed_;
+            float gravityAcceleration_;
+            float timeSinceLastFire_;
+            float lastSpeed_z;
+            SOBCenterpoint* sobcenterpoint;
+            float pitch_;
+            bool isColliding_;
+            WorldEntity* particlespawner_;
+            int sgn(float x);
+            int reachedLvlEndState_;
+            float timeCounter_;
+            float collDisZ_;
+
+
+            
+
+        };
+    }
+
+#endif /* _SOBFigure_H__ */
Index: code/trunk/src/modules/superorxobros/SOBFlagstone.cc
===================================================================
--- code/trunk/src/modules/superorxobros/SOBFlagstone.cc	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBFlagstone.cc	(revision 11449)
@@ -0,0 +1,79 @@
+/*
+ *   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:
+ *      Julien
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBFlagstone.cc
+    @brief The flagstone, as described in the h file
+*/
+
+#include "SOBFlagstone.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "SOBFigure.h"
+#include "util/Output.h"
+
+
+namespace orxonox
+{
+    RegisterClass(SOBFlagstone);
+
+    SOBFlagstone::SOBFlagstone(Context* context) : StaticEntity(context)
+    {
+        RegisterObject(SOBFlagstone);
+
+        setAngularFactor(0.0);
+        this->enableCollisionCallback();
+        
+        hasCollided_=false;
+        
+        
+    }
+
+    
+
+    void SOBFlagstone::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBFlagstone, XMLPort, xmlelement, mode);
+        XMLPortParam(SOBFlagstone, "points", setPoints, getPoints, xmlelement, mode);
+
+
+    }
+
+    
+    bool SOBFlagstone::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) {
+
+        return true;
+    }
+
+
+    
+
+
+    
+}
Index: code/trunk/src/modules/superorxobros/SOBFlagstone.h
===================================================================
--- code/trunk/src/modules/superorxobros/SOBFlagstone.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBFlagstone.h	(revision 11449)
@@ -0,0 +1,65 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @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.
+    @ingroup SOB
+*/
+
+#ifndef _SOBFlagstone_H__
+#define _SOBFlagstone_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/StaticEntity.h"
+
+
+namespace orxonox
+{
+    class _SOBExport SOBFlagstone : public StaticEntity
+    {
+        public:
+            SOBFlagstone(Context* context);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual  bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+
+            void setPoints(int points) {
+                points_ = points;
+            }
+            int getPoints() {
+                return points_;
+            }
+
+      
+            bool hasCollided_;
+        protected:
+            int points_;
+    };
+}
+
+#endif /* _SOBFlagstone_H__ */
Index: code/trunk/src/modules/superorxobros/SOBGumba.cc
===================================================================
--- code/trunk/src/modules/superorxobros/SOBGumba.cc	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBGumba.cc	(revision 11449)
@@ -0,0 +1,123 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBGumba.cc
+    @brief All items in this minigame inherit from this class. Items can move around like platforms and enemies.
+*/
+
+#include "SOBGumba.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "SOBFigure.h"
+#include "util/Output.h"
+
+
+namespace orxonox
+{
+    RegisterClass(SOBGumba);
+
+    SOBGumba::SOBGumba(Context* context) : MovableEntity(context)
+    {
+        RegisterObject(SOBGumba);
+
+        attachedToFigure_ = false;
+        setAngularFactor(0.0);
+        figure_ = nullptr;
+        this->enableCollisionCallback();
+        gravityAcceleration_ = 350.0;
+        speed_ = 0.0;
+        hasCollided_=false;
+        goesRight_ = true;
+        lastPos_ = getPosition();
+        lastPos_.x -= 20;
+        changeAllowed_ = true;
+        changedOn_ = 0.0;
+        
+    }
+
+    
+
+    void SOBGumba::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBGumba, XMLPort, xmlelement, mode);
+        XMLPortParam(SOBGumba, "speed", setSpeed, getSpeed, xmlelement, mode);
+
+
+    }
+
+    
+    bool SOBGumba::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) {
+
+        //Every object with mass -1 does not change the direction of the Gumba. For example the ground floor! The other objects switch the direction of the gumba.
+        if (changeAllowed_ && otherObject->getMass() != -1) {
+            goesRight_ = !goesRight_;
+            changeAllowed_ = false;
+        }
+
+        return true;
+    }
+
+
+    void SOBGumba::setFigure(SOBFigure* newFigure)
+    {
+        figure_ = newFigure;
+    }
+
+
+
+    void SOBGumba::tick(float dt)
+    {
+        SUPER(SOBGumba, tick, dt);
+
+        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;
+
+            }
+        }
+        
+
+        int dir = 1;
+        if (!goesRight_)
+            dir = -1;
+
+        Vector3 velocity = getVelocity();
+        velocity.z -= gravityAcceleration_*dt;
+        velocity.x = dir*speed_;
+        setVelocity(velocity);
+
+        lastPos_ = getPosition();
+    }
+
+
+}
Index: code/trunk/src/modules/superorxobros/SOBGumba.h
===================================================================
--- code/trunk/src/modules/superorxobros/SOBGumba.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBGumba.h	(revision 11449)
@@ -0,0 +1,74 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBGumba.h
+    @brief Declaration of the SOBGumba class. Gumbas are the enemie mushrooms - pretty sure it's written Goomba but, naaah
+    @ingroup SOB
+*/
+
+#ifndef _SOBGumba_H__
+#define _SOBGumba_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+    class _SOBExport SOBGumba : public MovableEntity
+    {
+        public:
+            SOBGumba(Context* context);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void setFigure(SOBFigure* newFigure);
+            virtual  bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+            virtual void tick(float dt) override;
+
+          
+            bool attachedToFigure_;
+
+            void setSpeed(const float speed)
+                { this->speed_ = speed; }
+            float getSpeed() const
+                { return speed_; }
+
+            bool hasCollided_;
+        protected:
+            float gravityAcceleration_;
+            float speed_;
+            WeakPtr<SOBFigure> figure_;
+            bool goesRight_;
+            Vector3 lastPos_;
+            bool changeAllowed_;
+            float changedOn_;
+           
+    };
+}
+
+#endif /* _SOBGumba_H__ */
Index: code/trunk/src/modules/superorxobros/SOBHUDInfo.cc
===================================================================
--- code/trunk/src/modules/superorxobros/SOBHUDInfo.cc	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBHUDInfo.cc	(revision 11449)
@@ -0,0 +1,113 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *
+ */
+
+#include "SOBHUDInfo.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "util/Convert.h"
+#include "SOB.h"
+#include <sstream>
+#include <iomanip>
+
+
+
+namespace orxonox
+{
+    RegisterClass(SOBHUDInfo);
+
+    SOBHUDInfo::SOBHUDInfo(Context* context) : OverlayText(context)
+    {
+        RegisterObject(SOBHUDInfo);
+
+        this->SOBGame = nullptr;
+        
+    }
+
+    void SOBHUDInfo::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBHUDInfo, XMLPort, xmlelement, mode);
+        XMLPortParam(SOBHUDInfo, "type",     setType,     getType,     xmlelement, mode).defaultValues(false);
+
+
+    }
+
+    void SOBHUDInfo::tick(float dt)
+    {
+        SUPER(SOBHUDInfo, tick, dt);
+
+        //If you have a look at the HUD xml file, you can see there are several elements with different types.
+        if (this->SOBGame)
+        {
+          
+          if (this->type_ == "Coins") {            
+            
+            std::stringstream ss;
+            ss << "cc x " << std::setw(2) << std::setfill('0') << SOBGame->getCoins();
+            std::string s = ss.str();
+
+            this->setCaption(s);
+            
+        }
+        if (this->type_ == "Points") {
+            std::stringstream ss;
+            ss << std::setw(6) << std::setfill('0') << SOBGame->getPoints();
+            std::string s = ss.str();
+            this->setCaption(s);
+        }
+        if (this->type_ == "Time") {
+            std::stringstream ss;
+            ss << SOBGame->getTimeLeft();
+            std::string s = ss.str();
+            this->setCaption(s);
+        }
+        if (this->type_ == "Info") {
+            std::stringstream ss;
+            ss << SOBGame->getInfoText();
+            std::string s = ss.str();
+            this->setCaption(s);
+        }
+        
+
+        
+    }
+}
+
+//No idea why, just implement this method
+void SOBHUDInfo::changedOwner()
+{
+    SUPER(SOBHUDInfo, changedOwner);
+
+    if (this->getOwner() && this->getOwner()->getGametype())
+    {
+        this->SOBGame = orxonox_cast<SOB*>(this->getOwner()->getGametype());
+    }
+    else
+    {
+        this->SOBGame = nullptr;
+    }
+}
+}
Index: code/trunk/src/modules/superorxobros/SOBHUDInfo.h
===================================================================
--- code/trunk/src/modules/superorxobros/SOBHUDInfo.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBHUDInfo.h	(revision 11449)
@@ -0,0 +1,58 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Julien Kindle
+ *
+ */
+
+#ifndef _SOBHUDInfo_H__
+#define _SOBHUDInfo_H__
+
+#include "superorxobros/SOBPrereqs.h"
+
+#include "tools/interfaces/Tickable.h"
+#include "overlays/OverlayText.h"
+
+namespace orxonox
+{
+    class _SOBExport SOBHUDInfo : public OverlayText, public Tickable
+    {
+        public:
+            SOBHUDInfo(Context* context);
+
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedOwner() override;
+
+            inline void setType(std::string type)
+                { this->type_ = type; }
+            inline std::string getType() const
+                { return this->type_; }
+        
+
+        private:
+            SOB* SOBGame;
+            std::string type_;
+      
+    };
+}
+#endif /* _SOBHUDInfo_H__ */
Index: code/trunk/src/modules/superorxobros/SOBItem.cc
===================================================================
--- code/trunk/src/modules/superorxobros/SOBItem.cc	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBItem.cc	(revision 11449)
@@ -0,0 +1,79 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBItem.cc
+    @brief Not sure if ever used
+*/
+
+#include "SOBItem.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "SOBFigure.h"
+#include "util/Output.h"
+
+
+namespace orxonox
+{
+    RegisterClass(SOBItem);
+
+    SOBItem::SOBItem(Context* context) : StaticEntity(context)
+    {
+        RegisterObject(SOBItem);
+
+        attachedToFigure_ = false;
+
+        figure_ = nullptr;
+     this->enableCollisionCallback();
+       
+    }
+
+    
+
+    void SOBItem::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBItem, XMLPort, xmlelement, mode);
+
+
+     }
+
+   
+    bool SOBItem::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) {
+
+        return true;
+    }
+
+
+    void SOBItem::setFigure(SOBFigure* newFigure)
+    {
+        figure_ = newFigure;
+    }
+
+
+}
Index: code/trunk/src/modules/superorxobros/SOBItem.h
===================================================================
--- code/trunk/src/modules/superorxobros/SOBItem.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBItem.h	(revision 11449)
@@ -0,0 +1,62 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBItem.h
+    @brief Declaration of the SOBItem class.
+    @ingroup SOB
+*/
+
+#ifndef _SOBItem_H__
+#define _SOBItem_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/StaticEntity.h"
+
+
+namespace orxonox
+{
+    class _SOBExport SOBItem : public StaticEntity
+    {
+        public:
+            SOBItem(Context* context);
+            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;
+
+          
+            bool attachedToFigure_;
+
+        protected:
+          
+            WeakPtr<SOBFigure> figure_;
+           
+    };
+}
+
+#endif /* _SOBItem_H__ */
Index: code/trunk/src/modules/superorxobros/SOBMushroom.cc
===================================================================
--- code/trunk/src/modules/superorxobros/SOBMushroom.cc	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBMushroom.cc	(revision 11449)
@@ -0,0 +1,125 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBMushroom.cc
+    @brief This is the class for the powerup mushroom
+*/
+
+#include "SOBMushroom.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "SOBFigure.h"
+#include "util/Output.h"
+
+
+namespace orxonox
+{
+    RegisterClass(SOBMushroom);
+
+    SOBMushroom::SOBMushroom(Context* context) : MovableEntity(context)
+    {
+        RegisterObject(SOBMushroom);
+
+        attachedToFigure_ = false;
+        setAngularFactor(0.0);
+        figure_ = nullptr;
+        this->enableCollisionCallback();
+        gravityAcceleration_ = 350.0;
+        speed_ = 0.0;
+        hasCollided_=false;
+        goesRight_ = true;
+        lastPos_ = getPosition();
+        lastPos_.x -= 20;
+        changeAllowed_ = true;
+        changedOn_ = 0.0;
+       
+    }
+
+    
+
+    void SOBMushroom::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBMushroom, XMLPort, xmlelement, mode);
+        XMLPortParam(SOBMushroom, "speed", setSpeed, getSpeed, xmlelement, mode);
+
+
+     }
+
+   
+    bool SOBMushroom::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) {
+
+
+        if (changeAllowed_ && otherObject->getMass() != -1) {
+                goesRight_ = !goesRight_;
+                changeAllowed_ = false;
+        }
+
+        return true;
+    }
+
+
+    void SOBMushroom::setFigure(SOBFigure* newFigure)
+    {
+        figure_ = newFigure;
+    }
+
+
+
+    void SOBMushroom::tick(float dt)
+    {
+        SUPER(SOBMushroom, tick, dt);
+
+        //Exactly like the Gumba class, if collided, turn direction of Mushroom and wait 200ms so we don't get two collisions from the same wall
+        if (!changeAllowed_) {
+            changedOn_+= dt;
+            if (changedOn_> 0.200) {
+                changeAllowed_ = true;
+                changedOn_ = 0.0;
+
+        }
+    }
+        
+
+        int dir = 1;
+        if (!goesRight_)
+            dir = -1;
+
+        Vector3 velocity = getVelocity();
+        velocity.z -= gravityAcceleration_*dt;
+        velocity.x = dir*speed_;
+        setVelocity(velocity);
+
+
+    
+        lastPos_ = getPosition();
+            }
+
+
+}
Index: code/trunk/src/modules/superorxobros/SOBMushroom.h
===================================================================
--- code/trunk/src/modules/superorxobros/SOBMushroom.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBMushroom.h	(revision 11449)
@@ -0,0 +1,74 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabien Vultier
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file SOBMushroom.h
+    @brief Declaration of the SOBMushroom class.
+    @ingroup SOB
+*/
+
+#ifndef _SOBMushroom_H__
+#define _SOBMushroom_H__
+
+#include "superorxobros/SOBPrereqs.h"
+#include "worldentities/MovableEntity.h"
+
+
+namespace orxonox
+{
+    class _SOBExport SOBMushroom : public MovableEntity
+    {
+        public:
+            SOBMushroom(Context* context);
+            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;
+
+          
+            bool attachedToFigure_;
+
+            void setSpeed(const float speed)
+                { this->speed_ = speed; }
+            float getSpeed() const
+                { return speed_; }
+
+            bool hasCollided_;
+        protected:
+            float gravityAcceleration_;
+            float speed_;
+            WeakPtr<SOBFigure> figure_;
+            bool goesRight_;
+            Vector3 lastPos_;
+            bool changeAllowed_;
+            float changedOn_;
+           
+    };
+}
+
+#endif /* _SOBMushroom_H__ */
Index: code/trunk/src/modules/superorxobros/SOBPrereqs.h
===================================================================
--- code/trunk/src/modules/superorxobros/SOBPrereqs.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBPrereqs.h	(revision 11449)
@@ -0,0 +1,84 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+@file
+@brief
+    Shared library macros, enums, constants and forward declarations for the SOB module
+*/
+
+#ifndef _SOBPrereqs_H__
+#define _SOBPrereqs_H__
+
+#include "OrxonoxConfig.h"
+#include "OrxonoxPrereqs.h"
+
+//-----------------------------------------------------------------------
+// Shared library settings
+//-----------------------------------------------------------------------
+
+#if defined(ORXONOX_PLATFORM_WINDOWS) && !defined(SOB_STATIC_BUILD)
+#  ifdef SOB_SHARED_BUILD
+#    define _SOBExport __declspec(dllexport)
+#  else
+#    if defined( __MINGW32__ )
+#      define _SOBExport
+#    else
+#      define _SOBExport __declspec(dllimport)
+#    endif
+#  endif
+#  define _SOBPrivate
+#elif defined (ORXONOX_GCC_VISIBILITY)
+#  define _SOBExport  __attribute__ ((visibility("default")))
+#  define _SOBPrivate __attribute__ ((visibility("hidden")))
+#else
+#  define _SOBExport
+#  define _SOBPrivate
+#endif
+
+//-----------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------
+
+namespace orxonox
+{
+    class SOBCenterpoint;
+    class SOB;
+    class SOBFigure;
+    class SOBItem;
+    class SOBQBlock;
+    class SOBMushroom;
+    class SOBHUDInfo;
+    class SOBGumba;
+    class SOBFlagstone;
+    class SOBCastlestone;
+    class SOBCoin;
+
+}
+
+#endif /* _SOBPrereqs_H__ */
Index: code/trunk/src/modules/superorxobros/SOBQBlock.cc
===================================================================
--- code/trunk/src/modules/superorxobros/SOBQBlock.cc	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBQBlock.cc	(revision 11449)
@@ -0,0 +1,128 @@
+/*
+ *   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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+    @file SOBQBlock.cc
+    @brief If this QBlock is created, attachedToFigure_ is set to false. When the figure picks it up, the variable is set to true and the figure starts flying fast until the fuel is reduced to zero.
+*/
+
+#include "SOBQBlock.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "SOB.h"
+#include "SOBMushroom.h"
+#include "SOBCoin.h"
+
+namespace orxonox
+{
+    RegisterClass(SOBQBlock);
+
+    SOBQBlock::SOBQBlock(Context* context) : SOBItem(context)
+    {
+        RegisterObject(SOBQBlock);
+        used_ = false;
+
+    }
+
+    SOBQBlock::~SOBQBlock()
+    {
+
+    }
+
+   
+    bool SOBQBlock::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) {
+
+
+        //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) {
+            used_ = true;
+
+            for (WorldEntity* object : this->getAttachedObjects())
+                object->setVisible(!object->isVisible());            
+
+            SOB* SOBGame = orxonox_cast<SOB*>(getGametype());
+
+            //Spawn either a powerup mushroom or a coin animation (also just an object, have a look at the SOBCoin class)
+            //The spawn methods are declared at the bottom of this file
+            if (type_ == "Coin") {
+                SOBGame->addCoin();
+                spawnCoin();
+            }
+            if (type_ == "Mushroom") {
+                spawnMushroom();
+            }
+
+        }
+        return true;
+    }
+
+
+    void SOBQBlock::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SOBQBlock, XMLPort, xmlelement, mode);
+        XMLPortParam(SOBQBlock, "type",     setType,     getType,     xmlelement, mode).defaultValues(false);
+
+
+     }
+
+
+     //The spawnmethods from above
+     void SOBQBlock::spawnMushroom() {
+        SOBCenterpoint* center_ = ((SOB*)getGametype())->center_;
+
+         SOBMushroom* mush = new SOBMushroom(center_->getContext());
+         Vector3 spawnpos = this->getWorldPosition();
+         spawnpos.z += 0;
+
+        if (mush != nullptr && center_ != nullptr)
+        {
+            mush->addTemplate("mushroom");
+            mush->setPosition(spawnpos);
+            
+        }
+     }
+
+          void SOBQBlock::spawnCoin() {
+        SOBCenterpoint* center_ = ((SOB*)getGametype())->center_;
+
+         SOBCoin* mush = new SOBCoin(center_->getContext());
+         Vector3 spawnpos = this->getWorldPosition();
+         spawnpos.z += 0;
+
+        if (mush != nullptr && center_ != nullptr)
+        {
+            mush->addTemplate("coin");
+            mush->setPosition(spawnpos);
+       
+        }
+     }
+
+
+}
Index: code/trunk/src/modules/superorxobros/SOBQBlock.h
===================================================================
--- code/trunk/src/modules/superorxobros/SOBQBlock.h	(revision 11449)
+++ code/trunk/src/modules/superorxobros/SOBQBlock.h	(revision 11449)
@@ -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:
+ *      Julien Kindle
+ *   Co-authors:
+ *      
+ *
+ */
+
+#ifndef _SOBQBlock_H__
+#define _SOBQBlock_H__
+
+#include "SOBPrereqs.h"
+#include "SOBItem.h"
+
+namespace orxonox
+{
+    class _SOBExport SOBQBlock : public SOBItem
+    {
+        public:
+            SOBQBlock(Context* context);
+            virtual ~SOBQBlock();
+            virtual  bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+
+            void setType(std::string type) {
+                this->type_=type;
+            }
+            std::string getType() {
+                return this->type_;
+            }
+        protected:
+            bool used_;
+            std::string type_;
+            void spawnMushroom();
+            void spawnCoin();
+    };
+           
+}
+
+#endif /* _SOBQBlock_H__ */
