public void Read(CustomBinaryReader reader) { header = reader.ReadBytes(4); headerName = Encoding.UTF8.GetString(header); size = reader.ReadUInt32(); data = reader.ReadBytes((int)size); }
public void Read(CustomBinaryReader reader) { header = reader.ReadBytes(4); headerName = Encoding.UTF8.GetString(header); headerSize = reader.ReadUInt32(); long _headerStartPos = reader.Position; version = reader.ReadUInt32(); headerData = reader.ReadBytes((int)(_headerStartPos - reader.Position + headerSize)); didx = new DIDXData(reader); data = new DATAData(reader); hirc = new HIRCDataObject(reader); }
public void Read(CustomBinaryReader reader) { header = reader.ReadBytes(4); headerName = Encoding.UTF8.GetString(header); size = reader.ReadUInt32(); long _doubleCheck = reader.Position; if (size % 12 != 0) { throw new ParseException($"Failed to parse DIDXData.dataIndexes! {size} / {12} is not an integer!"); } dataIndexes = new DataIndex[size / 12]; for (int i = 0; i < size / 12; i++) { dataIndexes[i] = new DataIndex(reader); } if (reader.Position - _doubleCheck - size != 0) { throw new ParseException($"Failed to parse DIDXData! Attempted to read: {size} bytes, but actually read: {reader.Position - _doubleCheck} bytes!"); } }
//TODO Add JSON serialization/deserialization, perhaps a GUI static void Main(string[] args) { string bank = ""; uint search = 0; if (args.Length < 2) { Console.WriteLine("Enter path to global.bnk..."); bank = Console.ReadLine(); Console.WriteLine("Enter ID to dump (or leave blank for nothing)..."); uint.TryParse(Console.ReadLine(), out search); } else { bank = args[1]; } var stream = new FileStream(bank, FileMode.Open); var reader = new CustomBinaryReader(stream); BnkData data = new BnkData(reader); Console.WriteLine($"Position: {reader.Position} / {reader.BaseStream.Length}"); File.WriteAllText("out.json", JsonConvert.SerializeObject(data, Formatting.Indented)); var dmp = data.DumpID(search); if (dmp != null) { File.WriteAllBytes(search + ".dat", dmp); } Console.WriteLine("Trying some Hashes:"); var toHash = new List <string>() { "../PistolWhip_Wwise/Originals/SFX/BlackMagic_Edit_01.wav", "BlackMagic", "Black Magic", "BlackMagic_Edit", "518895575", "BlackMagic_Edit_01", @"D:\Pistol Whip Repo\PistolWhip_Wwise\.cache\Android\SFX\BlackMagic_Edit_01_C0D53808.wem", @"\Interactive Music Hierarchy\Default Work Unit\Music\BlackMagic\BlackMagic_Edit_01", "C0D53808", "C0D53808.wem", "BlackMagic_Edit_01_C0D53808", "BlackMagic_Edit_01_C0D53808.wem" }; foreach (var s in toHash) { // Need to lower the string string lower = s.ToLower(); // Then convert it to UTF8/ASCII byte[] val = Encoding.ASCII.GetBytes(lower); foreach (var type in Enum.GetValues(typeof(HashType))) { Console.WriteLine($"Val: {lower} Hash ({(HashType)type}): {new FNVHash((HashType)type).Compute(val, val.Length)}"); } } Console.WriteLine("Writing new bank..."); stream.Dispose(); reader.Dispose(); using (stream = new FileStream("out.bnk", FileMode.OpenOrCreate)) { var writer = new CustomBinaryWriter(stream); data.Write(writer); writer.Close(); } }
public DATAData(CustomBinaryReader reader) { Read(reader); }
public void Read(CustomBinaryReader reader) { id = reader.ReadUInt32(); offset = reader.ReadUInt32(); filesize = reader.ReadUInt32(); }
public DataIndex(CustomBinaryReader reader) { Read(reader); }
public DIDXData(CustomBinaryReader reader) { Read(reader); }
public BnkData(CustomBinaryReader reader) { Read(reader); }