From ab88cb0bc4d35d50af65914aab3187bf1e4c5999 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 17 Mar 2024 22:23:39 +0100 Subject: [PATCH 1/9] experimental WinBolo support --- src/dd.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/dd.c b/src/dd.c index 909310e..683d43c 100644 --- a/src/dd.c +++ b/src/dd.c @@ -931,15 +931,17 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl AdjustWindowRectEx(&dst, style, GetMenu(g_ddraw->hwnd) != NULL, exstyle); - real_SetWindowPos( - g_ddraw->hwnd, - HWND_NOTOPMOST, - dst.left, - dst.top, - (dst.right - dst.left), - (dst.bottom - dst.top), - SWP_SHOWWINDOW | SWP_FRAMECHANGED); - + if (!(dwFlags & 8)) + { + real_SetWindowPos( + g_ddraw->hwnd, + HWND_NOTOPMOST, + dst.left, + dst.top, + (dst.right - dst.left), + (dst.bottom - dst.top), + SWP_SHOWWINDOW | SWP_FRAMECHANGED); + } BOOL d3d9_active = FALSE; @@ -1103,7 +1105,12 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) if (hwnd == NULL) { - return DD_OK; + if (dwFlags & DDSCL_NORMAL) + { + hwnd = *(HWND*)0x46B4D8; + } + else + return DD_OK; } if (g_ddraw->hwnd == NULL) @@ -1215,6 +1222,13 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) { dd_SetDisplayMode(640, 480, 16, 0); } + else + { + g_config.devmode = TRUE; + g_config.fullscreen = FALSE; + g_config.windowed = TRUE; + dd_SetDisplayMode(513, 319, 32, 8); + } } return DD_OK; From 559232eb85d10e68d8dbe706ccf88a85e40ae693 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 17 Mar 2024 22:47:13 +0100 Subject: [PATCH 2/9] fix window size --- src/dd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dd.c b/src/dd.c index 683d43c..1fd4ae5 100644 --- a/src/dd.c +++ b/src/dd.c @@ -1227,7 +1227,7 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) g_config.devmode = TRUE; g_config.fullscreen = FALSE; g_config.windowed = TRUE; - dd_SetDisplayMode(513, 319, 32, 8); + dd_SetDisplayMode(523, 377, 32, 8); } } From 38c0f9e9894f04316e57599f5ab612294487187a Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 17 Mar 2024 22:51:13 +0100 Subject: [PATCH 3/9] Revert "fix window size" This reverts commit 559232eb85d10e68d8dbe706ccf88a85e40ae693. --- src/dd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dd.c b/src/dd.c index 1fd4ae5..683d43c 100644 --- a/src/dd.c +++ b/src/dd.c @@ -1227,7 +1227,7 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) g_config.devmode = TRUE; g_config.fullscreen = FALSE; g_config.windowed = TRUE; - dd_SetDisplayMode(523, 377, 32, 8); + dd_SetDisplayMode(513, 319, 32, 8); } } From f6f3c762e6a087aa343a5e0888f07762501584e2 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 17 Mar 2024 23:36:27 +0100 Subject: [PATCH 4/9] add temporary hack for testing - Fixes bad winodw size --- src/wndproc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/wndproc.c b/src/wndproc.c index b4451b8..7dfe6be 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -446,6 +446,14 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN); } + static BOOL initialized = FALSE; + + if (!initialized && LOWORD(lParam) == 503 && HIWORD(lParam) == 309) + { + initialized = TRUE; + dd_SetDisplayMode(513, 319, 32, 0); + } + return DefWindowProc(hWnd, uMsg, wParam, lParam); /* Carmageddon fix */ } case WM_MOVE: From e6ef861cfd164947b012cd0b44d83d804faaffc4 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Mon, 18 Mar 2024 00:16:38 +0100 Subject: [PATCH 5/9] fix keyboard not working with devmode TRUE --- src/directinput.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/directinput.c b/src/directinput.c index 2647d6a..b21578c 100644 --- a/src/directinput.c +++ b/src/directinput.c @@ -69,7 +69,7 @@ static HRESULT WINAPI fake_did_GetDeviceData( HRESULT result = real_did_GetDeviceData(This, cbObjectData, rgdod, pdwInOut, dwFlags); - if (SUCCEEDED(result) && g_ddraw && !g_mouse_locked) + if (SUCCEEDED(result) && g_ddraw && !g_mouse_locked && !g_config.devmode) { if (pdwInOut) { @@ -91,7 +91,7 @@ static HRESULT WINAPI fake_did_GetDeviceState(IDirectInputDeviceA* This, DWORD c HRESULT result = real_did_GetDeviceState(This, cbData, lpvData); - if (SUCCEEDED(result) && g_ddraw && !g_mouse_locked) + if (SUCCEEDED(result) && g_ddraw && !g_mouse_locked && !g_config.devmode) { if (cbData > 0 && lpvData) { From c7fc076fdb6dc7379a80b618d7b5eaf5bb6f12d0 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Mon, 18 Mar 2024 00:19:58 +0100 Subject: [PATCH 6/9] modify temp hack (it didn't work in all cases) --- src/wndproc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wndproc.c b/src/wndproc.c index 7dfe6be..1467bb3 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -448,7 +448,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam static BOOL initialized = FALSE; - if (!initialized && LOWORD(lParam) == 503 && HIWORD(lParam) == 309) + if (!initialized && (LOWORD(lParam) >= 460 && LOWORD(lParam) <= 540)) { initialized = TRUE; dd_SetDisplayMode(513, 319, 32, 0); From f3672b531593e59e2fe5fbbb7f6409757e155c93 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Mon, 18 Mar 2024 01:10:04 +0100 Subject: [PATCH 7/9] let game handle window close so it can restore the original cursor --- src/dd.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/dd.c b/src/dd.c index 683d43c..7e390fe 100644 --- a/src/dd.c +++ b/src/dd.c @@ -14,6 +14,7 @@ #include "debug.h" #include "utils.h" #include "blt.h" +#include "dllmain.h" CNCDDRAW* g_ddraw = NULL; @@ -1224,6 +1225,7 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) } else { + GameHandlesClose = TRUE; g_config.devmode = TRUE; g_config.fullscreen = FALSE; g_config.windowed = TRUE; From f08a7e66889926c338ce4a0cf0d5980312ff731e Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Thu, 28 Mar 2024 05:40:38 +0100 Subject: [PATCH 8/9] add some more checks --- src/wndproc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wndproc.c b/src/wndproc.c index 1467bb3..4c4da7b 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -448,7 +448,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam static BOOL initialized = FALSE; - if (!initialized && (LOWORD(lParam) >= 460 && LOWORD(lParam) <= 540)) + if (!initialized && (LOWORD(lParam) >= 460 && LOWORD(lParam) <= 540) && HIWORD(lParam) < 350 && GetMenu(g_ddraw->hwnd)) { initialized = TRUE; dd_SetDisplayMode(513, 319, 32, 0); From 05c1b2da67ba9dca7ca5ff9fd56e1fedd82e1c9b Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Thu, 28 Mar 2024 05:54:56 +0100 Subject: [PATCH 9/9] use proper window size --- src/dd.c | 2 +- src/wndproc.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dd.c b/src/dd.c index 7e390fe..2f1af1d 100644 --- a/src/dd.c +++ b/src/dd.c @@ -1229,7 +1229,7 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) g_config.devmode = TRUE; g_config.fullscreen = FALSE; g_config.windowed = TRUE; - dd_SetDisplayMode(513, 319, 32, 8); + dd_SetDisplayMode(515, 325, 32, 8); } } diff --git a/src/wndproc.c b/src/wndproc.c index 4c4da7b..87285ea 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -451,7 +451,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam if (!initialized && (LOWORD(lParam) >= 460 && LOWORD(lParam) <= 540) && HIWORD(lParam) < 350 && GetMenu(g_ddraw->hwnd)) { initialized = TRUE; - dd_SetDisplayMode(513, 319, 32, 0); + dd_SetDisplayMode(515, 325, 32, 0); } return DefWindowProc(hWnd, uMsg, wParam, lParam); /* Carmageddon fix */