Index: code/trunk/data/levels/lastManStanding.oxw
===================================================================
--- code/trunk/data/levels/lastManStanding.oxw	(revision 8177)
+++ code/trunk/data/levels/lastManStanding.oxw	(revision 8178)
@@ -1,2 +1,8 @@
+<LevelInfo
+ name = "Last Man Standing"
+ description = "Be the sole survivor."
+ tags = ""
+/>
+
 <?lua
   include("stats.oxo")
@@ -38,29 +44,23 @@
 
 <!-- ------------ middle asteroid -------------- -->
-    <StaticEntity position="0,20,0" collisionType=static>
-       <attached>
-           <Model position="0,0,0" scale=140 mesh="asteroid_UV.mesh" shadow=true />
-           <!-- ParticleEmitter position="0,0,0" source="Orxonox/Steam" / -->
-       </attached>
-      <collisionShapes>
-        <SphereCollisionShape radius="145" />
-      </collisionShapes>
+    <StaticEntity position="0,0,0" collisionType=static>    
+        <attached>
+            <MovableEntity position="0,20,0" rotationrate="-4.5" rotationaxis="0,1,0" >
+                <attached>
+                    <Model position="0,0,0" scale=140 mesh="asteroid_UV.mesh" shadow=true />
+                    <Model position="-160,40,28.4" scale=1 mesh="sphere.mesh" /><!--EasterEgg indicator-->
+                    <PickupSpawner position="-160,40,17" triggerDistance="20" respawnTime="5" maxSpawnedItems="15"><!--EasterEgg-->
+                        <pickup>
+                            <InvisiblePickup template=hugeinvisiblepickup />
+                        </pickup>
+                    </PickupSpawner>
+                </attached>
+            </MovableEntity>
+        </attached>
+        <collisionShapes>
+            <SphereCollisionShape radius="145" />
+        </collisionShapes>
     </StaticEntity>
 
-    <PickupSpawner position="-160,65,10" triggerDistance="10" respawnTime="5" maxSpawnedItems="10"><!--EasterEgg-->
-      <pickup>
-        <InvisiblePickup template=mediuminvisiblepickup />
-      </pickup>
-    </PickupSpawner>
-    <PickupSpawner position="-160,60,17" triggerDistance="10" respawnTime="5" maxSpawnedItems="10"><!--EasterEgg-->
-      <pickup>
-        <InvisiblePickup template=hugeinvisiblepickup />
-      </pickup>
-    </PickupSpawner>
-    <StaticEntity position="-160,60,28.4"><!--EasterEgg-Indicator-->
-      <attached>
-        <Model position="0,0,0" scale=1 mesh="sphere.mesh" />
-      </attached>
-    </StaticEntity>
 
 <!-- ---------------asteroid dome----------------- -->
@@ -138,5 +138,5 @@
 
 
-<?lua end ?>
+<?lua end ?><!-- ---------------asteroid dome END------------------->
 
   </Scene>
Index: code/trunk/data/levels/lastTeamStanding.oxw
===================================================================
--- code/trunk/data/levels/lastTeamStanding.oxw	(revision 8178)
+++ code/trunk/data/levels/lastTeamStanding.oxw	(revision 8178)
@@ -0,0 +1,142 @@
+<LevelInfo
+ name = "Last Team Standing"
+ description = "Survive as a team."
+ tags = "singleplayer"
+/>
+<?lua
+  include("stats.oxo")
+  include("HUDTemplates3.oxo")
+  include("templates/lodInformation.oxt")
+  include("lastTeamStandingHUD.oxo")
+  include("templates/spaceshipAssff.oxt")
+  include("templates/spaceshipPirate.oxt")
+  include("templates/pickupRepresentationTemplates.oxt")
+?>
+
+<Level
+ name         = "Last Team Standing"
+ description  = "testmap for gametype last team standing"
+ gametype     =  "LastTeamStanding"
+>
+  <templates>
+    <Template link=lodtemplate_default />
+  </templates>
+
+  <Scene
+    ambientlight = "0.8, 0.8, 0.8"
+    skybox       = "Orxonox/skypanoramagen1"
+  >
+
+    <?lua
+      include("includes/pickups.oxi")
+    ?>
+
+<Bot />
+
+<!-- ------------ middle asteroid -------------- -->
+    <StaticEntity position="0,20,0" collisionType=static>
+       <attached>
+           <Model position="0,0,0" scale=140 mesh="asteroid_UV.mesh" shadow=true />
+           <!-- ParticleEmitter position="0,0,0" source="Orxonox/Steam" / -->
+       </attached>
+      <collisionShapes>
+        <SphereCollisionShape radius="145" />
+      </collisionShapes>
+    </StaticEntity>
+
+    <PickupSpawner position="-160,65,10" triggerDistance="10" respawnTime="5" maxSpawnedItems="10"><!--EasterEgg-->
+      <pickup>
+        <InvisiblePickup template=mediuminvisiblepickup />
+      </pickup>
+    </PickupSpawner>
+    <PickupSpawner position="-160,60,17" triggerDistance="10" respawnTime="5" maxSpawnedItems="10"><!--EasterEgg-->
+      <pickup>
+        <InvisiblePickup template=hugeinvisiblepickup />
+      </pickup>
+    </PickupSpawner>
+    <StaticEntity position="-160,60,28.4"><!--EasterEgg-Indicator-->
+      <attached>
+        <Model position="0,0,0" scale=1 mesh="sphere.mesh" />
+      </attached>
+    </StaticEntity>
+
+<!-- ---------------asteroid dome----------------- -->
+<?lua
+max = 16
+for i = 0, max, 1
+do
+    y = math.sin(i/max*6)*750
+    z = math.cos(i/max*6)*750
+    j = 1
+    ?>
+
+    <TeamSpawnPoint team=<?lua print( math.mod(i,4)) ?> position="<?lua print(y*1.4+z*0.2) ?>,0,<?lua print(z*1.4-y*0.2) ?>" direction="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+
+    <StaticEntity position="<?lua print(y) ?>,0,<?lua print(z) ?>" scale=<?lua print(j * 2) ?> collisionType=static >
+      <attached>
+        <Model position="0,0,0" scale=15 mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh">
+	</Model>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape    halfExtents="<?lua print(j * 2) ?>,100,<?lua print(j * 2) ?>" position = "0,0,0" />
+      </collisionShapes>
+    </StaticEntity>
+
+    <StaticEntity position="<?lua print(y) ?>,100,<?lua print(z) ?>" scale=<?lua print(j * 2) ?> collisionType=static >
+      <attached>
+        <Model position="0,0,0" scale=15 mesh="ast<?lua print( math.mod(i+3,6) + 1) ?>.mesh">
+	</Model>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape    halfExtents="45,100,45" position = "0,0,0" />
+      </collisionShapes>
+    </StaticEntity>
+
+    <StaticEntity position="<?lua print(y) ?>,200,<?lua print(z) ?>" scale=<?lua print(j * 2) ?> collisionType=static >
+      <attached>
+        <Model position="0,0,0" scale=15 mesh="ast<?lua print( math.mod(i*5,6) + 1) ?>.mesh">
+	</Model>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape    halfExtents="45,100,45" position = "0,0,0" />
+      </collisionShapes>
+    </StaticEntity>
+
+    <StaticEntity position="<?lua print(y) ?>,-100,<?lua print(z) ?>" scale=<?lua print(j * 2) ?> collisionType=static >
+      <attached>
+        <Model position="0,0,0" scale=15 mesh="ast<?lua print( math.mod(i*13+1,6) + 1) ?>.mesh">
+	</Model>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape    halfExtents="45,100,45" position = "0,0,0" />
+      </collisionShapes>
+    </StaticEntity>
+
+    <StaticEntity position="<?lua print(y) ?>,-200,<?lua print(z) ?>" scale=<?lua print(j * 2) ?> collisionType=static >
+      <attached>
+        <Model position="0,0,0" scale=15 mesh="ast<?lua print( math.mod(i*17,6) + 1) ?>.mesh">
+	</Model>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape    halfExtents="45,100,45" position = "0,0,0" />
+      </collisionShapes>
+    </StaticEntity>
+
+<!-- ---------Top Asteroid----------- -->
+    <StaticEntity position="<?lua print(y) ?>,300,<?lua print(z) ?>" scale=<?lua print(j * 2.1) ?> pitch="90" roll="180" yaw="<?lua print(-90+i*360/max) ?>" collisionType=static >
+      <attached>
+        <Model position="0,0,0" scale=25 mesh="ast6.mesh">
+	</Model>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape    halfExtents="50,140,30" position="0,0,0"/>
+      </collisionShapes>
+    </StaticEntity>
+
+
+<?lua end ?>
+
+  </Scene>
+</Level>
+
+
Index: code/trunk/data/levels/lastTeamStandingII.oxw
===================================================================
--- code/trunk/data/levels/lastTeamStandingII.oxw	(revision 8178)
+++ code/trunk/data/levels/lastTeamStandingII.oxw	(revision 8178)
@@ -0,0 +1,417 @@
+<LevelInfo
+ name = "On the fly"
+ description = "Survive as a team."
+ tags = ""
+/>
+<?lua
+  include("stats.oxo")
+  include("HUDTemplates3.oxo")
+  include("templates/lodInformation.oxt")
+  include("lastTeamStandingHUD.oxo")
+  include("templates/spaceshipAssff.oxt")
+  include("templates/spaceshipPirate.oxt")
+  include("templates/pickupRepresentationTemplates.oxt")
+?>
+
+<Level
+ name         = "On the fly"
+ description  = "testmap for gametype last team standing"
+ gametype     =  "LastTeamStanding"
+>
+  <templates>
+    <Template link=lodtemplate_default />
+  </templates>
+
+  <Scene
+    ambientlight = "0.8, 0.8, 0.8"
+    skybox       = "Orxonox/skypanoramagen1"
+  >
+<!-- TODO:
+1. make collisionshapes bulletproof: -> attach movable entity with dynamic collisionshape within a static collisionshape 
+2. add forcefields -> there should be several "streams" through the level
+3. add teamspawnpoints (different spaceships?) (where should the spawnpoints be placed?)
+-->
+<!--Bot / -->
+
+<!-------------------- Box: TopLayer + BottomLayer + 4 invisible Walls --------------------->
+   <StaticEntity position="0,0,0" direction="0,0,0" collisionType=static mass=100000 >
+       <attached>
+           <Model position="0,-400,0" mesh="cube_orange.mesh" scale3D="1000,10,1000" />
+           <Model position="0,-420,0" mesh="cube_orange.mesh" scale3D="1000,10,1000" /><!-- Second Model in order to avoid graphic errors-->
+       </attached>
+       <collisionShapes>
+           <BoxCollisionShape position="0,-400,0" halfExtents="1500,10,1500" />
+       </collisionShapes>
+   </StaticEntity>
+
+   <StaticEntity position="0,0,0" direction="0,0,0" collisionType=static mass=100000 >
+       <attached>
+           <Model position="0,400,0" mesh="cube_orange.mesh" scale3D="1000,10,1000" />
+           <Model position="0,420,0" mesh="cube_orange.mesh" scale3D="1000,10,1000" />
+       </attached>
+       <collisionShapes>
+           <BoxCollisionShape position="0,400,0" halfExtents="1000,10,1000" />
+       </collisionShapes>
+   </StaticEntity>
+
+   <StaticEntity position="0,0,0" direction="0,0,0" collisionType=static mass=100000 >
+       <attached>
+           <!--Model position="1000,0,0" mesh="cube_green.mesh" scale3D="10,400,1000" /-->
+       </attached>
+       <collisionShapes>
+           <BoxCollisionShape position="1000,0,0" halfExtents="10,400,1000" />
+       </collisionShapes>
+   </StaticEntity>
+
+
+   <StaticEntity position="0,0,0" direction="0,0,0" collisionType=static mass=100000 >
+       <attached>
+           <!-- Model position="-1000,0,0" mesh="cube_green.mesh" scale3D="10,400,1000" / -->
+       </attached>
+       <collisionShapes>
+           <BoxCollisionShape position="-1000,0,0" halfExtents="10,400,1000" />
+       </collisionShapes>
+   </StaticEntity>
+
+
+   <StaticEntity position="0,0,0" direction="0,0,0" collisionType=static mass=100000 >
+       <attached>
+           <Model position="0,0,1000" mesh="cube_green.mesh" scale3D="1000,400,10" />
+       </attached>
+       <collisionShapes>
+           <BoxCollisionShape position="0,0,1000" halfExtents="1000,400,10" />
+       </collisionShapes>
+   </StaticEntity>
+
+
+   <StaticEntity position="0,0,0" direction="0,0,0" collisionType=static mass=100000 >
+       <attached>
+           <Model position="0,0,-1000" mesh="cube_green.mesh" scale3D="1000,400,10" />
+       </attached>
+       <collisionShapes>
+           <BoxCollisionShape position="0,0,-1000" halfExtents="1000,400,10" />
+       </collisionShapes>
+   </StaticEntity>
+<!-- END of CUBE-->
+<!-------------- Centered Thin Gate -------------->
+
+   <StaticEntity position="0,0,0" direction="0,0,0" collisionType=static mass=100000 >
+       <attached>
+           <Model position="0,-1200,0" mesh="hs-w01.mesh" scale3D="300,400,900" pitch="90" roll="0" yaw="0"/>
+           <!--Model position="121,0,-80" mesh="cube.mesh" scale3D="18,400,18" />
+           <Model position="-121,0,-80" mesh="cube.mesh" scale3D="18,400,18" /-->
+           <Model position="0,0,-80" scale=150 mesh="sphere.mesh" />
+       </attached>
+       <collisionShapes>
+           <BoxCollisionShape position="121,0,-80" halfExtents="18,400,18" />
+           <BoxCollisionShape position="-121,0,-80" halfExtents="18,400,18" />
+           <SphereCollisionShape position="0,0,-80" radius="150" />
+       </collisionShapes>
+   </StaticEntity>
+
+   <ForceField position="0,270,-80" direction="-3,-4,-3" diameter=150 velocity=2000 length=900 />
+   <MovableEntity position="0,270,-80" direction="-3,-4,-3">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.7,0.4,0.1" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.7,0.4,0.1" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- to bulk gate, left -->
+   <ForceField position="0,-275,-80" direction="3,0,2" diameter=150 velocity=2000 length=900 />
+   <MovableEntity position="0,-275,-80" direction="3,0,2">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.7,0.4,0.1" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.7,0.4,0.1" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+
+
+<!-------------- Bulk Gate -------------->
+   <StaticEntity position="300,0,500" direction="0,0,0" collisionType=static mass=100000 >
+       <attached>
+           <Model position="0,-100,0" mesh="hs-w01.mesh" scale3D="500,400,600" pitch="270" roll="0" yaw="0"/>
+           <!--Model position="205,-105,20" mesh="cube.mesh" scale3D="135,280,60" />
+           <Model position="-205,-105,20" mesh="cube.mesh" scale3D="135,280,60" />
+           <Model position="0,235,0" mesh="cube.mesh" scale3D="180,35,35" />
+           <Model position="0,-344,-18" mesh="cube.mesh" scale3D="210,38,36" /-->
+       </attached>
+       <collisionShapes>
+           <BoxCollisionShape position="205,-105,20" halfExtents="135,280,60" />
+           <BoxCollisionShape position="-205,-105,20" halfExtents="135,280,60" />
+           <BoxCollisionShape position="0,235,0" halfExtents="180,35,35" />
+           <BoxCollisionShape position="0,-344,-18" halfExtents="210,38,36" />
+       </collisionShapes>
+   </StaticEntity>
+<!-- back to thin gate -->
+   <ForceField position="300,0,650" direction="1,1.5,-4" diameter=150 velocity=2000 length=900 />
+   <MovableEntity position="300,0,650" direction="1,1.5,-4">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.7,0.4,0.1" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.7,0.4,0.1" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- to thin gate -->
+   <ForceField position="300,300,500" direction="-1,0,-2" diameter=100 velocity=1500 length=900 />
+   <MovableEntity position="300,300,500" direction="-1,0,-2">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.7,0.4,0.1" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.7,0.4,0.1" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- alternative stream -->
+   <ForceField position="830,-300,830" direction="-1,0,0" diameter=150 velocity=2000 length=900 />
+   <MovableEntity position="830,-300,830" direction="-1,0,0">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.5,0,0" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.5,0,0" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- alternative stream II-->
+   <ForceField position="830,350,830" direction="0,0,-1" diameter=150 velocity=2000 length=900 />
+   <MovableEntity position="830,350,830" direction="0,0,-1">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0,0,0.5" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0,0,0.5" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+
+
+<!-------------- Bar -------------->
+   <StaticEntity position="-495,0,-495" direction="0,0,0" collisionType=static mass=100000 >
+       <attached>
+           <Model position="0,0,0" mesh="CuboidBody.mesh" scale3D="20,720,20" pitch="90" roll="45" yaw="0"/>
+           <!--Model position="0,0,0" mesh="cube.mesh" scale3D="19,719,19" pitch="90" roll="45" yaw="0"/-->
+       </attached>
+
+       <collisionShapes>
+           <BoxCollisionShape position="0,0,0" halfExtents="20,720,20" pitch="90" roll="45" yaw="0"/>
+       </collisionShapes>
+   </StaticEntity>
+<!-- "lift" -->
+   <ForceField position="-700,-300,-700" direction="0,1,0" diameter=100 velocity=2000 length=400 />
+   <MovableEntity position="-700,-300,-700" direction="0,1,0">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.7,0.4,0.1" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.7,0.4,0.1" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- to thin gate, low -->
+   <ForceField position="0,60,-830" direction="0,-1,2" diameter=150 velocity=2000 length=900 />
+   <MovableEntity position="0,60,-830" direction="0,-1,2">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.7,0.4,0.1" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.7,0.4,0.1" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- alternative stream -->
+   <ForceField position="-830,-350,-830" direction="2,0,0" diameter=100 velocity=2000 length=900 />
+   <MovableEntity position="-830,-350,-830" direction="2,0,0">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.5,0,0" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.5,0,0" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- alternative stream II-->
+   <ForceField position="-870,350,-830" direction="0,0,1" diameter=150 velocity=2000 length=900 />
+   <MovableEntity position="-870,350,-830" direction="0,0,1">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0,0,0.5" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0,0,0.5" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+
+<!-------------- 2 Side-Bars -------------->
+   <StaticEntity position="0,0,-1000" direction="0,0,0" collisionType=static mass=100000 >
+       <attached>
+           <Model position="0,0,0" mesh="CuboidBody.mesh" scale3D="20,405,20" pitch="0" roll="10" yaw="0"/>
+       </attached>
+       <collisionShapes>
+           <BoxCollisionShape position="0,0,0" halfExtents="20,400,20" pitch="0" roll="0" yaw="0"/>
+       </collisionShapes>
+   </StaticEntity>
+   <StaticEntity position="-1000,0,0" direction="0,0,0" collisionType=static mass=100000 >
+       <attached>
+           <Model position="0,0,0" mesh="CuboidBody.mesh" scale3D="20,405,20" pitch="7" roll="0" yaw="0"/>
+       </attached>
+       <collisionShapes>
+           <BoxCollisionShape position="0,0,0" halfExtents="20,400,20" pitch="0" roll="0" yaw="0"/>
+       </collisionShapes>
+   </StaticEntity>
+<!-- to solar panels -->
+   <ForceField position="-850,-300,-200" direction="1,0,2" diameter=150 velocity=2000 length=900 />
+   <MovableEntity position="-850,-300,-200" direction="1,0,2">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.7,0.4,0.1" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.7,0.4,0.1" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- along the bar -->
+   <ForceField position="-900,50,-100" direction="1,0,-1" diameter=150 velocity=2000 length=900 />
+   <MovableEntity position="-900,50,-100" direction="1,0,-1">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.7,0.4,0.1" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.7,0.4,0.1" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+
+<!-------------- 3 Solar Panels --------------->
+
+<?lua
+for i = 1, 3, 1
+do
+    x = i/4*1000
+    z = i/4*500
+?>
+   <StaticEntity position="<?lua print(-1000+x) ?>,-310,<?lua print(z) ?>" direction="0,0,0" collisionType=static mass=100000 >
+       <attached>
+           <Model position="0,0,0" mesh="SolarPanel.mesh" scale3D="60,80,30" pitch="0" roll="0" yaw="120"/>
+       </attached>
+       <collisionShapes>
+           <BoxCollisionShape position="0,300,0" halfExtents="155,460,3" pitch="0" roll="0" yaw="120"/>
+       </collisionShapes>
+   </StaticEntity>
+<?lua end ?>
+
+   <ForceField position="-600,100,400" direction="0,-1,-3" diameter=100 velocity=2000 length=900 />
+   <MovableEntity position="-600,100,400" direction="0,-1,-3">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.7,0.4,0.1" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.7,0.4,0.1" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- alternative stream -->
+   <ForceField position="-830,-100,830" direction="0,0,-1" diameter=100 velocity=2000 length=900 />
+   <MovableEntity position="-830,-100,830" direction="0,0,-1">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.5,0,0" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.5,0,0" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- alternative stream II -->
+   <ForceField position="-830,350,830" direction="1,0,0" diameter=100 velocity=2000 length=900 />
+   <MovableEntity position="-830,350,830" direction="1,0,0">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0,0,0.5" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0,0,0.5" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- along the panels -->
+   <ForceField position="-830,250,250" direction="3,0,2" diameter=100 velocity=2000 length=900 />
+   <MovableEntity position="-830,250,250" direction="3,0,2">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.7,0.4,0.1" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.7,0.4,0.1" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+
+<!-------------- Thin Gate -------------->
+
+   <StaticEntity position="500,0,-500" direction="1,0,-1" collisionType=static mass=100000 >
+       <attached>
+           <Model position="0,-1200,0" mesh="hs-w01.mesh" scale3D="300,400,900" pitch="90" roll="0" yaw="0"/>
+           <Model position="0,100,-80" scale=150 mesh="sphere.mesh" />
+       </attached>
+       <collisionShapes>
+           <BoxCollisionShape position="121,0,-80" halfExtents="18,400,18" />
+           <BoxCollisionShape position="-121,0,-80" halfExtents="18,400,18" />
+           <SphereCollisionShape position="0,100,-80" radius="150" />
+       </collisionShapes>
+   </StaticEntity>
+<!-- to thin gate middle -->
+   <ForceField position="550,350,-550" direction="-3.3,0,3" diameter=100 velocity=2000 length=900 />
+   <MovableEntity position="550,350,-550" direction="-3.3,0,3">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.7,0.4,0.1" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.7,0.4,0.1" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- across the field -->
+   <ForceField position="550,-350,-550" direction="-3,0,1" diameter=100 velocity=2000 length=900 />
+   <MovableEntity position="550,-350,-550" direction="-3,0,1">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.7,0.4,0.1" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.7,0.4,0.1" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- alternative stream -->
+   <ForceField position="830,-350,-830" direction="0,0,1" diameter=100 velocity=2000 length=900 />
+   <MovableEntity position="830,-350,-830" direction="0,0,1">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0.5,0,0" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0.5,0,0" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+<!-- alternative stream II -->
+   <ForceField position="830,350,-830" direction="-1,0,0" diameter=100 velocity=2000 length=900 />
+   <MovableEntity position="830,350,-830" direction="-1,0,0">
+       <attached>
+           <Billboard position="0,0,0" material="Flares/ringflare2" colour="0,0,0.5" scale=1/>
+           <?lua for i=0,4,1 do ?>
+               <Billboard position="0,0,<?lua print(i*(-100)) ?>" material="Examples/Flare" colour="0,0,0.5" scale=1/>
+           <?lua end ?>
+       </attached>
+   </MovableEntity>
+
+<!---------------- Spawnpoints ------------------>
+    <TeamSpawnPoint team=0 position="845,350,-835" direction="-1,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <TeamSpawnPoint team=0 position="845,-350,-835" direction="0,0,1" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <TeamSpawnPoint team=0 position="835,350,-845" direction="-1,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <TeamSpawnPoint team=0 position="835,-350,-845" direction="0,0,1" spawnclass=SpaceShip pawndesign=spaceshipassff />
+
+    <TeamSpawnPoint team=1 position="-845,350,835" direction="1,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <TeamSpawnPoint team=1 position="-845,-100,835" direction="0,0,-1" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <TeamSpawnPoint team=1 position="-835,350,845" direction="1,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <TeamSpawnPoint team=1 position="-835,-100,845" direction="0,0,-1" spawnclass=SpaceShip pawndesign=spaceshipassff />
+
+    <TeamSpawnPoint team=2 position="-870,350,-835" direction="0,0,1" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <TeamSpawnPoint team=2 position="-840,-350,-835" direction="1,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <TeamSpawnPoint team=2 position="-865,350,-840" direction="0,0,1" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <TeamSpawnPoint team=2 position="-835,-350,-840" direction="1,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+
+    <TeamSpawnPoint team=3 position="835,350,845" direction="0,0,-1" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <TeamSpawnPoint team=3 position="835,-300,845" direction="-1,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <TeamSpawnPoint team=3 position="845,350,835" direction="0,0,-1" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <TeamSpawnPoint team=3 position="845,-300,835" direction="-1,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+<Bot />
+
+  </Scene>
+</Level>
+
Index: code/trunk/data/overlays/lastManStandingHUD.oxo
===================================================================
--- code/trunk/data/overlays/lastManStandingHUD.oxo	(revision 8177)
+++ code/trunk/data/overlays/lastManStandingHUD.oxo	(revision 8178)
@@ -65,5 +65,5 @@
     />
 
-    <OverlayText
+    <!--OverlayText
      position  = "0.02, 0.07"
      pickpoint = "0.0, 0.0"
@@ -93,5 +93,5 @@
      align     = "left"
      caption   = "|"
-    />
+    /-->
 
   </OverlayGroup>
Index: code/trunk/data/overlays/lastTeamStandingHUD.oxo
===================================================================
--- code/trunk/data/overlays/lastTeamStandingHUD.oxo	(revision 8178)
+++ code/trunk/data/overlays/lastTeamStandingHUD.oxo	(revision 8178)
@@ -0,0 +1,58 @@
+<Template name="lastTeamStandingHUD">
+  <OverlayGroup name="lastTeamStandingHUD" scale = "1, 1">
+
+<GametypeFadingMessage
+     name     = "fadingmessage"
+     position = "0.5, 0.01"
+     font     = "VeraMono"
+     textsize = 0.04
+     colour   = "1.0, 1.0, 0.5, 1.0"
+     align    = "center"
+    />
+
+    <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   = "Lives:   "
+    />
+
+    <LastTeamStandingInfos
+     position  = "0.14, 0.02"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.04
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "left"
+
+     showlives     = true
+     showteams     = false
+    />
+
+    <OverlayText
+     position  = "0.02, 0.055"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.04
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "left"
+     caption   = "Teams: "
+    />
+
+    <LastTeamStandingInfos
+     position  = "0.14, 0.055"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.04
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "left"
+
+     showlives     = false
+     showteams     = true
+    />
+
+  </OverlayGroup>
+</Template>
Index: code/trunk/src/modules/overlays/hud/CMakeLists.txt
===================================================================
--- code/trunk/src/modules/overlays/hud/CMakeLists.txt	(revision 8177)
+++ code/trunk/src/modules/overlays/hud/CMakeLists.txt	(revision 8178)
@@ -17,3 +17,4 @@
   LastManStandingInfos.cc
   PauseNotice.cc
+  LastTeamStandingInfos.cc
 )
Index: code/trunk/src/modules/overlays/hud/GametypeStatus.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/GametypeStatus.cc	(revision 8177)
+++ code/trunk/src/modules/overlays/hud/GametypeStatus.cc	(revision 8178)
@@ -36,4 +36,5 @@
 #include "worldentities/ControllableEntity.h"
 #include "worldentities/pawns/Spectator.h"
+//#include "gametypes/Gametype.h"
 
 namespace orxonox
@@ -50,6 +51,8 @@
         RegisterObject(GametypeStatus);
 
+        //this->game_ = 0;
         this->owner_ = 0;
         this->bNoCaption_ = false;
+        //this->bForcedSpawn_ = false;
 
         ModifyConsoleCommand(__CC_GametypeStatus_name, __CC_displayCaption_name).setObject(this);
@@ -67,4 +70,9 @@
         if (this->owner_ && this->owner_->getGametypeInfo() && this->owner_->getControllableEntity())
         {
+            //if (this->game_)
+            //    this->bForcedSpawn_ = this->game_->getForceSpawn();
+            //else
+            //    this->bForcedSpawn_ = false;
+
             const GametypeInfo* gtinfo = this->owner_->getGametypeInfo();
             ControllableEntity* ce = this->owner_->getControllableEntity();
@@ -87,5 +95,5 @@
                 if (gtinfo->isStartCountdownRunning())
                     this->setCaption(multi_cast<std::string>(static_cast<int>(ceil(gtinfo->getStartCountdown()))));
-                else if (ce->isA(Class(Spectator)))
+                else if (ce->isA(Class(Spectator))/*&&(!bForcedSpawn_)*/)
                     this->setCaption("Press [Fire] to respawn");
                 else
@@ -101,5 +109,5 @@
     {
         SUPER(GametypeStatus, changedOwner);
-
+        //this->game_ = orxonox_cast<Gametype*>(this->getOwner());
         this->owner_ = orxonox_cast<PlayerInfo*>(this->getOwner());
     }
Index: code/trunk/src/modules/overlays/hud/GametypeStatus.h
===================================================================
--- code/trunk/src/modules/overlays/hud/GametypeStatus.h	(revision 8177)
+++ code/trunk/src/modules/overlays/hud/GametypeStatus.h	(revision 8178)
@@ -49,6 +49,8 @@
 
         private:
+            //Gametype* game_;
             PlayerInfo* owner_;
             bool bNoCaption_;
+            //bool bForcedSpawn_;
 
     };
Index: code/trunk/src/modules/overlays/hud/LastTeamStandingInfos.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/LastTeamStandingInfos.cc	(revision 8178)
+++ code/trunk/src/modules/overlays/hud/LastTeamStandingInfos.cc	(revision 8178)
@@ -0,0 +1,97 @@
+/*
+ *   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:
+ *      Johannes Ritz
+ *   Co-authors:
+ *      
+ *
+ */
+
+#include "LastTeamStandingInfos.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "util/Convert.h"
+#include "gametypes/LastTeamStanding.h"
+#include "infos/PlayerInfo.h"
+
+namespace orxonox
+{
+    CreateFactory(LastTeamStandingInfos);
+
+    LastTeamStandingInfos::LastTeamStandingInfos(BaseObject* creator) : OverlayText(creator)
+    {
+        RegisterObject(LastTeamStandingInfos);
+
+        this->lts_ = 0;
+        this->player_ = 0;
+        this->bShowLives_ = false;
+        this->bShowTeams_ = false;
+    }
+
+    LastTeamStandingInfos::~LastTeamStandingInfos()
+    {
+    }
+
+    void LastTeamStandingInfos::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(LastTeamStandingInfos, XMLPort, xmlelement, mode);
+
+        XMLPortParam(LastTeamStandingInfos, "showlives",     setShowLives,     getShowLives,     xmlelement, mode).defaultValues(false);
+        XMLPortParam(LastTeamStandingInfos, "showTeams",     setShowTeams,     getShowTeams,     xmlelement, mode).defaultValues(false);
+    }
+
+    void LastTeamStandingInfos::tick(float dt)
+    {
+        SUPER(LastTeamStandingInfos, tick, dt);
+
+        if (this->player_ && this->lts_)
+        {
+            if (this->bShowLives_)
+            {
+                const std::string& lives = multi_cast<std::string>(this->lts_->playerGetLives(this->player_));
+                this->setCaption(lives);
+            }
+            else if(this->bShowTeams_)
+            {
+                const std::string& Teams = multi_cast<std::string>(this->lts_->getNumTeamsAlive());
+                this->setCaption(Teams);
+            }
+        }
+    }
+
+    void LastTeamStandingInfos::changedOwner()
+    {
+        SUPER(LastTeamStandingInfos, changedOwner);
+
+        if (this->getOwner() && this->getOwner()->getGametype())
+        {
+            this->player_ = orxonox_cast<PlayerInfo*>(this->getOwner());
+            this->lts_ = orxonox_cast<LastTeamStanding*>(this->getOwner()->getGametype().get());
+        }
+        else
+        {
+            this->player_ = 0;
+            this->lts_ = 0;
+        }
+    }
+}
Index: code/trunk/src/modules/overlays/hud/LastTeamStandingInfos.h
===================================================================
--- code/trunk/src/modules/overlays/hud/LastTeamStandingInfos.h	(revision 8178)
+++ code/trunk/src/modules/overlays/hud/LastTeamStandingInfos.h	(revision 8178)
@@ -0,0 +1,66 @@
+/*
+ *   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:
+ *      Johannes Ritz
+ *   Co-authors:
+ *      
+ *
+ */
+
+#ifndef _LastTeamStandingInfos_H__
+#define _LastTeamStandingInfos_H__
+
+#include "overlays/OverlaysPrereqs.h"
+
+#include "tools/interfaces/Tickable.h"
+#include "overlays/OverlayText.h"
+
+namespace orxonox
+{
+    class _OverlaysExport LastTeamStandingInfos : public OverlayText, public Tickable
+    {
+        public:
+            LastTeamStandingInfos(BaseObject* creator);
+            virtual ~LastTeamStandingInfos();
+
+            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void changedOwner();
+
+            inline void setShowLives(bool value)
+                { this->bShowLives_ = value; }
+            inline bool getShowLives() const
+                { return this->bShowLives_; }
+
+            inline void setShowTeams(bool value)
+                { this->bShowTeams_ = value; }
+            inline bool getShowTeams() const
+                { return this->bShowTeams_; }
+
+        private:
+            LastTeamStanding* lts_;
+            PlayerInfo* player_;
+            bool bShowLives_;
+            bool bShowTeams_;
+    };
+}
+#endif /* _LastTeamStandingInfos_H__ */
Index: code/trunk/src/orxonox/OrxonoxPrereqs.h
===================================================================
--- code/trunk/src/orxonox/OrxonoxPrereqs.h	(revision 8177)
+++ code/trunk/src/orxonox/OrxonoxPrereqs.h	(revision 8178)
@@ -96,4 +96,5 @@
     class Gametype;
     class LastManStanding;
+    class LastTeamStanding;
     class TeamBaseMatch;
     class TeamDeathmatch;
Index: code/trunk/src/orxonox/gametypes/CMakeLists.txt
===================================================================
--- code/trunk/src/orxonox/gametypes/CMakeLists.txt	(revision 8177)
+++ code/trunk/src/orxonox/gametypes/CMakeLists.txt	(revision 8178)
@@ -8,3 +8,4 @@
   Dynamicmatch.cc
   LastManStanding.cc
+  LastTeamStanding.cc
 )
Index: code/trunk/src/orxonox/gametypes/Gametype.h
===================================================================
--- code/trunk/src/orxonox/gametypes/Gametype.h	(revision 8177)
+++ code/trunk/src/orxonox/gametypes/Gametype.h	(revision 8178)
@@ -150,4 +150,7 @@
               { this->timeLimit_ = t; }
 
+            //inline bool getForceSpawn()
+            //  { return this->bForceSpawn_; }       
+
             virtual void resetTimer();
             virtual void resetTimer(float t);
Index: code/trunk/src/orxonox/gametypes/LastTeamStanding.cc
===================================================================
--- code/trunk/src/orxonox/gametypes/LastTeamStanding.cc	(revision 8178)
+++ code/trunk/src/orxonox/gametypes/LastTeamStanding.cc	(revision 8178)
@@ -0,0 +1,324 @@
+/*
+ *   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:
+ *      Johannes Ritz
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "LastTeamStanding.h"
+
+#include "core/CoreIncludes.h"
+#include "network/Host.h"
+#include "infos/PlayerInfo.h"
+#include "worldentities/pawns/Pawn.h"
+#include "core/ConfigValueIncludes.h"
+#include "util/Convert.h"
+
+namespace orxonox
+{
+    CreateUnloadableFactory(LastTeamStanding);
+
+    LastTeamStanding::LastTeamStanding(BaseObject* creator) : TeamDeathmatch(creator)
+    {
+        RegisterObject(LastTeamStanding);
+        this->bForceSpawn_ = true;
+        this->lives = 1;//4
+        this->eachTeamsPlayers.resize(teams_,0);
+        this->teamsAlive = 0;
+        this->bNoPunishment = false;
+        this->bHardPunishment = false;
+        this->punishDamageRate = 0.4f;
+        this->timeRemaining = 15.0f;
+        this->respawnDelay = 4.0f;
+        this->setHUDTemplate("lastTeamStandingHUD");
+    }
+    
+    LastTeamStanding::~LastTeamStanding()
+    {
+        //this->playerLives_.clear();
+        //this->eachTeamsPlayers.clear();
+        //this->timeToAct_.clear();
+        //this->inGame_.clear();
+        //this->playerDelayTime_.clear();
+    }   
+
+    void LastTeamStanding::playerEntered(PlayerInfo* player)
+    {
+        if (!player)// only for safety
+            return;
+        TeamDeathmatch::playerEntered(player);
+        if (teamsAlive<=1)
+            playerLives_[player]=lives;
+        else
+            playerLives_[player]=getMinLives();//new players only get minimum of lives */
+        
+        this->timeToAct_[player] = timeRemaining;
+        this->playerDelayTime_[player] = respawnDelay;
+        this->inGame_[player] = true;
+        unsigned int team = getTeam(player);
+        if( team < 0|| team > teams_) // make sure getTeam returns a regular value
+            return;
+        if(this->eachTeamsPlayers[team]==0) //if a player is the first in his group, a new team is alive
+            this->teamsAlive++;
+        this->eachTeamsPlayers[team]++; //the number of player in this team is increased
+    }
+
+    bool LastTeamStanding::playerLeft(PlayerInfo* player)
+    {
+        bool valid_player = TeamDeathmatch::playerLeft(player);
+        if (valid_player)
+        {
+            this->playerLives_.erase(player);
+            this->timeToAct_.erase(player);
+            this->playerDelayTime_.erase(player);
+            this->inGame_.erase(player);
+            unsigned int team = getTeam(player);
+            if( team < 0|| team > teams_) // make sure getTeam returns a regular value
+                return valid_player;
+            this->eachTeamsPlayers[team]--;       // a player left the team
+            if(this->eachTeamsPlayers[team] == 0) // if it was the last player a team died
+                this->teamsAlive--;
+        }
+
+        return valid_player;
+    }
+
+    bool LastTeamStanding::allowPawnDeath(Pawn* victim, Pawn* originator)
+    {
+        if (!victim||!victim->getPlayer())// only for safety
+            return true;
+        bool allow = TeamDeathmatch::allowPawnDeath(victim, originator);
+        if(!allow) {return allow;}
+        
+        playerLives_[victim->getPlayer()] = playerLives_[victim->getPlayer()] - 1; //player lost a live
+        this->inGame_[victim->getPlayer()] = false; //if player dies, he isn't allowed to respawn immediately
+        if (playerLives_[victim->getPlayer()]<=0) //if player lost all lives
+        {
+            unsigned int team = getTeam(victim->getPlayer());
+            if(team < 0|| team > teams_) // make sure getTeam returns a regular value
+                return allow;
+            this->eachTeamsPlayers[team]--;
+            if(eachTeamsPlayers[team] == 0) //last team member died
+                this->teamsAlive--;
+            const std::string& message = victim->getPlayer()->getName() + " has lost all lives";
+            COUT(0) << message << std::endl;
+            Host::Broadcast(message);
+        }
+        return allow;
+    }
+
+    bool LastTeamStanding::allowPawnDamage(Pawn* victim, Pawn* originator)
+    {
+        bool allow = TeamDeathmatch::allowPawnDamage(victim, originator);
+        if(!allow) {return allow;}
+        if (originator && originator->getPlayer())// only for safety
+        {
+            this->timeToAct_[originator->getPlayer()] = timeRemaining;
+
+            std::map<PlayerInfo*, Player>::iterator it = this->players_.find(originator->getPlayer());
+            if (it != this->players_.end())
+            {
+                if (it->first->getClientID()== CLIENTID_UNKNOWN)
+                    return true;
+                const std::string& message = ""; // resets Camper-Warning-message
+                this->gtinfo_->sendFadingMessage(message,it->first->getClientID());
+            }    
+        }
+        return allow;
+    }
+
+    void LastTeamStanding::spawnDeadPlayersIfRequested()
+    {
+        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
+            if (it->second.state_ == PlayerState::Dead)
+            {
+                bool alive = (0 < playerLives_[it->first]&&(inGame_[it->first]));
+                if (alive&&(it->first->isReadyToSpawn() || this->bForceSpawn_))
+                {
+                    this->spawnPlayer(it->first);
+                }
+            }
+    }
+
+    void LastTeamStanding::playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn)
+    {
+        if (!player)
+            return;
+        TeamDeathmatch::playerStartsControllingPawn(player,pawn);
+        
+        this->timeToAct_[player] = timeRemaining + 3.0f + respawnDelay;//reset timer
+        this->playerDelayTime_[player] = respawnDelay;
+        
+        std::map<PlayerInfo*, Player>::iterator it = this->players_.find(player);
+        if (it != this->players_.end())
+        {
+            if (it->first->getClientID()== CLIENTID_UNKNOWN)
+                return;
+            const std::string& message = ""; // resets Camper-Warning-message
+            this->gtinfo_->sendFadingMessage(message,it->first->getClientID());
+        }  
+    }
+
+    void LastTeamStanding::tick(float dt)
+    {
+        SUPER(LastTeamStanding, tick, dt);
+        if(this->hasStarted()&&(!this->hasEnded()))
+        {
+            if ( this->hasStarted()&&(teamsAlive<=1) )//last team remaining -> game will end
+            {
+                this->end();
+            }
+            for (std::map<PlayerInfo*, float>::iterator it = this->timeToAct_.begin(); it != this->timeToAct_.end(); ++it)
+            {   
+                if (playerGetLives(it->first) <= 0)//Players without lives shouldn't be affected by time.
+                    continue;     
+                it->second -= dt;//Decreases punishment time.
+                if (!inGame_[it->first])//Manages respawn delay - player is forced to respawn after the delaytime is used up. 
+                {
+                    playerDelayTime_[it->first] -= dt;
+                    if (playerDelayTime_[it->first] <= 0)
+                    this->inGame_[it->first] = true;
+
+                    if (it->first->getClientID()== CLIENTID_UNKNOWN)
+                        continue;
+                    int output = 1 + playerDelayTime_[it->first];
+                    const std::string& message = "Respawn in " +multi_cast<std::string>(output)+ " seconds." ;//Countdown
+                    this->gtinfo_->sendFadingMessage(message,it->first->getClientID());
+                }
+                else if (it->second < 0.0f)
+                {
+                    it->second = timeRemaining + 3.0f;//reset punishment-timer
+                    if (playerGetLives(it->first) > 0)
+                    {
+                        this->punishPlayer(it->first);
+                        if (it->first->getClientID() == CLIENTID_UNKNOWN)
+                            return;
+                        const std::string& message = ""; // resets Camper-Warning-message
+                        this->gtinfo_->sendFadingMessage(message, it->first->getClientID());
+                    }
+                }
+                else if (it->second < timeRemaining/5)//Warning message
+                {
+                    if (it->first->getClientID()== CLIENTID_UNKNOWN)
+                        continue;
+                    const std::string& message = "Camper Warning! Don't forget to shoot.";
+                    this->gtinfo_->sendFadingMessage(message, it->first->getClientID());
+                }
+            }
+        }
+    }
+
+    void LastTeamStanding::end()//TODO: Send the message to the whole team
+    {
+        Gametype::end();
+        int party = -1;
+        //find a player who survived
+        for (std::map<PlayerInfo*, int>::iterator it = this->playerLives_.begin(); it != this->playerLives_.end(); ++it)
+        {
+            if (it->first->getClientID() == CLIENTID_UNKNOWN)
+                continue;
+
+            if (it->second > 0)//a player that is alive
+            {
+                //which party has survived?
+                std::map<PlayerInfo*, int>::iterator it2 = this->teamnumbers_.find(it->first);
+                if (it2 != this->teamnumbers_.end())
+                {
+                    party = it2->second;
+                }
+                //if (party < 0) return; //if search failed
+                //victory message to all team members, loose message to everyone else
+                for (std::map<PlayerInfo*, int>::iterator it3 = this->teamnumbers_.begin(); it3 != this->teamnumbers_.end(); ++it3)
+                {
+                    if (it3->first->getClientID() == CLIENTID_UNKNOWN)
+                        continue;
+                    if (it3->second == party)
+                        {this->gtinfo_->sendAnnounceMessage("You have won the match!", it3->first->getClientID());}
+                    else
+                        {this->gtinfo_->sendAnnounceMessage("You have lost the match!", it3->first->getClientID());}
+                }
+                return;
+            }
+        }
+    }
+
+
+    int LastTeamStanding::getMinLives()
+    {
+        int min = lives;
+        for (std::map<PlayerInfo*, int>::iterator it = this->playerLives_.begin(); it != this->playerLives_.end(); ++it)
+        {
+            if (it->second <= 0)
+                continue;
+            if (it->second < lives)
+                min = it->second;
+        }
+        return min;
+    }
+
+    void LastTeamStanding::punishPlayer(PlayerInfo* player)
+    {
+        if(!player)
+            return;
+        if(bNoPunishment)
+            return;
+        std::map<PlayerInfo*, Player>::iterator it = this->players_.find(player);
+        if (it != this->players_.end())
+        {
+            if(!player->getControllableEntity())
+                return;
+            Pawn* pawn = dynamic_cast<Pawn*>(player->getControllableEntity());
+            if(!pawn)
+                return;
+            if(bHardPunishment)
+            {
+                pawn->kill();
+                this->timeToAct_[player] = timeRemaining + 3.0f + respawnDelay;//reset timer
+            }
+            else
+            {
+                float damage = pawn->getMaxHealth()*punishDamageRate*0.5;//TODO: Factor 0.5 is hard coded. Where is the ratio between MaxHealth actually defined?
+                pawn->removeHealth(damage);
+                this->timeToAct_[player] = timeRemaining;//reset timer
+            }
+        }
+    }
+
+    int LastTeamStanding::playerGetLives(PlayerInfo* player)
+    {
+        if (player)
+            return  playerLives_[player];
+        else
+            return 0;
+    }
+    
+    void LastTeamStanding::setConfigValues()
+    {
+        SetConfigValue(lives, 4);
+        SetConfigValue(timeRemaining, 15.0f);
+        SetConfigValue(respawnDelay, 4.0f);
+        SetConfigValue(bNoPunishment, false);
+        SetConfigValue(bHardPunishment, false);
+    }
+}
Index: code/trunk/src/orxonox/gametypes/LastTeamStanding.h
===================================================================
--- code/trunk/src/orxonox/gametypes/LastTeamStanding.h	(revision 8178)
+++ code/trunk/src/orxonox/gametypes/LastTeamStanding.h	(revision 8178)
@@ -0,0 +1,93 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Johannes Ritz
+ *   Co-authors:
+ *      ...
+ *
+ */
+/**
+    @file LastTeamStanding.h
+    @brief Declaration of the Gametype "Last Team Standing".
+*/
+
+#ifndef _LastTeamStanding_H__
+#define _LastTeamStanding_H__
+
+#include "OrxonoxPrereqs.h"
+#include "TeamDeathmatch.h"
+#include <map>
+#include <vector>
+
+//TODO: Hud doesn load; problem with destructor; teams are not assigned properly; 
+
+namespace orxonox
+{
+    class _OrxonoxExport LastTeamStanding : public TeamDeathmatch
+    {
+    /**
+    @brief
+        Last Team Standing is a gametype where each team fights against each other, until one team remains. 
+    @author
+        Johannes Ritz
+    */
+        protected:
+            int lives; //!< Standard amount of lives. Each player starts a game with so many lives.
+            std::map< PlayerInfo*, int > playerLives_; //!< Each player's lives are stored here.
+            std::vector<int> eachTeamsPlayers; //!<Number of players in each team.
+            int teamsAlive; //!< Counter counting teams with more than one player remaining.
+//Data for CamperPunishment
+            float timeRemaining; //!< Each player has a certain time where he or she has to hit an opponent or will be punished.
+            std::map<PlayerInfo*, float> timeToAct_; //!< Each player's time till she/he will be punished is stored here.
+            bool bNoPunishment; //!< Config value to switch off Punishment function if it is set to true.
+            bool bHardPunishment; //!< Switches between damage and death as punishment.
+            float punishDamageRate; //!< Makes Damage adjustable.
+//Data for RespawnDelay
+            float respawnDelay; //!<Time in seconds when a player will respawn after death.
+            std::map<PlayerInfo*, float> playerDelayTime_; //!< Stores each Player's delay time.
+            std::map<PlayerInfo*, bool> inGame_; //!< Indicates each Player's state.
+
+            virtual void spawnDeadPlayersIfRequested(); //!< Prevents dead players to respawn.
+            virtual int getMinLives(); //!< Returns minimum of each player's lives; players with 0 lives are skipped;
+
+        public:
+            LastTeamStanding(BaseObject* creator); //!< Default Constructor.
+            virtual ~LastTeamStanding(); //!< Default Destructor.
+
+            virtual void playerEntered(PlayerInfo* player); //!< Initializes values.
+            virtual bool playerLeft(PlayerInfo* player); //!< Manages all local variables.
+
+            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0); //!< Manages each player's lost lives.
+            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = 0); //!< If a player shoot's an opponent, his punishment countdown will be resetted.
+            virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn); //!< Resets punishment time and respawn delay.
+            void tick (float dt); //!< used to end the game
+            virtual void end(); //!< Sends an end message.
+            void punishPlayer(PlayerInfo* player); //!< Function in order to kill a player. Punishment for hiding longer than "timeRemaining".
+            int playerGetLives(PlayerInfo* player); //!< getFunction for the map "playerLives_".
+            inline int getNumTeamsAlive() const//!< Returns the number of players that are still alive.
+            {return this->teamsAlive;}
+            void setConfigValues(); //!< Makes values configurable.
+
+    };
+}
+
+#endif /* _LastTeamStanding_H__ */
