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); }
internal static void WriteBHFHeader(IBXF3 bxf, BinaryWriterEx bw, List <BinderFileHeader> fileHeaders) { bw.BigEndian = bxf.BigEndian || Binder.ForceBigEndian(bxf.Format); bw.WriteASCII("BHF3"); bw.WriteFixStr(bxf.Version, 8); Binder.WriteFormat(bw, bxf.BitBigEndian, bxf.Format); bw.WriteByte(0); bw.WriteByte(0); bw.WriteByte(0); bw.WriteInt32(fileHeaders.Count); bw.WriteInt32(0); bw.WriteInt32(0); bw.WriteInt32(0); for (int i = 0; i < fileHeaders.Count; i++) { fileHeaders[i].WriteBinder3FileHeader(bw, bxf.Format, bxf.BitBigEndian, i); } for (int i = 0; i < fileHeaders.Count; i++) { fileHeaders[i].WriteFileName(bw, bxf.Format, false, i); } }
internal static List <BinderFileHeader> ReadBHFHeader(IBXF3 bxf, BinaryReaderEx br) { br.AssertASCII("BHF3"); bxf.Version = br.ReadFixStr(8); bxf.BitBigEndian = br.GetBoolean(0xE); bxf.Format = Binder.ReadFormat(br, bxf.BitBigEndian); bxf.BigEndian = br.ReadBoolean(); br.AssertBoolean(bxf.BitBigEndian); br.AssertByte(0); br.BigEndian = bxf.BigEndian || Binder.ForceBigEndian(bxf.Format); int fileCount = br.ReadInt32(); br.AssertInt32(0); br.AssertInt32(0); br.AssertInt32(0); var fileHeaders = new List <BinderFileHeader>(fileCount); for (int i = 0; i < fileCount; i++) { fileHeaders.Add(BinderFileHeader.ReadBinder3FileHeader(br, bxf.Format, bxf.BitBigEndian)); } return(fileHeaders); }
private void Write(BinaryWriterEx bhdWriter, BinaryWriterEx bdtWriter) { bhdWriter.WriteASCII("BHF3"); bhdWriter.WriteFixStr(BHDTimestamp, 8); bhdWriter.WriteByte((byte)Format); bhdWriter.WriteByte(0); bhdWriter.WriteByte(0); bhdWriter.WriteByte(0); bhdWriter.BigEndian = Binder.ForceBigEndian(Format); bhdWriter.WriteInt32(Files.Count); bhdWriter.WriteInt32(0); bhdWriter.WriteInt32(0); bhdWriter.WriteInt32(0); bdtWriter.WriteASCII("BDF3"); bdtWriter.WriteFixStr(BDTTimestamp, 8); bdtWriter.WriteInt32(0); for (int i = 0; i < Files.Count; i++) { BinderFile file = Files[i]; bhdWriter.WriteByte(0x40); bhdWriter.WriteByte(0); bhdWriter.WriteByte(0); bhdWriter.WriteByte(0); bhdWriter.WriteInt32(file.Bytes.Length); bhdWriter.WriteUInt32((uint)bdtWriter.Position); bhdWriter.WriteInt32(i); bhdWriter.ReserveUInt32($"FileName{i}"); if (Binder.HasUncompressedSize(Format)) { bhdWriter.WriteInt32(file.Bytes.Length); } bdtWriter.WriteBytes(file.Bytes); bdtWriter.Pad(0x10); } for (int i = 0; i < Files.Count; i++) { BinderFile file = Files[i]; bhdWriter.FillUInt32($"FileName{i}", (uint)bhdWriter.Position); bhdWriter.WriteShiftJIS(file.Name, true); } }
public BHD3(BinaryReaderEx br) { br.AssertASCII("BHF3"); Timestamp = br.ReadFixStr(8); Format = br.ReadEnum8 <Binder.Format>(); br.AssertByte(0); br.AssertByte(0); br.AssertByte(0); br.BigEndian = Binder.ForceBigEndian(Format); int fileCount = br.ReadInt32(); br.AssertInt32(0); br.AssertInt32(0); br.AssertInt32(0); FileHeaders = new List <FileHeader>(fileCount); for (int i = 0; i < fileCount; i++) { FileHeaders.Add(new FileHeader(br, Format)); } }
/// <summary> /// Reads BND3 data from a BinaryReaderEx. /// </summary> internal override void Read(BinaryReaderEx br) { br.BigEndian = false; br.AssertASCII("BND3"); Timestamp = br.ReadFixStr(8); Format = br.ReadEnum8 <Binder.Format>(); BigEndian = br.ReadBoolean(); Unk1 = br.ReadBoolean(); br.AssertByte(0); br.BigEndian = BigEndian || Binder.ForceBigEndian(Format); int fileCount = br.ReadInt32(); int fileHeadersEnd = br.ReadInt32(); Unk2 = br.ReadInt32(); br.AssertInt32(0); Files = new List <BinderFile>(fileCount); for (int i = 0; i < fileCount; i++) { Files.Add(ReadFile(br, Format)); } }
/// <summary> /// Writes BND3 data to a BinaryWriterEx. /// </summary> internal override void Write(BinaryWriterEx bw) { bw.BigEndian = false; bw.WriteASCII("BND3"); bw.WriteFixStr(Timestamp, 8); bw.WriteByte((byte)Format); bw.WriteBoolean(BigEndian); bw.WriteBoolean(Unk1); bw.WriteByte(0); bw.BigEndian = BigEndian || Binder.ForceBigEndian(Format); bw.WriteInt32(Files.Count); bw.ReserveInt32("HeaderEnd"); bw.WriteInt32(Unk2); bw.WriteInt32(0); for (int i = 0; i < Files.Count; i++) { WriteFileHeader(Files[i], bw, i, Format); } if (Binder.HasName(Format)) { for (int i = 0; i < Files.Count; i++) { WriteFileName(Files[i], bw, i); } } bw.FillInt32($"HeaderEnd", (int)bw.Position); for (int i = 0; i < Files.Count; i++) { WriteFileData(Files[i], bw, i); } }