Exemple #1
0
 public void Read(CustomBinaryReader reader)
 {
     header     = reader.ReadBytes(4);
     headerName = Encoding.UTF8.GetString(header);
     size       = reader.ReadUInt32();
     data       = reader.ReadBytes((int)size);
 }
Exemple #2
0
        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);
        }
Exemple #3
0
        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!");
            }
        }
Exemple #4
0
        //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();
            }
        }
Exemple #5
0
 public DATAData(CustomBinaryReader reader)
 {
     Read(reader);
 }
Exemple #6
0
 public void Read(CustomBinaryReader reader)
 {
     id = reader.ReadUInt32();
     offset = reader.ReadUInt32();
     filesize = reader.ReadUInt32();
 }
Exemple #7
0
 public DataIndex(CustomBinaryReader reader)
 {
     Read(reader);
 }
Exemple #8
0
 public DIDXData(CustomBinaryReader reader)
 {
     Read(reader);
 }
Exemple #9
0
 public BnkData(CustomBinaryReader reader)
 {
     Read(reader);
 }