예제 #1
0
        private void ReadCompressedData(BinaryReader br, DataOffsetStruct dos)
        {
            var inData = new byte[dos.LengthCompressed];

            if (br.Read(inData, 0, inData.Length) != inData.Length)
            {
                throw new Exception($"Failed to read compressed data for texture: 0x{dos.Hash:X8}");
            }

            var outData = Compression.Decompress(inData).ToArray();

            using (var dcr = new BinaryReader(new MemoryStream(outData)))
            {
                // Seek to TextureInfo
                dcr.BaseStream.Seek(-156, SeekOrigin.End);
                var texture = ReadTexture(dcr);

                // Seek to D3DFormat
                dcr.BaseStream.Seek(-12, SeekOrigin.End);
                texture.Format = dcr.ReadUInt32();

                // Seek to data
                dcr.BaseStream.Seek(0, SeekOrigin.Begin);
                if (dcr.BaseStream.Read(texture.Data, 0, texture.Data.Length) !=
                    texture.Data.Length)
                {
                    throw new Exception(
                              $"Failed to read data for texture 0x{texture.TexHash:X8} ({texture.Name})");
                }
            }
        }
예제 #2
0
파일: TpkCore.cs 프로젝트: NFSTools/mwtc
        public override void Read(BinaryReader br)
        {
            int length = (int)(_header.Length / 0x18);

            for (int i = 0; i < length; i++)
            {
                DataOffsetStruct dos = new DataOffsetStruct();
                dos.Hash        = br.ReadUInt32();
                dos.Offset      = br.ReadUInt32();
                dos.Length      = br.ReadUInt32();
                dos.RealLength  = br.ReadUInt32();
                dos.Flags       = br.ReadInt32();
                dos.Padding     = br.ReadInt32();
                _data[dos.Hash] = dos;
            }
        }
예제 #3
0
파일: TpkCore.cs 프로젝트: NFSTools/mwtc
        protected override void WriteData(BinaryWriter bw)
        {
            ArrayList list = new ArrayList(_data.Count);

            foreach (DictionaryEntry de in _data)
            {
                list.Add((de.Value as DataOffsetStruct).Hash);
            }
            list.Sort();

            foreach (uint hash in list)
            {
                DataOffsetStruct dos = _data[hash] as DataOffsetStruct;
                bw.Write(dos.Hash);
                bw.Write(dos.Offset);
                bw.Write(dos.Length);
                bw.Write(dos.RealLength);
                bw.Write(dos.Flags);
                bw.Write(dos.Padding);
            }
        }