From 025aaa26ae62a7ba8546c93541f1b1b983bf274d Mon Sep 17 00:00:00 2001 From: gho tik Date: Mon, 11 Jan 2016 11:48:00 -0500 Subject: [PATCH] v2_03_94_srcfx3 Former-commit-id: a7808ff92166d5665b838c5309eb3245269cf594 --- build/dxwnd.dll | 4 +- build/dxwnd.ini | 178 +++++++++++++++++++++++++++++++++++++ build/exports/Dethkarz.dxw | 24 ++--- build/readme-relnotes.txt | 6 +- dll/ddraw.cpp | 8 -- dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 66560 -> 66560 bytes dll/hd3d7.cpp | 12 +-- dll/winmm.cpp | 43 +++++---- 9 files changed, 229 insertions(+), 48 deletions(-) create mode 100644 build/dxwnd.ini diff --git a/build/dxwnd.dll b/build/dxwnd.dll index e23cee5..f6ce91f 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aefbbf270e55f04618178767c563b732a273e29eac1e0a68a42bd15c1be21058 -size 697856 +oid sha256:287b4afcae41e705bf3b4f67be71fce5403a26b7494cad40d5f1e4dbf5bf2925 +size 698368 diff --git a/build/dxwnd.ini b/build/dxwnd.ini new file mode 100644 index 0000000..792bbe7 --- /dev/null +++ b/build/dxwnd.ini @@ -0,0 +1,178 @@ +[window] +exepath=D:\Games\Year Dead\ +posx=1164 +posy=243 +sizx=320 +sizy=200 +exportpath=G:\DxWnd.develop\v2_03_94fx3_src\build\exports\ +[target] +title0=NITRO.EXE +path0=D:\Games\WCW Nitro\NITRO.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 +initresw0=800 +initresh0=600 +title1=Warcraft II BNE.exe +path1=D:\Games\WarCraft II BNE\Warcraft II BNE.exe +startfolder1= +launchpath1= +module1= +opengllib1= +notes1= +registry1= +ver1=0 +monitorid1=-1 +coord1=0 +flag1=136314914 +flagg1=1207959552 +flagh1=20 +flagi1=138412036 +flagj1=4224 +flagk1=65536 +flagl1=0 +flagm1=0 +tflag1=0 +dflag1=0 +posx1=50 +posy1=50 +sizx1=800 +sizy1=600 +maxfps1=0 +initts1=0 +winver1=0 +maxres1=-1 +swapeffect1=0 +maxddinterface1=7 +slowratio1=2 +initresw1=800 +initresh1=600 +title2=Dethkarz +path2=D:\Games\dethkarz\Dethkarz.exe +startfolder2= +launchpath2= +module2=Vertigo Direct3D +opengllib2= +notes2=Beware! This game REQUIRES initial resolution set as 640x480 as needed by the \nintro movie, otherwise the game won't start and will show an error message\ndialog box.\nNeeds also bypass MCI calls if no CD is present.\nTested OK with D3D renderer, 16 & 32 bpp. +registry2= +ver2=0 +monitorid2=-1 +coord2=0 +flag2=681574434 +flagg2=1207959552 +flagh2=20 +flagi2=205520902 +flagj2=4224 +flagk2=35717120 +flagl2=8389120 +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 +initresw2=640 +initresh2=480 +title3=yeardead.exe +path3=D:\Games\Year Dead\yeardead.exe +startfolder3= +launchpath3= +module3= +opengllib3= +notes3= +registry3= +ver3=0 +monitorid3=-1 +coord3=0 +flag3=681574434 +flagg3=1207959552 +flagh3=20 +flagi3=138412036 +flagj3=4224 +flagk3=2162688 +flagl3=0 +flagm3=0 +tflag3=-2147477245 +dflag3=0 +posx3=50 +posy3=50 +sizx3=800 +sizy3=600 +maxfps3=0 +initts3=0 +winver3=0 +maxres3=-1 +swapeffect3=0 +maxddinterface3=7 +slowratio3=2 +initresw3=800 +initresh3=600 +title4=SPWaW 2016 +path4=G:\Games\The Depot\SPWaW 2016\mech.exe +startfolder4= +launchpath4= +module4= +opengllib4= +notes4= +registry4= +ver4=0 +monitorid4=0 +coord4=1 +flag4=49186 +flagg4=1207992338 +flagh4=532 +flagi4=18907136 +flagj4=1152 +flagk4=0 +flagl4=0 +flagm4=0 +tflag4=0 +dflag4=0 +posx4=50 +posy4=50 +sizx4=1340 +sizy4=1000 +maxfps4=0 +initts4=0 +winver4=0 +maxres4=-1 +swapeffect4=0 +maxddinterface4=7 +slowratio4=1 +initresw4=0 +initresh4=0 diff --git a/build/exports/Dethkarz.dxw b/build/exports/Dethkarz.dxw index 1c2b3bb..1caf807 100644 --- a/build/exports/Dethkarz.dxw +++ b/build/exports/Dethkarz.dxw @@ -1,20 +1,20 @@ [target] title0=Dethkarz -path0=D:\Games\Dethkarz\Dethkarz.exe +path0=D:\Games\dethkarz\Dethkarz.exe launchpath0= -module0= +module0=Vertigo Direct3D opengllib0= -notes0=On Win7, FORCECLIPPER is requested\nOn Win10, FORCECLIPPER is not necessary and may cause program crash:\neither unckeck FORCECLIPPER or check HANDLEEXCEPTIONS seems to fix the problem +notes0=Beware! This game REQUIRES initial resolution set as 640x480 as needed by the \nintro movie, otherwise the game won't start and will show an error message\ndialog box.\nNeeds also bypass MCI calls if no CD is present.\nTested OK with D3D renderer, 16 & 32 bpp. registry0= ver0=0 coord0=0 -flag0=679477282 +flag0=681574434 flagg0=1207959552 -flagh0=8212 -flagi0=138416132 -flagj0=1073741952 -flagk0=65536 -flagl0=0 +flagh0=20 +flagi0=205520902 +flagj0=4224 +flagk0=35717120 +flagl0=8389120 flagm0=0 tflag0=0 dflag0=0 @@ -25,7 +25,11 @@ sizy0=600 maxfps0=0 initts0=0 winver0=0 -maxres0=3 +maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 +startfolder0= +monitorid0=-1 +initresw0=640 +initresh0=480 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 5f91a71..8b9fb48 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1321,11 +1321,13 @@ fix: proper handling of dinput DirectInputDevice::GetDeviceData() DI_BUFFEROVERF fix: user32 GetCursorPos() wrapper fix: user32 mouse_event() wrapper -v2.03.94.fx1-2: +v2.03.94.fx1-3: fix: aligned Lock cheats in Direct/Indirect mode ...... fix: no window interventions in non windowed mode. Fix "Gunbound" in fullscreen mode fix: avoid multiple injection for early-hooked programs. Fix "Gunbound" regression. fix: Restore of all lost surfaces upon D3D BeginScene DDERR_LOSTSURFACE error. Fix "Gunbound" lost textures in fullscreen mode. add: more logging in mciSendCommand - possibly some regression problem... fix: corrected clipping bug introduced in v2.03.93. -fix: SetWindowLog hooker preventing to set DxWnd windowproc when not in fullscreen mode. Fixes "Nascar Racing 3" recursion and crash. \ No newline at end of file +fix: SetWindowLog hooker preventing to set DxWnd windowproc when not in fullscreen mode. Fixes "Nascar Racing 3" recursion and crash. +fix: eliminated useless filter to suppress high resolutions detection in PREVENTMAXIMAZE mode +fix: fixed mciSendCommand wrapper log messages that could crash the program \ No newline at end of file diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 77de78c..dbd71d4 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -5078,14 +5078,6 @@ HRESULT WINAPI myEnumModesFilterDirect(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID l lpDDSurfaceDesc->dwHeight=SupportedRes[ResIdx].h; lpDDSurfaceDesc->dwWidth=SupportedRes[ResIdx].w; if(CheckResolutionLimit(lpDDSurfaceDesc)) return DDENUMRET_OK; - if (dxw.dwFlags1 & PREVENTMAXIMIZE){ - // if PREVENTMAXIMIZE is set, don't let the caller know about forbidden screen settings. - if((lpDDSurfaceDesc->dwHeight > dxw.GetScreenHeight()) || - (lpDDSurfaceDesc->dwWidth > dxw.GetScreenWidth())){ - OutTraceDW("EnumDisplayModes: skipping screen size=(%d,%d)\n", lpDDSurfaceDesc->dwHeight, lpDDSurfaceDesc->dwWidth); - return DDENUMRET_OK; - } - } res=(*((NewContext_Type *)lpContext)->lpCallback)(lpDDSurfaceDesc, ((NewContext_Type *)lpContext)->lpContext); OutTraceDW("EnumDisplayModes(D): proposed size[%d]=(%d,%d) res=%x\n", ResIdx, SupportedRes[ResIdx].w, SupportedRes[ResIdx].h, res); if(res==DDENUMRET_CANCEL) break; diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index a685fc6..323cee6 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.94.fx2" +#define VERSION "2.03.94.fx3" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 04e538422ffc71161f59bc64c377c542a3fc1aae..5c8cd337a5ef6ffda2f4a59bdd6635c198287b0c 100644 GIT binary patch delta 1316 zcma)+Nla5w6o&6@-zxoc2@1Ev``;>5> zGSsP<*uZn&n3uYgh{ehni^@eQ<~1~8R_Lr+PvfgS6i!rVUhQiyMN$K_fJ7k|{6hKc zhFuF4LF=IPP%*Rt+6a|E9!S)AVaufNhi!uBqp5sH8=M*$sDrJCI-ng;BP5EOVOyY9 zXeYD_+70c2_Cg|OpRjZ|ZZLV~S?KKkq50}tlgGXkcK;}+QF93e%@e$ef;J!bYJqr# zn^+nOR#WbpRpc<+v`|8$;xaJKL9r5`0QB;1S?c$N*{IG_MNs>em}HEbHVB_lOR7V& zr{3Xud&mrvv zz0L3Ggx3u!R#-+u@GnSqV;Q?C*(1reAn&ncw?uv+FQb=3>C^=Gea_TOX)4=eBS%Of*o#fdtx~k*S?3x)(oi)U8#OU9^}*xme;u lrp*PXvMe@iu*h`Ues$%*sfSwdxMEesxK=Fn4u$)Be* delta 1269 zcmZXUOH30{6ozNYOeu7%P+F)$X@P>3AOS3h5u~*mo}%c65PZdGNOVDz1SKLBO{iK7 z^q9DCrwEFQ=pa5(9-3g(2$;}?nz%GBd?YM1G2nmcAXRVk%{})&_i@g-H}!Z0k5}kF zD5xj2TT9+$(;;C>isCqKPH7aavC*(bpd(_rnu~^KDJ9ur$gDAuM<>t^(QBN=+>?zsxcH0>-^y z2Tkf?n0J0l8i`*=9z$y`Q@BrI>}%v&MZYSN z)hSaIoCZ}>xKm=@lGGlN^&F>?}L zppHO|F#CG@C|PX=T_sXrSrh;SFdTnMWC<7-s;9PKmG+_!>~7lu@LPYY!=jqpw_~%?9$n3X!+=w$zJ4I zMLVWwnb4XQty|Gpa6O7PsAw#a5!i>(kA`S37421sHqC2;69Y_?hfpH=mXbk2;4@VW z;GQIboPj**v+1egZF&Z_WbOY)#LYjdpf~tU^G{yG16ocxi=O6|75VM%;62&5iY81+ zT)19 )CE(bq1aLrrIxUlR%Cb>)w%CEMPZz@?HOy3`2^<_HML)LT>Q*PW}e<11QJ< diff --git a/dll/hd3d7.cpp b/dll/hd3d7.cpp index f529574..e305f38 100644 --- a/dll/hd3d7.cpp +++ b/dll/hd3d7.cpp @@ -851,12 +851,12 @@ HRESULT WINAPI extDeviceProxy7(LPSTR lpDeviceDescription, LPSTR lpDeviceName, LP return res; } -HRESULT WINAPI extEnumDevices(EnumDevices_Type pEnumDevices, void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg) +HRESULT WINAPI extEnumDevices(int version, EnumDevices_Type pEnumDevices, void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg) { HRESULT res; CallbackArg Arg; - OutTraceD3D("EnumDevices: d3d=%x arg=%x\n", lpd3d, arg); + OutTraceD3D("EnumDevices(%d): d3d=%x arg=%x\n", version, lpd3d, arg); Arg.cb= &cb; Arg.arg=arg; res=(*pEnumDevices)(lpd3d, (LPD3DENUMDEVICESCALLBACK)extDeviceProxy, (LPVOID)&Arg); @@ -866,11 +866,11 @@ HRESULT WINAPI extEnumDevices(EnumDevices_Type pEnumDevices, void *lpd3d, LPD3DE } HRESULT WINAPI extEnumDevices1(void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg) -{ return extEnumDevices(pEnumDevices1, lpd3d, cb, arg); } +{ return extEnumDevices(1, pEnumDevices1, lpd3d, cb, arg); } HRESULT WINAPI extEnumDevices2(void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg) -{ return extEnumDevices(pEnumDevices2, lpd3d, cb, arg); } +{ return extEnumDevices(2, pEnumDevices2, lpd3d, cb, arg); } HRESULT WINAPI extEnumDevices3(void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg) -{ return extEnumDevices(pEnumDevices3, lpd3d, cb, arg); } +{ return extEnumDevices(3, pEnumDevices3, lpd3d, cb, arg); } HRESULT WINAPI extEnumDevices7(void *lpd3d, LPD3DENUMDEVICESCALLBACK7 cb, LPVOID arg) @@ -878,7 +878,7 @@ HRESULT WINAPI extEnumDevices7(void *lpd3d, LPD3DENUMDEVICESCALLBACK7 cb, LPVOID HRESULT res; CallbackArg7 Arg; - OutTraceD3D("EnumDevices: d3d=%x arg=%x\n", lpd3d, arg); + OutTraceD3D("EnumDevices(7): d3d=%x arg=%x\n", lpd3d, arg); Arg.cb= &cb; Arg.arg=arg; res=(*pEnumDevices7)(lpd3d, (LPD3DENUMDEVICESCALLBACK7)extDeviceProxy7, (LPVOID)&Arg); diff --git a/dll/winmm.cpp b/dll/winmm.cpp index f3575a6..de489fb 100644 --- a/dll/winmm.cpp +++ b/dll/winmm.cpp @@ -15,7 +15,7 @@ #define EMULATEJOY TRUE #define INVERTJOYAXIS TRUE -#include "logall.h" // comment when not debugging +//#include "logall.h" // comment when not debugging BOOL IsWithinMCICall = FALSE; @@ -177,33 +177,34 @@ static char *sDeviceType(DWORD dt) static void DumpMciMessage(char *label, BOOL isAnsi, UINT uMsg, DWORD_PTR fdwCommand, DWORD_PTR dwParam) { + char *api="mciSendCommand"; switch(uMsg){ case MCI_BREAK: { LPMCI_BREAK_PARMS lpBreak = (LPMCI_BREAK_PARMS)dwParam; - OutTrace("mciSendCommand%s: MCI_BREAK cb=%x virtkey=%d hwndbreak=%x\n", - label, lpBreak->dwCallback, lpBreak->nVirtKey, lpBreak->hwndBreak); + OutTrace("%s%s: MCI_BREAK cb=%x virtkey=%d hwndbreak=%x\n", + api, label, lpBreak->dwCallback, lpBreak->nVirtKey, lpBreak->hwndBreak); } break; case MCI_INFO: { LPMCI_INFO_PARMS lpInfo = (LPMCI_INFO_PARMS)dwParam; - OutTrace("mciSendCommand%s: MCI_INFO cb=%x retsize=%x\n", - label, lpInfo->dwCallback, lpInfo->dwRetSize); + OutTrace("%s%s: MCI_INFO cb=%x retsize=%x\n", + api, label, lpInfo->dwCallback, lpInfo->dwRetSize); } break; case MCI_PLAY: { LPMCI_PLAY_PARMS lpPlay = (LPMCI_PLAY_PARMS)dwParam; - OutTrace("mciSendCommand%s: MCI_PLAY cb=%x from=%x to=%x\n", - label, lpPlay->dwCallback, lpPlay->dwFrom, lpPlay->dwTo); + OutTrace("%s%s: MCI_PLAY cb=%x from=%x to=%x\n", + api, label, lpPlay->dwCallback, lpPlay->dwFrom, lpPlay->dwTo); } break; case MCI_GETDEVCAPS: { LPMCI_GETDEVCAPS_PARMS lpDevCaps = (LPMCI_GETDEVCAPS_PARMS)dwParam; - OutTrace("mciSendCommand%s: MCI_GETDEVCAPS cb=%x ret=%x item=%x\n", - label, lpDevCaps->dwCallback, lpDevCaps->dwReturn, lpDevCaps->dwItem); + OutTrace("%s%s: MCI_GETDEVCAPS cb=%x ret=%x item=%x\n", + api, label, lpDevCaps->dwCallback, lpDevCaps->dwReturn, lpDevCaps->dwItem); } break; case MCI_OPEN: @@ -212,8 +213,8 @@ static void DumpMciMessage(char *label, BOOL isAnsi, UINT uMsg, DWORD_PTR fdwCom // how to dump LPMCI_OPEN_PARMS strings without crash? if(isAnsi){ LPMCI_OPEN_PARMSA lpOpen = (LPMCI_OPEN_PARMSA)dwParam; - OutTrace("mciSendCommand%s: MCI_OPEN %scb=%x devid=%x devtype=%s elementname=%s alias=%s\n", - label, + OutTrace("%s%s: MCI_OPEN %scb=%x devid=%x devtype=%s elementname=%s alias=%s\n", + api, label, (dwFlags & MCI_OPEN_SHAREABLE) ? "OPEN_SHAREABLE " : "", lpOpen->dwCallback, lpOpen->wDeviceID, "", //(dwFlags & MCI_OPEN_TYPE) ? lpOpen->lpstrDeviceType : "", @@ -222,8 +223,8 @@ static void DumpMciMessage(char *label, BOOL isAnsi, UINT uMsg, DWORD_PTR fdwCom } else{ LPMCI_OPEN_PARMSW lpOpen = (LPMCI_OPEN_PARMSW)dwParam; - OutTrace("mciSendCommand%s: MCI_OPEN cb=%x devid=%x devtype=%ls elementname=%ls alias=%ls\n", - label, + OutTrace("%s%s: MCI_OPEN cb=%x devid=%x devtype=%ls elementname=%ls alias=%ls\n", + api, label, (dwFlags & MCI_OPEN_SHAREABLE) ? "OPEN_SHAREABLE " : "", lpOpen->dwCallback, lpOpen->wDeviceID, L"", //(dwFlags & MCI_OPEN_TYPE) ? lpOpen->lpstrDeviceType : L"", @@ -235,22 +236,24 @@ static void DumpMciMessage(char *label, BOOL isAnsi, UINT uMsg, DWORD_PTR fdwCom case MCI_STATUS: { LPMCI_STATUS_PARMS lpStatus = (LPMCI_STATUS_PARMS)dwParam; - OutTrace("mciSendCommand%s: MCI_STATUS cb=%x ret=%x item=%x(%s) track=%x\n", - label, lpStatus->dwCallback, lpStatus->dwReturn, lpStatus->dwItem, sStatusItem(lpStatus->dwItem), lpStatus->dwTrack); + OutTrace("%s%s: MCI_STATUS cb=%x ret=%x item=%x(%s) track=%x\n", + api, label, lpStatus->dwCallback, lpStatus->dwReturn, lpStatus->dwItem, sStatusItem(lpStatus->dwItem), lpStatus->dwTrack); } break; case MCI_SYSINFO: { LPMCI_SYSINFO_PARMS lpSysInfo = (LPMCI_SYSINFO_PARMS)dwParam; - OutTrace("mciSendCommand%s: MCI_SYSINFO cb=%x retsize=%x number=%x devtype=%x(%s)\n", - label, lpSysInfo->dwCallback, lpSysInfo->dwRetSize, lpSysInfo->dwNumber, lpSysInfo->wDeviceType, sDeviceType(lpSysInfo->wDeviceType)); + OutTrace("%s%s: MCI_SYSINFO cb=%x retsize=%x number=%x devtype=%x(%s)\n", + api, label, lpSysInfo->dwCallback, lpSysInfo->dwRetSize, lpSysInfo->dwNumber, lpSysInfo->wDeviceType, sDeviceType(lpSysInfo->wDeviceType)); } break; default: { LPMCI_GENERIC_PARMS lpGeneric = (LPMCI_GENERIC_PARMS)dwParam; - OutTrace("mciSendCommand%s: %s cb=%x\n", - label, ExplainMCICommands(uMsg), lpGeneric->dwCallback); + if(lpGeneric) + OutTrace("%s%s: %s cb=%x\n", api, label, ExplainMCICommands(uMsg), lpGeneric->dwCallback); + else + OutTrace("%s%s: %s params=(NULL)\n", api, label, ExplainMCICommands(uMsg)); } break; } @@ -345,11 +348,13 @@ MCIERROR WINAPI extmciSendCommand(BOOL isAnsi, mciSendCommand_Type pmciSendComma } } +#if 0 LPMCI_GENERIC_PARMS lpGeneric = (LPMCI_GENERIC_PARMS)dwParam; if(HIWORD(lpGeneric->dwCallback) == NULL) { lpGeneric->dwCallback = MAKELONG(dxw.GethWnd(),0); OutTraceB("mciSendCommand: REDIRECT dwCallback=%x\n", dxw.GethWnd()); } +#endif ret=(*pmciSendCommand)(IDDevice, uMsg, fdwCommand, dwParam); if(IsDebug) DumpMciMessage("<<", isAnsi, uMsg, fdwCommand, dwParam);