internal static List <BinderFileHeader> ReadHeader(IBND3 bnd, BinaryReaderEx br) { br.AssertASCII("BND3"); bnd.Version = br.ReadFixStr(8); bnd.BitBigEndian = br.GetBoolean(0xE); bnd.Format = Binder.ReadFormat(br, bnd.BitBigEndian); bnd.BigEndian = br.ReadBoolean(); br.AssertBoolean(bnd.BitBigEndian); br.AssertByte(0); br.BigEndian = bnd.BigEndian || Binder.ForceBigEndian(bnd.Format); int fileCount = br.ReadInt32(); br.ReadInt32(); // End of file headers, not including padding before data bnd.Unk18 = br.AssertInt32(0, unchecked ((int)0x80000000)); br.AssertInt32(0); var fileHeaders = new List <BinderFileHeader>(fileCount); for (int i = 0; i < fileCount; i++) { fileHeaders.Add(BinderFileHeader.ReadBinder3FileHeader(br, bnd.Format, bnd.BitBigEndian)); } return(fileHeaders); }
internal static void WriteHeader(IBND3 bnd, BinaryWriterEx bw, List <BinderFileHeader> fileHeaders) { bw.BigEndian = bnd.BigEndian || Binder.ForceBigEndian(bnd.Format); bw.WriteASCII("BND3"); bw.WriteFixStr(bnd.Version, 8); Binder.WriteFormat(bw, bnd.BigEndian, bnd.Format); bw.WriteBoolean(bnd.BigEndian); bw.WriteBoolean(bnd.BitBigEndian); bw.WriteByte(0); bw.WriteInt32(fileHeaders.Count); bw.ReserveInt32("FileHeadersEnd"); bw.WriteInt32(bnd.Unk18); bw.WriteInt32(0); for (int i = 0; i < fileHeaders.Count; i++) { fileHeaders[i].WriteBinder3FileHeader(bw, bnd.Format, bnd.BitBigEndian, i); } for (int i = 0; i < fileHeaders.Count; i++) { fileHeaders[i].WriteFileName(bw, bnd.Format, false, i); } bw.FillInt32($"FileHeadersEnd", (int)bw.Position); }