diff --git a/TES3Merge/TES3Merge.ini b/TES3Merge/TES3Merge.ini index 62fa0a4..5e3d7a4 100644 --- a/TES3Merge/TES3Merge.ini +++ b/TES3Merge/TES3Merge.ini @@ -18,6 +18,10 @@ TextEncodingCode = 1252 ; * Have Morrowind's install path in your registry. This only functions on Windows, and will not find OpenMW installations. ; InstallPath = +; The folder in which Merged Objects.esp will be saved. +; If unset, TES3Merge will save Merged Objects.esp to Morrowind's Data Files folder, or a `data-local` folder defined by an openmw.cfg. +; OutputFile = + ; Blacklist a file from merging. Set a filename to false to ignore it when merging. [FileFilters] ; Tamriel_Data.esm = false diff --git a/TES3Merge/Util/Installation.cs b/TES3Merge/Util/Installation.cs index dad4275..9e81d27 100644 --- a/TES3Merge/Util/Installation.cs +++ b/TES3Merge/Util/Installation.cs @@ -528,6 +528,21 @@ private void LoadConfiguration(string configDir) case "resources": ResourcesDirectory = ParseDataDirectory(configDir, value); break; + case "replace": + if (value == "content") + GameFiles.Clear(); + else if (value == "data") + DataDirectories.Clear(); + else if (value == "config") + { + Archives.Clear(); + DataDirectories.Clear(); + GameFiles.Clear(); + subConfigs.Clear(); + ResourcesDirectory = null; + DataLocalDirectory = null; + } + break; } } @@ -604,8 +619,20 @@ public override string GetDefaultOutputDirectory() if (DataDirectories.Count == 0) throw new Exception("No data directories defined. No default output directory could be resolved."); - var outputDirIndex = string.IsNullOrEmpty(DataLocalDirectory) ? 0 : DataDirectories.Count - 1; - - return DataDirectories[outputDirIndex]; + if (!string.IsNullOrEmpty(DataLocalDirectory)) + { + // DataLocalDirectory is always added last + return DataDirectories[^1]; + } + else if (!string.IsNullOrEmpty(ResourcesDirectory) && DataDirectories.Count > 1) + { + // ResourcesDirectory is inserted at index 0, so skip it + return DataDirectories[1]; + } + else + { + // No ResourcesDirectory, so use the first data directory + return DataDirectories[0]; + } } } diff --git a/TES3Merge/Util/Util.cs b/TES3Merge/Util/Util.cs index 308c249..9229a6a 100644 --- a/TES3Merge/Util/Util.cs +++ b/TES3Merge/Util/Util.cs @@ -136,6 +136,14 @@ internal static void LoadConfig() if (!File.Exists(iniPath)) iniPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TES3Merge.ini"); + if (!File.Exists(iniPath)) + iniPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "tes3merge", "TES3Merge.ini"); + + if (!File.Exists(iniPath)) + { + throw new Exception("TES3Merge was unable to locate a configuration file in any possible location. Aborting."); + } + Configuration = parser.ReadFile(iniPath); }