private void ProcessQuests( MajorRecordFrame majorFrame, long fileOffset) { if (majorFrame.TryLocateSubrecordFrame(RecordTypes.ANAM, out var anamRec, out var anamIndex)) { var next = anamRec.AsUInt32(); var targets = new RecordType[] { RecordTypes.ALST, RecordTypes.ALLS }; var locs = UtilityTranslation.FindAllOfSubrecords( majorFrame.Content, majorFrame.Meta, targets.ToGetter(), navigateToContent: true); uint actualNext = 0; if (locs.Length > 0) { actualNext = locs .Select(l => { return(BinaryPrimitives.ReadUInt32LittleEndian(majorFrame.Content.Slice(l))); }) .Max(); actualNext++; } if (actualNext != next) { byte[] sub = new byte[4]; BinaryPrimitives.WriteUInt32LittleEndian(sub, actualNext); _Instructions.SetSubstitution( fileOffset + anamIndex + anamRec.HeaderLength, sub); } } var sizeChange = FixMissingCounters( majorFrame, fileOffset, new RecordType("COCT"), new RecordType("CNTO")); ProcessLengths( majorFrame, sizeChange, fileOffset); FixVMADFormIDs( majorFrame, fileOffset, out var vmadPos, out var objectFormat, out var processedLen); if (vmadPos != null) { var vmadFrame = Meta.SubrecordFrame(majorFrame.Content.Slice(vmadPos.Value)); var stream = new MutagenMemoryReadStream(vmadFrame.Content, Bundle) { Position = processedLen - vmadFrame.HeaderLength }; if (stream.Complete) { return; } // skip unknown stream.Position += 1; var fragCount = stream.ReadUInt16(); // skip name var len = stream.ReadUInt16(); stream.Position += len; for (int i = 0; i < fragCount; i++) { stream.Position += 9; // skip name len = stream.ReadUInt16(); stream.Position += len; // skip name len = stream.ReadUInt16(); stream.Position += len; } var aliasCount = stream.ReadUInt16(); for (int i = 0; i < aliasCount; i++) { FixObjectPropertyIDs(stream, fileOffset, objectFormat); // skip version stream.Position += 2; objectFormat = stream.ReadUInt16(); var numScripts = stream.ReadUInt16(); for (int j = 0; j < numScripts; j++) { FixVMADScriptIDs(stream, fileOffset, objectFormat); } } } }