anchor.diff:  
   //Saves the game in TKMemoryStream
   procedure TKMGame.SaveGameToStream(aTimestamp: TDateTime; aHeaderStream, aBodyStream: TKMemoryStream);
  +const
  +  //@Rey: Please add comment explaining how the 20mb value was picked
  +  EXTRA_ALLOC_FOR_SAVE = 20 * 1024 * 1024; // Empirical value
   var
     gameInfo: TKMGameInfo;
     I, netIndex: Integer;
  
positive.code: begin
    gameInfo := TKMGameInfo.Create;
  
    // Allocate memory for save stream, could save up to 25% of save time
    if fLastSaveStreamSize = 0 then
      sizeToAllocate := gTerrain.MapX*gTerrain.MapY*32 + 20*1024*1024 // Allocate a lot first time
    else
      sizeToAllocate := Round(fLastSaveStreamSize*1.5); // Assume save didn't grow more then 1.5 times
    
    aBodyStream.SetSize(MakePOT(sizeToAllocate));
  
    if aHeaderStream = nil then
      aHeaderStream := aBodyStream; //Write into the body stream, since we don't use compression
  
negative.code: 
    // Trim stream size to current position
    aBodyStream.TrimToPosition;
  
    // Remember how much space did we use, so next time we have a good estimate
    fLastSaveStreamSize := aBodyStream.Size;
  
    //If we want stuff like the MessageStack and screen center to be stored in multiplayer saves,
    //we must send those "commands" through the GIP so all players know about them and they're in sync.
  