From 890f146ec6899a7abe477c9d7f6c2fa6328b5d08 Mon Sep 17 00:00:00 2001 From: gho tik Date: Sat, 4 Jul 2015 12:40:35 -0400 Subject: [PATCH] v2_03_16_src Former-commit-id: cec173954b5e4acdc7ad2281fbeb997740cbcf6b --- Include/dxwnd.h | 2 + build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- build/exports/Darkened Skye.dxw | 4 +- build/exports/dxwnd.ini | 5 ++ build/readme-relnotes.txt | 6 ++ dll/ddblit.cpp | 3 +- dll/ddraw.cpp | 3 +- dll/dxhook.cpp | 8 ++- dll/dxwcore.cpp | 11 +++ dll/dxwcore.hpp | 1 + dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 109056 -> 101888 bytes dll/hd3d.cpp | 84 ++++++++++++++++++++--- dll/kernel32.cpp | 7 +- dll/user32.cpp | 114 +++++++++++++++++++++++++++++--- host/TabCompat.cpp | 1 + host/TabWindow.cpp | 1 + host/TargetDlg.cpp | 2 + host/TargetDlg.h | 2 + host/dxwndhost.aps | Bin 128484 -> 155728 bytes host/dxwndhost.rc | Bin 97206 -> 97634 bytes host/dxwndhost.vs2008.suo | Bin 212480 -> 197632 bytes host/dxwndhostView.cpp | 4 ++ host/resource | Bin 33760 -> 33944 bytes 25 files changed, 234 insertions(+), 32 deletions(-) create mode 100644 build/exports/dxwnd.ini diff --git a/Include/dxwnd.h b/Include/dxwnd.h index f459b5b..0c33993 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -176,6 +176,8 @@ #define TEXTUREFORMAT 0x08000000 // Apply virtual pixel format to texture surfaces without DDSD_PIXELFORMAT attribute #define GSKYHACK 0x10000000 // use VIDEOMEMORY+LOCALVIDMEM capability to turn hw acceleration on ... #define LOCKRESERVEDPALETTE 0x20000000 // lock the reserved palette entries (usually 20: 0-9 and 246-255) +#define UNLOCKZORDER 0x40000000 // Inhibit attempts to keep the main win on top of ZORDER by stripping BringWindowToTop and SetForegroundWindow calls +#define EASPORTSHACK 0X80000000 // Hack to intercept and neutralize some of the hooks set internally by EA Sports games // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 5192913..23dac4c 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6237930755cc2d17f723f7d6948732a5e75da7fd5dc9b2a8f0f6572774d38f7 -size 574464 +oid sha256:f437c5d0f51575ce6fd0d3ffcc160d7c5f84f86db47b3af6847427a28466cde4 +size 577024 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 7201265..e67795d 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6434855ecb64769aed7706cd7fef0bcab197a29b76710278cfe164933632ffaf +oid sha256:4637fee61c70d8ffa927a88878191e4174bac16129dd30242892a5ad07dcbc6b size 538624 diff --git a/build/exports/Darkened Skye.dxw b/build/exports/Darkened Skye.dxw index ac9f547..a67b3be 100644 --- a/build/exports/Darkened Skye.dxw +++ b/build/exports/Darkened Skye.dxw @@ -5,7 +5,7 @@ module0= opengllib0= ver0=0 coord0=0 -flag0=679493664 +flag0=679493666 flagg0=1207959552 flagh0=65556 flagi0=69206020 @@ -25,3 +25,5 @@ initts0=0 winver0=0 maxres0=-1 launchpath0= +notes0= +flagj0=128 diff --git a/build/exports/dxwnd.ini b/build/exports/dxwnd.ini new file mode 100644 index 0000000..1036463 --- /dev/null +++ b/build/exports/dxwnd.ini @@ -0,0 +1,5 @@ +[window] +posx=1439 +posy=619 +sizx=320 +sizy=200 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index a7439c7..013e4df 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -771,3 +771,9 @@ fix: d3d Present method, to properly scale to window size (fixes "Silent Hunter fix: GetMonitorInfo hooker: in windowed mode the call may fail, a virtual size and ok retcode should be returned fix: Blt method recovering errors when D3D CreateAdditionalSwapChain method fails: allow to see the intro movies of "Silent Hunter III". fix: added some missing D3D errorcode labels in log file + +v2.03.16 +fix: MapWindowPoints hook - added coordinate scaling (fixes "NBA Live 99" components size and position) +fix: using "Suppress D3D8/9 reset" sets the backbuffer area as large as the whole desktop to avoid clipping +add: added "Unlock Z-order" flag to avoid window to stay locked on top of z-order (useful for "NBA Live 99") +add: added "EA Sprots hack" flag to suppress some interfering hooks set by EA games internally (useful for "NBA Live 99") \ No newline at end of file diff --git a/dll/ddblit.cpp b/dll/ddblit.cpp index c81d9b2..dd776c8 100644 --- a/dll/ddblit.cpp +++ b/dll/ddblit.cpp @@ -187,10 +187,11 @@ static HRESULT sBltToPrimary(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdest // to do: handle possible situations with surface 2 / 4 / 7 types DDSURFACEDESC ddsd; LPDIRECTDRAWSURFACE lpddsTmp; + extern GetSurfaceDesc_Type pGetSurfaceDesc1; if (IsDebug) BlitTrace("KEYSRC", lpsrcrect, &destrect, __LINE__); memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); - lpddssrc->GetSurfaceDesc(&ddsd); + (*pGetSurfaceDesc1)(lpddssrc, &ddsd); res=(*pCreateSurface1)(lpPrimaryDD, &ddsd, &lpddsTmp, NULL); if(res) OutTraceE("CreateSurface: ERROR %x(%s) at %d", res, ExplainDDError(res), __LINE__); // copy background diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 45813c3..e9a04b9 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -3930,7 +3930,7 @@ typedef struct { int h; } SupportedRes_Type; -static SupportedRes_Type SupportedSVGARes[10]= { +static SupportedRes_Type SupportedSVGARes[11]= { {320,200}, {320,240}, {512,384}, // needed by "Outcast" loading screen @@ -3940,6 +3940,7 @@ static SupportedRes_Type SupportedSVGARes[10]= { {800,600}, {1024,768}, // XGA {1280,800}, // WXGA + {1600,1200}, // UXGA, needed by "LEGO Star Wars" in high res mode {0,0} }; diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 3a0c873..aa95c59 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -98,8 +98,8 @@ static char *Flag5Names[32]={ "REMAPMCI", "TEXTUREHIGHLIGHT", "TEXTUREDUMP", "TEXTUREHACK", "TEXTURETRANSP", "NORMALIZEPERFCOUNT", "HYBRIDMODE", "GDICOLORCONV", "INJECTSON", "ENABLESONHOOK", "FREEZEINJECTEDSON", "GDIMODE", - "CENTERTOWIN", "MESSAGEPUMP", "TEXTUREFORMAT", "GSKYHACK", - "LOCKRESERVEDPALETTE", "", "", "", + "CENTERTOWIN", "STRESSRESOURCES", "MESSAGEPUMP", "TEXTUREFORMAT", + "GSKYHACK", "LOCKRESERVEDPALETTE", "UNLOCKZORDER", "EASPORTSHACK", }; static char *TFlagNames[32]={ @@ -1846,7 +1846,9 @@ void HookInit(TARGETMAP *target, HWND hwnd) if (dxw.dwFlags1 & MESSAGEPROC){ extern HINSTANCE hInst; - hMouseHook=SetWindowsHookEx(WH_GETMESSAGE, MessageHook, hInst, GetCurrentThreadId()); + typedef HHOOK (WINAPI *SetWindowsHookEx_Type)(int, HOOKPROC, HINSTANCE, DWORD); + extern SetWindowsHookEx_Type pSetWindowsHookEx; + hMouseHook=(*pSetWindowsHookEx)(WH_GETMESSAGE, MessageHook, hInst, GetCurrentThreadId()); if(hMouseHook==NULL) OutTraceE("SetWindowsHookEx WH_GETMESSAGE failed: error=%d\n", GetLastError()); } diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index 9a66df4..29c7a1e 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -872,6 +872,17 @@ void dxwCore::UnmapWindow(LPRECT rect) rect->bottom= ((rect->bottom - upleft.y) * (int)dwScreenHeight) / client.bottom; } +void dxwCore::UnmapWindow(LPPOINT point) +{ + RECT client; + POINT upleft = {0,0}; + if(!(*pGetClientRect)(hWnd, &client)) return; + (*pClientToScreen)(hWnd, &upleft); + if((client.right == 0) || (client.bottom == 0)) return; + point->x= ((point->x - upleft.x) * (int)dwScreenWidth) / client.right; + point->y= ((point->y - upleft.y) * (int)dwScreenHeight) / client.bottom; +} + POINT dxwCore::ClientOffset(HWND hwnd) { RECT desktop; diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index aa357a3..31ec851 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -64,6 +64,7 @@ public: // methods void MapWindow(LPRECT); void MapWindow(int *, int *, int *, int *); void UnmapWindow(LPRECT); + void UnmapWindow(LPPOINT); void FixWorkarea(LPRECT); RECT GetScreenRect(void); RECT GetUnmappedScreenRect(); diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index fc3497e..de6e7ab 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.15" +#define VERSION "2.03.16" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 01d1f72ac08f034cb932aedc985ced6165906864..cf841b653e25bd122242d8581d2661dd85fce33f 100644 GIT binary patch delta 9406 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, ret&0x0000FFFF); return ret; } @@ -2136,8 +2169,8 @@ BOOL WINAPI extEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint) { BOOL ret; - OutTraceDW("GDI.EndPaint: hwnd=%x lpPaint=%x lpPaint.hdc=%x\n", hwnd, lpPaint, lpPaint->hdc); - + OutTraceDW("GDI.EndPaint: hwnd=%x lpPaint=%x lpPaint.rcpaint=(%d,%d)-(%d-%d) lpPaint.hdc=%x\n", + hwnd, lpPaint, lpPaint->rcPaint.left, lpPaint->rcPaint.top, lpPaint->rcPaint.right, lpPaint->rcPaint.bottom, lpPaint->hdc); ret=(*pEndPaint)(hwnd, lpPaint); OutTraceDW("GDI.EndPaint: hwnd=%x ret=%x\n", hwnd, ret); if(!ret) OutTraceE("GDI.EndPaint ERROR: err=%d at %d\n", GetLastError(), __LINE__); @@ -2738,7 +2771,7 @@ HWND WINAPI extWindowFromPoint(POINT Point) HWND ret; OutTraceDW("WindowFromPoint: point=(%d,%d)\n", Point.x, Point.y); if(dxw.IsFullScreen()){ - dxw.UnmapClient(&Point); + dxw.UnmapWindow(&Point); OutTraceDW("WindowFromPoint: FIXED point=(%d,%d)\n", Point.x, Point.y); } ret = (*pWindowFromPoint)(Point); @@ -2750,7 +2783,7 @@ HWND WINAPI extChildWindowFromPoint(HWND hWndParent, POINT Point) { HWND ret; OutTraceDW("ChildWindowFromPoint: hWndParent=%x point=(%d,%d)\n", hWndParent, Point.x, Point.y); - if(dxw.IsDesktop(hWndParent) && dxw.IsFullScreen()){ + if(dxw.IsDesktop(hWndParent) && dxw.IsFullScreen() && dxw.Windowize){ dxw.UnmapClient(&Point); OutTraceDW("ChildWindowFromPoint: FIXED point=(%d,%d)\n", Point.x, Point.y); } @@ -2763,7 +2796,7 @@ HWND WINAPI extChildWindowFromPointEx(HWND hWndParent, POINT Point, UINT uFlags) { HWND ret; OutTraceDW("ChildWindowFromPoint: hWndParent=%x point=(%d,%d) flags=%x\n", hWndParent, Point.x, Point.y, uFlags); - if(dxw.IsDesktop(hWndParent) && dxw.IsFullScreen()){ + if(dxw.IsDesktop(hWndParent) && dxw.IsFullScreen() && dxw.Windowize){ dxw.UnmapClient(&Point); OutTraceDW("ChildWindowFromPointEx: FIXED point=(%d,%d)\n", Point.x, Point.y); } @@ -2941,3 +2974,66 @@ int WINAPI extGetWindowTextA(HWND hWnd, LPTSTR lpString, int nMaxCount) return ret; } #endif + +BOOL WINAPI extBringWindowToTop(HWND hwnd) +{ + BOOL res; + OutTraceDW("BringWindowToTop: hwnd=%x\n", hwnd); + if(dxw.dwFlags5 & UNLOCKZORDER) return TRUE; + res=(*pBringWindowToTop)(hwnd); + return res; +} + +BOOL WINAPI extSetForegroundWindow(HWND hwnd) +{ + BOOL res; + OutTraceDW("SetForegroundWindow: hwnd=%x\n", hwnd); + if(dxw.dwFlags5 & UNLOCKZORDER) return TRUE; + res=(*pSetForegroundWindow)(hwnd); + return res; +} + +HOOKPROC glpMouseHookProcessFunction; +HOOKPROC glpMessageHookProcessFunction; +/* +LRESULT CALLBACK extMouseHookProc(int code, WPARAM wParam, LPARAM lParam) +{ + LRESULT ret; + OutTrace("HookProc intercepted: code=%x wParam=%x lParam=%x\n", code, wParam, lParam); + MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam; + if (pMouseStruct != NULL){ + dxw.UnmapWindow(&(pMouseStruct->pt)); + } + ret= (*glpMouseHookProcessFunction)(code, wParam, lParam); + return ret; +} +*/ + +LRESULT CALLBACK extMessageHookProc(int code, WPARAM wParam, LPARAM lParam) +{ + LRESULT ret; + OutTrace("MessageHookProc: code=%x wParam=%x lParam=%x\n", code, wParam, lParam); + MSG * pMessage = (MSG *)lParam; + ret = NULL; + if(pMessage){ + UINT message = pMessage->message; + if ((message >= 0x600) || // custom messages + ((message >= WM_KEYFIRST) && (message <= WM_KEYLAST))) // keyboard messages + ret = (*glpMessageHookProcessFunction)(code, wParam, lParam); + } + return ret; +} + +HHOOK WINAPI extSetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId) +{ + HHOOK ret; + if(dxw.dwFlags5 & EASPORTSHACK){ + if(idHook == WH_MOUSE) return NULL; + if(idHook == WH_GETMESSAGE) { + glpMessageHookProcessFunction = lpfn; + lpfn=extMessageHookProc; + } + } + ret=(*pSetWindowsHookEx)(idHook, lpfn, hMod, dwThreadId); + return ret; +} diff --git a/host/TabCompat.cpp b/host/TabCompat.cpp index 4c06250..ce3d98c 100644 --- a/host/TabCompat.cpp +++ b/host/TabCompat.cpp @@ -39,6 +39,7 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_NOPERFCOUNTER, cTarget->m_NoPerfCounter); DDX_Check(pDX, IDC_HIDECDROMEMPTY, cTarget->m_HideCDROMEmpty); DDX_Check(pDX, IDC_DIABLOTWEAK, cTarget->m_DiabloTweak); + DDX_Check(pDX, IDC_EASPORTSHACK, cTarget->m_EASportsHack); DDX_Check(pDX, IDC_NOIMAGEHLP, cTarget->m_NoImagehlp); DDX_Check(pDX, IDC_REPLACEPRIVOPS, cTarget->m_ReplacePrivOps); diff --git a/host/TabWindow.cpp b/host/TabWindow.cpp index a50610f..bf552f4 100644 --- a/host/TabWindow.cpp +++ b/host/TabWindow.cpp @@ -45,6 +45,7 @@ void CTabWindow::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_NOWINDOWMOVE, cTarget->m_NoWindowMove); //DDX_Check(pDX, IDC_SUPPRESSCHILD, cTarget->m_SuppressChild); DDX_Check(pDX, IDC_HIDEDESKTOP, cTarget->m_HideDesktop); + DDX_Check(pDX, IDC_UNLOCKZORDER, cTarget->m_UnlockZOrder); // color management DDX_Check(pDX, IDC_INIT8BPP, cTarget->m_Init8BPP); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index b7ca4d0..b56a783 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -45,6 +45,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_SetCompatibility = TRUE; // default true !! m_AEROBoost = TRUE; // default true !! m_DiabloTweak = FALSE; + m_EASportsHack = FALSE; m_NoImagehlp = FALSE; m_ReplacePrivOps = FALSE; m_ForcesHEL = FALSE; @@ -56,6 +57,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_NoD3DReset = FALSE; //m_SuppressChild = FALSE; m_HideDesktop = FALSE; + m_UnlockZOrder = FALSE; m_LockSysColors = FALSE; m_LockReservedPalette = FALSE; m_ForceYUVtoRGB = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 10e2315..3e15050 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -167,6 +167,7 @@ public: BOOL m_SetCompatibility; BOOL m_AEROBoost; BOOL m_DiabloTweak; + BOOL m_EASportsHack; BOOL m_NoImagehlp; BOOL m_ForcesHEL; BOOL m_ColorFix; @@ -177,6 +178,7 @@ public: BOOL m_NoD3DReset; //BOOL m_SuppressChild; BOOL m_HideDesktop; + BOOL m_UnlockZOrder; BOOL m_LockSysColors; BOOL m_LockReservedPalette; BOOL m_SingleProcAffinity; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index d8532fe73cf7e7db0c5e1a76d98b5c4cd04d622a..9a624591b860e85ad794ac16d756ea2887a7fc77 100644 GIT binary patch delta 21627 zcmaKU34oN}Zg|1fih9$sr+nlX?pXL8Avg`gM|Rt2fNp9xB(z>CG>ZQeNJrBlgrZv zK!}7_ONeq$E|u==_nP8uZ82{=gHi#i2MmgP6By*DQvBZJP2~4rbv~0T2u-s$X@G%+ z-YgTfd6W4)?*IvJiU1;wwR=+qR%tEK=uH!tHkXKb(*+P|FA?|Z7`Q4O^ks5g)a1xS zn>WKYo^Pg`nYQzMvtUHM@$8R&WTxAJ^UbLKSzMtroe9d_x!g*s(%$UNW+(y5#gbnr zF}TH>69wn;3~lx1G8FBVsa*!Pd-Lr3=bO5<^BIQ`36Y7$nAcE&hJ8#l#=Qj$XJJZy zk%UP!HhG6IlmO+t-&>@iO*FQ63vK=aGuJG#8!s?3>lZT-2|yB;dW%fe?k%y~E--a< zhcde8uL_7e;bJlGF#GBSW_I1-j7zQV%cjr+#x;3I*uQ{n*O81{na*U&^baEw-cbx? ziJ(}$J;JcvJDTAvf4V21<8e#G8@*%f2^X6B6<=X=9y8`paj#Kej(NPvi!p?I;P0e0A!v$3CNoUhN={4NLrWWt3Q5^bS5>-z$wR*=! zQOQh>C+eU?Q=7NcUVf38ZI;=)A@JzmDdleQmkhLU~F)?REH%u0Lo#b%z#*bF^- z?3ovXGHb8C7?e5t@Wr6a+n)k=?D18tk&)Pqv-w^gK4?VQo^`32 zx#k-cY^o_mf??uMssKySqHGt#6W+-cI25zU(01>X2sGWn(B?*Oo&DfaGh^oZ3X=7h z>NLl_Q|*My%uMr5d+23m?!ajkqHL}d2#Xf)bmNu%e6ie=DkpQ8hg_!U#k{i>nhjQ$ z%24H8Zy_0!SNWM7n$ipOaI=iHOkNQ+g<-)o^o$z z*>C^Y{Ih$z#-9EY^Y89$hu!c~^Rjz;$_76(UGD8g`@ql4vF`1s_Vb^aSKQmXL;w91 zv#G|tjv8A3Dk|!0%^YJFybhs${hIkVM^lr5p8nj-8~XeWbGV~4rwkqYmU+<8n8Bg{ zeA~2z*hh!H_AllhGyOpB|5f|1zc5`BsyzQ|cJVLG1}D_p_WQpyM>v_@<>nJZOMYce z4IB8=&;#$9uZOP_hGzfT{4#uPwBz2Z3_!w`BX2A0?)Oa6HI=m!-#4A^ZIa#ie%P>? zY^uXV9$=cEwGPA z-VU+9kGw6khksP5x5$1o^0s*Bfsf3!V;5a%hHEpN9%=I=)n=6Ki9dubZM6eGG>6;O zFPdxY(ihDXD%~~5^EQtd&H-MPIoRWVWadq8_F}M9=~SWI6J&eK`CPs?@7d#iY-S9! zBYH~+3f8N$;KMPuc(KMtz*1$uBiCE%$gL(&lYkJ~bOj{>G`BO2h7JI^o!C@@wS_P> zngpbNp$$|;FUa~5u);6s$(L&SJ-hRlX8OrMwW>^@FZQDYFsB4<3b}|8C76inLJbmA z+DZk*l_dmufWVfy*2S*cx85_;2SAbT%3`E*URN*1D3i{@=6Z2RMh$h8JJMZgSll9m zS{YRAfvXFFt;86E>7sH>?tU{EqZy|$NtY2fz{O*>07-ZQ0!pV4&=CmELLd}eGk^vm zUB+vpypvS?9+P+KI=@3?VnDOO?})b289O)ZHQezvx^$rFx&;H`*n<;lc&Z`Jo^eS+rz2-{*P;7ReJ zJcY0gs!H!|EyAD;GeUpHt{c9(jtSQ%91;I1jDYVb26;p!2=CyCK#@*iZxHj$2)rDG zzoYPXV2rn_SY8zriU>u@tOlSkz|1(1zXfmXw)|`|$Uq;MZWJI`mIdrDPzx`GfTE;k zd4XeO*TC8P2`&S>*J6j)X(Qb|lQDWZ7 z;4`!F%q(IIV=Y*?)Xc1~iduhi2#lE!V#Ed5H%~MN4KQkAh$2UTX@_fI#H5H8A0WnM zZHm}m*ki6XJLHGJH}99=CUkHnhZylI%MeP#*>J5XAx^vt`5Q(|WkhJ@;c^%}&9jpp zGP6ct+1R5WGV{2QeaOt_!Umv_JwerE+3zjo;Fwf88r5W32RjD1%2ow$16<{*f+ql1 zv8v$hfJbI6SsHrddJ^4&PaUY|#%e`3) zFlF}u)R{Wi{?j+i><%7nndhLVH{+L(HRH=OlyTLn5ZIX~bwXZ)X~{|@ z%cOx_2=qD#qg^5MAWOLrbix=xf5tXa+`?5S4mDu;^b4*?(3t%*rBiEVnGIc@<15@<70(e$ZdFNNhd-mpkF?Hhr zQL8c0eruiU%0zqJIx{mmwtf*)K<2@@Msg#f@(Id$0--t~V@;zJYgLSjE|`@;phJtv z4`>xR|0v_Dg9bxqC$2YR*6{d9Ra8JAj48&TqMmbuf<$}}Wc`i|vvgjN;)G;bW)d+N z+Xm+d$J&$Dn>v}hv3B!%r%dEkljV*~y3|?7^>p~jm7&pTt@1F%-aJ&USR`f1Q$h_Q zX;(ul;%C@m6H4c*G75e%kKHH&`*aTYwnlGpL>Ds9;gX9INPlqd!RX1h;Z##MTFRcy zz5$(UY^(C37$^O(RKuU6XJ*)zZCCRr!QFRY}ACLY>1(QDe1 zNHv{M=`w*k{go`Lc1pAb!9(89Vlx$MY*#}wyWP6px>C7ReiiKm>o@Qzn zM249WZmrVZmyFp&d--Y38ceZwpJrw*W4K6|%;A78orOP!X2NSbBNp!6ayWLw62jUM zys@u?-EwA88%7XGChLQyqCfDEKyzO@dovjd_Bt|{8F(9EKhCpXK5k|hW6kMEcrdRq z!+3QS0*ba^`5iA(qEv>G%rLBfOHRr%6I$D+I-xCreL7Gzd%_RQgoRo`L(0BfVI}O7 zPs~EYZa4e@2Oq|M<8(7)6$@R7yJP^8{XWY~`)KZebdLnhl;-#ED(OC-=QQ#v1YOX6 zWCTE{Iyu?1%XXT1I1^+>$rS8ms({_G?4)BZZUWtjJ8>*y?8Gz7oKT1@XaumM&M-3t z2I05uMD7s$oF>uUIq2bWqA5fWrHzrB0J4IqaxyR**&Ictv6!w?F&%&xlSpvE?Zhac z62Y~HDLBX&A}VnSQ|$ILDl1^m87@GS6+ppzM}Hn}k?N>oi7n{wT@^>PLU7d_u_=JX zfg`vohrnU2k%81z9dn_TxC!w*K`NaCm0fYB86`2Xw1gc<3AR%lJPV?o6;HZGYSWn( z>6eSVYVDCJ=b5Iifi+eH^|L-~Wg6or<~oM+NzZRR)V!C(^(LX{|%_4Svse<1pX23;lQ|<8^Ox^rQi`g8e zRft@uHr0N6gPD086N#zM=KM^)+o!A&+vzYPBIwYUcc(L?9F!ZeuWfL_tq{SX^%k;O zwoaWyq#Yb*%~@vViik)$^o?%pU1mf&oXzEPeL*2EeRlbgTH6CI5=_hdQfi@)Tivgb zOPCZHYcD^`)b(?F65)U{)fbZK@)T5RHSu7LcbO2GPSk-rh-i9kdO^h5iyeBLrB0NH= zi<4>;WhmT@f*m;9#pBahVs-bOxvnme%EfY`VFes=`^7*vu(38(R9Wt{(!1y!g<95e z5c9}Jh_XyUwn$+qjb)ooIJ`p5x6BmLPceexBfE2@l|ess12<#1_v3Bjx170@$;C=; zLPEKS10IlRZ$(r}6Q;3~Kr)kX+GA;ebb`H#X3}DbDodM6Bjm}I`U0QK4Mlhqy2#o| z1vyUhNctj{&=H_qPqK`$;You%;F_&oO{FH^0dTqBn2QUcIyb#-rk#y;!U5rF#GZ{@ zR1XH5onu06uynlBM{=9P7#9}`Ts2xz&d4@RgSU}ahC#{9C~-yi#(;k1nI&E&N4*uG;w4mRIxn!$xhs! zGWM8Fh!c3aE8(PM|A|)^{UNL0o$l(+;4iurcM)Kv4o|jVw0TrX^-}yCcY&YiDY0U8 ziM!aY20HP{I|!||Z!!nTmRm*}?udOFR2uF+?jpFU_T^1x`Y9~6n@o3#x3>mnIq zRHoYz(K`$-TuEVX4ZgS_qmV*6*)2&*KrvQ!(z&Lt#4L5ogo8ibtx`o*n-E79f#9k$ zAzZGn5Jr_{iaq08Ge`F1qR8m0L<8|ymChuwO-IHc$6NKdi^8PaY~G5I&28Kzx2D=R zA-PPf#wIwI>BXieS3uSdlDO2CaOx_q?AKYrbsg@oh(!*OJQkW_`xtjInmDwe0PBd1 zf#h)GE>IJs-=9i}H{g9#+=Xj`rNEOc*?u<|xplGNRd*Tq7Na8VN64t3z?y~=t$d~* zne9HW@gk(hb@ziE;~L622v8N7fOPmJK;5Sh5RNI0+#NIE6s+C%5G*emkN`S`6P0wf zl*-`#VPhM{t_l zy2vsfqt}TTUDZMMDsUonv_y5efA*Y5^cduZM@$_q(uLNFPl$Znk?W(T+L6|XAiIls z1jjOt?Qn!Z*$*BuGjT~TWB@M+VUvX-4R$-+U<60O+sZ6XFB!#R+SvEa%$EIVxN$hU z;fOw|%IC87+o+1WpkdQJ$d)wsVaG@f^SIj!AJcuJeN2ygo_);B;c0v8`)2AmTtRGX zha&(N3xFIAF$N7`(=UCjeN-`rKPs9nbB0_tCC_o2AX^sl$jC>LMKl9u5!I@~GEy{q z8yaBge)y;g{+=uR)fMKtJ}rApiBEVex*pOv)WBt8+$H8DN>eP3baFUMf~}w;LeWCX z<@4~oxVDDm2Ciquk?{N_l>(!{FBW&0Cra=ODT%QcDON*Ca zsmXRkuS~OBWB?svA#Y7Lso~s0meeb9dO(L)r>n6LD0+ojWkEGUaKG)|^UWC9`O45m zs?f#iN(cGMbvRaZxw?X5(IXeEMfCkHSaSuwWKB0dFbs6jdI=ZlHUW#O2X^Ref=U1-MRQ8!j?+d{JN&zEt3g!>yPLm-~(u(uuHBm^V!aJUttzH zG&9x=qi0);4JB?IaxHceP7aQGaBnKa>TM;FlCe^YO}M@IO6}m*E6rST`HoL-K7}N= zkou4(M3A)b1o{55Uleo)q3vf^ntC3g@&C=#FOO8{DfFW80(Msio4Jf}@(I^W&@46K%MOfh5j>oVa(*ky`49gE=Y-V6I31XCyWrvL zl(YX`Gb@z&#OTWhPnf@mEs< zo#vt1#b`pXiIU62OpHT( zz7s4*mnd2kp*cNB4JBNeQc+D;IL(>&sEjw`VYXpIrQ#R;^fWCTZP z_J+TcLkp!4l$*;`(COopl${<1!qEUQ8Zco<+bJtfKf?(Ga`}Ej!{e zN1KpkG$mZg0?oe0)GrgQ&mk&eRgx_is3-?B3`a={I@)I}kAOYr8Z&>zFtW%tiz!`v zN^PKiN5!~NHiHCt^BOg(pIoE+i%Hk&Bp%}mnQN8i%xg8KzxG;u&13A2|6!&cgNE8@ zn?cig6b%Wc1ji5XkY$`Qu-$E=4hh~K{~a78xt9%adclEe=2r2fw$Ya30E}_&NJG&^ zH=301i(n<*hlQxxG=nrDJ0Xb27`gUXrkx-oRlX*Yp9u;x1^*~}nx z6^zT!omAd*6LVyMXrzz74mm=ZFD6O_B|nWLPbP7?E7g(Y6Ni~V5-3uoqo4C|T*G-% z3sosjC^d?=NE8YoxehI!E&p; z2Qk?q$YpT7I6@o!Fio)bEl|pypf&P^TKE2Shkd2CKf$ms)s(-#*&Y71+OOlYvja(0 z`EE_Q^0#Y8<7+5N&F$9<+?_)514Bjxx(8^rZ{UMCIdN>YpWtgZS00ZK*^Z@AdZcJRN$r*5wN2)>1L<)49GhNUe!q_iE0dE=%q;<>JGe}6H|aWO zFXNZ7+JGjrAsV<&lGs-oH5M7RkkCW~}4 z1uMAInc3zDl5$3ZR2$ap*~hPU(H&m?5ie)5m5f%SwXZuM=B#!$N_Asc5(GVB*`VG+pUXdawkRY!uL~Pq6-&Mqy>wLeEnnrzzS{iOt_qO~-b#G-r z=;DQ|MJHTbLrwW@H=09u|M2{c=1?yD)E?agUqs%hBrn;lF*j@Bh?})%>6@b& zUX=mfnNJUCC~)*WyoC~-0;?dA3|O%&8D0LE40nP=1j(g32|1jhc!R~meKF#_jK3to z^w6gn*spOwA_P@aBq?hbZ+FtYF&c%2Tg)_aU#<;&T-wVKHz?Q_+WaliOfc&K?GL`?r_{v^jCrC_?3qOEm=AkZj(d&h+v@9ru$4 zHQoB{LDi^x2F-%#90old__kHgOGrFiE+bwafyIJIgT2|6ID5$QRUIait}eJ$8#wM( z6?yHgs&@mC!c6=8t)`aM@#hY__g2;2$+ww9Dor6k$FBvHa-4Ib-s$ZuTe{6GVh)$w zrrkuvsdndWW(tFUe4AO!g}t|_1QWlf!w~zPS$J~TnLHLBt|ygKbmfN|;LW%UtwVMq zB%-t{<9T=;9@oQ=)$=iEAi+fmrog5XgZ2y>TpDQy*H4ku#)%3ONoeNS2oBf3XqVNA zn@7xHvNiLU?8kwq%5HlET2aJRR?{mNTOG-5R%c_6E4*uUtp3v#X5VgRQNUj<2OVIE z993f>LTXY24U3*_x?M;5j@vcm^YZOF`oQoBoy%bA)yGxz`nJ^OdTCd$c#U7r;hJG-l^^U!4)Rm zWg1S3R26kWl#$25LBPBI&X}w=Hy4}~GV>Nj zo1y(MjTFB9p`$+V5q0_JyR?`8&lTp}t-V}vw^>L#f+{)ikxrSeRtk@ZSyox7jbac` zE&^>t471|9ee4EsSDDcf->K*#@Uk&RZ7AK^Va?OQX^5{{fILdL(Xz549ZyD;^g*su zT1K`9EAzN}G|{%^9@V?e_oy0dy+^0;c~|(gLw(^2v$rYD(rsq(ig2WgnnQQn>dtud z$gv13mcxZ-bePU~Fb;8ivp~}9*rr0fyiLXW%{En^ecQ|tyc~|&u8XX+T^Gof?Mids zcBOgK(foP4F0%PM%o48Ny+eu5+@Yvjb|{}0cWCwB@6a_m`ChY#a^7wCszRJ_uQ`g@ zTmuXjcHOJB-@Dfw$&hjPsXjH{rz4qnkn`^|hcV6e`%EJj-o8(p`uskve(3$?@XC>6 zQIDwDoW|Q_ah(McuD$hs9j|BaS2pk8FQ)x_52%Sh&fOpp*QGD@=M&$D{c{9flKJ;X4m%t%qD;=M$!3VMI0f;4l1q z46`3l4gsV5f1c2)Gj^#6U)`l6xW*MO-lej9vXX1U(7C(Q&`Z_%RtWW%rK$mt~sr)ik)J*n)Tds1b3_emY%FC1j{ZtcJd zS6IJWX|CF>6ZH6QGb0+gcH}tBMmuZ@?EAY-UBwL*%Y;vtaATB>TOgiBRy0-_e+cGg zFo=nI#GXI?3Zv*bslzK+#TW4GlamsmWB`^=a0Gr#0%9o+QOW==Gm6J5#YDNhJ$i2|>D+AJtX z7?Tw#hcpq3T4V!5C`xp>P&$Z5TzS~<3Ip-wBcIU;JK`A~&D=9O@n^fjjnAl+dh{97 zKz8Dvp3&+4#1$qFDWqvgmrUP~F35o)4NC4BQpS6RbQnGu(l$pvtF;b$R%_*-)dg_Q zvs&wBNAvWv+7=+w?cQfq$N%c^3!ZZ^>2qd5DjdLknf)Sp4^3Wm27YAEM|c=)g!BDG z!@+vcAv?SKp3_nK`Ex4q$Iq#J6Q5U!+n!g*>gUx4U;exjKlr>>f6bv#sJ9bd(9kvi z0^XLsU?%fo#hV(+V^OUb$fJ(uiB$hJ-kOv*c-0! zfA^ThISdcoOO$Js-qG++mLpFvb|>ZuA6EM()_1;8@+Yj+1`afdR}r%4?|A(&cgFzZ#_d( zTM8(h>zxO>O$^)O1zVEd2E3o^t>1mU`3JK*JEEr9{Auv`wy&6m-Iuo=KGJL%eDv72 z&AQzKOLJ!Gx!z{bHh8C?4%OS_ojbT=+4SUU@7w6WtN1CNefzd}8DLKF&IBE`1KxOE zfPdEk@-6Qq)LaiK&cnYA_`4CMP2TB)3p%C_Za;R^L05Y>c_$BkvFs0n4PPC#>{;&; z49jcExfj&bu5e$2LrRii9k^`bKDvJ}nECDAt%IK&*JQR2E?nMZ9vkdi-eoopZd-o6 zd1CNr{L0w$!OwzYYe!*-uk%(wZqFOMe?{v-+=ao*Q*#IZvSI>O;9#wP1RlE+{?#J~ zf0vqY_#TXEt#_|V6nH**QAEE;lJj_UPD39d;qDiL-F?RFKKt&s=i-rk;jfeM@L&6a z9?Rb2NBhV8XxT@Pq1YtD&!ZQ}^YFMl7bi`*-u%VJ_L>=J7iJ-|*Br&a<991w=y&{% zq+dw-@FeeV|3VU~(XS&luk$SZI?@3B2+hMcMl0<9BQ*3gGx?jNH120+CXGaU{D*!l z<5P%H`Dv#8e=LI(cFyNCv?EzVP|;qy*G#VI{)@e5ubEd<`m24Bp6kA}@6&Vdm-b6M zN30lO?EF8#EFCq{*yU7s2Zb^f8b=#DK!yB7W4BSEG}YLbsPNml#(qGB4Tl)Jj|zW2 z5_~>Jj_OZiAZa6beGKT@cJLzT6PWfrco`t*b<4qz3foiQ#}NFm(g##HtOxw4@D2*| zKS5zj7QCo%+VSA^iSb8#W0e`abM34pXz1ZH47yu`zjyIa;WBCX=P(S(r<=^+k(=ue z{T;?KaRJeez+cP@{!E$_l6nu~`mTooU;14~3nmAk?Y0ij+EUF6^(WnL z23LMxc+Gj*(T>`m7ieex)Zs@T5I^mgW-#|&{b-VF((l0cW8qu-xvMw!fc3_VrE#JD zjyoWJLW=sc)*&kEOmISAN+~7OrthwS&iM9G_&ozKbpD`dG}VJx2xst z=+W1K@MXMg`y;e)!*MnCB`Umv!Ut67US4DOQQ?UdHFo}=Q233Hk)^_4QZ=?rg{OiV tJ3xiTPVnJE8hohm4hkPo;nJ1hLxnjR@PPptaZw(8sF3IdpZ_rR{~zJv79Icq delta 3032 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 K%5Qu7IQ<(}mC>C5 delta 23094 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 E10uE&VE_OC diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index b5c38fa..958fc4d 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -271,6 +271,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_SetCompatibility) t->flags2 |= SETCOMPATIBILITY; if(dlg->m_AEROBoost) t->flags5 |= AEROBOOST; if(dlg->m_DiabloTweak) t->flags5 |= DIABLOTWEAK; + if(dlg->m_EASportsHack) t->flags5 |= EASPORTSHACK; if(dlg->m_NoImagehlp) t->flags5 |= NOIMAGEHLP; if(dlg->m_ForcesHEL) t->flags3 |= FORCESHEL; if(dlg->m_ColorFix) t->flags3 |= COLORFIX; @@ -281,6 +282,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_NoD3DReset) t->flags4 |= NOD3DRESET; //if(dlg->m_SuppressChild) t->flags4 |= SUPPRESSCHILD; if(dlg->m_HideDesktop) t->flags4 |= HIDEDESKTOP; + if(dlg->m_UnlockZOrder) t->flags5 |= UNLOCKZORDER; if(dlg->m_LockSysColors) t->flags3 |= LOCKSYSCOLORS; if(dlg->m_LockReservedPalette) t->flags5 |= LOCKRESERVEDPALETTE; if(dlg->m_ForceYUVtoRGB) t->flags3 |= YUV2RGB; @@ -468,6 +470,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_SetCompatibility = t->flags2 & SETCOMPATIBILITY ? 1 : 0; dlg->m_AEROBoost = t->flags5 & AEROBOOST ? 1 : 0; dlg->m_DiabloTweak = t->flags5 & DIABLOTWEAK ? 1 : 0; + dlg->m_EASportsHack = t->flags5 & EASPORTSHACK ? 1 : 0; dlg->m_NoImagehlp = t->flags5 & NOIMAGEHLP ? 1 : 0; dlg->m_ForcesHEL = t->flags3 & FORCESHEL ? 1 : 0; dlg->m_ColorFix = t->flags3 & COLORFIX ? 1 : 0; @@ -478,6 +481,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_NoD3DReset = t->flags4 & NOD3DRESET ? 1 : 0; //dlg->m_SuppressChild = t->flags4 & SUPPRESSCHILD ? 1 : 0; dlg->m_HideDesktop = t->flags4 & HIDEDESKTOP ? 1 : 0; + dlg->m_UnlockZOrder = t->flags5 & UNLOCKZORDER ? 1 : 0; dlg->m_LockSysColors = t->flags3 & LOCKSYSCOLORS ? 1 : 0; dlg->m_LockReservedPalette = t->flags5 & LOCKRESERVEDPALETTE ? 1 : 0; dlg->m_ForceRGBtoYUV = t->flags3 & RGB2YUV ? 1 : 0; diff --git a/host/resource b/host/resource index 7da5faa10d9b53bd19afedf796cd3a8643031314..162bf7c6b64393fed909348d19f6e77d8ce2a3a7 100644 GIT binary patch delta 82 zcmaFR&NQQwX#-dM_rSry{| delta 14 VcmbQy$@HL|X#-dM=0ow