2016-10-14 12:47:39 -04:00
# include <ddraw.h>
//#include "dxwcore.hpp"
# define DXW_IDLE 0
# define DXW_ACTIVE 1
# define DXW_RUNNING 2
# define MAXTARGETS 256
# define ONEPIXELFIX 1
# define HOOKDDRAWNONE 12
// first flags DWORD dwFlags1:
# define UNNOTIFY 0x00000001
# define EMULATESURFACE 0x00000002
# define CLIPCURSOR 0x00000004 // Force cursor clipping within window
# define NEEDADMINCAPS 0x00000008 // DxWnd needs administrator's privileges to hook this program
# define HOOKDI 0x00000010
# define MODIFYMOUSE 0x00000020
# define HANDLEEXCEPTIONS 0x00000040 // Handles exceptions: Div by 0 ....
# define SAVELOAD 0x00000080
# define EMULATEBUFFER 0x00000100
# define HOOKDI8 0x00000200
# define BLITFROMBACKBUFFER 0x00000400
# define SUPPRESSCLIPPING 0x00000800
# define AUTOREFRESH 0x00001000
# define FIXWINFRAME 0x00002000
# define HIDEHWCURSOR 0x00004000
# define SLOWDOWN 0x00008000
2016-10-12 12:48:37 -04:00
# define DISABLECLIPPING 0x00010000
2016-10-14 12:47:39 -04:00
# define LOCKWINSTYLE 0x00020000
# define MAPGDITOPRIMARY 0x00040000
# define FIXTEXTOUT 0x00080000
# define KEEPCURSORWITHIN 0x00100000
# define USERGB565 0x00200000
# define SUPPRESSDXERRORS 0x00400000 // suppresses some common dx errors (BUSY)
# define PREVENTMAXIMIZE 0x00800000 // struggle to avoid window maximize
# define LOCKEDSURFACE 0x01000000 // emulates the buffer of the primary surface when locked and written directly
# define FIXPARENTWIN 0x02000000 // fixes parent window size & position
# define SWITCHVIDEOMEMORY 0x04000000 // when VIDEO memory is over, switches to SYSTEM memory
# define CLIENTREMAPPING 0x08000000 // hooks ClientToRect, RectToClient, GetClientRect, GetWinRect
# define HANDLEALTF4 0x10000000 // forces quitting the program when receiving Alt-F4 key
# define LOCKWINPOS 0x20000000 // prevent the program to change its own windows properties
2016-11-26 11:48:21 -05:00
# define HOOKCHILDWIN 0x40000000 // hook CHILD windows to alter placement coordinates
2016-10-14 12:47:39 -04:00
# define MESSAGEPROC 0x80000000 // process peek/get messages
// second flags DWORD dxw.dwFlags2:
# define RECOVERSCREENMODE 0x00000001 // actively set screen mode to initial state after hooking
# define REFRESHONRESIZE 0x00000002 // forces a refresh (blitting from backbuffer to primary) upon win resize
# define BACKBUFATTACH 0x00000004 // sets backbuf wxh dim. equal to primary surface so that ZBUFFER is attachable.....
# define MODALSTYLE 0x00000008 // window with no borders
# define KEEPASPECTRATIO 0x00000010 // when resizing, keep original aspect ratio
# define INIT8BPP 0x00000020 // simulate a 8BPP initial desktop setting (in GetDeviceCaps API)
# define FORCEWINRESIZE 0x00000040 // adds NCMOUSEUP/DOWN processing to the win procedure if missing
# define INIT16BPP 0x00000080 // simulate a 16BPP initial desktop setting (in GetDeviceCaps API)
# define KEEPCURSORFIXED 0x00000100 // inhibit SetCursorPos operation
# define DISABLEGAMMARAMP 0x00000200 // let the application retrieve the desktop DC (for capability queries)
# define INDEPENDENTREFRESH 0x00000400 // Makes automatic primary surface refresh but independently from the message loop processing
# define FIXNCHITTEST 0x00000800 // fixes WM_NCHITTEST message X,Y coordinates
# define LIMITFPS 0x00001000 // delays primary blit operations to limit FPS
# define SKIPFPS 0x00002000 // skips primary blit operations up to limit
# define SHOWFPS 0x00004000 // shows FPS value to status win / log / title bar
# define HIDEMULTIMONITOR 0x00008000 // hide multimonitor configurations: GetAdapterCount returns 1.
# define TIMESTRETCH 0x00010000 // make system time stretchable
# define HOOKOPENGL 0x00020000 // Hook OpenGL calls
2016-06-11 12:48:04 -04:00
# define LOCKEDSIZE 0x00040000 // window resizzing is not allowed
2016-10-14 12:47:39 -04:00
# define SHOWHWCURSOR 0x00080000 // enable hardware cursor
# define GDISTRETCHED 0x00100000 // Stretch GDI/user32 coordinates to adapt to window size
# define SHOWFPSOVERLAY 0x00200000 // shows FPS value to status win / log / screen overlay
# define FAKEVERSION 0x00400000 // pretends the platvorm is a given window version / subversion
# define FULLRECTBLT 0x00800000 // blit to primary surface using NULL source & dest rect
# define NOPALETTEUPDATE 0x01000000 // Do not refresh primary surface on palette updates
# define SUPPRESSIME 0x02000000 // suppress IME
# define NOBANNER 0x04000000 // suppress fancy logo & banneer effects
# define WINDOWIZE 0x08000000 // Run in a Window (default TRUE)
# define LIMITRESOURCES 0x10000000 // Limit resources to fit an old program's expectations
# define STARTDEBUG 0x20000000 // Start in DEBUG mode
# define SETCOMPATIBILITY 0x40000000 // invoke ddraw SetAppCompatData to set aero compatibility mode
# define WIREFRAME 0x80000000 // forces wireframe display for D3D and Glide games
// third flags DWORD dxw.dwFlags3:
# define FORCEHOOKOPENGL 0x00000001 // loads OpenGL32.dll and hooks it
# define MARKBLIT 0x00000002 // higlights the blit to primary surface operation by surroundig the rect in color
# define HOOKDLLS 0x00000004 // Hook all DLLs referenced in PE
# define SUPPRESSD3DEXT 0x00000008 // Disables extended d3d APIs for Vista/Win7/Win8 platforms
# define HOOKENABLED 0x00000010 // Enables task hooking
# define FIXD3DFRAME 0x00000020 // Preserve windows frame in D3D9 programs
# define FORCE16BPP 0x00000040 // Forces 16BPP desktop color depth
# define BLACKWHITE 0x00000080 // Simulate a B&W screen monitor mapping colors to grayscales
# define MARKLOCK 0x00000100 // higlights the locked/unlocked surfaces by surroundig the rect in color
# define SINGLEPROCAFFINITY 0x00000200 // Set Process Affinity to a single core
# define EMULATEREGISTRY 0x00000400 // Emulate registry api to read extra keys
# define CDROMDRIVETYPE 0x00000800 // Pretends that GetDriveType() always returns DRIVE_CDROM
# define NOWINDOWMOVE 0x00001000 // Do not try to update window position & size on D3D rendering
# define FORCECLIPPER 0x00002000 // Set ddraw clipping for real primary surface and primary window - but FastBlt cannot be used!
# define LOCKSYSCOLORS 0x00004000 // Lock Sys Colors changes by SetSysColors() call
# define GDIEMULATEDC 0x00008000 // Map GDI/user32 calls to primary to a memory surface to be stretch-blitted to the primary
# define FULLSCREENONLY 0x00010000 // assume that the program is always in fullscreen mode
# define FONTBYPASS 0x00020000 // bypass font unsupported API
# define MINIMALCAPS 0x00040000 // Simulate minimal HW caps (copied from VMWare virtual screen)
# define DEFAULTMESSAGES 0x00080000 // peocess offending messages that are typical of a window with default action
# define BUFFEREDIOFIX 0x00100000 // fix buffered IO incompatibilities between pre-Win98 and post-WinNT
# define FILTERMESSAGES 0x00200000 // ignore offending messages that are typical of a window and are hot handled by a fullscreeen app
# define PEEKALLMESSAGES 0x00400000 // force Peek-ing all sort of messages to avoid Win7 message queue saturation that leads to program halt
# define SURFACEWARN 0x00800000 // warn when a unclassified surface capability is met (debug only!)
# define ANALYTICMODE 0x01000000 // activate analytic mode (debug only!)
# define FORCESHEL 0x02000000 // Forces HEL (DDCREATE_EMULATIONONLY)
# define CAPMASK 0x04000000 // Enable capability mask (according to ini file)
# define COLORFIX 0x08000000 // Win7 color fix for 8bpp paletized modes
# define NODDRAWBLT 0x10000000 // Suppress ddraw Blt to primary
# define NODDRAWFLIP 0x20000000 // Suppress ddraw Flip to primary
# define NOGDIBLT 0x40000000 // Suppress GDI Blt to video device
# define NOPIXELFORMAT 0x80000000 // Don't fix the pixel format for plain surfaces
// fourth flags DWORD dxw.dwFlags4:
# define NOALPHACHANNEL 0x00000001 // By default, create surfaces with no DDPF_ALPHAPIXELS capability
# define SUPPRESSCHILD 0x00000002 // suppress child process generation (CreateProcessA, ...?)
# define FIXREFCOUNTER 0x00000004 // fixes the reference counter for the main directdraw session (the one connected to primary surfaces)
# define SHOWTIMESTRETCH 0x00000008 // Shows time stretching multiplier on screen overlay
# define ZBUFFERCLEAN 0x00000010 // Clean ZBUFFER upon (fix for "Star Wars Ep. I - Racer")
# define ZBUFFER0CLEAN 0x00000020 // Clean ZBUFFER upon (fix for "Star Wars Ep. I - Racer")
# define ZBUFFERALWAYS 0x00000040 // Forces ZBUFFER D3DCMP_ALWAYS condition to show all planes....
# define DISABLEFOGGING 0x00000080 // Disable D3D fogging
# define NOPOWER2FIX 0x00000100 // Handle textures whose size is not a power of 2 (32, 64, 128 ...)
# define NOPERFCOUNTER 0x00000200 // Disables the GetPerfCounter performance metrics API,as if it was not supported....
# define BILINEAR2XFILTER 0x00000400 // attempt to smooth low-res graphic by applying simplified bilinear filtering in emulation mode
# define INTERCEPTRDTSC 0x00000800 // Intercapts RDTSC opcodes to hook at assembly level
# define LIMITSCREENRES 0x00001000 // Limit available screen resolution up to defined maximum
# define NOFILLRECT 0x00002000 // Suppress FillRect calls
# define HOOKGLIDE 0x00004000 // Hook glide calls
# define HIDEDESKTOP 0x00008000 // Hide desktop background
# define STRETCHTIMERS 0x00010000 // Enables timers stretching when TIMESTRETCH is on
# define NOFLIPEMULATION 0x00020000 // Compensate the effect of Flip-ping through Blt operations
# define NOTEXTURES 0x00040000 // Disabled (whitened) textures
# define RETURNNULLREF 0x00080000 // IDirectDraw::Release and IDDrawSurface::Release will always return 0 ref. counter
# define FINETIMING 0x00100000 // Fine timeslider coarse, by 10% steps ranging from about :2 to x2
# define NATIVERES 0x00200000 // Supports hardware native resolutions (depending on your PC)
# define SUPPORTSVGA 0x00400000 // Supports SVGA standard resolutions
# define SUPPORTHDTV 0x00800000 // Supports HDTV standard resolutions
# define RELEASEMOUSE 0x01000000 // GetCursorPos returns centered coordinates when the mouse cursor is moved outside the window
# define ENABLETIMEFREEZE 0x02000000 // Enable Time Freeze functionality and toggle key
# 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
# define OVERRIDEREGISTRY 0x40000000 // same as EMULATEREGISTRY, but fake keys takeprecedence
# define HIDECDROMEMPTY 0x80000000 // hide empty CDROM drivers
// fifth flags DWORD dxw.dwFlags5:
# define DIABLOTWEAK 0x00000001 // ... ??? ...
# define CLEARTARGET 0x00000002 // forces a D3D clean on target surface upon each BeginScene invocation
# define NOWINPOSCHANGES 0x00000004 // suppress WM_WINDOWPOSCHANGING/CHANGED messages (RollerCoaster Tycoon...)
# define ANSIWIDE 0x00000008 // by default uses Widechar version of API intead od ANSI
# define NOBLT 0x00000010 // suppress blit to primary surface
# define USELASTCORE 0x00000020 // Same as single core process affinity, but using the last availabe core instead of first one
# define DOFASTBLT 0x00000040 // use FastBlt to primary surface
# define AEROBOOST 0x00000080 // Optimize for AERO environment: does all stretching in sysmemory surfaces
# define QUARTERBLT 0x00000100 // Consider a screen update (to count or limit FPS) only blt operations bigger than a quarter of the whole primary surface
# define NOIMAGEHLP 0x00000200 // Interceptd Imagehlp.dll unsupported calls (used by "the 5th element")
# define BILINEARFILTER 0x00000400 // experimental bilinear filtering
# define REPLACEPRIVOPS 0x00000800 // replace privileged opcodes, such as IN (Ubik)
# define REMAPMCI 0x00001000 // remap MCI calls coordinates in mciSendString
# define TEXTUREHIGHLIGHT 0x00002000 // highlight textures with random color & grid
# define TEXTUREDUMP 0x00004000 // dump textures to file system as bmp files
# define TEXTUREHACK 0x00008000 // load (replace) hacked textures from file system (bmp files)
# define TEXTURETRANSP 0x00010000 // transparent textures (unimplemented)
# define NORMALIZEPERFCOUNT 0x00020000 // Normalize Performance Counter to a Performance Frequency of 1MHz
# define HYBRIDMODE 0x00040000 // ?????
# define GDICOLORCONV 0x00080000 // do color conversion using GDI
# define INJECTSON 0x00100000 // when starting a son process, inject dxwnd.dll at the beginning of execution
# define ENABLESONHOOK 0x00200000 // forward hooking capability to son processes
# define FREEZEINJECTEDSON 0x00400000 // BEWARE!!!! you must know what you're doing. Leaves the injected son in an endless loop
# define GDIMODE 0x00800000 // Use GDI to both stretch and color conversion. It seems faster....
# define CENTERTOWIN 0x01000000 // do NOT stretch the image to the whole window client area, but center to it.
# define STRESSRESOURCES 0x02000000 // simulates a lack of resources condition, for testing (debug opt.)
# define MESSAGEPUMP 0x04000000 // inserts a "message pump" loop between repeated operation that may stop the task on Win7 and greater
# define TEXTUREFORMAT 0x08000000 // Apply virtual pixel format to texture surfaces without DDSD_PIXELFORMAT attribute
# define DEINTERLACE 0x10000000 // Deinterlace movies / screens that have black odd lines by interpolating even lines
# 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
// sixth flags DWORD dxw.dwFlags6:
# define FORCESWAPEFFECT 0x00000001 // in D3D8/9, forces the SwapEffect value in CreateDevice/Reset operations
# define LEGACYALLOC 0x00000002 // reserve legacy memory segments
# define NODESTROYWINDOW 0x00000004 // suppress the main window destruction
# define NOMOVIES 0x00000008 // suppress MCI Movies
# define SUPPRESSRELEASE 0x00000010 // Avoid releasing critical emulated surfaces - the backbuffer
# define FIXMOVIESCOLOR 0x00000020 // Fixes vfw movies color depth forcing the virtual value
# define WOW64REGISTRY 0x00000040 // Sets KEY_WOW64_64KEY registry flag
# define DISABLEMAXWINMODE 0x00000080 // invoke ddraw SetAppCompatData(12,0) to set DisableMaxWindowedMode
# define FIXPITCH 0x00000100 // Fixes surface filling made with no concern to actual pitch value
# define POWER2WIDTH 0x00000200 // Fixes .....
# define HIDETASKBAR 0x00000400 // Hides taskbar & start menu during game execution
# define ACTIVATEAPP 0x00000800 // sends WM_ACTIVATEAPP message after every WM_WINPOSCHANGED message
# define NOSYSMEMPRIMARY 0x00001000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated primary surface
# define NOSYSMEMBACKBUF 0x00002000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated backbuffer surface
# define CONFIRMONCLOSE 0x00004000 // on close button, ask the user before closing the window / terminating the program
# define TERMINATEONCLOSE 0x00008000 // on WM_CLOSE message, also terminates the program
# define FLIPEMULATION 0x00010000 // create virtual primary and backbuffer as un-attached surfaces and replace Flip with Blt
# define SETZBUFFERBITDEPTHS 0x00020000 // when not set, set the legacy dwZBufferBitDepths field in the directdraw capability from GetCaps()
# define SHAREDDC 0x00040000 // enable sharing window DC and primary surface DC
# define WOW32REGISTRY 0x00080000 // Sets KEY_WOW32_64KEY registry flag
# define STRETCHMOVIES 0x00100000 // Stretches ActiveMovie Windows to the whole window size
# define BYPASSMCI 0x00200000 // bypass all MCI calls returning OK.
# define FIXPIXELZOOM 0x00400000
# define REUSEEMULATEDDC 0x00800000
# define CREATEDESKTOP 0x01000000 // creates a virtual desktop window to replace the real one
# define NOWINDOWHOOKS 0x02000000 // do not intercept window callback routines
# define SYNCPALETTE 0x04000000 // Syncronize GDI to DDRAW palette
# define VIRTUALJOYSTICK 0x08000000 // Enables the DxWnd virtual joystick
# define UNACQUIRE 0x10000000 // Unacquire DirectInput devices when losing focus and acquire back when gaining focus
# define HOOKGOGLIBS 0x20000000 // Hook additional libraries provided by GOG with different names but same functionalities as system ones
# define BYPASSGOGLIBS 0x40000000 // Bypass GOG proxy system libraries loading directly the system libraries from the system folder
# define EMULATERELMOUSE 0x80000000 // Emulates the dinput detection of relative mouse position by keeping the mouse at the center of window and looking for movements
// seventh flags DWORD dxw.dwFlags7:
# define LIMITDDRAW 0x00000001 // Limit the maximum available ddraw object version
# define DISABLEDISABLEALTTAB 0x00000002 // Disables the compatibility patch that disables the Alt-Tab key and other special combinations
# define FIXCLIPPERAREA 0x00000004 // fix clipper area in ddraw & GDI shared DC mode
2016-12-22 11:48:51 -05:00
# define HOOKDIRECTSOUND 0x00000008 // Hook DirectSound dll
2016-10-14 12:47:39 -04:00
# define HOOKSMACKW32 0x00000010 // hook Smackw32 functions
# define BLOCKPRIORITYCLASS 0x00000020 // blocks attempts to change the process priority class
# define CPUSLOWDOWN 0x00000040 // reduces CPU time dedicated to non time critical threads
# define CPUMAXUSAGE 0x00000080 // reduces CPU time to non time critical threads that consume more than the given ratio
# define NOWINERRORS 0x00000100 // suppress some possible window errors returning OK also in case of failure
# define SUPPRESSOVERLAY 0x00000200 // Supress ddraw overlay capabilities (moto racer 2)
# define INIT24BPP 0x00000400 // simulate a 24BPP initial desktop setting (in GetDeviceCaps API)
# define INIT32BPP 0x00000800 // simulate a 24BPP initial desktop setting (in GetDeviceCaps API)
# define FIXGLOBALUNLOCK 0x00001000 // Fix GlobalUnlock kernel32 API when it keeps returning the 1 retcode.
# define SHOWHINTS 0x00002000 // show configuration hints at runtime
# define SKIPDEVTYPEHID 0x00004000 // do not enumerate HID device types, some programs are not properly coded!
# define INJECTSUSPENDED 0x00008000 // Inject the suspended process while running infinite loop ad starting address
# define SUPPRESSDIERRORS 0x00010000 // Suppress DirectInput common errors
# define HOOKNORUN 0x00020000 // Hook process but don't start it from DxWnd interface
# define FIXBINDTEXTURE 0x00040000 // Fix the problems caused by the lack of glActiveTexture on some Windows OpenGL32.dll versions
# define ENUM16BITMODES 0x00080000 // Enumerates 16 bit video modes when using DirectDraw8/9::EnumAdapterModes on a Win10 OS
# define SHAREDKEYBOARD 0x00100000 // Forces DirectInput cooperative level to NONEXCLUSIVE mode for the keyboard
# define HOOKNOUPDATE 0x00200000 // Updates the original addresses when changed
# define HOOKGLUT32 0x00400000 // Hook glut32.dll opengl extension library
# define INITIALRES 0x00800000 // Set initial screen resolution accorting to sizw x sizh fields
# define MAXIMUMRES 0x01000000 // Set maximum screen resolution accorting to sizw x sizh fields
# define LOCKCOLORDEPTH 0x02000000 // lock ddraw color depth to current desktop value (used in SetDisplayMode)
# define FIXSMACKLOOP 0x04000000 // fix Smack loop by insert processmessage and blit between frames
2016-10-21 12:47:48 -04:00
# define FIXFREELIBRARY 0x08000000 // fix FreeLibrary simulating retcode 0(error) when attempting free of unallocated module
2016-06-11 12:48:04 -04:00
# define ANCHORED 0x10000000 // Anchored position & size, mo stretching or sliding is allowed
2016-11-13 11:48:08 -05:00
# define CLEARTEXTUREFOURCC 0x20000000 // Clear DDSCAPS2_FOURCC bit and makes texture load without codec
# define NODDEXCLUSIVEMODE 0x40000000 // Do not allow ddraw EXCLUSIVE mode also in non windowed mode
2016-11-26 11:48:21 -05:00
# define COPYNOSHIMS 0x80000000 // Create a hiden and temporary copy of the target exe so that shims are not applied
2016-10-14 12:47:39 -04:00
// eighth flags DWORD dxw.dwFlags8:
2016-11-26 11:48:21 -05:00
# define FORCEWAIT 0x00000001 // Forces DDBLT/DDFLIP WAIT flags
# define FORCENOWAIT 0x00000002 // Forces DDBLT/DDFLIP NOWAIT flags
# define FORCEVSYNC 0x00000004 // Forces hardware VSync
# define FORCENOVSYNC 0x00000008 // Forces NO hardware VSync
# define VSYNCSCANLINE 0x00000010 // Activates WaitForVerticalBlank algorythm based on reaching a given scan line
2016-07-12 12:48:29 -04:00
# define TRIMTEXTUREFORMATS 0x00000020 // Emulates "DirectXTrimTextureFormats" shim to fix textures in Heavy Gear II
2016-10-12 12:48:37 -04:00
# 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 ....
# define PRETENDVISIBLE 0x00000100 // Pretend the main window is visible (IsWindowVisible) and on Z-order top (GetTopWindow)
2016-12-16 11:48:42 -05:00
# define RAWFORMAT 0x00000200 // texture dump / hack are performed in raw format, compression / decompression to be made offline
# define WININSULATION 0x00000400 // EnumerateWin finds no windows!
# define FIXMOUSEHOOK 0x00000800 // fixes mouse coordinates retrieved through MouseProc routine associated to SetWindowsHook(WH_MOUSE,..)
2016-12-19 11:48:46 -05:00
# define DDSFORMAT 0x00001000 // texture dump / hack are performed in MS DDS format
2016-12-22 11:48:51 -05:00
# define HOOKWING32 0x00002000 // Hook WinG32.dll
# define SEQUENCEDIAT 0x00004000 // IFT has sequential format, DLL entries before and API next
2017-01-08 11:49:14 -05:00
# define D3D8BACK16 0x00008000 // D3D8 emulate 16 bpp backbuffer on a 32 bpp desktop (Win8-10 needed feature)
2017-01-15 11:49:23 -05:00
# define MARKWING32 0x00010000 // Marks (highlights with colored frames) all WinG32 operations
# define DYNAMICZCLEAN 0x00020000 // Performs ZBUFFER cleaning also every time the ZBUFFER is activated
# define MARKGDI32 0x00040000 // Marks (highlights with colored frames) the main GDI32 operations
2017-01-20 11:49:41 -05:00
# define DUMPDIBSECTION 0x00080000 // dumps DIBs to BMP files for debugging purposes
# define DUMPDEVCONTEXT 0x00100000 // dumps source HDC to BMP files for debugging purposes
2017-01-27 11:49:51 -05:00
# define QUALITYFONTS 0x00200000 // Forces adoption of high quality fonts (CLEARTYPE_NATURAL_QUALITY)
# define ALLOWSYSMEMON3DDEV 0x00400000 // Suppress DDSCAPS_SYSTEMMEMORY option when DDSCAPS_3DDEVICE is set
2017-02-05 11:50:05 -05:00
# define CLIPMENU 0x00800000 // Include window menu in mouse clipper area
# define BACKGROUNDPRIORITY 0x01000000 // Lower process priority when in background state
2017-02-07 11:50:10 -05:00
# define OFFSCREENZBUFFER 0x02000000 // Allow building plain surfaces and ZBuffer on offscreen videomemory surfaces
2017-02-15 11:50:18 -05:00
# define VIRTUALHEAP 0x04000000 // Remap heap calls to C library memory allocation routines
# define ZBUFFERHARDCLEAN 0x08000000 // Clean ZBUFFER the hard way (memset 0xFF on whole surface buffer ....)
2017-02-28 11:50:28 -05:00
# define LOADLIBRARYERR 0x10000000 // When LoadLibrary* fail for missing file returns ... instead of ....
# define SHAREDDCHYBRID 0x20000000 // Hybrid mode for shared dc GDI emulation - blits both on ddraw surface and window surface
2017-03-04 11:50:32 -05:00
# define FIXADJUSTWINRECT 0x40000000 // Hybrid mode for shared dc GDI emulation - blits both on ddraw surface and window surface
# define HOOKDLGWIN 0x80000000 // Hook dialog WindowProc
2017-02-28 11:50:28 -05:00
// 9th flags DWORD dxw.dwFlags9:
2017-03-25 09:59:46 -04:00
# define FIXTHINFRAME 0x00000001 // Fix window style like OVERLAPPEDWINDOW but with thin border
2017-02-28 11:50:28 -05:00
// 10th flags DWORD dxw.dwFlags10:
2016-10-14 12:47:39 -04:00
// logging Tflags DWORD:
# define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
# define OUTDDRAWTRACE 0x00000002 // traces DxWnd directdraw screen handling
# define OUTWINMESSAGES 0x00000004 // traces windows messages
# define OUTCURSORTRACE 0x00000008 // traces cursor positions & operations
# define OUTSEPARATED 0x00000010 // write the log on a separate file named dxwnd(n).log where n is the figure of first non-existent file
//#define DXPROXED 0x00000020 // hook DX proxy methods to log each call in original behaviour
# define ASSERTDIALOG 0x00000040 // show assert messages in Dialog Box
# define OUTIMPORTTABLE 0x00000080 // dump import table contents
2016-11-26 11:48:21 -05:00
# define OUTDEBUG 0x00000100 // detailed debugging information
2016-10-14 12:47:39 -04:00
# define OUTREGISTRY 0x00000200 // log registry operations
# define TRACEHOOKS 0x00000400 // log hook operations
# define OUTD3DTRACE 0x00000800 // traces DxWnd direct3d screen handling
# define OUTDXWINTRACE 0x00001000 // traces DxWnd internal operations
2017-01-15 11:49:23 -05:00
# define OUTWINGTRACE 0x00002000 // traces WinG32 hooked calls
# define OUTOGLTRACE 0x00004000 // traces OpenGL hooked calls
2016-10-14 12:47:39 -04:00
# define ADDRELATIVETIME 0x08000000 // log timestamp is relative to previous line
//#define NOLOGCLOSE 0x10000000 // avoid closing the log file handle ("Riven, during CD changes ...)
# define ADDTIMESTAMP 0x20000000 // add timestamp (GetTickCount) to log file
# define OUTDEBUGSTRING 0x40000000 // duplicate logs through OutputDebugString()
# define ERASELOGFILE 0x80000000 // clears old trace file before writing new logs
# define EMULATEFLAGS (EMULATEBUFFER | EMULATESURFACE | LOCKEDSURFACE)
# define HANDLEFPS (SHOWFPS | SHOWFPSOVERLAY | LIMITFPS | SKIPFPS)
# define TEXTUREMASK (TEXTUREHIGHLIGHT|TEXTUREDUMP|TEXTUREHACK|TEXTURETRANSP)
// DxWnd host app data to be passed to the hook callback
typedef struct TARGETMAP
{
int index ;
char path [ MAX_PATH + 1 ] ;
char module [ 60 + 1 ] ;
char OpenGLLib [ 20 + 1 ] ;
int dxversion ;
int coordinates ;
int flags ;
int flags2 ;
int flags3 ;
int flags4 ;
int flags5 ;
int flags6 ;
int flags7 ;
int flags8 ;
2017-02-28 11:50:28 -05:00
int flags9 ;
int flags10 ;
2016-10-14 12:47:39 -04:00
int tflags ; // trace flags (cleared when exported/imported)
int dflags ; // debug flags (cleared when exported/imported)
int monitorid ;
short posx ;
short posy ;
short sizx ;
short sizy ;
short resw ;
short resh ;
short MaxFPS ;
short InitTS ;
short FakeVersionId ;
short MaxScreenRes ;
short SwapEffect ;
short MaxDdrawInterface ;
short SlowRatio ;
2016-11-26 11:48:21 -05:00
short ScanLine ;
2016-10-14 12:47:39 -04:00
} TARGETMAP ;
2017-02-23 11:50:25 -05:00
// VJoyStatus flags
# define VJOYPRESENT 0x00000001 // Virtual joystick configured for the program
# define VJOYENABLED 0x00000002 // Virtual Joystick enabled and sending input coordinates
# define CROSSENABLED 0x00000004 // Crossfire display enabled
# define INVERTYAXIS 0x00000008 // Invert virtual joystick Y axis
# define INVERTXAXIS 0x00000010 // Invert virtual joystick X axis
# define B1AUTOFIRE 0x00000020 // Button 1 auto fire
# define B2AUTOFIRE 0x00000040 // Button 2 auto fire
2017-02-28 11:50:28 -05:00
# define VJAUTOCENTER 0x00000080 // auto-center feature
# define VJKEYBOARDMAP 0x00000100 // mapvirtual joystick lever & buttons to keyboard
# define VJMOUSEMAP 0x00000200 // mapvirtual joystick lever & buttons to mouse
# define VJSENSIVITY 0x00000400 // tune sensibility through mouse wheel
# define VJMOUSEWHEEL 0x00000800 // tune sensibility through mouse wheel
2017-02-23 11:50:25 -05:00
2016-10-14 12:47:39 -04:00
typedef struct
{
short Status ;
short TaskIdx ;
short OrigIdx ;
short IsFullScreen ;
short Width , Height ;
short ColorDepth ;
DDPIXELFORMAT pfd ;
short DXVersion ;
HWND hWnd ;
DWORD dwPid ;
BOOL isLogging ;
DWORD FPSCount ;
int TimeShift ;
short CursorX , CursorY ;
PALETTEENTRY Palette [ 256 ] ;
BOOL AllowMultiTask ;
2017-02-23 11:50:25 -05:00
DWORD VJoyStatus ;
2017-02-28 11:50:28 -05:00
DWORD VJoySensivity ;
2017-02-23 11:50:25 -05:00
short joyposx ;
short joyposy ;
2016-10-14 12:47:39 -04:00
} DXWNDSTATUS ;
extern DXWNDSTATUS DxWndStatus ;
2017-02-23 11:50:25 -05:00
int SetTarget ( DXWNDSTATUS * , TARGETMAP * ) ;
2016-10-14 12:47:39 -04:00
int StartHook ( void ) ;
int EndHook ( void ) ;
void GetDllVersion ( char * ) ;
int GetHookStatus ( DXWNDSTATUS * ) ;
DXWNDSTATUS * GetHookInfo ( ) ;
void HookInit ( TARGETMAP * , HWND ) ;
void ShowHint ( int ) ;
2017-02-02 11:50:00 -05:00
LPCSTR GetFlagCaption ( int , int ) ;
2016-10-14 12:47:39 -04:00
char * GetDxWndPath ( ) ;
void * SetHook ( void * , void * ) ;
void SetHook ( void * , void * , void * * , char * ) ;
void OutTrace ( const char * , . . . ) ;
void OutTraceHex ( BYTE * , int ) ;
void * HookAPI ( HMODULE , char * , void * , const char * , void * ) ;
void AdjustWindowFrame ( HWND , DWORD , DWORD ) ;
char * hexdump ( unsigned char * , int ) ;
2016-10-12 12:48:37 -04:00
void HexTrace ( unsigned char * , int ) ;
2016-10-14 12:47:39 -04:00
LRESULT CALLBACK extWindowProc ( HWND , UINT , WPARAM , LPARAM ) ;
LRESULT CALLBACK extChildWindowProc ( HWND , UINT , WPARAM , LPARAM ) ;
LRESULT CALLBACK extDialogWindowProc ( HWND , UINT , WPARAM , LPARAM ) ;
2016-10-16 12:47:44 -04:00
LRESULT CALLBACK dw_Hider_Message_Handler ( HWND , UINT , WPARAM , LPARAM ) ;
2016-10-14 12:47:39 -04:00
// defines below to condition debug message handling
# define OutTraceW if(dxw.dwTFlags & OUTWINMESSAGES) OutTrace
//#define OutTraceX if(dxw.dwTFlags & OUTPROXYTRACE) OutTrace
# define OutTraceDW if(dxw.dwTFlags & OUTDXWINTRACE) OutTrace
# define OutTraceDDRAW if(dxw.dwTFlags & OUTDDRAWTRACE) OutTrace
# define OutTraceD3D if(dxw.dwTFlags & OUTD3DTRACE) OutTrace
# define OutTraceC if(dxw.dwTFlags & OUTCURSORTRACE) OutTrace
# define OutTraceB if(dxw.dwTFlags & OUTDEBUG) OutTrace
# define OutTraceR if(dxw.dwTFlags & OUTREGISTRY) OutTrace
# define OutTraceH if(dxw.dwTFlags & TRACEHOOKS) OutTrace
# define OutTraceP OutTrace
# define OutTraceE OutTrace
2017-01-15 11:49:23 -05:00
# define OutTraceWG if(dxw.dwTFlags & OUTWINGTRACE) OutTrace
# define OutTraceOGL if(dxw.dwTFlags & OUTOGLTRACE) OutTrace
2016-10-14 12:47:39 -04:00
# define IsTraceW (dxw.dwTFlags & OUTWINMESSAGES)
//#define IsTraceX (dxw.dwTFlags & OUTPROXYTRACE)
# define IsTraceDW (dxw.dwTFlags & OUTDXWINTRACE)
# define IsTraceDDRAW (dxw.dwTFlags & OUTDDRAWTRACE)
# define IsTraceD3D (dxw.dwTFlags & OUTD3DTRACE)
# define IsTraceC (dxw.dwTFlags & OUTCURSORTRACE)
# define IsTraceR (dxw.dwTFlags & OUTREGISTRY)
# define IsTraceH (dxw.dwTFlags & TRACEHOOKS)
# define IsTraceP (TRUE)
# define IsTraceE (TRUE)
2017-01-15 11:49:23 -05:00
# define IsTraceWG (dxw.dwTFlags & OUTWINGTRACE)
# define IsTraceOGL (dxw.dwTFlags & OUTOGLTRACE)
2016-10-14 12:47:39 -04:00
# define IsDebug (dxw.dwTFlags & OUTDEBUG)
# define IsAssertEnabled (dxw.dwTFlags & ASSERTDIALOG)
# define STEP OutTrace("STEP at %s:%d\n", __FILE__, __LINE__)
typedef enum {
DXW_SET_COORDINATES = 0 ,
DXW_DESKTOP_CENTER ,
DXW_DESKTOP_WORKAREA ,
DXW_DESKTOP_FULL
} Coordinates_Types ;
typedef enum {
DXW_NO_LIMIT = 0 ,
DXW_LIMIT_320x200 ,
DXW_LIMIT_400x300 ,
DXW_LIMIT_640x480 ,
DXW_LIMIT_800x600 ,
DXW_LIMIT_1024x768 ,
DXW_LIMIT_1280x960 ,
DXW_LIMIT_1280x1024
} ResolutionLimits_Types ;
typedef enum {
TIMER_TYPE_NONE = 0 ,
TIMER_TYPE_USER32 ,
TIMER_TYPE_WINMM
} Timer_Types ;
typedef struct {
int w ;
int h ;
} SupportedRes_Type ;
extern SupportedRes_Type SupportedSVGARes [ ] ;
extern SupportedRes_Type SupportedHDTVRes [ ] ;
extern int SupportedDepths [ ] ;
# define SUPPORTED_DEPTHS_NUMBER 4