From 19c4ab0ca5eee4ec8174d89c34a418555237bf94 Mon Sep 17 00:00:00 2001 From: gho tik Date: Sat, 1 Jun 2013 12:16:52 -0400 Subject: [PATCH] v2_02_01_src Former-commit-id: 5da75c18cbf38a2091dedba429ac98550346a175 --- Include/dxwnd.h | 6 + build/dxwnd.dll | 4 +- build/dxwnd.exe | 4 +- build/dxwnd.ini | 865 ++++++++++ build/readme-relnotes.txt | 310 +--- debug/dxwnd.ini | 3197 ------------------------------------- dll/dxhook.cpp | 24 +- dll/dxwcore.cpp | 79 + dll/dxwcore.hpp | 6 + dll/dxwnd.cpp | 2 +- dll/dxwnd.ws2005.suo | Bin 22016 -> 61680 bytes dll/dxwnd.ws2005.vcproj | 8 + dll/hd3d.cpp | 17 + dll/hddraw.cpp | 7 +- dll/syslibs.cpp | 32 +- host/Resource.h | 7 +- host/StatusDialog.cpp | 6 +- host/TargetDlg.cpp | 14 +- host/TargetDlg.h | 5 + host/dxwndhost.aps | Bin 138464 -> 139148 bytes host/dxwndhost.rc | 10 +- host/dxwndhost.vs2005.suo | Bin 14848 -> 19968 bytes host/dxwndhostView.cpp | 21 + makebuild.bat | 8 +- 24 files changed, 1073 insertions(+), 3559 deletions(-) create mode 100644 build/dxwnd.ini delete mode 100644 debug/dxwnd.ini diff --git a/Include/dxwnd.h b/Include/dxwnd.h index a8b1e98..3c3677e 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -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; diff --git a/build/dxwnd.dll b/build/dxwnd.dll index ee52589..2dd90e1 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2556cf08b2c38ff21834f13e3202ea976936eefd2b5b2da3ce11fc1d878f633a -size 259072 +oid sha256:6afe9d2675ebd5d2e3c225a90c5c3e39bf5e18dfc718c5eef0776034a156b196 +size 274432 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index f07818d..2f7831a 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0ef26bafd26df050cec17c30948cf719a91fd7eb300bdca5a069410c76f5928 -size 482816 +oid sha256:aa501d87ec71204d9b0f4da59283e201ea6e36f4545ab72fb5ad869b1815e27c +size 483328 diff --git a/build/dxwnd.ini b/build/dxwnd.ini new file mode 100644 index 0000000..e232de6 --- /dev/null +++ b/build/dxwnd.ini @@ -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 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index fe88274..1c28312 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -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. diff --git a/debug/dxwnd.ini b/debug/dxwnd.ini deleted file mode 100644 index 61ec2b7..0000000 --- a/debug/dxwnd.ini +++ /dev/null @@ -1,3197 +0,0 @@ -[target] -title0=1602 A.D. -path0=C:\Games\1602 A.D\1602.exe -module0= -ver0=0 -flag0=679608354 -flagg0=0 -tflag0=0 -initx0=0 -inity0=0 -minx0=0 -miny0=0 -maxx0=0 -maxy0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -title1=7th Legion -path1=D:\Games\7th_Legion\LEGION.EXE -module1= -ver1=0 -flag1=402669607 -flagg1=2064 -tflag1=13 -initx1=0 -inity1=0 -minx1=0 -miny1=0 -maxx1=0 -maxy1=0 -posx1=50 -posy1=50 -sizx1=800 -sizy1=600 -title2=A10 Cuba -path2=D:\Games\A10\A10Cuba.exe -module2= -ver2=0 -flag2=34 -flagg2=0 -tflag2=0 -initx2=0 -inity2=0 -minx2=0 -miny2=0 -maxx2=0 -maxy2=0 -posx2=50 -posy2=50 -sizx2=800 -sizy2=600 -title3=Achtung Spitfire -path3=C:\Games\Achtung Spitfire\ASP95.EXE -module3= -ver3=0 -flag3=536870946 -flagg3=0 -tflag3=70 -initx3=0 -inity3=0 -minx3=0 -miny3=0 -maxx3=0 -maxy3=0 -posx3=50 -posy3=50 -sizx3=800 -sizy3=600 -title4=Actua Soccer 3 -path4=C:\Games\ActuaSoccer3\ActuaSoccer3\Soccer3.exe -module4= -ver4=0 -flag4=671088928 -flagg4=256 -tflag4=0 -initx4=0 -inity4=0 -minx4=0 -miny4=0 -maxx4=0 -maxy4=0 -posx4=50 -posy4=50 -sizx4=800 -sizy4=600 -title5=AfterLife -path5=d:\Games\ALIFE\ALIFE.EXE -module5= -ver5=1 -flag5=134217762 -flagg5=32 -tflag5=3 -initx5=0 -inity5=0 -minx5=0 -miny5=0 -maxx5=0 -maxy5=0 -posx5=50 -posy5=50 -sizx5=800 -sizy5=600 -title6=Age of Empires -path6=D:\Games\Age of Empires\EMPIRES.EXE -module6= -ver6=0 -flag6=268436006 -flagg6=16 -tflag6=3 -initx6=0 -inity6=0 -minx6=0 -miny6=0 -maxx6=0 -maxy6=0 -posx6=50 -posy6=50 -sizx6=800 -sizy6=600 -title7=Airline Tycoon Evolution -path7=C:\Games\Airline.Tycoon.Evolution.UV.Carlows\AT.EXE -module7= -ver7=0 -flag7=32 -flagg7=0 -tflag7=2 -initx7=0 -inity7=0 -minx7=0 -miny7=0 -maxx7=0 -maxy7=0 -posx7=50 -posy7=50 -sizx7=800 -sizy7=600 -title8=Alien Cabal 95 -path8=C:\Games\Alien_cabal\ACabal95.exe -module8= -ver8=0 -flag8=67108896 -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=Alien vs. Predator -path9=C:\Games\Alien vs Predator\AvP.exe -module9= -ver9=0 -flag9=8224 -flagg9=0 -tflag9=130 -initx9=0 -inity9=0 -minx9=0 -miny9=0 -maxx9=0 -maxy9=0 -posx9=50 -posy9=50 -sizx9=800 -sizy9=600 -title10=Aliens Nations Demo -path10=C:\Games\aademo\Bin\AA.exe -module10= -ver10=0 -flag10=134217762 -flagg10=0 -tflag10=0 -initx10=0 -inity10=0 -minx10=0 -miny10=0 -maxx10=0 -maxy10=0 -posx10=0 -posy10=0 -sizx10=800 -sizy10=600 -title11=America -path11=D:\Games\America\america.exe -module11= -ver11=0 -flag11=134234150 -flagg11=16 -tflag11=0 -initx11=0 -inity11=0 -minx11=0 -miny11=0 -maxx11=0 -maxy11=0 -posx11=50 -posy11=50 -sizx11=800 -sizy11=600 -title12=Ancient Evil -path12=C:\Games\Ancient Evil\RPG.EXE -module12=DDW16.DLL -ver12=1 -flag12=-2013249497 -flagg12=0 -tflag12=2 -initx12=0 -inity12=0 -minx12=0 -miny12=0 -maxx12=0 -maxy12=0 -posx12=50 -posy12=50 -sizx12=800 -sizy12=600 -title13=Ancient Evil Demo -path13=C:\Games\Ancient Evil Curse of the Snake Cult\aecsc-demo.exe -module13= -ver13=1 -flag13=134242336 -flagg13=0 -tflag13=0 -initx13=0 -inity13=0 -minx13=0 -miny13=0 -maxx13=0 -maxy13=0 -posx13=50 -posy13=50 -sizx13=800 -sizy13=600 -title14=Armymen -path14=C:\Games\armymen\Armymen.exe -module14= -ver14=0 -flag14=134218274 -flagg14=1 -tflag14=0 -initx14=0 -inity14=0 -minx14=0 -miny14=0 -maxx14=0 -maxy14=0 -posx14=50 -posy14=50 -sizx14=800 -sizy14=600 -title15=ArmyMen 2 -path15=C:\Games\army2\ArmyMen2.exe -module15= -ver15=0 -flag15=402653730 -flagg15=0 -tflag15=0 -initx15=0 -inity15=0 -minx15=0 -miny15=0 -maxx15=0 -maxy15=0 -posx15=50 -posy15=50 -sizx15=800 -sizy15=600 -title16=Atomic Bomberman -path16=C:\Games\Atomic Bomberman\BM95.EXE -module16= -ver16=0 -flag16=2 -flagg16=0 -tflag16=0 -initx16=0 -inity16=0 -minx16=0 -miny16=0 -maxx16=0 -maxy16=0 -posx16=50 -posy16=50 -sizx16=800 -sizy16=600 -title17=Axis & Allies Iron Blitz Edition -path17=C:\Games\Axis & Allies Iron Blitz Edition\Axis & Allies\AxisAllies.exe -module17= -ver17=0 -flag17=-2147483614 -flagg17=0 -tflag17=0 -initx17=0 -inity17=0 -minx17=0 -miny17=0 -maxx17=0 -maxy17=0 -posx17=50 -posy17=50 -sizx17=800 -sizy17=600 -title18=Baldies -path18=C:\Games\Baldies for Win95\baldies.exe -module18= -ver18=0 -flag18=537010210 -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=Battle Arena Toshinden 2 (BAD!!) -path19=C:\Games\Battle Arena Toshinden 2\tsd2\T2.EXE -module19= -ver19=1 -flag19=8388640 -flagg19=0 -tflag19=258 -initx19=0 -inity19=0 -minx19=0 -miny19=0 -maxx19=0 -maxy19=0 -posx19=50 -posy19=50 -sizx19=800 -sizy19=600 -title20=Beasts & Bumpkins -path20=C:\Games\Beasts and Bumpkins\BEASTS.EXE -module20= -ver20=0 -flag20=2105890 -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=Beats of Rage -path21=C:\Games\BOR\BeatsOfRage.exe -module21= -ver21=0 -flag21=537002018 -flagg21=0 -tflag21=0 -initx21=0 -inity21=0 -minx21=0 -miny21=0 -maxx21=0 -maxy21=0 -posx21=50 -posy21=50 -sizx21=800 -sizy21=600 -title22=Beyond Good & Evil Demo -path22=C:\Games\Beyond Good & Evil\BGE.exe -module22= -ver22=0 -flag22=0 -flagg22=0 -tflag22=0 -initx22=0 -inity22=0 -minx22=0 -miny22=0 -maxx22=0 -maxy22=0 -posx22=50 -posy22=50 -sizx22=800 -sizy22=600 -title23=Black Moon Lune Noire -path23=C:\Games\Black Moon\Lune noire\Engine.exe -module23= -ver23=0 -flag23=262179 -flagg23=0 -tflag23=0 -initx23=0 -inity23=0 -minx23=0 -miny23=0 -maxx23=0 -maxy23=0 -posx23=50 -posy23=50 -sizx23=800 -sizy23=600 -title24=Blood Omen Legacy of Kain -path24=C:\Games\Blood Omen\KAIN.EXE -module24= -ver24=0 -flag24=49190 -flagg24=0 -tflag24=0 -initx24=0 -inity24=0 -minx24=0 -miny24=0 -maxx24=0 -maxy24=0 -posx24=50 -posy24=50 -sizx24=800 -sizy24=600 -title25=Bonkheads -path25=C:\Games\Bonkheads\Bonkheads.exe -module25= -ver25=0 -flag25=262690 -flagg25=16 -tflag25=78 -initx25=0 -inity25=0 -minx25=0 -miny25=0 -maxx25=0 -maxy25=0 -posx25=50 -posy25=50 -sizx25=800 -sizy25=600 -title26=Bubble Bobble 2 -path26=C:\Games\bubble2\BOBO2.EXE -module26= -ver26=0 -flag26=34 -flagg26=0 -tflag26=0 -initx26=0 -inity26=0 -minx26=0 -miny26=0 -maxx26=0 -maxy26=0 -posx26=50 -posy26=50 -sizx26=800 -sizy26=600 -title27=Bug! -path27=C:\Games\Bug\BUG!.EXE -module27= -ver27=0 -flag27=134225954 -flagg27=32 -tflag27=2 -initx27=0 -inity27=0 -minx27=0 -miny27=0 -maxx27=0 -maxy27=0 -posx27=0 -posy27=0 -sizx27=800 -sizy27=600 -title28=Caesar III -path28=C:\Games\Caesar III\c3.exe -module28= -ver28=0 -flag28=-2147475422 -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=Championship Manager 99-00 -path29=C:\Games\CM9900\cm9900.exe -module29= -ver29=0 -flag29=10306 -flagg29=0 -tflag29=0 -initx29=0 -inity29=0 -minx29=0 -miny29=0 -maxx29=0 -maxy29=0 -posx29=50 -posy29=50 -sizx29=800 -sizy29=600 -title30=Civilization Call to Power -path30=C:\Games\civctp\Civilization_Call_To_Power\ctp_program\ctp\civctp.exe -module30= -ver30=0 -flag30=545267746 -flagg30=0 -tflag30=0 -initx30=0 -inity30=0 -minx30=0 -miny30=0 -maxx30=0 -maxy30=0 -posx30=50 -posy30=50 -sizx30=800 -sizy30=600 -title31=Claw -path31=C:\Games\claw\clawexe.exe -module31= -ver31=0 -flag31=24610 -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=Commando's Behind Enemy Lines Demo -path32=C:\Games\Commando's Behind Enemy Lines Demo\COMANDOS\Comandos.exe -module32= -ver32=0 -flag32=1744838944 -flagg32=0 -tflag32=64 -initx32=0 -inity32=0 -minx32=0 -miny32=0 -maxx32=0 -maxy32=0 -posx32=50 -posy32=50 -sizx32=800 -sizy32=600 -title33=Commandos II: Men of Courage -path33=C:\Games\Commandos II\comm2.exe -module33= -ver33=0 -flag33=-1207951008 -flagg33=0 -tflag33=0 -initx33=0 -inity33=0 -minx33=0 -miny33=0 -maxx33=0 -maxy33=0 -posx33=50 -posy33=50 -sizx33=800 -sizy33=600 -title34=Crazy Taxy -path34=C:\Games\Crazy_Taxi\Crazy Taxi PC Version\crazy_taxi_pc.exe -module34= -ver34=8 -flag34=536870945 -flagg34=0 -tflag34=0 -initx34=0 -inity34=0 -minx34=0 -miny34=0 -maxx34=0 -maxy34=0 -posx34=50 -posy34=50 -sizx34=800 -sizy34=600 -title35=Crush! Deluxe -path35=C:\Games\Crush! Deluxe\CRUSHD.EXE -module35= -ver35=0 -flag35=134492706 -flagg35=0 -tflag35=0 -initx35=0 -inity35=0 -minx35=0 -miny35=0 -maxx35=0 -maxy35=0 -posx35=50 -posy35=50 -sizx35=800 -sizy35=600 -title36=Cybermercs -path36=C:\Games\cybermercs\cybermercs.exe -module36= -ver36=0 -flag36=134234146 -flagg36=16 -tflag36=0 -initx36=0 -inity36=0 -minx36=0 -miny36=0 -maxx36=0 -maxy36=0 -posx36=50 -posy36=50 -sizx36=800 -sizy36=600 -title37=Darius Gaiden -path37=C:\Games\Darius_gaiden\DARIUS.EXE -module37= -ver37=0 -flag37=536870946 -flagg37=0 -tflag37=0 -initx37=0 -inity37=0 -minx37=0 -miny37=0 -maxx37=0 -maxy37=0 -posx37=50 -posy37=50 -sizx37=800 -sizy37=600 -title38=Dark Colony the Council Wars -path38=C:\Games\darkcolony_council\dc\DC16.EXE -module38= -ver38=0 -flag38=268435462 -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=Darkstone -path39=C:\Games\darkstone\Darkstone.exe -module39= -ver39=0 -flag39=134234148 -flagg39=0 -tflag39=0 -initx39=0 -inity39=0 -minx39=0 -miny39=0 -maxx39=0 -maxy39=0 -posx39=50 -posy39=50 -sizx39=800 -sizy39=600 -title40=Dave Mirra Freestyle BMX Demo -path40=C:\Games\Dave Mirra Freestyle BMX\NgBMXDemo.exe -module40= -ver40=0 -flag40=8224 -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=Daytona USA Deluxe -path41=C:\Games\Daytona USA Deluxe\DAYTONA USA Deluxe.exe -module41= -ver41=0 -flag41=402661410 -flagg41=0 -tflag41=0 -initx41=0 -inity41=0 -minx41=0 -miny41=0 -maxx41=0 -maxy41=0 -posx41=50 -posy41=50 -sizx41=800 -sizy41=600 -title42=Deadlock 2 -path42=C:\Games\deadlock2\DEADLOCK.EXE -module42= -ver42=0 -flag42=-2012995550 -flagg42=0 -tflag42=0 -initx42=0 -inity42=0 -minx42=0 -miny42=0 -maxx42=0 -maxy42=0 -posx42=50 -posy42=50 -sizx42=800 -sizy42=600 -title43=Deeper Dungeons 95 -path43=C:\Games\Keeper95\Deeper95.exe -module43= -ver43=0 -flag43=268460070 -flagg43=0 -tflag43=0 -initx43=0 -inity43=0 -minx43=0 -miny43=0 -maxx43=0 -maxy43=0 -posx43=50 -posy43=50 -sizx43=800 -sizy43=600 -title44=Delta Force -path44=C:\Games\Delta Force\Df.exe -module44= -ver44=0 -flag44=34 -flagg44=0 -tflag44=0 -initx44=0 -inity44=0 -minx44=0 -miny44=0 -maxx44=0 -maxy44=0 -posx44=50 -posy44=50 -sizx44=800 -sizy44=600 -title45=Dementia -path45=C:\Games\dementia\program\CRUX.EXE -h -module45= -ver45=0 -flag45=536887330 -flagg45=0 -tflag45=2 -initx45=0 -inity45=0 -minx45=0 -miny45=0 -maxx45=0 -maxy45=0 -posx45=50 -posy45=50 -sizx45=800 -sizy45=600 -title46=Dethkarz -path46=D:\Games\DethKarz\Dethkarz.exe -module46= -ver46=0 -flag46=0 -flagg46=0 -tflag46=0 -initx46=0 -inity46=0 -minx46=0 -miny46=0 -maxx46=0 -maxy46=0 -posx46=50 -posy46=50 -sizx46=800 -sizy46=600 -title47=Devil Inside -path47=C:\Games\Devil Inside\Devil.exe -module47= -ver47=0 -flag47=32 -flagg47=0 -tflag47=0 -initx47=0 -inity47=0 -minx47=0 -miny47=0 -maxx47=0 -maxy47=0 -posx47=50 -posy47=50 -sizx47=800 -sizy47=600 -title48=Diablo -path48=D:\Games\Diablo\Diablo.exe -module48= -ver48=1 -flag48=134234150 -flagg48=16 -tflag48=3 -initx48=0 -inity48=0 -minx48=0 -miny48=0 -maxx48=0 -maxy48=0 -posx48=50 -posy48=50 -sizx48=800 -sizy48=600 -title49=Dink Smallwood (BAD) -path49=C:\Games\Dink SmallWood\Dink.exe -module49= -ver49=0 -flag49=546 -flagg49=0 -tflag49=258 -initx49=0 -inity49=0 -minx49=0 -miny49=0 -maxx49=0 -maxy49=0 -posx49=50 -posy49=50 -sizx49=800 -sizy49=600 -title50=Drakan -path50=C:\Games\Drakan\drakan.exe -module50= -ver50=0 -flag50=536887328 -flagg50=0 -tflag50=0 -initx50=0 -inity50=0 -minx50=0 -miny50=0 -maxx50=0 -maxy50=0 -posx50=50 -posy50=50 -sizx50=800 -sizy50=600 -title51=Dungeon Keeper 95 -path51=D:\Games\Keeper95\KEEPER95.EXE -module51= -ver51=0 -flag51=24614 -flagg51=0 -tflag51=64 -initx51=0 -inity51=0 -minx51=0 -miny51=0 -maxx51=0 -maxy51=0 -posx51=50 -posy51=50 -sizx51=800 -sizy51=600 -title52=Dungeon Keeper II -path52=C:\Games\Dungeon Keeper II\DKII.exe -module52= -ver52=0 -flag52=34 -flagg52=0 -tflag52=82 -initx52=0 -inity52=0 -minx52=0 -miny52=0 -maxx52=0 -maxy52=0 -posx52=50 -posy52=50 -sizx52=800 -sizy52=600 -title53=Emergency Fighters for life -path53=D:\Games\Emergency\EMERGY.EXE -module53= -ver53=0 -flag53=134283811 -flagg53=18 -tflag53=3 -initx53=0 -inity53=0 -minx53=0 -miny53=0 -maxx53=0 -maxy53=0 -posx53=50 -posy53=50 -sizx53=800 -sizy53=600 -title54=Enemy Infestation -path54=C:\Games\Enemy Infestation (1998)\Ei.exe -module54= -ver54=0 -flag54=38 -flagg54=0 -tflag54=0 -initx54=0 -inity54=0 -minx54=0 -miny54=0 -maxx54=0 -maxy54=0 -posx54=50 -posy54=50 -sizx54=800 -sizy54=600 -title55=Evil Genius -path55=D:\Games\Evil Genius\ReleaseExe\EvilGenius_Cracked.exe -module55= -ver55=9 -flag55=2053 -flagg55=80 -tflag55=0 -initx55=0 -inity55=0 -minx55=0 -miny55=0 -maxx55=0 -maxy55=0 -posx55=50 -posy55=50 -sizx55=800 -sizy55=600 -title56=Expendable -path56=C:\Games\eXpendable\go.exe -nocputest -module56= -ver56=0 -flag56=402653280 -flagg56=1 -tflag56=2 -initx56=0 -inity56=0 -minx56=0 -miny56=0 -maxx56=0 -maxy56=0 -posx56=50 -posy56=50 -sizx56=800 -sizy56=600 -title57=Fallen Heaven (BAD) -path57=C:\Games\falhaven\Exe\FALLEN.EXE -module57= -ver57=0 -flag57=679485962 -flagg57=32 -tflag57=0 -initx57=0 -inity57=0 -minx57=0 -miny57=0 -maxx57=0 -maxy57=0 -posx57=0 -posy57=0 -sizx57=800 -sizy57=600 -title58=Fallout -path58=D:\Games\Fallout\FALLOUTW.EXE -module58= -ver58=1 -flag58=134217734 -flagg58=16 -tflag58=0 -initx58=0 -inity58=0 -minx58=0 -miny58=0 -maxx58=0 -maxy58=0 -posx58=50 -posy58=50 -sizx58=800 -sizy58=600 -title59=FreakOut -path59=C:\Games\Freak Out - Extreme Freeride\FreakOut.exe -module59= -ver59=9 -flag59=0 -flagg59=0 -tflag59=2 -initx59=0 -inity59=0 -minx59=0 -miny59=0 -maxx59=0 -maxy59=0 -posx59=50 -posy59=50 -sizx59=800 -sizy59=600 -title60=Funtracks -path60=C:\Games\Funtracks\Fun_win.exe -module60= -ver60=1 -flag60=2 -flagg60=0 -tflag60=258 -initx60=0 -inity60=0 -minx60=0 -miny60=0 -maxx60=0 -maxy60=0 -posx60=50 -posy60=50 -sizx60=800 -sizy60=600 -title61=Galapagos -path61=C:\Games\Galapagos\GALA.EXE -module61= -ver61=0 -flag61=134217760 -flagg61=0 -tflag61=0 -initx61=0 -inity61=0 -minx61=0 -miny61=0 -maxx61=0 -maxy61=0 -posx61=50 -posy61=50 -sizx61=800 -sizy61=600 -title62=Gangsters -path62=C:\Games\Gangsters\gangsters.exe -module62= -ver62=0 -flag62=134217762 -flagg62=0 -tflag62=2 -initx62=0 -inity62=0 -minx62=0 -miny62=0 -maxx62=0 -maxy62=0 -posx62=100 -posy62=100 -sizx62=800 -sizy62=600 -title63=GeneRally -path63=C:\Games\generally105\GeneRally.exe -module63= -ver63=0 -flag63=34 -flagg63=0 -tflag63=0 -initx63=0 -inity63=0 -minx63=0 -miny63=0 -maxx63=0 -maxy63=0 -posx63=50 -posy63=50 -sizx63=800 -sizy63=600 -title64=Get Medieval -path64=C:\Games\Get Medieval\MEDIEVAL.EXE -module64= -ver64=0 -flag64=34 -flagg64=2 -tflag64=0 -initx64=0 -inity64=0 -minx64=0 -miny64=0 -maxx64=0 -maxy64=0 -posx64=0 -posy64=0 -sizx64=800 -sizy64=600 -title65=Gift -path65=C:\Games\Gift\Gift.exe -module65= -ver65=0 -flag65=4196384 -flagg65=0 -tflag65=34 -initx65=0 -inity65=0 -minx65=0 -miny65=0 -maxx65=0 -maxy65=0 -posx65=0 -posy65=0 -sizx65=0 -sizy65=0 -title66=Golden Age of Racing -path66=C:\Games\Golden Age of Racing\GAOR.exe -module66= -ver66=0 -flag66=34 -flagg66=0 -tflag66=0 -initx66=0 -inity66=0 -minx66=0 -miny66=0 -maxx66=0 -maxy66=0 -posx66=50 -posy66=50 -sizx66=800 -sizy66=600 -title67=Gp500 for Win2K -path67=C:\Games\gp500\gp500_win2k.exe -module67= -ver67=1 -flag67=545677860 -flagg67=0 -tflag67=2 -initx67=0 -inity67=0 -minx67=0 -miny67=0 -maxx67=0 -maxy67=0 -posx67=50 -posy67=50 -sizx67=800 -sizy67=600 -title68=G-Police -path68=C:\Games\gpolice\GPOLICE.EXE -module68= -ver68=0 -flag68=67125286 -flagg68=0 -tflag68=2 -initx68=0 -inity68=0 -minx68=0 -miny68=0 -maxx68=0 -maxy68=0 -posx68=50 -posy68=50 -sizx68=800 -sizy68=600 -title69=Grand Prix Legends -path69=C:\Games\grand prix legends\gpl\gpl.exe -module69= -ver69=7 -flag69=134217760 -flagg69=4 -tflag69=0 -initx69=0 -inity69=0 -minx69=0 -miny69=0 -maxx69=0 -maxy69=0 -posx69=50 -posy69=50 -sizx69=0 -sizy69=0 -title70=Grim Fandango Demo -path70=C:\Games\GrimWebDemo\grimdemo.exe -module70= -ver70=0 -flag70=34 -flagg70=0 -tflag70=258 -initx70=0 -inity70=0 -minx70=0 -miny70=0 -maxx70=0 -maxy70=0 -posx70=50 -posy70=50 -sizx70=800 -sizy70=600 -title71=Heart of Darkness -path71=C:\Games\Heart_of_Darkness\HODWin32.exe -module71= -ver71=0 -flag71=8226 -flagg71=0 -tflag71=0 -initx71=0 -inity71=0 -minx71=0 -miny71=0 -maxx71=0 -maxy71=0 -posx71=50 -posy71=50 -sizx71=800 -sizy71=600 -title72=Heavy Metal FAKK 2 -path72=C:\Games\Heavy Metal - FAKK2\fakk2.exe -module72= -ver72=0 -flag72=33554464 -flagg72=64 -tflag72=2 -initx72=0 -inity72=0 -minx72=0 -miny72=0 -maxx72=0 -maxy72=0 -posx72=50 -posy72=50 -sizx72=800 -sizy72=600 -title73=HellCopter -path73=C:\Games\hellcop\HCopter.exe -module73= -ver73=0 -flag73=-2013249500 -flagg73=256 -tflag73=0 -initx73=0 -inity73=0 -minx73=0 -miny73=0 -maxx73=0 -maxy73=0 -posx73=50 -posy73=50 -sizx73=800 -sizy73=600 -title74=Heroes of Might & Magic III Demo -path74=C:\Games\Heroes III Demo\h3demo.exe -module74= -ver74=1 -flag74=134234146 -flagg74=0 -tflag74=2 -initx74=0 -inity74=0 -minx74=0 -miny74=0 -maxx74=0 -maxy74=0 -posx74=50 -posy74=50 -sizx74=800 -sizy74=600 -title75=hover -path75=C:\Games\hover\hoverX.exe -module75= -ver75=0 -flag75=8224 -flagg75=0 -tflag75=0 -initx75=0 -inity75=0 -minx75=0 -miny75=0 -maxx75=0 -maxy75=0 -posx75=50 -posy75=50 -sizx75=800 -sizy75=600 -title76=Hyperblade -path76=D:\Games\Hyperblade\HYPERX.EXE -module76= -ver76=0 -flag76=675 -flagg76=18 -tflag76=2 -initx76=0 -inity76=0 -minx76=0 -miny76=0 -maxx76=0 -maxy76=0 -posx76=50 -posy76=50 -sizx76=800 -sizy76=600 -title77=Idinaloq -path77=C:\Games\idina101\idinaloq.exe -module77= -ver77=0 -flag77=32 -flagg77=0 -tflag77=0 -initx77=0 -inity77=0 -minx77=0 -miny77=0 -maxx77=0 -maxy77=0 -posx77=50 -posy77=50 -sizx77=800 -sizy77=600 -title78=Immanis -path78=C:\Games\Immanis CD release\immanis.exe -module78= -ver78=0 -flag78=24611 -flagg78=0 -tflag78=0 -initx78=0 -inity78=0 -minx78=0 -miny78=0 -maxx78=0 -maxy78=0 -posx78=50 -posy78=50 -sizx78=800 -sizy78=600 -title79=Immanis (v2) -path79=C:\Games\Immanis CD release\immanis_v2.exe -module79= -ver79=0 -flag79=268460067 -flagg79=0 -tflag79=0 -initx79=0 -inity79=0 -minx79=0 -miny79=0 -maxx79=0 -maxy79=0 -posx79=50 -posy79=50 -sizx79=800 -sizy79=600 -title80=In the Hunt -path80=C:\Games\In The Hunt\e8.exe -module80= -ver80=0 -flag80=2 -flagg80=0 -tflag80=0 -initx80=0 -inity80=0 -minx80=0 -miny80=0 -maxx80=0 -maxy80=0 -posx80=50 -posy80=50 -sizx80=800 -sizy80=600 -title81=International Superstar Soccer 3 -path81=C:\Games\ISS_3\iss3.exe -module81= -ver81=8 -flag81=545267715 -flagg81=0 -tflag81=0 -initx81=0 -inity81=0 -minx81=0 -miny81=0 -maxx81=0 -maxy81=0 -posx81=50 -posy81=50 -sizx81=800 -sizy81=600 -title82=Jet Moto -path82=M:\JETMOTO.EXE -module82= -ver82=0 -flag82=139298 -flagg82=0 -tflag82=0 -initx82=0 -inity82=0 -minx82=0 -miny82=0 -maxx82=0 -maxy82=0 -posx82=50 -posy82=50 -sizx82=800 -sizy82=600 -title83=Kiss Psyco Cyrcus -path83=C:\Games\Psycho\client.exe -module83=d3d.ren -ver83=7 -flag83=537018404 -flagg83=0 -tflag83=0 -initx83=0 -inity83=0 -minx83=0 -miny83=0 -maxx83=0 -maxy83=0 -posx83=50 -posy83=50 -sizx83=800 -sizy83=600 -title84=Krazy Ivan -path84=C:\Games\Krazy Ivan\KRAZY.EXE -module84= -ver84=0 -flag84=536870914 -flagg84=0 -tflag84=0 -initx84=0 -inity84=0 -minx84=0 -miny84=0 -maxx84=0 -maxy84=0 -posx84=50 -posy84=50 -sizx84=800 -sizy84=600 -title85=Last Bronx -path85=C:\Games\Last_Bronx\LB.EXE -module85= -ver85=0 -flag85=40994 -flagg85=0 -tflag85=64 -initx85=0 -inity85=0 -minx85=0 -miny85=0 -maxx85=0 -maxy85=0 -posx85=50 -posy85=50 -sizx85=800 -sizy85=600 -title86=Lionheart -path86=C:\Games\Lionheart Demo\Lionheart.exe -module86= -ver86=0 -flag86=-2147483612 -flagg86=0 -tflag86=0 -initx86=0 -inity86=0 -minx86=0 -miny86=0 -maxx86=0 -maxy86=0 -posx86=50 -posy86=50 -sizx86=800 -sizy86=600 -title87=M.A.X. 2 -path87=C:\Games\MAX 2\MAX_2\MAX2\MAX2.EXE -module87= -ver87=0 -flag87=34 -flagg87=0 -tflag87=0 -initx87=0 -inity87=0 -minx87=0 -miny87=0 -maxx87=0 -maxy87=0 -posx87=50 -posy87=50 -sizx87=800 -sizy87=600 -title88=M1 Tank Platoon 2 -path88=C:\Games\M1 Tank Platoon 2\M1TP2.exe -module88= -ver88=8 -flag88=34 -flagg88=0 -tflag88=0 -initx88=0 -inity88=0 -minx88=0 -miny88=0 -maxx88=0 -maxy88=0 -posx88=50 -posy88=50 -sizx88=800 -sizy88=600 -title89=Mario Worlds (stripped PE) -path89=C:\Games\Mario Worlds\Mario Worlds.exe -module89= -ver89=1 -flag89=2 -flagg89=1 -tflag89=386 -initx89=0 -inity89=0 -minx89=0 -miny89=0 -maxx89=0 -maxy89=0 -posx89=50 -posy89=50 -sizx89=800 -sizy89=600 -title90=Masters of Orion 2 -path90=C:\Games\Orion2\Orion95.exe -module90= -ver90=0 -flag90=34 -flagg90=0 -tflag90=0 -initx90=0 -inity90=0 -minx90=0 -miny90=0 -maxx90=0 -maxy90=0 -posx90=50 -posy90=50 -sizx90=800 -sizy90=600 -title91=Microsoft Flight Simulator 98 -path91=C:\Games\Flight Simulator 98\FLTSIM98.EXE -module91= -ver91=0 -flag91=288 -flagg91=0 -tflag91=0 -initx91=0 -inity91=0 -minx91=0 -miny91=0 -maxx91=0 -maxy91=0 -posx91=50 -posy91=50 -sizx91=800 -sizy91=600 -title92=Microsoft Midtown Madness -path92=C:\Games\Midtown Madness\midtown.exe -module92= -ver92=0 -flag92=8192 -flagg92=0 -tflag92=2 -initx92=0 -inity92=0 -minx92=0 -miny92=0 -maxx92=0 -maxy92=0 -posx92=50 -posy92=50 -sizx92=800 -sizy92=600 -title93=Microsoft Midtown Madness Trial (BAD) -path93=C:\Games\Midtown Madness Trial\midtrial.exe -module93= -ver93=0 -flag93=2 -flagg93=0 -tflag93=0 -initx93=0 -inity93=0 -minx93=0 -miny93=0 -maxx93=0 -maxy93=0 -posx93=0 -posy93=0 -sizx93=800 -sizy93=600 -title94=Microsoft Motocross Madness 2 (BAD!!) -path94=C:\Games\Motocross Madness 2\MCM2.cracked.EXE -module94= -ver94=7 -flag94=201326664 -flagg94=1 -tflag94=82 -initx94=0 -inity94=0 -minx94=0 -miny94=0 -maxx94=0 -maxy94=0 -posx94=50 -posy94=50 -sizx94=800 -sizy94=600 -title95=Microsoft Motocross Madness Trial (BAD) -path95=C:\Games\Motocross Madness Trial\mcm.exe -module95= -ver95=1 -flag95=134225952 -flagg95=0 -tflag95=130 -initx95=0 -inity95=0 -minx95=0 -miny95=0 -maxx95=0 -maxy95=0 -posx95=50 -posy95=50 -sizx95=0 -sizy95=0 -title96=Mission Force Cyberstorm (BAD ?) -path96=C:\Games\SIERRA\CSTORM\CSTORM.EXE -module96= -ver96=0 -flag96=33562658 -flagg96=0 -tflag96=0 -initx96=0 -inity96=0 -minx96=0 -miny96=0 -maxx96=0 -maxy96=0 -posx96=50 -posy96=50 -sizx96=0 -sizy96=0 -title97=Monopoly 3D -path97=C:\Games\Monopoly (Edition 3D)\Monopoly.exe -module97= -ver97=0 -flag97=134244388 -flagg97=0 -tflag97=2 -initx97=0 -inity97=0 -minx97=0 -miny97=0 -maxx97=0 -maxy97=0 -posx97=50 -posy97=50 -sizx97=800 -sizy97=600 -title98=Monster Truck Madness 2 -path98=C:\Games\Monster Truck Madness 2\Monster.EXE -module98= -ver98=1 -flag98=34 -flagg98=1 -tflag98=0 -initx98=0 -inity98=0 -minx98=0 -miny98=0 -maxx98=0 -maxy98=0 -posx98=50 -posy98=50 -sizx98=800 -sizy98=600 -title99=Necrodrome -path99=C:\Games\Necrodome\NECRO95.EXE -module99= -ver99=0 -flag99=268435495 -flagg99=256 -tflag99=0 -initx99=0 -inity99=0 -minx99=0 -miny99=0 -maxx99=0 -maxy99=0 -posx99=50 -posy99=50 -sizx99=800 -sizy99=600 -title100=Need For Speed - Porsche 2000 -path100=C:\Games\Need For Speed - Porsche 2000\Porsche.exe -module100= -ver100=7 -flag100=0 -flagg100=0 -tflag100=258 -initx100=0 -inity100=0 -minx100=0 -miny100=0 -maxx100=0 -maxy100=0 -posx100=50 -posy100=50 -sizx100=800 -sizy100=600 -title101=Netstorm Islands at War -path101=C:\Games\Netstorm\Netstorm.exe -module101= -ver101=0 -flag101=2 -flagg101=0 -tflag101=0 -initx101=0 -inity101=0 -minx101=0 -miny101=0 -maxx101=0 -maxy101=0 -posx101=50 -posy101=50 -sizx101=800 -sizy101=600 -title102=Nox -path102=C:\Games\Nox2\Game.exe -module102= -ver102=0 -flag102=939540515 -flagg102=0 -tflag102=386 -initx102=0 -inity102=0 -minx102=0 -miny102=0 -maxx102=0 -maxy102=0 -posx102=50 -posy102=50 -sizx102=800 -sizy102=600 -title103=Pacific General -path103=C:\Games\Pacific General\PACGEN.EXE -module103= -ver103=0 -flag103=8226 -flagg103=0 -tflag103=2 -initx103=0 -inity103=0 -minx103=0 -miny103=0 -maxx103=0 -maxy103=0 -posx103=50 -posy103=50 -sizx103=800 -sizy103=600 -title104=Project Nomads Demo (BAD) -path104=C:\Games\Project Nomads Demo\bin\win32\nomads.exe -module104= -ver104=8 -flag104=-1476394912 -flagg104=256 -tflag104=258 -initx104=0 -inity104=0 -minx104=0 -miny104=0 -maxx104=0 -maxy104=0 -posx104=50 -posy104=50 -sizx104=800 -sizy104=600 -title105=Puzzle Bubble -path105=C:\Games\Puzzle Bubble\PB.EXE -module105= -ver105=0 -flag105=34 -flagg105=0 -tflag105=0 -initx105=0 -inity105=0 -minx105=0 -miny105=0 -maxx105=0 -maxy105=0 -posx105=50 -posy105=50 -sizx105=800 -sizy105=600 -title106=Raiden II -path106=C:\Games\Raiden II\Raiden II\RAIDENII.EXE -module106= -ver106=0 -flag106=34 -flagg106=0 -tflag106=0 -initx106=0 -inity106=0 -minx106=0 -miny106=0 -maxx106=0 -maxy106=0 -posx106=50 -posy106=50 -sizx106=800 -sizy106=600 -title107=Railroad Tycoon II -path107=C:\Games\Railroad.Tycoon.II\RT2.EXE -module107= -ver107=1 -flag107=134225954 -flagg107=0 -tflag107=0 -initx107=0 -inity107=0 -minx107=0 -miny107=0 -maxx107=0 -maxy107=0 -posx107=50 -posy107=50 -sizx107=800 -sizy107=600 -title108=Rally Championship 2000 -path108=C:\Games\Rally Championship 2000\RAL.EXE -module108= -ver108=0 -flag108=67108864 -flagg108=0 -tflag108=2 -initx108=0 -inity108=0 -minx108=0 -miny108=0 -maxx108=0 -maxy108=0 -posx108=50 -posy108=50 -sizx108=800 -sizy108=600 -title109=Rebel Moon Rising -path109=C:\Games\Rebel Moon Rising\Rmr.exe -module109= -ver109=0 -flag109=0 -flagg109=0 -tflag109=0 -initx109=0 -inity109=0 -minx109=0 -miny109=0 -maxx109=0 -maxy109=0 -posx109=50 -posy109=50 -sizx109=800 -sizy109=600 -title110=Redline - Gang Warfare 2066 -path110=C:\Games\Redline - Gang Warfare 2066\redline.exe -module110= -ver110=0 -flag110=32 -flagg110=0 -tflag110=386 -initx110=0 -inity110=0 -minx110=0 -miny110=0 -maxx110=0 -maxy110=0 -posx110=50 -posy110=50 -sizx110=800 -sizy110=600 -title111=Resident Evil -path111=C:\Games\Resident Evil\residentevil.patched.exe -module111= -ver111=1 -flag111=134217827 -flagg111=0 -tflag111=2 -initx111=0 -inity111=0 -minx111=0 -miny111=0 -maxx111=0 -maxy111=0 -posx111=50 -posy111=50 -sizx111=800 -sizy111=600 -title112=Re-Volt -path112=C:\Games\Re-Volt\REVOLT.EXE -module112= -ver112=0 -flag112=134217792 -flagg112=0 -tflag112=0 -initx112=0 -inity112=0 -minx112=0 -miny112=0 -maxx112=0 -maxy112=0 -posx112=50 -posy112=50 -sizx112=800 -sizy112=600 -title113=Road Rash -path113=D:\Games\Road Rash\ROADRASH\ROADRASH.EXE -module113= -ver113=0 -flag113=134217730 -flagg113=0 -tflag113=387 -initx113=0 -inity113=0 -minx113=0 -miny113=0 -maxx113=0 -maxy113=0 -posx113=50 -posy113=50 -sizx113=800 -sizy113=600 -title114=Road Rash Demo -path114=D:\Games\RoadRash DEMO\DEMORASH.EXE -module114= -ver114=0 -flag114=134218242 -flagg114=0 -tflag114=259 -initx114=0 -inity114=0 -minx114=0 -miny114=0 -maxx114=0 -maxy114=0 -posx114=50 -posy114=50 -sizx114=800 -sizy114=600 -title115=RollerCoaster Tycoon 2 Mini Game -path115=C:\Games\RollerCoaster Tycoon 2 Mini Game\rct2.exe -module115= -ver115=1 -flag115=536870946 -flagg115=0 -tflag115=0 -initx115=0 -inity115=0 -minx115=0 -miny115=0 -maxx115=0 -maxy115=0 -posx115=0 -posy115=0 -sizx115=800 -sizy115=600 -title116=Sega Rally 2 Championship -path116=C:\Games\Sega Rally 2 Championship\SEGA RALLY 2.exe -module116= -ver116=1 -flag116=268435488 -flagg116=2 -tflag116=0 -initx116=0 -inity116=0 -minx116=0 -miny116=0 -maxx116=0 -maxy116=0 -posx116=0 -posy116=0 -sizx116=800 -sizy116=600 -title117=Shadow Master (TBD) -path117=C:\Games\Shadow Master\rmg.exe -module117= -ver117=1 -flag117=32 -flagg117=256 -tflag117=450 -initx117=0 -inity117=0 -minx117=0 -miny117=0 -maxx117=0 -maxy117=0 -posx117=50 -posy117=50 -sizx117=800 -sizy117=600 -title118=Sid Meier's SimGolf Demo -path118=C:\Games\Sid Meier's SimGolf Demo\golf.exe -module118=jgl.dll -ver118=0 -flag118=33554434 -flagg118=0 -tflag118=2 -initx118=0 -inity118=0 -minx118=0 -miny118=0 -maxx118=0 -maxy118=0 -posx118=50 -posy118=50 -sizx118=800 -sizy118=600 -title119=SleepWalker -path119=C:\Games\SleepWalker\Sleepy.exe -module119= -ver119=0 -flag119=301989954 -flagg119=0 -tflag119=198 -initx119=0 -inity119=0 -minx119=0 -miny119=0 -maxx119=0 -maxy119=0 -posx119=50 -posy119=50 -sizx119=800 -sizy119=600 -title120=SnowBoard Racer -path120=C:\Games\Snowboard Racer\SnowBoard.exe -module120= -ver120=0 -flag120=268443681 -flagg120=0 -tflag120=0 -initx120=0 -inity120=0 -minx120=0 -miny120=0 -maxx120=0 -maxy120=0 -posx120=50 -posy120=50 -sizx120=800 -sizy120=600 -title121=Solaris (~BAD) -path121=c:\Games\Solaris\solaris.exe -module121= -ver121=7 -flag121=973078627 -flagg121=1 -tflag121=2 -initx121=0 -inity121=0 -minx121=0 -miny121=0 -maxx121=0 -maxy121=0 -posx121=50 -posy121=50 -sizx121=800 -sizy121=600 -title122=Sonic 3 -path122=C:\Games\Sonic 3 + Sonic et Knuckles\Sonic 3\SONIC3K.EXE -module122= -ver122=1 -flag122=546 -flagg122=0 -tflag122=0 -initx122=0 -inity122=0 -minx122=0 -miny122=0 -maxx122=0 -maxy122=0 -posx122=50 -posy122=50 -sizx122=800 -sizy122=600 -title123=Sonic 3D Blast -path123=C:\Games\Sonic3D\pcsonic.exe -module123= -ver123=0 -flag123=134217762 -flagg123=0 -tflag123=0 -initx123=0 -inity123=0 -minx123=0 -miny123=0 -maxx123=0 -maxy123=0 -posx123=50 -posy123=50 -sizx123=800 -sizy123=600 -title124=Sonic R -path124=C:\Games\SonicR\sonicr.exe -module124= -ver124=0 -flag124=8288 -flagg124=0 -tflag124=0 -initx124=0 -inity124=0 -minx124=0 -miny124=0 -maxx124=0 -maxy124=0 -posx124=50 -posy124=50 -sizx124=800 -sizy124=600 -title125=Soulbringer -path125=C:\Games\SoulBringer\SoulbringeVCnoeax.exe -module125= -ver125=0 -flag125=143024174 -flagg125=0 -tflag125=0 -initx125=0 -inity125=0 -minx125=0 -miny125=0 -maxx125=0 -maxy125=0 -posx125=50 -posy125=50 -sizx125=800 -sizy125=600 -title126=Speedboat Attack (BAD) -path126=C:\Games\Speedboat Attack\SBOAT.EXE -module126= -ver126=0 -flag126=541073954 -flagg126=0 -tflag126=2 -initx126=0 -inity126=0 -minx126=0 -miny126=0 -maxx126=0 -maxy126=0 -posx126=50 -posy126=50 -sizx126=800 -sizy126=600 -title127=Star Wars Episode 1 Racer -path127=C:\Games\sw racer\SWEP1RCR.EXE -module127= -ver127=0 -flag127=142606368 -flagg127=0 -tflag127=0 -initx127=0 -inity127=0 -minx127=0 -miny127=0 -maxx127=0 -maxy127=0 -posx127=50 -posy127=50 -sizx127=800 -sizy127=600 -title128=Star Wars: Jedi Knight -path128=C:\Games\Jedi Knight\Jedi Knight\JK.EXE -module128= -ver128=0 -flag128=8226 -flagg128=0 -tflag128=0 -initx128=0 -inity128=0 -minx128=0 -miny128=0 -maxx128=0 -maxy128=0 -posx128=50 -posy128=50 -sizx128=800 -sizy128=600 -title129=Star Wars: the Gungan Frontier -path129=C:\Games\sw the gungan frontier\Gungan Frontier.exe -module129= -ver129=1 -flag129=402915362 -flagg129=512 -tflag129=0 -initx129=0 -inity129=0 -minx129=0 -miny129=0 -maxx129=0 -maxy129=0 -posx129=0 -posy129=0 -sizx129=800 -sizy129=600 -title130=Starship Troopers -path130=C:\Games\Starship Troopers - Terran Ascendancy\stta\StarshipTroopers.exe -module130= -ver130=1 -flag130=32 -flagg130=0 -tflag130=0 -initx130=0 -inity130=0 -minx130=0 -miny130=0 -maxx130=0 -maxy130=0 -posx130=50 -posy130=50 -sizx130=800 -sizy130=600 -title131=Starshot Space Circus -path131=D:\SpaceCircus.exe -module131= -ver131=0 -flag131=66 -flagg131=0 -tflag131=0 -initx131=0 -inity131=0 -minx131=0 -miny131=0 -maxx131=0 -maxy131=0 -posx131=50 -posy131=50 -sizx131=800 -sizy131=600 -title132=Stronghold Demo -path132=C:\Games\Firefly Studios' Stronghold - Demo\Stronghold Demo.exe -module132= -ver132=0 -flag132=98 -flagg132=0 -tflag132=0 -initx132=0 -inity132=0 -minx132=0 -miny132=0 -maxx132=0 -maxy132=0 -posx132=50 -posy132=50 -sizx132=800 -sizy132=600 -title133=Sub Culture -path133=C:\Games\Sub Culture\sc.exe -module133= -ver133=0 -flag133=66 -flagg133=256 -tflag133=10 -initx133=50 -inity133=50 -minx133=50 -miny133=50 -maxx133=800 -maxy133=600 -posx133=50 -posy133=50 -sizx133=800 -sizy133=600 -title134=Superbike 2001 -path134=C:\Games\Superbike 2001\Sbk2001.exe -module134= -ver134=1 -flag134=536887332 -flagg134=0 -tflag134=0 -initx134=0 -inity134=0 -minx134=0 -miny134=0 -maxx134=0 -maxy134=0 -posx134=50 -posy134=50 -sizx134=800 -sizy134=600 -title135=Syberia 2 Demo -path135=C:\Games\Syberia 2 Demo\Syberia2Demo.exe -module135= -ver135=8 -flag135=536887332 -flagg135=0 -tflag135=0 -initx135=0 -inity135=0 -minx135=0 -miny135=0 -maxx135=0 -maxy135=0 -posx135=50 -posy135=50 -sizx135=800 -sizy135=600 -title136=Syberia Demo -path136=C:\Games\SyberiaDemo\SyberiaDemo.exe -module136= -ver136=1 -flag136=536887332 -flagg136=0 -tflag136=0 -initx136=0 -inity136=0 -minx136=0 -miny136=0 -maxx136=0 -maxy136=0 -posx136=50 -posy136=50 -sizx136=800 -sizy136=600 -title137=System Shock 2 (BAD!!!) -path137=C:\Games\Sys Shock II\Shock2.exe -module137= -ver137=1 -flag137=0 -flagg137=64 -tflag137=0 -initx137=0 -inity137=0 -minx137=0 -miny137=0 -maxx137=0 -maxy137=0 -posx137=50 -posy137=50 -sizx137=800 -sizy137=600 -title138=Test Drive 4 -path138=D:\Games\Test Drive 4\td4.EXE -module138= -ver138=0 -flag138=-2013265886 -flagg138=16 -tflag138=3 -initx138=0 -inity138=0 -minx138=0 -miny138=0 -maxx138=0 -maxy138=0 -posx138=50 -posy138=50 -sizx138=800 -sizy138=600 -title139=The Nations Demo -path139=C:\Games\The Nations Demo\bin\Game.exe -module139= -ver139=1 -flag139=402661920 -flagg139=256 -tflag139=0 -initx139=0 -inity139=0 -minx139=0 -miny139=0 -maxx139=0 -maxy139=0 -posx139=50 -posy139=50 -sizx139=800 -sizy139=600 -title140=The Sims -path140=C:\Games\The Sims\Sims.exe -module140= -ver140=0 -flag140=134226976 -flagg140=0 -tflag140=2 -initx140=0 -inity140=0 -minx140=0 -miny140=0 -maxx140=0 -maxy140=0 -posx140=50 -posy140=50 -sizx140=800 -sizy140=600 -title141=Thief the Dark Project (FRE) -path141=C:\Games\thief\game\thieffixed.exe -module141= -ver141=1 -flag141=16390 -flagg141=0 -tflag141=0 -initx141=0 -inity141=0 -minx141=0 -miny141=0 -maxx141=0 -maxy141=0 -posx141=50 -posy141=50 -sizx141=800 -sizy141=600 -title142=TinTin: Prisoners of the Sun -path142=C:\Games\tintin\TINTINW.EXE -module142= -ver142=0 -flag142=34 -flagg142=0 -tflag142=2 -initx142=0 -inity142=0 -minx142=0 -miny142=0 -maxx142=0 -maxy142=0 -posx142=50 -posy142=50 -sizx142=800 -sizy142=600 -title143=Tintoy (BAD gfx) -path143=C:\Games\Tintoy\Tintoy.exe -module143= -ver143=0 -flag143=546 -flagg143=256 -tflag143=258 -initx143=0 -inity143=0 -minx143=0 -miny143=0 -maxx143=0 -maxy143=0 -posx143=50 -posy143=50 -sizx143=800 -sizy143=600 -title144=Tomb Raider - Anniversary -path144=C:\Games\Tomb Raider - Anniversary\tra.exe -module144= -ver144=9 -flag144=0 -flagg144=256 -tflag144=2 -initx144=0 -inity144=0 -minx144=0 -miny144=0 -maxx144=0 -maxy144=0 -posx144=50 -posy144=50 -sizx144=800 -sizy144=600 -title145=Tomb Raider 2 the Golden Mask -path145=D:\Games\TR2 Golden Mask\T2GOLD.EXE -module145= -ver145=0 -flag145=570688034 -flagg145=0 -tflag145=258 -initx145=0 -inity145=0 -minx145=0 -miny145=0 -maxx145=0 -maxy145=0 -posx145=50 -posy145=50 -sizx145=800 -sizy145=600 -title146=Tomb Raider 3 Demo -path146=C:\Games\Tomb Raider 3 - The Lost Artifact Demo\tr3gold.exe -module146= -ver146=1 -flag146=369098848 -flagg146=0 -tflag146=258 -initx146=0 -inity146=0 -minx146=0 -miny146=0 -maxx146=0 -maxy146=0 -posx146=50 -posy146=50 -sizx146=800 -sizy146=600 -title147=Tomb Raider 4 Demo -path147=C:\Games\Tomb Raider 4 - The Last Revelation (Demo)\tomb4.patched.exe -module147= -ver147=0 -flag147=234881056 -flagg147=16 -tflag147=258 -initx147=0 -inity147=0 -minx147=0 -miny147=0 -maxx147=0 -maxy147=0 -posx147=50 -posy147=50 -sizx147=800 -sizy147=600 -title148=Total Annihilation Kingdoms -path148=D:\Games\Total Annihilation Kingdoms\Kingdoms.exe -module148= -ver148=0 -flag148=134234146 -flagg148=0 -tflag148=0 -initx148=0 -inity148=0 -minx148=0 -miny148=0 -maxx148=0 -maxy148=0 -posx148=50 -posy148=50 -sizx148=800 -sizy148=600 -title149=Ultim@te Race Pro -path149=C:\Games\Ultim@te race pro\Ultim@te Race Pro.exe -module149= -ver149=0 -flag149=570425440 -flagg149=256 -tflag149=0 -initx149=0 -inity149=0 -minx149=0 -miny149=0 -maxx149=0 -maxy149=0 -posx149=50 -posy149=50 -sizx149=800 -sizy149=600 -title150=Uprising - Join or Die -path150=D:\Games\Uprising\uprising.exe -module150= -ver150=0 -flag150=-2013265882 -flagg150=18 -tflag150=0 -initx150=0 -inity150=0 -minx150=0 -miny150=0 -maxx150=0 -maxy150=0 -posx150=50 -posy150=50 -sizx150=800 -sizy150=600 -title151=Warcraft 2 Battlenet Edition -path151=D:\Games\Warcraft 2\Warcraft II BNE.exe -module151= -ver151=0 -flag151=24610 -flagg151=16 -tflag151=14 -initx151=0 -inity151=0 -minx151=0 -miny151=0 -maxx151=0 -maxy151=0 -posx151=50 -posy151=50 -sizx151=800 -sizy151=600 -title152=WarHammer Rites of War -path152=C:\Games\Rites of War\RoW.exe -module152= -ver152=0 -flag152=134217760 -flagg152=128 -tflag152=0 -initx152=0 -inity152=0 -minx152=0 -miny152=0 -maxx152=0 -maxy152=0 -posx152=50 -posy152=50 -sizx152=800 -sizy152=600 -title153=Warlords 3 -path153=D:\Games\WARLORDS3\Darklord.exe -module153= -ver153=0 -flag153=134218274 -flagg153=32 -tflag153=2 -initx153=0 -inity153=0 -minx153=0 -miny153=0 -maxx153=0 -maxy153=0 -posx153=50 -posy153=50 -sizx153=640 -sizy153=480 -title154=WarTorn -path154=C:\Games\WarTorn\W.exe -module154= -ver154=0 -flag154=32 -flagg154=0 -tflag154=0 -initx154=0 -inity154=0 -minx154=0 -miny154=0 -maxx154=0 -maxy154=0 -posx154=50 -posy154=50 -sizx154=800 -sizy154=600 -title155=WarWind -path155=C:\Games\WarWind\WW.EXE -module155= -ver155=0 -flag155=16418 -flagg155=16 -tflag155=0 -initx155=0 -inity155=0 -minx155=0 -miny155=0 -maxx155=0 -maxy155=0 -posx155=50 -posy155=50 -sizx155=800 -sizy155=600 -title156=Worms Armageddon Demo (BAD!!!) -path156=C:\Games\Worms Armageddon Demo\WaDemo.exe -module156= -ver156=1 -flag156=939524099 -flagg156=8 -tflag156=2 -initx156=0 -inity156=0 -minx156=0 -miny156=0 -maxx156=0 -maxy156=0 -posx156=0 -posy156=0 -sizx156=0 -sizy156=0 -title157=Worms World Party -path157=D:\Games\Worms World Party\wwp.exe -module157= -ver157=1 -flag157=8388610 -flagg157=0 -tflag157=0 -initx157=0 -inity157=0 -minx157=0 -miny157=0 -maxx157=0 -maxy157=0 -posx157=50 -posy157=50 -sizx157=800 -sizy157=600 -title158=Worms World Party Demo (BAD) -path158=C:\Games\WWP Demo\wwp.exe -module158=MFC42.DLL ltkrn10N.dll -ver158=1 -flag158=406847491 -flagg158=8 -tflag158=2 -initx158=0 -inity158=0 -minx158=0 -miny158=0 -maxx158=0 -maxy158=0 -posx158=0 -posy158=0 -sizx158=0 -sizy158=0 -title159=X-Com Enforcer -path159=C:\Games\X-Com Enforcer\System\xcom.exe -module159= -ver159=1 -flag159=32 -flagg159=0 -tflag159=0 -initx159=0 -inity159=0 -minx159=0 -miny159=0 -maxx159=0 -maxy159=0 -posx159=0 -posy159=0 -sizx159=800 -sizy159=600 -title160=X-Com Interceptor -path160=C:\Games\X-Com_Interceptor\X-COM Interceptor\Interceptor.exe -module160= -ver160=0 -flag160=16418 -flagg160=0 -tflag160=0 -initx160=0 -inity160=0 -minx160=0 -miny160=0 -maxx160=0 -maxy160=0 -posx160=50 -posy160=50 -sizx160=800 -sizy160=600 -title161=Z Steel Soldiers -path161=C:\Games\ZSteelSoldiers\Bin\z2.exe -module161= -ver161=8 -flag161=805462020 -flagg161=0 -tflag161=0 -initx161=0 -inity161=0 -minx161=0 -miny161=0 -maxx161=0 -maxy161=0 -posx161=50 -posy161=50 -sizx161=800 -sizy161=600 -title162=Zax Alien Hunter -path162=C:\Games\ZaxDemo\Zax.exe -module162= -ver162=0 -flag162=-1476386784 -flagg162=0 -tflag162=0 -initx162=0 -inity162=0 -minx162=0 -miny162=0 -maxx162=0 -maxy162=0 -posx162=50 -posy162=50 -sizx162=800 -sizy162=600 -title163=Zero Critical (BAD) -path163=C:\Games\zero_critical_-_satin_rift\ZEROCR.EXE -module163= -ver163=0 -flag163=679477858 -flagg163=8 -tflag163=0 -initx163=0 -inity163=0 -minx163=0 -miny163=0 -maxx163=0 -maxy163=0 -posx163=0 -posy163=0 -sizx163=800 -sizy163=600 -title164=Zero Population Count -path164=C:\Games\ZPC\ZPC.EXE -module164= -ver164=0 -flag164=1073741859 -flagg164=0 -tflag164=0 -initx164=0 -inity164=0 -minx164=0 -miny164=0 -maxx164=0 -maxy164=0 -posx164=0 -posy164=0 -sizx164=800 -sizy164=600 -title165=Zero Zone -path165=D:\ZZone\ZeroZone.exe -module165= -ver165=0 -flag165=34 -flagg165=0 -tflag165=0 -initx165=0 -inity165=0 -minx165=0 -miny165=0 -maxx165=0 -maxy165=0 -posx165=50 -posy165=50 -sizx165=800 -sizy165=600 -title166=Zeus Poseidon -path166=C:\Games\Zeus-Poseidon\Zeus.exe -module166= -ver166=0 -flag166=34 -flagg166=0 -tflag166=0 -initx166=0 -inity166=0 -minx166=0 -miny166=0 -maxx166=0 -maxy166=0 -posx166=50 -posy166=50 -sizx166=800 -sizy166=600 -title167=Zoo Tycoon -path167=C:\Games\Zoo Tycoon\zoo.exe -module167= -ver167=0 -flag167=-2013265886 -flagg167=0 -tflag167=0 -initx167=0 -inity167=0 -minx167=0 -miny167=0 -maxx167=0 -maxy167=0 -posx167=50 -posy167=50 -sizx167=800 -sizy167=600 -title168=Soldiers at War -path168=D:\Games\Soldiers at War\SAW_Game.exe -module168= -ver168=0 -flag168=671359010 -flagg168=64 -tflag168=0 -initx168=0 -inity168=0 -minx168=0 -miny168=0 -maxx168=0 -maxy168=0 -posx168=50 -posy168=50 -sizx168=640 -sizy168=480 -title169=Halo Combat Evolved -path169=D:\Games\Halo Combat Evolved\halo.exe -module169= -ver169=9 -flag169=570425377 -flagg169=0 -tflag169=479 -initx169=0 -inity169=0 -minx169=0 -miny169=0 -maxx169=0 -maxy169=0 -posx169=50 -posy169=50 -sizx169=800 -sizy169=600 -title170=Jedi Knight II Jedi Outcast -path170=D:\Games\Jedi Knight II Jedi Outcast\GameData\jk2sp.exe -module170= -ver170=0 -flag170=0 -flagg170=512 -tflag170=267 -initx170=0 -inity170=0 -minx170=0 -miny170=0 -maxx170=0 -maxy170=0 -posx170=50 -posy170=50 -sizx170=800 -sizy170=600 -title171=Incoming Forces -path171=D:\Games\Incoming Forces\forces.exe -module171= -ver171=8 -flag171=134217760 -flagg171=0 -tflag171=3 -initx171=0 -inity171=0 -minx171=0 -miny171=0 -maxx171=0 -maxy171=0 -posx171=50 -posy171=50 -sizx171=800 -sizy171=600 -title172=Doom 64 Absolution -path172=D:\Games\Doom 64\Bin\Absolution.exe -module172= -ver172=8 -flag172=0 -flagg172=0 -tflag172=259 -initx172=0 -inity172=0 -minx172=0 -miny172=0 -maxx172=0 -maxy172=0 -posx172=50 -posy172=50 -sizx172=800 -sizy172=600 -title173=lithtech.exe -path173=D:\Games\NOLF Technology Demo\lithtech.exe -module173= -ver173=7 -flag173=0 -flagg173=512 -tflag173=259 -initx173=0 -inity173=0 -minx173=0 -miny173=0 -maxx173=0 -maxy173=0 -posx173=50 -posy173=50 -sizx173=800 -sizy173=600 -title174=Half-Life Uplink Demo -path174=D:\Games\Half-Life Uplink\hldemo.exe -module174= -ver174=1 -flag174=1073741826 -flagg174=512 -tflag174=3 -initx174=0 -inity174=0 -minx174=0 -miny174=0 -maxx174=0 -maxy174=0 -posx174=50 -posy174=50 -sizx174=640 -sizy174=480 -title175=Daikatana -path175=D:\Games\Daikatana\daikatana.exe -module175=OpenGL32.dll -ver175=9 -flag175=514 -flagg175=513 -tflag175=387 -initx175=0 -inity175=0 -minx175=0 -miny175=0 -maxx175=0 -maxy175=0 -posx175=50 -posy175=50 -sizx175=800 -sizy175=600 -title176=Half-Life Blue-Shift (d3d) -path176=D:\Games\Half-Life Blue-Shift\bshift.exe -module176= -ver176=10 -flag176=1073741826 -flagg176=513 -tflag176=259 -initx176=0 -inity176=0 -minx176=0 -miny176=0 -maxx176=0 -maxy176=0 -posx176=50 -posy176=50 -sizx176=640 -sizy176=480 -title177=Moto Racer Demo -path177=D:\Games\Moto Racer Demo\PlayDemo.exe -module177= -ver177=0 -flag177=167903267 -flagg177=192 -tflag177=14 -initx177=0 -inity177=0 -minx177=0 -miny177=0 -maxx177=0 -maxy177=0 -posx177=50 -posy177=50 -sizx177=800 -sizy177=600 -title178=Quake 2 -path178=D:\Games\QUAKE2\quake2.exe -module178= -ver178=10 -flag178=167772672 -flagg178=1 -tflag178=387 -initx178=0 -inity178=0 -minx178=0 -miny178=0 -maxx178=0 -maxy178=0 -posx178=50 -posy178=50 -sizx178=800 -sizy178=600 -title179=Quake 3 Arena -path179=D:\Games\Q3A\quake3.exe -module179= -ver179=10 -flag179=0 -flagg179=513 -tflag179=0 -initx179=0 -inity179=0 -minx179=0 -miny179=0 -maxx179=0 -maxy179=0 -posx179=50 -posy179=50 -sizx179=800 -sizy179=600 -title180=Sentinel Returns -path180=D:\Games\Sentinel Returns\Sentinel.exe -module180= -ver180=1 -flag180=3 -flagg180=0 -tflag180=0 -initx180=0 -inity180=0 -minx180=0 -miny180=0 -maxx180=0 -maxy180=0 -posx180=50 -posy180=50 -sizx180=800 -sizy180=600 -title181=Sin, Wages of (sw renderer) -path181=D:\Games\sin\sin.exe -module181=ref_gl.dll ref_soft.dll -ver181=10 -flag181=402670082 -flagg181=769 -tflag181=387 -initx181=0 -inity181=0 -minx181=0 -miny181=0 -maxx181=0 -maxy181=0 -posx181=50 -posy181=50 -sizx181=800 -sizy181=600 -title182=Star trek Klingon Honor Guard -path182=D:\Games\Star trek Klingon Honor Guard\System\Khg.exe -module182=OGIDrv.dll -ver182=10 -flag182=0 -flagg182=513 -tflag182=386 -initx182=0 -inity182=0 -minx182=0 -miny182=0 -maxx182=0 -maxy182=0 -posx182=50 -posy182=50 -sizx182=800 -sizy182=600 -title183=American McGee's Alice Demo -path183=D:\Games\American McGee's Alice Demo\alice.exe -module183= -ver183=10 -flag183=268435458 -flagg183=0 -tflag183=0 -initx183=0 -inity183=0 -minx183=0 -miny183=0 -maxx183=0 -maxy183=0 -posx183=50 -posy183=50 -sizx183=800 -sizy183=600 -title184=Hexen II (opengl) -path184=D:\Games\Hexen II\glh2.exe -module184= -ver184=10 -flag184=2 -flagg184=1 -tflag184=387 -initx184=0 -inity184=0 -minx184=0 -miny184=0 -maxx184=0 -maxy184=0 -posx184=50 -posy184=50 -sizx184=800 -sizy184=600 -title185=Hexen II (software) -path185=D:\Games\Hexen II\h2.exe -module185= -ver185=10 -flag185=671088642 -flagg185=0 -tflag185=0 -initx185=0 -inity185=0 -minx185=0 -miny185=0 -maxx185=0 -maxy185=0 -posx185=50 -posy185=50 -sizx185=800 -sizy185=600 -title186=Star Wars Jedi Knight Jedi Academy -path186=D:\Games\Star_Wars_Jedi_Knight_Jedi_Academy\GameData\jasp.exe -module186= -ver186=10 -flag186=0 -flagg186=0 -tflag186=3 -initx186=0 -inity186=0 -minx186=0 -miny186=0 -maxx186=0 -maxy186=0 -posx186=50 -posy186=50 -sizx186=800 -sizy186=600 -title187=Dungeon Keeper 2 GOG release -path187=D:\Games\Dungeon Keeper 2 GOG release\DKII.EXE -module187= -ver187=0 -flag187=134217762 -flagg187=0 -tflag187=0 -initx187=0 -inity187=0 -minx187=0 -miny187=0 -maxx187=0 -maxy187=0 -posx187=50 -posy187=50 -sizx187=800 -sizy187=600 diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index c2edba3..c592e19 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -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," "); } diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index aa761fc..c0dea9c 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -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; } \ No newline at end of file diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index d7fbb27..b3e362c 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -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: diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 23a87da..fc9378a 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -23,7 +23,7 @@ along with this program. If not, see . #include #include "dxwnd.h" -#define VERSION "2.02.00" +#define VERSION "2.02.01" LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam); diff --git a/dll/dxwnd.ws2005.suo b/dll/dxwnd.ws2005.suo index 0c67c2f4afea5d0e504ca1f46dfaf01d76138a81..33b499f9d4d503a2d267c93681394208d4007387 100644 GIT binary patch literal 61680 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 delta 1211 zcmZ`&T}V_x6rQO~UV4c{5-ij#ZxES( zpnLj(1fiaa4AlD=QKCqQQf~=CSde88YG9C2ZfCBmE~x|G<;*u{&U|y`yUU+c(h%+Q zP;R714D15#Kg1n+t?z+=Qbb(?a8+${8Ps!~GWhd&FJtwyL5qrj(g zf}|VQP`1aqUaCo7p(C2eI+Bj30eMwFrP5F}E<~>0(F*mqZIxrZIegke4F zJq~dAtKsiJ6+G|K!%~OAw5`G5&$ZDsNN#+jymVVtDy-fKK*u4oeOvD4V}PlAf7lr8 zikUE#2X4B5~*wL?7G2uM!b>P<_w^xpF!P9Pd=uL;Y!Mb2T Ng4w|md1BB_{{hRcaSH$d diff --git a/dll/dxwnd.ws2005.vcproj b/dll/dxwnd.ws2005.vcproj index 3d084a9..15b3c7a 100644 --- a/dll/dxwnd.ws2005.vcproj +++ b/dll/dxwnd.ws2005.vcproj @@ -245,6 +245,10 @@ /> + + @@ -358,6 +362,10 @@ RelativePath="dxhook.h" > + + diff --git a/dll/hd3d.cpp b/dll/hd3d.cpp index df684df..1bf3a27 100644 --- a/dll/hd3d.cpp +++ b/dll/hd3d.cpp @@ -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"); diff --git a/dll/hddraw.cpp b/dll/hddraw.cpp index db9c7f8..3a2e390 100644 --- a/dll/hddraw.cpp +++ b/dll/hddraw.cpp @@ -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; diff --git a/dll/syslibs.cpp b/dll/syslibs.cpp index 5d3841b..553107b 100644 --- a/dll/syslibs.cpp +++ b/dll/syslibs.cpp @@ -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; diff --git a/host/Resource.h b/host/Resource.h index e98f5aa..c1d4f29 100644 --- a/host/Resource.h +++ b/host/Resource.h @@ -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 diff --git a/host/StatusDialog.cpp b/host/StatusDialog.cpp index 8ea7195..eb0c810 100644 --- a/host/StatusDialog.cpp +++ b/host/StatusDialog.cpp @@ -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); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index b7cd70c..a2b60e4 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -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 } diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 690fed7..9e95a77 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -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 diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 962d17551614ef6bcc64bd8a1e0e9f821c82aab7..bb90acc15bae705abae01d59bf612dc8a08bc9b6 100644 GIT binary patch delta 8708 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 @@ -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; diff --git a/makebuild.bat b/makebuild.bat index fd49115..4b901f5 100644 --- a/makebuild.bat +++ b/makebuild.bat @@ -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