From f4325a73f52b731750a301e02a0ea13c5ac9fa05 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Thu, 16 Jan 2025 05:44:12 +0100 Subject: [PATCH] #383 add support for Dark Colony --- build.cmd | 2 +- inc/config.h | 1 + inc/dllmain.h | 1 + src/config.c | 6 ++++++ src/dllmain.c | 5 +++++ src/winapi_hooks.c | 8 ++++++++ 6 files changed, 22 insertions(+), 1 deletion(-) diff --git a/build.cmd b/build.cmd index 801abe4..8f1fdbb 100644 --- a/build.cmd +++ b/build.cmd @@ -9,7 +9,7 @@ set GIT6=C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\ set PATH=C:\w64devkit\bin;%GIT1%;%GIT2%;%GIT3%;%GIT4%;%GIT5%;%GIT6%;%PATH% -make clean + make _WIN32_WINNT=0x0400 pause diff --git a/inc/config.h b/inc/config.h index a353aa8..e15bece 100644 --- a/inc/config.h +++ b/inc/config.h @@ -106,6 +106,7 @@ typedef struct CNCDDRAWCONFIG BOOL carma95_hack; BOOL sirtech_hack; BOOL flightsim98_hack; + BOOL darkcolony_hack; } CNCDDRAWCONFIG; diff --git a/inc/dllmain.h b/inc/dllmain.h index f7e028b..13039f8 100644 --- a/inc/dllmain.h +++ b/inc/dllmain.h @@ -31,6 +31,7 @@ typedef BOOL(__stdcall* SETPROCESSDPIAWARENESSCONTEXTPROC)(DPI_AWARENESS_CONTEXT #if (_WIN32_WINNT < _WIN32_WINNT_WINXP) #define SetThreadExecutionState(a) +#define DisableProcessWindowsGhosting() #endif #endif diff --git a/src/config.c b/src/config.c index d624aa9..51e0814 100644 --- a/src/config.c +++ b/src/config.c @@ -116,6 +116,7 @@ void cfg_load() GET_BOOL(g_config.carma95_hack, "carma95_hack", FALSE); GET_BOOL(g_config.sirtech_hack, "sirtech_hack", FALSE); GET_BOOL(g_config.flightsim98_hack, "flightsim98_hack", FALSE); + GET_BOOL(g_config.darkcolony_hack, "darkcolony_hack", FALSE); GameHandlesClose = GameHandlesClose || g_config.infantryhack; @@ -874,6 +875,11 @@ static void cfg_create_ini() "[corsairs]\n" "adjmouse=true\n" "\n" + "; Dark Colony\n" + "[dc16]\n" + "maxgameticks=30\n" + "darkcolony_hack=true\n" + "\n" "; Divine Divinity\n" "[div]\n" "resolutions=2\n" diff --git a/src/dllmain.c b/src/dllmain.c index 8832177..e596372 100644 --- a/src/dllmain.c +++ b/src/dllmain.c @@ -57,6 +57,11 @@ BOOL WINAPI DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved) g_dbg_exception_handle = add_handler(1, (PVECTORED_EXCEPTION_HANDLER)dbg_vectored_exception_handler); } + if (g_config.darkcolony_hack) + { + DisableProcessWindowsGhosting(); + } + char buf[1024]; if (GetEnvironmentVariable("__COMPAT_LAYER", buf, sizeof(buf))) diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c index c0705f7..c44cd3a 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -2046,6 +2046,14 @@ HWND WINAPI fake_CreateWindowExA( dwStyle &= ~WS_POPUP; } + /* Dark Colony */ + if (HIWORD(lpClassName) && _strcmpi(lpClassName, "Merc Direct Draw Driver") == 0 && + lpWindowName && _strcmpi(lpWindowName, "Direct Draw Driver") == 0 && + !dwExStyle) + { + dwExStyle |= WS_EX_APPWINDOW; + } + /* Fallout 1/2 */ if (HIWORD(lpClassName) && _strcmpi(lpClassName, "GNW95 Class") == 0 && lpWindowName && strstr(lpWindowName, "FALLOUT"))