Index: trunk/src/util/multiplayer_team_deathmatch.cc
===================================================================
--- trunk/src/util/multiplayer_team_deathmatch.cc	(revision 7037)
+++ trunk/src/util/multiplayer_team_deathmatch.cc	(revision 7039)
@@ -20,4 +20,7 @@
 #include "factory.h"
 
+#include "render2D/billboard.h"
+#include "state.h"
+
 
 using namespace std;
@@ -37,4 +40,6 @@
   this->bLocalPlayerDead = false;
   this->deathTimeout = 10.0f;     // 5 seconds
+  this->deathScreen = new Billboard();
+  this->deathScreen->setSize(State::getResX(), State::getResY());
 
   if( root != NULL)
@@ -59,5 +64,18 @@
   LoadParam(root, "max-kills", this, MultiplayerTeamDeathmatch, setMaxKills)
       .describe("sets the maximal kills for winning condition");
+
+  LoadParam(root, "death-screen-image", this, MultiplayerTeamDeathmatch, setDeathScreen)
+      .describe("sets the death screen image");
+
 }
+
+
+
+void MultiplayerTeamDeathmatch::setDeathScreen(const char* imageName)
+{
+  if( this->deathScreen)
+    this->deathScreen->setTexture(imageName);
+}
+
 
 
@@ -67,5 +85,7 @@
  */
 void MultiplayerTeamDeathmatch::onPlayerSpawn(Player* player)
-{}
+{
+  this->bLocalPlayerDead = true;
+}
 
 
@@ -75,5 +95,8 @@
  */
 void MultiplayerTeamDeathmatch::onPlayerDeath(Player* player)
-{}
+{
+  this->localPlayer = player;
+  this->bLocalPlayerDead = true;
+}
 
 
@@ -84,5 +107,19 @@
 void MultiplayerTeamDeathmatch::tick(float dt)
 {
+  this->checkGameRules();
 
+  // is the local player dead and inactive
+  if( unlikely(this->bLocalPlayerDead))
+  {
+    this->timeout += dt;
+
+    // long enough dead?
+    if( dt >= this->deathTimeout)
+    {
+      this->timeout = 0.0f;
+
+      // respawn
+    }
+  }
 }
 
@@ -92,5 +129,10 @@
  */
 void MultiplayerTeamDeathmatch::draw()
-{}
+{
+  if( unlikely( this->bLocalPlayerDead))
+  {
+
+  }
+}
 
 
@@ -99,5 +141,16 @@
  */
 void MultiplayerTeamDeathmatch::checkGameRules()
-{}
+{
+  //
+  // check for max killing count
+  if( this->teamAKills >= this->maxKills)
+  {
+    // team A winns
+  }
+  else if( this->teamBKills >= this->maxKills)
+  {
+    // team B winns
+  }
+}
 
 
Index: trunk/src/util/multiplayer_team_deathmatch.h
===================================================================
--- trunk/src/util/multiplayer_team_deathmatch.h	(revision 7037)
+++ trunk/src/util/multiplayer_team_deathmatch.h	(revision 7039)
@@ -16,4 +16,5 @@
 class ObjectManager;
 class Player;
+class Billboard;
 
 
@@ -37,4 +38,5 @@
     inline void setDeathPenaltyTimeout(float time) { this->deathTimeout = time; }
     inline void setMaxKills(int kills) { this->maxKills = kills; }
+    void setDeathScreen(const char* imageName);
 
   protected:
@@ -44,8 +46,11 @@
     bool               bLocalPlayerDead;           //!< true if the local player is dead
     float              deathTimeout;               //!< timeout a player cannot play if he/she dies
+    float              timeout;                    //!< time counted if player dead
     int                maxKills;                   //!< max kills for winning condition
 
     int                teamAKills;                 //!< kills of team A
     int                teamBKills;                 //!< kills of team B
+
+    Billboard*         deathScreen;                //!< the death screen
 };
 
Index: trunk/src/util/state.cc
===================================================================
--- trunk/src/util/state.cc	(revision 7037)
+++ trunk/src/util/state.cc	(revision 7039)
@@ -44,4 +44,5 @@
 
 StoryEntity* State::storyEntity = NULL;
+GameRules* State::gameRules = NULL;
 
 Player* State::player = NULL;
Index: trunk/src/util/state.h
===================================================================
--- trunk/src/util/state.h	(revision 7037)
+++ trunk/src/util/state.h	(revision 7039)
@@ -17,4 +17,5 @@
 class StoryEntity;
 class ObjectManager;
+class GameRules;
 
 
@@ -68,4 +69,9 @@
   static inline StoryEntity* getCurrentStoryEntity() { return State::storyEntity; };
 
+  /** @param gameRules sets the current GameRules */
+  static inline void setGameRules(GameRules* gameRules) { State::gameRules = gameRules; }
+  /** @returns the GameRules reference*/
+  static inline GameRules* getGameRules() { return State::gameRules; }
+
   //////////////
   /// PLAYER ///
@@ -106,4 +112,5 @@
   static ObjectManager*         objectManager;      //!< A reference to the current ObjectManager
   static StoryEntity*           storyEntity;        //!< A reference to the current StoryEntity played
+  static GameRules*             gameRules;          //!< A reference to the GameRules
   static Player*                player;             //!< A reference to the Player
 
