From 06026c6ab28ef25c9698d10c2373150740d0521d Mon Sep 17 00:00:00 2001 From: gho tik Date: Thu, 19 Nov 2015 11:42:28 -0500 Subject: [PATCH] v2_03_46_src Former-commit-id: a29ee258050b59c37e33287a7c26e77d41ef796e --- Include/dxwnd.h | 4 +++- build/dxwnd.0.ini | 1 + build/dxwnd.dll | 4 ++-- build/dxwnd.exe | 2 +- build/readme-relnotes.txt | 6 +++++ build/redist/dpwsock.dll | 3 +++ dll/ddraw.cpp | 21 ++++++++++++++++++ dll/dxhook.cpp | 25 +++++++++++++++++---- dll/dxhook.h | 2 +- dll/dxwcore.cpp | 45 ++++++++++++++++++-------------------- dll/dxwcore.hpp | 3 +++ dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 135168 -> 165888 bytes dll/kernel32.cpp | 21 ++++++++++++------ dll/user32.cpp | 30 +++++++++++++++---------- dll/winmm.cpp | 20 +++++++++-------- dll/winproc.cpp | 3 +++ host/TabCompat.cpp | 4 ++++ host/TabTiming.cpp | 1 + host/TargetDlg.cpp | 4 +++- host/TargetDlg.h | 4 +++- host/dxwndhost.aps | Bin 161432 -> 161796 bytes host/dxwndhost.cpp | 6 +++++ host/dxwndhost.rc | Bin 106522 -> 107314 bytes host/dxwndhost.vs2008.suo | Bin 30208 -> 37888 bytes host/dxwndhostView.cpp | 8 +++++-- host/host.aps | Bin 47496 -> 47500 bytes host/resource | Bin 37632 -> 37912 bytes 28 files changed, 154 insertions(+), 65 deletions(-) create mode 100644 build/redist/dpwsock.dll diff --git a/Include/dxwnd.h b/Include/dxwnd.h index a1ccce9..0b1519f 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -138,7 +138,7 @@ #define SUPPORTSVGA 0x00400000 // Supports SVGA standard resolutions #define SUPPORTHDTV 0x00800000 // Supports HDTV standard resolutions #define RELEASEMOUSE 0x01000000 // GetCursorPos returns centered coordinates when the mouse cursor is moved outside the window -//#define FRAMECOMPENSATION 0x02000000 // Compensate for frame border adding x,y displacement of (x) left border and (y) window title bar +#define ENABLETIMEFREEZE 0x02000000 // Enable Time Freeze functionality and toggle key #define HOTPATCH 0x04000000 // Use hot patching technique to handle obfuscated IAT #define ENABLEHOTKEYS 0x08000000 // Enables hot keys #define HOTPATCHALWAYS 0x10000000 // Force hot patching to every call @@ -210,6 +210,8 @@ #define SYNCPALETTE 0x04000000 // Syncronize GDI to DDRAW palette #define VIRTUALJOYSTICK 0x08000000 // Enables the DxWnd virtual joystick #define UNACQUIRE 0x10000000 // Unacquire DirectInput devices when losing focus and acquire back when gaining focus +#define HOOKGOGLIBS 0x20000000 +#define BYPASSGOGLIBS 0x40000000 // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.0.ini b/build/dxwnd.0.ini index 138b216..be2c649 100644 --- a/build/dxwnd.0.ini +++ b/build/dxwnd.0.ini @@ -26,5 +26,6 @@ plocktoggle= fpstoggle= printscreen=0x7B corner=0x7A +freezetime=0x79 diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 37c8401..6ec58cd 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35b41771cbc6227fe2b767905fbd42e75f893b1bedc8f5ccbcf26d42dffc802f -size 619008 +oid sha256:58d53ae35a2c6ed0abd1628c80eebf170d591eb9b2a840f79b3a0507813048c9 +size 619520 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 9152118..aef5581 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1616682f67e2e527cec0060d101ab43de06f3cbe2ff7cd4e03394c7de2c0027 +oid sha256:bfcf831bd510bb48aaef99c2469d1627a11d73ea4c4c50c765e257ab30b38f7e size 546304 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 7f334df..3fa406b 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -968,3 +968,9 @@ add: option "Unacquire input devices on focus lost". Needed for Star wars "Tie F fix: set dinput SetCooperativeLevel flags to DISCL_NONEXCLUSIVE | DISCL_FOREGROUND fix: fixed CreateIC hooker call method (WINAPI) fix: emulated Unacquire on virtual joystick. Needed for Star wars "Tie Fighter 95". + +v2.03.46 +add: added compatibility options "Hook GOG libs" and "Byass GOG libs" to manage GOG games +add: added "Enable Time Freeze" timing option and the virtual key "freezetime" +add: command line option /E to terminate exixting DxWnd session +fix: relocation of WS_POPUP windows. Fixes "Riven" menu window. diff --git a/build/redist/dpwsock.dll b/build/redist/dpwsock.dll new file mode 100644 index 0000000..086de94 --- /dev/null +++ b/build/redist/dpwsock.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fe37bba5475b66375d286ee92bc10cfcdeff6e9fa1ef112eb2813b86d4d4065 +size 42768 diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 86f3a8d..5754549 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -629,6 +629,22 @@ static void ddSetCompatibility() FreeLibrary(hinst); } +static void BypassGOGDDrawRedirector() +{ + // this procedure bypasses the GOG proxy ddraw.dll that sometimes is found in the GOG game folders. + // This way, there will be no more the need to rename or delete this file. + char sSysLibraryPath[MAX_PATH+10]; + HMODULE hinst; + + GetSystemDirectory(sSysLibraryPath, MAX_PATH); + strcat(sSysLibraryPath, "\\ddraw.dll"); + hinst = LoadLibrary(sSysLibraryPath); + pDirectDrawEnumerate = (DirectDrawEnumerate_Type)GetProcAddress(hinst, "DirectDrawEnumerateA"); + pDirectDrawEnumerateEx = (DirectDrawEnumerateEx_Type)GetProcAddress(hinst, "DirectDrawEnumerateExA"); + pDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate"); + pDirectDrawCreateEx = (DirectDrawCreateEx_Type)GetProcAddress(hinst, "DirectDrawCreateEx"); +} + int HookDirectDraw(HMODULE module, int version) { if ((dxw.dwFlags2 & SETCOMPATIBILITY) || @@ -640,6 +656,11 @@ int HookDirectDraw(HMODULE module, int version) } } + if(dxw.dwFlags6 & BYPASSGOGLIBS) { + BypassGOGDDrawRedirector(); + return TRUE; + } + if(dxw.dwFlags4 & HOTPATCH) { // hot-patch all APIs and that's all folks! HookLibrary(module, ddHooks, "ddraw.dll"); diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 13126a4..b79f877 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -92,7 +92,7 @@ static char *Flag4Names[32]={ "LIMITSCREENRES", "NOFILLRECT", "HOOKGLIDE", "HIDEDESKTOP", "STRETCHTIMERS", "NOFLIPEMULATION", "NOTEXTURES", "RETURNNULLREF", "FINETIMING", "NATIVERES", "SUPPORTSVGA", "SUPPORTHDTV", - "RELEASEMOUSE", "--FRAMECOMPENSATION--", "HOTPATCH", "ENABLEHOTKEYS", + "RELEASEMOUSE", "ENABLETIMEFREEZE", "HOTPATCH", "ENABLEHOTKEYS", "HOTPATCHALWAYS", "NOD3DRESET", "OVERRIDEREGISTRY", "HIDECDROMEMPTY", }; @@ -114,8 +114,8 @@ static char *Flag6Names[32]={ "NOSYSMEMPRIMARY", "NOSYSMEMBACKBUF", "CONFIRMONCLOSE", "TERMINATEONCLOSE", "FLIPEMULATION", "SETZBUFFERBITDEPTHS", "SHAREDDC", "WOW32REGISTRY", "STRETCHMOVIES", "BYPASSMCI", "FIXPIXELZOOM", "REUSEEMULATEDDC", - "CREATEDESKTOP", "NOWINDOWHOOKS", "SYNCPALETTE", "", - "", "", "", "", + "CREATEDESKTOP", "NOWINDOWHOOKS", "SYNCPALETTE", "VIRTUALJOYSTICK", + "UNACQUIRE", "HOOKGOGLIBS", "BYPASSGOGLIBS", "", }; static char *TFlagNames[32]={ @@ -848,7 +848,8 @@ void HookModule(HMODULE base, int dxversion) HookKernel32(base); HookUser32(base); HookOle32(base); - HookWinMM(base); + HookWinMM(base, "winmm.dll"); + if(dxw.dwFlags6 & HOOKGOGLIBS) HookWinMM(base, "win32.dll"); //if(dxw.dwFlags2 & SUPPRESSIME) HookImeLib(module); HookGDI32(base); if(dxw.dwFlags1 & HOOKDI) HookDirectInput(base, dxversion); @@ -1104,6 +1105,19 @@ DWORD WINAPI MessagePoller(LPVOID lpParameter) return 0; } +DWORD WINAPI TimeFreezePoller(LPVOID lpParameter) +{ + #define DXWREFRESHINTERVAL 20 + extern UINT VKeyConfig[]; + UINT FreezeToggleKey; + FreezeToggleKey = VKeyConfig[DXVK_FREEZETIME]; + while(TRUE){ + Sleep(DXWREFRESHINTERVAL); + if(GetAsyncKeyState(FreezeToggleKey) & 0xF000) dxw.ToggleFreezedTime(); + } + return 0; +} + static void MemoryReserve() { VirtualAlloc((LPVOID)0x4000000, 0x04000000, MEM_RESERVE, PAGE_READWRITE); @@ -1339,6 +1353,9 @@ void HookInit(TARGETMAP *target, HWND hwnd) if (dxw.dwFlags1 & AUTOREFRESH) CreateThread(NULL, 0, MessagePoller, NULL, 0, NULL); + + if (dxw.dwFlags4 & ENABLETIMEFREEZE) + CreateThread(NULL, 0, TimeFreezePoller, NULL, 0, NULL); } LPCSTR ProcToString(LPCSTR proc) diff --git a/dll/dxhook.h b/dll/dxhook.h index 9e24862..773467c 100644 --- a/dll/dxhook.h +++ b/dll/dxhook.h @@ -10,7 +10,7 @@ extern void HookDirectSound(HMODULE); extern void HookImeLib(HMODULE); extern void HookKernel32(HMODULE); extern void HookUser32(HMODULE); -extern void HookWinMM(HMODULE); +extern void HookWinMM(HMODULE, char *libname); extern void HookAdvApi32(HMODULE); extern void HookImagehlp(HMODULE); extern void HookSmackW32(HMODULE); diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index 54619ff..1087e13 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -50,6 +50,7 @@ dxwCore::dxwCore() iRefreshDelays[0]=16; iRefreshDelays[1]=17; iRefreshDelayCount=2; + TimeFreeze = FALSE; } dxwCore::~dxwCore() @@ -1056,7 +1057,6 @@ void dxwCore::VSyncWait() static float fMul[17]={2.14F, 1.95F, 1.77F, 1.61F, 1.46F, 1.33F, 1.21F, 1.10F, 1.00F, 0.91F, 0.83F, 0.75F, 0.68F, 0.62F, 0.56F, 0.51F, 0.46F}; -//static float fMul[17]={0.46F, 0.51F, 0.56F, 0.62F, 0.68F, 0.75F, 0.83F, 0.91F, 1.00F, 1.10F, 1.21F, 1.33F, 1.46F, 1.61F, 1.77F, 1.95F, 2.14F}; static DWORD TimeShifterFine(DWORD val, int shift) { @@ -1127,6 +1127,7 @@ DWORD dxwCore::GetTickCount(void) dwTick=(dwNextRealTick-dwLastRealTick); TimeShift=GetHookInfo()->TimeShift; dwTick = (*pTimeShifter)(dwTick, TimeShift); + if(TimeFreeze) dwTick=0; dwLastFakeTick += dwTick; dwLastRealTick = dwNextRealTick; return dwLastFakeTick; @@ -1143,18 +1144,19 @@ DWORD dxwCore::StretchCounter(DWORD dwTimer) { TimeShift=GetHookInfo()->TimeShift; dwTimer = (*pTimeShifter)(dwTimer, TimeShift); - return dwTimer; + return (dxw.TimeFreeze) ? 0 : dwTimer; } LARGE_INTEGER dxwCore::StretchCounter(LARGE_INTEGER dwTimer) { static int Reminder = 0; LARGE_INTEGER ret; + LARGE_INTEGER zero = {0,0}; TimeShift=GetHookInfo()->TimeShift; dwTimer.QuadPart += Reminder; ret = (*pTimeShifter64)(dwTimer, TimeShift); Reminder = (ret.QuadPart==0) ? dwTimer.LowPart : 0; - return ret; + return (dxw.TimeFreeze) ? zero : ret; } void dxwCore::GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) @@ -1163,9 +1165,7 @@ void dxwCore::GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) DWORD dwCurrentTick; FILETIME CurrFileTime; static DWORD dwStartTick=0; - static DWORD dwUpdateTick=0; static FILETIME StartFileTime; -// extern DXWNDSTATUS *pStatus; if(dwStartTick==0) { SYSTEMTIME StartingTime; @@ -1180,6 +1180,7 @@ void dxwCore::GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) dwTick=(dwCurrentTick-dwStartTick); TimeShift=GetHookInfo()->TimeShift; dwTick = (*pTimeShifter)(dwTick, TimeShift); + if(dxw.TimeFreeze) dwTick=0; // From MSDN: Contains a 64-bit value representing the number of // 100-nanosecond intervals since January 1, 1601 (UTC). // So, since 1mSec = 10.000 * 100nSec, you still have to multiply by 10.000. @@ -1198,9 +1199,7 @@ void dxwCore::GetSystemTime(LPSYSTEMTIME lpSystemTime) DWORD dwCurrentTick; FILETIME CurrFileTime; static DWORD dwStartTick=0; - static DWORD dwUpdateTick=0; static FILETIME StartFileTime; -// extern DXWNDSTATUS *pStatus; if(dwStartTick==0) { SYSTEMTIME StartingTime; @@ -1215,6 +1214,7 @@ void dxwCore::GetSystemTime(LPSYSTEMTIME lpSystemTime) dwTick=(dwCurrentTick-dwStartTick); TimeShift=GetHookInfo()->TimeShift; dwTick = (*pTimeShifter)(dwTick, TimeShift); + if(dxw.TimeFreeze) dwTick=0; // From MSDN: Contains a 64-bit value representing the number of // 100-nanosecond intervals since January 1, 1601 (UTC). // So, since 1mSec = 10.000 * 100nSec, you still have to multiply by 10.000. @@ -1291,13 +1291,6 @@ void dxwCore::ShowFPS(HDC xdc, int w, int h) if(corner==LastCorner) corner = (corner+1) % 4; LastCorner = corner; color=0xFF0000; // blue - //(*pGetClientRect)(hWnd, &rect); - //switch (corner) { - //case 0: x=10; y=10; break; - //case 1: x=rect.right-60; y=10; break; - //case 2: x=rect.right-60; y=rect.bottom-20; break; - //case 3: x=10; y=rect.bottom-20; break; - //} switch (corner) { case 0: x=10; y=10; break; case 1: x=w-60; y=10; break; @@ -1307,7 +1300,6 @@ void dxwCore::ShowFPS(HDC xdc, int w, int h) } SetTextColor(xdc,color); - //SetBkMode(xdc, TRANSPARENT); SetBkMode(xdc, OPAQUE); sprintf_s(sBuf, 80, "FPS: %d", GetHookInfo()->FPSCount); TextOut(xdc, x, y, sBuf, strlen(sBuf)); @@ -1321,21 +1313,16 @@ void dxwCore::ShowTimeStretching(HDC xdc, int w, int h) static int x, y; static DWORD color; static int LastTimeShift = 1000; // any initial number different from -8 .. +8 + static int LastTimeFreeze = 1000; // any initial number different from TRUE, FALSE if((*pGetTickCount)()-dwTimer > 4000){ - if(LastTimeShift==TimeShift) return; // after a while, stop the show + if((LastTimeShift==TimeShift) && (LastTimeFreeze==TimeFreeze)) return; // after a while, stop the show dwTimer = (*pGetTickCount)(); LastTimeShift=TimeShift; corner = dwTimer % 4; if(corner==LastCorner) corner = (corner+1) % 4; LastCorner = corner; color=0x0000FF; // red - //(*pGetClientRect)(hWnd, &rect); - //switch (corner) { - //case 0: x=10; y=10; break; - //case 1: x=rect.right-60; y=10; break; - //case 2: x=rect.right-60; y=rect.bottom-20; break; - //case 3: x=10; y=rect.bottom-20; break; switch (corner) { case 0: x=10; y=10; break; case 1: x=w-60; y=10; break; @@ -1345,7 +1332,6 @@ void dxwCore::ShowTimeStretching(HDC xdc, int w, int h) } SetTextColor(xdc,color); - //SetBkMode(xdc, TRANSPARENT); SetBkMode(xdc, OPAQUE); sprintf_s(sBuf, 80, "t%s", dxw.GetTSCaption()); TextOut(xdc, x, y, sBuf, strlen(sBuf)); @@ -1365,6 +1351,7 @@ char *dxwCore::GetTSCaption(int shift) "x1.00", ":1.10",":1.21",":1.33",":1.46", ":1.61",":1.77",":1.95",":2.14"}; + if(TimeFreeze) return "x0"; if (shift<(-8) || shift>(+8)) return "???"; shift += 8; return (dxw.dwFlags4 & FINETIMING) ? sTSCaptionFine[shift] : sTSCaptionCoarse[shift]; @@ -1848,7 +1835,8 @@ static char *VKeyLabels[DXVK_SIZE]={ "timetoggle", "altf4", "printscreen", - "corner" + "corner", + "freezetime" }; void dxwCore::MapKeysInit() @@ -1879,3 +1867,12 @@ UINT dxwCore::MapKeysConfig(UINT message, LPARAM lparam, WPARAM wparam) } return DXVK_NONE; } + +void dxwCore::ToggleFreezedTime() +{ + static DWORD dwLastTime = 0; + if(((*pGetTickCount)() - dwLastTime) < 100) return; + TimeFreeze = !TimeFreeze; + dwLastTime = (*pGetTickCount)(); + OutTraceDW("DxWnd: time is %s\n", dxw.TimeFreeze ? "freezed" : "unfreezed"); +} \ No newline at end of file diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index c1afc5d..8fe2003 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -129,6 +129,7 @@ public: // methods void SetVSyncDelays(UINT); void VSyncWait(); void DumpDesktopStatus(); + void ToggleFreezedTime(); public: // simple data variables BOOL Windowize; @@ -168,6 +169,7 @@ public: // simple data variables HDC RealHDC; HDC VirtualHDC; int GDIEmulationMode; + BOOL TimeFreeze; // Implementation protected: @@ -346,6 +348,7 @@ typedef enum { DXVK_ALTF4, DXVK_PRINTSCREEN, DXVK_CORNERIZE, + DXVK_FREEZETIME, DXVK_SIZE }; diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 8e61fcf..c3191d5 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.03.45" +#define VERSION "2.03.46" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index bab0e9df6b344acaf6aef7563447eefb113bacd3..a4bbf462ec02ae13b0980ac3281deca8344f26ff 100644 GIT binary patch delta 19397 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, lpSystemTime->wMinute, lpSystemTime->wSecond, lpSystemTime->wMilliseconds); } @@ -398,7 +401,7 @@ void WINAPI extGetLocalTime(LPSYSTEMTIME lpLocalTime) SYSTEMTIME SystemTime; dxw.GetSystemTime(&SystemTime); SystemTimeToTzSpecificLocalTime(NULL, &SystemTime, lpLocalTime); - if (IsDebug) OutTrace("GetLocalTime: %02d:%02d:%02d.%03d\n", + OutTraceB("GetLocalTime: %02d:%02d:%02d.%03d\n", lpLocalTime->wHour, lpLocalTime->wMinute, lpLocalTime->wSecond, lpLocalTime->wMilliseconds); } @@ -410,25 +413,29 @@ VOID WINAPI extSleep(DWORD dwMilliseconds) dwNewDelay = dxw.StretchTime(dwMilliseconds); if (dwNewDelay==0) dwNewDelay=1; // minimum allowed... } - if (IsDebug) OutTrace("Sleep: msec=%d->%d timeshift=%d\n", dwMilliseconds, dwNewDelay, dxw.TimeShift); + OutTraceB("Sleep: msec=%d->%d timeshift=%d\n", dwMilliseconds, dwNewDelay, dxw.TimeShift); (*pSleep)(dwNewDelay); + while(dxw.TimeFreeze)(*pSleep)(40); } DWORD WINAPI extSleepEx(DWORD dwMilliseconds, BOOL bAlertable) { + DWORD ret; DWORD dwNewDelay; dwNewDelay=dwMilliseconds; if ((dwMilliseconds!=INFINITE) && (dwMilliseconds!=0)){ dwNewDelay = dxw.StretchTime(dwMilliseconds); if (dwNewDelay==0) dwNewDelay=1; // minimum allowed... } - if (IsDebug) OutTrace("SleepEx: msec=%d->%d alertable=%x, timeshift=%d\n", dwMilliseconds, dwNewDelay, bAlertable, dxw.TimeShift); - return (*pSleepEx)(dwNewDelay, bAlertable); + OutTraceB("SleepEx: msec=%d->%d alertable=%x, timeshift=%d\n", dwMilliseconds, dwNewDelay, bAlertable, dxw.TimeShift); + ret = (*pSleepEx)(dwNewDelay, bAlertable); + while(dxw.TimeFreeze)(*pSleep)(40); + return ret; } void WINAPI extGetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) { - if (IsDebug) OutTrace("GetSystemTimeAsFileTime\n"); + OutTraceB("GetSystemTimeAsFileTime\n"); dxw.GetSystemTimeAsFileTime(lpSystemTimeAsFileTime); } diff --git a/dll/user32.cpp b/dll/user32.cpp index 09b10c5..f836c2d 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -1466,19 +1466,25 @@ static HWND WINAPI extCreateWindowCommon( return hwnd; } - // tested on Gangsters: coordinates must be window-relative!!! - // Age of Empires.... - if (dwStyle & WS_CHILD){ + // from here on, fullscreen is garanteed + + if (dwStyle & WS_CHILD){ + // tested on Gangsters: coordinates must be window-relative!!! + // Age of Empires.... dxw.MapClient(&x, &y, &nWidth, &nHeight); OutTraceDW("%s: fixed WS_CHILD pos=(%d,%d) size=(%d,%d)\n", - ApiName, x, y, nWidth, nHeight); + ApiName, x, y, nWidth, nHeight); } - // needed for Diablo, that creates a new control parent window that must be - // overlapped to the directdraw surface. - else if (dwExStyle & WS_EX_CONTROLPARENT){ - dxw.MapWindow(&x, &y, &nWidth, &nHeight); - OutTraceDW("%s: fixed WS_EX_CONTROLPARENT pos=(%d,%d) size=(%d,%d)\n", + else { + if ((dwExStyle & WS_EX_CONTROLPARENT) || (dwStyle & WS_POPUP)){ + // needed for "Diablo", that creates a new WS_EX_CONTROLPARENT window that must be + // overlapped to the directdraw surface. + // needed for "Riven", that creates a new WS_POPUP window with the menu bar that must be + // overlapped to the directdraw surface. + dxw.MapWindow(&x, &y, &nWidth, &nHeight); + OutTraceDW("%s: fixed pos=(%d,%d) size=(%d,%d)\n", ApiName, x, y, nWidth, nHeight); + } } OutTraceB("%s: fixed pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n", @@ -1578,7 +1584,8 @@ HWND WINAPI extCreateWindowExW( dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle), hWndParent, hWndParent==HWND_MESSAGE?"(HWND_MESSAGE)":"", hMenu); } - if(IsDebug) OutTrace("CreateWindowExW: DEBUG screen=(%d,%d)\n", dxw.GetScreenWidth(), dxw.GetScreenHeight()); + OutTraceB("CreateWindowExW: DEBUG fullscreen=%x mainwin=%x screen=(%d,%d)\n", + dxw.IsFullScreen(), dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight()); if((dxw.dwFlags6 & STRETCHMOVIES) && !wcscmp(lpWindowName, L"ActiveMovie Window")){ RECT MainWin; @@ -1620,7 +1627,8 @@ HWND WINAPI extCreateWindowExA( dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle), hWndParent, hWndParent==HWND_MESSAGE?"(HWND_MESSAGE)":"", hMenu); } - if(IsDebug) OutTrace("CreateWindowExA: DEBUG screen=(%d,%d)\n", dxw.GetScreenWidth(), dxw.GetScreenHeight()); + OutTraceB("CreateWindowExW: DEBUG fullscreen=%x mainwin=%x screen=(%d,%d)\n", + dxw.IsFullScreen(), dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight()); if((dxw.dwFlags6 & STRETCHMOVIES) && !strcmp(lpWindowName, "ActiveMovie Window")){ RECT MainWin; diff --git a/dll/winmm.cpp b/dll/winmm.cpp index d3e90fa..a5d7122 100644 --- a/dll/winmm.cpp +++ b/dll/winmm.cpp @@ -61,12 +61,12 @@ static HookEntry_Type JoyHooks[]={ {HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator }; -void HookWinMM(HMODULE module) +void HookWinMM(HMODULE module, char *libname) { - HookLibrary(module, Hooks, "winmm.dll"); - if(dxw.dwFlags2 & TIMESTRETCH) HookLibrary(module, TimeHooks, "winmm.dll"); - if(dxw.dwFlags5 & REMAPMCI) HookLibrary(module, RemapHooks, "winmm.dll"); - if(dxw.dwFlags6 & VIRTUALJOYSTICK) HookLibrary(module, JoyHooks, "winmm.dll"); + HookLibrary(module, Hooks, libname); + if(dxw.dwFlags2 & TIMESTRETCH) HookLibrary(module, TimeHooks, libname); + if(dxw.dwFlags5 & REMAPMCI) HookLibrary(module, RemapHooks, libname); + if(dxw.dwFlags6 & VIRTUALJOYSTICK) HookLibrary(module, JoyHooks, libname); } FARPROC Remap_WinMM_ProcAddress(LPCSTR proc, HMODULE hModule) @@ -330,7 +330,7 @@ MMRESULT WINAPI extjoyGetDevCapsA(DWORD uJoyID, LPJOYCAPS pjc, UINT cbjc) MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji) { - OutTraceDW("joyGetPosEx: joyid=%d\n", uJoyID); + OutTraceC("joyGetPosEx: joyid=%d\n", uJoyID); if(uJoyID != 0) return JOYERR_PARMS; LONG x, y; HWND hwnd; @@ -352,8 +352,10 @@ MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji) } } - POINT pt; + x=(XSPAN>>1); + y=(YSPAN>>1); if(hwnd=dxw.GethWnd()){ + POINT pt; RECT client; POINT upleft = {0,0}; (*pGetClientRect)(hwnd, &client); @@ -381,7 +383,7 @@ MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji) if(INVERTJOYAXIS) y = ((client.bottom - pt.y) * YSPAN) / client.bottom; // inverted y axis else - pt.y = (pt.y * YSPAN) / dxw.GetScreenHeight(); + y = (pt.y * YSPAN) / client.bottom; } ShowJoystick(pt.x, pt.y, dwButtons); } @@ -399,7 +401,7 @@ MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji) pji->dwButtons = dwButtons; pji->dwFlags = JOY_RETURNX|JOY_RETURNY|JOY_RETURNBUTTONS; - OutTraceDW("joyGetPosEx: joyid=%d pos=(%d,%d)\n", uJoyID, pji->dwXpos, pji->dwYpos); + OutTraceC("joyGetPosEx: joyid=%d pos=(%d,%d)\n", uJoyID, pji->dwXpos, pji->dwYpos); return JOYERR_NOERROR; } diff --git a/dll/winproc.cpp b/dll/winproc.cpp index 8e07353..b75e146 100644 --- a/dll/winproc.cpp +++ b/dll/winproc.cpp @@ -512,6 +512,9 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp case DXVK_CORNERIZE: dx_Cornerize(hwnd); break; + //case DXVK_FREEZETIME: + // dxw.ToggleFreezedTime(); + // break; case DXVK_TIMEFAST: case DXVK_TIMESLOW: if (dxw.dwFlags2 & TIMESTRETCH) { diff --git a/host/TabCompat.cpp b/host/TabCompat.cpp index 3d91d1f..5261a4d 100644 --- a/host/TabCompat.cpp +++ b/host/TabCompat.cpp @@ -50,6 +50,10 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_OVERRIDEREGISTRY, cTarget->m_OverrideRegistry); DDX_Check(pDX, IDC_WOW64REGISTRY, cTarget->m_Wow64Registry); DDX_Check(pDX, IDC_WOW32REGISTRY, cTarget->m_Wow32Registry); + + // GOG patches + DDX_Check(pDX, IDC_HOOKGOGLIBS, cTarget->m_HookGOGLibs); + DDX_Check(pDX, IDC_BYPASSGOGLIBS, cTarget->m_BypassGOGLibs); } BEGIN_MESSAGE_MAP(CTabCompat, CDialog) diff --git a/host/TabTiming.cpp b/host/TabTiming.cpp index 72112d6..1cac65b 100644 --- a/host/TabTiming.cpp +++ b/host/TabTiming.cpp @@ -39,6 +39,7 @@ void CTabTiming::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_NORMALIZEPERFCOUNT, cTarget->m_NormalizePerfCount); DDX_Check(pDX, IDC_QUARTERBLT, cTarget->m_QuarterBlt); DDX_Check(pDX, IDC_FINETIMING, cTarget->m_FineTiming); + DDX_Check(pDX, IDC_TIMEFREEZE, cTarget->m_EnableTimeFreeze); DDX_Text(pDX, IDC_MAXFPS, cTarget->m_MaxFPS); DDX_LBIndex(pDX, IDC_LISTTS, cTarget->m_InitTS); //{{AFX_DATA_MAP(CTabTiming) diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 5a9bad8..7bc263f 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -81,6 +81,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_LimitResources = FALSE; m_CDROMDriveType = FALSE; m_HideCDROMEmpty = FALSE; + m_HookGOGLibs = FALSE; + m_BypassGOGLibs = FALSE; m_FontBypass = FALSE; m_BufferedIOFix = FALSE; m_ZBufferClean = FALSE; @@ -179,8 +181,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_NormalizePerfCount = FALSE; m_QuarterBlt = FALSE; m_FineTiming = FALSE; + m_EnableTimeFreeze = FALSE; m_ReleaseMouse = FALSE; - //m_FrameCompensation = FALSE; m_EnableHotKeys = TRUE; // default true !! m_InterceptRDTSC = FALSE; m_HookOpenGL = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 9d16c58..9a2378e 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -145,8 +145,8 @@ public: BOOL m_NormalizePerfCount; BOOL m_QuarterBlt; BOOL m_FineTiming; + BOOL m_EnableTimeFreeze; BOOL m_ReleaseMouse; -// BOOL m_FrameCompensation; BOOL m_EnableHotKeys; BOOL m_InterceptRDTSC; BOOL m_HookOpenGL; @@ -171,6 +171,8 @@ public: BOOL m_LimitResources; BOOL m_CDROMDriveType; BOOL m_HideCDROMEmpty; + BOOL m_HookGOGLibs; + BOOL m_BypassGOGLibs; BOOL m_FontBypass; BOOL m_BufferedIOFix; BOOL m_ZBufferClean; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 6202d9a1dc3a5b08954b680c876c220fe06c0896..f8b2f0420ccd9d09e904359001b5d507983fb337 100644 GIT binary patch delta 3806 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 diff --git a/host/dxwndhost.cpp b/host/dxwndhost.cpp index 15ca581..30d2006 100644 --- a/host/dxwndhost.cpp +++ b/host/dxwndhost.cpp @@ -81,6 +81,12 @@ void CNewCommandLineInfo::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast) strcpy_s(m_ConfigFileName, sizeof(m_ConfigFileName)-1, sParam.Mid(2,sizeof(m_ConfigFileName)-1)); return; } + if (sParam.MakeLower() == "e"){ + // Exit (kill) existing DxWnd session + extern int KillProcByName(char *, BOOL); + KillProcByName("DxWnd.exe", TRUE); + exit(0); + } } // Call the base class to ensure proper command line processing diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 6b95828b58697da40cc8eaeaea94cb4caa0142ed..358eda297279636ac39263b67af63860bc8d08fc 100644 GIT binary patch delta 398 zcmZ8cJxGFK5WcrpKPW;JYYWNRM96;)5m8e~5;b*@pdtt~YN;k^XljZGPWrGZgP>9R zAcGv73R0;CTY}8JrM4ioQ>Ws%AMUw(?zz*7aCIjXU#@X?DT_xHLDH4ZmD~sp>G3|# zejK2L)~+Nj+qbvkCD)#*Voato_b=j>)jo92L`YR>q%8ojeE; z2%^e2tulfUY$VJG7BW3;coNP5E~eB>J4}PHKx(~WVVor~`XSIsD?WEzc=)X__nGL? oO~}9+?EHDs3n_?#2jXOdxqn0!uoICQLl+vc5@(81RA3MJUqL8+h5!Hn delta 169 zcmV;a09OC9#s-?e2C&w)lQw8hvrxCF5Cbv*GPC=~nF9qh04xAFlTlDNlhDhm0XCOW zD*-{1yv&xDL@)tDla$St0XCE0p*yoa&k_OwIG6D)0Tq*4@E)^-(Yzs(BJ>`U4qhU& ze)E0`12_OQlmGqU133UTlmGoavmpNp1_LnwFq8fLKbL+40UVcx1p$x+F#s|EF_ZuO XJ(Umv1e0+543}mG0lc?72?6$*D4Rpb diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index 76f8a0b7b1d2b8e58c130612c655bb792551c78f..beec9fa97c53ef59b12ad358341acdb09e6ef71d 100644 GIT binary patch delta 7073 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 diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index ba61a36..d79e1b5 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -270,6 +270,8 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_LimitResources) t->flags2 |= LIMITRESOURCES; if(dlg->m_CDROMDriveType) t->flags3 |= CDROMDRIVETYPE; if(dlg->m_HideCDROMEmpty) t->flags4 |= HIDECDROMEMPTY; + if(dlg->m_HookGOGLibs) t->flags6 |= HOOKGOGLIBS; + if(dlg->m_BypassGOGLibs) t->flags6 |= BYPASSGOGLIBS; if(dlg->m_FontBypass) t->flags3 |= FONTBYPASS; if(dlg->m_BufferedIOFix) t->flags3 |= BUFFEREDIOFIX; if(dlg->m_ZBufferClean) t->flags4 |= ZBUFFERCLEAN; @@ -380,7 +382,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_QuarterBlt) t->flags5 |= QUARTERBLT; if(dlg->m_FineTiming) t->flags4 |= FINETIMING; if(dlg->m_ReleaseMouse) t->flags4 |= RELEASEMOUSE; -// if(dlg->m_FrameCompensation) t->flags4 |= FRAMECOMPENSATION; + if(dlg->m_EnableTimeFreeze) t->flags4 |= ENABLETIMEFREEZE; if(dlg->m_EnableHotKeys) t->flags4 |= ENABLEHOTKEYS; if(dlg->m_InterceptRDTSC) t->flags4 |= INTERCEPTRDTSC; if(dlg->m_HookOpenGL) t->flags2 |= HOOKOPENGL; @@ -542,6 +544,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_LimitResources = t->flags2 & LIMITRESOURCES ? 1 : 0; dlg->m_CDROMDriveType = t->flags3 & CDROMDRIVETYPE ? 1 : 0; dlg->m_HideCDROMEmpty = t->flags4 & HIDECDROMEMPTY ? 1 : 0; + dlg->m_HookGOGLibs = t->flags6 & HOOKGOGLIBS ? 1 : 0; + dlg->m_BypassGOGLibs = t->flags6 & BYPASSGOGLIBS ? 1 : 0; dlg->m_FontBypass = t->flags3 & FONTBYPASS ? 1 : 0; dlg->m_BufferedIOFix = t->flags3 & BUFFEREDIOFIX ? 1 : 0; dlg->m_ZBufferClean = t->flags4 & ZBUFFERCLEAN ? 1 : 0; @@ -623,7 +627,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_QuarterBlt = t->flags5 & QUARTERBLT ? 1 : 0; dlg->m_FineTiming = t->flags4 & FINETIMING ? 1 : 0; dlg->m_ReleaseMouse = t->flags4 & RELEASEMOUSE ? 1 : 0; -// dlg->m_FrameCompensation = t->flags4 & FRAMECOMPENSATION ? 1 : 0; + dlg->m_EnableTimeFreeze = t->flags4 & ENABLETIMEFREEZE ? 1 : 0; dlg->m_EnableHotKeys = t->flags4 & ENABLEHOTKEYS ? 1 : 0; dlg->m_InterceptRDTSC = t->flags4 & INTERCEPTRDTSC ? 1 : 0; dlg->m_HookOpenGL = t->flags2 & HOOKOPENGL ? 1 : 0; diff --git a/host/host.aps b/host/host.aps index e615e8b950bea2cae8f2e8a6138611468618d4b0..9c58adf48a5c2cf54aba73c72af2f577f651bba3 100644 GIT binary patch delta 619 zcmZY5J!lj`7{>8=kBCi*D=bn7o8bb=AsTd*AQo9TA%(pu4$dW4TqI~rM50)@kRnBj zgr~J|AVrFB-kA?Quy7%Tg++=KmM$n*SO~GOi~l{ba$tS~!&AKPvvyKhKdEetTYb~l z>W5wD+BchxmAenx%_mn|lh<1D_15yzT(k3V`SIoW#@}~o&h_s<>snpkx)*F~^U;+v zu{rls$?M1(N^wjXHWjd^99LD~M_Dhj^YTa@W2LyJ49Vjw<@iellJ7@0Dvy_x^ds-8 z&Yhl)a?d_>oXKi+q@C^b$TsA$qXa)G z#YJWKUIFhZ$Bqh|kiCm+TpqWSU{xu8RyO<(LvvhEfn%~k*_j{I?6+>?s^$mLA39jx AZ2$lO delta 1038 zcmXxiPe_wt90&0CeSDX0dvnX}ec4{;yLWAFxzx>VNJRJtL@Gf$2z3}KG(o}?OhUth zhXM(y^m~!$;2}XGwrrqNB0OY7bnwtgI(P{xJOp+M(Vq8tcrFj`@7eeB{jqmjI3n{$ zwgaF)B!vb=iTt4g#%mL4a?qZ`% zM<)hK8u{bKzMCbxt9O*0-#Q*~|LIbbGe@oUHGyju$%b+Y4Yj!24bW@ib_li+-t}K~dmi zg;(mu?6(VvH-vxnEJ_AL=m_yQxYi(2I(vh&rdX@;H@IWswMmzi72>yW66VXUT7m^I zQP$L#5y2Wb+lyd3!dWbe+9>;hqXHQWy@?4F!De(cb2i^Bn8n!l7Qrmeysh}x!dW4O z{uF1+DZ$P&c9<3{!kN_uR~u(j8Qjirww4hrW;1e}#itFEq;oKG#?q!DUxH&ZEH9vO zGfWEY=x?XL8omCE5qdp_$MmdVm7aO*+L2E5cN$9-g;?EibsMlMiX1{?B}`U&@uZh( zdZA*3UVQ7rhdu)f(Q^*>w!;4b)IfR* diff --git a/host/resource b/host/resource index 434f71bf921824db0947f7615d43576d9a67ef4b..fefdb32b5ce44f7eb87c455870aeb05551ba7821 100644 GIT binary patch delta 118 zcmZoz#x!FE(}s|o$qP()xZN528Qd9s7(5xACOfjLPFBcfn>