diff --git a/config/ConfigFormUnit.cpp b/config/ConfigFormUnit.cpp index 6ea9a24..3954825 100644 --- a/config/ConfigFormUnit.cpp +++ b/config/ConfigFormUnit.cpp @@ -43,7 +43,12 @@ void __fastcall TConfigForm::CreateParams(TCreateParams & Params) void __fastcall TConfigForm::LanguageImgClick(TObject *Sender) { - auto *ini = new TIniFile(GAME_PATH + "ddraw.ini"); + auto iniPath = System::Sysutils::GetEnvironmentVariable( + "CNC_DDRAW_CONFIG_FILE"); + + auto *ini = + new TIniFile(iniPath.Length() ? iniPath : GAME_PATH + "ddraw.ini"); + ini->WriteString("ddraw", "configlang", IsEnglish ? "auto" : "english"); delete ini; @@ -60,7 +65,12 @@ void __fastcall TConfigForm::LanguageImgClick(TObject *Sender) void __fastcall TConfigForm::ThemePnlClick(TObject *Sender) { - auto *ini = new TIniFile(GAME_PATH + "ddraw.ini"); + auto iniPath = System::Sysutils::GetEnvironmentVariable( + "CNC_DDRAW_CONFIG_FILE"); + + auto *ini = + new TIniFile(iniPath.Length() ? iniPath : GAME_PATH + "ddraw.ini"); + auto theme = ThemePnl->Color == (TColor)RGB(31, 31, 31) ? "Cobalt XEMedia" : "Windows10"; @@ -89,7 +99,10 @@ void __fastcall TConfigForm::RestoreDefaultsBtnClick(TObject *Sender) return; } - DeleteFile(GAME_PATH + "ddraw.ini"); + auto iniPath = System::Sysutils::GetEnvironmentVariable( + "CNC_DDRAW_CONFIG_FILE"); + + DeleteFile(iniPath.Length() ? iniPath : GAME_PATH + "ddraw.ini"); ShellExecute( NULL, @@ -671,8 +684,12 @@ void __fastcall TConfigForm::CompatibilityBtnClick(TObject *Sender) void __fastcall TConfigForm::FormCreate(TObject *Sender) { + auto iniPath = System::Sysutils::GetEnvironmentVariable( + "CNC_DDRAW_CONFIG_FILE"); + /* Let cnc-ddraw create a new ddraw.ini if it doesn't exist */ - if (FileExists(GAME_PATH + "ddraw.dll") && !FileExists(GAME_PATH + "ddraw.ini")) { + if (FileExists(GAME_PATH + "ddraw.dll") && + !FileExists(iniPath.Length() ? iniPath : GAME_PATH + "ddraw.ini")) { SetEnvironmentVariableW(L"cnc_ddraw_config_init", L"1"); @@ -696,7 +713,8 @@ void __fastcall TConfigForm::FormCreate(TObject *Sender) } } - auto *ini = new TIniFile(GAME_PATH + "ddraw.ini"); + auto *ini = + new TIniFile(iniPath.Length() ? iniPath : GAME_PATH + "ddraw.ini"); if (ini->ReadString("ddraw", "configtheme", "Windows10") == "Cobalt XEMedia") { @@ -905,7 +923,7 @@ void __fastcall TConfigForm::FormCreate(TObject *Sender) RestoreDefaultsBtn->Visible = FileExists(GAME_PATH + "ddraw.dll") && - FileExists(GAME_PATH + "ddraw.ini") && + FileExists(iniPath.Length() ? iniPath : GAME_PATH + "ddraw.ini") && GetBool(ini, "allow_reset", true); delete ini; @@ -918,7 +936,11 @@ void TConfigForm::SaveSettings() if (!Initialized) return; - auto *ini = new TIniFile(GAME_PATH + "ddraw.ini"); + auto iniPath = System::Sysutils::GetEnvironmentVariable( + "CNC_DDRAW_CONFIG_FILE"); + + auto *ini = + new TIniFile(iniPath.Length() ? iniPath : GAME_PATH + "ddraw.ini"); /* Display Settings */ diff --git a/config/cnc-ddraw config.cpp b/config/cnc-ddraw config.cpp index 0760b13..4c3dd33 100644 --- a/config/cnc-ddraw config.cpp +++ b/config/cnc-ddraw config.cpp @@ -35,7 +35,12 @@ int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) return 0; } - auto *ini = new TIniFile(GAME_PATH + "ddraw.ini"); + auto iniPath = System::Sysutils::GetEnvironmentVariable( + "CNC_DDRAW_CONFIG_FILE"); + + auto *ini = + new TIniFile(iniPath.Length() ? iniPath : GAME_PATH + "ddraw.ini"); + auto theme = ini->ReadString("ddraw", "configtheme", "Windows10"); TStyleManager::TrySetStyle( diff --git a/inc/version.h b/inc/version.h index 47df2cf..7d4039c 100644 --- a/inc/version.h +++ b/inc/version.h @@ -7,7 +7,7 @@ #define VERSION_MAJOR 6 #define VERSION_MINOR 0 #define VERSION_BUILD 0 -#define VERSION_REVISION 4 +#define VERSION_REVISION 5 #define VERSION VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD, VERSION_REVISION #define VERSION_STRING ver_str(VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD, VERSION_REVISION) diff --git a/src/config.c b/src/config.c index 5cf7718..185b2aa 100644 --- a/src/config.c +++ b/src/config.c @@ -1090,26 +1090,27 @@ static void cfg_init() } } - /* set up settings ini */ - - if (strlen(g_config.game_path) > 0) + if (!GetEnvironmentVariableA("CNC_DDRAW_CONFIG_FILE", g_config.ini_path, sizeof(g_config.ini_path) - 1)) { - _snprintf(g_config.ini_path, sizeof(g_config.ini_path) - 1, "%sddraw.ini", g_config.game_path); - - if (GetFileAttributes(g_config.ini_path) == INVALID_FILE_ATTRIBUTES) + if (strlen(g_config.game_path) > 0) { - cfg_create_ini(); - } + _snprintf(g_config.ini_path, sizeof(g_config.ini_path) - 1, "%sddraw.ini", g_config.game_path); - if (GetFileAttributes(g_config.ini_path) == INVALID_FILE_ATTRIBUTES) + if (GetFileAttributes(g_config.ini_path) == INVALID_FILE_ATTRIBUTES) + { + cfg_create_ini(); + } + + if (GetFileAttributes(g_config.ini_path) == INVALID_FILE_ATTRIBUTES) + { + strncpy(g_config.ini_path, ".\\ddraw.ini", sizeof(g_config.ini_path) - 1); + } + } + else { strncpy(g_config.ini_path, ".\\ddraw.ini", sizeof(g_config.ini_path) - 1); } } - else - { - strncpy(g_config.ini_path, ".\\ddraw.ini", sizeof(g_config.ini_path) - 1); - } if (GetFileAttributes(g_config.ini_path) == INVALID_FILE_ATTRIBUTES) {