diff --git a/Gnoll Mods/Challenges/Challenges/Gui/ChallengesMenu.cs b/Gnoll Mods/Challenges/Challenges/Gui/ChallengesMenu.cs index 924da52..6bb060c 100644 --- a/Gnoll Mods/Challenges/Challenges/Gui/ChallengesMenu.cs +++ b/Gnoll Mods/Challenges/Challenges/Gui/ChallengesMenu.cs @@ -61,7 +61,7 @@ private void CenterTabControl() this._tabControl.Top = (this.Height - this._tabControl.Height) / 2; } - protected override void Dispose(bool disposing) + public override void Dispose(bool disposing) { base.Dispose(disposing); if (!disposing) diff --git a/Gnoll Mods/ImportExportTrackedItemsMod/ImportExportTrackedItemsMod/ImportExportTrackedItemsDialog.cs b/Gnoll Mods/ImportExportTrackedItemsMod/ImportExportTrackedItemsMod/ImportExportTrackedItemsDialog.cs index 6f51703..db24438 100644 --- a/Gnoll Mods/ImportExportTrackedItemsMod/ImportExportTrackedItemsMod/ImportExportTrackedItemsDialog.cs +++ b/Gnoll Mods/ImportExportTrackedItemsMod/ImportExportTrackedItemsMod/ImportExportTrackedItemsDialog.cs @@ -33,7 +33,7 @@ public ImportExportTrackedItemsDialog(Manager manager) : base(manager) this.AddPage("Export", new ExportTrackedItemsDialog(this.Manager)); } - protected override void Dispose(bool disposing) + public override void Dispose(bool disposing) { base.Dispose(disposing); diff --git a/GnollModLoader/GnollModLoader/GnollMain.cs b/GnollModLoader/GnollModLoader/GnollMain.cs index 6e8ecfd..33c13ec 100644 --- a/GnollModLoader/GnollModLoader/GnollMain.cs +++ b/GnollModLoader/GnollModLoader/GnollMain.cs @@ -27,7 +27,7 @@ public class GnollMain public const string MODS_DIR = "Gnoll Mods\\enabled"; - private static bool debug = true; + private static bool debug = false; public static bool Debug => debug; public static string VERSION { diff --git a/GnollModLoader/GnollModLoader/Properties/AssemblyInfo.cs b/GnollModLoader/GnollModLoader/Properties/AssemblyInfo.cs index 18c1a70..739de1e 100644 --- a/GnollModLoader/GnollModLoader/Properties/AssemblyInfo.cs +++ b/GnollModLoader/GnollModLoader/Properties/AssemblyInfo.cs @@ -8,7 +8,7 @@ [assembly: AssemblyTitle("GnollModLoader")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] +[assembly: AssemblyCompany("https://github.com/Nefaro/gnoll")] [assembly: AssemblyProduct("GnollModLoader")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.10.0.0")] -[assembly: AssemblyFileVersion("1.10.0.0")] +[assembly: AssemblyVersion("1.13.0.0")] +[assembly: AssemblyFileVersion("1.13.0.0")] diff --git a/Installer/InstallerCore/Action.cs b/Installer/InstallerCore/Action.cs index 3aec9eb..28f5431 100644 --- a/Installer/InstallerCore/Action.cs +++ b/Installer/InstallerCore/Action.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; namespace InstallerCore @@ -9,7 +10,7 @@ public abstract class Action public void Execute() { - _log.WriteLine(this.ToString()); + _log.Log(this.ToString()); this.ExecuteImpl(); } @@ -91,6 +92,7 @@ public override string ToString() public class UninstallModKit : Action { + private static readonly Logger _log = Logger.GetLogger; public UninstallModKit(string catalogPath, string outputPath, string backupPath, string vanillaMd5, string patchVersion) { CatalogPath = catalogPath; @@ -103,7 +105,14 @@ public UninstallModKit(string catalogPath, string outputPath, string backupPath, protected override void ExecuteImpl() { // restore backup - File.Replace(BackupPath, OutputPath, destinationBackupFileName: null); + if (File.Exists(BackupPath)) + { + File.Replace(BackupPath, OutputPath, destinationBackupFileName: null); + } + else + { + _log.Warn($"Trying to restore backup but file is missing: {BackupPath}"); + } // update catalog var catalog = InstallDb.LoadOrEmpty(CatalogPath); @@ -193,7 +202,7 @@ private void CopyFile(string source, string target, string backup) } else { - _log.log($"Tasked with copying a file but source file is missing: {source}"); + _log.Error($"Tasked with copying a file but source file is missing: {source}"); } } @@ -202,6 +211,25 @@ public override string ToString() return $"$$ Install Mod Loader Dependency to {OutputPath}"; } + // For List.Contains + public override bool Equals(object obj) + { + return obj is InstallModLoaderDependency dependency && + ModloaderPath == dependency.ModloaderPath && + OutputPath == dependency.OutputPath && + BackupPath == dependency.BackupPath && + WithBackup == dependency.WithBackup; + } + public override int GetHashCode() + { + int hashCode = 971104037; + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(ModloaderPath); + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(OutputPath); + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(BackupPath); + hashCode = hashCode * -1521134295 + WithBackup.GetHashCode(); + return hashCode; + } + public string ModloaderPath { get; } public string OutputPath { get; } public string BackupPath { get; } diff --git a/Installer/InstallerCore/GamePatchDatabase.cs b/Installer/InstallerCore/GamePatchDatabase.cs index dbb24b1..180d379 100644 --- a/Installer/InstallerCore/GamePatchDatabase.cs +++ b/Installer/InstallerCore/GamePatchDatabase.cs @@ -19,16 +19,16 @@ public class GamePatchDatabase public GamePatchDatabase(string appFolder) { // The overall patch directory - _log.log($"App folder: {appFolder}"); + _log.Log($"App folder: {appFolder}"); this._patchFolder = Path.Combine(appFolder, _patchFolderName); - _log.log($"Patch folder: {_patchFolder}"); + _log.Log($"Patch folder: {_patchFolder}"); // Load the patch info string jsonString = File.ReadAllText(Path.Combine(_patchFolder, _patchDatabaseName)); this._entries = JsonSerializer.Deserialize(jsonString); foreach(var ent in this._entries) { - _log.log($"Entry: {ent.Name} - {ent.Md5sum}"); - _log.log($"Entry patches: {ent.Patches.Count}"); + _log.Log($"Entry: {ent.Name} - {ent.Md5sum}"); + _log.Log($"Entry patches: {ent.Patches.Count}"); } } @@ -86,7 +86,7 @@ public PatchInstallable GetInstallablePatchIfAvailable(GameEntry gameEntry, stri if ( !File.Exists(patchFile) ) { - _log.log($"Error: Cannot find patch file ( { patchFile })"); + _log.Log($"Error: Cannot find patch file ( { patchFile })"); throw new FileNotFoundException($"Cannot find patch file '{Path.GetFileName(patchFile)}'. Is the database corrupt?"); } @@ -99,7 +99,7 @@ public PatchInstallable GetInstallablePatchIfAvailable(GameEntry gameEntry, stri public PatchEntry GetLatestPatch(GameEntry gameEntry) { - _log.log($"Finding patch for: {gameEntry.Name} - {gameEntry.Md5sum}"); + _log.Log($"Finding patch for: {gameEntry.Name} - {gameEntry.Md5sum}"); // try to find the latest patch if (!string.IsNullOrEmpty(gameEntry.LatestPatch)) { @@ -110,7 +110,7 @@ public PatchEntry GetLatestPatch(GameEntry gameEntry) var patchFile = Path.Combine(this._patchFolder, patch.Filename); if (File.Exists(patchFile)) { - _log.log($"Picked (latest) patch: {patch.VersionString}"); + _log.Log($"Picked (latest) patch: {patch.VersionString}"); return patch; } } @@ -123,10 +123,10 @@ public PatchEntry GetLatestPatch(GameEntry gameEntry) gameEntry.Patches.Sort( delegate (PatchEntry x, PatchEntry y) { return y.Version.CompareTo(x.Version); }); - _log.log("Sorted patches:"); + _log.Log("Sorted patches:"); foreach (var patch in gameEntry.Patches) { - _log.log($" -- {patch.VersionString}"); + _log.Log($" -- {patch.VersionString}"); } return gameEntry.Patches[0]; diff --git a/Installer/InstallerCore/InstallerCore.cs b/Installer/InstallerCore/InstallerCore.cs index e23385a..7697910 100644 --- a/Installer/InstallerCore/InstallerCore.cs +++ b/Installer/InstallerCore/InstallerCore.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using System.Diagnostics.Eventing.Reader; using System.IO; +using System.Linq; using System.Security.Cryptography; namespace InstallerCore @@ -33,13 +35,17 @@ public class InstallerCore { private static readonly Logger _log = Logger.GetLogger; private static readonly string _modLoaderFile = "GnollModLoader.dll"; - private static readonly string _modLoaderDependency = "0Harmony.dll"; + private static readonly List _modLoaderDependencies = new List() + { + "0Harmony.dll", + "Newtonsoft.Json.dll" + }; private static readonly string _modsDirectory = "Gnoll Mods"; public static ScanResult ScanGameInstall(string installDir, GamePatchDatabase gameDb) { - _log.WriteLine($"About to scan game directory {installDir}"); + _log.Log($"About to scan game directory {installDir}"); string gameExePath = Path.Combine(installDir, "Gnomoria.exe"); string backupExePath = Path.Combine(installDir, "Gnomoria.orig.exe"); @@ -48,14 +54,20 @@ public static ScanResult ScanGameInstall(string installDir, GamePatchDatabase ga string modsSourcePath = Path.Combine(gameDb.PatchFolder, _modsDirectory); string modsTargetPath = Path.Combine(installDir, _modsDirectory); - string dependencyTargetPath = Path.Combine(installDir, _modLoaderDependency); - string dependencySourcePath = Path.Combine(gameDb.PatchFolder, _modLoaderDependency); - + List> dependencyPaths = new List>(); + foreach (var dep in _modLoaderDependencies) + { + Tuple item = new Tuple(Path.Combine(gameDb.PatchFolder, dep), Path.Combine(installDir, dep)); + if ( !dependencyPaths.Contains(item) ) + { + dependencyPaths.Add(new Tuple(Path.Combine(gameDb.PatchFolder, dep), Path.Combine(installDir, dep))); + } + } // Load installation catalog (json file) string catalogPath = Path.Combine(installDir, "gnoll-version.json"); - _log.WriteLine($"{catalogPath} exists? => {File.Exists(catalogPath)}"); + _log.Log($"{catalogPath} exists? => {File.Exists(catalogPath)}"); var catalog = InstallDb.LoadOrEmpty(catalogPath); bool isExeModded = (catalog.DefaultRecord != null); @@ -77,7 +89,7 @@ public static ScanResult ScanGameInstall(string installDir, GamePatchDatabase ga { var hash = md5.ComputeHash(stream); vanillaGameMd5 = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant(); - _log.WriteLine($"Game not modded; calculated vanillaGameMd5 = {vanillaGameMd5}"); + _log.Log($"Game not modded; calculated vanillaGameMd5 = {vanillaGameMd5}"); } } } @@ -85,7 +97,7 @@ public static ScanResult ScanGameInstall(string installDir, GamePatchDatabase ga { vanillaGameMd5 = catalog.DefaultRecord.VanillaMd5; vanillaGamePath = backupExePath; - _log.WriteLine($"Game IS modded; reported vanillaGameMd5 = {vanillaGameMd5}"); + _log.Log($"Game IS modded; reported vanillaGameMd5 = {vanillaGameMd5}"); } GamePatchDatabase.GameEntry gameVersion = gameDb.GetGameEntryMd5Hash(vanillaGameMd5); @@ -93,13 +105,12 @@ public static ScanResult ScanGameInstall(string installDir, GamePatchDatabase ga // Construct actions to offer var actions = new List(); var installable = gameDb.GetInstallablePatchIfAvailable( gameVersion, vanillaGamePath); - // Check if current modkit version has been installed as stand-alone exe (trust the catalog) bool isStandaloneInstallPresent = false; bool isStandaloneUpToDate = false; if (catalog.Standalone != null) { - _log.WriteLine($"Detected stand-alone installation of build {catalog.Standalone.VersionString}"); + _log.Log($"Detected stand-alone installation of build {catalog.Standalone.VersionString}"); isStandaloneInstallPresent = true; if ( installable.PatchVersion.Equals(catalog.Standalone.VersionString) ) { @@ -112,28 +123,31 @@ public static ScanResult ScanGameInstall(string installDir, GamePatchDatabase ga { if (installable != null) { - _log.WriteLine($"Game not modded & patch available => propose InstallModKit"); + _log.Log($"Game not modded & patch available => propose InstallModKit"); actions.Add(new InstallModKit(catalogPath, gameExePath, backupExePath, vanillaGameMd5, installable.PatchVersion, installable)); if ( File.Exists(modLoaderSourcePath) ) { actions.Add(new InstallModLoaderDependency(modLoaderSourcePath, modLoaderTargetPath, true)); - actions.Add(new InstallModLoaderDependency(dependencySourcePath, dependencyTargetPath, false)); actions.Add(new UninstallModLoaderDependency(modLoaderTargetPath)); - actions.Add(new UninstallModLoaderDependency(dependencyTargetPath)); + foreach(var pathTuple in dependencyPaths) + { + actions.Add(new InstallModLoaderDependency(pathTuple.Item1, pathTuple.Item2, false)); + actions.Add(new UninstallModLoaderDependency(pathTuple.Item2)); + } } else { - _log.WriteLine($"Warning: Mod Loader not found; not installing"); + _log.Warn($"Warning: Mod Loader not found; not installing"); } } else { - _log.WriteLine($"Warning: no patch available for game version {vanillaGameMd5}"); + _log.Warn($"Warning: no patch available for game version {vanillaGameMd5}"); } } else { - _log.WriteLine($"Game modded => propose UninstallModKit"); + _log.Log($"Game modded => propose UninstallModKit"); actions.Add(new UninstallModKit(catalogPath, gameExePath, backupExePath, vanillaGameMd5, moddedVersion)); } @@ -146,30 +160,33 @@ public static ScanResult ScanGameInstall(string installDir, GamePatchDatabase ga if (installable != null && standaloneUpToDateFilename != null) { string standalonePath = Path.Combine(installDir, standaloneUpToDateFilename); - _log.WriteLine($"Game not stand-alone modded & patch available => propose InstallStandalone"); + _log.Log($"Game not stand-alone modded & patch available => propose InstallStandalone"); actions.Add(new InstallStandalone(catalogPath, standalonePath, vanillaGameMd5, installable.PatchVersion, installable)); if (File.Exists(modLoaderSourcePath)) { - actions.Add(new InstallModLoaderDependency(modLoaderSourcePath, modLoaderTargetPath, true)); - actions.Add(new InstallModLoaderDependency(dependencySourcePath, dependencyTargetPath, false)); - actions.Add(new UninstallModLoaderDependency(modLoaderTargetPath)); - actions.Add(new UninstallModLoaderDependency(dependencyTargetPath)); + addActionIfNotPresent(actions, new InstallModLoaderDependency(modLoaderSourcePath, modLoaderTargetPath, true)); + addActionIfNotPresent(actions, new UninstallModLoaderDependency(modLoaderTargetPath)); + foreach (var pathTuple in dependencyPaths) + { + addActionIfNotPresent(actions, new InstallModLoaderDependency(pathTuple.Item1, pathTuple.Item2, false)); + addActionIfNotPresent(actions, new UninstallModLoaderDependency(pathTuple.Item2)); + } } else { - _log.WriteLine($"Warning: Mod Loader not found; not installing"); + _log.Warn($"Warning: Mod Loader not found; not installing"); } } else { - _log.WriteLine($"Warning: no patch available for game version {vanillaGameMd5}"); + _log.Warn($"Warning: no patch available for game version {vanillaGameMd5}"); } } if(isStandaloneInstallPresent) { string standalonePath = Path.Combine(installDir, standaloneUpToDateFilename); - _log.WriteLine($"Game stand-alone modded => propose UninstallStandalone"); + _log.Log($"Game stand-alone modded => propose UninstallStandalone"); actions.Add(new UninstallStandalone(catalogPath, standalonePath, vanillaGameMd5, standaloneOldFilename)); } if ( Directory.Exists(modsSourcePath) ) @@ -179,10 +196,18 @@ public static ScanResult ScanGameInstall(string installDir, GamePatchDatabase ga } else { - _log.WriteLine($"Warning: Mods not included in {modsSourcePath}"); + _log.Warn($"Warning: Mods not included in {modsSourcePath}"); } return new ScanResult(moddedVersion, gameVersion.Name, actions.ToArray(), patchAvailable: (installable != null), standaloneOldFilename, standaloneUpToDateFilename,(installable!=null? installable.PatchVersion: null)); } + + private static void addActionIfNotPresent(List actions, Action newAction) + { + if (!actions.Contains(newAction)) + { + actions.Add(newAction); + } + } } } diff --git a/Installer/InstallerCore/InstallerCore.csproj b/Installer/InstallerCore/InstallerCore.csproj index e09a785..81a9b65 100644 --- a/Installer/InstallerCore/InstallerCore.csproj +++ b/Installer/InstallerCore/InstallerCore.csproj @@ -116,17 +116,9 @@ - - - - - - - - - + diff --git a/Installer/InstallerCore/Logger.cs b/Installer/InstallerCore/Logger.cs index 0a797da..2394745 100644 --- a/Installer/InstallerCore/Logger.cs +++ b/Installer/InstallerCore/Logger.cs @@ -31,9 +31,19 @@ public void WriteLine(String msg) LOGFILE.Flush(); } - public void log(String msg) + public void Log(String msg) { this.WriteLine(msg); } + + public void Warn(String msg) + { + this.WriteLine("!! " + msg); + } + + public void Error(String msg) + { + this.WriteLine("¤¤ " + msg); + } } } diff --git a/Installer/InstallerCore/Payloads/G0000_016e6239.exe b/Installer/InstallerCore/Payloads/G0000_016e6239.exe deleted file mode 100644 index 8c01d89..0000000 --- a/Installer/InstallerCore/Payloads/G0000_016e6239.exe +++ /dev/null @@ -1 +0,0 @@ -hello, world \ No newline at end of file diff --git a/Installer/InstallerCore/Payloads/G0000_c9f6d4b9.exe b/Installer/InstallerCore/Payloads/G0000_c9f6d4b9.exe deleted file mode 100644 index 8c01d89..0000000 --- a/Installer/InstallerCore/Payloads/G0000_c9f6d4b9.exe +++ /dev/null @@ -1 +0,0 @@ -hello, world \ No newline at end of file diff --git a/Installer/InstallerGUI/Form1.cs b/Installer/InstallerGUI/Form1.cs index 111fee0..138642e 100644 --- a/Installer/InstallerGUI/Form1.cs +++ b/Installer/InstallerGUI/Form1.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Drawing; using System.IO; +using System.Linq; using System.Windows.Forms; namespace InstallerGUI @@ -21,12 +22,12 @@ public partial class Form1 : Form private List _uninstallModLoaderDependencies = new List(); private static readonly Logger _log = InstallerCore.Logger.GetLogger; - private static readonly string _appName = $"Gnoll Installer (v1.12.0)"; + private static readonly string _appName = $"Gnoll Installer (v1.13.0)"; private readonly GamePatchDatabase _gameDb; public Form1() { - _log.log("Running Gnoll Installer ..."); + _log.Log("Running Gnoll Installer ..."); try { InitializeComponent(); @@ -37,8 +38,8 @@ public Form1() } catch(Exception e) { - _log.log("Running Gnoll Installer ... FAILED"); - _log.log(e.ToString()); + _log.Error("Running Gnoll Installer ... FAILED"); + _log.Error(e.ToString()); MessageBox.Show($"Cannot run Gnoll Installer: \r\nERROR: {e.Message}", "Gnoll", MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.Exit(0); @@ -74,7 +75,7 @@ private void RescanGame() var res = InstallerCore.InstallerCore.ScanGameInstall(gameDir, _gameDb); - _log.log($"Available patch {res.GameVersion}"); + _log.Log($"Available patch {res.GameVersion}"); string gameVersionStr = res.GameVersion; @@ -106,9 +107,9 @@ private void RescanGame() { selectedPatchVersion.Text = $"Gnoll {res.PatchVersion}"; } - + _installModLoaderDependencies.Clear(); + _uninstallModLoaderDependencies.Clear(); // Ugh, this code is a dumpster fire... at least it's straightforward - foreach (var action in res.AvailableActions) { if (action is InstallModKit) @@ -159,8 +160,8 @@ private void RescanGame() catch(Exception e) { // bad stuff - _log.log("Error: Could not identify game version"); - _log.log(e.ToString()); + _log.Error("Error: Could not identify game version"); + _log.Error(e.ToString()); MessageBox.Show($"Could not identify game version, no patch available: \r\nERROR: {e.Message}", "Gnoll", MessageBoxButtons.OK, MessageBoxIcon.Error); } @@ -194,7 +195,7 @@ private void installModkitButton_Click(object sender, EventArgs e) _installModkitAction.Execute(); if ( _installModLoaderDependencies.Count > 0 ) { - _log.log("Installing modloader dependencies"); + _log.Log("Installing modloader dependencies"); foreach(var action in _installModLoaderDependencies) { action.Execute(); @@ -214,7 +215,7 @@ private void copyMods_Click(object sender, EventArgs e) { if (_copyModsAction != null) { - _log.log("Copying mods ..."); + _log.Log("Copying mods ..."); _copyModsAction.Execute(); } ShowOk(); @@ -232,7 +233,7 @@ private void installStandaloneButton_Click(object sender, EventArgs e) _installStandaloneAction.Execute(); if (_installModLoaderDependencies.Count > 0) { - _log.log("Installing modloader dependencies"); + _log.Log("Installing modloader dependencies"); foreach (var action in _installModLoaderDependencies) { action.Execute(); @@ -276,7 +277,7 @@ private void uninstallAll_Click(object sender, EventArgs e) { try { - _log.log("Uninstalling everything ..."); + _log.Log("Uninstalling everything ..."); if (_deleteModsAction != null) { _deleteModsAction.Execute(); diff --git a/Installer/InstallerGUI/InstallerGUI.csproj b/Installer/InstallerGUI/InstallerGUI.csproj index b9b8653..6270744 100644 --- a/Installer/InstallerGUI/InstallerGUI.csproj +++ b/Installer/InstallerGUI/InstallerGUI.csproj @@ -30,8 +30,8 @@ Gnoll false true - 1 - 1.12.0.%2a + 6 + 1.13.0.%2a true true false @@ -73,7 +73,7 @@ false - 9A1C6599CD964D9DD477A74B79603530ED4C30BA + 540406EFF9A897154AFE140C09F04DABEBC66A3F cert.pfx diff --git a/Installer/InstallerGUI/Properties/AssemblyInfo.cs b/Installer/InstallerGUI/Properties/AssemblyInfo.cs index a49b514..ee21c72 100644 --- a/Installer/InstallerGUI/Properties/AssemblyInfo.cs +++ b/Installer/InstallerGUI/Properties/AssemblyInfo.cs @@ -8,7 +8,7 @@ [assembly: AssemblyTitle("InstallerGUI")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] +[assembly: AssemblyCompany("https://github.com/Nefaro/gnoll")] [assembly: AssemblyProduct("InstallerGUI")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("1.13.0.0")] +[assembly: AssemblyFileVersion("1.13.0.0")] diff --git a/patch/Gnoll1.1x_016e6239.xdelta b/patch/Gnoll1.0x_016e6239.xdelta similarity index 100% rename from patch/Gnoll1.1x_016e6239.xdelta rename to patch/Gnoll1.0x_016e6239.xdelta diff --git a/Installer/InstallerCore/Payloads/G1900_c9f6d4b9.xdelta b/patch/Gnoll1.0x_c9f6d4b9.xdelta similarity index 100% rename from Installer/InstallerCore/Payloads/G1900_c9f6d4b9.xdelta rename to patch/Gnoll1.0x_c9f6d4b9.xdelta diff --git a/patch/Gnoll1.13_016e6239.xdelta b/patch/Gnoll1.13_016e6239.xdelta new file mode 100644 index 0000000..71eaf9f Binary files /dev/null and b/patch/Gnoll1.13_016e6239.xdelta differ diff --git a/patch/Gnoll1.1x_c9f6d4b9.xdelta b/patch/Gnoll1.13_c9f6d4b9.xdelta similarity index 83% rename from patch/Gnoll1.1x_c9f6d4b9.xdelta rename to patch/Gnoll1.13_c9f6d4b9.xdelta index c475b09..1aaac33 100644 Binary files a/patch/Gnoll1.1x_c9f6d4b9.xdelta and b/patch/Gnoll1.13_c9f6d4b9.xdelta differ diff --git a/patch/patchinfo.json b/patch/patchinfo.json index 1c1b5c7..8048f7f 100644 --- a/patch/patchinfo.json +++ b/patch/patchinfo.json @@ -7,25 +7,30 @@ { "version": 9, "versionString":"G1.9", - "filename": "Gnoll1.1x_016e6239.xdelta" + "filename": "Gnoll1.0x_016e6239.xdelta" }, { "version": 10, "versionString":"G1.10", - "filename": "Gnoll1.1x_016e6239.xdelta" + "filename": "Gnoll1.0x_016e6239.xdelta" }, { "version": 11, "versionString":"G1.11", - "filename": "Gnoll1.1x_016e6239.xdelta" + "filename": "Gnoll1.0x_016e6239.xdelta" }, { "version": 12, "versionString":"G1.12", - "filename": "Gnoll1.1x_016e6239.xdelta" - } + "filename": "Gnoll1.0x_016e6239.xdelta" + }, + { + "version": 13, + "versionString":"G1.13", + "filename": "Gnoll1.13_016e6239.xdelta" + } ], - "latestVersion":"G1.12" + "latestVersion":"G1.13" }, { "name": "v1.0 (Steam 2019)", @@ -34,34 +39,39 @@ "patches": [{ "version": 7, "versionString":"G1.7", - "filename": "Gnoll1.1x_c9f6d4b9.xdelta" + "filename": "Gnoll1.0x_c9f6d4b9.xdelta" }, { "version": 8, "versionString":"G1.8", - "filename": "Gnoll1.1x_c9f6d4b9.xdelta" + "filename": "Gnoll1.0x_c9f6d4b9.xdelta" }, { "version": 9, "versionString":"G1.9", - "filename": "Gnoll1.1x_c9f6d4b9.xdelta" + "filename": "Gnoll1.0x_c9f6d4b9.xdelta" }, { "version": 10, "versionString":"G1.10", - "filename": "Gnoll1.1x_c9f6d4b9.xdelta" + "filename": "Gnoll1.0x_c9f6d4b9.xdelta" }, { "version": 11, "versionString":"G1.11", - "filename": "Gnoll1.1x_c9f6d4b9.xdelta" + "filename": "Gnoll1.0x_c9f6d4b9.xdelta" }, { "version": 12, "versionString":"G1.12", - "filename": "Gnoll1.1x_c9f6d4b9.xdelta" + "filename": "Gnoll1.0x_c9f6d4b9.xdelta" + }, + { + "version": 13, + "versionString":"G1.13", + "filename": "Gnoll1.13_c9f6d4b9.xdelta" } ], - "latestVersion":"G1.12" + "latestVersion":"G1.13" } ] \ No newline at end of file