From 539c42377fcedd7b767a0e334e68cec82022d24d Mon Sep 17 00:00:00 2001 From: Tosox <57193602+Tosox@users.noreply.github.com> Date: Thu, 28 May 2026 16:54:34 +0200 Subject: [PATCH 1/2] fix: Load screen file from correct path --- README.md | 5 ++-- .../Art/UI/Screens/modconfigui.screen | 0 res/resource.rc | 8 +++---- src/UiInterop.cpp | 24 ++++++++----------- 4 files changed, 17 insertions(+), 20 deletions(-) rename res/cohmodconfigui_data/Art/UI/Screens/cohmodconfigui.screen => data/modconfigui/Art/UI/Screens/modconfigui.screen (100%) diff --git a/README.md b/README.md index 9e35127..3179a37 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,9 @@ Mod Config UI is a mod for `Company of Heroes Relaunch` built on top of `CoHModS 1. Install the `CoHModSDK` loader in your game directory 2. Copy `ModConfigUI.dll` into the `mods` folder -3. Add `ModConfigUI.dll` to `CoHModSDKLoader.ini` -4. Start the game +3. Copy `data\modconfigui` into `ModSDK\data\modconfigui` +4. Add `ModConfigUI.dll` to `CoHModSDKLoader.ini` +5. Start the game ## 🛠️ Building diff --git a/res/cohmodconfigui_data/Art/UI/Screens/cohmodconfigui.screen b/data/modconfigui/Art/UI/Screens/modconfigui.screen similarity index 100% rename from res/cohmodconfigui_data/Art/UI/Screens/cohmodconfigui.screen rename to data/modconfigui/Art/UI/Screens/modconfigui.screen diff --git a/res/resource.rc b/res/resource.rc index c4f4649..b02bc00 100644 --- a/res/resource.rc +++ b/res/resource.rc @@ -61,8 +61,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,2,0,0 - PRODUCTVERSION 0,2,0,0 + FILEVERSION 0,3,0,0 + PRODUCTVERSION 0,3,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -79,12 +79,12 @@ BEGIN BEGIN VALUE "CompanyName", "Tosox" VALUE "FileDescription", "Adds an ingame menu for mod settings configuration" - VALUE "FileVersion", "0.2.0" + VALUE "FileVersion", "0.3.0" VALUE "InternalName", "ModConfigUI" VALUE "LegalCopyright", "Copyright 2026" VALUE "OriginalFilename", "ModConfigUI.dll" VALUE "ProductName", "ModConfigUI" - VALUE "ProductVersion", "0.2.0" + VALUE "ProductVersion", "0.3.0" END END BLOCK "VarFileInfo" diff --git a/src/UiInterop.cpp b/src/UiInterop.cpp index e7d8592..820fa1c 100644 --- a/src/UiInterop.cpp +++ b/src/UiInterop.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -31,8 +32,7 @@ namespace ConfigUi::Frontend { constexpr int kStreamModeRead = 1; constexpr char kFileOverrideAlias[] = "DATA"; constexpr char kFileOverrideSubPath[] = ""; - constexpr wchar_t kScreenFileRelativeDir[] = L"mods\\cohmodconfigui_data\\"; - constexpr char kScreenFileName[] = "cohmodconfigui"; + constexpr char kScreenDataRelativeDir[] = "data\\modconfigui\\"; using FilePathHDCreateFn = void* (__stdcall*)(const wchar_t* path, int streamMode); using FilePathAddAliasFn = bool(__stdcall*)(const char* alias, const char* subPath, long priority, void* source); @@ -49,7 +49,7 @@ namespace ConfigUi::Frontend { constexpr char kCheckButtonWidgetTypeName[] = "CheckButton"; constexpr char kTextLabelWidgetTypeName[] = "TextLabel"; constexpr char kScrollBarWidgetTypeName[] = "ScrollBar"; - constexpr char kScreenName[] = "cohmodconfigui"; + constexpr char kScreenName[] = "modconfigui"; constexpr char kTemplateScreenName[] = "prompt_performance_test"; constexpr char kTemplatePanelWidgetName[] = "perfGrp"; constexpr char kTemplateLabelWidgetName[] = "minimumResults"; @@ -1496,21 +1496,17 @@ namespace ConfigUi::Frontend { return false; } - // Build absolute path to our data directory next to the game executable. - wchar_t gameDir[MAX_PATH] = {}; - const DWORD len = GetModuleFileNameW(nullptr, gameDir, MAX_PATH); - if ((len == 0u) || (len >= MAX_PATH)) { - LogError("Mod Config UI could not determine the game directory."); + const CoHModSDKRuntimeInfoV1* runtimeInfo = ModSDK::Runtime::GetInfo(); + if ((runtimeInfo == nullptr) || (runtimeInfo->loaderDirectory == nullptr) || (*runtimeInfo->loaderDirectory == '\0')) { + LogError("Mod Config UI could not determine the SDK directory."); return false; } - // Strip executable name to get directory. - wchar_t* lastSlash = wcsrchr(gameDir, L'\\'); - if (lastSlash != nullptr) { - *(lastSlash + 1) = L'\0'; + std::filesystem::path dataPath = std::filesystem::path(runtimeInfo->loaderDirectory) / kScreenDataRelativeDir; + std::wstring dataDir = dataPath.wstring(); + if (!dataDir.empty() && (dataDir.back() != L'\\') && (dataDir.back() != L'/')) { + dataDir.push_back(L'\\'); } - - std::wstring dataDir = std::wstring(gameDir) + kScreenFileRelativeDir; { std::string narrowDir(dataDir.size(), '\0'); for (size_t i = 0; i < dataDir.size(); ++i) narrowDir[i] = static_cast(dataDir[i]); From fb42fc3dc815a2c2279161a7e874e3dc20206cde Mon Sep 17 00:00:00 2001 From: Tosox <57193602+Tosox@users.noreply.github.com> Date: Tue, 2 Jun 2026 19:45:10 +0200 Subject: [PATCH 2/2] chore: Bump version --- res/resource.rc | 8 ++++---- src/ModConfigUI.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/res/resource.rc b/res/resource.rc index b02bc00..2972885 100644 --- a/res/resource.rc +++ b/res/resource.rc @@ -61,8 +61,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,3,0,0 - PRODUCTVERSION 0,3,0,0 + FILEVERSION 0,2,1,0 + PRODUCTVERSION 0,2,1,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -79,12 +79,12 @@ BEGIN BEGIN VALUE "CompanyName", "Tosox" VALUE "FileDescription", "Adds an ingame menu for mod settings configuration" - VALUE "FileVersion", "0.3.0" + VALUE "FileVersion", "0.2.1" VALUE "InternalName", "ModConfigUI" VALUE "LegalCopyright", "Copyright 2026" VALUE "OriginalFilename", "ModConfigUI.dll" VALUE "ProductName", "ModConfigUI" - VALUE "ProductVersion", "0.3.0" + VALUE "ProductVersion", "0.2.1" END END BLOCK "VarFileInfo" diff --git a/src/ModConfigUI.cpp b/src/ModConfigUI.cpp index 162fdd5..7a82bef 100644 --- a/src/ModConfigUI.cpp +++ b/src/ModConfigUI.cpp @@ -8,7 +8,7 @@ namespace { constexpr char kModId[] = "de.tosox.modconfigui"; constexpr char kModName[] = "Mod Config UI"; - constexpr char kModVersion[] = "0.1.0"; + constexpr char kModVersion[] = "0.2.1"; constexpr char kModAuthor[] = "Tosox"; constexpr char kTestCategory[] = "UI Test";