public async Task Setup() { // Load Settings System.Console.WriteLine("Running in directory: " + Directory.GetCurrentDirectory()); FilePath settingsPath = "../../../../TestingSettings.xml"; System.Console.WriteLine("Settings path: " + settingsPath); Settings = JsonConvert.DeserializeObject <TestingSettings>(File.ReadAllText(settingsPath.Path)); System.Console.WriteLine("Target settings: " + Settings.ToString()); var passthroughSettings = new PassthroughTestParams() { NicknameSuffix = null, PassthroughSettings = Settings.PassthroughSettings, GameRelease = GameRelease.Oblivion, Target = new Target() { Path = $"Oblivion.esm", Do = true, }, }; var passthrough = new OblivionPassthroughTest(passthroughSettings); (TempFolder TempFolder, Test Test) = passthrough.SetupProcessedFiles(); using var tmp = TempFolder; await Test.Start(); using (var stream = new BinaryReadStream(passthrough.ProcessedPath(ProcessedFilesFolder))) { stream.Position = 0xCF614B; PathGridBytes = stream.ReadBytes(0x14C7); } PathGridReader = new MutagenMemoryReadStream(PathGridBytes, new ParsingBundle(GameRelease.Oblivion, masterReferences: null)); }
public void FixVMADFormIDs( MajorRecordFrame frame, long fileOffset, out int?vmadPos, out ushort objectFormat, out int processed) { vmadPos = UtilityTranslation.FindFirstSubrecord(frame.Content, Meta, RecordTypes.VMAD); if (vmadPos == null) { processed = 0; objectFormat = 0; return; } var stream = new MutagenMemoryReadStream(frame.HeaderAndContentData, Bundle) { Position = vmadPos.Value + frame.HeaderLength }; stream.Position += Meta.SubConstants.HeaderLength; // Skip version stream.Position += 2; objectFormat = stream.ReadUInt16(); var scriptCt = stream.ReadUInt16(); for (int i = 0; i < scriptCt; i++) { FixVMADScriptIDs(stream, fileOffset, objectFormat); } processed = (int)(stream.Position - vmadPos.Value - frame.HeaderLength); }
public void Setup() { // Load Settings System.Console.WriteLine("Running in directory: " + Directory.GetCurrentDirectory()); FilePath settingsPath = "../../../../TestingSettings.xml"; System.Console.WriteLine("Settings path: " + settingsPath); var settings = JsonConvert.DeserializeObject <TestingSettings>(File.ReadAllText(settingsPath.Path)); System.Console.WriteLine("Target settings: " + settings.ToString()); var dataPath = Path.Combine(settings.DataFolderLocations.Oblivion, "Oblivion.esm"); data = File.ReadAllBytes(dataPath); stream = new MutagenMemoryReadStream(data, new ParsingBundle(GameConstants.Oblivion, masterReferences: null !)); }
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); } } } }