From c22cda8a40792bf31d2718de25b4d59b88e346a4 Mon Sep 17 00:00:00 2001 From: gho tik Date: Thu, 29 Sep 2016 12:47:27 -0400 Subject: [PATCH] v2_03_89_src Former-commit-id: ba83a72b7c6694e0f34c45ca2c7dca48787612aa --- build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- ... 3.dxw => Microsoft Motocross Madness.dxw} | 12 +-- build/exports/Street Fighter Zero II.dxw | 33 -------- .../exports/Super Puzzle Fighter 2 Turbo.dxw | 33 -------- build/readme-relnotes.txt | 8 +- dll/ddblit.cpp | 12 +-- dll/ddraw.cpp | 35 ++++++-- dll/dxmapping.cpp | 23 ++++-- dll/dxwcore.cpp | 15 +++- dll/dxwcore.hpp | 4 +- dll/dxwnd.aps | Bin 58160 -> 58176 bytes dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 107008 -> 104448 bytes dll/dxwnd.vs2008.vcproj | 4 + dll/logall.h | 16 ++++ dll/user32.cpp | 52 +++++------- dll/winmm.cpp | 77 ++++++++++++------ host/dxwndhost.vs2008.suo | Bin 46592 -> 46592 bytes 19 files changed, 165 insertions(+), 167 deletions(-) rename build/exports/{Crazy Hospital 3.dxw => Microsoft Motocross Madness.dxw} (69%) delete mode 100644 build/exports/Street Fighter Zero II.dxw delete mode 100644 build/exports/Super Puzzle Fighter 2 Turbo.dxw create mode 100644 dll/logall.h diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 5e2b8cb..e37f5b1 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2cb685fd9bcac89865a83e26fbdc14663d7d2f9bba0014f1e4c44606f6bb7702 -size 680960 +oid sha256:9070435639bcf64aebc632f848af969aa24800cb40864ae90d5ce56a1d43b373 +size 681472 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 2632b2e..767685f 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7b7d8268a048d4d8600bca6824ef8226e2dab5bb347d07b9bb2afff7d2a73d1 +oid sha256:14ddc8f6eaa1eac7dc356e8824fb118e014fe5b5e8828432e2ffa0ac58f1f3c4 size 660992 diff --git a/build/exports/Crazy Hospital 3.dxw b/build/exports/Microsoft Motocross Madness.dxw similarity index 69% rename from build/exports/Crazy Hospital 3.dxw rename to build/exports/Microsoft Motocross Madness.dxw index af26bef..328fb85 100644 --- a/build/exports/Crazy Hospital 3.dxw +++ b/build/exports/Microsoft Motocross Madness.dxw @@ -1,6 +1,6 @@ [target] -title0=Crazy Hospital 3 -path0=D:\Games\Crazy Hospital 3\Dtrmain.exe +title0=Microsoft Motocross Madness +path0=F:\Games\Motocross Madness\mcm.exe startfolder0= launchpath0= module0= @@ -11,10 +11,10 @@ ver0=0 monitorid0=-1 coord0=0 flag0=136314914 -flagg0=1207959552 +flagg0=134219776 flagh0=20 -flagi0=138412036 -flagj0=4224 +flagi0=4194308 +flagj0=0 flagk0=65536 flagl0=0 flagm0=0 @@ -30,4 +30,4 @@ winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 -slowratio0=2 +slowratio0=1 diff --git a/build/exports/Street Fighter Zero II.dxw b/build/exports/Street Fighter Zero II.dxw deleted file mode 100644 index c9f6633..0000000 --- a/build/exports/Street Fighter Zero II.dxw +++ /dev/null @@ -1,33 +0,0 @@ -[target] -title0=Street Fighter Zero II -path0=D:\Games\sfzero2\ZERO2.exe -startfolder0= -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=0 -monitorid0=-1 -coord0=0 -flag0=136314914 -flagg0=1207959552 -flagh0=20 -flagi0=138412036 -flagj0=4224 -flagk0=65536 -flagl0=0 -flagm0=0 -tflag0=0 -dflag0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -maxddinterface0=7 -slowratio0=2 diff --git a/build/exports/Super Puzzle Fighter 2 Turbo.dxw b/build/exports/Super Puzzle Fighter 2 Turbo.dxw deleted file mode 100644 index f03e1ea..0000000 --- a/build/exports/Super Puzzle Fighter 2 Turbo.dxw +++ /dev/null @@ -1,33 +0,0 @@ -[target] -title0=Super Puzzle Fighter 2 Turbo -path0=D:\Games\Super Puzzle Fighter 2 Turbo (1997)\W_Spf2x.exe -startfolder0= -launchpath0= -module0= -opengllib0= -notes0= -registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Capcom]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Capcom\w_spf2x]\n"SAVEDIR"=".\\"\n"SC_MODE"="SCREEN_MODE_640*480_8BIT_DIRECTX"\n"CD_ROM"=".\\"\n"SETUPCEHCK"="SETUP_ALL_OK"\n"NET_USER"=""\n\n -ver0=0 -monitorid0=-1 -coord0=0 -flag0=136314914 -flagg0=1207959552 -flagh0=1044 -flagi0=1212153860 -flagj0=5248 -flagk0=67584 -flagl0=32768 -flagm0=0 -tflag0=0 -dflag0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -maxddinterface0=7 -slowratio0=2 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 523461f..f5f400e 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1266,6 +1266,10 @@ fix: added ddraw hooking in ddrawex/CreateDirectDraw() call: now "Theocracy" wor fix: added hook for EnumDisplayDevicesW used by "Battleground Europe" fix: added "Hide multi monitors" logic to EnumDisplayDevicesA/W - - +v2.03.89 +fix: replaced hooked LoadLibrary with original call (*pLoadLibraryA), this seems to avoid the hook address replacements and the need for the "No hook update" flag. To be tested. +fix: added some missing IID_DirectDraw3 case in DirectDraw hooking +fix: fixed the logic for centering the main window for desktop with non-zero offset +fix: improved logic for window placement in CreateWindowEx call +fix: added wrapper for winmm/GetJoyPos() virtual joystick referenced in "Jane's FA18" diff --git a/dll/ddblit.cpp b/dll/ddblit.cpp index e11185f..572cf32 100644 --- a/dll/ddblit.cpp +++ b/dll/ddblit.cpp @@ -369,17 +369,7 @@ HRESULT WINAPI sBlt(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDRAWSURFACE HRESULT res; BOOL ToPrim, FromPrim, ToScreen, FromScreen; - if(dxw.dwFlags5 & MESSAGEPUMP){ - MSG msg; - while(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){ - OutTraceW("MESSAGEPUMP: msg=%x l-wParam=(%x,%x)\n", msg.message, msg.lParam, msg.wParam); - if((msg.message >= WM_KEYFIRST) && (msg.message <= WM_KEYLAST)) break; // do not consume keyboard inputs - if((msg.message >= WM_MOUSEFIRST) && (msg.message <= WM_MOUSELAST)) break; // do not consume mouse inputs - PeekMessage(&msg, NULL, 0, 0, PM_REMOVE); - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } + if(dxw.dwFlags5 & MESSAGEPUMP) dxw.MessagePump(); ToPrim=dxwss.IsAPrimarySurface(lpdds); FromPrim=dxwss.IsAPrimarySurface(lpddssrc); diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index f18ef06..081a8ab 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -748,7 +748,7 @@ static void ddSetCompatibility() HRESULT res; HINSTANCE hinst; - hinst=LoadLibrary("ddraw.dll"); + hinst=(*pLoadLibraryA)("ddraw.dll"); pSetAppCompatData=(SetAppCompatData_Type)(*pGetProcAddress)(hinst, "SetAppCompatData"); if(pSetAppCompatData) { if (dxw.dwFlags2 & SETCOMPATIBILITY){ @@ -776,7 +776,7 @@ static void BypassGOGDDrawRedirector() GetSystemDirectory(sSysLibraryPath, MAX_PATH); strcat(sSysLibraryPath, "\\ddraw.dll"); - hinst = LoadLibrary(sSysLibraryPath); + hinst = (*pLoadLibraryA)(sSysLibraryPath); pDirectDrawEnumerateA = (DirectDrawEnumerateA_Type)GetProcAddress(hinst, "DirectDrawEnumerateA"); pDirectDrawEnumerateExA = (DirectDrawEnumerateExA_Type)GetProcAddress(hinst, "DirectDrawEnumerateExA"); pDirectDrawEnumerateW = (DirectDrawEnumerateW_Type)GetProcAddress(hinst, "DirectDrawEnumerateW"); @@ -825,7 +825,7 @@ int HookDirectDraw(HMODULE module, int version) case 6: HookLibraryEx(module, ddHooks, "ddraw.dll"); if(!pDirectDrawCreate){ // required for IAT patching - hinst = LoadLibrary("ddraw.dll"); + hinst = (*pLoadLibraryA)("ddraw.dll"); pDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate"); pDirectDrawEnumerateA = (DirectDrawEnumerateA_Type)GetProcAddress(hinst, "DirectDrawEnumerateA"); } @@ -844,7 +844,7 @@ int HookDirectDraw(HMODULE module, int version) //hinst = LoadLibrary("ddraw.dll"); HookLibraryEx(module, ddHooks, "ddraw.dll"); if(!pDirectDrawCreate){ // required for IAT patching in "Crimson skies" - hinst = LoadLibrary("ddraw.dll"); + hinst = (*pLoadLibraryA)("ddraw.dll"); pDirectDrawEnumerateA = (DirectDrawEnumerateA_Type)GetProcAddress(hinst, "DirectDrawEnumerateA"); pDirectDrawEnumerateExA = (DirectDrawEnumerateExA_Type)GetProcAddress(hinst, "DirectDrawEnumerateExA"); pDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate"); @@ -1637,7 +1637,7 @@ HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, I if(!pDirectDrawCreate){ // not hooked yet.... HINSTANCE hinst; - hinst = LoadLibrary("ddraw.dll"); + hinst = (*pLoadLibraryA)("ddraw.dll"); if(!hinst){ OutTraceE("LoadLibrary ERROR err=%d at %d\n", GetLastError(), __LINE__); } @@ -1674,6 +1674,7 @@ HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, I switch (*(DWORD *)lpguid){ case 0x6C14DB80: dxw.dwDDVersion=1; mode="IID_IDirectDraw"; break; case 0xB3A6F3E0: dxw.dwDDVersion=2; mode="IID_IDirectDraw2"; break; + case 0x618f8ad4: dxw.dwDDVersion=3; mode="IID_IDirectDraw3"; break; case 0x9c59509a: dxw.dwDDVersion=4; mode="IID_IDirectDraw4"; break; case 0x15e65ec0: dxw.dwDDVersion=7; mode="IID_IDirectDraw7"; break; default: mode="unknown"; break; @@ -1730,7 +1731,7 @@ HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid, // v2.1.70: auto-hooking (just in case...) if(!pDirectDrawCreateEx){ // not hooked yet.... HINSTANCE hinst; - hinst = LoadLibrary("ddraw.dll"); + hinst = (*pLoadLibraryA)("ddraw.dll"); if(!hinst){ OutTraceE("LoadLibrary ERROR err=%d at %d\n", GetLastError(), __LINE__); } @@ -1767,6 +1768,7 @@ HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid, switch (*(DWORD *)lpguid){ case 0x6C14DB80: dxw.dwDDVersion=1; mode="IID_IDirectDraw"; break; case 0xB3A6F3E0: dxw.dwDDVersion=2; mode="IID_IDirectDraw2"; break; + case 0x618f8ad4: dxw.dwDDVersion=3; mode="IID_IDirectDraw3"; break; case 0x9c59509a: dxw.dwDDVersion=4; mode="IID_IDirectDraw4"; break; case 0x15e65ec0: dxw.dwDDVersion=7; mode="IID_IDirectDraw7"; break; default: mode="unknown"; break; @@ -4006,7 +4008,7 @@ HRESULT WINAPI extBlt4(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRA HRESULT WINAPI extBlt7(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx) { return extBlt(7, pBlt7, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); } -HRESULT WINAPI extBltFast(int dxversion, Blt_Type pBlt, BltFast_Type pBltFast, +static HRESULT WINAPI extBltFast(int dxversion, Blt_Type pBlt, BltFast_Type pBltFast, LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans) { @@ -4036,6 +4038,7 @@ HRESULT WINAPI extBltFast(int dxversion, Blt_Type pBlt, BltFast_Type pBltFast, // try the actual method first, it may work in some corcumstances.... // when ret is DDERR_UNSUPPORTED try the emulated path. if(!(ToPrim || FromPrim)) { + if(dxw.dwFlags5 & MESSAGEPUMP) dxw.MessagePump(); ret = pBltFast(lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); if(ret != DDERR_UNSUPPORTED) { if(ret) OutTraceE("BltFast ERROR: res=%x(%s)\n", ret, ExplainDDError(ret)); @@ -4056,7 +4059,14 @@ HRESULT WINAPI extBltFast(int dxversion, Blt_Type pBlt, BltFast_Type pBltFast, if(dwtrans & DDBLTFAST_SRCCOLORKEY) flags |= DDBLT_KEYSRC; if ((dxw.dwFlags2 & FULLRECTBLT) && ToPrim){ - return sBlt(dxversion, pBlt, "BltFast", lpdds, NULL, lpddssrc, lpsrcrect, flags, NULL, FALSE); + ret = sBlt(dxversion, pBlt, "BltFast", lpdds, NULL, lpddssrc, lpsrcrect, flags, NULL, FALSE); + if(ret) { + OutTraceE("BltFast FULLRECBLT res=%x\n", ret); + } + else { + OutTraceDDRAW("BltFast FULLRECBLT res=DD_OK\n"); + } + return ret; } destrect.left = dwx; @@ -4078,7 +4088,7 @@ HRESULT WINAPI extBltFast(int dxversion, Blt_Type pBlt, BltFast_Type pBltFast, ret=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd); if (ret){ OutTraceE("BltFast: GetSurfaceDesc ERROR %x at %d\n", ret, __LINE__); - return 0; + return DD_OK; } destrect.right = destrect.left + ddsd.dwWidth; destrect.bottom = destrect.top + ddsd.dwHeight; @@ -4086,10 +4096,17 @@ HRESULT WINAPI extBltFast(int dxversion, Blt_Type pBlt, BltFast_Type pBltFast, } else{ //ret=sBlt("BltFast", lpdds, NULL, lpddssrc, NULL, flags, NULL, FALSE); + OutTraceDW("BltFast FAKE res=DD_OK at %d\n", __LINE__); ret=DD_OK; } } + if(ret) { + OutTraceE("BltFast ERROR: res=%x(%s)\n", ret, ExplainDDError(ret)); + } + else { + OutTraceDDRAW("BltFast: res=DD_OK\n"); + } return ret; } diff --git a/dll/dxmapping.cpp b/dll/dxmapping.cpp index 1e8e984..116dc55 100644 --- a/dll/dxmapping.cpp +++ b/dll/dxmapping.cpp @@ -6,18 +6,20 @@ #include "syslibs.h" #include "dxhelper.h" -#if 0 +// IsValidMainWindow: returns TRUE if the main window can be queried for coordinates, +// FALSE otherwise (e.g. when minimized) + BOOL dxwCore::IsValidMainWindow() { RECT Client; POINT UpLeft = {0, 0}; - if(!(*pGetClientRect)(hWnd, &Client)) return FALSE; if((Client.right == 0) || (Client.bottom == 0)) return FALSE; if(!(*pClientToScreen)(hWnd, &UpLeft)) return FALSE; return TRUE; } -#endif + +// if the main window coordinates are still valid updates the window placement values void dxwCore::UpdateDesktopCoordinates() { @@ -36,7 +38,6 @@ void dxwCore::UpdateDesktopCoordinates() OutTraceB("dxwCore::UpdateDesktopCoordinates: NEW pos=(%d,%d) size=(%dx%d)\n", iPosX, iPosY, iSizX, iSizY); } - // GetScreenRect: returns a RECT sized as the virtual desktop RECT dxwCore::GetScreenRect() @@ -346,7 +347,8 @@ void dxwCore::GetMonitorWorkarea(LPRECT lpRect, BOOL WorkArea) MonitorId = -1; GetMonitorWorkarea(lpRect, WorkArea); } - + OutTraceB("dxwCore::GetMonitorWorkarea: id=%d workarea=%x rect=(%d,%d)-(%d,%d)\n", + MonitorId, WorkArea, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); } // v.2.1.80: unified positioning logic into CalculateWindowPos routine @@ -360,7 +362,7 @@ void dxwCore::CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWP int MaxX, MaxY; HMENU hMenu; - switch(dxw.Coordinates){ + switch(Coordinates){ case DXW_DESKTOP_CENTER: if(bAutoScale){ MaxX = GetScreenWidth(); @@ -381,8 +383,8 @@ void dxwCore::CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWP if(dxw.dwFlags4 & BILINEAR2XFILTER) MaxY <<= 1; // double } dxw.GetMonitorWorkarea(&desktop, TRUE); - rect.left = (desktop.right - desktop.left - MaxX) / 2; - rect.top = (desktop.bottom - desktop.top - MaxY) / 2; + rect.left = (desktop.right + desktop.left - MaxX) / 2; // v2.03.89 - fixed + rect.top = (desktop.bottom + desktop.top - MaxY) / 2; // v2.03.89 - fixed rect.right = rect.left + MaxX; rect.bottom = rect.top + MaxY; //v2.02.09 // fixed .... @@ -425,6 +427,8 @@ void dxwCore::CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWP rect.bottom = iPosY + MaxY; //v2.02.09 break; } + OutTraceB("dxwCore::CalculateWindowPos: coord=%d client rect=(%d,%d)-(%d,%d)\n", + Coordinates, rect.left, rect.top, rect.right, rect.bottom); if(hwnd){ RECT UnmappedRect; @@ -468,6 +472,9 @@ void dxwCore::CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWP } } + OutTraceB("dxwCore::CalculateWindowPos: coord=%d window rect=(%d,%d)-(%d,%d)\n", + Coordinates, rect.left, rect.top, rect.right, rect.bottom); + // update the arguments for the window creation wp->x=rect.left; wp->y=rect.top; diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index e3161a2..4cd3b0e 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -1557,4 +1557,17 @@ void dxwCore::ToggleFreezedTime() TimeFreeze = !TimeFreeze; dwLastTime = (*pGetTickCount)(); OutTraceDW("DxWnd: time is %s\n", dxw.TimeFreeze ? "freezed" : "unfreezed"); -} \ No newline at end of file +} + +void dxwCore::MessagePump() +{ + MSG msg; + while(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){ + OutTraceW("MESSAGEPUMP: msg=%x l-wParam=(%x,%x)\n", msg.message, msg.lParam, msg.wParam); + if((msg.message >= WM_KEYFIRST) && (msg.message <= WM_KEYLAST)) break; // do not consume keyboard inputs + if((msg.message >= WM_MOUSEFIRST) && (msg.message <= WM_MOUSELAST)) break; // do not consume mouse inputs + PeekMessage(&msg, NULL, 0, 0, PM_REMOVE); + TranslateMessage(&msg); + DispatchMessage(&msg); + } +} diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index 47921d9..11c71b9 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -68,6 +68,7 @@ public: // methods void FixNCHITCursorPos(LPPOINT); void SetClipCursor(void); void EraseClipCursor(void); + BOOL IsValidMainWindow(); RECT MapWindowRect(LPRECT); RECT MapWindowRect(void); RECT MapClientRect(LPRECT); @@ -105,7 +106,7 @@ public: // methods void GetSystemTimeAsFileTime(LPFILETIME); DWORD StretchTime(DWORD); DWORD StretchCounter(DWORD); - LARGE_INTEGER dxwCore::StretchCounter(LARGE_INTEGER); + LARGE_INTEGER StretchCounter(LARGE_INTEGER); void ShowOverlay(); void ShowOverlay(HDC); void ShowOverlay(HDC, int, int); @@ -144,6 +145,7 @@ public: // methods void ToggleFreezedTime(); void GetMonitorWorkarea(LPRECT, BOOL); void CalculateWindowPos(HWND, DWORD, DWORD, LPWINDOWPOS); + void MessagePump(void); public: // simple data variables int MonitorId; diff --git a/dll/dxwnd.aps b/dll/dxwnd.aps index df04110a30e723dc94ccd4bd46207c67d440bf1c..8d4793cd0ef12f0d13e51a43128019a62a7f6163 100644 GIT binary patch delta 300 zcmdmRjQPMZ<_QXnniCb3wGAFJFr-+;xKxDarNopO#TyvMTUf@Yq$ZW7$E4)s#H3V| z=cVWsB{MKEY|Ku*!z2C+T)jav( zeG@oa`T>F+ip1_mVxN3qp@`LD8wM4I|NlXlfnl=zLsdr2$*vF88JA2f)Mpg~I_t^g zg%6FH3>YW=(_=m1%fJvane&l6la2pmIe#hE2z~~JEt5Tg0y=q<`SKtFOD1;$1!Q_B m|Lc)rwQ*ozm@)a}BYD;&CI*HdlivbaYZ)0B8YT-qmInYn6==-> delta 275 zcmX?bjCsQ`<_QXn8WRK$KhV}^K!B!*Om5{AUh`ggUN7?)3uz2C+L(KPwheG?c{^#Poj zfMCu>Ft0tZki%jZgAIcU!~g#vJX!ytDx=2a(1+@b3nnu%%1)m3P>k`x6G%!--U%e9OuqR@o;87q Uf#J*Kzd+VEV0RwYqW&i*H diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index fbfbfe1..4c95869 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.88.fix1" +#define VERSION "2.03.89" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 4841ea0485b5dc79c445a6ddb2c40a8646439401..9970e5a8f6dcd2419582939d38f633fe38eae712 100644 GIT binary patch literal 104448 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 literal 107008 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 diff --git a/dll/dxwnd.vs2008.vcproj b/dll/dxwnd.vs2008.vcproj index aded5d8..be323b1 100644 --- a/dll/dxwnd.vs2008.vcproj +++ b/dll/dxwnd.vs2008.vcproj @@ -562,6 +562,10 @@ RelativePath=".\hddraw.h" > + + diff --git a/dll/logall.h b/dll/logall.h new file mode 100644 index 0000000..f1cfc08 --- /dev/null +++ b/dll/logall.h @@ -0,0 +1,16 @@ +#ifdef OutTraceB +#undef OutTraceB +#define OutTraceB OutTrace +#endif +#ifdef OutTraceDW +#undef OutTraceDW +#define OutTraceDW OutTrace +#endif +#ifdef OutTraceC +#undef OutTraceC +#define OutTraceC OutTrace +#endif +#ifdef OutTraceE +#undef OutTraceE +#define OutTraceE OutTrace +#endif \ No newline at end of file diff --git a/dll/user32.cpp b/dll/user32.cpp index 9df5cc4..f2fb7af 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -493,6 +493,9 @@ void dxwFixWindowPos(char *ApiName, HWND hwnd, LPARAM lParam) OutTraceDW("%s: GOT hwnd=%x pos=(%d,%d) dim=(%d,%d) Flags=%x(%s)\n", ApiName, hwnd, wp->x, wp->y, wp->cx, wp->cy, wp->flags, ExplainWPFlags(wp->flags)); + // if nothing to be moved, do nothing + if ((wp->flags & (SWP_NOMOVE|SWP_NOSIZE))==(SWP_NOMOVE|SWP_NOSIZE)) return; //v2.02.13 + if (dxw.dwFlags1 & PREVENTMAXIMIZE){ int UpdFlag = 0; WINDOWPOS MaxPos; @@ -504,8 +507,6 @@ void dxwFixWindowPos(char *ApiName, HWND hwnd, LPARAM lParam) OutTraceDW("%s: SET max dim=(%d,%d)\n", ApiName, wp->cx, wp->cy); } - if ((wp->flags & (SWP_NOMOVE|SWP_NOSIZE))==(SWP_NOMOVE|SWP_NOSIZE)) return; //v2.02.13 - if ((dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen() && (hwnd==dxw.GethWnd())){ dxw.CalculateWindowPos(hwnd, MaxX, MaxY, wp); OutTraceDW("%s: LOCK pos=(%d,%d) dim=(%d,%d)\n", ApiName, wp->x, wp->y, wp->cx, wp->cy); @@ -1543,9 +1544,6 @@ static HWND WINAPI CreateWindowCommon( // v2.03.53: revised code, logic moved to IsFullscreenWindow if(isNewDesktop=IsFullscreenWindow(lpClassName, dwStyle, dwExStyle, hWndParent, x, y, nWidth, nHeight)){ - RECT screen; - POINT upleft = {0,0}; - // if already in fullscreen mode, save previous settings if(dxw.IsFullScreen() && dxw.GethWnd()){ hLastFullScrWin = dxw.GethWnd(); @@ -1559,25 +1557,14 @@ static HWND WINAPI CreateWindowCommon( // inserted some checks here, since the main window could be destroyed // or minimized (see "Jedi Outcast") so that you may get a dangerous // zero size. In this case, better renew the hWnd assignement and its coordinates. - do { // fake loop - isValidHandle = FALSE; - if (!(*pGetClientRect)(dxw.GethWnd(),&screen)) break; - if (!(*pClientToScreen)(dxw.GethWnd(),&upleft)) break; - if (screen.right==0 || screen.bottom==0) break; - isValidHandle = TRUE; - } while(FALSE); - if (isValidHandle){ // use parent's coordinates - // child windows of the current virtual desktop have relative coordinates - // but non child windows or child of the real desktop must be shifted.... - //if (!(dwStyle & WS_CHILD) || (dxw.IsDesktop(hWndParent))){ - if (!(dwStyle & WS_CHILD)){ - x=upleft.x; - y=upleft.y; - } - nWidth=screen.right; - nHeight=screen.bottom; - OutTraceDW("%s: fixed BIG win pos=(%d,%d) size=(%d,%d)\n", ApiName, x, y, nWidth, nHeight); + isValidHandle = dxw.IsValidMainWindow(); + if (!(dwStyle & WS_CHILD) || (dxw.IsRealDesktop(hWndParent))){ + x=dxw.iPosX; + y=dxw.iPosY; } + nWidth=dxw.GetScreenWidth(); + nHeight=dxw.GetScreenHeight(); + OutTraceDW("%s: fixed client pos=(%d,%d) size=(%d,%d)\n", ApiName, x, y, nWidth, nHeight); dxw.SetFullScreen(TRUE); } @@ -1593,7 +1580,7 @@ static HWND WINAPI CreateWindowCommon( // from here on, fullscreen is garanteed if(!isNewDesktop){ - if (dwStyle & WS_CHILD){ + if ((dwStyle & WS_CHILD) && !dxw.IsRealDesktop(hWndParent)){ // tested on Gangsters: coordinates must be window-relative!!! // Age of Empires.... dxw.MapClient(&x, &y, &nWidth, &nHeight); @@ -1601,15 +1588,13 @@ static HWND WINAPI CreateWindowCommon( ApiName, x, y, nWidth, nHeight); } 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); - } + // 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 ABSOLUTE pos=(%d,%d) size=(%d,%d)\n", + ApiName, x, y, nWidth, nHeight); } } @@ -1628,6 +1613,7 @@ static HWND WINAPI CreateWindowCommon( if (dwExStyle & WS_EX_CONTROLPARENT) hControlParentWnd=hwnd; + // replace the invalid main win with the new one if ((!isValidHandle) && dxw.IsFullScreen()){ dxw.SethWnd(hwnd); extern void AdjustWindowPos(HWND, DWORD, DWORD); diff --git a/dll/winmm.cpp b/dll/winmm.cpp index 224b52f..b6d0e41 100644 --- a/dll/winmm.cpp +++ b/dll/winmm.cpp @@ -15,6 +15,8 @@ #define EMULATEJOY TRUE #define INVERTJOYAXIS TRUE +// #include "logall.h" // comment when not debugging + BOOL IsWithinMCICall = FALSE; typedef MCIDEVICEID (WINAPI *mciGetDeviceIDA_Type)(LPCTSTR); @@ -32,6 +34,9 @@ MMRESULT WINAPI extjoyGetDevCapsA(DWORD, LPJOYCAPS, UINT); typedef MMRESULT (WINAPI *joyGetPosEx_Type)(DWORD, LPJOYINFOEX); joyGetPosEx_Type pjoyGetPosEx = NULL; MMRESULT WINAPI extjoyGetPosEx(DWORD, LPJOYINFOEX); +typedef MMRESULT (WINAPI *joyGetPos_Type)(DWORD, LPJOYINFO); +joyGetPos_Type pjoyGetPos = NULL; +MMRESULT WINAPI extjoyGetPos(DWORD, LPJOYINFO); typedef MMRESULT (WINAPI *auxGetNumDevs_Type)(void); auxGetNumDevs_Type pauxGetNumDevs = NULL; MMRESULT WINAPI extauxGetNumDevs(void); @@ -62,6 +67,7 @@ static HookEntryEx_Type JoyHooks[]={ {HOOK_IAT_CANDIDATE, 0, "joyGetNumDevs", NULL, (FARPROC *)&pjoyGetNumDevs, (FARPROC)extjoyGetNumDevs}, {HOOK_IAT_CANDIDATE, 0, "joyGetDevCapsA", NULL, (FARPROC *)&pjoyGetDevCapsA, (FARPROC)extjoyGetDevCapsA}, {HOOK_IAT_CANDIDATE, 0, "joyGetPosEx", NULL, (FARPROC *)&pjoyGetPosEx, (FARPROC)extjoyGetPosEx}, + {HOOK_IAT_CANDIDATE, 0, "joyGetPos", NULL, (FARPROC *)&pjoyGetPos, (FARPROC)extjoyGetPos}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; @@ -211,7 +217,7 @@ MCIERROR WINAPI extmciSendCommand(mciSendCommand_Type pmciSendCommand, MCIDEVICE switch(uMsg){ case MCI_STATUS: MCI_STATUS_PARMS *p = (MCI_STATUS_PARMS *)dwParam; - OutTrace("mciSendCommand: Item=%d Track=%d return=%x\n", p->dwItem, p->dwTrack, p->dwReturn); + OutTraceDW("mciSendCommand: Item=%d Track=%d return=%x\n", p->dwItem, p->dwTrack, p->dwReturn); break; } } @@ -326,9 +332,9 @@ MMRESULT WINAPI extjoyGetDevCapsA(DWORD uJoyID, LPJOYCAPS pjc, UINT cbjc) // set Joystick capability structure memset(pjc, 0, sizeof(JOYCAPS)); strncpy(pjc->szPname, "DxWnd Joystick Emulator", MAXPNAMELEN); - pjc->wXmin = 0; + pjc->wXmin = -XSPAN; pjc->wXmax = XSPAN; - pjc->wYmin = 0; + pjc->wYmin = -YSPAN; pjc->wYmax = YSPAN; pjc->wNumButtons = 2; pjc->wMaxButtons = 2; @@ -341,11 +347,11 @@ MMRESULT WINAPI extjoyGetDevCapsA(DWORD uJoyID, LPJOYCAPS pjc, UINT cbjc) return JOYERR_NOERROR; } -MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji) +static MMRESULT GetJoy(char *apiname, DWORD uJoyID, LPJOYINFO lpj) { - OutTraceC("joyGetPosEx: joyid=%d\n", uJoyID); + OutTraceC("%s: joyid=%d\n", apiname, uJoyID); if(uJoyID != 0) return JOYERR_PARMS; - LONG x, y; + LONG x, y, CenterX, CenterY; HWND hwnd; DWORD dwButtons; static BOOL bJoyLock = FALSE; @@ -355,7 +361,7 @@ MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji) if (GetKeyState(VK_LBUTTON) < 0) dwButtons |= JOY_BUTTON1; if (GetKeyState(VK_RBUTTON) < 0) dwButtons |= JOY_BUTTON2; if (GetKeyState(VK_MBUTTON) < 0) dwButtons |= JOY_BUTTON3; - OutTraceB("joyGetPosEx: Virtual Joystick buttons=%x\n", dwButtons); + OutTraceB("%s: Virtual Joystick buttons=%x\n", apiname, dwButtons); if(dwButtons == JOY_BUTTON3){ if(((*pGetTickCount)() - dwLastClick) > 200){ @@ -365,8 +371,10 @@ MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji) } } - x=(XSPAN>>1); - y=(YSPAN>>1); + // default: centered position + x=0; + y=0; + // get cursor position and map it to virtual joystick x,y axis if(hwnd=dxw.GethWnd()){ POINT pt; RECT client; @@ -379,43 +387,60 @@ MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji) if(bJoyLock || !dxw.bActive){ // when the joystick is "locked" (bJoyLock) or when the window lost focus // (dxw.bActive == FALSE) place the joystick in the central position - OutTraceB("joyGetPosEx: CENTERED lock=%x active=%x\n", bJoyLock, dxw.bActive); - x=(XSPAN>>1); - y=(YSPAN>>1); + OutTraceB("%s: CENTERED lock=%x active=%x\n", apiname, bJoyLock, dxw.bActive); + x=0; + y=0; pt.x = client.right >> 1; pt.y = client.bottom >> 1; dwButtons = JOY_BUTTON3; } else{ - OutTraceB("joyGetPosEx: ACTIVE mouse=(%d,%d)\n", pt.x, pt.y); + OutTraceB("%s: ACTIVE mouse=(%d,%d)\n", apiname, pt.x, pt.y); if(pt.x < client.left) pt.x = client.left; if(pt.x > client.right) pt.x = client.right; if(pt.y < client.top) pt.y = client.top; if(pt.y > client.bottom) pt.y = client.bottom; - x = (pt.x * XSPAN) / client.right; + CenterX = (client.right - client.left) >> 1; + CenterY = (client.bottom - client.top) >> 1; + x = ((pt.x - CenterX) * XSPAN) / client.right; if(INVERTJOYAXIS) - y = ((client.bottom - pt.y) * YSPAN) / client.bottom; // inverted y axis + y = ((CenterY - pt.y) * YSPAN) / client.bottom; // inverted y axis else - y = (pt.y * YSPAN) / client.bottom; + y = ((pt.y - CenterY) * YSPAN) / client.bottom; } ShowJoystick(pt.x, pt.y, dwButtons); } - else { - x=(XSPAN>>1); - y=(YSPAN>>1); - } + lpj->wXpos = x; + lpj->wYpos = y; + lpj->wZpos = 0; + lpj->wButtons = dwButtons; + OutTraceC("%s: joyid=%d pos=(%d,%d)\n", apiname, uJoyID, lpj->wXpos, lpj->wYpos); + return JOYERR_NOERROR; +} - // set Joystick info structure +MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji) +{ + MMRESULT res; + JOYINFO jinfo; + res=GetJoy("joyGetPosEx", uJoyID, &jinfo); + + // set Joystick JOYINFOEX info structure memset(pji, 0, sizeof(JOYINFOEX)); pji->dwSize = sizeof(JOYINFOEX); pji->dwFlags = 0; - pji->dwXpos = x; - pji->dwYpos = y; - pji->dwButtons = dwButtons; + pji->dwXpos = jinfo.wXpos; + pji->dwYpos = jinfo.wYpos; + pji->dwButtons = jinfo.wButtons; pji->dwFlags = JOY_RETURNX|JOY_RETURNY|JOY_RETURNBUTTONS; - OutTraceC("joyGetPosEx: joyid=%d pos=(%d,%d)\n", uJoyID, pji->dwXpos, pji->dwYpos); - return JOYERR_NOERROR; + return res; +} + +MMRESULT WINAPI extjoyGetPos(DWORD uJoyID, LPJOYINFO pji) +{ + MMRESULT res; + res=GetJoy("joyGetPosEx", uJoyID, pji); + return res; } static void ShowJoystick(LONG x, LONG y, DWORD dwButtons) diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index d5fbefdd49798520f3980b15738e8882f3ee67aa..0b47af63e760495aad07c3e89dfbb030b8cd5900 100644 GIT binary patch literal 46592 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 delta 11419 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