public void replaceTlkwithFile(ME1Package pcc, int Index) { /* converts Huffmann Tree to binary form */ byte[] treeBuffer = ConvertHuffmanTreeToBuffer(); List<EncodedString> encodedStrings = new List<EncodedString>(); int i = 0; foreach (var entry in _inputData) { if (entry.Flags == 0) { if (entry.StringID > 0) entry.index = -1; else entry.index = 0; } else { entry.index = i; i++; List<BitArray> binaryData = new List<BitArray>(); int binaryLength = 0; /* for every character in a string, put it's binary code into data array */ foreach (char c in entry.data) { binaryData.Add(_huffmanCodes[c]); binaryLength += _huffmanCodes[c].Count; } byte[] buffer = BitArrayListToByteArray(binaryData, binaryLength); encodedStrings.Add(new EncodedString(entry.data.Length, buffer.Length, buffer)); } } /* get properties from object we're replacing*/ byte[] properties = pcc.Exports[Index].Data.Take(40).ToArray(); MemoryStream m = new MemoryStream(); /* writing properties */ m.Write(properties, 0, 40); m.Seek(0x1C, SeekOrigin.Begin); m.Write(BitConverter.GetBytes(_inputData.Count), 0, 4); m.Seek(0, SeekOrigin.End); /* writing entries */ m.Write(BitConverter.GetBytes(_inputData.Count), 0, 4); foreach (TLKEntry entry in _inputData) { m.Write(BitConverter.GetBytes(entry.StringID), 0, 4); m.Write(BitConverter.GetBytes(entry.Flags), 0, 4); m.Write(BitConverter.GetBytes(entry.index), 0, 4); } /* writing HuffmanTree */ m.Write(treeBuffer, 0, treeBuffer.Length); /* writing data */ m.Write(BitConverter.GetBytes(encodedStrings.Count), 0, 4); foreach (EncodedString enc in encodedStrings) { m.Write(BitConverter.GetBytes(enc.stringLength), 0, 4); m.Write(BitConverter.GetBytes(enc.encodedLength), 0, 4); m.Write(enc.binaryData, 0, enc.encodedLength); } byte[] buff = m.ToArray(); pcc.Exports[Index].Data = buff; pcc.save(pcc.FileName); }