Example #1
0
        public static void RandomizeScriptsInBVP(string path)
        {
            using (var reader = new EndianBinaryReader(File.OpenRead(path), Endianness.LittleEndian))
                using (var writer = new EndianBinaryWriter(File.OpenWrite(path + ".randomized"), Endianness.LittleEndian))
                {
                    // read first entry
                    int flags   = reader.ReadInt32();
                    int address = reader.ReadInt32();
                    int size    = reader.ReadInt32();

                    int firstAddress = address;
                    int nextAddress  = firstAddress;

                    while (reader.Position < firstAddress)
                    {
                        // read & randomize message script
                        reader.EnqueuePosition();
                        reader.SeekBegin(address);
                        var bytes = RandomizeMessageScript(reader.ReadBytes(size));
                        reader.SeekBegin(reader.DequeuePosition());

                        // write new entry
                        writer.Write(flags);
                        writer.Write(nextAddress);
                        writer.Write(bytes.Length);

                        // write new message script
                        writer.EnqueuePosition();
                        writer.SeekBegin(nextAddress);
                        writer.Write(bytes);

                        // write padding
                        for (int i = 0; i < AlignmentHelper.GetAlignedDifference(writer.Position, 16); i++)
                        {
                            writer.Write((byte)0);
                        }

                        nextAddress = (int)writer.Position;

                        writer.SeekBegin(writer.DequeuePosition());

                        // read next entry
                        flags   = reader.ReadInt32();
                        address = reader.ReadInt32();
                        size    = reader.ReadInt32();
                    }
                }
        }