diff --git a/Wabbajack.Lib/MO2Compiler.cs b/Wabbajack.Lib/MO2Compiler.cs
index 62fdbe46..16a90de3 100644
--- a/Wabbajack.Lib/MO2Compiler.cs
+++ b/Wabbajack.Lib/MO2Compiler.cs
@@ -535,6 +535,7 @@ namespace Wabbajack.Lib
new IgnoreStartsWith(this, Path.Combine(Consts.GameFolderFilesDir, "Papyrus Compiler")),
new IgnoreStartsWith(this, Path.Combine(Consts.GameFolderFilesDir, "Skyrim")),
new IgnoreRegex(this, Consts.GameFolderFilesDir + "\\\\.*\\.bsa"),
+ new IncludeRegex(this, "^[^\\\\]*\\.bat$"),
new IncludeModIniData(this),
new DirectMatch(this),
new IncludeTaggedMods(this, Consts.WABBAJACK_INCLUDE),
diff --git a/Wabbajack.Lib/MO2Installer.cs b/Wabbajack.Lib/MO2Installer.cs
index acb2238b..a5426975 100644
--- a/Wabbajack.Lib/MO2Installer.cs
+++ b/Wabbajack.Lib/MO2Installer.cs
@@ -315,16 +315,32 @@ namespace Wabbajack.Lib
{
var parser = new FileIniDataParser(new IniDataParser(config));
var data = parser.ReadFile(file);
- if (data.Sections["Display"] == null)
- return;
-
- if (data.Sections["Display"]["iSize W"] != null && data.Sections["Display"]["iSize H"] != null)
+ bool modified = false;
+ if (data.Sections["Display"] != null)
{
- data.Sections["Display"]["iSize W"] = SystemParameters.ScreenWidth.ToString(CultureInfo.CurrentCulture);
- data.Sections["Display"]["iSize H"] = SystemParameters.ScreenHeight.ToString(CultureInfo.CurrentCulture);
+
+ if (data.Sections["Display"]["iSize W"] != null && data.Sections["Display"]["iSize H"] != null)
+ {
+ data.Sections["Display"]["iSize W"] =
+ SystemParameters.ScreenWidth.ToString(CultureInfo.CurrentCulture);
+ data.Sections["Display"]["iSize H"] =
+ SystemParameters.ScreenHeight.ToString(CultureInfo.CurrentCulture);
+ modified = true;
+ }
+
+ }
+ if (data.Sections["MEMORY"] != null)
+ {
+ if (data.Sections["MEMORY"]["VideoMemorySizeMb"] != null)
+ {
+ data.Sections["MEMORY"]["VideoMemorySizeMb"] =
+ SystemParameters.EnbLEVRAMSize.ToString(CultureInfo.CurrentCulture);
+ modified = true;
+ }
}
- parser.WriteFile(file, data);
+ if (modified)
+ parser.WriteFile(file, data);
}
catch (Exception ex)
{
diff --git a/Wabbajack.Lib/SystemParameters.cs b/Wabbajack.Lib/SystemParameters.cs
index ceec3d09..15b6a39e 100644
--- a/Wabbajack.Lib/SystemParameters.cs
+++ b/Wabbajack.Lib/SystemParameters.cs
@@ -1,8 +1,23 @@
-namespace Wabbajack.Lib
+using System;
+
+namespace Wabbajack.Lib
{
public class SystemParameters
{
+ private static long ToMB(long input)
+ {
+ // KB MB
+ return input / 1024 / 1024;
+ }
+
public int ScreenHeight { get; set; }
public int ScreenWidth { get; set; }
+ public long VideoMemorySize { get; set; }
+ public long SystemMemorySize { get; set; }
+
+ ///
+ /// Value used in LE ENBs for VideoMemorySizeMb
+ ///
+ public long EnbLEVRAMSize => Math.Min(ToMB(SystemMemorySize) + ToMB(VideoMemorySize), 10240);
}
}
diff --git a/Wabbajack.Test/EndToEndTests.cs b/Wabbajack.Test/EndToEndTests.cs
index 0257634b..86e8c49b 100644
--- a/Wabbajack.Test/EndToEndTests.cs
+++ b/Wabbajack.Test/EndToEndTests.cs
@@ -78,6 +78,11 @@ namespace Wabbajack.Test
"[General]",
$"matchAll= {Path.GetFileName(modfiles[2].Download)}"
});
+
+ File.WriteAllLines(Path.Combine(utils.MO2Folder, "startup.bat"), new []
+ {
+ "ModOrganizer2.exe SKSE"
+ });
var modlist = await CompileAndInstall(profile);
diff --git a/Wabbajack.Test/SanityTests.cs b/Wabbajack.Test/SanityTests.cs
index 6651c2f9..3b4f30c6 100644
--- a/Wabbajack.Test/SanityTests.cs
+++ b/Wabbajack.Test/SanityTests.cs
@@ -8,6 +8,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
using Wabbajack.Common;
using Wabbajack.Lib;
using Wabbajack.Lib.CompilationSteps.CompilationErrors;
+using Wabbajack.Util;
using File = Alphaleonis.Win32.Filesystem.File;
using Path = Alphaleonis.Win32.Filesystem.Path;
@@ -197,15 +198,20 @@ namespace Wabbajack.Test
"iSize H=3",
"iSize W=-200",
"[Display]",
- "foo=4"
+ "foo=4",
+ "[MEMORY]",
+ "VideoMemorySizeMb=22"
});
var modlist = await CompileAndInstall(profile);
var ini = Path.Combine(utils.InstallFolder, "profiles", profile, "somegameprefs.ini").LoadIniFile();
+ var sysinfo = SystemParametersConstructor.Create();
+
Assert.AreEqual(System.Windows.SystemParameters.PrimaryScreenHeight.ToString(), ini?.Display?["iSize H"]);
Assert.AreEqual(System.Windows.SystemParameters.PrimaryScreenWidth.ToString(), ini?.Display?["iSize W"]);
+ Assert.AreEqual(sysinfo.EnbLEVRAMSize.ToString(), ini?.MEMORY?["VideoMemorySizeMb"]);
}
[TestMethod]
diff --git a/Wabbajack/App.xaml.cs b/Wabbajack/App.xaml.cs
index ef0eb1c2..4802311a 100644
--- a/Wabbajack/App.xaml.cs
+++ b/Wabbajack/App.xaml.cs
@@ -6,6 +6,7 @@ using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using Wabbajack.Common;
+using Wabbajack.Util;
namespace Wabbajack
{
diff --git a/Wabbajack/Util/SystemParametersConstructor.cs b/Wabbajack/Util/SystemParametersConstructor.cs
index 6c5d7be8..977c6740 100644
--- a/Wabbajack/Util/SystemParametersConstructor.cs
+++ b/Wabbajack/Util/SystemParametersConstructor.cs
@@ -5,6 +5,7 @@ using System.Runtime.InteropServices;
using MahApps.Metro.Controls;
using Microsoft.VisualBasic;
using PInvoke;
+using SharpDX.DXGI;
using Wabbajack.Lib;
using static PInvoke.User32;
using static PInvoke.Gdi32;
@@ -44,10 +45,17 @@ namespace Wabbajack.Util
public static SystemParameters Create()
{
var (width, height, _) = GetDisplays().First(d => d.IsPrimary);
+
+ using var f = new Factory1();
+ var video_memory = f.Adapters1.Select(a =>
+ Math.Max(a.Description.DedicatedSystemMemory, (long)a.Description.DedicatedVideoMemory)).Max();
+ var memory = Common.Utils.GetMemoryStatus();
return new SystemParameters
{
ScreenWidth = width,
- ScreenHeight = height
+ ScreenHeight = height,
+ VideoMemorySize = video_memory,
+ SystemMemorySize = (long)memory.ullTotalPhys
};
}
}
diff --git a/Wabbajack/Views/MainWindow.xaml.cs b/Wabbajack/Views/MainWindow.xaml.cs
index ebfb03f8..bfa05634 100644
--- a/Wabbajack/Views/MainWindow.xaml.cs
+++ b/Wabbajack/Views/MainWindow.xaml.cs
@@ -7,6 +7,7 @@ using MahApps.Metro.Controls;
using Newtonsoft.Json;
using Wabbajack.Common;
using Wabbajack.Lib.LibCefHelpers;
+using Wabbajack.Util;
using Application = System.Windows.Application;
using Utils = Wabbajack.Common.Utils;
@@ -31,6 +32,9 @@ namespace Wabbajack
};
Utils.Log($"Wabbajack Build - {ThisAssembly.Git.Sha}");
+ var p = SystemParametersConstructor.Create();
+ Utils.Log(
+ $"System settings - ({p.SystemMemorySize.ToFileSizeString()} RAM), Display: {p.ScreenWidth} x {p.ScreenHeight} ({p.VideoMemorySize.ToFileSizeString()} VRAM - VideoMemorySizeMb={p.EnbLEVRAMSize})");
// Run logic to associate wabbajack lists with this app in the background
Task.Run(async () =>
diff --git a/Wabbajack/Wabbajack.csproj b/Wabbajack/Wabbajack.csproj
index 3b6ae40a..b1089227 100644
--- a/Wabbajack/Wabbajack.csproj
+++ b/Wabbajack/Wabbajack.csproj
@@ -71,6 +71,7 @@
+