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); }
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); }
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); }