internal static void PatchScript(IWin32Window owner, PatchScript script, PatchProfile profile, SM64Lib.RomManager rommgr) { try { TweakBeforeApply?.Invoke(); var mgr = new PatchingManager(); mgr.Patch( script, rommgr, owner, new Dictionary <string, object>() { { "romfile", rommgr.RomFile }, { "rommgr", rommgr }, { "profilepath", profile?.FileName }, { "files", profile.EmbeddedFiles }, { "owner", owner } }, General.GetAdditionalReferencedAssemblied()); TweakAfterApply?.Invoke(); MessageBoxEx.Show(owner, "Patched successfully.", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception) { TweakFailedApply?.Invoke(); MessageBoxEx.Show(owner, "Error while executing the script. It probably contains errors.", "Script Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void SaveSinglePatch(PatchProfile patch) { if (patch is object) { var profmgr = new PatchingManager(); profmgr.Save(patch, Path.Combine(General.MyDataPath, "Tweaks")); } }
public InfoDumper(SpecialFolders specialFolders, AndroidDebugBridge debugBridge, ModManager modManager, Logger logger, ConfigManager configManager, PatchingManager patchingManager) { _specialFolders = specialFolders; _debugBridge = debugBridge; _modManager = modManager; _logger = logger; _configManager = configManager; _config = configManager.GetOrLoadConfig(); _patchingManager = patchingManager; }
private async Task Reload() { if (_loggingViewModel != null) { _loggingViewModel.LoggedText = ""; // Avoid confusing people by not showing existing logs } ModManager.Reset(); PatchingManager.ResetInstalledApp(); await LoadAndHandleErrors(); }
private void TestScript() { var mgr = new PatchingManager(); var res = mgr.CompileScript(tempScript, Publics.General.GetAdditionalReferencedAssemblied()); string msg = ""; eTaskDialogIcon icon; string title; if (res.Errors.HasErrors) { title = "Script contains errors"; icon = eTaskDialogIcon.Delete; } else { title = "Script is OK"; if (res.Errors.HasWarnings) { icon = eTaskDialogIcon.Exclamation; } else { icon = eTaskDialogIcon.Information; } } foreach (CompilerError er in res.Errors) { if (!string.IsNullOrEmpty(msg)) { msg += Constants.vbNewLine + Constants.vbNewLine; } if (er.IsWarning) { msg += "WARNING"; } else { msg += "ERROR"; } msg += " Code: " + er.ErrorNumber; msg += " Line: " + Conversions.ToString(er.Line); msg += Constants.vbNewLine + er.ErrorText; } TaskDialog.Show("Compiler Result", icon, title, msg, eTaskDialogButton.Ok); }
public ToolsViewModel(Config config, ProgressViewModel progressView, OperationLocker locker, Window mainWindow, SpecialFolders specialFolders, Logger logger, PatchingManager patchingManager, AndroidDebugBridge debugBridge, QuestPatcherUIService uiService, InfoDumper dumper) { Config = config; ProgressView = progressView; Locker = locker; _mainWindow = mainWindow; _specialFolders = specialFolders; _logger = logger; _patchingManager = patchingManager; _debugBridge = debugBridge; _uiService = uiService; _dumper = dumper; _debugBridge.StoppedLogging += (_, _) => { _logger.Information("ADB log exited"); _isAdbLogging = false; this.RaisePropertyChanged(nameof(AdbButtonText)); }; }
public LoadedViewModel(PatchingViewModel patchingView, ManageModsViewModel manageModsView, LoggingViewModel loggingView, ToolsViewModel toolsView, OtherItemsViewModel otherItemsView, Config config, PatchingManager patchingManager, BrowseImportManager browseManager, Logger logger) { PatchingView = patchingView; LoggingView = loggingView; ToolsView = toolsView; ManageModsView = manageModsView; OtherItemsView = otherItemsView; Config = config; _patchingManager = patchingManager; _browseManager = browseManager; _logger = logger; _patchingManager.PropertyChanged += (_, args) => { if (args.PropertyName == nameof(_patchingManager.InstalledApp) && _patchingManager.InstalledApp != null) { this.RaisePropertyChanged(nameof(AppInfo)); this.RaisePropertyChanged(nameof(SelectedAppText)); } }; }
private void ButtonX_Convert_Click(object sender, EventArgs e) { byte[] bytes; var sb = new StringBuilder(); ProgBar.Visible = true; ButtonX_Convert.Enabled = false; try { var code = ".org 0x0\n"; code += fastColoredTextBox_Code.Text; bytes = PatchingManager.ConvertAsmToBytes(code); } catch (Exception) { bytes = null; } if (bytes is object) { foreach (var b in bytes) { if (sb.Length != 0) { sb.Append(" "); } sb.Append(b.ToString("X2")); } } textBoxX_Hex.Text = sb.ToString(); ProgBar.Visible = false; ButtonX_Convert.Enabled = true; }
private void LoadTweaks() { CircularProgress1.Start(); string pathTweaks = General.MyTweaksPath; var mgr = new PatchingManager(); myPatchs.Clear(); var nullVersion = new Version("0.0.0.0"); var appVersion = new Version(Application.ProductVersion); foreach (string f in Directory.GetFiles(pathTweaks, "*.xml", SearchOption.AllDirectories).Concat(Directory.GetFiles(pathTweaks, "*.json", SearchOption.AllDirectories))) { var p = mgr.Read(f); if (p.MinVersion <= appVersion && (p.MaxVersion == nullVersion || p.MaxVersion >= appVersion)) { myPatchs.Add(p); } } myPatchs = myPatchs.OrderBy(n => n.Name).ToList(); LoadTweakList(); CircularProgress1.Stop(); }
public ManageModsViewModel(ModManager modManager, PatchingManager patchingManager, Window mainWindow, OperationLocker locker, ProgressViewModel progressView, BrowseImportManager browseManager) { ProgressView = progressView; ModsList = new ModListViewModel("Mods", true, modManager.Mods, modManager, patchingManager, mainWindow, locker, browseManager); LibrariesList = new ModListViewModel("Libraries", false, modManager.Libraries, modManager, patchingManager, mainWindow, locker, browseManager); }
private void ButtonX_ImportMdl_Click(object sender, EventArgs e) { ButtonX_ImportMdl.Image = null; var pap = SelectedProfileAndPreset(); var profile = pap.profile; var preset = pap.preset; int romAddr = preset.RomAddress; // ValueFromText(TextBoxX_RomAddr.Text) int bankAddr = preset.RamAddress; // ValueFromText(TextBoxX_BankAddr.Text) int maxLength = preset.MaxLength; // ValueFromText(TextBoxX_MaxLength.Text) var pm = new PatchingManager(); var scriptparams = new Dictionary <string, object>() { { "romfile", RomFile }, { "presetName", preset.Name }, { "presetDescription", preset.Description }, { "RomAddress", preset.RomAddress }, { "RamAddress", preset.RamAddress }, { "MaxLength", preset.MaxLength }, { "CollisionPointersArray", preset.CollisionPointers.ToArray() }, { "GeoPointersArray", preset.GeometryPointers.ToArray() }, { "ConvertedModelLength", mdl.Length }, { "ConvertedModel", mdl }, { "profilepath", profile.FileName }, { "files", profile.EmbeddedFiles } }; if (maxLength > 0 && mdl.Length > maxLength) { MessageBoxEx.Show("Model is bigger then the max allowed length!", "Model too big", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } ClearOutput(); // Execute Script Before if (preset.ScriptBefore is object && !string.IsNullOrEmpty(preset.ScriptBefore.Script)) { WriteOutput("Executing Script ..."); scriptparams.AddOrUpdate("script", preset.ScriptBefore); pm.Patch(preset.ScriptBefore, this, scriptparams, General.GetAdditionalReferencedAssemblied()); } int col = -1; var geo = Array.Empty <Geopointer>(); int len = 0; ObjectModel.SaveResult sr = null; bool iscollisionempty = mdl.Collision is null; bool isf3disempty = mdl.Fast3DBuffer is null; var fs = new FileStream(_RomFile, FileMode.Open, FileAccess.ReadWrite); var bw = new BinaryWriter(fs); // Write to stream WriteOutput("Writing Model ..."); sr = mdl.ToStream(fs, romAddr, romAddr - (bankAddr & 0xFFFFFF), (int)(bankAddr & 0xFF000000)); if (sr is object) { geo = sr.GeoPointers.ToArray(); col = sr.CollisionPointer; len = Conversions.ToInteger(sr.Length); } // Write Collision Pointer if (col > -1) { WriteOutput("Chaning Collision Pointers ..."); foreach (int cp in SelectedPreset().CollisionPointers) { fs.Position = cp; bw.Write(SwapInts.SwapInt32(col)); } } // Write Geopointer if (geo.Length > 0) { WriteOutput("Chaning Geometry Pointers ..."); foreach (int gp in SelectedPreset().GeometryPointers) { fs.Position = gp; bw.Write(SwapInts.SwapInt32(geo[0].SegPointer)); fs.Position = gp - 4; if (fs.ReadByte() == 0x15) { fs.WriteByte(geo[0].Layer); } else { fs.Position = gp - 8; if (fs.ReadByte() == 0x13) { fs.WriteByte(geo[0].Layer); } } } } fs.Close(); if (preset.ScriptAfter is object && !string.IsNullOrEmpty(preset.ScriptAfter.Script)) { WriteOutput("Executing Script ..."); scriptparams.AddOrUpdate("script", preset.ScriptAfter); pm.Patch(preset.ScriptAfter, this, scriptparams, General.GetAdditionalReferencedAssemblied()); } if (col > -1) { WriteOutput($"Collision Pointer:{Constants.vbTab}{sr.CollisionPointer.ToString("X")}"); } foreach (Geopointer g in geo) { WriteOutput($"DL-Pointer:{Constants.vbTab}{g.SegPointer.ToString("X")} ({g.Layer.ToString()})"); } WriteOutput(); WriteOutput(DateAndTime.Now.ToShortTimeString() + " - Done"); // MessageBoxEx.Show("Model has been imported succesfully!", "Model imported", MessageBoxButtons.OK, MessageBoxIcon.Information) ButtonX_ImportMdl.Image = My.Resources.Resources.icons8_checkmark_16px_1; }