Esempio n. 1
0
        public static Bhd5File Read(Stream inputStream)
        {
            Bhd5File result = new Bhd5File();

            BinaryReader reader = new BinaryReader(inputStream, Encoding.ASCII, true);

            string signature = new string(reader.ReadChars(4));

            if (signature != Bhd5Signature)
            {
                throw new Bhd5FileReadException("Invalid signature");
            }
            int    version = reader.ReadInt32(); // 511
            int    unknown = reader.ReadInt32(); // 1
            int    size    = reader.ReadInt32(); // excluding sizeof(signature)
            int    bucketDirectoryEntryCount = reader.ReadInt32();
            int    bucketDirectoryOffset     = reader.ReadInt32();
            int    saltLength = reader.ReadInt32();
            string salt       = new string(reader.ReadChars(saltLength));

            for (int i = 0; i < bucketDirectoryEntryCount; i++)
            {
                result._buckets.Add(Bhd5Bucket.Read(reader));
            }

            return(result);
        }
Esempio n. 2
0
        public static Bhd5Bucket Read(BinaryReader reader, GameVersion version)
        {
            Bhd5Bucket result = new Bhd5Bucket();

            int bucketEntryCount = reader.ReadInt32();
            int bucketOffset     = reader.ReadInt32();

            long currentPosition = reader.GetPosition();

            reader.Seek(bucketOffset, SeekOrigin.Begin);

            for (int i = 0; i < bucketEntryCount; i++)
            {
                result._entries.Add(Bhd5BucketEntry.Read(reader, version));
            }

            reader.Seek(currentPosition, SeekOrigin.Begin);
            return(result);
        }
Esempio n. 3
0
        public static Bhd5File Read(Stream inputStream, GameVersion version)
        {
            Bhd5File result = new Bhd5File();

            BinaryReader reader = new BinaryReader(inputStream, Encoding.ASCII, true);

            string signature = new string(reader.ReadChars(4));

            if (signature != Bhd5Signature)
            {
                throw new Bhd5FileReadException("Invalid signature");
            }
            int bhdVersion = reader.ReadInt32(); // 511
            int unknown    = reader.ReadInt32(); // 1
            int size       = reader.ReadInt32(); // excluding sizeof(signature)
            int bucketDirectoryEntryCount = reader.ReadInt32();
            int bucketDirectoryOffset     = reader.ReadInt32();


            // dks switch
            if (bhdVersion == 255)
            {
                reader.Seek(0x20, SeekOrigin.Begin);
            }
            else
            {
                int    saltLength = reader.ReadInt32();
                string salt       = new string(reader.ReadChars(saltLength));
            }
            for (int i = 0; i < bucketDirectoryEntryCount; i++)
            {
                result._buckets.Add(Bhd5Bucket.Read(reader, version, bhdVersion));
            }

            return(result);
        }