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

v2_02_01_src

Former-commit-id: 5da75c18cbf38a2091dedba429ac98550346a175
This commit is contained in:
gho tik 2013-06-01 12:16:52 -04:00 committed by Refael ACkermann
parent 72f5bb48ce
commit 19c4ab0ca5
24 changed files with 1073 additions and 3559 deletions

View File

@ -56,6 +56,10 @@
#define DISABLEGAMMARAMP 0x00000200 // let the application retrieve the desktop DC (for capability queries)
#define DIFFERENTIALMOUSE 0x00000400 // emulates the 360-degrees-free-running mouse style....
#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
#define HIDEMULTIMONITOR 0x00008000 // hide multimonitor configurations: GetAdapterCount returns 1.
// logging Tflags DWORD:
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
@ -89,6 +93,7 @@ typedef struct TARGETMAP
short posy;
short sizx;
short sizy;
short MaxFPS;
}TARGETMAP;
typedef struct
@ -102,6 +107,7 @@ typedef struct
HWND hWnd;
DWORD dwPid;
BOOL isLogging;
DWORD FPSCount;
} DXWNDSTATUS;
extern DXWNDSTATUS DxWndStatus;

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2556cf08b2c38ff21834f13e3202ea976936eefd2b5b2da3ce11fc1d878f633a
size 259072
oid sha256:6afe9d2675ebd5d2e3c225a90c5c3e39bf5e18dfc718c5eef0776034a156b196
size 274432

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d0ef26bafd26df050cec17c30948cf719a91fd7eb300bdca5a069410c76f5928
size 482816
oid sha256:aa501d87ec71204d9b0f4da59283e201ea6e36f4545ab72fb5ad869b1815e27c
size 483328

865
build/dxwnd.ini Normal file
View File

@ -0,0 +1,865 @@
[target]
title0=7th Legion
path0=D:\Games\7th Legion\legion.exe
module0=
ver0=0
flag0=402653223
flagg0=2128
tflag0=269
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
title1=7th Legion Shareware
path1=D:\Games\7th Legion Shareware\legion.exe
module1=
ver1=0
flag1=134217779
flagg1=22608
tflag1=1
initx1=0
inity1=0
minx1=0
miny1=0
maxx1=0
maxy1=0
posx1=50
posy1=50
sizx1=800
sizy1=600
title2=Age of Empires
path2=D:\Games\Age of Empires\EMPIRES.EXE
module2=
ver2=0
flag2=546
flagg2=8192
tflag2=0
initx2=0
inity2=0
minx2=0
miny2=0
maxx2=0
maxy2=0
posx2=50
posy2=50
sizx2=800
sizy2=600
title3=Beasts and Bumpkins
path3=D:\Games\Beasts and Bumpkins\BEASTS.EXE
module3=
ver3=0
flag3=518
flagg3=0
tflag3=0
initx3=0
inity3=0
minx3=0
miny3=0
maxx3=0
maxy3=0
posx3=50
posy3=50
sizx3=800
sizy3=600
title4=Hyperblade
path4=D:\Games\Hyperblade\HYPERX.EXE
module4=
ver4=0
flag4=167805090
flagg4=20482
tflag4=2
initx4=0
inity4=0
minx4=0
miny4=0
maxx4=0
maxy4=0
posx4=50
posy4=50
sizx4=800
sizy4=600
title5=Independence Day
path5=D:\Games\Independence Day\ID4.EXE
module5=
ver5=1
flag5=167772195
flagg5=1
tflag5=2
initx5=0
inity5=0
minx5=0
miny5=0
maxx5=0
maxy5=0
posx5=50
posy5=50
sizx5=800
sizy5=600
title6=Jedi Outcast (single player)
path6=D:\Games\Jedi Knight II Jedi Outcast\GameData\jk2sp.exe
module6=OpenAL32.dll
ver6=0
flag6=2
flagg6=528
tflag6=2
initx6=0
inity6=0
minx6=0
miny6=0
maxx6=0
maxy6=0
posx6=50
posy6=50
sizx6=800
sizy6=600
title7=Port Royale 2
path7=D:\Games\Port Royale 2\pr2.cracked.exe
module7=
ver7=8
flag7=8396832
flagg7=0
tflag7=0
initx7=0
inity7=0
minx7=0
miny7=0
maxx7=0
maxy7=0
posx7=50
posy7=50
sizx7=1200
sizy7=900
title8=Silver GOG version (DirectX9)
path8=D:\Games\Silver.GOG\silver.exe
module8=
ver8=9
flag8=302006309
flagg8=0
tflag8=2
initx8=0
inity8=0
minx8=0
miny8=0
maxx8=0
maxy8=0
posx8=50
posy8=50
sizx8=800
sizy8=600
title9=The Longest Journey Demo
path9=D:\Games\The Longest Journey Demo\game.exe
module9=
ver9=7
flag9=0
flagg9=0
tflag9=0
initx9=0
inity9=0
minx9=0
miny9=0
maxx9=0
maxy9=0
posx9=50
posy9=50
sizx9=800
sizy9=600
title10=wa.exe
path10=D:\Games\Worms Armageddon\wa.exe
module10=
ver10=0
flag10=134217730
flagg10=0
tflag10=0
initx10=0
inity10=0
minx10=0
miny10=0
maxx10=0
maxy10=0
posx10=0
posy10=0
sizx10=0
sizy10=0
title11=Warlords III
path11=D:\Games\WARLORDS3\Darklord.exe
module11=
ver11=0
flag11=134218275
flagg11=0
tflag11=2
initx11=0
inity11=0
minx11=0
miny11=0
maxx11=0
maxy11=0
posx11=50
posy11=50
sizx11=640
sizy11=480
title12=Zeit.exe
path12=J:\Zeit.exe
module12=sdetup.dll
ver12=1
flag12=2
flagg12=128
tflag12=0
initx12=0
inity12=0
minx12=0
miny12=0
maxx12=0
maxy12=0
posx12=0
posy12=0
sizx12=800
sizy12=600
title13=Unreal
path13=D:\Games\Unreal\System\Unreal.exe
module13=
ver13=10
flag13=38
flagg13=0
tflag13=3
initx13=0
inity13=0
minx13=0
miny13=0
maxx13=0
maxy13=0
posx13=50
posy13=50
sizx13=800
sizy13=600
title14=Warcraft 2 Battlenet Edition
path14=D:\Games\Warcraft 2 Battlenet Edition\Warcraft II BNE.exe
module14=
ver14=0
flag14=268451874
flagg14=16
tflag14=1
initx14=0
inity14=0
minx14=0
miny14=0
maxx14=0
maxy14=0
posx14=50
posy14=50
sizx14=800
sizy14=600
title15=majesty.exe
path15=D:\Games\Majesty\majesty.exe
module15=
ver15=0
flag15=2
flagg15=0
tflag15=0
initx15=0
inity15=0
minx15=0
miny15=0
maxx15=0
maxy15=0
posx15=0
posy15=0
sizx15=800
sizy15=600
title16=America (Class RIP)
path16=D:\Games\America\america.exe
module16=
ver16=0
flag16=134230050
flagg16=0
tflag16=270
initx16=0
inity16=0
minx16=0
miny16=0
maxx16=0
maxy16=0
posx16=50
posy16=50
sizx16=800
sizy16=600
title17=Jedi Outcast
path17=D:\Games\Jedi Knight II Jedi Outcast\GameData\jk2sp.exe
module17=
ver17=0
flag17=0
flagg17=512
tflag17=2
initx17=0
inity17=0
minx17=0
miny17=0
maxx17=0
maxy17=0
posx17=50
posy17=50
sizx17=800
sizy17=600
title18=Incoming
path18=D:\Games\Incoming\incoming.exe
module18=
ver18=0
flag18=134217824
flagg18=0
tflag18=0
initx18=0
inity18=0
minx18=0
miny18=0
maxx18=0
maxy18=0
posx18=50
posy18=50
sizx18=800
sizy18=600
title19=Tonic Trouble
path19=D:\Games\Tonic Trouble\TonicTrouble.exe
module19=
ver19=1
flag19=134217760
flagg19=0
tflag19=0
initx19=0
inity19=0
minx19=0
miny19=0
maxx19=0
maxy19=0
posx19=50
posy19=50
sizx19=800
sizy19=600
title20=Halo
path20=D:\Games\Halo\halo.exe
module20=
ver20=9
flag20=536870912
flagg20=0
tflag20=2
initx20=0
inity20=0
minx20=0
miny20=0
maxx20=0
maxy20=0
posx20=50
posy20=50
sizx20=800
sizy20=600
title21=Inferno
path21=D:\Games\Inferno\FXLabs\Inferno\System\UW.exe
module21=
ver21=8
flag21=139266
flagg21=0
tflag21=3
initx21=0
inity21=0
minx21=0
miny21=0
maxx21=0
maxy21=0
posx21=50
posy21=50
sizx21=800
sizy21=600
title22=Noitu Love 2: Devolution
path22=?.tmp\stdrt.exe
module22=
ver22=0
flag22=679477282
flagg22=1
tflag22=2
initx22=0
inity22=0
minx22=0
miny22=0
maxx22=0
maxy22=0
posx22=50
posy22=50
sizx22=800
sizy22=600
title23=Indiana Jones and the Last Crusade
path23=D:\Games\Indiana Jones And The Last Crusade\Indiana Jones and the Last Crusade.exe
module23=
ver23=0
flag23=2
flagg23=512
tflag23=0
initx23=0
inity23=0
minx23=0
miny23=0
maxx23=0
maxy23=0
posx23=50
posy23=50
sizx23=800
sizy23=600
title24=Paperino Operazione Papero
path24=D:\Games\Paperino Operazione Papero\Donald.exe
module24=
ver24=1
flag24=0
flagg24=1
tflag24=2
initx24=0
inity24=0
minx24=0
miny24=0
maxx24=0
maxy24=0
posx24=50
posy24=50
sizx24=800
sizy24=600
title25=Secret Maryo Chronicles.exe
path25=D:\Games\Secret Maryo Chronicles\Secret Maryo Chronicles.exe
module25=
ver25=0
flag25=2
flagg25=512
tflag25=0
initx25=0
inity25=0
minx25=0
miny25=0
maxx25=0
maxy25=0
posx25=50
posy25=50
sizx25=800
sizy25=600
title26=WorldOfGoo.exe
path26=D:\Games\World Of Goo\WorldOfGoo.exe
module26=
ver26=0
flag26=514
flagg26=513
tflag26=2
initx26=0
inity26=0
minx26=0
miny26=0
maxx26=0
maxy26=0
posx26=50
posy26=50
sizx26=800
sizy26=600
title27=Moto Racer
path27=D:\Games\Moto Racer 1\Moto.exe
module27=
ver27=0
flag27=33562626
flagg27=32
tflag27=258
initx27=0
inity27=0
minx27=0
miny27=0
maxx27=0
maxy27=0
posx27=50
posy27=50
sizx27=800
sizy27=600
title28=WinKhaos.exe
path28=D:\Games\deo gratias\Deo_Gratias\WinKhaos.exe
module28=
ver28=0
flag28=262690
flagg28=0
tflag28=0
initx28=0
inity28=0
minx28=0
miny28=0
maxx28=0
maxy28=0
posx28=50
posy28=50
sizx28=800
sizy28=600
title29=Pax Imperia Eminent Domain
path29=D:\Games\Pax_Imperia_Eminent_Domain\Pax Imperia.exe
module29=
ver29=0
flag29=134236194
flagg29=0
tflag29=270
initx29=0
inity29=0
minx29=0
miny29=0
maxx29=0
maxy29=0
posx29=50
posy29=50
sizx29=800
sizy29=600
title30=lithtech.exe
path30=D:\Games\nolf\lithtech.exe
module30=d3d.ren
ver30=7
flag30=536870912
flagg30=0
tflag30=2
initx30=0
inity30=0
minx30=0
miny30=0
maxx30=0
maxy30=0
posx30=50
posy30=50
sizx30=800
sizy30=600
title31=Pong
path31=D:\Games\pong\pcpong.exe
module31=
ver31=0
flag31=0
flagg31=0
tflag31=0
initx31=0
inity31=0
minx31=0
miny31=0
maxx31=0
maxy31=0
posx31=50
posy31=50
sizx31=800
sizy31=600
title32=Farland Tactics 2 (KOR)
path32=D:\Games\Farland Tactics 2\FT2.exe
module32=
ver32=0
flag32=671351298
flagg32=0
tflag32=386
initx32=0
inity32=0
minx32=0
miny32=0
maxx32=0
maxy32=0
posx32=50
posy32=50
sizx32=800
sizy32=600
title33=Dungeon Keeper 2 (GOG)
path33=D:\Games\Dungeon Keeper 2 (GOG)\DKII.EXE
module33=
ver33=0
flag33=34
flagg33=0
tflag33=259
initx33=0
inity33=0
minx33=0
miny33=0
maxx33=0
maxy33=0
posx33=50
posy33=50
sizx33=800
sizy33=600
title34=daikatana.exe
path34=D:\Games\daikatana\daikatana.exe
module34=
ver34=10
flag34=34
flagg34=1
tflag34=0
initx34=0
inity34=0
minx34=0
miny34=0
maxx34=0
maxy34=0
posx34=50
posy34=50
sizx34=800
sizy34=600
title35=Battle Isle 4 the Andosia War
path35=D:\Games\Battle Isle 4 the Andosia War (2000)\Battle_Isle_4_Andosia_War\bitaw.exe
module35=
ver35=0
flag35=32
flagg35=80
tflag35=0
initx35=0
inity35=0
minx35=0
miny35=0
maxx35=0
maxy35=0
posx35=50
posy35=50
sizx35=800
sizy35=600
title36=dark secrets of africa
path36=D:\Games\dark secrets of africa\game.exe
module36=
ver36=0
flag36=134217762
flagg36=256
tflag36=3
initx36=0
inity36=0
minx36=0
miny36=0
maxx36=0
maxy36=0
posx36=50
posy36=50
sizx36=800
sizy36=600
title37=Serious Sam
path37=D:\Games\Serious Sam Demo\Bin\SeriousSam.exe
module37=
ver37=10
flag37=2
flagg37=1
tflag37=0
initx37=0
inity37=0
minx37=0
miny37=0
maxx37=0
maxy37=0
posx37=50
posy37=50
sizx37=800
sizy37=600
title38=Gunman Chronicles
path38=D:\Games\GunmanChronicles\gunman.exe
module38=
ver38=1
flag38=0
flagg38=0
tflag38=0
initx38=0
inity38=0
minx38=0
miny38=0
maxx38=0
maxy38=0
posx38=50
posy38=50
sizx38=800
sizy38=600
title39=The Grinch
path39=D:\Games\The_Grinch\The Grinch\bin\TheGrinch.exe
module39=
ver39=10
flag39=34
flagg39=0
tflag39=3
initx39=0
inity39=0
minx39=0
miny39=0
maxx39=0
maxy39=0
posx39=50
posy39=50
sizx39=800
sizy39=600
title40=DeathDrome
path40=D:\Games\DeathDrome\RUN\ddrome.exe
module40=
ver40=0
flag40=34
flagg40=0
tflag40=0
initx40=0
inity40=0
minx40=0
miny40=0
maxx40=0
maxy40=0
posx40=50
posy40=50
sizx40=800
sizy40=600
title41=Dominions
path41=D:\Games\dominions\Dominions\Dominions\dom.exe
module41=all3936.dll
ver41=1
flag41=679477762
flagg41=0
tflag41=387
initx41=0
inity41=0
minx41=0
miny41=0
maxx41=0
maxy41=0
posx41=50
posy41=50
sizx41=800
sizy41=600
title42=StarCraft
path42=D:\Games\Starcraft\StarCraft.exe
module42=
ver42=0
flag42=805847586
flagg42=24592
tflag42=1
initx42=0
inity42=0
minx42=0
miny42=0
maxx42=0
maxy42=0
posx42=50
posy42=50
sizx42=800
sizy42=600
title43=RailRoad Tycoon 2 Platinum
path43=D:\Games\RailRoadTycoon2Platinum\RT2_PLAT.EXE
module43=
ver43=0
flag43=134217762
flagg43=16
tflag43=0
initx43=0
inity43=0
minx43=0
miny43=0
maxx43=0
maxy43=0
posx43=50
posy43=50
sizx43=800
sizy43=600
title44=Total Soccer 2000 Demo
path44=D:\Games\Total Soccer 2000 Demo\soccerdx.exe
module44=
ver44=0
flag44=66
flagg44=20480
tflag44=3
initx44=0
inity44=0
minx44=0
miny44=0
maxx44=0
maxy44=0
posx44=50
posy44=50
sizx44=800
sizy44=600
title45=Baldurs Gate
path45=D:\Games\BaldursGate\BGMain2.exe
module45=
ver45=0
flag45=134548998
flagg45=16401
tflag45=3
initx45=0
inity45=0
minx45=0
miny45=0
maxx45=0
maxy45=0
posx45=50
posy45=50
sizx45=800
sizy45=600
title46=Total Soccer 2000 cracked
path46=D:\Games\Total Soccer 2000\SOCCERDX.cracked.EXE
module46=
ver46=1
flag46=32898
flagg46=20737
tflag46=0
initx46=0
inity46=0
minx46=0
miny46=0
maxx46=0
maxy46=0
posx46=50
posy46=50
sizx46=800
sizy46=600
title47=Dream Aquarium
path47=D:\Games\Dream Aquarium\Dream_Aquarium.scr
module47=
ver47=0
flag47=8388611
flagg47=32768
tflag47=3
initx47=0
inity47=0
minx47=0
miny47=0
maxx47=0
maxy47=0
posx47=50
posy47=50
sizx47=800
sizy47=600
maxfps0=0
maxfps1=20
maxfps2=50
maxfps3=0
maxfps4=40
maxfps5=0
maxfps6=0
maxfps7=0
maxfps8=0
maxfps9=0
maxfps10=0
maxfps11=0
maxfps12=0
maxfps13=0
maxfps14=0
maxfps15=0
maxfps16=0
maxfps17=0
maxfps18=0
maxfps19=0
maxfps20=0
maxfps21=0
maxfps22=0
maxfps23=0
maxfps24=0
maxfps25=0
maxfps26=0
maxfps27=0
maxfps28=0
maxfps29=0
maxfps30=0
maxfps31=0
maxfps32=0
maxfps33=0
maxfps34=0
maxfps35=0
maxfps36=0
maxfps37=0
maxfps38=0
maxfps39=0
maxfps40=0
maxfps41=0
maxfps42=200
maxfps43=0
maxfps44=100
maxfps45=0
maxfps46=200
maxfps47=0

View File

@ -1,306 +1,4 @@
V2.01.48:
Implemented proper handling of blitting from on-screen primary surfaces.
Now DxWnd supports un-emulated resized "The Sims" and "Warhammer 40K Rites of War".
Improved handling of attached backbuffers, even dynamically created ones.
Improved handling of GDI calls using HDC. "688I Hunter Killer" partially working. "Black Moon Chronicles" working.
V2.01.50:
Fixed bug on attached surface handling in non-emulated mode ("Alien vs. Predator" now supported)
Added Restore Screen Mode flag ("Army Men" OK)
V2.01.52:
Added handling of screen color setting to 16BPP color depth (partial).
Handling of games that check and require 16BPP color depth: "Resident Evil" now supported.
Fixed problem about "Turok 2", now supported
V2.01.53:
Major code reworking for emulation mode blitting rendering functions
Fixed GetPalette hook: "uprising" and "uprising 2" now supported
V2.01.54:
Fixed PeekMessage/GetMessage hook: "uprising" and "uprising 2" mouse handling now working
Implemented "Refresh on win resize" flag: useful for "uprising"
Fixed bug on new flags handling (not defaulted to OFF).
V2.01.56:
Implemented DirectDraw full proxy for method logging.
Big code reorganization: new files hddproxy.cpp hddproxy.h
fixed hooking to IDirectDrawSurface::GetCaps, IDirectDrawSurface::GetAttachedSurface, IDirectDrawSurface::DeleteAttachedSurface
fixed hooking of extDirectDrawCreateEx
improved logging (DumpSurfaceAttributes)
BackBuffer created only when necessary
V2.01.62:
Fully revised COM hooking method
Warlord series now fully working
Implemented 24BPP color depth (Delta Force)
Started handling of backbuffer array for flipping chain emulation (unfinished)
Added handling of DDERR_NOCLIPPINGLIST error
Added "Simulate 8BPP desktop" mode
Added preliminary implementation of "Automatic Emulation mode"
Syberia & Syberia 2 now working
GUI: fixed game list sort command
More games, more stable, less parameters....
V2.01.63:
Implemented INIT16BPP flag
hdinput.cpp: Fixed DirectInput GetMousePosition() call
u32lib.cpp: Fixed FixWindowFrame() to avoid messing with windows when not in fullscreen mode
More code for handling of dynamically created flipping chains (unfinished)
Hooked address for dynamically loaded ChangeDisplaySettingsA
New supported games: Monster Truck Madness 1 & 2, Mortal Kombat 4
V2.01.64:
Hooked & neutralized IDirect3DDevice8->Reset() method (preliminary implementation)
New supported games: Virtua Tennis, Crazy Taxi
V2.01.65:
Fixed handling of inherited backbuffers from previous and closed primary surface in no-emulated mode. Fixes "Warhammer 40k Rites of War" display problems.
Hook for DIRECTDRAW object creation through CoCreateInstance: new supported game "Axis & Allies"
V2.01.66/67
Added wrapping for BeginPaint() in "Map GDI HDC to Primary DC" mode, returning the virtual primary surface DC: makes "Deadlock 2" playable and stretchable.
Deleted the "Mouse to Screen Fix" option (useless).
Fixed bug in palette handling in desktop 16BPP color depth: Fixes colors in Age of Empires, Enemy Infestation.
V2.01.68
Fixed mouse message processing to alter ALL mouse events: This makes "Uprising 2" handling the mouse correctly.
Aligned the hooking logic in proxy mode to the new logic in normal mode.
Inserted the Diablo FIX: this is odd! Apparently, and perhaps for an internal game bug, the game works only if you create an extra surface after the primary one, maybe to insulate some memory corruption. As a matter of fact, doing so, you have an useless and unused extra surface, but old Diablo works pretty well.
Some unused code and comments cleanup.
GUI major changes:
- Added system tray handling
- Added control about maximum number of entries reached
- Added controls about allowed GUI commands
- Eliminated several useless commands
- cleanup of unused resources & code
- Added control to avoid multiple task activation
V2.01.68.FIX
Fixed a new bug that prevented execution of ANY multi-threaded game!!!!
V2.01.69
CORE:
Fixed bug: "GP500" is now working
Inserted "Keep cursor fixed" flag: "Necrodrome" is now working
Fixed window message handling for "Fix window style", "Prevent Maximize" and "Lock win properties" flags
Optimized IPC shared space, now the supported entries are 256 again.
Extra special key: Alt-F9 toggle window position locking
Extra special key: Alt-F10 toggle logging
Added "Blit using NULL rect spec." to handle some odd cases: makes "Railroad Tycoon II" working.
Fixed "Remap GDI Client rect" option: now sets the LPPAINTSTRUCT returned by BeginPaint. This makes "Railroad Tycoon II" working with no need of the emergency "Blit using NULL rect spec." flag.
Fixed dx_ScreenRefresh() internal routine: more accurate screen refreshing with "Refresh on win resize" mode.
Hooked InvalidateRect() to invalidate whole window: improves "Railroad Tycoon II" accuracy.
Some improvement in Diablo menu screens (character selection menu)
Some more logging and error detection.
Hook API code revision: HookSysLibs takes care of both HookSysLibsByAddr and HookSysLibsByName. No more similar routines to keep aligned!
GUI:
Added command line arguments: /I (start idle), /T (start into tray)
added save changes confirmation message.
V2.01.70
CORE:
Fixed "Force cursor clipping" in non emulated mode.
Added retry in timed out surface lock operation. Fixes sporadic "Ancient Evil" crash in emulated mode.
Entirely rewritten the "Pitch Bug Fix" mode: now it uses more a service surface in memory to write to, and then the surface is blitted to the emulated primary surface, using more performant dx blit routines and allowing for surface scaling.
GUI:
The "Pitch Bug Fix" has been renamed to "Emulate Primary Buffer".
V2.01.71
CORE:
Added hooking for MapWindowPoints: makes "Commandos 2" working.
fixed windows message handling procedure: avoid calling fake address in the form of 0xFFFFnnnn returned by GetWindowLong (necessary for "Commandos 2")
Improved DirectDrawCreate/DirectDrawCreateEx hooking: now auto mode should work in more cases
Fixed isFullScreen toggle: now it handles both entering and exiting from fullscreen state
Fixed PITCHBUGFIX handling
introduced experimental ONEPIXELFIX flag
Fixed GetSurfaceDesc returned values for primary surface: needed for "Commandos 2".
Fixed PeekMessage/GetMessage whnd handling.
V2.01.72
CORE:
Fixed a regression bug on child windows handling
Added hook for DeferWindowPos() - to test
cleaned up a DEBUG message
V2.01.73
CORE:
Completely revised the logging code.
Added Import table entry logging
Added separate flags for mouse/cursor events
Added timestamp log banner
Fixed crash caused by attempt to write log on error condition (e.g. trying to write on a game CD)
Fixed GetDesktopWindow() and SetCooperativeLevel() to handle operations on desktop window: GP500 and Microsoft Midtown Madness are now working better.
hanling COLOR operations on blitting/flip: nor Pacific General half-vertical-lines movies don't show the previous screen any more.
By default, don't alter the window properties. Some games will lack the frame border: the "Fix Window Frame Style" should be checked.
V2.01.74
added bidirectional info exchange between GUI & DLL: now GUI can show internal emulation status.
GUI:
Added DxWnd status to trayicon tooltip
Fixed "Kill" menu command logic to act on the specific & correct task
Fixed bug that prevented asking for save configuration when task were added / deleted / sorted.
Fixed bug that disaligned task name field when deleting a task in the list.
CORE:
Updated GetHookStatus() arguments & behaviour
Fixed double-typing bug when "Process Messages" option is set.
V2.01.75
added "Handle Exceptions" flag. Applied to IDIV and CLI opcodes (exceptions 0xc0000095 divide by zero and 0xc0000096 priviliged instruction): now legacy "SonicR" and "Resident Evil" are working.
fixed GetClientRect logic to handle desktop special case: this fixes "AfterLife".
revised VirtualScr Height & Width settings: now, they can't possibly be 0 ever, they're defaulted to 800x600.
fixed BlitError logging routine
added hooking to GDI32 palette API: CreatePalette, SelectPalette, RealizePalette. Fixed display for "Dementia".
fixed import table dump output: forwarderchain field is numeric
fixed a regression bug about the window style - now default style is successfully set to WS_OVERLAPPEDWINDOW (the windows default).
V2.01.76
added hook for MoveWindow API: fixed Lionheart positioning problem.
V2.01.77,78
added hook for GetSystemPaletteEntries - useless for now.....
fixed/improved several logs
fixed WS_EX_CONTROLPARENT exstyle windows handling: now "Diablo" works fine, and also Worms series shows some improvement.
added EnumDisplayModes hook with setting of emulated color depth. This makes "Grim Fandango" working with no need to set RGB565 encoding.
eliminated NULLRECTBLIT, TRANSPARENTALL and TRANSPARENTWIN handling, no longer useful
fixed bug in SetClipper handling for NULL lpddc: fixes "Gangsters" ingame screen.
added FIWPARENTWIN flag: fixes "Sid Meier's Golf" position and improves "Sleepwalker" behaviour
GUI:
game properties tab layout revised
eliminated useless options
View Status dialog
Recover desktop settings when changed on task kill or DxWnd exit
V2.01.79/80
fixed/improved some more log messages (fixed BltFast flags dump, added ROP dump, added ColorKey dump for blit operations).
fixed reverse blitting algorythm from 16/32BPP to palitezed 8BPP chosing a best matching index dinamically: that fixed several color problems in "Beasts & Bumpkins" and "Dink Smallwood".
code cleanup in GetDC hook function.
updated EnumDisplayModes hook function to avoid showing hi-res screen modes when PREVENTMAXIMIZE is set (useful?).
revised dxwFixWindowPos and AdjustWindowPos: code merged into CalculateWindowPos.
fixed bug in window positioning while toggling with ALT-F9.
V2.01.81
Eliminated useless "Reset PRIMARY surface" opt.
added 0xC0000094 exception code ("Ultim@te race pro" - untested)
added handling of fake backbuffer attached surfaces - should fix "Silver"
fixed missing hook to LoadLibrary & LoadLibraryEx - caused several oddities. Should allow more games be handled by default hook mode.
fixed some positioning logic in Fix Parent Window mode
fixed the "Video -> System surface on fail" behaviour: switch is tried not only on DDERR_OUTOFVIDEOMEMORY error condition, but also on DDERR_INVALIDPIXELFORMAT. This makes "The Sims" playable also in non-emulated mode.
V2.01.82
Project's folders reorganization, some better logging.
Fixed SetCooperativeLevel with NULL surface handler and "FixParent Window" option: makes Tomb Raider IV playable
V2.01.82
Fixed DDSURFACE::GetCaps adding DDSCAPS_FLIP capability in emulated mode. Makes "Funtracks" visible.
Eliminated useless "Use absolute coord" flag
fixed bug in Alt-F10 log toggle command
V2.01.83
Added "Blit from backbuffer" option - improves "The Sims"...
Eliminated useless "Automatic Emulation"
GUI: emulation modes (none, emulate buffer, emulate surface) are now mutually exclusive
minor fixes
V2.01.84/85/86
minor fixes on the GUI
fixed BackBuffer creation with an initial refcount=1 to simulate its initial reference by the frontbuffer. This makes "Monopoly 3D" working.
added "Suppress clipping" surface option: eliminates interference with primary surface blittin on "Monopoly 3D".
fixed bug in Alt-F10 log toggle command (I know I said that before....)
added logging status in status window (just to be sure the previous bug is FIXED!)
log fixes
experimental: PrimarySurface created with 1 backbuffer when no backbuffercount option is specified
fixed primary surface refcount in SetPalette, when a palette is attached to the primary surface
deleted the EXTRASURFACEFIX code prtion: now Diablo works without this trick, thanks to the proper refcount to avoid deleting a closed surface.
regression: Dungeon Keeper II no longer works.
Added sys libraries hooking to LoadLibrary and LoadLibraryEx hookers
fixed window coordinates in MoveWindow hooker
major: revised the sys libraries hooking mechanism. So far, nothing good happens, but ....
V2.01.87
new window option: "Modal style"
fixed dd::EnumDisplayModes hook with separate handling for dd interface 1 and 4
fixed handling of primary dd object (the one that owns the primary surface and the service objects). Makes Dungeon Keeper II playable again.
new games tested & working: eXpendable, Rally Championship 2000, Thief the Dark Project, In the Hunt, M1 Tank Platoon II, ...
V2.01.88
GUI: layout reorganization
new window option: "Keep aspect ratio" - to lock aspect ratio when resizing the game window
added "Limit available resources" option (void - to be implemented)
V2.01.89
new window option: "Force win resize" - experimental
revised GetDC reverse blitting algorithm - should now handle surfaces bigger than the primary (ref. Warlords III)
logging: added result of WM_NCHITTEST processing
added Alt-F8 toggle key for "Handle DC" option to speed up operations when accuracy can be sacrified
Direct3D preliminary hooks for display modes query
Directx9: hooked Reset method
fixed bug in ChangeDisplaySettings: now it saves current size also in emulated mode
v2.01.90
fully revised GetDC/ReleaseDC handling: Warlords III seems playable
revised mouse and clipping logic to fix some visibility and control problems in window resizing
project adapted and compiled with VS2008. Eliminated references to undefined ColorCorrectPalette API.
v2.01.91
Hyperblade fixes:
Wrapping of GDI PatBlt API to scale rect coordinates
fixing of wrong Blt destrect coordinates when blitting to primary surface: Hyperblade fails using the proper screen size 640x480 and uses an invalid 800x600 size.
again: revised GetDC/ReleaseDC handling to fix regression problems with other games
again: revised mouse and clipping logic to improve previous fixes. Now clipping mode is restored only after clicking on the window client area.
v2.01.92
Road Rash special edition:
several fixes in WS_CHLD windows handling: Child window process routine, MoveWindow and GetWindowPos hook routines.
fixed BIG window detection: now every BIG window (that is (0,0)-(ScreenX,ScreenY) in position) is detected and mapped on the main window coordinate system
fixed a log bug in extMoveWindow()
now "Road Rash" is fully playable, apart from the game movies that can't be resized and are correctly placed only with 640x480 window size.
known problem: the game window can be resized, but it returns back to the original size every time you get back to the menus.
loggin routine fix: now, if it can't open the logfile (ROADRASH.EXE stays on CD) tries to write on %TEMP% folder. Don't forget to clean it up!
GUI: added delete of %TEMP%\dxwnd.log file in "Clear all logs" command.
v2.01.93
Emergency special edition:
fully revised the GDI ClipCursor and GetClipCursor handling, to ensure that the cursor stays confined within the clipping region: now Emergency crashes no more when you attempt to move the cursor close to the window borders.
Introduced a "tolerance" interval to avoid unreacheable clip/window borders and difficulty to scroll the game area.
fixed "Keep aspect ratio" option to take in account the inner client area instead of the outer window size.
v2.01.94
fixed d3d EnumAdapterModes proxy hook that has different prototype for version 8 and 9: apps calling this method crash no more.
fixed GDI GetDC/GetWindowDC hooks: Tipically, you'd better prevent the app to access the desktop window, where it can retrieve info about the actual screen size and color depth, so the call is redirected to the main window. But, in certain circumstances, the window handle may become invalid, so that it's better to let the desktop hanlde pass. The fix makes "Halo: Combat Evolved" working.
fixed CreateWindowEx hook, preventing the creation of zero-sized windows. Makes "Star Wars Jedi Knight II: Jedi Outcast" at least visible...
added "Disable setting gamma ramp" flag: avoid changing screen brightness on the whole desktop surface, as "Star Wars Jedi Knight II: Jedi Outcast" may do.
v2.01.95
very preliminary support for OpenGL games. See "Star Wars Jedi Knight II: Jedi Outcast"....
v2.01.96/97
better support for OpenGL games (still preliminary...): Hexen II, American McGee Alice, ...
fixed "Simulate 8/16BPP desktop" flag: "Moto Racer" is now working on 32BPP desktop.
various improvement and log changes.
v2.01.98/99
wrapped SendMessage to revert fix to X,Y mouse coordinates: fixes "Pax Imparia Eminent Domain" right mouse problem
added dxwnd version and flags configuration to log for better diagnostic
updated the manual (at last!)
v2.1.100
double project definition, for vs2005 and vs2008
fixed PeekMessage logic to avoid message regeneration
added "none/OpenGL" emulation mode to avoid interfering with ddraw/d3d when unnecessary
added preliminary DirectDrawEnumerate hooking - just proxed so far
fixed crash when DirectDrawCreate/Ex was called with DDCREATE_HARDWAREONLY or DDCREATE_EMULATIONONLY flags
some code cleanup
fixed WM_NCHITEST handling to translate mouse coordinates properly: now "7th Legion" finally works.
fixed LoadLibrary logic to ignore full path when searching for specific libraries
fixes CreateWindowEx hook to handle the special case of "big" windows created with CW_USEDEFAULT position or bigger size: the fixes improve "The Grinch" window handling.
experimental changes/fixes to message processing
v2.2.00/01
major code rewriting - introduced dxwCore class
preliminary FPS handling: Limit, Skip & Count with configurable delay
Hide Multi Monitor configuration flag - used for "Dream Acquarium" on multimonitor PC.

File diff suppressed because it is too large Load Diff

View File

@ -110,7 +110,6 @@ extern BOOL WINAPI extGetDeviceGammaRamp(HDC, LPVOID);
extern LRESULT WINAPI extSendMessage(HWND, UINT, WPARAM, LPARAM);
extern HANDLE hTraceMutex;
char *gsModules;
GetDeviceCaps_Type pGetDeviceCaps;
GetCursorPos_Type pGetCursorPos=0;
@ -195,8 +194,8 @@ static char *FlagNames[32]={
static char *Flag2Names[32]={
"RECOVERSCREENMODE", "REFRESHONRESIZE", "BACKBUFATTACH", "MODALSTYLE",
"KEEPASPECTRATIO", "INIT8BPP", "FORCEWINRESIZE", "INIT16BPP",
"KEEPCURSORFIXED", "DISABLEGAMMARAMP", "DIFFERENTIALMOUSE", "",
"", "", "", "",
"KEEPCURSORFIXED", "DISABLEGAMMARAMP", "DIFFERENTIALMOUSE", "FIXNCHITTEST",
"LIMITFPS", "SKIPFPS", "SHOWFPS", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
@ -777,7 +776,6 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
POINT cursor;
LRESULT ret;
ret=(*pDefWindowProc)(hwnd, message, wparam, lparam);
OutTrace("ret=%x\n", ret);
if (ret==HTCLIENT) {
cursor.x=LOWORD(lparam);
cursor.y=HIWORD(lparam);
@ -1342,21 +1340,15 @@ int HookInit(TARGETMAP *target, HWND hwnd)
"DirectX7", "DirectX8", "DirectX9", "None\\OpenGL", "", "", ""
};
dxw.dwFlags1 = target->flags;
dxw.dwFlags2 = target->flags2;
dxw.dwTFlags = target->tflags;
gsModules = target->module;
dxw.InitTarget(target);
// v2.1.75: is it correct to set hWnd here?
dxw.SethWnd(hwnd);
dxw.hParentWnd=GetParent(hwnd);
dxw.hChildWnd=hwnd;
// bounds control
if(target->dxversion<0) target->dxversion=0;
if(target->dxversion>10) target->dxversion=10;
OutTraceD("HookInit: path=\"%s\" module=\"%s\" dxversion=%s hWnd=%x dxw.hParentWnd=%x\n",
target->path, target->module, dxversions[target->dxversion], hwnd, dxw.hParentWnd);
target->path, target->module, dxversions[dxw.dwTargetDDVersion], hwnd, dxw.hParentWnd);
if (IsDebug){
DWORD dwStyle, dwExStyle;
dwStyle=GetWindowLong(dxw.GethWnd(), GWL_STYLE);
@ -1372,7 +1364,7 @@ int HookInit(TARGETMAP *target, HWND hwnd)
if (dxw.dwTFlags & OUTIMPORTTABLE) DumpImportTable(NULL);
if (dxw.dwTFlags & DXPROXED){
HookDDProxy(target->dxversion);
HookDDProxy(dxw.dwTargetDDVersion);
return 0;
}
@ -1383,11 +1375,11 @@ int HookInit(TARGETMAP *target, HWND hwnd)
HookSysLibsInit(); // this just once...
HookModule(NULL, target->dxversion);
sModule=strtok(gsModules," ");
HookModule(NULL, dxw.dwTargetDDVersion);
sModule=strtok(dxw.gsModules," ");
while (sModule) {
OutTraceD("HookInit: hooking additional module=%s\n", sModule);
HookModule(sModule, target->dxversion);
HookModule(sModule, dxw.dwTargetDDVersion);
sModule=strtok(NULL," ");
}

View File

@ -22,6 +22,19 @@ dxwCore::~dxwCore()
{
}
void dxwCore::InitTarget(TARGETMAP *target)
{
dwFlags1 = target->flags;
dwFlags2 = target->flags2;
dwTFlags = target->tflags;
gsModules = target->module;
MaxFPS = target->MaxFPS;
// bounds control
dwTargetDDVersion = target->dxversion;
if(dwTargetDDVersion<0) dwTargetDDVersion=0;
if(dwTargetDDVersion>10) dwTargetDDVersion=10;
}
RECT dxwCore::GetScreenRect()
{
static RECT Screen;
@ -173,6 +186,16 @@ RECT dxwCore::MapWindowRect(LPRECT lpRect)
return RetRect;
}
void dxwCore::MapRect(int *nXDest, int *nYDest, int *nWDest, int *nHDest)
{
RECT client;
(*pGetClientRect)(hWnd, &client);
*nXDest= *nXDest * client.right / dwScreenWidth;
*nYDest= *nYDest * client.bottom / dwScreenHeight;
*nWDest= *nWDest * client.right / dwScreenWidth;
*nHDest= *nHDest * client.bottom / dwScreenHeight;
}
void dxwCore::ScreenRefresh(void)
{
// optimization: don't blit too often!
@ -197,4 +220,60 @@ void dxwCore::ScreenRefresh(void)
(*pInvalidateRect)(hWnd, NULL, FALSE);
t = tn;
}
static void ShowFPS()
{
static DWORD time = 0xFFFFFFFF;
static DWORD FPSCount = 0;
DWORD tmp;
tmp = GetTickCount();
if((tmp - time) > 1000) {
// log fps count
OutTrace("FPSCount=%d\n", FPSCount);
// show fps count on status win
DxWndStatus.FPSCount = FPSCount;
SetHookStatus(&DxWndStatus);
// reset
FPSCount=0;
time = tmp;
}
else {
FPSCount++;
}
}
static void LimitFrameCount(int delay)
{
static DWORD time = 0xFFFFFFFF;
extern void do_slow(int);
DWORD tmp;
tmp = GetTickCount();
if((tmp - time) > (DWORD)delay) {
time = tmp;
}
else
Sleep(tmp - time);
//do_sslow(tmp - time);
}
static BOOL SkipFrameCount(int delay)
{
static DWORD time = 0xFFFFFFFF;
DWORD tmp;
tmp = GetTickCount();
if((tmp - time) > (DWORD)delay) {
time = tmp;
return FALSE;
}
return TRUE;
}
BOOL dxwCore::HandleFPS()
{
if(dwFlags2 & SHOWFPS) ShowFPS();
if(dwFlags2 & LIMITFPS) LimitFrameCount(dxw.MaxFPS);
if(dwFlags2 & SKIPFPS) if(SkipFrameCount(dxw.MaxFPS)) return TRUE;
return FALSE;
}

View File

@ -9,6 +9,7 @@ public:
// Operations
public: // methods
void InitTarget(TARGETMAP *);
void SethWnd(HWND hwnd) {hWnd=hwnd;}
HWND GethWnd(void) {return hWnd;}
void SetScreenSize(void) {dwScreenWidth=800; dwScreenHeight=600;}
@ -16,6 +17,7 @@ public: // methods
DWORD GetScreenWidth(void) {return dwScreenWidth;}
DWORD GetScreenHeight(void) {return dwScreenHeight;}
RECT GetScreenRect(void);
void MapRect(int *, int *, int *, int *);
void SetFullScreen(BOOL fs) {FullScreen=fs;}
BOOL IsFullScreen() {return FullScreen;}
POINT FixCursorPos(POINT);
@ -26,6 +28,7 @@ public: // methods
RECT MapWindowRect(LPRECT lpRect);
RECT MapWindowRect(void);
void ScreenRefresh(void);
BOOL HandleFPS();
public: // simple data variables
DDPIXELFORMAT ActualPixelFormat;
@ -33,6 +36,7 @@ public: // simple data variables
DWORD dwPrimarySurfaceCaps;
DWORD dwBackBufferCount;
DWORD dwDDVersion;
DWORD dwTargetDDVersion;
DWORD dwMaxDDVersion;
DWORD dwFlags1;
DWORD dwFlags2;
@ -41,6 +45,8 @@ public: // simple data variables
HWND hChildWnd;
BOOL bActive;
BOOL bDInputAbs;
DWORD MaxFPS;
char *gsModules;
// Implementation
protected:

View File

@ -23,7 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdio.h>
#include "dxwnd.h"
#define VERSION "2.02.00"
#define VERSION "2.02.01"
LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam);

Binary file not shown.

View File

@ -245,6 +245,10 @@
/>
</FileConfiguration>
</File>
<File
RelativePath=".\dxwcore.cpp"
>
</File>
<File
RelativePath="dxwnd.cpp"
>
@ -358,6 +362,10 @@
RelativePath="dxhook.h"
>
</File>
<File
RelativePath=".\dxwcore.hpp"
>
</File>
<File
RelativePath="..\Include\dxwnd.h"
>

View File

@ -5,6 +5,7 @@
typedef void* (WINAPI *Direct3DCreate8_Type)(UINT);
typedef void* (WINAPI *Direct3DCreate9_Type)(UINT);
typedef UINT (WINAPI *GetAdapterCount_Type)(void *);
typedef HRESULT (WINAPI *CreateDevice_Type)(void *, UINT, D3DDEVTYPE, HWND, DWORD, void *, void **);
typedef HRESULT (WINAPI *EnumAdapterModes8_Type)(void *, UINT, UINT, D3DDISPLAYMODE *);
typedef HRESULT (WINAPI *EnumAdapterModes9_Type)(void *, UINT, D3DFORMAT ,UINT, D3DDISPLAYMODE *);
@ -13,6 +14,7 @@ typedef HRESULT (WINAPI *GetDisplayMode_Type)(void *, D3DDISPLAYMODE *);
void* WINAPI extDirect3DCreate8(UINT);
void* WINAPI extDirect3DCreate9(UINT);
UINT WINAPI extGetAdapterCount(void *);
HRESULT WINAPI extCreateDevice(void *, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS *, void **);
HRESULT WINAPI extEnumAdapterModes8(void *, UINT, UINT , D3DDISPLAYMODE *);
HRESULT WINAPI extEnumAdapterModes9(void *, UINT, D3DFORMAT, UINT , D3DDISPLAYMODE *);
@ -23,6 +25,7 @@ extern char *ExplainDDError(DWORD);
Direct3DCreate8_Type pDirect3DCreate8 = 0;
Direct3DCreate9_Type pDirect3DCreate9 = 0;
GetAdapterCount_Type pGetAdapterCount;
CreateDevice_Type pCreateDevice;
EnumAdapterModes8_Type pEnumAdapterModes8;
EnumAdapterModes9_Type pEnumAdapterModes9;
@ -74,6 +77,7 @@ void* WINAPI extDirect3DCreate8(UINT sdkversion)
if(!lpd3d) return 0;
//OutTrace("DEBUG: Hooking lpd3d=%x\n", lpd3d);
//OutTrace("DEBUG: Hooking %x -> %x as CreateDevice(D8)\n", (void *)(*(DWORD *)lpd3d + 60), extCreateDevice);
SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount, (void **)&pGetAdapterCount, "GetAdapterCount(D8)");
SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes8, (void **)&pEnumAdapterModes8, "EnumAdapterModes(D8)");
SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode, (void **)&pGetAdapterDisplayMode, "GetAdapterDisplayMode(D8)");
SetHook((void *)(*(DWORD *)lpd3d + 60), extCreateDevice, (void **)&pCreateDevice, "CreateDevice(D8)");
@ -90,6 +94,7 @@ void* WINAPI extDirect3DCreate9(UINT sdkversion)
dwD3DVersion = 9;
lpd3d = (*pDirect3DCreate9)(sdkversion);
if(!lpd3d) return 0;
SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount, (void **)&pGetAdapterCount, "GetAdapterCount(D9)");
SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes9, (void **)&pEnumAdapterModes9, "EnumAdapterModes(D9)");
SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode, (void **)&pGetAdapterDisplayMode, "GetAdapterDisplayMode(D9)");
SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice, (void **)&pCreateDevice, "CreateDevice(D9)");
@ -100,6 +105,18 @@ void* WINAPI extDirect3DCreate9(UINT sdkversion)
return lpd3d;
}
UINT WINAPI extGetAdapterCount(void *lpd3d)
{
UINT res;
res=(*pGetAdapterCount)(lpd3d);
OutTraceD("GetAdapterCount: count=%d\n", res);
if(dxw.dwFlags2 & HIDEMULTIMONITOR) {
OutTraceD("GetAdapterCount: HIDEMULTIMONITOR count=1\n");
res=1;
}
return res;
}
HRESULT WINAPI extReset(void *pd3dd, D3DPRESENT_PARAMETERS* pPresentationParameters)
{
OutTraceD("DEBUG: neutralizing pd3dd->Reset()\n");

View File

@ -2438,6 +2438,8 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
// Blit to primary surface
if(dxw.HandleFPS()) return DD_OK;
destrect=dxw.MapWindowRect(lpdestrect);
if(!(dxw.dwFlags1 & (EMULATESURFACE|EMULATEBUFFER))){
@ -2908,7 +2910,7 @@ HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFAC
OutTrace("lpvoid=%x\n", lprect);
}
if(dxw.dwFlags1 & SLOWDOWN) do_slow(2);
//if(dxw.dwFlags1 & SLOWDOWN) do_slow(2);
if (!IsPrim){
res=(*pUnlock)(lpdds, lprect);
@ -2920,6 +2922,9 @@ HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFAC
res=(*pUnlock)(lpdds, lprect);
if (res) OutTraceE("Unlock ERROR res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__);
// unlock on primary surface .....
if (dxw.HandleFPS()) return DD_OK;
if (dxw.dwFlags1 & (EMULATESURFACE|EMULATEBUFFER)){
DDSURFACEDESC2 ddsd;
LPDIRECTDRAWSURFACE lpDDSSource;

View File

@ -1951,18 +1951,13 @@ BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
OutTraceD("GDI.BitBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d dwRop=%x(%s)\n",
hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop, ExplainROP(dwRop));
#ifdef UNSTRETCH
res=(*pBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
if(!res) OutTraceE("GDI.BitBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
#else
if (dxw.HandleFPS()) return TRUE;
if (dxw.IsFullScreen()){
RECT client;
int nWDest, nHDest;
(*pGetClientRect)(dxw.GethWnd(), &client);
nXDest= nXDest * client.right / dxw.GetScreenWidth();
nYDest= nYDest * client.bottom / dxw.GetScreenHeight();
nWDest= nWidth * client.right / dxw.GetScreenWidth();
nHDest= nHeight * client.bottom / dxw.GetScreenHeight();
nWDest= nWidth;
nHDest= nHeight;
dxw.MapRect(&nXDest, &nYDest, &nWDest, &nHDest);
res=(*pStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
}
else {
@ -1970,7 +1965,6 @@ BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
}
if(!res) OutTraceE("GDI.BitBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
#endif
return res;
}
@ -1981,18 +1975,11 @@ BOOL WINAPI extGDIPatBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
OutTraceD("GDI.PatBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d dwRop=%x(%s)\n",
hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop, ExplainROP(dwRop));
#ifdef UNSTRETCH
res=(*pPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop);
if(!res) OutTraceE("GDI.PatBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
#else
if (dxw.HandleFPS()) return TRUE;
if (dxw.IsFullScreen()){
RECT client;
int nWDest, nHDest;
(*pGetClientRect)(dxw.GethWnd(), &client);
nXDest= nXDest * client.right / dxw.GetScreenWidth();
nYDest= nYDest * client.bottom / dxw.GetScreenHeight();
nWDest= nWidth * client.right / dxw.GetScreenWidth();
nHDest= nHeight * client.bottom / dxw.GetScreenHeight();
dxw.MapRect(&nXDest, &nYDest, &nWDest, &nHDest);
res=(*pPatBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, dwRop);
}
else {
@ -2000,7 +1987,6 @@ BOOL WINAPI extGDIPatBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
}
if(!res) OutTraceE("GDI.PatBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
#endif
return res;
}
@ -2012,6 +1998,8 @@ BOOL WINAPI extGDIStretchBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, in
OutTraceD("GDI.StretchBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d nWSrc=%d nHSrc=%d dwRop=%x(%s)\n",
hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop, ExplainROP(dwRop));
if (dxw.HandleFPS()) return TRUE;
res=(*pStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);
if(!res) OutTraceE("GDI.StretchBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
return res;

View File

@ -48,6 +48,7 @@
#define IDC_MINY 1019
#define IDC_MAXX 1020
#define IDC_MAXY 1021
#define IDC_MAXFPS 1022
#define IDC_MODULE 1023
#define IDC_SNOOZE 1023
#define IDC_KILL 1024
@ -104,6 +105,10 @@
#define IDC_FORCEWINRESIZE 1072
#define IDC_DISABLEGAMMARAMP 1073
#define IDC_FIXNCHITTEST 1074
#define IDC_LIMITFPS 1075
#define IDC_SKIPFPS 1076
#define IDC_SHOWFPS 1077
#define IDC_HIDEMULTIMONITOR 1078
#define ID_MODIFY 32771
#define ID_DELETE 32772
#define ID_ADD 32773
@ -140,7 +145,7 @@
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 150
#define _APS_NEXT_COMMAND_VALUE 32811
#define _APS_NEXT_CONTROL_VALUE 1032
#define _APS_NEXT_CONTROL_VALUE 1078
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -58,12 +58,14 @@ void CStatusDialog::OnTimer(UINT_PTR nIDEvent)
"DxWnd %s\nHook status: %s\n"
"Running \"%s\"\nScreen = (%dx%d) %dBPP\n"
"FullScreen = %s\nDX version = %d\n"
"Logging = %s",
"Logging = %s\n"
"FPS = %d",
DllVersion, Status,
pTitles[DxWndStatus.TaskIdx].title,
DxWndStatus.Width, DxWndStatus.Height, DxWndStatus.ColorDepth,
DxWndStatus.IsFullScreen ? "Yes":"No", DxWndStatus.DXVersion,
DxWndStatus.isLogging?"ON":"OFF");
DxWndStatus.isLogging?"ON":"OFF",
DxWndStatus.FPSCount);
}
else
sprintf_s(sMsg, 1024, "DxWnd %s\nHook status: %s", DllVersion, Status);

View File

@ -48,17 +48,13 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_HideHwCursor = FALSE;
m_EnableClipping = FALSE;
m_CursorClipping = FALSE;
// m_MouseToScreen = FALSE;
m_VideoToSystemMem = FALSE;
m_FixTextOut = FALSE;
m_KeepCursorWithin = FALSE;
m_KeepCursorFixed = FALSE;
//m_NullRectBlit = FALSE;
m_UseRGB565 = FALSE;
m_SuppressDXErrors = FALSE;
// m_EmulateModeX = FALSE;
m_PreventMaximize = FALSE;
//m_ResetPrimary = FALSE;
m_ClientRemapping = FALSE;
m_MapGDIToPrimary = FALSE;
m_LockWinPos = FALSE;
@ -67,6 +63,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_ModalStyle = FALSE;
m_KeepAspectRatio = FALSE;
m_ForceWinResize = FALSE;
m_HideMultiMonitor = FALSE;
m_HookChildWin = FALSE;
m_MessageProc = FALSE;
m_FixNCHITTEST = FALSE;
@ -76,6 +73,9 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_Init16BPP = FALSE;
m_BackBufAttach = FALSE;
m_HandleAltF4 = FALSE;
m_LimitFPS = FALSE;
m_SkipFPS = FALSE;
m_ShowFPS = FALSE;
m_InitX = 0;
m_InitY = 0;
m_MaxX = 0;
@ -86,6 +86,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_PosY = 0;
m_SizX = 800;
m_SizY = 600;
m_MaxFPS = 0;
//}}AFX_DATA_INIT
}
@ -141,6 +142,7 @@ void CTargetDlg::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_MODALSTYLE, m_ModalStyle);
DDX_Check(pDX, IDC_KEEPASPECTRATIO, m_KeepAspectRatio);
DDX_Check(pDX, IDC_FORCEWINRESIZE, m_ForceWinResize);
DDX_Check(pDX, IDC_HIDEMULTIMONITOR, m_HideMultiMonitor);
DDX_Check(pDX, IDC_HOOKCHILDWIN, m_HookChildWin);
DDX_Check(pDX, IDC_MESSAGEPROC, m_MessageProc);
DDX_Check(pDX, IDC_FIXNCHITTEST, m_FixNCHITTEST);
@ -150,6 +152,9 @@ void CTargetDlg::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_INIT16BPP, m_Init16BPP);
DDX_Check(pDX, IDC_BACKBUFATTACH, m_BackBufAttach);
DDX_Check(pDX, IDC_HANDLEALTF4, m_HandleAltF4);
DDX_Check(pDX, IDC_LIMITFPS, m_LimitFPS);
DDX_Check(pDX, IDC_SKIPFPS, m_SkipFPS);
DDX_Check(pDX, IDC_SHOWFPS, m_ShowFPS);
DDX_Text(pDX, IDC_INITX, m_InitX);
DDX_Text(pDX, IDC_INITY, m_InitY);
DDX_Text(pDX, IDC_MAXX, m_MaxX);
@ -160,6 +165,7 @@ void CTargetDlg::DoDataExchange(CDataExchange* pDX)
DDX_Text(pDX, IDC_POSY, m_PosY);
DDX_Text(pDX, IDC_SIZX, m_SizX);
DDX_Text(pDX, IDC_SIZY, m_SizY);
DDX_Text(pDX, IDC_MAXFPS, m_MaxFPS);
//}}AFX_DATA_MAP
}

View File

@ -66,6 +66,7 @@ public:
BOOL m_ModalStyle;
BOOL m_KeepAspectRatio;
BOOL m_ForceWinResize;
BOOL m_HideMultiMonitor;
BOOL m_HookChildWin;
BOOL m_MessageProc;
BOOL m_FixNCHITTEST;
@ -76,6 +77,9 @@ public:
BOOL m_BackBufAttach;
BOOL m_HandleAltF4;
BOOL m_HandleExceptions;
BOOL m_SkipFPS;
BOOL m_LimitFPS;
BOOL m_ShowFPS;
int m_InitX;
int m_InitY;
int m_MaxX;
@ -86,6 +90,7 @@ public:
int m_PosY;
int m_SizX;
int m_SizY;
int m_MaxFPS;
//}}AFX_DATA

Binary file not shown.

View File

@ -255,7 +255,7 @@ BEGIN
CONTROL "Force cursor clipping",IDC_CLIPCURSOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,306,34,107,9
CONTROL "Remap GDI Client Rect",IDC_CLIENTREMAPPING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,84,102,9
CONTROL "Intercept Alt-F4 key",IDC_HANDLEALTF4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,306,154,93,10
GROUPBOX "Windows handling",IDC_STATIC,425,3,120,147
GROUPBOX "Windows handling",IDC_STATIC,425,3,120,156
CONTROL "Lock win coordinates",IDC_LOCKWINPOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,433,34,98,9
CONTROL "Hook CHILD windows",IDC_HOOKCHILDWIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,433,54,98,9
LTEXT "Window initial position && size",IDC_STATIC,12,195,98,8
@ -293,6 +293,14 @@ BEGIN
CONTROL "Force win resize",IDC_FORCEWINRESIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,433,134,98,9
CONTROL "Disable setting gamma ramp",IDC_DISABLEGAMMARAMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,124,102,9
CONTROL "fix WM_NCHITTEST",IDC_FIXNCHITTEST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,306,84,98,9
CONTROL "Limit",IDC_LIMITFPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,154,28,9
EDITTEXT IDC_MAXFPS,258,157,26,12,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_RIGHT
CONTROL "Skip",IDC_SKIPFPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,164,27,9
LTEXT "delay (msec)",IDC_STATIC,214,159,43,8
GROUPBOX "Frame per Second",IDC_STATIC,172,142,121,48
CONTROL "Show FPS",IDC_SHOWFPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,176,52,9
GROUPBOX "",IDC_STATIC,178,150,110,24
CONTROL "Hide multi-monitor config.",IDC_HIDEMULTIMONITOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,433,144,98,9
END

Binary file not shown.

View File

@ -147,6 +147,8 @@ void CDxwndhostView::SaveConfigFile()
WritePrivateProfileString("target", key, val, InitPath);
sprintf_s(key, sizeof(key), "sizy%i", i);
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].sizy);
sprintf_s(key, sizeof(key), "maxfps%i", i);
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].MaxFPS);
WritePrivateProfileString("target", key, val, InitPath);
}
for(; i < MAXTARGETS; i ++){
@ -180,6 +182,8 @@ void CDxwndhostView::SaveConfigFile()
WritePrivateProfileString("target", key, 0, InitPath);
sprintf_s(key, sizeof(key), "sizy%i", i);
WritePrivateProfileString("target", key, 0, InitPath);
sprintf_s(key, sizeof(key), "maxfps%i", i);
WritePrivateProfileString("target", key, 0, InitPath);
}
this->isUpdated=FALSE;
@ -284,6 +288,8 @@ void CDxwndhostView::OnInitialUpdate()
TargetMaps[i].sizx = GetPrivateProfileInt("target", key, 0, InitPath);
sprintf_s(key, sizeof(key), "sizy%i", i);
TargetMaps[i].sizy = GetPrivateProfileInt("target", key, 0, InitPath);
sprintf_s(key, sizeof(key), "maxfps%i", i);
TargetMaps[i].MaxFPS = GetPrivateProfileInt("target", key, 0, InitPath);
listitem.mask = LVIF_TEXT;
listitem.iItem = i;
listitem.iSubItem = 0;
@ -390,6 +396,7 @@ void CDxwndhostView::OnModify()
dlg.m_ModalStyle = TargetMaps[i].flags2 & MODALSTYLE ? 1 : 0;
dlg.m_KeepAspectRatio = TargetMaps[i].flags2 & KEEPASPECTRATIO ? 1 : 0;
dlg.m_ForceWinResize = TargetMaps[i].flags2 & FORCEWINRESIZE ? 1 : 0;
dlg.m_HideMultiMonitor = TargetMaps[i].flags2 & HIDEMULTIMONITOR ? 1 : 0;
dlg.m_HookChildWin = TargetMaps[i].flags & HOOKCHILDWIN ? 1 : 0;
dlg.m_MessageProc = TargetMaps[i].flags & MESSAGEPROC ? 1 : 0;
dlg.m_FixNCHITTEST = TargetMaps[i].flags2 & FIXNCHITTEST ? 1 : 0;
@ -399,6 +406,9 @@ void CDxwndhostView::OnModify()
dlg.m_Init16BPP = TargetMaps[i].flags2 & INIT16BPP ? 1 : 0;
dlg.m_BackBufAttach = TargetMaps[i].flags2 & BACKBUFATTACH ? 1 : 0;
dlg.m_HandleAltF4 = TargetMaps[i].flags & HANDLEALTF4 ? 1 : 0;
dlg.m_LimitFPS = TargetMaps[i].flags2 & LIMITFPS ? 1 : 0;
dlg.m_SkipFPS = TargetMaps[i].flags2 & SKIPFPS ? 1 : 0;
dlg.m_ShowFPS = TargetMaps[i].flags2 & SHOWFPS ? 1 : 0;
dlg.m_InitX = TargetMaps[i].initx;
dlg.m_InitY = TargetMaps[i].inity;
dlg.m_MinX = TargetMaps[i].minx;
@ -409,6 +419,7 @@ void CDxwndhostView::OnModify()
dlg.m_PosY = TargetMaps[i].posy;
dlg.m_SizX = TargetMaps[i].sizx;
dlg.m_SizY = TargetMaps[i].sizy;
dlg.m_MaxFPS = TargetMaps[i].MaxFPS;
if(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){
strcpy_s(TargetMaps[i].path, sizeof(TargetMaps[i].path), dlg.m_FilePath);
strcpy_s(TargetMaps[i].module, sizeof(TargetMaps[i].module), dlg.m_Module);
@ -474,6 +485,7 @@ void CDxwndhostView::OnModify()
if(dlg.m_ModalStyle) TargetMaps[i].flags2 |= MODALSTYLE;
if(dlg.m_KeepAspectRatio) TargetMaps[i].flags2 |= KEEPASPECTRATIO;
if(dlg.m_ForceWinResize) TargetMaps[i].flags2 |= FORCEWINRESIZE;
if(dlg.m_HideMultiMonitor) TargetMaps[i].flags2 |= HIDEMULTIMONITOR;
if(dlg.m_HookChildWin) TargetMaps[i].flags |= HOOKCHILDWIN;
if(dlg.m_MessageProc) TargetMaps[i].flags |= MESSAGEPROC;
if(dlg.m_FixNCHITTEST) TargetMaps[i].flags2 |= FIXNCHITTEST;
@ -483,6 +495,9 @@ void CDxwndhostView::OnModify()
if(dlg.m_Init16BPP) TargetMaps[i].flags2 |= INIT16BPP;
if(dlg.m_BackBufAttach) TargetMaps[i].flags2 |= BACKBUFATTACH;
if(dlg.m_HandleAltF4) TargetMaps[i].flags |= HANDLEALTF4;
if(dlg.m_LimitFPS) TargetMaps[i].flags2 |= LIMITFPS;
if(dlg.m_SkipFPS) TargetMaps[i].flags2 |= SKIPFPS;
if(dlg.m_ShowFPS) TargetMaps[i].flags2 |= SHOWFPS;
TargetMaps[i].initx = dlg.m_InitX;
TargetMaps[i].inity = dlg.m_InitY;
TargetMaps[i].minx = dlg.m_MinX;
@ -493,6 +508,7 @@ void CDxwndhostView::OnModify()
TargetMaps[i].posy = dlg.m_PosY;
TargetMaps[i].sizx = dlg.m_SizX;
TargetMaps[i].sizy = dlg.m_SizY;
TargetMaps[i].MaxFPS = dlg.m_MaxFPS;
strcpy_s(TargetMaps[i].module, sizeof(TargetMaps[i].module), dlg.m_Module);
strcpy_s(TitleMaps[i].title, sizeof(TitleMaps[i].title), dlg.m_Title);
CListCtrl& listctrl = GetListCtrl();
@ -750,6 +766,7 @@ void CDxwndhostView::OnAdd()
if(dlg.m_ModalStyle) TargetMaps[i].flags2 |= MODALSTYLE;
if(dlg.m_KeepAspectRatio) TargetMaps[i].flags2 |= KEEPASPECTRATIO;
if(dlg.m_ForceWinResize) TargetMaps[i].flags2 |= FORCEWINRESIZE;
if(dlg.m_HideMultiMonitor) TargetMaps[i].flags2 |= HIDEMULTIMONITOR;
if(dlg.m_HookChildWin) TargetMaps[i].flags |= HOOKCHILDWIN;
if(dlg.m_MessageProc) TargetMaps[i].flags |= MESSAGEPROC;
if(dlg.m_FixNCHITTEST) TargetMaps[i].flags2 |= FIXNCHITTEST;
@ -759,6 +776,9 @@ void CDxwndhostView::OnAdd()
if(dlg.m_Init16BPP) TargetMaps[i].flags2 |= INIT16BPP;
if(dlg.m_BackBufAttach) TargetMaps[i].flags2 |= BACKBUFATTACH;
if(dlg.m_HandleAltF4) TargetMaps[i].flags |= HANDLEALTF4;
if(dlg.m_LimitFPS) TargetMaps[i].flags2 |= LIMITFPS;
if(dlg.m_SkipFPS) TargetMaps[i].flags2 |= SKIPFPS;
if(dlg.m_ShowFPS) TargetMaps[i].flags2 |= SHOWFPS;
TargetMaps[i].initx = dlg.m_InitX;
TargetMaps[i].inity = dlg.m_InitY;
TargetMaps[i].minx = dlg.m_MinX;
@ -769,6 +789,7 @@ void CDxwndhostView::OnAdd()
TargetMaps[i].posy = dlg.m_PosY;
TargetMaps[i].sizx = dlg.m_SizX;
TargetMaps[i].sizy = dlg.m_SizY;
TargetMaps[i].MaxFPS = dlg.m_MaxFPS;
CListCtrl& listctrl = GetListCtrl();
listitem.mask = LVIF_TEXT;
listitem.iItem = i;

View File

@ -1,8 +1,8 @@
del dll\dxwnd.vcproj.*.user
del dll\dxwnd.ncb
del dll\dxwnd.*.user
del dll\dxwnd.*.ncb
del host\dxwndhost.vcproj.*.user
del host\dxwndhost.ncb
del host\dxwndhost.*.user
del host\dxwndhost.*.ncb
copy Release\dxwnd.exe build
copy Release\dxwnd.dll build