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(); } } }