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 void WriteHeader(IBND4 bnd, BinaryWriterEx bw, List <BinderFileHeader> fileHeaders) { bw.BigEndian = bnd.BigEndian; bw.WriteASCII("BND4"); bw.WriteBoolean(bnd.Unk04); bw.WriteBoolean(bnd.Unk05); bw.WriteByte(0); bw.WriteByte(0); bw.WriteByte(0); bw.WriteBoolean(bnd.BigEndian); bw.WriteBoolean(!bnd.BitBigEndian); bw.WriteByte(0); bw.WriteInt32(fileHeaders.Count); bw.WriteInt64(0x40); bw.WriteFixStr(bnd.Version, 8); bw.WriteInt64(Binder.GetBND4FileHeaderSize(bnd.Format)); bw.ReserveInt64("HeadersEnd"); bw.WriteBoolean(bnd.Unicode); Binder.WriteFormat(bw, bnd.BitBigEndian, bnd.Format); bw.WriteByte(bnd.Extended); bw.WriteByte(0); bw.WriteInt32(0); bw.ReserveInt64("HashTableOffset"); for (int i = 0; i < fileHeaders.Count; i++) { fileHeaders[i].WriteBinder4FileHeader(bw, bnd.Format, bnd.BitBigEndian, i); } for (int i = 0; i < fileHeaders.Count; i++) { fileHeaders[i].WriteFileName(bw, bnd.Format, bnd.Unicode, i); } if (bnd.Extended == 4) { bw.Pad(0x8); bw.FillInt64("HashTableOffset", bw.Position); BinderHashTable.Write(bw, fileHeaders); } else { bw.FillInt64("HashTableOffset", 0); } bw.FillInt64("HeadersEnd", bw.Position); }