private static void UpdateUDKOffsets(ExportEntry export, int newDataOffset) { if (export.IsDefaultObject) { return; //this is not actually instance of that class } //update offsets for pcc-stored mips in Textures if (export.IsTexture()) { int baseOffset = newDataOffset + export.propsEnd(); MemoryStream binData = new MemoryStream(export.GetBinaryData()); binData.Skip(8); int thumbnailSize = binData.ReadInt32(); binData.WriteInt32(baseOffset + (int)binData.Position + 4); binData.Skip(thumbnailSize); for (int i = binData.ReadInt32(); i > 0 && binData.Position < binData.Length; i--) { var storageFlags = (StorageFlags)binData.ReadInt32(); if (!storageFlags.HasFlag(StorageFlags.externalFile)) //pcc-stored { int uncompressedSize = binData.ReadInt32(); int compressedSize = binData.ReadInt32(); binData.WriteInt32(baseOffset + (int)binData.Position + 4); //update offset binData.Seek((storageFlags == StorageFlags.noFlags ? uncompressedSize : compressedSize) + 8, SeekOrigin.Current); //skip texture and width + height values } else { binData.Seek(20, SeekOrigin.Current);//skip whole rest of mip definition } } binData.Skip(40); binData.WriteInt32(baseOffset + (int)binData.Position + 4); export.WriteBinary(binData.ToArray()); } }