Represents a decompresser that can decompress files in a FAR3 archive. If you have some kind of need to understand this code, go to: http://wiki.niotso.org/RefPack The code in this class was ported from DBPF4J: http://sc4dbpf4j.cvs.sourceforge.net/viewvc/sc4dbpf4j/DBPF4J/
Ejemplo n.º 1
0
        private Stream Decompress(FAR3Entry Entry)
        {
            m_Reader.ReadBytes(9);
            uint   CompressedSize = m_Reader.ReadUInt32();
            ushort CompressionID  = m_Reader.ReadUShort();

            if (CompressionID == 0xFB10)
            {
                byte[] Dummy            = m_Reader.ReadBytes(3);
                uint   DecompressedSize = (uint)((Dummy[0] << 0x10) | (Dummy[1] << 0x08) | +Dummy[2]);

                Decompresser Dec = new Decompresser();
                Dec.CompressedSize   = CompressedSize;
                Dec.DecompressedSize = DecompressedSize;

                byte[] DecompressedData = Dec.Decompress(m_Reader.ReadBytes((int)CompressedSize));

                MemoryStream MemStream = new MemoryStream(DecompressedData);
                MemStream.Seek(0, SeekOrigin.Begin);

                return(MemStream);
            }
            else
            {
                m_Reader.Seek(m_Reader.Position - 15);
                return(new MemoryStream(m_Reader.ReadBytes((int)Entry.DecompressedDataSize)));
            }
        }
Ejemplo n.º 2
0
        private Stream Decompress(FAR3Entry Entry)
        {
            m_Reader.ReadBytes(9);
            uint CompressedSize = m_Reader.ReadUInt32();
            ushort CompressionID = m_Reader.ReadUShort();

            if (CompressionID == 0xFB10)
            {
                byte[] Dummy = m_Reader.ReadBytes(3);
                uint DecompressedSize = (uint)((Dummy[0] << 0x10) | (Dummy[1] << 0x08) | +Dummy[2]);

                Decompresser Dec = new Decompresser();
                Dec.CompressedSize = CompressedSize;
                Dec.DecompressedSize = DecompressedSize;

                byte[] DecompressedData = Dec.Decompress(m_Reader.ReadBytes((int)CompressedSize));

                MemoryStream MemStream = new MemoryStream(DecompressedData);
                MemStream.Seek(0, SeekOrigin.Begin);

                return MemStream;
            }
            else
            {
                m_Reader.Seek(m_Reader.Position - 15);
                return new MemoryStream(m_Reader.ReadBytes((int)Entry.DecompressedDataSize));
            }
        }