1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00

v2_02_75_src

Former-commit-id: d841b5cdff8c56dc62484b0bf26910cd70cce717
This commit is contained in:
gho tik 2014-05-20 12:39:14 -04:00 committed by Refael ACkermann
parent 059c4c1bee
commit 8e93278b0c
25 changed files with 246 additions and 104 deletions

View File

@ -142,6 +142,7 @@
#define HOTPATCH 0x04000000 // Use hot patching technique to handle obfuscated IAT
#define ENABLEHOTKEYS 0x08000000 // Enables hot keys
#define HOTPATCHALWAYS 0x10000000 // Force hot patching to every call
#define NOD3DRESET 0x20000000 // Disables D3D8/9 D3DDevice::Reset method
// logging Tflags DWORD:
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5b7f9b28cc1d19e29759f70cf2f5187a21319a31a0d8bd24d36c3314161d958c
size 483328
oid sha256:0abd5d664eea54b2046da9cf7c3b556569a5bbd8c65eb87e1b088dff67641ef1
size 483840

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d705eb95e5834c95b4be2e8639c08df2c027df4edec2b0e3f2247e9f05da5d67
size 539136
oid sha256:11f3d90b87b33ec400bd96219a0786300f2dbd21935e72a2b859317f887696e0
size 540160

View File

@ -3,9 +3,3 @@ timetoggle=0x72
altf4=0x73
timeslow=0x74
timefast=0x75
[window]
posx=50
posy=50
sizx=320
sizy=200

View File

@ -0,0 +1,27 @@
[target]
title0=Rollcage (3DFX)
path0=D:\Games\Rollcage\Glide\ROLLCAGE.EXE
launchpath0=D:\Games\Rollcage\RollCage.exe
module0=
opengllib0=
ver0=0
coord0=0
flag0=150994976
flagg0=1207959552
flagh0=20
flagi0=136314884
tflag0=0
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1

View File

@ -0,0 +1,27 @@
[target]
title0=Rollcage (D3D)
path0=D:\Games\Rollcage\Direct3D\Rollcage.exe
launchpath0=D:\Games\Rollcage\RollCage.exe
module0=
opengllib0=
ver0=0
coord0=0
flag0=150994976
flagg0=134217728
flagh0=20
flagi0=136314884
tflag0=6147
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1

View File

@ -0,0 +1,27 @@
[target]
title0=Rollcage 2 (D3D)
path0=D:\Games\Rollcage 2\BIN\Rollcage D3D.exe
launchpath0=D:\Games\Rollcage 2\Rollcage.exe
module0=
opengllib0=
ver0=0
coord0=0
flag0=134217760
flagg0=134217728
flagh0=20
flagi0=138412036
tflag0=6147
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1

View File

@ -493,3 +493,10 @@ fix: eliminated dialogs with timer warning messages (to be investigated...)
fix: moved "no banner" flag to main tab again
fix: potential string violation, possible cause for flash crash?
v2.02.75
Hooked D3DDevice::ShowCursor method to apply force show/hide cursor (preliminary...)
fix: dynamic allocation for WndProc stack to eliminate predefined limit of 256 entries. Star Wars Rebellion uses more than 256.
added: "Suppress D3D8/9 Reset" flag
fix: improved show FPS and Time Stretch overlay so that the two overlays won't overlap each other
fix: bug in ddraw "Locked surface" mode preventing output on screen
fix: fixed bug in critical common portion of the code that was crashing even unhooked programs (namely, Flash Player, ...)

View File

@ -1524,7 +1524,8 @@ HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, I
//OutTrace("DirectDrawCreate: drivercaps=%x(%s) emulcaps=%x(%s)\n", DriverCaps.ddsCaps, "???", EmulCaps.ddsCaps, "???");
}
return 0;
lpPrimaryDD=*lplpdd;
return DD_OK;
}
HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid,
@ -1586,9 +1587,19 @@ HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid,
OutTraceDDRAW("DirectDrawCreateEx: lpdd=%x guid=%s DDVersion=%d\n", *lplpdd, mode, dxw.dwDDVersion);
HookDDSession(lplpdd, dxw.dwDDVersion);
lpPrimaryDD=*lplpdd;
return 0;
if(IsDebug && (dxw.dwTFlags & OUTPROXYTRACE)){
DDCAPS DriverCaps, EmulCaps;
memset(&DriverCaps, 0, sizeof(DriverCaps));
DriverCaps.dwSize=sizeof(DriverCaps);
memset(&EmulCaps, 0, sizeof(EmulCaps));
EmulCaps.dwSize=sizeof(EmulCaps);
(LPDIRECTDRAW)(*lplpdd)->GetCaps(&DriverCaps, &EmulCaps);
//OutTrace("DirectDrawCreate: drivercaps=%x(%s) emulcaps=%x(%s)\n", DriverCaps.ddsCaps, "???", EmulCaps.ddsCaps, "???");
}
lpPrimaryDD=*lplpdd;
return DD_OK;
}
HRESULT WINAPI extInitialize(LPDIRECTDRAW lpdd, GUID FAR *lpguid)
@ -3766,9 +3777,10 @@ HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFAC
}
res=(*pUnlock)(lpdds, lprect);
if(res==DDERR_NOTLOCKED) res=DD_OK; // ignore not locked error
if (res) OutTraceE("Unlock ERROR res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__);
if (IsPrim && res==DD_OK) sBlt("Unlock", lpdds, NULL, lpdds, NULL, NULL, 0, FALSE);
if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=0;
if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;
return res;
}
@ -3807,23 +3819,24 @@ HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSUR
}
if(dxw.dwFlags1 & LOCKEDSURFACE){
(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);
if(lpdds==lpDDSPrim){
RECT client;
POINT upleft={0,0};
(*pGetClientRect)(dxw.GethWnd(), &client);
(*pClientToScreen)(dxw.GethWnd(), &upleft);
if (!lprect) lprect=&client;
OffsetRect(lprect, upleft.x, upleft.y);
res=(*pUnlock)((LPDIRECTDRAWSURFACE)lpDDSBuffer, lprect);
(*pBlt)(lpdds, lprect, (LPDIRECTDRAWSURFACE)lpDDSBuffer, NULL, DDBLT_WAIT, 0);
if(lpDDSBuffer) (*pReleaseS)((LPDIRECTDRAWSURFACE)lpDDSBuffer);
lpDDSBuffer = NULL;
}
(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);
if(lpdds==lpDDSPrim && lpDDSBuffer){
RECT client;
POINT upleft={0,0};
(*pGetClientRect)(dxw.GethWnd(), &client);
(*pClientToScreen)(dxw.GethWnd(), &upleft);
if (!lprect) lprect=&client;
OffsetRect(lprect, upleft.x, upleft.y);
res=(*pUnlock)((LPDIRECTDRAWSURFACE)lpDDSBuffer, lprect);
(*pBlt)(lpdds, lprect, (LPDIRECTDRAWSURFACE)lpDDSBuffer, NULL, DDBLT_WAIT, 0);
(*pReleaseS)((LPDIRECTDRAWSURFACE)lpDDSBuffer);
lpDDSBuffer = NULL;
}
(*pReleaseS)(lpDDSPrim); // to leave a correct refcount
}
res=(*pUnlock)(lpdds, lprect);
if(res==DDERR_NOTLOCKED) res=DD_OK; // ignore not locked error
if (res) OutTraceE("Unlock ERROR res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__);
if (IsPrim && res==DD_OK) sBlt("Unlock", lpdds, NULL, lpdds, NULL, NULL, 0, FALSE);
if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;

View File

@ -29,6 +29,7 @@ static LARGE_INTEGER TimeShifter64Coarse(LARGE_INTEGER, int);
dxwCore::dxwCore()
{
// initialization stuff ....
extern void WhndStackInit();
FullScreen=FALSE;
SethWnd(NULL);
SetScreenSize();
@ -43,6 +44,7 @@ dxwCore::dxwCore()
ResetEmulatedDC();
MustShowOverlay=FALSE;
TimerEvent.dwTimerType = TIMER_TYPE_NONE;
WhndStackInit();
}
dxwCore::~dxwCore()
@ -1130,6 +1132,10 @@ void dxwCore::ShowOverlay(HDC hdc)
// lpdds->ReleaseDC(hdc);
//}
// nasty global to ensure that the corner is picked semi-random, but never overlapped
// between FPS and TimeStretch (and, as a side effect, never twice the same!)
static int LastCorner;
void dxwCore::ShowFPS(HDC xdc)
{
char sBuf[81];
@ -1142,6 +1148,8 @@ void dxwCore::ShowFPS(HDC xdc)
RECT rect;
dwTimer = (*pGetTickCount)();
corner = dwTimer % 4;
if(corner==LastCorner) corner = (corner+1) % 4;
LastCorner = corner;
color=0xFF0000; // blue
(*pGetClientRect)(hWnd, &rect);
switch (corner) {
@ -1194,6 +1202,8 @@ void dxwCore::ShowTimeStretching(HDC xdc)
dwTimer = (*pGetTickCount)();
LastTimeShift=TimeShift;
corner = dwTimer % 4;
if(corner==LastCorner) corner = (corner+1) % 4;
LastCorner = corner;
color=0x0000FF; // red
(*pGetClientRect)(hWnd, &rect);
switch (corner) {
@ -1651,58 +1661,37 @@ BOOL dxwCore::CheckScreenResolution(unsigned int w, unsigned int h)
return TRUE;
}
#ifdef COMPATIBLEMODE
void dxwCore::MapKeysInit(){}
UINT dxwCore::MapKeysConfig(UINT message, LPARAM lparam, WPARAM wparam)
{
int vkey;
char *caption;
if(message!=WM_SYSKEYDOWN) return DXVK_NONE;
switch(wparam){
case VK_F12: vkey=DXVK_CLIPTOGGLE; caption="CLIPCURSORTOGGLE"; break;
case VK_F11: vkey=DXVK_REFRESH; caption="REFRESH"; break;
case VK_F10: vkey=DXVK_LOGTOGGLE; caption="LOGTOGGLE"; break;
case VK_F9: vkey=DXVK_PLOCKTOGGLE; caption="POSITIONLOCKTOGGLE"; break;
case VK_F7: vkey=DXVK_FPSTOGGLE; caption="FPSTOGGLE"; break;
case VK_F6: vkey=DXVK_TIMEFAST; caption="TIMESTRETCHFAST"; break;
case VK_F5: vkey=DXVK_TIMESLOW; caption="TIMESTRETCHSLOW"; break;
case VK_F4: vkey=DXVK_ALTF4; caption="ALTF4"; break;
default: vkey=DXVK_NONE; break;
}
if(vkey) OutTraceDW("MapKeysConfig: ret=%x(%s)\n", vkey);
return vkey;
}
#else
UINT VKeyConfig[DXVK_SIZE];
void dxwCore::MapKeysInit()
static char *VKeyLabels[DXVK_SIZE]={
"none",
"cliptoggle",
"refresh",
"logtoggle",
"plocktoggle",
"fpstoggle",
"timefast",
"timeslow",
"timetoggle",
"altf4"
};
void dxwCore::MapKeysInit()
{
char InitPath[MAX_PATH];
char *p;
DWORD dwAttrib;
int KeyIdx;
dwAttrib = GetFileAttributes("dxwnd.dll");
if (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) return;
GetModuleFileName(GetModuleHandle("dxwnd"), InitPath, MAX_PATH);
p=&InitPath[strlen(InitPath)-strlen("dxwnd.dll")];
strcpy(p, "dxwnd.ini");
VKeyConfig[DXVK_NONE]=DXVK_NONE;
VKeyConfig[DXVK_CLIPTOGGLE]= GetPrivateProfileInt("keymapping", "cliptoggle", 0, InitPath);
VKeyConfig[DXVK_REFRESH]= GetPrivateProfileInt("keymapping", "refresh", 0, InitPath);
VKeyConfig[DXVK_LOGTOGGLE]= GetPrivateProfileInt("keymapping", "logtoggle", 0, InitPath);
VKeyConfig[DXVK_PLOCKTOGGLE]= GetPrivateProfileInt("keymapping", "plocktoggle", 0, InitPath);
VKeyConfig[DXVK_FPSTOGGLE]= GetPrivateProfileInt("keymapping", "fpstoggle", 0, InitPath);
VKeyConfig[DXVK_TIMEFAST]= GetPrivateProfileInt("keymapping", "timefast", 0, InitPath);
VKeyConfig[DXVK_TIMESLOW]= GetPrivateProfileInt("keymapping", "timeslow", 0, InitPath);
VKeyConfig[DXVK_TIMETOGGLE]= GetPrivateProfileInt("keymapping", "timetoggle", 0, InitPath);
VKeyConfig[DXVK_ALTF4]= GetPrivateProfileInt("keymapping", "altf4", 0x73, InitPath);
int idx;
for(idx=1; idx<DXVK_SIZE; idx++) OutTrace("keymapping %d=%x\n", idx, VKeyConfig[idx]);
OutTrace("\n");
for(KeyIdx=1; KeyIdx<DXVK_SIZE; KeyIdx++){
VKeyConfig[KeyIdx]=GetPrivateProfileInt("keymapping", VKeyLabels[KeyIdx], KeyIdx==DXVK_ALTF4 ? 0x73 : 0x00, InitPath);
OutTrace("keymapping[%d](%s)=%x\n", KeyIdx, VKeyLabels[KeyIdx], VKeyConfig[KeyIdx]);
}
}
UINT dxwCore::MapKeysConfig(UINT message, LPARAM lparam, WPARAM wparam)
@ -1715,4 +1704,3 @@ UINT dxwCore::MapKeysConfig(UINT message, LPARAM lparam, WPARAM wparam)
}
return DXVK_NONE;
}
#endif

View File

@ -24,7 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "dxwnd.h"
#include "dxwcore.hpp"
#define VERSION "2.02.74"
#define VERSION "2.02.75"
#define DDTHREADLOCK 1
@ -64,7 +64,11 @@ BOOL APIENTRY DllMain( HANDLE hmodule,
DisableThreadLibraryCalls((HMODULE)hmodule);
hMapping = CreateFileMapping((HANDLE)0xffffffff, NULL, PAGE_READWRITE,
0, sizeof(DxWndStatus)+sizeof(TARGETMAP)*MAXTARGETS, "UniWind_TargetList");
if(!hMapping) return false;
// v2.0.2.75: beware: some tasks (namely, Flash player) get dxwnd.dll loaded, but can't create the file mapping
// this situation has to be intercepted, or it can cause the dll to cause faults that may crash the program.
pStatus = (DXWNDSTATUS *)MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DXWNDSTATUS)+sizeof(TARGETMAP)*MAXTARGETS);
if(!pStatus) return false;
pMapping = (TARGETMAP *)((char *)pStatus + sizeof(DXWNDSTATUS));
hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "UniWind_Mutex");
if(!hMutex) hMutex = CreateMutex(0, FALSE, "UniWind_Mutex");

Binary file not shown.

View File

@ -41,6 +41,8 @@ typedef void (WINAPI *SetGammaRamp_Type)(void *, UINT, DWORD, D3DGAMMARAMP *);
typedef void (WINAPI *GetGammaRamp_Type)(void *, UINT, D3DGAMMARAMP *);
typedef void (WINAPI *SetCursorPosition9_Type)(void *, int, int, DWORD);
typedef void (WINAPI *SetCursorPosition8_Type)(void *, int, int, DWORD);
typedef BOOL (WINAPI *ShowCursor8_Type)(void *, BOOL);
typedef BOOL (WINAPI *ShowCursor9_Type)(void *, BOOL);
typedef HRESULT (WINAPI *SetTexture8_Type)(void *, DWORD, void *);
typedef HRESULT (WINAPI *SetTexture9_Type)(void *, DWORD, void *);
@ -95,6 +97,8 @@ void WINAPI extSetGammaRamp(void *, UINT, DWORD, D3DGAMMARAMP *);
void WINAPI extGetGammaRamp(void *, UINT, D3DGAMMARAMP *);
void WINAPI extSetCursorPosition9(void *, int, int, DWORD);
void WINAPI extSetCursorPosition8(void *, int, int, DWORD);
BOOL WINAPI extShowCursor8(void *, BOOL);
BOOL WINAPI extShowCursor9(void *, BOOL);
ULONG WINAPI extAddRef9(void *);
ULONG WINAPI extRelease9(void *);
BOOL WINAPI voidDisableD3DSpy(void);
@ -154,6 +158,8 @@ SetGammaRamp_Type pSetGammaRamp = 0;
GetGammaRamp_Type pGetGammaRamp = 0;
SetCursorPosition9_Type pSetCursorPosition9 = 0;
SetCursorPosition8_Type pSetCursorPosition8 = 0;
ShowCursor8_Type pShowCursor8 = 0;
ShowCursor9_Type pShowCursor9 = 0;
CreateRenderTarget8_Type pCreateRenderTarget8 = 0;
BeginScene_Type pBeginScene8 = 0;
@ -460,6 +466,7 @@ void HookD3DDevice8(void** ppD3Ddev8)
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 24), extGetDirect3D8, (void **)&pGetDirect3D8, "GetDirect3D(D8)");
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 32), extGetDisplayMode8, (void **)&pGetDisplayMode8, "GetDisplayMode(D8)");
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 44), extSetCursorPosition8, (void **)&pSetCursorPosition8, "SetCursorPosition(D8)");
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 48), extShowCursor8, (void **)&pShowCursor8, "ShowCursor(D8)");
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 52), extCreateAdditionalSwapChain, (void **)&pCreateAdditionalSwapChain, "CreateAdditionalSwapChain(D8)");
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 56), extReset, (void **)&pReset, "Reset(D8)");
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 60), extPresent, (void **)&pPresent, "Present(D8)");
@ -491,6 +498,7 @@ void HookD3DDevice9(void** ppD3Ddev9)
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 24), extGetDirect3D9, (void **)&pGetDirect3D9, "GetDirect3D(D9)");
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 32), extGetDisplayMode9, (void **)&pGetDisplayMode9, "GetDisplayMode(D9)");
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 44), extSetCursorPosition9, (void **)&pSetCursorPosition9, "SetCursorPosition(D9)");
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 48), extShowCursor9, (void **)&pShowCursor9, "ShowCursor(D9)");
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 52), extCreateAdditionalSwapChain, (void **)&pCreateAdditionalSwapChain, "CreateAdditionalSwapChain(D9)");
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 64), extReset, (void **)&pReset, "Reset(D9)");
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 68), extPresent, (void **)&pPresent, "Present(D9)");
@ -711,18 +719,22 @@ HRESULT WINAPI extReset(void *pd3dd, D3DPRESENT_PARAMETERS* pPresParam)
}
}
res = (*pReset)(pd3dd, (D3DPRESENT_PARAMETERS *)param);
if(res){
OutTraceDW("FAILED! %x\n", res);
return res;
if(!(dxw.dwFlags4 & NOD3DRESET)){
res = (*pReset)(pd3dd, (D3DPRESENT_PARAMETERS *)param);
if(res == D3DERR_INVALIDCALL){
OutTraceDW("FAILED! D3DERR_INVALIDCALL\n", res);
return D3DERR_INVALIDCALL;
}
if(res){
OutTraceDW("FAILED! %x\n", res);
return res;
}
OutTraceDW("SUCCESS!\n");
(dwD3DVersion == 8) ? HookD3DDevice8(&pd3dd) : HookD3DDevice9(&pd3dd);
}
OutTraceDW("SUCCESS!\n");
if(dwD3DVersion == 8){
HookD3DDevice8(&pd3dd);
}
else {
HookD3DDevice9(&pd3dd);
else{
OutTraceDW("SKIPPED!\n");
res=D3D_OK;
}
dxw.SetScreenSize(pPresParam->BackBufferWidth, pPresParam->BackBufferHeight);
@ -1521,3 +1533,31 @@ ULONG WINAPI extSetTexture9(void *lpd3dd, DWORD Stage, void* pTexture)
OutTraceD3D("Device::SetTexture(9): d3dd=%x stage=%x\n", lpd3dd, Stage);
return DD_OK;
}
BOOL WINAPI extShowCursor8(void *lpd3dd, BOOL bShow)
{
BOOL res, bNew;
bNew=bShow;
if(dxw.dwFlags2 & SHOWHWCURSOR) bNew=TRUE;
if(dxw.dwFlags1 & HIDEHWCURSOR) bNew=FALSE;
res=(*pShowCursor8)(lpd3dd, bNew);
if(bNew==bShow)
OutTraceD3D("Device::ShowCursor(8): d3dd=%x show=%x res=%x\n", lpd3dd, bNew, res);
else
OutTraceD3D("Device::ShowCursor(8): d3dd=%x show=%x->%x res=%x\n", lpd3dd, bShow, bNew, res);
return res;
}
BOOL WINAPI extShowCursor9(void *lpd3dd, BOOL bShow)
{
BOOL res, bNew;
bNew=bShow;
if(dxw.dwFlags2 & SHOWHWCURSOR) bNew=TRUE;
if(dxw.dwFlags1 & HIDEHWCURSOR) bNew=FALSE;
res=(*pShowCursor9)(lpd3dd, bNew);
if(bNew==bShow)
OutTraceD3D("Device::ShowCursor(9): d3dd=%x show=%x res=%x\n", lpd3dd, bNew, res);
else
OutTraceD3D("Device::ShowCursor(9): d3dd=%x show=%x->%x res=%x\n", lpd3dd, bShow, bNew, res);
return res;
}

View File

@ -806,7 +806,7 @@ HRESULT WINAPI extD3DGetCaps(void *d3dd, LPD3DDEVICEDESC lpd3dd ,LPD3DDEVICEDESC
HRESULT WINAPI extSetRenderState(SetRenderState3_Type pSetRenderState, int version, void *d3dd, D3DRENDERSTATETYPE State, DWORD Value)
{
HRESULT res;
OutTraceD3D("SetRenderState(%d): d3dd=%x State=%x(%s) Value=%x\n", version, d3dd, State, ExplainD3DRenderState(State), Value);
OutTraceB("SetRenderState(%d): d3dd=%x State=%x(%s) Value=%x\n", version, d3dd, State, ExplainD3DRenderState(State), Value);
if((dxw.dwFlags4 & ZBUFFERALWAYS) && (State == D3DRENDERSTATE_ZFUNC)) {
OutTraceD3D("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(Value));

View File

@ -35,14 +35,14 @@ static HookEntry_Type LimitHooks[]={
};
static HookEntry_Type TimeHooks[]={
{HOOK_IAT_CANDIDATE, "GetTickCount", (FARPROC)GetTickCount, (FARPROC *)&pGetTickCount, (FARPROC)extGetTickCount},
{HOOK_IAT_CANDIDATE, "GetLocalTime", (FARPROC)GetLocalTime, (FARPROC *)&pGetLocalTime, (FARPROC)extGetLocalTime},
{HOOK_IAT_CANDIDATE, "GetSystemTime", (FARPROC)GetSystemTime, (FARPROC *)&pGetSystemTime, (FARPROC)extGetSystemTime},
{HOOK_IAT_CANDIDATE, "GetSystemTimeAsFileTime", (FARPROC)GetSystemTimeAsFileTime, (FARPROC *)&pGetSystemTimeAsFileTime, (FARPROC)extGetSystemTimeAsFileTime},
{HOOK_IAT_CANDIDATE, "Sleep", (FARPROC)Sleep, (FARPROC *)&pSleep, (FARPROC)extSleep},
{HOOK_IAT_CANDIDATE, "SleepEx", (FARPROC)SleepEx, (FARPROC *)&pSleepEx, (FARPROC)extSleepEx},
{HOOK_IAT_CANDIDATE, "QueryPerformanceCounter", (FARPROC)QueryPerformanceCounter, (FARPROC *)&pQueryPerformanceCounter, (FARPROC)extQueryPerformanceCounter},
{HOOK_IAT_CANDIDATE, "QueryPerformanceFrequency", (FARPROC)QueryPerformanceFrequency, (FARPROC *)&pQueryPerformanceFrequency, (FARPROC)extQueryPerformanceFrequency},
{HOOK_HOT_CANDIDATE, "GetTickCount", (FARPROC)GetTickCount, (FARPROC *)&pGetTickCount, (FARPROC)extGetTickCount},
{HOOK_HOT_CANDIDATE, "GetLocalTime", (FARPROC)GetLocalTime, (FARPROC *)&pGetLocalTime, (FARPROC)extGetLocalTime},
{HOOK_HOT_CANDIDATE, "GetSystemTime", (FARPROC)GetSystemTime, (FARPROC *)&pGetSystemTime, (FARPROC)extGetSystemTime},
{HOOK_HOT_CANDIDATE, "GetSystemTimeAsFileTime", (FARPROC)GetSystemTimeAsFileTime, (FARPROC *)&pGetSystemTimeAsFileTime, (FARPROC)extGetSystemTimeAsFileTime},
{HOOK_HOT_CANDIDATE, "Sleep", (FARPROC)Sleep, (FARPROC *)&pSleep, (FARPROC)extSleep},
{HOOK_HOT_CANDIDATE, "SleepEx", (FARPROC)SleepEx, (FARPROC *)&pSleepEx, (FARPROC)extSleepEx},
{HOOK_HOT_CANDIDATE, "QueryPerformanceCounter", (FARPROC)QueryPerformanceCounter, (FARPROC *)&pQueryPerformanceCounter, (FARPROC)extQueryPerformanceCounter},
{HOOK_HOT_CANDIDATE, "QueryPerformanceFrequency", (FARPROC)QueryPerformanceFrequency, (FARPROC *)&pQueryPerformanceFrequency, (FARPROC)extQueryPerformanceFrequency},
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
};

View File

@ -15,9 +15,9 @@ static HookEntry_Type Hooks[]={
};
static HookEntry_Type TimeHooks[]={
{HOOK_IAT_CANDIDATE, "timeGetTime", NULL, (FARPROC *)&ptimeGetTime, (FARPROC)exttimeGetTime},
{HOOK_IAT_CANDIDATE, "timeKillEvent", NULL, (FARPROC *)&ptimeKillEvent, (FARPROC)exttimeKillEvent},
{HOOK_IAT_CANDIDATE, "timeSetEvent", NULL, (FARPROC *)&ptimeSetEvent, (FARPROC)exttimeSetEvent},
{HOOK_HOT_CANDIDATE, "timeGetTime", NULL, (FARPROC *)&ptimeGetTime, (FARPROC)exttimeGetTime},
{HOOK_HOT_CANDIDATE, "timeKillEvent", NULL, (FARPROC *)&ptimeKillEvent, (FARPROC)exttimeKillEvent},
{HOOK_HOT_CANDIDATE, "timeSetEvent", NULL, (FARPROC *)&ptimeSetEvent, (FARPROC)exttimeSetEvent},
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
};

View File

@ -19,16 +19,25 @@ typedef struct {
#define MAXWNDHSTACK 256
wndstack_entry WhndStack[MAXWNDHSTACK];
wndstack_entry *WhndStack;
static int WhndTOS = 0;
static int WhndSize = 0;
void WhndStackInit()
{
WhndSize = MAXWNDHSTACK;
WhndStack = (wndstack_entry *)malloc(WhndSize * sizeof(wndstack_entry));
}
void WhndStackPush(HWND hwnd, WNDPROC wndproc)
{
int StackIdx;
if(WhndTOS == WhndSize){
WhndSize += MAXWNDHSTACK;
WhndStack = (wndstack_entry *)realloc(WhndStack, WhndSize * sizeof(wndstack_entry));
//OutTraceDW("DEBUG: WNDPROC STACK new size=%d\n", WhndSize);
}
// wndproc values of 0xFFFFxxxx type seems to be error codes rather than valid callback addresses ....
// v2.02.36 using CallWindowProc you can pass WinProc handles, so you don't need to eliminate them!
//if (((DWORD)wndproc & 0xFFFF0000) == 0xFFFF0000) return;
@ -40,12 +49,6 @@ void WhndStackPush(HWND hwnd, WNDPROC wndproc)
return;
}
// push if not already there.
if(WhndTOS>=MAXWNDHSTACK) {
char sMsg[80];
sprintf(sMsg, "Table overflow: %d entries used", MAXWNDHSTACK);
MessageBox(0, sMsg, "WhndStackPush", MB_OK | MB_ICONEXCLAMATION);
return;
}
WhndStack[WhndTOS].hwnd=hwnd;
WhndStack[WhndTOS].wndproc=wndproc;
WhndTOS++;
@ -54,7 +57,7 @@ void WhndStackPush(HWND hwnd, WNDPROC wndproc)
WNDPROC WhndGetWindowProc(HWND hwnd)
{
int StackIdx;
for(StackIdx=0; StackIdx<MAXWNDHSTACK; StackIdx++) if (WhndStack[StackIdx].hwnd==hwnd) {
for(StackIdx=0; StackIdx<WhndTOS; StackIdx++) if (WhndStack[StackIdx].hwnd==hwnd) {
//OutTraceDW("DEBUG: WNDPROC STACK pop hwnd=%x, wndproc=%x\n", hwnd, WhndStack[StackIdx].wndproc);
return WhndStack[StackIdx].wndproc;
}

View File

@ -217,6 +217,7 @@
#define IDC_HOTPATCH 1179
#define IDC_ENABLEHOTKEYS 1180
#define IDC_HOTPATCHALWAYS 1181
#define IDC_NOD3DRESET 1182
#define ID_MODIFY 32771
#define ID_DELETE 32772
#define ID_ADD 32773

View File

@ -44,6 +44,7 @@ void CTabDirectX::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_NOALPHACHANNEL, cTarget->m_NoAlphaChannel);
DDX_Check(pDX, IDC_FIXREFCOUNTER, cTarget->m_FixRefCounter);
DDX_Check(pDX, IDC_RETURNNULLREF, cTarget->m_ReturnNullRef);
DDX_Check(pDX, IDC_NOD3DRESET, cTarget->m_NoD3DReset);
DDX_Check(pDX, IDC_NOFLIPEMULATION, cTarget->m_NoFlipEmulation);
}

View File

@ -46,6 +46,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_NoAlphaChannel = FALSE;
m_FixRefCounter = TRUE;
m_ReturnNullRef = FALSE;
m_NoD3DReset = FALSE;
m_SuppressChild = FALSE;
m_HideDesktop = FALSE;
m_LockSysColors = FALSE;

View File

@ -146,6 +146,7 @@ public:
BOOL m_NoAlphaChannel;
BOOL m_FixRefCounter;
BOOL m_ReturnNullRef;
BOOL m_NoD3DReset;
BOOL m_SuppressChild;
BOOL m_HideDesktop;
BOOL m_LockSysColors;

Binary file not shown.

View File

@ -352,6 +352,7 @@ BEGIN
CONTROL "Add proxy libs",IDC_ADDPROXYLIBS,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,15,200,123,12
CONTROL "Compensate Flip emulation",IDC_NOFLIPEMULATION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,76,119,10
CONTROL "Return 0 ref counter",IDC_RETURNNULLREF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,184,123,12
CONTROL "Suppress D3D8/9 Reset",IDC_NOD3DRESET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,196,123,12
END
IDD_TAB_INPUT DIALOGEX 0, 0, 300, 240

Binary file not shown.

View File

@ -184,6 +184,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_NoAlphaChannel) t->flags4 |= NOALPHACHANNEL;
if(dlg->m_FixRefCounter) t->flags4 |= FIXREFCOUNTER;
if(dlg->m_ReturnNullRef) t->flags4 |= RETURNNULLREF;
if(dlg->m_NoD3DReset) t->flags4 |= NOD3DRESET;
if(dlg->m_SuppressChild) t->flags4 |= SUPPRESSCHILD;
if(dlg->m_HideDesktop) t->flags4 |= HIDEDESKTOP;
if(dlg->m_LockSysColors) t->flags3 |= LOCKSYSCOLORS;
@ -342,6 +343,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_NoAlphaChannel = t->flags4 & NOALPHACHANNEL ? 1 : 0;
dlg->m_FixRefCounter = t->flags4 & FIXREFCOUNTER ? 1 : 0;
dlg->m_ReturnNullRef = t->flags4 & RETURNNULLREF ? 1 : 0;
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_LockSysColors = t->flags3 & LOCKSYSCOLORS ? 1 : 0;
@ -823,6 +825,8 @@ void CDxwndhostView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
*pResult = 0;
}
static char ImportExportPath[4096] = {0};
void CDxwndhostView::OnExport()
{
int i;
@ -851,21 +855,23 @@ void CDxwndhostView::OnImport()
path[0]=0;
CListCtrl& listctrl = GetListCtrl();
char buffer[4096] = {0};
//static char buffer[4096] = {0};
//static char dirbuffer[4096] = {0};
char folder[MAX_PATH+1];
char pathname[MAX_PATH+1];
OPENFILENAME ofn = {0};
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = (LPSTR)buffer;
ofn.lpstrFile = (LPSTR)ImportExportPath;
//ofn.lpstrInitialDir = (LPSTR)dirbuffer;
ofn.nMaxFile = 4096;
ofn.Flags = OFN_ALLOWMULTISELECT | OFN_EXPLORER;
ofn.lpstrDefExt = "dxw";
if(GetOpenFileName(&ofn)){
if(buffer[ofn.nFileOffset - 1] != '\0'){
if(ImportExportPath[ofn.nFileOffset - 1] != '\0'){
// Single-Select
// "buffer" - name of file
LoadConfigItem(&TargetMaps[i], &TitleMaps[i], 0, buffer);
LoadConfigItem(&TargetMaps[i], &TitleMaps[i], 0, ImportExportPath);
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i;
listitem.iSubItem = 0;
@ -875,7 +881,7 @@ void CDxwndhostView::OnImport()
}
else{
// Multi-Select
char* p = buffer;
char* p = ImportExportPath;
strcpy(folder, p);
strcat(folder, "\\");
p += lstrlen((LPSTR)p) + 1;