diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 26d76bd..b80d75b 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -27,7 +27,7 @@ #define FIXWINFRAME 0x00002000 #define HIDEHWCURSOR 0x00004000 #define SLOWDOWN 0x00008000 -#define DISABLECLIPPING 0x00010000 +#define ENABLECLIPPING 0x00010000 #define LOCKWINSTYLE 0x00020000 #define MAPGDITOPRIMARY 0x00040000 #define FIXTEXTOUT 0x00080000 @@ -255,8 +255,6 @@ #define FORCENOVSYNC 0x00000008 // Forces NO hardware VSync #define VSYNCSCANLINE 0x00000010 // Activates WaitForVerticalBlank algorythm based on reaching a given scan line #define TRIMTEXTUREFORMATS 0x00000020 // Emulates "DirectXTrimTextureFormats" shim to fix textures in Heavy Gear II -#define NOHALDEVICE 0x00000040 // Simulates a situation of lack of 3D hardware support, like in presence of remote desktop -#define CLIPLOCKED 0x00000080 // never destroy cursor clipper on window move events .... // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general @@ -357,7 +355,6 @@ void OutTraceHex(BYTE *, int); void *HookAPI(HMODULE, char *, void *, const char *, void *); void AdjustWindowFrame(HWND, DWORD, DWORD); char *hexdump(unsigned char *, int); -void HexTrace(unsigned char *, int); LRESULT CALLBACK extWindowProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK extChildWindowProc(HWND, UINT, WPARAM, LPARAM); diff --git a/build/dxwnd.dll b/build/dxwnd.dll index a4b7974..a439b38 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb1649c75e814ca6706d0e6951fb34ade18b013d75a1c8d2afce83c6c8143042 -size 709632 +oid sha256:d026c47f6a552131246762e9b1f03400fa5031ea484d5d72ffb555a8df94f99a +size 709120 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index a06d146..1a768db 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ef6bb4b84f380a5e3e519d08ce9fca17bb67783b32655728f48197f403477976 -size 668160 +oid sha256:7f6b72cb6b9aacee5a608ebf28b57d92c9f814cb8b8e300ab867338c5abed17d +size 667648 diff --git a/build/dxwnd.ini b/build/dxwnd.ini new file mode 100644 index 0000000..1efa4e6 --- /dev/null +++ b/build/dxwnd.ini @@ -0,0 +1,184 @@ +[window] +exportpath=D:\DxWnd\exports.ok\ +posx=-1195 +posy=557 +sizx=320 +sizy=200 +debug=0 +autohide=0 +checkadmin=0 +namefromfolder=1 +multiprocesshook=0 +warnonexit=0 +updatepaths=1 +defaultcoord=0 +defaultposx=50 +defaultposy=50 +defaultsizx=800 +defaultsizy=600 +exepath=D:\Games\Heavy Gear 2\ +[target] +title0=Star Trek Armada +path0=D:\Games\Star Trek Armada\Armada.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=0 +coord0=0 +flag0=-1474297757 +flagg0=1544552448 +flagh0=73744 +flagi0=136314884 +flagj0=4224 +flagk0=69632 +flagl0=0 +flagm0=0 +tflag0=-2147477245 +dflag0=0 +posx0=100 +posy0=100 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 +slowratio0=1 +scanline0=1 +initresw0=0 +initresh0=0 +title1=Jazz Jackrabbit 2 +path1=D:\Games\Jazz Jackrabbit 2\Jazz2.exe +startfolder1= +launchpath1= +module1= +opengllib1= +notes1= +registry1= +ver1=0 +monitorid1=-1 +coord1=0 +flag1=673185826 +flagg1=1207959552 +flagh1=8212 +flagi1=138412036 +flagj1=5248 +flagk1=65536 +flagl1=0 +flagm1=0 +tflag1=-2147477245 +dflag1=0 +posx1=50 +posy1=50 +sizx1=800 +sizy1=600 +maxfps1=0 +initts1=0 +winver1=0 +maxres1=-1 +swapeffect1=0 +maxddinterface1=7 +slowratio1=2 +scanline1=0 +initresw1=800 +initresh1=600 +title2=Armor Command +path2=D:\Games\Armor Command\armrcmd.exe +startfolder2= +launchpath2= +module2= +opengllib2= +notes2=Needs a copy of S3DTKW.dll in game folder.\n +registry2= +ver2=0 +monitorid2=-1 +coord2=0 +flag2=673185826 +flagg2=1207959552 +flagh2=8212 +flagi2=138412036 +flagj2=4224 +flagk2=65536 +flagl2=268435456 +flagm2=0 +tflag2=0 +dflag2=0 +posx2=50 +posy2=50 +sizx2=800 +sizy2=600 +maxfps2=0 +initts2=0 +winver2=0 +maxres2=-1 +swapeffect2=0 +maxddinterface2=7 +slowratio2=2 +scanline2=0 +initresw2=800 +initresh2=600 +title3=Heavy Gear 2 +path3=D:\Games\Heavy Gear 2\Heavy Gear 2.exe +startfolder3= +launchpath3= +module3= +opengllib3= +notes3= +registry3= +ver3=0 +monitorid3=-1 +coord3=0 +flag3=673185826 +flagg3=1208221696 +flagh3=8212 +flagi3=-2009071612 +flagj3=4224 +flagk3=98304 +flagl3=0 +flagm3=0 +tflag3=0 +dflag3=0 +posx3=50 +posy3=50 +sizx3=800 +sizy3=600 +maxfps3=0 +initts3=0 +winver3=0 +maxres3=-1 +swapeffect3=0 +maxddinterface3=7 +slowratio3=2 +scanline3=0 +initresw3=800 +initresh3=600 +[texture] +MinTexX=0 +MinTexY=0 +MaxTexX=0 +MaxTexY=0 +[keymapping] +timetoggle= +timefast= +timeslow= +altf4= +cliptoggle= +refresh= +logtoggle= +plogtoggle= +fpstoggle= +printscreen= +corner= +freezetime= +fullscreen= +workarea= +desktop= +minimize= +restore= +kill= diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 8c5109f..9f459c3 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1375,7 +1375,6 @@ fix: fixed the policy for redrecting the WindowProc routine. Fixes "Ultimate Spi v2.03.99 fix: unwanted hook to directsound when passing by CoCreateInstance() fix: transient mode, now checks for both the target and the launcher to be dead before terminating -add: Direct3D TRIMTEXTUREFORMAT flag, to mimic MS "DirectXTrimTextureFormat" shim. Fixes problems in "Heavy Gear 2" and "Star Wars: Rogue Squardon 3D". +add: Direct3D TRIMTEXTUREFORMAT flag, to mimic MS "DirectXTrimTextureFormat" shim. Fixes problems in .... add: D3DDevice GetCaps hooking and full dump of D3DDevice capabilities -add: "No HAL Device" flag, making it unavailable the IID_Direct3DHALDevice device. Fixes "Grand Prix World" when the 3D car models are invisible. -add: reorganization of mouse clipper fields, with the addition of LOCK mode (useful for Tribal Rage) + diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 7b3749f..0e02daf 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -1555,7 +1555,6 @@ static void HandleCapsD(char *sLabel, LPDDCAPS c) sLabel, c->dwVidMemTotal, c->dwVidMemFree, c->dwZBufferBitDepths, ExplainZBufferBitDepths(c->dwZBufferBitDepths)); OutTraceDDRAW("GetCaps(%s): MaxVisibleOverlays=%x CurrVisibleOverlays=%x\n", sLabel, c->dwMaxVisibleOverlays, c->dwCurrVisibleOverlays); - if(IsDebug) HexTrace((unsigned char *)c, c->dwSize); if(dxw.bHintActive){ if(c->dwVidMemTotal > dwMaxMem) ShowHint(HINT_LIMITMEM); @@ -1592,14 +1591,13 @@ static HRESULT WINAPI extGetCapsD(int dxversion, GetCapsD_Type pGetCapsD, LPDIRE HRESULT res; OutTraceDDRAW("GetCaps(D%d): lpdd=%x %s %s\n", dxversion, lpdd, c1?"c1":"NULL", c2?"c2":"NULL"); res=(*pGetCapsD)(lpdd, c1, c2); - if(res) { + if(res) OutTraceE("GetCaps(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); - return res; + else { + if (c1) HandleCapsD("D-HW", c1); + if (c2) HandleCapsD("D-SW", c2); } - if (c1) HandleCapsD("D-HW", c1); - if (c2) HandleCapsD("D-SW", c2); - if((dxw.dwFlags3 & FORCESHEL) && c1) { DDCAPS_DX7 swcaps; // DDCAPS_DX7 because it is the bigger in size int size; @@ -1621,20 +1619,6 @@ static HRESULT WINAPI extGetCapsD(int dxversion, GetCapsD_Type pGetCapsD, LPDIRE if (c2) HandleCapsD("D-SW(fixed)", c2); } - if((dxw.dwFlags8 & NOHALDEVICE) && c1) { - OutTraceDW("GetCaps(D): NOHALDEVICE\n"); - c1->ddsCaps.dwCaps = DDCAPS_NOHARDWARE; - c1->ddsCaps.dwCaps2 = DDCAPS2_CANRENDERWINDOWED; - c1->dwPalCaps = 0; - c1->dwFXCaps = 0; - c1->dwFXAlphaCaps = 0; - c1->dwCKeyCaps = 0; - c1->dwVidMemTotal = c1->dwVidMemFree = 0; - c1->dwZBufferBitDepths = 0; - c1->dwMaxVisibleOverlays = c1->dwCurrVisibleOverlays = 0; - HandleCapsD("D-HW(NoHAL)", c1); - } - if((dxw.dwFlags3 & MINIMALCAPS)) SetMinimalCaps(c1, c2); if(dxw.dwFlags3 & CAPMASK) MaskCapsD(c1, c2); @@ -2618,13 +2602,6 @@ HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGet return DDERR_NOTFOUND; } } - - if((dxw.dwFlags8 & NOHALDEVICE) && (lpddsc->dwCaps & DDSCAPS_ZBUFFER)){ - // tested with "Grand Prix World": if a ZBUFFER is returned, CreateDevice fails! - *lplpddas = NULL; - OutTraceDW("GetAttachedSurface(%d): NOHALDEVICE no attached ZBUFFER\n", dxversion); - return DDERR_NOTFOUND; - } } else { // Virtual primary surfaces are created with no DDSCAPS_3DDEVICE caps, so don't look for it .... @@ -4820,7 +4797,6 @@ static HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDI caps->dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_FLIP|DDSCAPS_LOCALVIDMEM); // you never know.... caps->dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // backbuffer surfaces can't be this way if(caps->dwCaps & DDSCAPS_3DDEVICE) caps->dwCaps |= DDSCAPS_LOCALVIDMEM; - //if(caps->dwCaps & DDSCAPS_3DDEVICE) caps->dwCaps |= (DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX); } // v2.03.82: fixed logic for ZBUFFER capabilities: "The Creed" may have two, in SYSTEMMEMORY or in VIDEOMEMORY ... diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 4343855..26d649f 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -67,7 +67,7 @@ static char *FlagNames[32]={ "HOOKDI", "MODIFYMOUSE", "HANDLEEXCEPTIONS", "SAVELOAD", "EMULATEBUFFER", "HOOKDI8", "BLITFROMBACKBUFFER", "SUPPRESSCLIPPING", "AUTOREFRESH", "FIXWINFRAME", "HIDEHWCURSOR", "SLOWDOWN", - "DISABLECLIPPING", "LOCKWINSTYLE", "MAPGDITOPRIMARY", "FIXTEXTOUT", + "ENABLECLIPPING", "LOCKWINSTYLE", "MAPGDITOPRIMARY", "FIXTEXTOUT", "KEEPCURSORWITHIN", "USERGB565", "SUPPRESSDXERRORS", "PREVENTMAXIMIZE", "LOCKEDSURFACE", "FIXPARENTWIN", "SWITCHVIDEOMEMORY", "CLIENTREMAPPING", "HANDLEALTF4", "LOCKWINPOS", "HOOKCHILDWIN", "MESSAGEPROC" @@ -141,7 +141,7 @@ static char *Flag7Names[32]={ static char *Flag8Names[32]={ "FORCEWAIT", "FORCENOWAIT", "FORCEVSYNC", "FORCENOVSYNC", - "VSYNCSCANLINES", "TRIMTEXTUREFORMATS", "NOHALDEVICE", "CLIPLOCK", + "VSYNCSCANLINES", "TRIMTEXTUREFORMATS", "", "", "", "", "", "", "", "", "", "", "", "", "", "", @@ -277,23 +277,6 @@ void OutTrace(const char *format, ...) dxw.dwTFlags = tFlags; // restore settings } -void HexTrace(unsigned char *buf, int len) -{ - char line[3*32 + 40]; - char hex[6]; - int count=0; - while(len){ - sprintf(line,"%04X: ", count); - for(int i=32; i && len; i--, len--, buf++){ - sprintf(hex, "%02X.", *buf); - strcat(line, hex); - } - strcat(line, "\n"); - OutTrace(line); - count += 32; - } -} - // from MSDN: // GetVersionEx may be altered or unavailable for releases after Windows 8.1. Instead, use the Version Helper functions // diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index 24f3577..ba33cf4 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -363,7 +363,7 @@ POINT dxwCore::FixCursorPos(POINT prev) if (h) curr.y = (curr.y * dxw.GetScreenHeight()) / h; } - if((dxw.dwFlags1 & DISABLECLIPPING) && lpClipRegion){ + if((dxw.dwFlags1 & ENABLECLIPPING) && lpClipRegion){ // v2.1.93: // in clipping mode, avoid the cursor position to lay outside the valid rect // note 1: the rect follow the convention and valid coord lay between left to righ-1, diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index c04fd2d..e2e3ae5 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.99" +#define VERSION "2.03.99.b3" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 836f07c..e11832c 100644 Binary files a/dll/dxwnd.vs2008.suo and b/dll/dxwnd.vs2008.suo differ diff --git a/dll/hd3d7.cpp b/dll/hd3d7.cpp index 63ddece..d3fdc20 100644 --- a/dll/hd3d7.cpp +++ b/dll/hd3d7.cpp @@ -800,6 +800,23 @@ typedef struct { LPVOID arg; } CallbackArg7; +static void HexDump(unsigned char *buf, int len) +{ + char line[3*32 + 40]; + char hex[6]; + int count=0; + while(len){ + sprintf(line,"%04X: ", count); + for(int i=32; i && len; i--, len--, buf++){ + sprintf(hex, "%02X.", *buf); + strcat(line, hex); + } + strcat(line, "\n"); + OutTrace(line); + count += 32; + } +} + static void DumpD3DDeviceDesc(LPD3DDEVICEDESC d3, char *label) { if(IsTraceD3D){ @@ -817,7 +834,7 @@ static void DumpD3DDeviceDesc(LPD3DDEVICEDESC d3, char *label) if(d3->dwFlags & D3DDD_MAXBUFFERSIZE) OutTrace("MaxBufferSize=%d ", d3->dwMaxBufferSize); if(d3->dwFlags & D3DDD_MAXVERTEXCOUNT) OutTrace("MaxVertexCount=%d ", d3->dwMaxVertexCount); OutTrace("Texture min=(%dx%d) max=(%dx%d)\n", d3->dwMinTextureWidth, d3->dwMinTextureHeight, d3->dwMaxTextureWidth, d3->dwMaxTextureHeight); - HexTrace((unsigned char *)d3, d3->dwSize); + HexDump((unsigned char *)d3, d3->dwSize); } else OutTrace("EnumDevices: CALLBACK dev=%s ddesc=NULL\n", label); @@ -844,7 +861,7 @@ static void DumpD3DDeviceDesc7(LPD3DDEVICEDESC7 d3, char *label) OutTrace("Texture min=(%dx%d) max=(%dx%d)\n", d3->dwMinTextureWidth, d3->dwMinTextureHeight, d3->dwMaxTextureWidth, d3->dwMaxTextureHeight); // to be completed .... //OutTrace("\n"); - HexTrace((unsigned char *)d3, sizeof(D3DDEVICEDESC7)); + HexDump((unsigned char *)d3, sizeof(D3DDEVICEDESC7)); } else OutTrace("EnumDevices: CALLBACK dev=%s ddesc=NULL\n", label); @@ -857,14 +874,6 @@ HRESULT WINAPI extDeviceProxy(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR OutTraceD3D("EnumDevices: CALLBACK GUID=%x(%s) DeviceDescription=\"%s\", DeviceName=\"%s\", arg=%x\n", lpGuid->Data1, ExplainGUID(lpGuid), lpDeviceDescription, lpDeviceName, ((CallbackArg *)arg)->arg); DumpD3DDeviceDesc(lpd3ddd1, "HWDEV"); DumpD3DDeviceDesc(lpd3ddd2, "SWDEV"); - - // IID_IDirect3DHALDevice = 0x84e63de0.... - if((dxw.dwFlags8 & NOHALDEVICE) && (lpGuid->Data1 == 0x84e63de0)) - { - OutTraceDW("EnumDevices: D3DHALDEVICE SKIP\n"); - return TRUE; - } - if(dxw.dwFlags4 & NOPOWER2FIX){ D3DDEVICEDESC lpd3ddd1fix, lpd3ddd2fix; if(lpd3ddd1) memcpy(&lpd3ddd1fix, lpd3ddd1, sizeof(D3DDEVICEDESC)); @@ -887,9 +896,6 @@ HRESULT WINAPI extDeviceProxy7(LPSTR lpDeviceDescription, LPSTR lpDeviceName, LP HRESULT res; OutTraceD3D("EnumDevices(D3D7): CALLBACK DeviceDescription=\"%s\", DeviceName=\"%s\", arg=%x\n", lpDeviceDescription, lpDeviceName, ((CallbackArg *)arg)->arg); DumpD3DDeviceDesc((LPD3DDEVICEDESC)lpd3ddd, "DEV"); - - // to do: NOHALDEVICE handling, we have no GUID here! - if(dxw.dwFlags4 & NOPOWER2FIX){ D3DDEVICEDESC7 lpd3dddfix; if(lpd3ddd) memcpy(&lpd3dddfix, lpd3ddd, sizeof(D3DDEVICEDESC7)); @@ -1124,12 +1130,6 @@ HRESULT WINAPI extInitializeVP(void *lpvp, LPDIRECT3D lpd3d) return res; } -#ifndef D3DERR_NOTAVAILABLE -#define _FACD3D 0x876 -#define D3DERR_NOTAVAILABLE MAKE_HRESULT(1, _FACD3D, 2154) -#endif - - HRESULT WINAPI extCreateDevice2(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE lpdds, LPDIRECT3DDEVICE2 *lplpd3dd) { HRESULT res; @@ -1137,11 +1137,6 @@ HRESULT WINAPI extCreateDevice2(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE OutTraceD3D("CreateDevice(D3D2): d3d=%x GUID=%x(%s) lpdds=%x%s\n", lpd3d, Guid.Data1, ExplainGUID((GUID *)&Guid), lpdds, dxwss.ExplainSurfaceRole((LPDIRECTDRAWSURFACE)lpdds)); - if((dxw.dwFlags8 & NOHALDEVICE) && (Guid.Data1 == 0x84e63de0)) { - OutTraceDW("CreateDevice(D3D2): D3DHALDEVICE SKIP\n"); - return D3DERR_NOTAVAILABLE; - } - res=(*pCreateDevice2)(lpd3d, Guid, lpdds, lplpd3dd); if(res!=DD_OK) { OutTraceE("CreateDevice(D3D2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); @@ -1161,11 +1156,6 @@ HRESULT WINAPI extCreateDevice3(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE4 OutTraceD3D("CreateDevice(D3D3): d3d=%x GUID=%x(%s) lpdds=%x%s\n", lpd3d, Guid.Data1, ExplainGUID((GUID *)&Guid), lpdds, dxwss.ExplainSurfaceRole((LPDIRECTDRAWSURFACE)lpdds)); - if((dxw.dwFlags8 & NOHALDEVICE) && (Guid.Data1 == 0x84e63de0)) { - OutTraceDW("CreateDevice(D3D3): D3DHALDEVICE SKIP\n"); - return D3DERR_NOTAVAILABLE; - } - res=(*pCreateDevice3)(lpd3d, Guid, lpdds, lplpd3dd, unk); if(res!=DD_OK) { OutTraceE("CreateDevice(D3D3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); diff --git a/dll/user32.cpp b/dll/user32.cpp index 7e2184a..31b505a 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -2121,8 +2121,7 @@ BOOL WINAPI extClipCursor(RECT *lpRectArg) OutTrace("ClipCursor: rect=(NULL)\n"); } - if (!(dxw.dwFlags1 & DISABLECLIPPING)) return TRUE; - if ((dxw.dwFlags8 & CLIPLOCKED) && (lpRectArg == NULL)) return TRUE; + if (!(dxw.dwFlags1 & ENABLECLIPPING)) return 1; if(lpRectArg){ Rect=*lpRectArg; @@ -2151,12 +2150,12 @@ BOOL WINAPI extClipCursor(RECT *lpRectArg) BOOL WINAPI extGetClipCursor(LPRECT lpRect) { - // v2.1.93: if DISABLECLIPPING, return the saved clip rect coordinates + // v2.1.93: if ENABLECLIPPING, return the saved clip rect coordinates BOOL ret; // proxy.... - if (!(dxw.dwFlags1 & DISABLECLIPPING)) { + if (!(dxw.dwFlags1 & ENABLECLIPPING)) { ret=(*pGetClipCursor)(lpRect); // v2.03.11: fix for "SubCulture" mouse movement if(lpRect && dxw.Windowize) *lpRect = dxw.GetScreenRect(); diff --git a/dll/winproc.cpp b/dll/winproc.cpp index 5d8b08f..7a76d33 100644 --- a/dll/winproc.cpp +++ b/dll/winproc.cpp @@ -384,8 +384,8 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp dxw.dwFlags1 &= ~LOCKWINPOS; } while((*pShowCursor)(1) < 0); - if((dxw.dwFlags1 & CLIPCURSOR) && !(dxw.dwFlags8 & CLIPLOCKED)) dxw.EraseClipCursor(); - if(dxw.dwFlags1 & DISABLECLIPPING) dxw.EraseClipCursor(); + if(dxw.dwFlags1 & CLIPCURSOR) dxw.EraseClipCursor(); + if(dxw.dwFlags1 & ENABLECLIPPING) (*pClipCursor)(NULL); break; case WM_EXITSIZEMOVE: if(IsToBeLocked){ @@ -394,7 +394,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp } if((dxw.dwFlags1 & HIDEHWCURSOR) && dxw.IsFullScreen()) while((*pShowCursor)(0) >= 0); if(dxw.dwFlags2 & SHOWHWCURSOR) while((*pShowCursor)(1) < 0); - if(dxw.dwFlags1 & DISABLECLIPPING) extClipCursor(lpClipRegion); + if(dxw.dwFlags1 & ENABLECLIPPING) extClipCursor(lpClipRegion); if(dxw.dwFlags2 & REFRESHONRESIZE) dxw.ScreenRefresh(); if(dxw.dwFlags4 & HIDEDESKTOP) dxw.HideDesktop(dxw.GethWnd()); if(dxw.dwFlags5 & CENTERTOWIN) { @@ -489,12 +489,12 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp case WM_SETFOCUS: OutTraceDW("WindowProc: hwnd=%x GOT FOCUS\n", hwnd); if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); - if (dxw.dwFlags1 & DISABLECLIPPING) extClipCursor(lpClipRegion); + if (dxw.dwFlags1 & ENABLECLIPPING) extClipCursor(lpClipRegion); break; case WM_KILLFOCUS: OutTraceDW("WindowProc: hwnd=%x LOST FOCUS\n", hwnd); - if((dxw.dwFlags1 & CLIPCURSOR) && !(dxw.dwFlags8 & CLIPLOCKED)) dxw.EraseClipCursor(); - if (dxw.dwFlags1 & DISABLECLIPPING) dxw.EraseClipCursor(); + if (dxw.dwFlags1 & CLIPCURSOR) dxw.EraseClipCursor(); + if (dxw.dwFlags1 & ENABLECLIPPING) (*pClipCursor)(NULL); break; case WM_SYSCOMMAND: // v2.03.56.fix1 by FunkyFr3sh: ensure that "C&C Red Alert 2" receives the WM_SYSCOMMAND / SC_CLOSE message diff --git a/host/TabDirectX2.cpp b/host/TabDirectX2.cpp index b25ce6e..2e38076 100644 --- a/host/TabDirectX2.cpp +++ b/host/TabDirectX2.cpp @@ -35,7 +35,6 @@ void CTabDirectX2::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_FIXREFCOUNTER, cTarget->m_FixRefCounter); DDX_Check(pDX, IDC_RETURNNULLREF, cTarget->m_ReturnNullRef); DDX_Check(pDX, IDC_FORCESHEL, cTarget->m_ForcesHEL); - DDX_Check(pDX, IDC_NOHALDEVICE, cTarget->m_NoHALDevice); DDX_Check(pDX, IDC_MINIMALCAPS, cTarget->m_MinimalCaps); DDX_Check(pDX, IDC_SETZBUFFERBITDEPTHS, cTarget->m_SetZBufferBitDepths); DDX_Check(pDX, IDC_DEINTERLACE, cTarget->m_Deinterlace); diff --git a/host/TabInput.cpp b/host/TabInput.cpp index 9bc5602..13fbac0 100644 --- a/host/TabInput.cpp +++ b/host/TabInput.cpp @@ -31,8 +31,8 @@ void CTabInput::DoDataExchange(CDataExchange* pDX) DDX_Radio(pDX, IDC_CURSORAUTOMATIC, cTarget->m_MouseVisibility); // Cursor Handling DDX_Check(pDX, IDC_MODIFYMOUSE, cTarget->m_ModifyMouse); - //DDX_Check(pDX, IDC_DISABLECLIPPING, cTarget->m_EnableClipping); - //DDX_Check(pDX, IDC_CLIPCURSOR, cTarget->m_CursorClipping); + DDX_Check(pDX, IDC_ENABLECLIPPING, cTarget->m_EnableClipping); + DDX_Check(pDX, IDC_CLIPCURSOR, cTarget->m_CursorClipping); DDX_Check(pDX, IDC_KEEPCURSORWITHIN, cTarget->m_KeepCursorWithin); DDX_Check(pDX, IDC_KEEPCURSORFIXED, cTarget->m_KeepCursorFixed); DDX_Check(pDX, IDC_MESSAGEPROC, cTarget->m_MessageProc); @@ -41,8 +41,7 @@ void CTabInput::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_SLOW, cTarget->m_SlowDown); DDX_Check(pDX, IDC_RELEASEMOUSE, cTarget->m_ReleaseMouse); DDX_Check(pDX, IDC_VIRTUALJOYSTICK, cTarget->m_VirtualJoystick); - // Cursor Clipper - DDX_Radio(pDX, IDC_CLIPPERAUTO, cTarget->m_MouseClipper); + //DDX_Check(pDX, IDC_FRAMECOMPENSATION, cTarget->m_FrameCompensation); // DirectInput DDX_Check(pDX, IDC_HOOKDI, cTarget->m_HookDI); DDX_Check(pDX, IDC_HOOKDI8, cTarget->m_HookDI8); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index ff06fff..4754ad0 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -31,7 +31,6 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_DxFilterMode = 0; // default: ddraw filtering m_DCEmulationMode = 0; // default: no emulation m_MouseVisibility = 0; - m_MouseClipper = 0; m_OffendingMessages = 0; m_TextureHandling = 0; m_HookDI = FALSE; @@ -150,8 +149,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_IndependentRefresh = FALSE; m_TextureFormat = FALSE; m_FixWinFrame = FALSE; - //m_EnableClipping = FALSE; - //m_CursorClipping = FALSE; + m_EnableClipping = FALSE; + m_CursorClipping = FALSE; m_VideoToSystemMem = FALSE; m_FixTextOut = FALSE; m_SharedDC = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 036c5b1..f0f3be3 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -33,7 +33,6 @@ public: int m_DxFilterMode; int m_DCEmulationMode; int m_MouseVisibility; - int m_MouseClipper; int m_OffendingMessages; int m_TextureHandling; int m_SonProcessMode; @@ -111,8 +110,8 @@ public: BOOL m_IndependentRefresh; BOOL m_TextureFormat; BOOL m_FixWinFrame; - //BOOL m_EnableClipping; - //BOOL m_CursorClipping; + BOOL m_EnableClipping; + BOOL m_CursorClipping; BOOL m_VideoToSystemMem; BOOL m_FixTextOut; BOOL m_SharedDC; @@ -235,7 +234,6 @@ public: BOOL m_DisableDisableAltTab; BOOL m_NoImagehlp; BOOL m_ForcesHEL; - BOOL m_NoHALDevice; BOOL m_MinimalCaps; BOOL m_SetZBufferBitDepths; BOOL m_ForcesSwapEffect; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index aebc35a..4f6b749 100644 Binary files a/host/dxwndhost.aps and b/host/dxwndhost.aps differ diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index ad32bd7..2da3b69 100644 Binary files a/host/dxwndhost.rc and b/host/dxwndhost.rc differ diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index e34e54d..bcc4d7c 100644 Binary files a/host/dxwndhost.vs2008.suo and b/host/dxwndhost.vs2008.suo differ diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 6c52cdf..9a081e8 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -277,13 +277,6 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) case 2: t->flags2 |= SHOWHWCURSOR; break; } - switch(dlg->m_MouseClipper){ - case 0: break; - case 1: t->flags |= DISABLECLIPPING; break; - case 2: t->flags |= CLIPCURSOR; break; - case 3: t->flags |= CLIPCURSOR; t->flags8 |= CLIPLOCKED; break; - } - switch(dlg->m_OffendingMessages){ case 0: break; case 1: t->flags3 |= FILTERMESSAGES; break; @@ -401,7 +394,6 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_DisableDisableAltTab) t->flags7 |= DISABLEDISABLEALTTAB; if(dlg->m_NoImagehlp) t->flags5 |= NOIMAGEHLP; if(dlg->m_ForcesHEL) t->flags3 |= FORCESHEL; - if(dlg->m_NoHALDevice) t->flags8 |= NOHALDEVICE; if(dlg->m_MinimalCaps) t->flags3 |= MINIMALCAPS; if(dlg->m_SetZBufferBitDepths) t->flags6 |= SETZBUFFERBITDEPTHS; if(dlg->m_ForcesSwapEffect) t->flags6 |= FORCESWAPEFFECT; @@ -435,8 +427,8 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_IndependentRefresh) t->flags2 |= INDEPENDENTREFRESH; if(dlg->m_TextureFormat) t->flags5 |= TEXTUREFORMAT; if(dlg->m_FixWinFrame) t->flags |= FIXWINFRAME; - //if(dlg->m_EnableClipping) t->flags |= DISABLECLIPPING; - //if(dlg->m_CursorClipping) t->flags |= CLIPCURSOR; + if(dlg->m_EnableClipping) t->flags |= ENABLECLIPPING; + if(dlg->m_CursorClipping) t->flags |= CLIPCURSOR; if(dlg->m_VideoToSystemMem) t->flags |= SWITCHVIDEOMEMORY; if(dlg->m_FixTextOut) t->flags |= FIXTEXTOUT; if(dlg->m_HookGlide) t->flags4 |= HOOKGLIDE; @@ -611,11 +603,6 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) if(t->flags & HIDEHWCURSOR) dlg->m_MouseVisibility = 1; if(t->flags2 & SHOWHWCURSOR) dlg->m_MouseVisibility = 2; - dlg->m_MouseClipper = 0; - if(t->flags & DISABLECLIPPING) dlg->m_MouseClipper = 1; - if(t->flags & CLIPCURSOR) dlg->m_MouseClipper = 2; - if(t->flags8 & CLIPLOCKED) dlg->m_MouseClipper = 3; - dlg->m_OffendingMessages = 0; if(t->flags3 & FILTERMESSAGES) dlg->m_OffendingMessages = 1; if(t->flags3 & DEFAULTMESSAGES) dlg->m_OffendingMessages = 2; @@ -702,7 +689,6 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_DisableDisableAltTab = t->flags7 & DISABLEDISABLEALTTAB ? 1 : 0; dlg->m_NoImagehlp = t->flags5 & NOIMAGEHLP ? 1 : 0; dlg->m_ForcesHEL = t->flags3 & FORCESHEL ? 1 : 0; - dlg->m_NoHALDevice = t->flags8 & NOHALDEVICE ? 1 : 0; dlg->m_MinimalCaps = t->flags3 & MINIMALCAPS ? 1 : 0; dlg->m_SetZBufferBitDepths = t->flags6 & SETZBUFFERBITDEPTHS ? 1 : 0; dlg->m_ForcesSwapEffect = t->flags6 & FORCESWAPEFFECT ? 1 : 0; @@ -755,8 +741,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_IndependentRefresh = t->flags2 & INDEPENDENTREFRESH ? 1 : 0; dlg->m_TextureFormat = t->flags5 & TEXTUREFORMAT ? 1 : 0; dlg->m_FixWinFrame = t->flags & FIXWINFRAME ? 1 : 0; - //dlg->m_EnableClipping = t->flags & DISABLECLIPPING ? 1 : 0; - //dlg->m_CursorClipping = t->flags & CLIPCURSOR ? 1 : 0; + dlg->m_EnableClipping = t->flags & ENABLECLIPPING ? 1 : 0; + dlg->m_CursorClipping = t->flags & CLIPCURSOR ? 1 : 0; dlg->m_VideoToSystemMem = t->flags & SWITCHVIDEOMEMORY ? 1 : 0; dlg->m_FixTextOut = t->flags & FIXTEXTOUT ? 1 : 0; dlg->m_SharedDC = t->flags6 & SHAREDDC ? 1 : 0; diff --git a/host/host.aps b/host/host.aps index caebb64..6a498d0 100644 Binary files a/host/host.aps and b/host/host.aps differ diff --git a/host/resource b/host/resource index 1fca39a..6a90a1d 100644 Binary files a/host/resource and b/host/resource differ