Esempio n. 1
0
        /// <summary>
        /// Unpacks all the files inside the BG file into a folder.
        /// </summary>
        public void Unpack()
        {
            Files.Clear();
            List <int> indices = Header.RealIndices;

            using (BinaryReader reader = new BinaryReader(new FileStream(FilePath, FileMode.Open)))
            {
                int fileCount  = Header.FileCount;
                int lastOffset = 64;
                reader.BaseStream.Seek(64, SeekOrigin.Begin);
                for (int i = 0; i < fileCount; i++)
                {
                    int    endOffset = indices[i] + 64;
                    int    length    = endOffset - lastOffset;
                    byte[] buffer    = reader.ReadBytes(length);
                    string directory = Path.GetDirectoryName(FilePath) + "\\" + Path.GetFileNameWithoutExtension(FilePath);
                    Directory.CreateDirectory(directory);
                    string fileName = directory + "\\" + i + "." + HeaderList.GetExtensionFromBuffer(buffer);
                    using (BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.Create)))
                    {
                        writer.Write(buffer);
                    }
                    Files.Add(HeaderList.GetTypeFromFile(fileName));
                    lastOffset = indices[i] + 64;
                }
            }
        }
Esempio n. 2
0
        private void decompress_Mode(byte[] buffer, byte mode, ushort windowSize)
        {
            CircularBuffer circularBuffer = new CircularBuffer(windowSize);
            string         outputPath     = FilePath + ".OUT";

            using (BinaryWriter writer = new BinaryWriter(new FileStream(outputPath, FileMode.Create)))
            {
                writer.Write(buffer, 0, 1);
                circularBuffer.AddData(new byte[] { buffer[0] });

                for (int i = 1; i < buffer.Length; i++)
                {
                    bool[] flags = GetFlags(buffer[i]);

                    for (int j = 7; j >= 0; j--)
                    {
                        if (flags[j])
                        {
                            byte[] wordBytes = new byte[2];
                            Array.Copy(buffer, ++i, wordBytes, 0, 2);
                            CompressedWord word   = new CompressedWord(wordBytes, mode);
                            byte[]         result = circularBuffer.GetData(word.Offset, word.Length);
                            i++;

                            writer.Write(result, 0, result.Length);
                        }
                        else
                        {
                            if (i < buffer.Length - 1)
                            {
                                writer.Write(buffer, ++i, 1);
                                circularBuffer.AddData(new byte[] { buffer[i] });
                            }
                        }
                        if (writer.BaseStream.Length >= LZSSHeader.UncompressedSize)
                        {
                            break;
                        }
                    }
                    if (writer.BaseStream.Length >= LZSSHeader.UncompressedSize)
                    {
                        break;
                    }
                }
            }
            DecompressedFile = HeaderList.GetTypeFromFile(outputPath);

            string headerPath = Path.Combine(Path.GetDirectoryName(FilePath), Path.GetFileName(FilePath) + ".HEADER");

            using (BinaryWriter writer = new BinaryWriter(new FileStream(headerPath, FileMode.Create)))
            {
                writer.Write(LZSSHeader.GetBytes());
            }
            HeaderFile = new BaseFile(headerPath);
        }
Esempio n. 3
0
        public BaseFile GetFile(string filePath)
        {
            if (String.IsNullOrEmpty(filePath))
            {
                return(null);
            }
            string extension = Path.GetExtension(filePath).ToUpper();

            if (extension == ".BIN")
            {
                if (Path.GetFileName(filePath) == "FONT.BIN")
                {
                    return(new FONTFile(filePath));
                }
                return(new BaseFile(filePath));
            }
            return(HeaderList.GetTypeFromFile(filePath));
        }
Esempio n. 4
0
        private void decompress_Mode0(byte[] buffer)
        {
            string outputPath = FilePath + ".OUT";

            using (BinaryWriter writer = new BinaryWriter(new FileStream(outputPath, FileMode.Create)))
            {
                writer.Write(buffer, 0, (int)LZSSHeader.UncompressedSize);
            }
            DecompressedFile = HeaderList.GetTypeFromFile(outputPath);

            string headerPath = Path.Combine(Path.GetDirectoryName(FilePath), Path.GetFileName(FilePath) + ".HEADER");

            using (BinaryWriter writer = new BinaryWriter(new FileStream(headerPath, FileMode.Create)))
            {
                writer.Write(LZSSHeader.GetBytes());
            }
            HeaderFile = new BaseFile(headerPath);
        }
Esempio n. 5
0
        /// <summary>
        /// Unpacks all the files inside the PB file into a folder.
        /// </summary>
        public void Unpack()
        {
            Files.Clear();
            int index = 0;

            using (BinaryReader reader = new BinaryReader(new FileStream(FilePath, FileMode.Open)))
            {
                reader.BaseStream.Seek(8, SeekOrigin.Begin);
                while (reader.BaseStream.Length != reader.BaseStream.Position)
                {
                    byte[]       headerBytes = reader.ReadBytes(17);
                    PBFileHeader header      = new PBFileHeader(headerBytes);
                    if (header.Length == 0x00F7FFFF)
                    {
                        return;
                    }
                    byte[] buffer    = reader.ReadBytes(header.Length - 17);
                    string directory = Path.GetDirectoryName(FilePath) + "\\" + Path.GetFileNameWithoutExtension(FilePath);
                    Directory.CreateDirectory(directory);
                    string fileName = directory + "\\" + index + "." + HeaderList.GetExtensionFromBuffer(buffer);
                    using (BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.Create)))
                    {
                        writer.Write(buffer);
                    }
                    Files.Add(new PBFileEntry(header, HeaderList.GetTypeFromFile(fileName)));
                    index++;
                }
            }
            foreach (PBFileEntry file in Files)
            {
                if (file.File.GetType() == typeof(LZBFile))
                {
                    LZBFile lzb = (LZBFile)file.File;
                    lzb.Decompress();
                }
            }
        }