Index: /branches/network/src/lib/network/network_game_manager.cc
===================================================================
--- /branches/network/src/lib/network/network_game_manager.cc	(revision 6936)
+++ /branches/network/src/lib/network/network_game_manager.cc	(revision 6937)
@@ -576,4 +576,5 @@
     {
       assert((*it)->isA(CL_WORLD_ENTITY));
+      dynamic_cast<WorldEntity*>(*it)->leaveWorld();
       dynamic_cast<WorldEntity*>(*it)->toList(OM_DEAD);
       break;
Index: /branches/network/src/lib/network/synchronizeable.h
===================================================================
--- /branches/network/src/lib/network/synchronizeable.h	(revision 6936)
+++ /branches/network/src/lib/network/synchronizeable.h	(revision 6937)
@@ -34,10 +34,12 @@
   NWT_SS_VELZ,
   NWT_SS_PL_SYNC,
-  
+  NWT_SS_CO_N,
+  NWT_SS_CO_CLID,
+
   NWT_HS_HOST_ID,
   NWT_HS_NGM_ID,
-  
+
   NWT_PL_FLAGS,
-  
+
   NWT_PN_BO_WRITESTATE,
   NWT_PN_PARENTMODE,
@@ -49,5 +51,5 @@
   NWT_PN_ROTZ,
   NWT_PN_ROTV,
-  
+
   NWT_PN_FLAGS,
   NWT_PN_SCOORX,
@@ -58,27 +60,27 @@
   NWT_PN_SROTZ,
   NWT_PN_SROTV,
-  
+
   NWT_BO_NAME,
-  
+
   NWT_WE_PN_WRITESTATE,
   NWT_WE_PN_MODELFILENAME,
   NWT_WE_PN_SCALING,
-  
+
   NWT_GT_WE_STATE,
-  
+
   NWT_SB_WE_STATE,
   NWT_SB_SIZE,
   NWT_SB_TEXTURENAME,
-  
+
   NWT_TER_WE_STATE,
-  
+
   NWT_PU_WE_STATE,
-  
+
   NWT_TPU_WE_STATE,
-  
+
   NWT_LPU_WE_STATE,
-  
+
   NWT_WPU_WE_STATE,
-  
+
   NWT_PPU_WE_STATE,
   NWT_PPU_TYPE,
@@ -133,5 +135,5 @@
  *  delete[] textureName;
  *  textureName = NULL;
- *  SYNCHELP_READ_STRINGM( texturename );      //this will call new char[strlen()+1] 
+ *  SYNCHELP_READ_STRINGM( texturename );      //this will call new char[strlen()+1]
  *
  * Example 2:
@@ -142,5 +144,5 @@
  *
  */
- 
+
 #define SYNCHELP_WRITE_DEBUG(n) {\
   __synchelp_write_n = Converter::intToByteArray( n, data+__synchelp_write_i, maxLength-__synchelp_write_i ); \
Index: /branches/network/src/world_entities/playable.cc
===================================================================
--- /branches/network/src/world_entities/playable.cc	(revision 6936)
+++ /branches/network/src/world_entities/playable.cc	(revision 6937)
@@ -101,5 +101,5 @@
 void Playable::collidesWith(WorldEntity* entity, const Vector& location)
 {
-  if (entity->isA(CL_PROJECTILE))
+  if (entity->isA(CL_PROJECTILE) && !State::isOnline() )
     this->decreaseHealth(entity->getHealth());
 
@@ -253,11 +253,11 @@
 {
   SYNCHELP_READ_BEGIN();
-  
+
   byte flags;
-  
+
   SYNCHELP_READ_BYTE( flags, NWT_PL_FLAGS );
-  
+
   bFire = (flags & FLAGS_bFire) != 0;
-  
+
   return SYNCHELP_READ_N;
 }
@@ -267,13 +267,13 @@
   SYNCHELP_WRITE_BEGIN();
   byte flags = 0;
-  
+
   if ( bFire )
     flags |= FLAGS_bFire;
-  
+
 
   SYNCHELP_WRITE_BYTE( flags, NWT_PL_FLAGS );
   oldFlags = flags;
 
-  
+
   return SYNCHELP_WRITE_N;
 }
@@ -282,8 +282,8 @@
 {
   byte flags = 0;
-  
+
   if ( bFire )
     flags |= FLAGS_bFire;
-  
+
   return flags!=oldFlags;
 }
Index: /branches/network/src/world_entities/space_ships/space_ship.cc
===================================================================
--- /branches/network/src/world_entities/space_ships/space_ship.cc	(revision 6936)
+++ /branches/network/src/world_entities/space_ships/space_ship.cc	(revision 6937)
@@ -96,5 +96,15 @@
   {
     //this->loadModel("models/ships/reap_#.obj");
-    this->loadModel( "models/ships/fighter.obj" );
+    ///HACK this is only for network multiplayer games.
+    if( this->getOwner()%2 == 0)
+    {
+      this->loadModel("models/ships/reap_#.obj");
+      this->toList(OM_GROUP_00);
+    }
+    else
+    {
+      this->loadModel( "models/ships/fighter.obj" );
+      this->toList(OM_GROUP_01);
+    }
   }
 
@@ -275,9 +285,20 @@
 {
   Playable::collidesWith(entity, location);
+
+
   if (entity->isA(CL_TURRET_POWER_UP) && entity != ref)
   {
     this->ADDWEAPON();
     ref = entity;
-    }
+  }
+
+  if( entity->isA(CL_PROJECTILE) && entity != ref)
+  {
+    if ( isServer() )
+    {
+      networkCollisionList.push_back( entity->getHealth() );
+      doCollideNetwork( entity->getHealth() );
+    }
+  }
 //  PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getClassName(), entity->getClassName(), location.x, location.y, location.z);
 }
@@ -323,5 +344,5 @@
     this->calculateVelocity(time);
 
-  
+
   Vector move = velocity*time;
 
@@ -528,4 +549,5 @@
 #define DATA_velocity    5
 #define DATA_playables   6
+#define DATA_collision   7
 
 int SpaceShip::writeBytes( const byte * data, int length, int sender )
@@ -563,5 +585,5 @@
         bRollL = (flags & MASK_bRollL) != 0;
         bRollR = (flags & MASK_bRollR) != 0;
-        
+
       }
       else
@@ -605,11 +627,11 @@
         SYNCHELP_READ_FLOAT( velocity.y, NWT_SS_VELY );
         SYNCHELP_READ_FLOAT( velocity.z, NWT_SS_VELZ );
-      }      
+      }
       else
         assert(false);
-      
+
       continue;
     }
-    
+
     if ( b == DATA_playables )
     {
@@ -620,4 +642,17 @@
       else
         assert(false);
+    }
+
+    if ( b == DATA_collision )
+    {
+      int n;
+      float energy;
+      SYNCHELP_READ_INT( n, NWT_SS_CO_N );
+
+      for ( int i = 0; i<n; i++ )
+      {
+        SYNCHELP_READ_FLOAT( energy, NWT_SS_CO_CLID );
+        doCollideNetwork( energy );
+      }
     }
   }
@@ -725,5 +760,5 @@
       SYNCHELP_WRITE_FLOAT( velocity.z, NWT_SS_VELZ );
     }
-    
+
     if ( Playable::needsReadSync() )
     {
@@ -735,10 +770,32 @@
 
   }
-  
+
   if ( !sentSomething )
+  {
     *reciever = 0;
 
+    if ( networkCollisionList.size()>0 )
+    {
+      SYNCHELP_WRITE_BYTE( DATA_collision, NWT_SS_B );
+
+      SYNCHELP_WRITE_INT( networkCollisionList.size(), NWT_SS_CO_N );
+
+      for ( std::list<float>::iterator it = networkCollisionList.begin(); it!=networkCollisionList.end(); it++ )
+      {
+        SYNCHELP_WRITE_FLOAT( *it, NWT_SS_CO_CLID );
+      }
+
+      networkCollisionList.clear();
+    }
+  }
+
   return SYNCHELP_WRITE_N;
 }
 
-
+void SpaceShip::doCollideNetwork( float energy )
+{
+  this->decreaseHealth( energy );
+}
+
+
+
Index: /branches/network/src/world_entities/space_ships/space_ship.h
===================================================================
--- /branches/network/src/world_entities/space_ships/space_ship.h	(revision 6936)
+++ /branches/network/src/world_entities/space_ships/space_ship.h	(revision 6937)
@@ -47,4 +47,6 @@
     void calculateVelocity(float time);
 
+    void doCollideNetwork( float energy );
+
     // !! temporary !!
     void ADDWEAPON();
@@ -84,4 +86,6 @@
     ParticleEmitter*      burstEmitter;
     ParticleSystem*       burstSystem;
+
+    std::list<float>        networkCollisionList;
 };
 
Index: /branches/network/src/world_entities/world_entity.cc
===================================================================
--- /branches/network/src/world_entities/world_entity.cc	(revision 6936)
+++ /branches/network/src/world_entities/world_entity.cc	(revision 6937)
@@ -280,12 +280,7 @@
 
 /**
- *  this method is called by the world if the WorldEntity leaves valid gamespace
- *
- * For free entities this means it left the Track boundaries. With bound entities it means its Location adresses a
- * place that is not in the world anymore. In both cases you might have to take extreme measures (a.k.a. call destroy).
- *
- * NOT YET IMPLEMENTED
- */
-void WorldEntity::leftWorld ()
+ *  this method is called by the world if the WorldEntity leaves the game
+ */
+void WorldEntity::leaveWorld ()
 {}
 
Index: /branches/network/src/world_entities/world_entity.h
===================================================================
--- /branches/network/src/world_entities/world_entity.h	(revision 6936)
+++ /branches/network/src/world_entities/world_entity.h	(revision 6937)
@@ -54,5 +54,5 @@
 
   virtual void postSpawn ();
-  virtual void leftWorld ();
+  virtual void leaveWorld ();
 
   virtual void tick (float time);
