anchor.diff:  
         MapName:string;
   
  -      fPlayersList:TStringList; //Stores IP addresses for now
  +      fPlayers:TKMPlayersList;
   
         JoinTick:cardinal;
         fOnJoinSucc:TNotifyEvent;
  
positive.code:                       fNetwork.OnRecieveKMPacket := PacketRecieve;
                        PacketSend(fServerAddress, mk_VerifyJoin);
                        fOnJoinSucc(Self);
                        if Assigned(fOnPlayersList) then fOnPlayersList(fPlayersList.Text);
                      end;
      mk_Timeout:     begin
                        JoinTick := 0;
  
negative.code: //Send whole game setup info at once, making sure there are no misunderstandings,
  //especially about random values (e.g. start locations)
  procedure TKMNetworking.StartGame;
  var Msg:TKMemoryStream;
  begin
    Assert(fLANPlayerKind = lpk_Host, 'Only host can start the game');
    Assert(fPlayers.AllReady, 'Not everyone is ready to start');
  
    Msg := TKMemoryStream.Create;
    EncodeGameSetup(Msg);
    //fPlayers.PacketSend(mk_StartGame, Msg);
    Msg.Free;
  
    //Now we will await confirmation messages from other players and start the game
  end;
  
  
  //Encode whole set of game settings into a stream (including players list)
  procedure TKMNetworking.EncodeGameSetup(aStream:TKMemoryStream);
  begin
    aStream.Write(MapName);
    //aStream.Write(AllianceMode); //Fixed / changeable
    //aStream.Write(StartupConditions);
    //aStream.Write(WinConditions);
    //aStream.Write(DefeatConditions);
    fPlayers.EncodeGameSetup(aStream);
  end;
  
  
  procedure TKMNetworking.PostMessage(aText:string);
  begin
    fPlayers.PacketSend(mk_Text, fPlayers.Myself + ': ' + aText);
    fOnTextMessage(fPlayers.Myself + ': ' + aText);
  end;
  
  
  