From dd7602b1d35f0d48e9c0803361e0a91383bbaa8d Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Wed, 15 Jan 2025 08:31:20 +0100 Subject: [PATCH 01/18] #102 add polish translation by WaRzillA --- config/ConfigFormUnit.cpp | 87 +++++++++++++++++++++++++++ config/Resources/pl.png | Bin 0 -> 374 bytes config/cnc-ddraw config.cbproj | 12 +++- config/cnc-ddraw config_resources.rc | 1 + src/config.c | 2 +- 5 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 config/Resources/pl.png diff --git a/config/ConfigFormUnit.cpp b/config/ConfigFormUnit.cpp index e203af5..97e9c2c 100644 --- a/config/ConfigFormUnit.cpp +++ b/config/ConfigFormUnit.cpp @@ -774,6 +774,87 @@ void TConfigForm::ApplyTranslation(TIniFile *ini) BoxingLbl->Hint = upscaleHint + enableUpscaleHint; BoxingChk->Hint = upscaleHint + enableUpscaleHint; } + else if (lang == "polish" || (lang == "auto" && priID == LANG_POLISH)) { + LanguageImg->Visible = true; + + /* -polish - made by WaRzillA @ github */ + + ConfigForm->Caption = L"Konfiguracja cnc-ddraw"; + DisplayBtn->Caption = L"Ustawienia wyświetlania"; + AdvancedBtn->Caption = L"Zaawansowane ustawienia"; + HotkeyBtn->Caption = L"Ustawienia skrótów klawiszowych"; + CompatibilityBtn->Caption = L"Ustawienia kompatybilności"; + RestoreDefaultsBtn->Caption = L"Przywróć ustawienia domyślne"; + PresentationLbl->Caption = L"Prezentacja"; + MaintasLbl->Caption = L"Zachowaj proporcje obrazu"; + VsyncLbl->Caption = L"Włącz VSync"; + AdjmouseLbl->Caption = L"Dostosuj czułość myszy"; + DevmodeLbl->Caption = L"Zablokuj kursor w oknie/na ekranie"; + RendererLbl->Caption = L"Silnik renderowania"; + BorderLbl->Caption = L"Pokaż ramki okna w trybie okienkowym"; + SavesettingsLbl->Caption = L"Zapamiętaj pozycję i rozmiar okna"; + ShaderLbl->Caption = L"Shader OpenGL"; + MaxfpsLbl->Caption = L"Ogranicz liczbę klatek na sekundę"; + BoxingLbl->Caption = L"Włącz windowboxing / integer scaling "; + ToggleWindowedLbl->Caption = L"Przełącz na tryb okienkowy"; + MaximizeWindowLbl->Caption = L"Maksymalizuj okno"; + UnlockCursor1Lbl->Caption = L"Odblokuj kursor 1"; + UnlockCursor2Lbl->Caption = L"Odblokuj kursor 2"; + ScreenshotLbl->Caption = L"Zrzut ekranu"; + MaxgameticksLbl->Caption = L"Ogranicz prędkość gry"; + NoactivateappLbl->Caption = L"Napraw nieprawidłowe działanie Alt+Tab"; + ResolutionsLbl->Caption = L"Odblokuj dodatkowe rozdzielczości ekranu"; + MinfpsLbl->Caption = L"Wymuś wysokie FPS / Napraw zacinanie na Freesync/G-Sync"; + SinglecpuLbl->Caption = L"Napraw problemy z wydajnością i dźwiękiem"; + NonexclusiveLbl->Caption = L"Napraw niewidoczne filmy / elementy interfejsu"; + + RendererCbx->Items->Clear(); + RendererCbx->AddItem(L"Automatyczny", NULL); + RendererCbx->AddItem(L"Direct3D 9", NULL); + RendererCbx->AddItem(L"OpenGL", NULL); + RendererCbx->AddItem(L"GDI", NULL); + + PresentationCbx->Items->Clear(); + PresentationCbx->AddItem(L"Pełny ekran", NULL); + PresentationCbx->AddItem(L"Pełny ekran z upscalingiem", NULL); + PresentationCbx->AddItem(L"Bezramkowy", NULL); + PresentationCbx->AddItem(L"Okienkowy", NULL); + + MaxgameticksCbx->Items->Clear(); + MaxgameticksCbx->AddItem(L"Bez limitu", NULL); + MaxgameticksCbx->AddItem(L"Synchronizacja z odświeżaniem monitora", NULL); + MaxgameticksCbx->AddItem(L"Symulacja monitora 60 Hz", NULL); + MaxgameticksCbx->AddItem(L"1000 tików na sekundę", NULL); + MaxgameticksCbx->AddItem(L"500 tików na sekundę", NULL); + MaxgameticksCbx->AddItem(L"250 tików na sekundę", NULL); + MaxgameticksCbx->AddItem(L"125 tików na sekundę", NULL); + MaxgameticksCbx->AddItem(L"60 tików na sekundę", NULL); + MaxgameticksCbx->AddItem(L"30 tików na sekundę", NULL); + MaxgameticksCbx->AddItem(L"25 tików na sekundę", NULL); + MaxgameticksCbx->AddItem(L"15 tików na sekundę", NULL); + + System::UnicodeString shaderHint = + L"Niektóre shadery działają tylko wtedy, gdy włączone jest skalowanie. \n\n"; + + System::UnicodeString upscaleHint = + L"Skalowanie musi być włączone, aby ta opcja działała. \n\n"; + + System::UnicodeString enableUpscaleHint = + L"Aby włączyć skalowanie, ustaw prezentację na tryb 'Bezramkowy' \n" + "lub 'Pełny ekran z upscalingiem'. Dla prezentacji 'Okienkowy' \n" + "musisz zmienić rozmiar lub zmaksymalizować okno."; + + ShaderLbl->Hint = shaderHint + enableUpscaleHint; + ShaderD3DCbx->Hint = shaderHint + enableUpscaleHint; + ShaderCbx->Hint = shaderHint + enableUpscaleHint; + + MaintasLbl->Hint = upscaleHint + enableUpscaleHint; + MaintasChk->Hint = upscaleHint + enableUpscaleHint; + AdjmouseLbl->Hint = upscaleHint + enableUpscaleHint; + AdjmouseChk->Hint = upscaleHint + enableUpscaleHint; + BoxingLbl->Hint = upscaleHint + enableUpscaleHint; + BoxingChk->Hint = upscaleHint + enableUpscaleHint; + } else { IsEnglish = true; @@ -826,6 +907,12 @@ void TConfigForm::ApplyTranslation(TIniFile *ini) LanguageImg->Picture->Graphic = png; LanguageImg->Visible = true; } + else if (priID == LANG_POLISH) { + TPngImage *png = new TPngImage(); + png->LoadFromResourceName((int)HInstance, "PngImage_PL"); + LanguageImg->Picture->Graphic = png; + LanguageImg->Visible = true; + } } catch (...) { } diff --git a/config/Resources/pl.png b/config/Resources/pl.png new file mode 100644 index 0000000000000000000000000000000000000000..d413d010b5b097c4e0a4604eba86dad79567ed16 GIT binary patch literal 374 zcmV-+0g3*JP)Ab?mv3iQ8Nu5A{|6C_|Nk>HFfjc`0biay0|+1% z2B@O{$c+Ek03##gzdwHf0*Hl3)etG5lK=vU1?W~rxN0!OqXDP`Ab?mH`1u+7`u;zA z_W#cxhChG)!_n{G|9=A+zrl>(AX#bYe+w4^1Q6Is4VEzI_51&? zUm!LT$@u9L&^Z7B1a=Zw2xL66B2?87%l|Mi00a<712fnG3~)u5+Wr7F{AKw27w8;- z00L=X`u&GNQW9*;Uxq&*os3{386YGO{rw9;K*az7#P}5)xp2gQ%0-g`0)PMm0MPYZ UsK>Njp#T5?07*qoM6N<$g4HXSwg3PC literal 0 HcmV?d00001 diff --git a/config/cnc-ddraw config.cbproj b/config/cnc-ddraw config.cbproj index b2de346..7792b8b 100644 --- a/config/cnc-ddraw config.cbproj +++ b/config/cnc-ddraw config.cbproj @@ -227,6 +227,10 @@ RCDATA PngImage_IT + + RCDATA + PngImage_PL + RCDATA PngImage_RU @@ -364,7 +368,7 @@ - cnc-ddraw_config.exe + cnc-ddraw config.exe true @@ -430,6 +434,12 @@ true + + + .\ + true + + 1 diff --git a/config/cnc-ddraw config_resources.rc b/config/cnc-ddraw config_resources.rc index 9d29fa1..b077d3a 100644 --- a/config/cnc-ddraw config_resources.rc +++ b/config/cnc-ddraw config_resources.rc @@ -4,6 +4,7 @@ PngImage_ES RCDATA "Resources\\ES.png" PngImage_FR RCDATA "Resources\\fr.png" PngImage_HU RCDATA "Resources\\hu.png" PngImage_IT RCDATA "Resources\\IT.png" +PngImage_PL RCDATA "Resources\\pl.png" PngImage_RU RCDATA "Resources\\RU.png" PngImage_US RCDATA "Resources\\US.png" PngImage_VN RCDATA "Resources\\VN.png" diff --git a/src/config.c b/src/config.c index 864b10b..d624aa9 100644 --- a/src/config.c +++ b/src/config.c @@ -373,7 +373,7 @@ static void cfg_create_ini() "; The following settings are for cnc-ddraw config.exe\n" "\n" "\n" - "; cnc-ddraw config program language, possible values: auto, english, chinese, german, spanish, russian, hungarian, french, italian, vietnamese\n" + "; cnc-ddraw config program language, possible values: auto, english, chinese, german, spanish, russian, hungarian, french, italian, vietnamese, polish\n" "configlang=auto\n" "\n" "; cnc-ddraw config program theme, possible values: Windows10, Cobalt XEMedia\n" From c37f5b42843e5611c9c820e8c58cd9c3f483d456 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Wed, 15 Jan 2025 08:37:39 +0100 Subject: [PATCH 02/18] update polish translation --- config/ConfigFormUnit.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/ConfigFormUnit.cpp b/config/ConfigFormUnit.cpp index 97e9c2c..2dfee0d 100644 --- a/config/ConfigFormUnit.cpp +++ b/config/ConfigFormUnit.cpp @@ -781,8 +781,8 @@ void TConfigForm::ApplyTranslation(TIniFile *ini) ConfigForm->Caption = L"Konfiguracja cnc-ddraw"; DisplayBtn->Caption = L"Ustawienia wyświetlania"; - AdvancedBtn->Caption = L"Zaawansowane ustawienia"; - HotkeyBtn->Caption = L"Ustawienia skrótów klawiszowych"; + AdvancedBtn->Caption = L"Ustawienia zaawansowane"; + HotkeyBtn->Caption = L"Skróty klawiaturowe"; CompatibilityBtn->Caption = L"Ustawienia kompatybilności"; RestoreDefaultsBtn->Caption = L"Przywróć ustawienia domyślne"; PresentationLbl->Caption = L"Prezentacja"; From 3115122074cbc4c0f43c24bba336b9c8f0729b58 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Wed, 15 Jan 2025 09:46:48 +0100 Subject: [PATCH 03/18] update polish translation --- config/ConfigFormUnit.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/config/ConfigFormUnit.cpp b/config/ConfigFormUnit.cpp index 2dfee0d..7cad46f 100644 --- a/config/ConfigFormUnit.cpp +++ b/config/ConfigFormUnit.cpp @@ -785,7 +785,7 @@ void TConfigForm::ApplyTranslation(TIniFile *ini) HotkeyBtn->Caption = L"Skróty klawiaturowe"; CompatibilityBtn->Caption = L"Ustawienia kompatybilności"; RestoreDefaultsBtn->Caption = L"Przywróć ustawienia domyślne"; - PresentationLbl->Caption = L"Prezentacja"; + PresentationLbl->Caption = L"Tryb wyświetlania"; MaintasLbl->Caption = L"Zachowaj proporcje obrazu"; VsyncLbl->Caption = L"Włącz VSync"; AdjmouseLbl->Caption = L"Dostosuj czułość myszy"; @@ -804,7 +804,7 @@ void TConfigForm::ApplyTranslation(TIniFile *ini) MaxgameticksLbl->Caption = L"Ogranicz prędkość gry"; NoactivateappLbl->Caption = L"Napraw nieprawidłowe działanie Alt+Tab"; ResolutionsLbl->Caption = L"Odblokuj dodatkowe rozdzielczości ekranu"; - MinfpsLbl->Caption = L"Wymuś wysokie FPS / Napraw zacinanie na Freesync/G-Sync"; + MinfpsLbl->Caption = L"Wymuś wysokie FPS / Napraw zacinanie Freesync/G-Sync"; SinglecpuLbl->Caption = L"Napraw problemy z wydajnością i dźwiękiem"; NonexclusiveLbl->Caption = L"Napraw niewidoczne filmy / elementy interfejsu"; @@ -817,8 +817,8 @@ void TConfigForm::ApplyTranslation(TIniFile *ini) PresentationCbx->Items->Clear(); PresentationCbx->AddItem(L"Pełny ekran", NULL); PresentationCbx->AddItem(L"Pełny ekran z upscalingiem", NULL); - PresentationCbx->AddItem(L"Bezramkowy", NULL); - PresentationCbx->AddItem(L"Okienkowy", NULL); + PresentationCbx->AddItem(L"Tryb bezramkowy", NULL); + PresentationCbx->AddItem(L"Tryb okienkowy", NULL); MaxgameticksCbx->Items->Clear(); MaxgameticksCbx->AddItem(L"Bez limitu", NULL); @@ -840,8 +840,8 @@ void TConfigForm::ApplyTranslation(TIniFile *ini) L"Skalowanie musi być włączone, aby ta opcja działała. \n\n"; System::UnicodeString enableUpscaleHint = - L"Aby włączyć skalowanie, ustaw prezentację na tryb 'Bezramkowy' \n" - "lub 'Pełny ekran z upscalingiem'. Dla prezentacji 'Okienkowy' \n" + L"Aby włączyć skalowanie, ustaw tryb wyświetlania na 'Tryb bezramkowy' \n" + "lub 'Pełny ekran z upscalingiem'. Dla 'Tryb okienkowy' \n" "musisz zmienić rozmiar lub zmaksymalizować okno."; ShaderLbl->Hint = shaderHint + enableUpscaleHint; From d45f35ab57eed27174c4f755043a6485961c7eab Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Thu, 16 Jan 2025 04:47:38 +0100 Subject: [PATCH 04/18] #382 Fix colorkey issues in Sanitarium --- src/ddsurface.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ddsurface.c b/src/ddsurface.c index 4fd92c1..8d68052 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -909,6 +909,11 @@ HRESULT dds_GetClipper(IDirectDrawSurfaceImpl* This, IDirectDrawClipperImpl** lp HRESULT dds_GetColorKey(IDirectDrawSurfaceImpl* This, DWORD dwFlags, LPDDCOLORKEY lpColorKey) { + if (!(This->flags & DDSD_CKSRCBLT)) + { + return DDERR_NOCOLORKEY; + } + if (dwFlags != DDCKEY_SRCBLT || !lpColorKey) { TRACE(" NOT_IMPLEMENTED dwFlags=%08X, lpColorKey=%p\n", dwFlags, lpColorKey); From f4325a73f52b731750a301e02a0ea13c5ac9fa05 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Thu, 16 Jan 2025 05:44:12 +0100 Subject: [PATCH 05/18] #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")) From 49a0758602016de1d347c41f9a6b1dcfc5d91cf3 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Thu, 16 Jan 2025 05:44:25 +0100 Subject: [PATCH 06/18] revert change --- build.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.cmd b/build.cmd index 8f1fdbb..801abe4 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 From 8841285ba9eb188551824b00eb64f5d5f5a39df7 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Thu, 16 Jan 2025 05:49:54 +0100 Subject: [PATCH 07/18] update Dark Colony preset --- src/config.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config.c b/src/config.c index 51e0814..a34d0eb 100644 --- a/src/config.c +++ b/src/config.c @@ -879,6 +879,7 @@ static void cfg_create_ini() "[dc16]\n" "maxgameticks=30\n" "darkcolony_hack=true\n" + "hook_peekmessage=true\n" "\n" "; Divine Divinity\n" "[div]\n" From ab2d86f983ecd8f7d015b66ff51834250ace95ed Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Thu, 16 Jan 2025 06:29:04 +0100 Subject: [PATCH 08/18] don't use DisableProcessWindowsGhosting, it got too bad side-effects --- inc/dllmain.h | 1 - src/dllmain.c | 5 ----- src/winapi_hooks.c | 8 ++++++++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/inc/dllmain.h b/inc/dllmain.h index 13039f8..f7e028b 100644 --- a/inc/dllmain.h +++ b/inc/dllmain.h @@ -31,7 +31,6 @@ typedef BOOL(__stdcall* SETPROCESSDPIAWARENESSCONTEXTPROC)(DPI_AWARENESS_CONTEXT #if (_WIN32_WINNT < _WIN32_WINNT_WINXP) #define SetThreadExecutionState(a) -#define DisableProcessWindowsGhosting() #endif #endif diff --git a/src/dllmain.c b/src/dllmain.c index e596372..8832177 100644 --- a/src/dllmain.c +++ b/src/dllmain.c @@ -57,11 +57,6 @@ 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 c44cd3a..33655c1 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -780,6 +780,14 @@ BOOL WINAPI fake_GetMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wM BOOL WINAPI fake_PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg) { + if (g_config.darkcolony_hack && !hWnd) + { + hWnd = g_ddraw.hwnd; + + MSG msg; + real_PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE); + } + if (g_config.limiter_type == LIMIT_PEEKMESSAGE && g_ddraw.ticks_limiter.tick_length > 0 && InterlockedExchange(&g_ddraw.render.screen_updated, FALSE)) From cd080f10c4691ea9cb70f3de5b316d335c2802ba Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Fri, 17 Jan 2025 13:39:46 +0100 Subject: [PATCH 09/18] add preset for Seven Games of the Soul --- src/config.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/config.c b/src/config.c index a34d0eb..7a14730 100644 --- a/src/config.c +++ b/src/config.c @@ -1619,6 +1619,10 @@ static void cfg_create_ini() "fake_mode=352x240x32\n" "fix_not_responding=true\n" "\n" + "; Seven Games of the Soul\n" + "[faust]\n" + "maxgameticks=25\n" + "\n" "; Swarog\n" "[Swarog]\n" "maxfps=60\n" From dff8fc52f1db5b397c744ec977b89bd67296d083 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Fri, 17 Jan 2025 13:41:08 +0100 Subject: [PATCH 10/18] update Atlantis preset --- src/config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.c b/src/config.c index 7a14730..21b3cfb 100644 --- a/src/config.c +++ b/src/config.c @@ -535,7 +535,7 @@ static void cfg_create_ini() "; Atlantis\n" "[ATLANTIS]\n" "renderer=opengl\n" - "maxgameticks=60\n" + "maxgameticks=30\n" "center_cursor_fix=true\n" "\n" "; Airline Tycoon Deluxe\n" From e4b0fc3f9dfc7a4a7280134cd51b2ca4a62d7a62 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Fri, 17 Jan 2025 13:55:11 +0100 Subject: [PATCH 11/18] update supported games list --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0b59da4..5e6875b 100644 --- a/README.md +++ b/README.md @@ -201,6 +201,7 @@ Wine (Linux/macOS/Android) only: override `ddraw` in [winecfg](https://wiki.wine - Full Throttle - Future Cop L.A.P.D - G-Police +- Gateway (Remake) - Geneforge - Gilbert Goodmate And The Mushroom Of Phungoria - Gorasul: The Legacy of the Dragon From 30e6010a8875f7e1081733cb06ef27f68c9b0394 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sat, 18 Jan 2025 08:53:59 +0100 Subject: [PATCH 12/18] revert "disable Vsync checkbox in case we are in borderelss or windowed mode to avoid unnecessary input lag" --- config/ConfigFormUnit.cpp | 34 ---------------------------------- config/ConfigFormUnit.h | 1 - 2 files changed, 35 deletions(-) diff --git a/config/ConfigFormUnit.cpp b/config/ConfigFormUnit.cpp index 7cad46f..7d40a88 100644 --- a/config/ConfigFormUnit.cpp +++ b/config/ConfigFormUnit.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #include "ConfigFormUnit.h" //--------------------------------------------------------------------------- #pragma package(smart_init) @@ -1286,11 +1285,6 @@ void __fastcall TConfigForm::FormCreate(TObject *Sender) delete ini; - VsyncChk->Enabled = VsyncAllowed(); - if (!VsyncChk->Enabled) { - VsyncChk->State = tssOff; - } - Initialized = true; } @@ -1712,31 +1706,8 @@ bool TConfigForm::GetBool(TIniFile *ini, System::UnicodeString key, bool defValu return s == "true" || s == "yes" || s == "1"; } -bool TConfigForm::VsyncAllowed() -{ - if (GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "wine_get_version")) { - return true; - } - - if (!IsWindows8OrGreater()) { - return true; - } - - if (NonexclusiveChk->State == tssOff && - (PresentationCbx->ItemIndex == 0 || PresentationCbx->ItemIndex == 1)) { - return true; - } - - return false; -} - void __fastcall TConfigForm::PresentationCbxChange(TObject *Sender) { - VsyncChk->Enabled = VsyncAllowed(); - if (!VsyncChk->Enabled) { - VsyncChk->State = tssOff; - } - SaveSettings(); } @@ -1845,11 +1816,6 @@ void __fastcall TConfigForm::SinglecpuChkClick(TObject *Sender) void __fastcall TConfigForm::NonexclusiveChkClick(TObject *Sender) { - VsyncChk->Enabled = VsyncAllowed(); - if (!VsyncChk->Enabled) { - VsyncChk->State = tssOff; - } - SaveSettings(); } diff --git a/config/ConfigFormUnit.h b/config/ConfigFormUnit.h index 8a46bf8..8a8a14c 100644 --- a/config/ConfigFormUnit.h +++ b/config/ConfigFormUnit.h @@ -118,7 +118,6 @@ private: // Benutzer-Deklarationen virtual void __fastcall CreateParams(TCreateParams & Params); void SaveSettings(); bool GetBool(TIniFile *ini, System::UnicodeString key, bool defValue); - bool VsyncAllowed(); void ApplyTranslation(TIniFile *ini); System::UnicodeString GetKeyText(WORD key); WORD GetKeyCode(System::UnicodeString text); From 14336e8d39a0361491bcfd50e3dc9d50d26bbacc Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 19 Jan 2025 05:32:07 +0100 Subject: [PATCH 13/18] add guard lines on both on top and bottom of the buffer --- src/ddsurface.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ddsurface.c b/src/ddsurface.c index 8d68052..c6d3350 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -1553,17 +1553,17 @@ HRESULT dd_CreateSurface( if (dst_surface->hdc) InterlockedIncrement(&g_dds_gdi_handles); + DWORD map_offset = dst_surface->pitch * g_config.guard_lines; + dst_surface->mapping = CreateFileMappingA( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, - bmp_size + 256, + bmp_size + 256 + map_offset, NULL); - DWORD map_offset = 0; - if (dst_surface->mapping) { LPVOID data = MapViewOfFile(dst_surface->mapping, FILE_MAP_ALL_ACCESS, 0, 0, 0); From 3467a05eaa145783feb513499665b3f591fadfa7 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 19 Jan 2025 06:23:29 +0100 Subject: [PATCH 14/18] add preset for Arcatera the Dark Brotherhood --- src/config.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/config.c b/src/config.c index 21b3cfb..43e34c0 100644 --- a/src/config.c +++ b/src/config.c @@ -404,6 +404,12 @@ static void cfg_create_ini() "[Atrox]\n" "nonexclusive=true\n" "\n" + "; Arcatera the Dark Brotherhood\n" + "[darksun]\n" + "maxgameticks=60\n" + "maxfps=60\n" + "minfps=-1\n" + "\n" "; Atomic Bomberman\n" "[BM]\n" "maxgameticks=60\n" From f6d105bb9ec4caa551522b7771cf3962805ff706 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 19 Jan 2025 06:29:39 +0100 Subject: [PATCH 15/18] add preset for Dark Secret of Africa --- src/config.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/config.c b/src/config.c index 43e34c0..36b756a 100644 --- a/src/config.c +++ b/src/config.c @@ -902,6 +902,12 @@ static void cfg_create_ini() "noactivateapp=true\n" "limiter_type=2\n" "\n" + "; Dark Secret of Africa\n" + "[Game/5]\n" + "checkfile=.\\CONFIG.CFG\n" + "maxfps=60\n" + "minfps=-1\n" + "\n" "; Dark Reign: The Future of War\n" "[DKReign]\n" "maxgameticks=60\n" From 2c2fd7feb687c8d0fd9b39411c08b829db6b3c46 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 19 Jan 2025 06:29:50 +0100 Subject: [PATCH 16/18] update supported games list --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 5e6875b..7485601 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,7 @@ Wine (Linux/macOS/Android) only: override `ddraw` in [winecfg](https://wiki.wine - Another War - Anstoss 3 - Arcanum: Of Steamworks and Magick Obscura +- Arcatera the Dark Brotherhood - Army Men 2 - Army Men: Air Tactics - Army Men: Toys in Space @@ -146,6 +147,7 @@ Wine (Linux/macOS/Android) only: override `ddraw` in [winecfg](https://wiki.wine - Cloud Kingdom 3 (only with /ddraw command line parameter) - Dark Earth - Dark Reign: The Future of War +- Dark Secret of Africa - Day Of The Tentacle - Daytona - Daytona USA (Sega - 1996) @@ -422,6 +424,7 @@ Wine (Linux/macOS/Android) only: override `ddraw` in [winecfg](https://wiki.wine - Sudden Strike 2 - Superbike 2000 - Swarog +- The Jungle Book Groove Party - The Curse Of Monkey Island - The Dig - The Last Express From 6ec7c0c701e17bd3737d976d86bdb39cf7192ed7 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 19 Jan 2025 08:03:09 +0100 Subject: [PATCH 17/18] add workaround for CreateDIBSection offset bug --- src/ddsurface.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ddsurface.c b/src/ddsurface.c index c6d3350..e52b3fb 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -1553,7 +1553,7 @@ HRESULT dd_CreateSurface( if (dst_surface->hdc) InterlockedIncrement(&g_dds_gdi_handles); - DWORD map_offset = dst_surface->pitch * g_config.guard_lines; + DWORD map_offset = 65280; // CreateDIBSection cannot handle values higher than a WORD - 0xFF00 (guard lines); dst_surface->mapping = CreateFileMappingA( From 33f2b91c9915ae886f7c8847bfb907cf0fb5b649 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 19 Jan 2025 09:27:26 +0100 Subject: [PATCH 18/18] tweak workaound for CreateDIBSection offset bug --- src/ddsurface.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ddsurface.c b/src/ddsurface.c index e52b3fb..96d69de 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -1553,7 +1553,8 @@ HRESULT dd_CreateSurface( if (dst_surface->hdc) InterlockedIncrement(&g_dds_gdi_handles); - DWORD map_offset = 65280; // CreateDIBSection cannot handle values higher than a WORD - 0xFF00 (guard lines); + // CreateDIBSection cannot handle values higher than a WORD - 0xFF00 (guard lines); + DWORD map_offset = min(65280, dst_surface->pitch * g_config.guard_lines); dst_surface->mapping = CreateFileMappingA(