Index: code/branches/lastmanstanding/data/levels/gametype_lastmanstanding.oxw
===================================================================
--- code/branches/lastmanstanding/data/levels/gametype_lastmanstanding.oxw	(revision 7604)
+++ code/branches/lastmanstanding/data/levels/gametype_lastmanstanding.oxw	(revision 7605)
@@ -6,4 +6,5 @@
   include("templates/spaceship_assff.oxt")
   include("templates/spaceship_pirate.oxt")
+  include("templates/pickup_representation_templates.oxt")
 ?>
 
@@ -21,5 +22,10 @@
     skybox       = "Orxonox/skypanoramagen1"
   >
-<!----- Spawnpoints ----->
+
+    <?lua
+      include("includes/pickups.oxi")
+    ?>
+
+<!----- Spawnpoints 
     <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 team=0 position="-1150,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
@@ -28,5 +34,5 @@
     <SpawnPoint team=0 position="700,0,-700" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
     <SpawnPoint team=0 position="0,0,-1150" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
-    <SpawnPoint team=0 position="0,0,1150" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+    <SpawnPoint team=0 position="0,0,1150" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff /> ----->
 <Bot />
 
@@ -41,9 +47,20 @@
       </collisionShapes>
     </StaticEntity>
-<!--StaticEntity position="0,0,0" collisionType=static>
-      <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----------------- -->
@@ -54,5 +71,4 @@
     y = math.sin(i/max*6)*750
     z = math.cos(i/max*6)*750
-    x = i*10
     ?>
 <?lua
@@ -62,6 +78,5 @@
 ?>
 
-
-    <!--SpawnPoint team=0 position="<?lua print(y*1.4) ?>,0,<?lua print(z*1.4) ?>" spawnclass=SpaceShip pawndesign=spaceshipassff /-->
+    <SpawnPoint team=0 position="<?lua print(y*1.4+z*0.2) ?>,0,<?lua print(z*1.4-y*0.2) ?>" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
 
     <StaticEntity position="<?lua print(y) ?>,0,<?lua print(z) ?>" scale=<?lua print(j * 2) ?> collisionType=static >
@@ -83,5 +98,5 @@
         <BoxCollisionShape    halfExtents="45,100,45" position = "0,0,0" />
       </collisionShapes>
-    </StaticEntity>#
+    </StaticEntity>
 
     <StaticEntity position="<?lua print(y) ?>,200,<?lua print(z) ?>" scale=<?lua print(j * 2) ?> collisionType=static >
@@ -116,5 +131,4 @@
 
 <!-- ---------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>
@@ -128,5 +142,4 @@
 
 
-
 <?lua
 end
@@ -134,7 +147,4 @@
 <?lua end ?>
 
-
-
-
   </Scene>
 </Level>
Index: code/branches/lastmanstanding/src/orxonox/gametypes/LastManStanding.cc
===================================================================
--- code/branches/lastmanstanding/src/orxonox/gametypes/LastManStanding.cc	(revision 7604)
+++ code/branches/lastmanstanding/src/orxonox/gametypes/LastManStanding.cc	(revision 7605)
@@ -35,5 +35,5 @@
 #include "core/ConfigValueIncludes.h"
 #include "util/Convert.h"
-//TODO: respawn delay
+
 namespace orxonox
 {
@@ -48,4 +48,7 @@
         this->timeRemaining=15.0f;
         this->respawnDelay=4.0f;
+        this->noPunishment=false;
+        this->hardPunishment=false;
+        this->punishDamageRate=0.4f;
         this->setHUDTemplate("LastmanstandingHUD");
     }
@@ -84,4 +87,6 @@
         SetConfigValue(timeRemaining, 15.0f);
         SetConfigValue(respawnDelay, 4.0f);
+        SetConfigValue(noPunishment, false);
+        SetConfigValue(hardPunishment, false);
     }
 
@@ -91,4 +96,13 @@
         {
             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 = ""; // set blank - erases Camper-Warning-message
+                this->gtinfo_->sendFadingMessage(message,it->first->getClientID());
+            }    
         }
         return true;
@@ -111,4 +125,17 @@
     }
 
+    int LastManStanding::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 LastManStanding::end()
     {
@@ -127,4 +154,5 @@
     }
 
+
     void LastManStanding::playerEntered(PlayerInfo* player)
     {
@@ -132,6 +160,8 @@
             return;
         Deathmatch::playerEntered(player);
-
-        playerLives_[player]=lives;
+        if (playersAlive<=1)
+            playerLives_[player]=lives;
+        else
+            playerLives_[player]=getMinLives();//new players only get minimum of lives
         this->playersAlive++;
         this->timeToAct_[player]=timeRemaining;
@@ -154,5 +184,7 @@
         {
             this->playersAlive--;
-            //this->playerLives_[player].erase (player); not necessary?
+            this->playerLives_.erase (player);
+            this->playerDelayTime_.erase (player);
+            this->inGame_.erase (player);
             //Update: EachPlayer's "Players in Game"-HUD
             for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
@@ -207,7 +239,9 @@
     }
 
-    void LastManStanding::killPlayer(PlayerInfo* player)
+    void LastManStanding::punishPlayer(PlayerInfo* player)
     {
         if(!player)
+            return;
+        if(noPunishment)
             return;
         std::map<PlayerInfo*, Player>::iterator it = this->players_.find(player);
@@ -215,13 +249,22 @@
         {
             if(!player->getControllableEntity())
-                {return;}
+                return;
             Pawn* pawn = dynamic_cast<Pawn*>(player->getControllableEntity());
             if(!pawn)
-                {return;}
-            pawn->kill();
-            this->timeToAct_[player]=timeRemaining+3.0f+respawnDelay;//reset timer
-        }
-    }
-    
+                return;
+            if(hardPunishment)
+            {
+                pawn->kill();
+                this->timeToAct_[player]=timeRemaining+3.0f+respawnDelay;//reset timer
+            }
+            /*else
+            {
+                float damage=pawn->getMaxHealth()*punishDamageRate*0.5;
+                pawn->removeHealth(damage);
+                this->timeToAct_[player]=timeRemaining;//reset timer
+            }*/
+        }
+    }
+
     void LastManStanding::tick(float dt)
     {
@@ -231,5 +274,5 @@
             if ((this->hasStarted()&&(playersAlive<=1)))//last player remaining
             {
-            this->end();
+                this->end();
             }
             for (std::map<PlayerInfo*, float>::iterator it = this->timeToAct_.begin(); it != this->timeToAct_.end(); ++it)
@@ -243,4 +286,10 @@
                     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)
@@ -248,7 +297,7 @@
                     it->second=timeRemaining+3.0f;//reset punishment-timer
                     if (playerGetLives(it->first)>0)
-                        this->killPlayer(it->first);
-                }
-                else if (it->second<timeRemaining/6)//Warning message
+                        this->punishPlayer(it->first);
+                }
+                else if (it->second<timeRemaining/5)//Warning message
                 {
                     if (it->first->getClientID()== CLIENTID_UNKNOWN)
Index: code/branches/lastmanstanding/src/orxonox/gametypes/LastManStanding.h
===================================================================
--- code/branches/lastmanstanding/src/orxonox/gametypes/LastManStanding.h	(revision 7604)
+++ code/branches/lastmanstanding/src/orxonox/gametypes/LastManStanding.h	(revision 7605)
@@ -58,5 +58,9 @@
             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
+            bool noPunishment;
+            bool hardPunishment;
+            float punishDamageRate;
+            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:
@@ -75,5 +79,5 @@
 
             const int playerGetLives(PlayerInfo* player); //!< getFunction for the map "playerLives_".
-            void killPlayer(PlayerInfo* player); //!< Function in order to kill a player. Punishment for hiding longer than "timeRemaining".
+            void punishPlayer(PlayerInfo* player); //!< Function in order to kill a player. Punishment for hiding longer than "timeRemaining".
             void tick (float dt); //!< used to end the game
     };
