diff --git a/Include/dxwnd.h b/Include/dxwnd.h
index b1cdc9f..aa7bac4 100644
--- a/Include/dxwnd.h
+++ b/Include/dxwnd.h
@@ -79,6 +79,7 @@
// third flags DWORD dxw.dwFlags3:
#define FORCEHOOKOPENGL 0x00000001 // loads OpenGL32.dll and hooks it
+#define MARKBLIT 0x00000002 // higlights the blit to primary surface operation by surroundig the rect in color
// logging Tflags DWORD:
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
diff --git a/build/dxwnd.dll b/build/dxwnd.dll
index c98171c..5872506 100644
--- a/build/dxwnd.dll
+++ b/build/dxwnd.dll
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4254ded87b12758c82865086e3af480673f216886af7b44d71477cc06be75705
-size 311296
+oid sha256:2d27bd94b95b7ca824b05b37e72626d7250273d4c55512eac260ea59ed8cb2cb
+size 314880
diff --git a/build/dxwnd.exe b/build/dxwnd.exe
index bd40e8b..df79c93 100644
--- a/build/dxwnd.exe
+++ b/build/dxwnd.exe
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c299cf7d537a05c2aefa8e169e5b25abe44450db15171d2bf9a0f66dbb976df0
-size 501760
+oid sha256:c518035d2eea78a680be7ee136ab574ad087f8f346f923be2e43b1ba9fa5b3ee
+size 502272
diff --git a/build/dxwnd.ini b/build/dxwnd.ini
index ab52bad..f9aa226 100644
--- a/build/dxwnd.ini
+++ b/build/dxwnd.ini
@@ -1,11 +1,10 @@
[target]
-title0=007 NightFire
-path0=D:\Games\007_NightFire\Bond.exe
+title0=1602 A.D.
+path0=C:\Games\1602 A.D\1602.exe
module0=
-opengllib0=
ver0=0
-flag0=16418
-flagg0=1207959552
+flag0=679608354
+flagg0=0
tflag0=0
initx0=0
inity0=0
@@ -17,15 +16,13 @@ posx0=50
posy0=50
sizx0=800
sizy0=600
-maxfps0=0
-title1=Age of Empires
-path1=D:\Games\Age of Empires\EMPIRES.EXE
+title1=7th Legion
+path1=D:\Games\7th_Legion\LEGION.EXE
module1=
-opengllib1=
ver1=0
-flag1=134217762
-flagg1=0
-tflag1=0
+flag1=402669607
+flagg1=539056144
+tflag1=12
initx1=0
inity1=0
minx1=0
@@ -36,15 +33,13 @@ posx1=50
posy1=50
sizx1=800
sizy1=600
-maxfps1=0
-title2=Age of Empires 2
-path2=D:\Games\Age of Empires 2\empires2.exe
+title2=A10 Cuba
+path2=D:\Games\A10\A10Cuba.exe
module2=
-opengllib2=
ver2=0
-flag2=134219814
-flagg2=1744896000
-tflag2=3
+flag2=34
+flagg2=0
+tflag2=258
initx2=0
inity2=0
minx2=0
@@ -55,15 +50,13 @@ posx2=50
posy2=50
sizx2=800
sizy2=600
-maxfps2=0
-title3=Age of Wonders
-path3=D:\Games\Age of Wonder\AoW.exe
+title3=Achtung Spitfire
+path3=D:\Games\Achtung Spitfire\ASP95.EXE
module3=
-opengllib3=
-ver3=1
-flag3=-2013265888
-flagg3=537919489
-tflag3=259
+ver3=0
+flag3=536870946
+flagg3=0
+tflag3=70
initx3=0
inity3=0
minx3=0
@@ -74,15 +67,13 @@ posx3=50
posy3=50
sizx3=800
sizy3=600
-maxfps3=0
-title4=Age of Empires 3
-path4=D:\Games\Age of Empires III\age3.exe
+title4=Actua Soccer 3
+path4=D:\Games\ActuaSoccer3\Soccer3.exe
module4=
-opengllib4=
ver4=0
-flag4=679477248
-flagg4=134217728
-tflag4=0
+flag4=671088674
+flagg4=256
+tflag4=263
initx4=0
inity4=0
minx4=0
@@ -93,20 +84,13 @@ posx4=50
posy4=50
sizx4=800
sizy4=600
-maxfps4=0
-initts0=0
-initts1=0
-initts2=-2
-initts3=0
-initts4=0
-title5=Agent Armstrong
-path5=D:\Games\Agent Armstrong\ARMSTRNG.EXE
+title5=AfterLife
+path5=d:\Games\ALIFE\ALIFE.EXE
module5=
-opengllib5=
ver5=1
-flag5=134217730
-flagg5=4194304
-tflag5=275
+flag5=142606370
+flagg5=160
+tflag5=259
initx5=0
inity5=0
minx5=0
@@ -117,16 +101,13 @@ posx5=50
posy5=50
sizx5=800
sizy5=600
-maxfps5=0
-initts5=0
-title6=Bomber Babe
-path6=D:\Games\Ludonic\Bomberbabe.exe
+title6=Age of Empires
+path6=D:\Games\Age of Empires\EMPIRES.EXE
module6=
-opengllib6=
ver6=0
-flag6=536870912
-flagg6=8
-tflag6=0
+flag6=402655267
+flagg6=536940560
+tflag6=3
initx6=0
inity6=0
minx6=0
@@ -137,15 +118,12 @@ posx6=50
posy6=50
sizx6=800
sizy6=600
-maxfps6=0
-initts6=0
-title7=BomberMan.exe
-path7=D:\Games\Bomber World\BomberMan.exe
+title7=Age of Empires 2
+path7=D:\Games\Age of Empires 2\empires2.exe
module7=
-opengllib7=
-ver7=7
-flag7=0
-flagg7=134217728
+ver7=0
+flag7=134217762
+flagg7=20480
tflag7=3
initx7=0
inity7=0
@@ -157,16 +135,13 @@ posx7=50
posy7=50
sizx7=800
sizy7=600
-maxfps7=0
-initts7=0
-title8=Chariots of War
-path8=D:\Games\Chariots of War\CoW.exe
+title8=Age of Empires the Rise of Rome
+path8=D:\Games\Age of Empires\EMPIRESX.EXE
module8=
-opengllib8=
ver8=0
-flag8=16417
-flagg8=134217793
-tflag8=3
+flag8=134217762
+flagg8=81920
+tflag8=0
initx8=0
inity8=0
minx8=0
@@ -177,16 +152,13 @@ posx8=50
posy8=50
sizx8=800
sizy8=600
-maxfps8=0
-initts8=0
-title9=Command & Conquer 3
-path9=D:\Games\Command & Conquer 3\RetailExe\1.0\cnc3game.dat
-module9=
-opengllib9=
-ver9=9
-flag9=33
-flagg9=134217728
-tflag9=0
+title9=Age of Wonders
+path9=D:\Games\Age of Wonders\AoW.exe
+module9=VideoP.dpl vcl30.dpl
+ver9=0
+flag9=813826050
+flagg9=537919505
+tflag9=3
initx9=0
inity9=0
minx9=0
@@ -197,16 +169,13 @@ posx9=50
posy9=50
sizx9=800
sizy9=600
-maxfps9=0
-initts9=0
-title10=Command & Conquer(tm) Tiberian Sun
-path10=D:\Games\Command & Conquer The First Decade\Command & Conquer(tm) Tiberian Sun(tm)\SUN\Game.exe
-module10=users32 kernel32 gdi32
-opengllib10=
+title10=Airline Tycoon Evolution
+path10=D:\Games\Airline.Tycoon.Evolution\AT.EXE
+module10=
ver10=0
-flag10=-1475338206
-flagg10=4194304
-tflag10=0
+flag10=402653217
+flagg10=5242880
+tflag10=259
initx10=0
inity10=0
minx10=0
@@ -217,15 +186,12 @@ posx10=50
posy10=50
sizx10=800
sizy10=600
-maxfps10=0
-initts10=0
-title11=Daikatana
-path11=D:\Games\Daikatana_FullRip\daikatana.exe
+title11=Alien Cabal 95
+path11=D:\Games\Alien_cabal\ACabal95.exe
module11=
-opengllib11=
ver11=0
-flag11=838860802
-flagg11=671219712
+flag11=71303200
+flagg11=0
tflag11=3
initx11=0
inity11=0
@@ -237,16 +203,13 @@ posx11=50
posy11=50
sizx11=800
sizy11=600
-maxfps11=0
-initts11=0
-title12=Dark Judgement
-path12=D:\Games\Dark Judgement\Dark Judgement.EXE
+title12=Alien vs. Predator
+path12=C:\Games\Alien vs Predator\AvP.exe
module12=
-opengllib12=
ver12=0
-flag12=67
-flagg12=1744830464
-tflag12=3
+flag12=8224
+flagg12=0
+tflag12=130
initx12=0
inity12=0
minx12=0
@@ -257,36 +220,30 @@ posx12=50
posy12=50
sizx12=800
sizy12=600
-maxfps12=0
-initts12=0
-title13=Diablo
-path13=D:\Games\Diablo\Diablo.exe
+title13=Aliens Nations Demo
+path13=C:\Games\aademo\Bin\AA.exe
module13=
-opengllib13=
ver13=0
-flag13=1212153890
-flagg13=1073807360
-tflag13=7
+flag13=134217762
+flagg13=0
+tflag13=0
initx13=0
inity13=0
minx13=0
miny13=0
maxx13=0
maxy13=0
-posx13=50
-posy13=50
+posx13=0
+posy13=0
sizx13=800
sizy13=600
-maxfps13=0
-initts13=0
-title14=Doom3.exe
-path14=D:\Games\Doom 3\Doom3.exe
+title14=America
+path14=D:\Games\America\america.exe
module14=
-opengllib14=
ver14=0
-flag14=0
-flagg14=134217728
-tflag14=259
+flag14=134234150
+flagg14=16
+tflag14=0
initx14=0
inity14=0
minx14=0
@@ -297,15 +254,12 @@ posx14=50
posy14=50
sizx14=800
sizy14=600
-maxfps14=0
-initts14=0
-title15=Dream Aquarium
-path15=D:\Program Files (x86)\Dream Aquarium\Dream_Aquarium.scr
+title15=American McGee's Alice Demo
+path15=D:\Games\American McGee's Alice Demo\alice.exe
module15=
-opengllib15=
-ver15=9
-flag15=545259521
-flagg15=987136
+ver15=10
+flag15=268435458
+flagg15=-2147352576
tflag15=0
initx15=0
inity15=0
@@ -317,16 +271,13 @@ posx15=50
posy15=50
sizx15=800
sizy15=600
-maxfps15=200
-initts15=8
-title16=Dungeon Keeper 2
-path16=D:\Games\Dungeon Keeper 2\DKII.exe
+title16=Ancient Conquest
+path16=D:\Games\Ancient Conquest\ANCIENT.EXE
module16=
-opengllib16=
ver16=0
-flag16=134217890
-flagg16=1648365568
-tflag16=3
+flag16=142606370
+flagg16=1048576
+tflag16=258
initx16=0
inity16=0
minx16=0
@@ -337,16 +288,13 @@ posx16=50
posy16=50
sizx16=800
sizy16=600
-maxfps16=50
-initts16=0
-title17=Dungeon Keeper 2 (GOG)
-path17=D:\Games\Dungeon Keeper 2 (GOG)\DKII.EXE
-module17=
-opengllib17=
-ver17=0
-flag17=134234146
+title17=Ancient Evil
+path17=C:\Games\Ancient Evil\RPG.EXE
+module17=DDW16.DLL
+ver17=1
+flag17=-2013249497
flagg17=0
-tflag17=3
+tflag17=2
initx17=0
inity17=0
minx17=0
@@ -357,15 +305,12 @@ posx17=50
posy17=50
sizx17=800
sizy17=600
-maxfps17=0
-initts17=0
-title18=Evil Dead Hail to the King
-path18=D:\Games\Evil Dead\EvilDead\EvilDead.exe
+title18=Ancient Evil Demo
+path18=C:\Games\Ancient Evil Curse of the Snake Cult\aecsc-demo.exe
module18=
-opengllib18=
-ver18=0
-flag18=39
-flagg18=134217728
+ver18=1
+flag18=134242336
+flagg18=0
tflag18=0
initx18=0
inity18=0
@@ -377,15 +322,12 @@ posx18=50
posy18=50
sizx18=800
sizy18=600
-maxfps18=0
-initts18=0
-title19=Fighting Force
-path19=D:\Games\Fighting Force\FFORCE.EXE
+title19=Armymen
+path19=C:\Games\armymen\Armymen.exe
module19=
-opengllib19=
ver19=0
-flag19=18
-flagg19=671088640
+flag19=134218274
+flagg19=1
tflag19=0
initx19=0
inity19=0
@@ -397,14 +339,11 @@ posx19=50
posy19=50
sizx19=800
sizy19=600
-maxfps19=0
-initts19=0
-title20=ForsakenHW.exe
-path20=D:\Games\Forsaken\ForsakenHW.exe
+title20=ArmyMen 2
+path20=C:\Games\army2\ArmyMen2.exe
module20=
-opengllib20=
ver20=0
-flag20=0
+flag20=402653730
flagg20=0
tflag20=0
initx20=0
@@ -417,15 +356,12 @@ posx20=50
posy20=50
sizx20=800
sizy20=600
-maxfps20=0
-initts20=0
-title21=ForsakenSW.exe
-path21=D:\Games\Forsaken\ForsakenSW.exe
+title21=Atomic Bomberman
+path21=C:\Games\Atomic Bomberman\BM95.EXE
module21=
-opengllib21=
ver21=0
-flag21=134217728
-flagg21=4
+flag21=2
+flagg21=0
tflag21=0
initx21=0
inity21=0
@@ -437,16 +373,13 @@ posx21=50
posy21=50
sizx21=800
sizy21=600
-maxfps21=0
-initts21=0
-title22=Garshasp
-path22=D:\Games\Garshasp\distro\Garshasp.exe
+title22=Axis & Allies Iron Blitz Edition
+path22=C:\Games\Axis & Allies Iron Blitz Edition\Axis & Allies\AxisAllies.exe
module22=
-opengllib22=
-ver22=9
-flag22=0
-flagg22=134348800
-tflag22=3
+ver22=0
+flag22=-2147483614
+flagg22=0
+tflag22=0
initx22=0
inity22=0
minx22=0
@@ -457,16 +390,13 @@ posx22=50
posy22=50
sizx22=800
sizy22=600
-maxfps22=0
-initts22=0
-title23=Grand Prix Legends (ITA)
-path23=D:\Games\gpl\gpl.exe
+title23=Baldies
+path23=C:\Games\Baldies for Win95\baldies.exe
module23=
-opengllib23=
-ver23=1
-flag23=1241513984
-flagg23=1207959624
-tflag23=11
+ver23=0
+flag23=537010210
+flagg23=0
+tflag23=0
initx23=0
inity23=0
minx23=0
@@ -475,18 +405,15 @@ maxx23=0
maxy23=0
posx23=50
posy23=50
-sizx23=0
-sizy23=0
-maxfps23=0
-initts23=0
-title24=Hexen 2 (OpenGL)
-path24=D:\Games\Hexen 2\GLH2.EXE
+sizx23=800
+sizy23=600
+title24=Battle Arena Toshinden 2
+path24=D:\Games\Battle Arena Toshinden 2\T2.EXE
module24=
-opengllib24=
ver24=0
-flag24=2
-flagg24=1180160
-tflag24=131
+flag24=134217761
+flagg24=134217808
+tflag24=3
initx24=0
inity24=0
minx24=0
@@ -497,16 +424,13 @@ posx24=50
posy24=50
sizx24=800
sizy24=600
-maxfps24=0
-initts24=0
-title25=Hitman - Codename 47
-path25=D:\Games\Hitman - Codename 47\Hitman.Exe
+title25=Beasts & Bumpkins
+path25=C:\Games\Beasts and Bumpkins\BEASTS.EXE
module25=
-opengllib25=
-ver25=7
-flag25=0
-flagg25=16
-tflag25=0
+ver25=0
+flag25=2105890
+flagg25=0
+tflag25=2
initx25=0
inity25=0
minx25=0
@@ -517,15 +441,12 @@ posx25=50
posy25=50
sizx25=800
sizy25=600
-maxfps25=0
-initts25=0
-title26=Hitman 2 Silent Assassin
-path26=D:\Games\Hitman 2 Silent Assassin\hitman2.exe
+title26=Beats of Rage
+path26=C:\Games\BOR\BeatsOfRage.exe
module26=
-opengllib26=
-ver26=8
-flag26=2
-flagg26=81920
+ver26=0
+flag26=537002018
+flagg26=0
tflag26=0
initx26=0
inity26=0
@@ -537,16 +458,13 @@ posx26=50
posy26=50
sizx26=800
sizy26=600
-maxfps26=0
-initts26=-2
-title27=Homeworld 2
-path27=D:\Games\Homeworld2\Bin\Release\Homeworld2.exe
-module27=Platform Objects
-opengllib27=
-ver27=12
-flag27=536870915
-flagg27=134414336
-tflag27=3
+title27=Beyond Good & Evil Demo
+path27=C:\Games\Beyond Good & Evil\BGE.exe
+module27=
+ver27=0
+flag27=0
+flagg27=0
+tflag27=0
initx27=0
inity27=0
minx27=0
@@ -557,16 +475,13 @@ posx27=50
posy27=50
sizx27=800
sizy27=600
-maxfps27=0
-initts27=-4
-title28=kingpin.exe
-path28=D:\Games\Kingpin (GOG)\kingpin.exe
+title28=Black Moon Lune Noire
+path28=C:\Games\Black Moon\Lune noire\Engine.exe
module28=
-opengllib28=
-ver28=1
-flag28=0
-flagg28=537001985
-tflag28=3
+ver28=0
+flag28=262179
+flagg28=0
+tflag28=0
initx28=0
inity28=0
minx28=0
@@ -577,36 +492,30 @@ posx28=50
posy28=50
sizx28=800
sizy28=600
-maxfps28=0
-initts28=0
-title29=Kohan II Kings of War
-path29=D:\Games\Kohan II Kings of War\k2.exe
+title29=Blood Omen Legacy of Kain
+path29=C:\Games\Blood Omen\KAIN.EXE
module29=
-opengllib29=
-ver29=9
-flag29=134217746
+ver29=0
+flag29=49190
flagg29=0
tflag29=0
initx29=0
inity29=0
minx29=0
miny29=0
-maxx29=800
-maxy29=600
+maxx29=0
+maxy29=0
posx29=50
posy29=50
sizx29=800
sizy29=600
-maxfps29=0
-initts29=0
-title30=Lord of Magic Special Edition
-path30=D:\Games\LoM\SIERRA\LOMSE\lomse.exe
+title30=Bonkheads
+path30=C:\Games\Bonkheads\Bonkheads.exe
module30=
-opengllib30=
ver30=0
-flag30=16546
-flagg30=0
-tflag30=0
+flag30=262690
+flagg30=16
+tflag30=78
initx30=0
inity30=0
minx30=0
@@ -617,16 +526,13 @@ posx30=50
posy30=50
sizx30=800
sizy30=600
-maxfps30=0
-initts30=0
-title31=Lords of Magic Special Edition (GOG)
-path31=D:\Games\Lords of Magic Special Edition (GOG)\lomse.exe
+title31=Bubble Bobble 2
+path31=C:\Games\bubble2\BOBO2.EXE
module31=
-opengllib31=
ver31=0
-flag31=134234274
-flagg31=2117632
-tflag31=3
+flag31=34
+flagg31=0
+tflag31=0
initx31=0
inity31=0
minx31=0
@@ -637,56 +543,47 @@ posx31=50
posy31=50
sizx31=800
sizy31=600
-maxfps31=50
-initts31=0
-title32=MDK 2
-path32=D:\Games\mdk2\mdk2Main.exe
+title32=Bug!
+path32=C:\Games\Bug\BUG!.EXE
module32=
-opengllib32=
ver32=0
-flag32=2
-flagg32=-1609433087
-tflag32=3
+flag32=134225954
+flagg32=32
+tflag32=2
initx32=0
inity32=0
minx32=0
miny32=0
maxx32=0
maxy32=0
-posx32=50
-posy32=50
+posx32=0
+posy32=0
sizx32=800
sizy32=600
-maxfps32=0
-initts32=0
-title33=MessiahD3D.exe
-path33=D:\Games\Messiah (GOG)\MessiahD3D.exe
+title33=Caesar III
+path33=C:\Games\Caesar III\c3.exe
module33=
-opengllib33=
ver33=0
-flag33=813694978
-flagg33=138543105
-tflag33=3
+flag33=-2147475422
+flagg33=0
+tflag33=0
initx33=0
inity33=0
minx33=0
miny33=0
maxx33=0
maxy33=0
-posx33=0
-posy33=0
+posx33=50
+posy33=50
sizx33=800
sizy33=600
-maxfps33=0
-initts33=0
-title34=Miracle Garden (hacked version)
-path34=D:\Games\Miracle Garden\Ææ¼£»¨Ô°\MG.exe
+title34=Championship Manager 99-00
+path34=C:\Games\CM9900\cm9900.exe
module34=
-opengllib34=
ver34=0
-flag34=34
-flagg34=1207959552
-tflag34=11
+flag34=10306
+flagg34=0
+tflag34=0
initx34=0
inity34=0
minx34=0
@@ -697,16 +594,13 @@ posx34=50
posy34=50
sizx34=800
sizy34=600
-maxfps34=0
-initts34=0
-title35=Miracle Garden (ufficial version)
-path35=D:\Games\Miracle Garden\Ææ¼£»¨Ô°\MG2.exe
+title35=Civilization Call to Power
+path35=C:\Games\civctp\Civilization_Call_To_Power\ctp_program\ctp\civctp.exe
module35=
-opengllib35=
ver35=0
-flag35=0
-flagg35=134217729
-tflag35=399
+flag35=545267746
+flagg35=0
+tflag35=0
initx35=0
inity35=0
minx35=0
@@ -717,14 +611,11 @@ posx35=50
posy35=50
sizx35=800
sizy35=600
-maxfps35=0
-initts35=0
-title36=Mission Humanity
-path36=D:\Games\Mission Humanity\Mission Humanity\mh.exe
+title36=Claw
+path36=C:\Games\claw\clawexe.exe
module36=
-opengllib36=
ver36=0
-flag36=-2147483598
+flag36=24610
flagg36=0
tflag36=0
initx36=0
@@ -737,16 +628,13 @@ posx36=50
posy36=50
sizx36=800
sizy36=600
-maxfps36=0
-initts36=0
-title37=Myst.exe
-path37=D:\Games\Myst (GOG)\Myst.exe
+title37=Commando's Behind Enemy Lines Demo
+path37=C:\Games\Commando's Behind Enemy Lines Demo\COMANDOS\Comandos.exe
module37=
-opengllib37=
ver37=0
-flag37=537001984
+flag37=1744838944
flagg37=0
-tflag37=3
+tflag37=64
initx37=0
inity37=0
minx37=0
@@ -757,16 +645,13 @@ posx37=50
posy37=50
sizx37=800
sizy37=600
-maxfps37=0
-initts37=0
-title38=Project IGI
-path38=D:\Games\Project IGI\pc\IGI.exe
+title38=Commandos II: Men of Courage
+path38=C:\Games\Commandos II\comm2.exe
module38=
-opengllib38=
ver38=0
-flag38=603996164
-flagg38=134217728
-tflag38=3
+flag38=-1207951008
+flagg38=0
+tflag38=0
initx38=0
inity38=0
minx38=0
@@ -777,16 +662,13 @@ posx38=50
posy38=50
sizx38=800
sizy38=600
-maxfps38=0
-initts38=0
-title39=Quake 2
-path39=D:\Games\QUAKE2\quake2.exe
+title39=Crazy Taxy
+path39=C:\Games\Crazy_Taxi\Crazy Taxi PC Version\crazy_taxi_pc.exe
module39=
-opengllib39=
-ver39=0
-flag39=671088640
-flagg39=671219712
-tflag39=3
+ver39=8
+flag39=536870945
+flagg39=0
+tflag39=0
initx39=0
inity39=0
minx39=0
@@ -797,16 +679,13 @@ posx39=50
posy39=50
sizx39=800
sizy39=600
-maxfps39=0
-initts39=0
-title40=Quake 3 Arena
-path40=D:\Games\Q3A\quake3.exe
+title40=Crush! Deluxe
+path40=C:\Games\Crush! Deluxe\CRUSHD.EXE
module40=
-opengllib40=
ver40=0
-flag40=0
-flagg40=671220224
-tflag40=3
+flag40=134492706
+flagg40=0
+tflag40=0
initx40=0
inity40=0
minx40=0
@@ -817,36 +696,30 @@ posx40=50
posy40=50
sizx40=800
sizy40=600
-maxfps40=0
-initts40=0
-title41=SeriousSam.exe
-path41=D:\Games\Serious Sam Demo\Bin\SeriousSam.exe
+title41=Cybermercs
+path41=C:\Games\cybermercs\cybermercs.exe
module41=
-opengllib41=
-ver41=9
-flag41=0
-flagg41=134348801
-tflag41=3
+ver41=0
+flag41=134234146
+flagg41=16
+tflag41=0
initx41=0
inity41=0
minx41=0
miny41=0
maxx41=0
maxy41=0
-posx41=0
-posy41=0
-sizx41=640
-sizy41=480
-maxfps41=0
-initts41=0
-title42=Shattered Galaxy
-path42=D:\Games\Shattered Galaxy\SG.exe
+posx41=50
+posy41=50
+sizx41=800
+sizy41=600
+title42=Daikatana
+path42=D:\Games\Daikatana\daikatana.exe
module42=
-opengllib42=
-ver42=0
-flag42=34
-flagg42=134217728
-tflag42=0
+ver42=10
+flag42=806486530
+flagg42=537002497
+tflag42=259
initx42=0
inity42=0
minx42=0
@@ -857,16 +730,13 @@ posx42=50
posy42=50
sizx42=800
sizy42=600
-maxfps42=0
-initts42=0
-title43=Shadow Company
+title43=Darius Gaiden
+path43=C:\Games\Darius_gaiden\DARIUS.EXE
module43=
-opengllib43=
-path43=D:\Games\shadow_company\shadow.exe
-ver43=1
-flag43=33554432
-flagg43=134217728
-tflag43=35
+ver43=0
+flag43=536870946
+flagg43=0
+tflag43=0
initx43=0
inity43=0
minx43=0
@@ -877,16 +747,13 @@ posx43=50
posy43=50
sizx43=800
sizy43=600
-maxfps43=0
-initts43=0
-title44=Stranded 2
-path44=D:\Games\Stranded 2\StrandedII.exe
+title44=Dark Colony the Council Wars
+path44=C:\Games\darkcolony_council\dc\DC16.EXE
module44=
-opengllib44=
ver44=0
-flag44=256
-flagg44=142622720
-tflag44=3
+flag44=268435462
+flagg44=0
+tflag44=0
initx44=0
inity44=0
minx44=0
@@ -897,16 +764,13 @@ posx44=50
posy44=50
sizx44=800
sizy44=600
-maxfps44=0
-initts44=0
-title45=The Grinch
-path45=D:\Games\The Grinch\bin\TheGrinch.exe
+title45=Darkstone
+path45=C:\Games\darkstone\Darkstone.exe
module45=
-opengllib45=
ver45=0
-flag45=536870914
-flagg45=-1476263936
-tflag45=3
+flag45=134234148
+flagg45=0
+tflag45=0
initx45=0
inity45=0
minx45=0
@@ -917,16 +781,13 @@ posx45=50
posy45=50
sizx45=800
sizy45=600
-maxfps45=0
-initts45=0
-title46=Total Immersion Racing
-path46=D:\Games\TIR\game\TiR.exe
+title46=Dave Mirra Freestyle BMX Demo
+path46=C:\Games\Dave Mirra Freestyle BMX\NgBMXDemo.exe
module46=
-opengllib46=
-ver46=7
-flag46=545259521
-flagg46=-402522111
-tflag46=3
+ver46=0
+flag46=8224
+flagg46=0
+tflag46=0
initx46=0
inity46=0
minx46=0
@@ -937,16 +798,13 @@ posx46=50
posy46=50
sizx46=800
sizy46=600
-maxfps46=0
-initts46=0
-title47=Total Annihilation Kingdoms
-path47=D:\Games\Total Annihilation Kingdoms\Kingdoms.exe
+title47=Daytona USA Deluxe
+path47=C:\Games\Daytona USA Deluxe\DAYTONA USA Deluxe.exe
module47=
-opengllib47=
ver47=0
-flag47=34
-flagg47=1207959552
-tflag47=263
+flag47=402661410
+flagg47=0
+tflag47=0
initx47=0
inity47=0
minx47=0
@@ -957,16 +815,13 @@ posx47=50
posy47=50
sizx47=800
sizy47=600
-maxfps47=0
-initts47=0
-title48=Unreal 2 the Awakening
-path48=D:\Games\Unreal II the Awakening (2003)\System\Unreal2.exe
+title48=Deadlock 2
+path48=C:\Games\deadlock2\DEADLOCK.EXE
module48=
-opengllib48=
-ver48=8
-flag48=8224
-flagg48=134348800
-tflag48=3
+ver48=0
+flag48=-2012995550
+flagg48=0
+tflag48=0
initx48=0
inity48=0
minx48=0
@@ -977,16 +832,13 @@ posx48=50
posy48=50
sizx48=800
sizy48=600
-maxfps48=0
-initts48=0
-title49=Urban Assault
-path49=D:\Games\Urban Assault\UA.EXE
+title49=Deeper Dungeons 95
+path49=C:\Games\Keeper95\Deeper95.exe
module49=
-opengllib49=
-ver49=7
-flag49=671238242
-flagg49=8388864
-tflag49=3
+ver49=0
+flag49=268460070
+flagg49=0
+tflag49=0
initx49=0
inity49=0
minx49=0
@@ -997,15 +849,12 @@ posx49=50
posy49=50
sizx49=800
sizy49=600
-maxfps49=0
-initts49=0
-title50=Urban Assault RIP
-path50=D:\Games\Urban Assault RIP\UA.EXE
+title50=Delta Force
+path50=C:\Games\Delta Force\Df.exe
module50=
-opengllib50=
ver50=0
-flag50=671236130
-flagg50=256
+flag50=34
+flagg50=0
tflag50=0
initx50=0
inity50=0
@@ -1017,16 +866,13 @@ posx50=50
posy50=50
sizx50=800
sizy50=600
-maxfps50=0
-initts50=0
-title51=Urban Assault XP
-path51=D:\Games\Urban Assault RIP\Ua_xp.exe
+title51=Dementia
+path51=C:\Games\dementia\program\CRUX.EXE -h
module51=
-opengllib51=
ver51=0
-flag51=671105058
-flagg51=256
-tflag51=0
+flag51=536887330
+flagg51=0
+tflag51=2
initx51=0
inity51=0
minx51=0
@@ -1037,15 +883,12 @@ posx51=50
posy51=50
sizx51=800
sizy51=600
-maxfps51=0
-initts51=0
-title52=Wargames
-path52=D:\Games\wargames\wargames.exe
+title52=Dethkarz
+path52=D:\Games\DethKarz\Dethkarz.exe
module52=
-opengllib52=
ver52=0
-flag52=268435490
-flagg52=-939524096
+flag52=0
+flagg52=0
tflag52=0
initx52=0
inity52=0
@@ -1057,16 +900,13 @@ posx52=50
posy52=50
sizx52=800
sizy52=600
-maxfps52=0
-initts52=0
-title53=WarWind
-path53=D:\Games\WarWind\WW.EXE
+title53=Devil Inside
+path53=C:\Games\Devil Inside\Devil.exe
module53=
-opengllib53=
ver53=0
-flag53=134234146
+flag53=32
flagg53=0
-tflag53=33
+tflag53=0
initx53=0
inity53=0
minx53=0
@@ -1077,16 +917,13 @@ posx53=50
posy53=50
sizx53=800
sizy53=600
-maxfps53=0
-initts53=0
-title54=WarWind 2
-path54=D:\Games\Warwind 2\WARWIND2.EXE
-module54=
-opengllib54=
+title54=Diablo
+path54=D:\Games\Diablo\Diablo.exe
+module54=diabloui storm haigu smackw32
ver54=1
-flag54=134217762
-flagg54=0
-tflag54=322
+flag54=138428450
+flagg54=101711872
+tflag54=259
initx54=0
inity54=0
minx54=0
@@ -1097,16 +934,13 @@ posx54=50
posy54=50
sizx54=800
sizy54=600
-maxfps54=0
-initts54=0
-title55=Worms 2 Armageddon
-path55=D:\Games\Worms 2 Armageddon\wa.exe
+title55=Dink Smallwood (BAD)
+path55=C:\Games\Dink SmallWood\Dink.exe
module55=
-opengllib55=
ver55=0
-flag55=134217762
+flag55=546
flagg55=0
-tflag55=0
+tflag55=258
initx55=0
inity55=0
minx55=0
@@ -1117,36 +951,30 @@ posx55=50
posy55=50
sizx55=800
sizy55=600
-maxfps55=0
-initts55=0
-title56=YS Origin
-path56=D:\Games\Ys Origin\FALCOM\YSO_WIN\YSO_WIN.patched.exe
+title56=Doom 64 Absolution
+path56=D:\Games\Doom 64\Bin\Absolution.exe
module56=
-opengllib56=
-ver56=0
-flag56=135266354
-flagg56=134217728
-tflag56=0
+ver56=8
+flag56=0
+flagg56=86016
+tflag56=259
initx56=0
inity56=0
minx56=0
miny56=0
-maxx56=800
-maxy56=600
+maxx56=0
+maxy56=0
posx56=50
posy56=50
sizx56=800
sizy56=600
-maxfps56=0
-initts56=0
-title57=Premier Manager 97
-path57=D:\Games\Premier_Manager_97\MANAGER.EXE
+title57=Drakan
+path57=C:\Games\Drakan\drakan.exe
module57=
-opengllib57=
-ver57=1
-flag57=2
-flagg57=135266304
-tflag57=3
+ver57=0
+flag57=536887328
+flagg57=0
+tflag57=0
initx57=0
inity57=0
minx57=0
@@ -1157,8 +985,3481 @@ posx57=50
posy57=50
sizx57=800
sizy57=600
+title58=Dream Aquarium
+path58=D:\Program Files\Dream Aquarium\Dream_Aquarium.scr
+module58=
+ver58=9
+flag58=679477249
+flagg58=303104
+tflag58=256
+initx58=0
+inity58=0
+minx58=0
+miny58=0
+maxx58=0
+maxy58=0
+posx58=50
+posy58=50
+sizx58=800
+sizy58=600
+title59=Dungeon Keeper 2 GOG release
+path59=D:\Games\Dungeon Keeper 2 GOG release\DKII.EXE
+module59=
+ver59=0
+flag59=134217762
+flagg59=4276224
+tflag59=6
+initx59=0
+inity59=0
+minx59=0
+miny59=0
+maxx59=0
+maxy59=0
+posx59=50
+posy59=50
+sizx59=800
+sizy59=600
+title60=Dungeon Keeper 95
+path60=D:\Games\Keeper95\KEEPER95.EXE
+module60=
+ver60=0
+flag60=134234150
+flagg60=0
+tflag60=64
+initx60=0
+inity60=0
+minx60=0
+miny60=0
+maxx60=0
+maxy60=0
+posx60=50
+posy60=50
+sizx60=800
+sizy60=600
+title61=Dungeon Keeper II
+path61=D:\Games\Dungeon Keeper 2\DKII.exe
+module61=
+ver61=0
+flag61=34
+flagg61=0
+tflag61=262
+initx61=0
+inity61=0
+minx61=0
+miny61=0
+maxx61=0
+maxy61=0
+posx61=150
+posy61=50
+sizx61=800
+sizy61=600
+title62=Emergency Fighters for life
+path62=D:\Games\Emergency\EMERGY.EXE
+module62=
+ver62=0
+flag62=134545443
+flagg62=18
+tflag62=3
+initx62=0
+inity62=0
+minx62=0
+miny62=0
+maxx62=0
+maxy62=0
+posx62=50
+posy62=50
+sizx62=800
+sizy62=600
+title63=Enemy Infestation
+path63=C:\Games\Enemy Infestation (1998)\Ei.exe
+module63=
+ver63=0
+flag63=38
+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=Evil Genius
+path64=D:\Games\Evil Genius\ReleaseExe\EvilGenius_Cracked.exe
+module64=
+ver64=9
+flag64=2053
+flagg64=80
+tflag64=0
+initx64=0
+inity64=0
+minx64=0
+miny64=0
+maxx64=0
+maxy64=0
+posx64=50
+posy64=50
+sizx64=800
+sizy64=600
+title65=Expendable
+path65=C:\Games\eXpendable\go.exe -nocputest
+module65=
+ver65=0
+flag65=402653280
+flagg65=1
+tflag65=2
+initx65=0
+inity65=0
+minx65=0
+miny65=0
+maxx65=0
+maxy65=0
+posx65=50
+posy65=50
+sizx65=800
+sizy65=600
+title66=Fallen Heaven (BAD)
+path66=C:\Games\falhaven\Exe\FALLEN.EXE
+module66=
+ver66=0
+flag66=679485962
+flagg66=32
+tflag66=0
+initx66=0
+inity66=0
+minx66=0
+miny66=0
+maxx66=0
+maxy66=0
+posx66=0
+posy66=0
+sizx66=800
+sizy66=600
+title67=Fallout
+path67=D:\Games\Fallout\FALLOUTW.EXE
+module67=
+ver67=1
+flag67=134217734
+flagg67=16
+tflag67=0
+initx67=0
+inity67=0
+minx67=0
+miny67=0
+maxx67=0
+maxy67=0
+posx67=50
+posy67=50
+sizx67=800
+sizy67=600
+title68=FreakOut
+path68=C:\Games\Freak Out - Extreme Freeride\FreakOut.exe
+module68=
+ver68=9
+flag68=0
+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=Funtracks
+path69=C:\Games\Funtracks\Fun_win.exe
+module69=
+ver69=1
+flag69=2
+flagg69=0
+tflag69=258
+initx69=0
+inity69=0
+minx69=0
+miny69=0
+maxx69=0
+maxy69=0
+posx69=50
+posy69=50
+sizx69=800
+sizy69=600
+title70=Galapagos
+path70=C:\Games\Galapagos\GALA.EXE
+module70=
+ver70=0
+flag70=134217760
+flagg70=0
+tflag70=0
+initx70=0
+inity70=0
+minx70=0
+miny70=0
+maxx70=0
+maxy70=0
+posx70=50
+posy70=50
+sizx70=800
+sizy70=600
+title71=Gangsters
+path71=C:\Games\Gangsters\gangsters.exe
+module71=
+ver71=0
+flag71=134217762
+flagg71=0
+tflag71=2
+initx71=0
+inity71=0
+minx71=0
+miny71=0
+maxx71=0
+maxy71=0
+posx71=100
+posy71=100
+sizx71=800
+sizy71=600
+title72=GeneRally
+path72=C:\Games\generally105\GeneRally.exe
+module72=
+ver72=0
+flag72=34
+flagg72=0
+tflag72=0
+initx72=0
+inity72=0
+minx72=0
+miny72=0
+maxx72=0
+maxy72=0
+posx72=50
+posy72=50
+sizx72=800
+sizy72=600
+title73=Get Medieval
+path73=C:\Games\Get Medieval\MEDIEVAL.EXE
+module73=
+ver73=0
+flag73=34
+flagg73=2
+tflag73=0
+initx73=0
+inity73=0
+minx73=0
+miny73=0
+maxx73=0
+maxy73=0
+posx73=0
+posy73=0
+sizx73=800
+sizy73=600
+title74=Gift
+path74=C:\Games\Gift\Gift.exe
+module74=
+ver74=0
+flag74=4196384
+flagg74=0
+tflag74=34
+initx74=0
+inity74=0
+minx74=0
+miny74=0
+maxx74=0
+maxy74=0
+posx74=0
+posy74=0
+sizx74=0
+sizy74=0
+title75=Golden Age of Racing
+path75=C:\Games\Golden Age of Racing\GAOR.exe
+module75=
+ver75=0
+flag75=34
+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=Gp500 for Win2K
+path76=C:\Games\gp500\gp500_win2k.exe
+module76=
+ver76=1
+flag76=545677860
+flagg76=0
+tflag76=2
+initx76=0
+inity76=0
+minx76=0
+miny76=0
+maxx76=0
+maxy76=0
+posx76=50
+posy76=50
+sizx76=800
+sizy76=600
+title77=G-Police
+path77=C:\Games\gpolice\GPOLICE.EXE
+module77=
+ver77=0
+flag77=67125286
+flagg77=0
+tflag77=2
+initx77=0
+inity77=0
+minx77=0
+miny77=0
+maxx77=0
+maxy77=0
+posx77=50
+posy77=50
+sizx77=800
+sizy77=600
+title78=Grand Prix Legends
+path78=D:\Games\Grand Prix Legends\gpl\gpl.exe
+module78=
+ver78=0
+flag78=-1979678687
+flagg78=4
+tflag78=271
+initx78=0
+inity78=0
+minx78=0
+miny78=0
+maxx78=0
+maxy78=0
+posx78=50
+posy78=50
+sizx78=640
+sizy78=480
+title79=Grim Fandango Demo
+path79=C:\Games\GrimWebDemo\grimdemo.exe
+module79=
+ver79=0
+flag79=34
+flagg79=0
+tflag79=258
+initx79=0
+inity79=0
+minx79=0
+miny79=0
+maxx79=0
+maxy79=0
+posx79=50
+posy79=50
+sizx79=800
+sizy79=600
+title80=Half-Life Blue-Shift (d3d)
+path80=D:\Games\Half-Life Blue-Shift\bshift.exe
+module80=
+ver80=7
+flag80=1207959554
+flagg80=513
+tflag80=258
+initx80=0
+inity80=0
+minx80=0
+miny80=0
+maxx80=0
+maxy80=0
+posx80=50
+posy80=50
+sizx80=800
+sizy80=600
+title81=Half-Life Uplink Demo
+path81=D:\Games\Half-Life Uplink\hldemo.exe
+module81=
+ver81=1
+flag81=1073741826
+flagg81=16384
+tflag81=2
+initx81=0
+inity81=0
+minx81=0
+miny81=0
+maxx81=0
+maxy81=0
+posx81=50
+posy81=50
+sizx81=640
+sizy81=480
+title82=Halo Combat Evolved
+path82=D:\Games\Halo Combat Evolved\halo.exe
+module82=
+ver82=9
+flag82=570425377
+flagg82=-2147483648
+tflag82=478
+initx82=0
+inity82=0
+minx82=0
+miny82=0
+maxx82=0
+maxy82=0
+posx82=50
+posy82=50
+sizx82=800
+sizy82=600
+title83=Heart of Darkness
+path83=d:\Games\Heart of Darkness\HODWin32.exe
+module83=
+ver83=0
+flag83=8226
+flagg83=2179072
+tflag83=0
+initx83=0
+inity83=0
+minx83=0
+miny83=0
+maxx83=0
+maxy83=0
+posx83=50
+posy83=50
+sizx83=800
+sizy83=600
+title84=Heavy Metal FAKK 2
+path84=C:\Games\Heavy Metal - FAKK2\fakk2.exe
+module84=
+ver84=0
+flag84=33554464
+flagg84=64
+tflag84=2
+initx84=0
+inity84=0
+minx84=0
+miny84=0
+maxx84=0
+maxy84=0
+posx84=50
+posy84=50
+sizx84=800
+sizy84=600
+title85=HellCopter
+path85=C:\Games\hellcop\HCopter.exe
+module85=
+ver85=0
+flag85=-2013249500
+flagg85=256
+tflag85=0
+initx85=0
+inity85=0
+minx85=0
+miny85=0
+maxx85=0
+maxy85=0
+posx85=50
+posy85=50
+sizx85=800
+sizy85=600
+title86=Heroes of Might & Magic III Demo
+path86=C:\Games\Heroes III Demo\h3demo.exe
+module86=
+ver86=1
+flag86=134234146
+flagg86=0
+tflag86=2
+initx86=0
+inity86=0
+minx86=0
+miny86=0
+maxx86=0
+maxy86=0
+posx86=50
+posy86=50
+sizx86=800
+sizy86=600
+title87=Hexen II (opengl)
+path87=D:\Games\Hexen II\glh2.exe
+module87=
+ver87=10
+flag87=3
+flagg87=212993
+tflag87=387
+initx87=0
+inity87=0
+minx87=0
+miny87=0
+maxx87=0
+maxy87=0
+posx87=50
+posy87=50
+sizx87=800
+sizy87=600
+title88=Hexen II (software)
+path88=D:\Games\Hexen II\h2.exe
+module88=
+ver88=10
+flag88=671088642
+flagg88=1130496
+tflag88=0
+initx88=0
+inity88=0
+minx88=0
+miny88=0
+maxx88=0
+maxy88=0
+posx88=50
+posy88=50
+sizx88=800
+sizy88=600
+title89=hover
+path89=C:\Games\hover\hoverX.exe
+module89=
+ver89=0
+flag89=8224
+flagg89=0
+tflag89=0
+initx89=0
+inity89=0
+minx89=0
+miny89=0
+maxx89=0
+maxy89=0
+posx89=50
+posy89=50
+sizx89=800
+sizy89=600
+title90=Hyperblade
+path90=D:\Games\Hyperblade\HYPERX.EXE
+module90=
+ver90=0
+flag90=134217891
+flagg90=3231762
+tflag90=2
+initx90=0
+inity90=0
+minx90=0
+miny90=0
+maxx90=0
+maxy90=0
+posx90=50
+posy90=50
+sizx90=800
+sizy90=600
+title91=Idinaloq
+path91=C:\Games\idina101\idinaloq.exe
+module91=
+ver91=0
+flag91=32
+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=Immanis
+path92=C:\Games\Immanis CD release\immanis.exe
+module92=
+ver92=0
+flag92=24611
+flagg92=0
+tflag92=0
+initx92=0
+inity92=0
+minx92=0
+miny92=0
+maxx92=0
+maxy92=0
+posx92=50
+posy92=50
+sizx92=800
+sizy92=600
+title93=Immanis (v2)
+path93=C:\Games\Immanis CD release\immanis_v2.exe
+module93=
+ver93=0
+flag93=268460067
+flagg93=0
+tflag93=0
+initx93=0
+inity93=0
+minx93=0
+miny93=0
+maxx93=0
+maxy93=0
+posx93=50
+posy93=50
+sizx93=800
+sizy93=600
+title94=In the Hunt
+path94=C:\Games\In The Hunt\e8.exe
+module94=
+ver94=0
+flag94=2
+flagg94=0
+tflag94=0
+initx94=0
+inity94=0
+minx94=0
+miny94=0
+maxx94=0
+maxy94=0
+posx94=50
+posy94=50
+sizx94=800
+sizy94=600
+title95=Incoming Forces
+path95=D:\Games\Incoming Forces\forces.exe
+module95=
+ver95=8
+flag95=134217760
+flagg95=0
+tflag95=2
+initx95=0
+inity95=0
+minx95=0
+miny95=0
+maxx95=0
+maxy95=0
+posx95=50
+posy95=50
+sizx95=800
+sizy95=600
+title96=International Superstar Soccer 3
+path96=C:\Games\ISS_3\iss3.exe
+module96=
+ver96=8
+flag96=545267715
+flagg96=0
+tflag96=0
+initx96=0
+inity96=0
+minx96=0
+miny96=0
+maxx96=0
+maxy96=0
+posx96=50
+posy96=50
+sizx96=800
+sizy96=600
+title97=Jacked
+path97=D:\Games\Jacked\Jacked.exe
+module97=winmm
+ver97=9
+flag97=537010208
+flagg97=196608
+tflag97=258
+initx97=0
+inity97=0
+minx97=0
+miny97=0
+maxx97=0
+maxy97=0
+posx97=50
+posy97=50
+sizx97=800
+sizy97=600
+title98=Jedi Knight II Jedi Outcast
+path98=D:\Games\Jedi Knight II Jedi Outcast\GameData\jk2sp.exe
+module98=
+ver98=0
+flag98=0
+flagg98=512
+tflag98=266
+initx98=0
+inity98=0
+minx98=0
+miny98=0
+maxx98=0
+maxy98=0
+posx98=50
+posy98=50
+sizx98=800
+sizy98=600
+title99=Jet Moto
+path99=M:\JETMOTO.EXE
+module99=
+ver99=0
+flag99=139298
+flagg99=0
+tflag99=0
+initx99=0
+inity99=0
+minx99=0
+miny99=0
+maxx99=0
+maxy99=0
+posx99=50
+posy99=50
+sizx99=800
+sizy99=600
+title100=Kiss Psyco Cyrcus
+path100=C:\Games\Psycho\client.exe
+module100=d3d.ren
+ver100=7
+flag100=537018404
+flagg100=0
+tflag100=0
+initx100=0
+inity100=0
+minx100=0
+miny100=0
+maxx100=0
+maxy100=0
+posx100=50
+posy100=50
+sizx100=800
+sizy100=600
+title101=Krazy Ivan
+path101=C:\Games\Krazy Ivan\KRAZY.EXE
+module101=
+ver101=0
+flag101=536870914
+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=Last Bronx
+path102=C:\Games\Last_Bronx\LB.EXE
+module102=
+ver102=0
+flag102=40994
+flagg102=0
+tflag102=64
+initx102=0
+inity102=0
+minx102=0
+miny102=0
+maxx102=0
+maxy102=0
+posx102=50
+posy102=50
+sizx102=800
+sizy102=600
+title103=Lionheart
+path103=C:\Games\Lionheart Demo\Lionheart.exe
+module103=
+ver103=0
+flag103=-2147483612
+flagg103=0
+tflag103=0
+initx103=0
+inity103=0
+minx103=0
+miny103=0
+maxx103=0
+maxy103=0
+posx103=50
+posy103=50
+sizx103=800
+sizy103=600
+title104=lithtech.exe
+path104=D:\Games\NOLF Technology Demo\lithtech.exe
+module104=
+ver104=7
+flag104=0
+flagg104=512
+tflag104=258
+initx104=0
+inity104=0
+minx104=0
+miny104=0
+maxx104=0
+maxy104=0
+posx104=50
+posy104=50
+sizx104=800
+sizy104=600
+title105=Lords of the Realm 2
+path105=D:\Games\L2SIEGE\LORDS2.EXE
+module105=
+ver105=0
+flag105=38
+flagg105=65536
+tflag105=9
+initx105=0
+inity105=0
+minx105=0
+miny105=0
+maxx105=0
+maxy105=0
+posx105=50
+posy105=50
+sizx105=800
+sizy105=600
+title106=M.A.X. 2
+path106=C:\Games\MAX 2\MAX_2\MAX2\MAX2.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=M1 Tank Platoon 2
+path107=C:\Games\M1 Tank Platoon 2\M1TP2.exe
+module107=
+ver107=8
+flag107=34
+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=Mario Worlds (stripped PE)
+path108=C:\Games\Mario Worlds\Mario Worlds.exe
+module108=
+ver108=1
+flag108=2
+flagg108=1
+tflag108=386
+initx108=0
+inity108=0
+minx108=0
+miny108=0
+maxx108=0
+maxy108=0
+posx108=50
+posy108=50
+sizx108=800
+sizy108=600
+title109=Masters of Orion 2
+path109=C:\Games\Orion2\Orion95.exe
+module109=
+ver109=0
+flag109=34
+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=Microsoft Flight Simulator 98
+path110=C:\Games\Flight Simulator 98\FLTSIM98.EXE
+module110=
+ver110=0
+flag110=288
+flagg110=0
+tflag110=0
+initx110=0
+inity110=0
+minx110=0
+miny110=0
+maxx110=0
+maxy110=0
+posx110=50
+posy110=50
+sizx110=800
+sizy110=600
+title111=Microsoft Midtown Madness
+path111=C:\Games\Midtown Madness\midtown.exe
+module111=
+ver111=0
+flag111=8192
+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=Microsoft Midtown Madness Trial (BAD)
+path112=C:\Games\Midtown Madness Trial\midtrial.exe
+module112=
+ver112=0
+flag112=2
+flagg112=0
+tflag112=0
+initx112=0
+inity112=0
+minx112=0
+miny112=0
+maxx112=0
+maxy112=0
+posx112=0
+posy112=0
+sizx112=800
+sizy112=600
+title113=Microsoft Motocross Madness 2 (BAD!!)
+path113=C:\Games\Motocross Madness 2\MCM2.cracked.EXE
+module113=
+ver113=7
+flag113=201326664
+flagg113=1
+tflag113=82
+initx113=0
+inity113=0
+minx113=0
+miny113=0
+maxx113=0
+maxy113=0
+posx113=50
+posy113=50
+sizx113=800
+sizy113=600
+title114=Microsoft Motocross Madness Trial (BAD)
+path114=C:\Games\Motocross Madness Trial\mcm.exe
+module114=
+ver114=1
+flag114=134225952
+flagg114=0
+tflag114=130
+initx114=0
+inity114=0
+minx114=0
+miny114=0
+maxx114=0
+maxy114=0
+posx114=50
+posy114=50
+sizx114=0
+sizy114=0
+title115=Mission Force Cyberstorm (BAD ?)
+path115=C:\Games\SIERRA\CSTORM\CSTORM.EXE
+module115=
+ver115=0
+flag115=33562658
+flagg115=0
+tflag115=0
+initx115=0
+inity115=0
+minx115=0
+miny115=0
+maxx115=0
+maxy115=0
+posx115=50
+posy115=50
+sizx115=0
+sizy115=0
+title116=Monopoly 3D
+path116=C:\Games\Monopoly (Edition 3D)\Monopoly.exe
+module116=
+ver116=0
+flag116=134244388
+flagg116=0
+tflag116=2
+initx116=0
+inity116=0
+minx116=0
+miny116=0
+maxx116=0
+maxy116=0
+posx116=50
+posy116=50
+sizx116=800
+sizy116=600
+title117=Monster Truck Madness 2
+path117=C:\Games\Monster Truck Madness 2\Monster.EXE
+module117=
+ver117=1
+flag117=34
+flagg117=1
+tflag117=0
+initx117=0
+inity117=0
+minx117=0
+miny117=0
+maxx117=0
+maxy117=0
+posx117=50
+posy117=50
+sizx117=800
+sizy117=600
+title118=Moto Racer Demo
+path118=D:\Games\Moto Racer Demo\PlayDemo.exe
+module118=
+ver118=0
+flag118=167903267
+flagg118=192
+tflag118=14
+initx118=0
+inity118=0
+minx118=0
+miny118=0
+maxx118=0
+maxy118=0
+posx118=50
+posy118=50
+sizx118=800
+sizy118=600
+title119=Necrodrome
+path119=C:\Games\Necrodome\NECRO95.EXE
+module119=
+ver119=0
+flag119=268435495
+flagg119=256
+tflag119=0
+initx119=0
+inity119=0
+minx119=0
+miny119=0
+maxx119=0
+maxy119=0
+posx119=50
+posy119=50
+sizx119=800
+sizy119=600
+title120=Need For Speed - Porsche 2000
+path120=C:\Games\Need For Speed - Porsche 2000\Porsche.exe
+module120=
+ver120=7
+flag120=0
+flagg120=0
+tflag120=258
+initx120=0
+inity120=0
+minx120=0
+miny120=0
+maxx120=0
+maxy120=0
+posx120=50
+posy120=50
+sizx120=800
+sizy120=600
+title121=Netstorm Islands at War
+path121=C:\Games\Netstorm\Netstorm.exe
+module121=
+ver121=0
+flag121=2
+flagg121=0
+tflag121=0
+initx121=0
+inity121=0
+minx121=0
+miny121=0
+maxx121=0
+maxy121=0
+posx121=50
+posy121=50
+sizx121=800
+sizy121=600
+title122=Nox
+path122=d:\Games\Nox\Game.exe
+module122=
+ver122=0
+flag122=939540515
+flagg122=0
+tflag122=386
+initx122=0
+inity122=0
+minx122=0
+miny122=0
+maxx122=0
+maxy122=0
+posx122=50
+posy122=50
+sizx122=800
+sizy122=600
+title123=Pacific General
+path123=C:\Games\Pacific General\PACGEN.EXE
+module123=
+ver123=0
+flag123=8226
+flagg123=0
+tflag123=2
+initx123=0
+inity123=0
+minx123=0
+miny123=0
+maxx123=0
+maxy123=0
+posx123=50
+posy123=50
+sizx123=800
+sizy123=600
+title124=Project Nomads Demo (BAD)
+path124=C:\Games\Project Nomads Demo\bin\win32\nomads.exe
+module124=
+ver124=8
+flag124=-1476394912
+flagg124=256
+tflag124=258
+initx124=0
+inity124=0
+minx124=0
+miny124=0
+maxx124=0
+maxy124=0
+posx124=50
+posy124=50
+sizx124=800
+sizy124=600
+title125=Puzzle Bubble
+path125=C:\Games\Puzzle Bubble\PB.EXE
+module125=
+ver125=0
+flag125=34
+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=Quake 2
+path126=D:\Games\QUAKE2\quake2.exe
+module126=
+ver126=10
+flag126=671089154
+flagg126=-1476263359
+tflag126=259
+initx126=0
+inity126=0
+minx126=0
+miny126=0
+maxx126=0
+maxy126=0
+posx126=50
+posy126=50
+sizx126=800
+sizy126=600
+title127=Quake 3 Arena
+path127=D:\Games\Q3A\quake3.exe
+module127=
+ver127=10
+flag127=0
+flagg127=1180160
+tflag127=3
+initx127=0
+inity127=0
+minx127=0
+miny127=0
+maxx127=0
+maxy127=0
+posx127=50
+posy127=50
+sizx127=800
+sizy127=600
+title128=Raiden II
+path128=C:\Games\Raiden II\Raiden II\RAIDENII.EXE
+module128=
+ver128=0
+flag128=34
+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=Railroad Tycoon II
+path129=C:\Games\Railroad.Tycoon.II\RT2.EXE
+module129=
+ver129=1
+flag129=134225954
+flagg129=0
+tflag129=0
+initx129=0
+inity129=0
+minx129=0
+miny129=0
+maxx129=0
+maxy129=0
+posx129=50
+posy129=50
+sizx129=800
+sizy129=600
+title130=Rally Championship 2000
+path130=C:\Games\Rally Championship 2000\RAL.EXE
+module130=
+ver130=0
+flag130=67108864
+flagg130=0
+tflag130=2
+initx130=0
+inity130=0
+minx130=0
+miny130=0
+maxx130=0
+maxy130=0
+posx130=50
+posy130=50
+sizx130=800
+sizy130=600
+title131=Rebel Moon Rising
+path131=C:\Games\Rebel Moon Rising\Rmr.exe
+module131=
+ver131=0
+flag131=0
+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=Redline - Gang Warfare 2066
+path132=C:\Games\Redline - Gang Warfare 2066\redline.exe
+module132=
+ver132=0
+flag132=32
+flagg132=0
+tflag132=386
+initx132=0
+inity132=0
+minx132=0
+miny132=0
+maxx132=0
+maxy132=0
+posx132=50
+posy132=50
+sizx132=800
+sizy132=600
+title133=Resident Evil
+path133=D:\Games\Resident Evil\residentevil.patched.exe
+module133=
+ver133=1
+flag133=134217827
+flagg133=-2147483520
+tflag133=2
+initx133=0
+inity133=0
+minx133=0
+miny133=0
+maxx133=0
+maxy133=0
+posx133=50
+posy133=50
+sizx133=800
+sizy133=600
+title134=Return to Castle Wolfenstein
+path134=D:\Games\Return to Castle Wolfenstein (2001)\Return to Castle Wolfenstein\WolfSP.exe
+module134=
+ver134=0
+flag134=134234114
+flagg134=-2147270656
+tflag134=256
+initx134=0
+inity134=0
+minx134=0
+miny134=0
+maxx134=0
+maxy134=0
+posx134=50
+posy134=50
+sizx134=800
+sizy134=600
+title135=Re-Volt
+path135=C:\Games\Re-Volt\REVOLT.EXE
+module135=
+ver135=0
+flag135=134217792
+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=Road Rash
+path136=D:\Games\Road Rash\ROADRASH\ROADRASH.EXE
+module136=
+ver136=0
+flag136=134217730
+flagg136=0
+tflag136=386
+initx136=0
+inity136=0
+minx136=0
+miny136=0
+maxx136=0
+maxy136=0
+posx136=50
+posy136=50
+sizx136=800
+sizy136=600
+title137=Road Rash Demo
+path137=D:\Games\RoadRash DEMO\DEMORASH.EXE
+module137=
+ver137=0
+flag137=134218242
+flagg137=0
+tflag137=258
+initx137=0
+inity137=0
+minx137=0
+miny137=0
+maxx137=0
+maxy137=0
+posx137=50
+posy137=50
+sizx137=800
+sizy137=600
+title138=RollerCoaster Tycoon 2 Mini Game
+path138=C:\Games\RollerCoaster Tycoon 2 Mini Game\rct2.exe
+module138=
+ver138=1
+flag138=536870946
+flagg138=0
+tflag138=0
+initx138=0
+inity138=0
+minx138=0
+miny138=0
+maxx138=0
+maxy138=0
+posx138=0
+posy138=0
+sizx138=800
+sizy138=600
+title139=Sega Rally 2 Championship
+path139=C:\Games\Sega Rally 2 Championship\SEGA RALLY 2.exe
+module139=
+ver139=1
+flag139=268435488
+flagg139=2
+tflag139=0
+initx139=0
+inity139=0
+minx139=0
+miny139=0
+maxx139=0
+maxy139=0
+posx139=0
+posy139=0
+sizx139=800
+sizy139=600
+title140=Sentinel Returns
+path140=D:\Games\Sentinel Returns\Sentinel.exe
+module140=
+ver140=1
+flag140=3
+flagg140=-2147483648
+tflag140=0
+initx140=0
+inity140=0
+minx140=0
+miny140=0
+maxx140=0
+maxy140=0
+posx140=50
+posy140=50
+sizx140=800
+sizy140=600
+title141=Shadow Master (TBD)
+path141=C:\Games\Shadow Master\rmg.exe
+module141=
+ver141=1
+flag141=32
+flagg141=256
+tflag141=450
+initx141=0
+inity141=0
+minx141=0
+miny141=0
+maxx141=0
+maxy141=0
+posx141=50
+posy141=50
+sizx141=800
+sizy141=600
+title142=Sid Meier's SimGolf Demo
+path142=C:\Games\Sid Meier's SimGolf Demo\golf.exe
+module142=jgl.dll
+ver142=0
+flag142=33554434
+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=Sin, Wages of (sw renderer)
+path143=D:\Games\sin\sin.exe
+module143=ref_gl.dll ref_soft.dll
+ver143=10
+flag143=402670082
+flagg143=513
+tflag143=386
+initx143=0
+inity143=0
+minx143=0
+miny143=0
+maxx143=0
+maxy143=0
+posx143=50
+posy143=50
+sizx143=800
+sizy143=600
+title144=SleepWalker
+path144=C:\Games\SleepWalker\Sleepy.exe
+module144=
+ver144=0
+flag144=301989954
+flagg144=0
+tflag144=198
+initx144=0
+inity144=0
+minx144=0
+miny144=0
+maxx144=0
+maxy144=0
+posx144=50
+posy144=50
+sizx144=800
+sizy144=600
+title145=SnowBoard Racer
+path145=C:\Games\Snowboard Racer\SnowBoard.exe
+module145=
+ver145=0
+flag145=268443681
+flagg145=0
+tflag145=0
+initx145=0
+inity145=0
+minx145=0
+miny145=0
+maxx145=0
+maxy145=0
+posx145=50
+posy145=50
+sizx145=800
+sizy145=600
+title146=Solaris (~BAD)
+path146=c:\Games\Solaris\solaris.exe
+module146=
+ver146=7
+flag146=973078627
+flagg146=1
+tflag146=2
+initx146=0
+inity146=0
+minx146=0
+miny146=0
+maxx146=0
+maxy146=0
+posx146=50
+posy146=50
+sizx146=800
+sizy146=600
+title147=Soldiers at War
+path147=D:\Games\Soldiers at War\SAW_Game.exe
+module147=
+ver147=0
+flag147=671359010
+flagg147=64
+tflag147=0
+initx147=0
+inity147=0
+minx147=0
+miny147=0
+maxx147=0
+maxy147=0
+posx147=50
+posy147=50
+sizx147=640
+sizy147=480
+title148=Sonic 3
+path148=C:\Games\Sonic 3 + Sonic et Knuckles\Sonic 3\SONIC3K.EXE
+module148=
+ver148=1
+flag148=546
+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=Sonic 3D Blast
+path149=C:\Games\Sonic3D\pcsonic.exe
+module149=
+ver149=0
+flag149=134217762
+flagg149=0
+tflag149=0
+initx149=0
+inity149=0
+minx149=0
+miny149=0
+maxx149=0
+maxy149=0
+posx149=50
+posy149=50
+sizx149=800
+sizy149=600
+title150=Sonic R
+path150=C:\Games\SonicR\sonicr.exe
+module150=
+ver150=0
+flag150=8288
+flagg150=0
+tflag150=0
+initx150=0
+inity150=0
+minx150=0
+miny150=0
+maxx150=0
+maxy150=0
+posx150=50
+posy150=50
+sizx150=800
+sizy150=600
+title151=Soulbringer
+path151=C:\Games\SoulBringer\SoulbringeVCnoeax.exe
+module151=
+ver151=0
+flag151=143024174
+flagg151=0
+tflag151=0
+initx151=0
+inity151=0
+minx151=0
+miny151=0
+maxx151=0
+maxy151=0
+posx151=50
+posy151=50
+sizx151=800
+sizy151=600
+title152=Speedboat Attack (BAD)
+path152=C:\Games\Speedboat Attack\SBOAT.EXE
+module152=
+ver152=0
+flag152=541073954
+flagg152=0
+tflag152=2
+initx152=0
+inity152=0
+minx152=0
+miny152=0
+maxx152=0
+maxy152=0
+posx152=50
+posy152=50
+sizx152=800
+sizy152=600
+title153=Star trek Klingon Honor Guard
+path153=D:\Games\Star trek Klingon Honor Guard\System\Khg.exe
+module153=OGIDrv.dll
+ver153=10
+flag153=0
+flagg153=131585
+tflag153=387
+initx153=0
+inity153=0
+minx153=0
+miny153=0
+maxx153=0
+maxy153=0
+posx153=50
+posy153=50
+sizx153=800
+sizy153=600
+title154=Star Wars Episode 1 Racer
+path154=C:\Games\sw racer\SWEP1RCR.EXE
+module154=
+ver154=0
+flag154=142606368
+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=Star Wars Jedi Knight Jedi Academy
+path155=D:\Games\Star_Wars_Jedi_Knight_Jedi_Academy\GameData\jasp.exe
+module155=
+ver155=10
+flag155=0
+flagg155=65536
+tflag155=2
+initx155=0
+inity155=0
+minx155=0
+miny155=0
+maxx155=0
+maxy155=0
+posx155=50
+posy155=50
+sizx155=800
+sizy155=600
+title156=Star Wars: Jedi Knight
+path156=C:\Games\Jedi Knight\Jedi Knight\JK.EXE
+module156=
+ver156=0
+flag156=8226
+flagg156=0
+tflag156=0
+initx156=0
+inity156=0
+minx156=0
+miny156=0
+maxx156=0
+maxy156=0
+posx156=50
+posy156=50
+sizx156=800
+sizy156=600
+title157=Star Wars: the Gungan Frontier
+path157=C:\Games\sw the gungan frontier\Gungan Frontier.exe
+module157=
+ver157=1
+flag157=402915362
+flagg157=512
+tflag157=0
+initx157=0
+inity157=0
+minx157=0
+miny157=0
+maxx157=0
+maxy157=0
+posx157=0
+posy157=0
+sizx157=800
+sizy157=600
+title158=Starship Troopers
+path158=C:\Games\Starship Troopers - Terran Ascendancy\stta\StarshipTroopers.exe
+module158=
+ver158=1
+flag158=32
+flagg158=0
+tflag158=0
+initx158=0
+inity158=0
+minx158=0
+miny158=0
+maxx158=0
+maxy158=0
+posx158=50
+posy158=50
+sizx158=800
+sizy158=600
+title159=Starshot Space Circus
+path159=D:\SpaceCircus.exe
+module159=
+ver159=0
+flag159=66
+flagg159=0
+tflag159=0
+initx159=0
+inity159=0
+minx159=0
+miny159=0
+maxx159=0
+maxy159=0
+posx159=50
+posy159=50
+sizx159=800
+sizy159=600
+title160=Stronghold Demo
+path160=C:\Games\Firefly Studios' Stronghold - Demo\Stronghold Demo.exe
+module160=
+ver160=0
+flag160=98
+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=Sub Culture
+path161=C:\Games\Sub Culture\sc.exe
+module161=
+ver161=0
+flag161=66
+flagg161=256
+tflag161=10
+initx161=50
+inity161=50
+minx161=50
+miny161=50
+maxx161=800
+maxy161=600
+posx161=50
+posy161=50
+sizx161=800
+sizy161=600
+title162=Superbike 2001
+path162=C:\Games\Superbike 2001\Sbk2001.exe
+module162=
+ver162=1
+flag162=536887332
+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=Syberia 2 Demo
+path163=C:\Games\Syberia 2 Demo\Syberia2Demo.exe
+module163=
+ver163=8
+flag163=536887332
+flagg163=0
+tflag163=0
+initx163=0
+inity163=0
+minx163=0
+miny163=0
+maxx163=0
+maxy163=0
+posx163=50
+posy163=50
+sizx163=800
+sizy163=600
+title164=Syberia Demo
+path164=C:\Games\SyberiaDemo\SyberiaDemo.exe
+module164=
+ver164=1
+flag164=536887332
+flagg164=0
+tflag164=0
+initx164=0
+inity164=0
+minx164=0
+miny164=0
+maxx164=0
+maxy164=0
+posx164=50
+posy164=50
+sizx164=800
+sizy164=600
+title165=System Shock 2 (BAD!!!)
+path165=C:\Games\Sys Shock II\Shock2.exe
+module165=
+ver165=1
+flag165=0
+flagg165=64
+tflag165=0
+initx165=0
+inity165=0
+minx165=0
+miny165=0
+maxx165=0
+maxy165=0
+posx165=50
+posy165=50
+sizx165=800
+sizy165=600
+title166=Test Drive 4
+path166=D:\Games\Test Drive 4\td4.EXE
+module166=
+ver166=0
+flag166=-2013265885
+flagg166=-2147418094
+tflag166=2
+initx166=0
+inity166=0
+minx166=0
+miny166=0
+maxx166=0
+maxy166=0
+posx166=50
+posy166=50
+sizx166=800
+sizy166=600
+title167=The Nations Demo
+path167=C:\Games\The Nations Demo\bin\Game.exe
+module167=
+ver167=1
+flag167=402661920
+flagg167=256
+tflag167=0
+initx167=0
+inity167=0
+minx167=0
+miny167=0
+maxx167=0
+maxy167=0
+posx167=50
+posy167=50
+sizx167=800
+sizy167=600
+title168=The Sims
+path168=D:\Games\sims\Sims.exe
+module168=
+ver168=0
+flag168=134226976
+flagg168=65536
+tflag168=2
+initx168=0
+inity168=0
+minx168=0
+miny168=0
+maxx168=0
+maxy168=0
+posx168=50
+posy168=50
+sizx168=800
+sizy168=600
+title169=Thief the Dark Project (FRE)
+path169=C:\Games\thief\game\thieffixed.exe
+module169=
+ver169=1
+flag169=16390
+flagg169=0
+tflag169=0
+initx169=0
+inity169=0
+minx169=0
+miny169=0
+maxx169=0
+maxy169=0
+posx169=50
+posy169=50
+sizx169=800
+sizy169=600
+title170=TinTin: Prisoners of the Sun
+path170=C:\Games\tintin\TINTINW.EXE
+module170=
+ver170=0
+flag170=34
+flagg170=0
+tflag170=2
+initx170=0
+inity170=0
+minx170=0
+miny170=0
+maxx170=0
+maxy170=0
+posx170=50
+posy170=50
+sizx170=800
+sizy170=600
+title171=Tintoy (BAD gfx)
+path171=C:\Games\Tintoy\Tintoy.exe
+module171=
+ver171=0
+flag171=546
+flagg171=256
+tflag171=258
+initx171=0
+inity171=0
+minx171=0
+miny171=0
+maxx171=0
+maxy171=0
+posx171=50
+posy171=50
+sizx171=800
+sizy171=600
+title172=Tomb Raider - Anniversary
+path172=C:\Games\Tomb Raider - Anniversary\tra.exe
+module172=
+ver172=9
+flag172=0
+flagg172=256
+tflag172=2
+initx172=0
+inity172=0
+minx172=0
+miny172=0
+maxx172=0
+maxy172=0
+posx172=50
+posy172=50
+sizx172=800
+sizy172=600
+title173=Tomb Raider 2 the Golden Mask
+path173=D:\Games\TR2 Golden Mask\T2GOLD.EXE
+module173=
+ver173=0
+flag173=570425378
+flagg173=1064960
+tflag173=258
+initx173=0
+inity173=0
+minx173=0
+miny173=0
+maxx173=0
+maxy173=0
+posx173=50
+posy173=50
+sizx173=800
+sizy173=600
+title174=Tomb Raider 3 Demo
+path174=C:\Games\Tomb Raider 3 - The Lost Artifact Demo\tr3gold.exe
+module174=
+ver174=1
+flag174=369098848
+flagg174=0
+tflag174=258
+initx174=0
+inity174=0
+minx174=0
+miny174=0
+maxx174=0
+maxy174=0
+posx174=50
+posy174=50
+sizx174=800
+sizy174=600
+title175=Tomb Raider 4 Demo
+path175=C:\Games\Tomb Raider 4 - The Last Revelation (Demo)\tomb4.patched.exe
+module175=
+ver175=0
+flag175=234881056
+flagg175=16
+tflag175=258
+initx175=0
+inity175=0
+minx175=0
+miny175=0
+maxx175=0
+maxy175=0
+posx175=50
+posy175=50
+sizx175=800
+sizy175=600
+title176=Total Annihilation Kingdoms
+path176=D:\Games\Total Annihilation Kingdoms\Kingdoms.exe
+module176=
+ver176=0
+flag176=134234146
+flagg176=0
+tflag176=0
+initx176=0
+inity176=0
+minx176=0
+miny176=0
+maxx176=0
+maxy176=0
+posx176=50
+posy176=50
+sizx176=800
+sizy176=600
+title177=Total Soccer 2000
+path177=D:\Games\Total Soccer 2000\Total Soccer 2000\SOCCERDX.EXE
+module177=
+ver177=1
+flag177=33554434
+flagg177=1069056
+tflag177=0
+initx177=0
+inity177=0
+minx177=0
+miny177=0
+maxx177=0
+maxy177=0
+posx177=50
+posy177=50
+sizx177=800
+sizy177=600
+title178=Ultim@te Race Pro
+path178=C:\Games\Ultim@te race pro\Ultim@te Race Pro.exe
+module178=
+ver178=0
+flag178=570425440
+flagg178=256
+tflag178=0
+initx178=0
+inity178=0
+minx178=0
+miny178=0
+maxx178=0
+maxy178=0
+posx178=50
+posy178=50
+sizx178=800
+sizy178=600
+title179=Uprising - Join or Die
+path179=D:\Games\Uprising\uprising.exe
+module179=
+ver179=0
+flag179=-2013265882
+flagg179=18
+tflag179=0
+initx179=0
+inity179=0
+minx179=0
+miny179=0
+maxx179=0
+maxy179=0
+posx179=50
+posy179=50
+sizx179=800
+sizy179=600
+title180=Urban Assault
+path180=D:\Games\Urban Assault\UA.EXE
+module180=
+ver180=0
+flag180=671236130
+flagg180=256
+tflag180=258
+initx180=0
+inity180=0
+minx180=0
+miny180=0
+maxx180=0
+maxy180=0
+posx180=50
+posy180=50
+sizx180=800
+sizy180=600
+title181=Warcraft 2 Battlenet Edition
+path181=D:\Games\Warcraft 2\Warcraft II BNE.exe
+module181=
+ver181=0
+flag181=268452003
+flagg181=16
+tflag181=258
+initx181=0
+inity181=0
+minx181=0
+miny181=0
+maxx181=0
+maxy181=0
+posx181=50
+posy181=50
+sizx181=800
+sizy181=600
+title182=WarHammer Rites of War
+path182=C:\Games\Rites of War\RoW.exe
+module182=
+ver182=0
+flag182=134217760
+flagg182=128
+tflag182=0
+initx182=0
+inity182=0
+minx182=0
+miny182=0
+maxx182=0
+maxy182=0
+posx182=50
+posy182=50
+sizx182=800
+sizy182=600
+title183=Warlords 3
+path183=D:\Games\WARLORDS3\Darklord.exe
+module183=
+ver183=0
+flag183=-2013264350
+flagg183=286261280
+tflag183=259
+initx183=0
+inity183=0
+minx183=0
+miny183=0
+maxx183=0
+maxy183=0
+posx183=50
+posy183=50
+sizx183=0
+sizy183=0
+title184=WarTorn
+path184=C:\Games\WarTorn\W.exe
+module184=
+ver184=0
+flag184=32
+flagg184=0
+tflag184=0
+initx184=0
+inity184=0
+minx184=0
+miny184=0
+maxx184=0
+maxy184=0
+posx184=50
+posy184=50
+sizx184=800
+sizy184=600
+title185=WarWind
+path185=C:\Games\WarWind\WW.EXE
+module185=
+ver185=0
+flag185=16418
+flagg185=81936
+tflag185=0
+initx185=0
+inity185=0
+minx185=0
+miny185=0
+maxx185=0
+maxy185=0
+posx185=50
+posy185=50
+sizx185=800
+sizy185=600
+title186=Worms Armageddon Demo (BAD!!!)
+path186=C:\Games\Worms Armageddon Demo\WaDemo.exe
+module186=
+ver186=1
+flag186=939524099
+flagg186=8
+tflag186=2
+initx186=0
+inity186=0
+minx186=0
+miny186=0
+maxx186=0
+maxy186=0
+posx186=0
+posy186=0
+sizx186=0
+sizy186=0
+title187=Worms World Party
+path187=D:\Games\Worms World Party\wwp.exe
+module187=
+ver187=1
+flag187=8388610
+flagg187=0
+tflag187=0
+initx187=0
+inity187=0
+minx187=0
+miny187=0
+maxx187=0
+maxy187=0
+posx187=50
+posy187=50
+sizx187=800
+sizy187=600
+maxfps0=0
+maxfps1=40
+maxfps2=0
+maxfps3=0
+maxfps4=0
+maxfps5=0
+maxfps6=10
+maxfps7=40
+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=0
+maxfps43=0
+maxfps44=0
+maxfps45=0
+maxfps46=0
+maxfps47=0
+maxfps48=0
+maxfps49=0
+maxfps50=0
+maxfps51=0
+maxfps52=0
+maxfps53=0
+maxfps54=0
+maxfps55=0
+maxfps56=100
maxfps57=0
+maxfps58=500
+maxfps59=0
+maxfps60=0
+maxfps61=0
+maxfps62=0
+maxfps63=0
+maxfps64=0
+maxfps65=0
+maxfps66=0
+maxfps67=0
+maxfps68=0
+maxfps69=0
+maxfps70=0
+maxfps71=0
+maxfps72=0
+maxfps73=0
+maxfps74=0
+maxfps75=0
+maxfps76=0
+maxfps77=0
+maxfps78=0
+maxfps79=0
+maxfps80=0
+maxfps81=0
+maxfps82=0
+maxfps83=0
+maxfps84=0
+maxfps85=0
+maxfps86=0
+maxfps87=50
+maxfps88=0
+maxfps89=0
+maxfps90=25
+maxfps91=0
+maxfps92=0
+maxfps93=0
+maxfps94=0
+maxfps95=0
+maxfps96=0
+maxfps97=100
+maxfps98=0
+maxfps99=0
+maxfps100=0
+maxfps101=0
+maxfps102=0
+maxfps103=0
+maxfps104=0
+maxfps105=0
+maxfps106=0
+maxfps107=0
+maxfps108=0
+maxfps109=0
+maxfps110=0
+maxfps111=0
+maxfps112=0
+maxfps113=0
+maxfps114=0
+maxfps115=0
+maxfps116=0
+maxfps117=0
+maxfps118=0
+maxfps119=0
+maxfps120=0
+maxfps121=0
+maxfps122=0
+maxfps123=0
+maxfps124=0
+maxfps125=0
+maxfps126=0
+maxfps127=0
+maxfps128=0
+maxfps129=0
+maxfps130=0
+maxfps131=0
+maxfps132=0
+maxfps133=0
+maxfps134=50
+maxfps135=0
+maxfps136=0
+maxfps137=0
+maxfps138=0
+maxfps139=0
+maxfps140=0
+maxfps141=0
+maxfps142=0
+maxfps143=0
+maxfps144=0
+maxfps145=0
+maxfps146=0
+maxfps147=0
+maxfps148=0
+maxfps149=0
+maxfps150=0
+maxfps151=0
+maxfps152=0
+maxfps153=0
+maxfps154=0
+maxfps155=0
+maxfps156=0
+maxfps157=0
+maxfps158=0
+maxfps159=0
+maxfps160=0
+maxfps161=0
+maxfps162=0
+maxfps163=0
+maxfps164=0
+maxfps165=0
+maxfps166=0
+maxfps167=0
+maxfps168=0
+maxfps169=0
+maxfps170=0
+maxfps171=0
+maxfps172=0
+maxfps173=0
+maxfps174=0
+maxfps175=0
+maxfps176=0
+maxfps177=200
+maxfps178=0
+maxfps179=0
+maxfps180=0
+maxfps181=40
+maxfps182=0
+maxfps183=0
+maxfps184=0
+maxfps185=0
+maxfps186=0
+maxfps187=0
+title188=Worms World Party Demo (BAD)
+path188=C:\Games\WWP Demo\wwp.exe
+module188=MFC42.DLL ltkrn10N.dll
+ver188=1
+flag188=406847491
+flagg188=8
+tflag188=2
+initx188=0
+inity188=0
+minx188=0
+miny188=0
+maxx188=0
+maxy188=0
+posx188=0
+posy188=0
+sizx188=0
+maxfps188=0
+opengllib0=
+initts0=-8
+opengllib1=
+initts1=-7
+opengllib2=
+initts2=-7
+opengllib3=
+initts3=0
+opengllib4=
+initts4=0
+opengllib5=
+initts5=0
+opengllib6=
+initts6=0
+opengllib7=
+initts7=0
+opengllib8=
+initts8=0
+opengllib9=
+initts9=0
+opengllib10=
+initts10=0
+opengllib11=
+initts11=0
+opengllib12=
+initts12=0
+opengllib13=
+initts13=0
+opengllib14=
+initts14=0
+opengllib15=
+initts15=0
+opengllib16=
+initts16=0
+opengllib17=
+initts17=0
+opengllib18=
+initts18=0
+opengllib19=
+initts19=0
+opengllib20=
+initts20=0
+opengllib21=
+initts21=0
+opengllib22=
+initts22=0
+opengllib23=
+initts23=0
+opengllib24=
+initts24=0
+opengllib25=
+initts25=0
+opengllib26=
+initts26=0
+opengllib27=
+initts27=0
+opengllib28=
+initts28=0
+opengllib29=
+initts29=0
+opengllib30=
+initts30=0
+opengllib31=
+initts31=0
+opengllib32=
+initts32=0
+opengllib33=
+initts33=0
+opengllib34=
+initts34=0
+opengllib35=
+initts35=0
+opengllib36=
+initts36=0
+opengllib37=
+initts37=0
+opengllib38=
+initts38=0
+opengllib39=
+initts39=0
+opengllib40=
+initts40=0
+opengllib41=
+initts41=0
+opengllib42=
+initts42=0
+opengllib43=
+initts43=0
+opengllib44=
+initts44=0
+opengllib45=
+initts45=0
+opengllib46=
+initts46=0
+opengllib47=
+initts47=0
+opengllib48=
+initts48=0
+opengllib49=
+initts49=0
+opengllib50=
+initts50=0
+opengllib51=
+initts51=0
+opengllib52=
+initts52=0
+opengllib53=
+initts53=0
+opengllib54=
+initts54=0
+opengllib55=
+initts55=0
+opengllib56=
+initts56=-5
+opengllib57=
initts57=0
+opengllib58=
+initts58=0
+opengllib59=
+initts59=0
+opengllib60=
+initts60=0
+opengllib61=
+initts61=0
+opengllib62=
+initts62=0
+opengllib63=
+initts63=0
+opengllib64=
+initts64=0
+opengllib65=
+initts65=0
+opengllib66=
+initts66=0
+opengllib67=
+initts67=0
+opengllib68=
+initts68=0
+opengllib69=
+initts69=0
+opengllib70=
+initts70=0
+opengllib71=
+initts71=0
+opengllib72=
+initts72=0
+opengllib73=
+initts73=0
+opengllib74=
+initts74=0
+opengllib75=
+initts75=0
+opengllib76=
+initts76=0
+opengllib77=
+initts77=0
+opengllib78=
+initts78=0
+opengllib79=
+initts79=0
+opengllib80=
+initts80=0
+opengllib81=
+initts81=0
+opengllib82=
+initts82=0
+opengllib83=
+initts83=4
+opengllib84=
+initts84=0
+opengllib85=
+initts85=0
+opengllib86=
+initts86=0
+opengllib87=
+initts87=8
+opengllib88=
+initts88=8
+opengllib89=
+initts89=0
+opengllib90=
+initts90=1
+opengllib91=
+initts91=0
+opengllib92=
+initts92=0
+opengllib93=
+initts93=0
+opengllib94=
+initts94=0
+opengllib95=
+initts95=0
+opengllib96=
+initts96=0
+opengllib97=
+initts97=3
+opengllib98=
+initts98=0
+opengllib99=
+initts99=0
+opengllib100=
+initts100=0
+opengllib101=
+initts101=0
+opengllib102=
+initts102=0
+opengllib103=
+initts103=0
+opengllib104=
+initts104=0
+opengllib105=
+initts105=0
+opengllib106=
+initts106=0
+opengllib107=
+initts107=0
+opengllib108=
+initts108=0
+opengllib109=
+initts109=0
+opengllib110=
+initts110=0
+opengllib111=
+initts111=0
+opengllib112=
+initts112=0
+opengllib113=
+initts113=0
+opengllib114=
+initts114=0
+opengllib115=
+initts115=0
+opengllib116=
+initts116=0
+opengllib117=
+initts117=0
+opengllib118=
+initts118=0
+opengllib119=
+initts119=0
+opengllib120=
+initts120=0
+opengllib121=
+initts121=0
+opengllib122=
+initts122=0
+opengllib123=
+initts123=0
+opengllib124=
+initts124=0
+opengllib125=
+initts125=0
+opengllib126=
+initts126=0
+opengllib127=
+initts127=0
+opengllib128=
+initts128=0
+opengllib129=
+initts129=0
+opengllib130=
+initts130=0
+opengllib131=
+initts131=0
+opengllib132=
+initts132=0
+opengllib133=
+initts133=0
+opengllib134=
+initts134=-4
+opengllib135=
+initts135=0
+opengllib136=
+initts136=0
+opengllib137=
+initts137=0
+opengllib138=
+initts138=0
+opengllib139=
+initts139=0
+opengllib140=
+initts140=0
+opengllib141=
+initts141=0
+opengllib142=
+initts142=0
+opengllib143=
+initts143=0
+opengllib144=
+initts144=0
+opengllib145=
+initts145=0
+opengllib146=
+initts146=0
+opengllib147=
+initts147=0
+opengllib148=
+initts148=0
+opengllib149=
+initts149=0
+opengllib150=
+initts150=0
+opengllib151=
+initts151=0
+opengllib152=
+initts152=0
+opengllib153=
+initts153=0
+opengllib154=
+initts154=0
+opengllib155=
+initts155=0
+opengllib156=
+initts156=0
+opengllib157=
+initts157=0
+opengllib158=
+initts158=0
+opengllib159=
+initts159=0
+opengllib160=
+initts160=0
+opengllib161=
+initts161=0
+opengllib162=
+initts162=0
+opengllib163=
+initts163=0
+opengllib164=
+initts164=0
+opengllib165=
+initts165=0
+opengllib166=
+initts166=-2
+opengllib167=
+initts167=0
+opengllib168=
+initts168=0
+opengllib169=
+initts169=0
+opengllib170=
+initts170=0
+opengllib171=
+initts171=0
+opengllib172=
+initts172=8
+opengllib173=
+initts173=8
+opengllib174=
+initts174=0
+opengllib175=
+initts175=0
+opengllib176=
+initts176=0
+opengllib177=
+initts177=0
+opengllib178=
+initts178=0
+opengllib179=
+initts179=0
+opengllib180=
+initts180=0
+opengllib181=
+initts181=0
+opengllib182=
+initts182=0
+opengllib183=
+initts183=0
+opengllib184=
+initts184=0
+opengllib185=
+initts185=0
+opengllib186=
+initts186=0
+opengllib187=
+initts187=0
+opengllib188=
+sizy188=0
+initts188=0
+title189=X-Com Enforcer
+path189=C:\Games\X-Com Enforcer\System\xcom.exe
+module189=
+opengllib189=
+ver189=1
+flag189=32
+flagg189=0
+tflag189=0
+initx189=0
+inity189=0
+minx189=0
+miny189=0
+maxx189=0
+maxy189=0
+posx189=0
+posy189=0
+sizx189=800
+sizy189=600
+maxfps189=0
+initts189=0
+title190=X-Com Interceptor
+module190=
+opengllib190=
+path190=C:\Games\X-Com_Interceptor\X-COM Interceptor\Interceptor.exe
+ver190=0
+flag190=16418
+flagg190=0
+tflag190=0
+initx190=0
+inity190=0
+minx190=0
+miny190=0
+maxx190=0
+maxy190=0
+posx190=50
+posy190=50
+sizx190=800
+sizy190=600
+maxfps190=0
+initts190=0
+title191=Z Steel Soldiers
+path191=C:\Games\ZSteelSoldiers\Bin\z2.exe
+module191=
+opengllib191=
+ver191=8
+flag191=805462020
+flagg191=0
+tflag191=0
+initx191=0
+inity191=0
+minx191=0
+miny191=0
+maxx191=0
+maxy191=0
+posx191=50
+posy191=50
+sizx191=800
+sizy191=600
+maxfps191=0
+initts191=0
+title192=Zax Alien Hunter
+path192=C:\Games\ZaxDemo\Zax.exe
+module192=
+opengllib192=
+ver192=0
+flag192=-1476386784
+flagg192=0
+tflag192=0
+initx192=0
+inity192=0
+minx192=0
+miny192=0
+maxx192=0
+maxy192=0
+posx192=50
+posy192=50
+sizx192=800
+sizy192=600
+maxfps192=0
+initts192=0
+title193=Zero Critical (BAD)
+path193=C:\Games\zero_critical_-_satin_rift\ZEROCR.EXE
+module193=
+opengllib193=
+ver193=0
+flag193=679477858
+flagg193=8
+tflag193=0
+initx193=0
+inity193=0
+minx193=0
+miny193=0
+maxx193=0
+maxy193=0
+posx193=0
+posy193=0
+sizx193=800
+sizy193=600
+maxfps193=0
+initts193=0
+title194=Zero Population Count
+path194=C:\Games\ZPC\ZPC.EXE
+module194=
+opengllib194=
+ver194=0
+flag194=1073741859
+flagg194=0
+tflag194=0
+initx194=0
+inity194=0
+minx194=0
+miny194=0
+maxx194=0
+maxy194=0
+posx194=0
+posy194=0
+sizx194=800
+sizy194=600
+maxfps194=0
+initts194=0
+title195=Zero Zone
+path195=D:\ZZone\ZeroZone.exe
+module195=
+opengllib195=
+ver195=0
+flag195=34
+flagg195=0
+tflag195=0
+initx195=0
+inity195=0
+minx195=0
+miny195=0
+maxx195=0
+maxy195=0
+posx195=50
+posy195=50
+sizx195=800
+sizy195=600
+maxfps195=0
+initts195=0
+title196=Zeus Poseidon
+path196=C:\Games\Zeus-Poseidon\Zeus.exe
+module196=
+opengllib196=
+ver196=0
+flag196=34
+flagg196=0
+tflag196=0
+initx196=0
+inity196=0
+minx196=0
+miny196=0
+maxx196=0
+maxy196=0
+posx196=50
+posy196=50
+sizx196=800
+sizy196=600
+maxfps196=0
+initts196=0
+
+title197=Zoo Tycoon
+path197=C:\Games\Zoo Tycoon\zoo.exe
+module197=
+opengllib197=
+ver197=0
+flag197=-2013265886
+flagg197=0
+tflag197=0
+initx197=0
+inity197=0
+minx197=0
+miny197=0
+maxx197=0
+maxy197=0
+posx197=50
+posy197=50
+sizx197=800
+sizy197=600
+maxfps197=0
+initts197=0
+title198=Doom 95
+path198=D:\Games\Doom95\DOOM95.EXE
+module198=
+opengllib198=
+ver198=0
+flag198=134217762
+flagg198=2113536
+tflag198=258
+initx198=0
+inity198=0
+minx198=0
+miny198=0
+maxx198=0
+maxy198=0
+posx198=50
+posy198=50
+sizx198=800
+sizy198=600
+maxfps198=20
+initts198=-9
+title199=Urban Assault CD
+path199=D:\Games\Urban Assault CD\UA.EXE
+module199=
+opengllib199=
+ver199=0
+flag199=671236130
+flagg199=33024
+tflag199=258
+initx199=0
+inity199=0
+minx199=0
+miny199=0
+maxx199=0
+maxy199=0
+posx199=50
+posy199=50
+sizx199=800
+sizy199=600
+maxfps199=0
+initts199=0
+title200=Starcraft
+path200=D:\Games\Starcraft\StarCraft.exe
+module200=
+opengllib200=
+ver200=0
+flag200=134234115
+flagg200=2179088
+tflag200=258
+initx200=0
+inity200=0
+minx200=0
+miny200=0
+maxx200=0
+maxy200=0
+posx200=50
+posy200=50
+sizx200=800
+sizy200=600
+maxfps200=0
+initts200=0
+title201=Battle Commander
+path201=D:\Games\Battle Commander\bcommand.exe
+module201=
+opengllib201=
+ver201=0
+flag201=134217794
+flagg201=0
+tflag201=2
+initx201=0
+inity201=0
+minx201=0
+miny201=0
+maxx201=0
+maxy201=0
+posx201=50
+posy201=50
+sizx201=800
+sizy201=600
+maxfps201=0
+initts201=0
+title202=Pandemonium 2
+path202=D:\Games\Pandemonium 2\pandy.exe
+module202=
+opengllib202=
+ver202=0
+flag202=671219714
+flagg202=1
+tflag202=0
+initx202=0
+inity202=0
+minx202=0
+miny202=0
+maxx202=0
+maxy202=0
+posx202=50
+posy202=50
+sizx202=800
+sizy202=600
+maxfps202=0
+initts202=0
+title203=Pharaoh
+path203=D:\Games\Pharaoh\Pharaoh.exe
+module203=
+opengllib203=
+ver203=0
+flag203=1208483874
+flagg203=1048576
+tflag203=0
+initx203=0
+inity203=0
+minx203=0
+miny203=0
+maxx203=0
+maxy203=0
+posx203=50
+posy203=50
+sizx203=800
+sizy203=600
+maxfps203=0
+initts203=0
+title204=Postal
+path204=D:\Games\Postal\POSTAL.EXE
+module204=
+opengllib204=
+ver204=1
+flag204=537133059
+flagg204=65600
+tflag204=266
+initx204=0
+inity204=0
+minx204=0
+miny204=0
+maxx204=0
+maxy204=0
+posx204=50
+posy204=50
+sizx204=800
+sizy204=600
+maxfps204=0
+initts204=-3
+title205=Test Drive 5 (D3D)
+path205=D:\Games\Test Drive 5\TD5_D3D.exe
+module205=
+opengllib205=
+ver205=0
+flag205=536870944
+flagg205=-2147483648
+tflag205=263
+initx205=0
+inity205=0
+minx205=0
+miny205=0
+maxx205=0
+maxy205=0
+posx205=50
+posy205=50
+sizx205=800
+sizy205=600
+maxfps205=0
+initts205=0
+title206=Take no Prisoners
+path206=D:\Games\Take no Prisoners\TNP.EXE
+module206=
+opengllib206=
+ver206=0
+flag206=2
+flagg206=16777248
+tflag206=0
+initx206=0
+inity206=0
+minx206=0
+miny206=0
+maxx206=0
+maxy206=0
+posx206=50
+posy206=50
+sizx206=800
+sizy206=600
+maxfps206=0
+initts206=0
+title207=Fallen Heaven
+path207=D:\Games\Fallen haven\Exe\FALLEN.EXE
+module207=MFC42.dll MSVCRT.DLL mciavi32.dll
+opengllib207=
+ver207=1
+flag207=135004674
+flagg207=1049120
+tflag207=259
+initx207=0
+inity207=0
+minx207=0
+miny207=0
+maxx207=0
+maxy207=0
+posx207=50
+posy207=50
+sizx207=800
+sizy207=600
+maxfps207=0
+initts207=0
+title208=Grand Theft Auto 2
+path208=D:\Games\GTA2\gta2.exe
+module208=binkw32 d3ddll
+opengllib208=
+ver208=0
+flag208=671096866
+flagg208=1048576
+tflag208=3
+initx208=0
+inity208=0
+minx208=0
+miny208=0
+maxx208=0
+maxy208=0
+posx208=50
+posy208=50
+sizx208=400
+sizy208=300
+maxfps208=0
+initts208=0
+title209=Grand Prix Legends MAX
+module209=
+opengllib209=
+path209=D:\Games\Grand Prix Legends MAX\gpl.exe
+ver209=7
+flag209=537001986
+flagg209=134217729
+tflag209=3
+initx209=0
+inity209=0
+minx209=0
+miny209=0
+maxx209=0
+maxy209=0
+posx209=50
+posy209=50
+sizx209=800
+sizy209=600
+maxfps209=0
+initts209=0
+title210=688I Hunter Killer
+path210=D:\Games\688\688I_HK.EXE
+module210=
+opengllib210=
+ver210=0
+flag210=134479906
+flagg210=134217728
+tflag210=3
+initx210=0
+inity210=0
+minx210=0
+miny210=0
+maxx210=0
+maxy210=0
+posx210=50
+posy210=50
+sizx210=640
+sizy210=480
+maxfps210=0
+initts210=0
+title211=Gruntz
+path211=D:\Games\gruntz\GRUNTZ.EXE
+module211=
+opengllib211=
+ver211=0
+flag211=34
+flagg211=134217728
+tflag211=0
+initx211=0
+inity211=0
+minx211=0
+miny211=0
+maxx211=0
+maxy211=0
+posx211=50
+posy211=50
+sizx211=800
+sizy211=600
+maxfps211=0
+initts211=0
+title212=Grand Touring
+path212=D:\Games\Grand Touring\gt.exe
+module212=
+opengllib212=
+ver212=0
+flag212=16388
+flagg212=134283264
+tflag212=275
+initx212=0
+inity212=0
+minx212=0
+miny212=0
+maxx212=0
+maxy212=0
+posx212=50
+posy212=50
+sizx212=400
+sizy212=300
+maxfps212=0
+initts212=8
+title213=Gunman Chronicles
+path213=D:\Games\Gunman\gunman.exe
+module213=
+opengllib213=
+ver213=0
+flag213=0
+flagg213=-2013134848
+tflag213=0
+initx213=0
+inity213=0
+minx213=0
+miny213=0
+maxx213=0
+maxy213=0
+posx213=0
+posy213=0
+sizx213=400
+sizy213=300
+maxfps213=0
+initts213=0
+title214=Nocturne
+path214=D:\Games\Nocturne\nocturne.exe
+module214=
+opengllib214=
+ver214=0
+flag214=2
+flagg214=402653264
+tflag214=387
+initx214=0
+inity214=0
+minx214=0
+miny214=0
+maxx214=0
+maxy214=0
+posx214=50
+posy214=50
+sizx214=400
+sizy214=300
+maxfps214=0
+initts214=0
+title215=Koplio
+path215=D:\Games\Koplio\KOPLIO.exe
+module215=
+opengllib215=
+ver215=0
+flag215=545259520
+flagg215=134217729
+tflag215=0
+initx215=0
+inity215=0
+minx215=0
+miny215=0
+maxx215=0
+maxy215=0
+posx215=50
+posy215=50
+sizx215=800
+sizy215=600
+maxfps215=0
+initts215=0
+title216=Nightmare Ned
+path216=D:\Games\Ned\NITENED.EXE
+module216=
+opengllib216=
+ver216=0
+flag216=537395202
+flagg216=135266305
+tflag216=0
+initx216=0
+inity216=0
+minx216=0
+miny216=0
+maxx216=0
+maxy216=0
+posx216=0
+posy216=0
+sizx216=800
+sizy216=600
+maxfps216=0
+initts216=0
+title217=Rollcage
+path217=D:\Games\Rollcage\Direct3D\Rollcage.exe
+module217=
+opengllib217=
+ver217=0
+flag217=268698112
+flagg217=-2013200384
+tflag217=387
+initx217=0
+inity217=0
+minx217=0
+miny217=0
+maxx217=0
+maxy217=0
+posx217=50
+posy217=50
+sizx217=800
+sizy217=600
+maxfps217=0
+initts217=3
+title218=Rogue Spear (BAD)
+module218=
+opengllib218=
+path218=D:\Games\Rogue Spear\RogueSpear.exe
+ver218=1
+flag218=16388
+flagg218=134217984
+tflag218=2
+initx218=0
+inity218=0
+minx218=0
+miny218=0
+maxx218=0
+maxy218=0
+posx218=50
+posy218=50
+sizx218=400
+sizy218=300
+maxfps218=0
+initts218=0
+title219=Black Thorn
+path219=D:\Games\BlackThorn\BlackThorn.exe
+module219=
+opengllib219=
+ver219=0
+flag219=0
+flagg219=-2013265664
+tflag219=66
+initx219=0
+inity219=0
+minx219=0
+miny219=0
+maxx219=0
+maxy219=0
+posx219=50
+posy219=50
+sizx219=800
+sizy219=600
+maxfps219=0
+initts219=0
+title220=Wargames (demo)
+path220=D:\Games\Wargames\wargames.exe
+module220=
+opengllib220=
+ver220=0
+flag220=268436642
+flagg220=134217728
+tflag220=3
+initx220=0
+inity220=0
+minx220=0
+miny220=0
+maxx220=0
+maxy220=0
+posx220=50
+posy220=50
+sizx220=800
+sizy220=600
+maxfps220=0
+initts220=0
+title221=Silent Storm Demo
+path221=D:\Games\Silent Storm Demo\SilentStormDemo.exe
+module221=
+opengllib221=
+ver221=0
+flag221=536870913
+flagg221=-2013265664
+tflag221=3
+initx221=0
+inity221=0
+minx221=0
+miny221=0
+maxx221=0
+maxy221=0
+posx221=50
+posy221=50
+sizx221=800
+sizy221=600
+maxfps221=0
+initts221=0
+title222=glsample.exe
+path222=D:\DxWnd\code examples\glsample\Debug\glsample.exe
+module222=
+opengllib222=
+ver222=0
+flag222=0
+flagg222=134348800
+tflag222=3
+initx222=0
+inity222=0
+minx222=0
+miny222=0
+maxx222=0
+maxy222=0
+posx222=0
+posy222=0
+sizx222=800
+sizy222=600
+maxfps222=0
+initts222=0
flagh0=0
flagi0=0
flagh1=0
@@ -1179,7 +4480,7 @@ flagh8=0
flagi8=0
flagh9=0
flagi9=0
-flagh10=0
+flagh10=2
flagi10=0
flagh11=0
flagi11=0
@@ -1273,8 +4574,384 @@ flagh55=0
flagi55=0
flagh56=0
flagi56=0
-flagh57=1
+flagh57=0
flagi57=0
-title58=Premier Manager 97
-module58=
-opengllib58=
+flagh58=0
+flagi58=0
+flagh59=0
+flagi59=0
+flagh60=2
+flagi60=0
+flagh61=0
+flagi61=0
+flagh62=0
+flagi62=0
+flagh63=0
+flagi63=0
+flagh64=0
+flagi64=0
+flagh65=0
+flagi65=0
+flagh66=0
+flagi66=0
+flagh67=0
+flagi67=0
+flagh68=0
+flagi68=0
+flagh69=0
+flagi69=0
+flagh70=0
+flagi70=0
+flagh71=0
+flagi71=0
+flagh72=0
+flagi72=0
+flagh73=0
+flagi73=0
+flagh74=0
+flagi74=0
+flagh75=0
+flagi75=0
+flagh76=0
+flagi76=0
+flagh77=0
+flagi77=0
+flagh78=0
+flagi78=0
+flagh79=0
+flagi79=0
+flagh80=0
+flagi80=0
+flagh81=0
+flagi81=0
+flagh82=0
+flagi82=0
+flagh83=0
+flagi83=0
+flagh84=0
+flagi84=0
+flagh85=0
+flagi85=0
+flagh86=0
+flagi86=0
+flagh87=0
+flagi87=0
+flagh88=0
+flagi88=0
+flagh89=0
+flagi89=0
+flagh90=0
+flagi90=0
+flagh91=0
+flagi91=0
+flagh92=0
+flagi92=0
+flagh93=0
+flagi93=0
+flagh94=0
+flagi94=0
+flagh95=0
+flagi95=0
+flagh96=0
+flagi96=0
+flagh97=0
+flagi97=0
+flagh98=0
+flagi98=0
+flagh99=0
+flagi99=0
+flagh100=0
+flagi100=0
+flagh101=0
+flagi101=0
+flagh102=0
+flagi102=0
+flagh103=0
+flagi103=0
+flagh104=0
+flagi104=0
+flagh105=0
+flagi105=0
+flagh106=0
+flagi106=0
+flagh107=0
+flagi107=0
+flagh108=0
+flagi108=0
+flagh109=0
+flagi109=0
+flagh110=0
+flagi110=0
+flagh111=0
+flagi111=0
+flagh112=0
+flagi112=0
+flagh113=0
+flagi113=0
+flagh114=0
+flagi114=0
+flagh115=0
+flagi115=0
+flagh116=0
+flagi116=0
+flagh117=0
+flagi117=0
+flagh118=0
+flagi118=0
+flagh119=0
+flagi119=0
+flagh120=0
+flagi120=0
+flagh121=0
+flagi121=0
+flagh122=0
+flagi122=0
+flagh123=0
+flagi123=0
+flagh124=0
+flagi124=0
+flagh125=0
+flagi125=0
+flagh126=0
+flagi126=0
+flagh127=0
+flagi127=0
+flagh128=0
+flagi128=0
+flagh129=0
+flagi129=0
+flagh130=0
+flagi130=0
+flagh131=0
+flagi131=0
+flagh132=0
+flagi132=0
+flagh133=0
+flagi133=0
+flagh134=0
+flagi134=0
+flagh135=0
+flagi135=0
+flagh136=0
+flagi136=0
+flagh137=0
+flagi137=0
+flagh138=0
+flagi138=0
+flagh139=0
+flagi139=0
+flagh140=0
+flagi140=0
+flagh141=0
+flagi141=0
+flagh142=0
+flagi142=0
+flagh143=0
+flagi143=0
+flagh144=0
+flagi144=0
+flagh145=0
+flagi145=0
+flagh146=0
+flagi146=0
+flagh147=0
+flagi147=0
+flagh148=0
+flagi148=0
+flagh149=0
+flagi149=0
+flagh150=0
+flagi150=0
+flagh151=0
+flagi151=0
+flagh152=0
+flagi152=0
+flagh153=0
+flagi153=0
+flagh154=0
+flagi154=0
+flagh155=0
+flagi155=0
+flagh156=0
+flagi156=0
+flagh157=0
+flagi157=0
+flagh158=0
+flagi158=0
+flagh159=0
+flagi159=0
+flagh160=0
+flagi160=0
+flagh161=0
+flagi161=0
+flagh162=0
+flagi162=0
+flagh163=0
+flagi163=0
+flagh164=0
+flagi164=0
+flagh165=0
+flagi165=0
+flagh166=0
+flagi166=0
+flagh167=0
+flagi167=0
+flagh168=0
+flagi168=0
+flagh169=0
+flagi169=0
+flagh170=0
+flagi170=0
+flagh171=0
+flagi171=0
+flagh172=0
+flagi172=0
+flagh173=0
+flagi173=0
+flagh174=0
+flagi174=0
+flagh175=0
+flagi175=0
+flagh176=2
+flagi176=0
+flagh177=0
+flagi177=0
+flagh178=0
+flagi178=0
+flagh179=0
+flagi179=0
+flagh180=0
+flagi180=0
+flagh181=0
+flagi181=0
+flagh182=0
+flagi182=0
+flagh183=0
+flagi183=0
+flagh184=0
+flagi184=0
+flagh185=0
+flagi185=0
+flagh186=0
+flagi186=0
+flagh187=0
+flagi187=0
+flagh188=0
+flagi188=0
+flagh189=0
+flagi189=0
+flagh190=0
+flagi190=0
+flagh191=0
+flagi191=0
+flagh192=0
+flagi192=0
+flagh193=0
+flagi193=0
+flagh194=0
+flagi194=0
+flagh195=0
+flagi195=0
+flagh196=0
+flagi196=0
+flagh197=0
+flagi197=0
+flagh198=0
+flagi198=0
+flagh199=0
+flagi199=0
+flagh200=0
+flagi200=0
+flagh201=0
+flagi201=0
+flagh202=0
+flagi202=0
+flagh203=0
+flagi203=0
+flagh204=0
+flagi204=0
+flagh205=2
+flagi205=0
+flagh206=0
+flagi206=0
+flagh207=0
+flagi207=0
+flagh208=0
+flagi208=0
+flagh209=0
+flagi209=0
+flagh210=0
+flagi210=0
+flagh211=0
+flagi211=0
+flagh212=0
+flagi212=0
+flagh213=0
+flagi213=0
+flagh214=0
+flagi214=0
+flagh215=0
+flagi215=0
+flagh216=0
+flagi216=0
+flagh217=0
+flagi217=0
+flagh218=0
+flagi218=0
+flagh219=0
+flagi219=0
+flagh220=0
+flagi220=0
+flagh221=0
+flagi221=0
+flagh222=0
+flagi222=0
+title223=Dungeon Keeper D3D
+path223=D:\Games\Keeper95\keepd3d.exe
+module223=
+opengllib223=
+ver223=0
+flag223=134217760
+flagg223=134217728
+flagh223=1
+flagi223=0
+tflag223=3
+initx223=0
+inity223=0
+minx223=0
+miny223=0
+maxx223=0
+maxy223=0
+posx223=50
+posy223=50
+sizx223=800
+sizy223=600
+maxfps223=0
+initts223=0
+title224=Gangsters
+path224=D:\Games\Gangsters\gangsters.exe
+module224=
+opengllib224=
+ver224=0
+flag224=134217730
+flagg224=135266304
+flagh224=0
+flagi224=0
+tflag224=0
+initx224=0
+inity224=0
+minx224=0
+miny224=0
+maxx224=0
+maxy224=0
+posx224=50
+posy224=50
+sizx224=800
+sizy224=600
+maxfps224=0
+initts224=0
+[window]
+posx=1443
+posy=162
+sizx=320
+sizy=527
diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt
index 5a691cc..a04251d 100644
--- a/build/readme-relnotes.txt
+++ b/build/readme-relnotes.txt
@@ -97,3 +97,21 @@ D3D hooking: Added Wireframe option for D3D games
Added hooking of CLSID_DxDiagProvider through CoCreateInstance
Fixed (further simplified) clipping handling of primary/backbuffer surfaces
ChangeDisplaySettings hook: fixed x,y coordinate inversion in log message
+
+v2.02.19
+Saves GUI coordinates
+Fixed "Remap client rect" option for Diablo's windows and Premier Manager 98 mouse movements
+Added "Highlight blit to primary" option to draw a yellow bounding box around blits to primary surface
+Fixed some exception conditions when closing the programs
+Fixed CreateSurface handling to allow Premier Manager 98 start in emulated mode
+Fixed ONEPIXELFIX handling
+Fixed BIG WIN handling for Diablo's windows
+Fixed FillRect hook to prevent filling outside virtual desktop
+Disabled hooking of system libraries
+Fixed a nasty bug that caused your desktop to freeze until shutdown !!!
+Fixed GetWindowRect handling for windows not created by the task: Diablo queries the explorer window size! Now the retrieved RECT can't be larger than the virtual desktop
+
+
+
+
+
diff --git a/dll/dxemublt.cpp b/dll/dxemublt.cpp
index 19482b1..ccab3dd 100644
--- a/dll/dxemublt.cpp
+++ b/dll/dxemublt.cpp
@@ -21,6 +21,8 @@ extern int Set_dwSize_From_Surface(LPDIRECTDRAWSURFACE);
#define SwitchdwSize(s) s.dwSize=(s.dwSize==sizeof(DDSURFACEDESC))?sizeof(DDSURFACEDESC2):sizeof(DDSURFACEDESC)
#define DXWNDDIRECTBLITTING 1
+#define MARKBLITCOLOR32 0x00FFFF00
+#define MARKBLITCOLOR16 0x0FF0
extern Blt_Type pBlt;
EmuBlt_Type pEmuBlt;
RevBlt_Type pRevBlt;
@@ -29,12 +31,44 @@ RevBlt_Type pRevBlt;
// Emulated blitting procedures: fills a 32BPP surface from the content of 8BPP or 16BPP ones.
//--------------------------------------------------------------------------------------------//
+static void MarkRect32(DWORD *dest, int w, int h, int destpitch)
+{
+ int x, y;
+
+ for(x = 0; x < w; x ++) *(dest ++) = MARKBLITCOLOR32;
+ dest += destpitch;
+ for(y = 0; y < h-2; y ++){
+ *dest = MARKBLITCOLOR32;
+ dest += w-1;
+ *dest = MARKBLITCOLOR32;
+ dest += destpitch + 1;
+ }
+ for(x = 0; x < w; x ++) *(dest ++) = MARKBLITCOLOR32;
+ return;
+}
+
+static void MarkRect16(SHORT *dest, int w, int h, int destpitch)
+{
+ int x, y;
+
+ for(x = 0; x < w; x ++) *(dest ++) = MARKBLITCOLOR16;
+ dest += destpitch;
+ for(y = 0; y < h-2; y ++){
+ *dest = MARKBLITCOLOR16;
+ dest += w-1;
+ *dest = MARKBLITCOLOR16;
+ dest += destpitch + 1;
+ }
+ for(x = 0; x < w; x ++) *(dest ++) = MARKBLITCOLOR16;
+ return;
+}
+
static HRESULT WINAPI EmuBlt_8_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,
LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)
{
HRESULT res;
BYTE *src8;
- DWORD *dest;
+ DWORD *dest, *dest0;
DDSURFACEDESC2 ddsd_src, ddsd_dst;
long srcpitch, destpitch;
DWORD x, y, w, h;
@@ -75,6 +109,7 @@ static HRESULT WINAPI EmuBlt_8_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdest
dest += lpdestrect->top*ddsd_dst.lPitch;
dest += lpdestrect->left;
destpitch = ddsd_dst.lPitch - w;
+ dest0 = dest;
src8 = (BYTE *)lpsurface;
src8 += lpsrcrect->top*ddsd_src.lPitch;
@@ -90,6 +125,8 @@ static HRESULT WINAPI EmuBlt_8_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdest
src8 += srcpitch;
}
+ if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch);
+
res=(*pUnlockMethod(lpddsdst))(lpddsdst, lpdestrect);
if (res) OutTraceE("EmuBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__);
res=(*pUnlockMethod(lpddssrc))(lpddssrc, lpsrcrect);
@@ -103,7 +140,7 @@ static HRESULT WINAPI EmuBlt_16_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
{
HRESULT res;
WORD *src16;
- DWORD *dest;
+ DWORD *dest, *dest0;
DDSURFACEDESC2 ddsd_src, ddsd_dst;
long srcpitch, destpitch;
DWORD x, y, w, h;
@@ -144,6 +181,7 @@ static HRESULT WINAPI EmuBlt_16_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
dest += lpdestrect->top*ddsd_dst.lPitch;
dest += lpdestrect->left;
destpitch = ddsd_dst.lPitch - w;
+ dest0 = dest;
ddsd_src.lPitch >>= 1;
src16 = (WORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface);
@@ -187,6 +225,8 @@ static HRESULT WINAPI EmuBlt_16_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
src16 += srcpitch;
}
+ if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch);
+
res=(*pUnlockMethod(lpddsdst))(lpddsdst, lpdestrect);
if (res) OutTraceE("EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__);
res=(*pUnlockMethod(lpddssrc))(lpddssrc, lpsrcrect);
@@ -199,7 +239,7 @@ static HRESULT WINAPI EmuBlt_24_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
{
HRESULT res;
BYTE *src24;
- DWORD *dest;
+ DWORD *dest, *dest0;
DDSURFACEDESC2 ddsd_src, ddsd_dst;
long srcpitch, destpitch;
DWORD x, y, w, h;
@@ -240,6 +280,7 @@ static HRESULT WINAPI EmuBlt_24_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
dest += lpdestrect->top*ddsd_dst.lPitch;
dest += lpdestrect->left;
destpitch = ddsd_dst.lPitch - w;
+ dest0 = dest;
src24 = (BYTE *)lpsurface;
src24 += lpsrcrect->top*ddsd_src.lPitch;
@@ -258,6 +299,8 @@ static HRESULT WINAPI EmuBlt_24_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
src24 += srcpitch;
}
+ if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch);
+
res=(*pUnlockMethod(lpddsdst))(lpddsdst, lpdestrect);
if (res) OutTraceE("EmuBlt24_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__);
res=(*pUnlockMethod(lpddssrc))(lpddssrc, lpsrcrect);
@@ -276,7 +319,7 @@ static HRESULT WINAPI EmuBlt_32_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
long srcpitch, destpitch;
HRESULT res;
DWORD *src32;
- DWORD *dest;
+ DWORD *dest, dest0;
DDSURFACEDESC2 ddsd_src, ddsd_dst;
w = lpdestrect->right - lpdestrect->left;
@@ -315,6 +358,7 @@ static HRESULT WINAPI EmuBlt_32_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
dest += lpdestrect->top*ddsd_dst.lPitch;
dest += lpdestrect->left;
destpitch = ddsd_dst.lPitch - w;
+ dest0 = dest;
ddsd_src.lPitch >>= 2;
src32 = (DWORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface);
@@ -330,6 +374,8 @@ static HRESULT WINAPI EmuBlt_32_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
src32 += srcpitch;
}
+ if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch);
+
res=(*pUnlockMethod(lpddsdst))(lpddsdst,lpdestrect);
if (res) OutTraceE("EmuBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__);
res=(*pUnlockMethod(lpddssrc))(lpddssrc, lpsrcrect);
@@ -343,7 +389,7 @@ static HRESULT WINAPI EmuBlt_8_to_16(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdest
{
HRESULT res;
BYTE *src8;
- SHORT *dest;
+ SHORT *dest, *dest0;
DDSURFACEDESC2 ddsd_src, ddsd_dst;
long srcpitch, destpitch;
DWORD x, y, w, h;
@@ -384,6 +430,7 @@ static HRESULT WINAPI EmuBlt_8_to_16(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdest
dest += lpdestrect->top*ddsd_dst.lPitch;
dest += lpdestrect->left;
destpitch = ddsd_dst.lPitch - w;
+ dest0 = dest;
src8 = (BYTE *)lpsurface;
src8 += lpsrcrect->top*ddsd_src.lPitch;
@@ -393,15 +440,14 @@ static HRESULT WINAPI EmuBlt_8_to_16(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdest
// OutTraceD("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src8,dest,srcpitch,destpitch);
for(y = 0; y < h; y ++){
for(x = 0; x < w; x ++){
- //DWORD pixel;
- //pixel = PaletteEntries[*(src8 ++)];
- //*(dest ++) = ((pixel&0x0000FF)>>3) | ((pixel&0x00FF00)>>7) | ((pixel&0xFF0000)>>19);
*(dest ++) = (SHORT)PaletteEntries[*(src8 ++)];
}
dest += destpitch;
src8 += srcpitch;
}
+ if(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch);
+
res=(*pUnlockMethod(lpddsdst))(lpddsdst, lpdestrect);
if (res) OutTraceE("EmuBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__);
res=(*pUnlockMethod(lpddssrc))(lpddssrc, lpsrcrect);
@@ -426,7 +472,7 @@ static HRESULT WINAPI EmuBlt_24_to_16(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
{
HRESULT res;
BYTE *src24;
- SHORT *dest;
+ SHORT *dest, *dest0;
DDSURFACEDESC2 ddsd_src, ddsd_dst;
long srcpitch, destpitch;
DWORD x, y, w, h;
@@ -467,6 +513,7 @@ static HRESULT WINAPI EmuBlt_24_to_16(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
dest += lpdestrect->top*ddsd_dst.lPitch;
dest += lpdestrect->left;
destpitch = ddsd_dst.lPitch - w;
+ dest0 = dest;
src24 = (BYTE *)lpsurface;
src24 += lpsrcrect->top*ddsd_src.lPitch;
@@ -482,6 +529,8 @@ static HRESULT WINAPI EmuBlt_24_to_16(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
src24 += srcpitch;
}
+ if(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch);
+
res=(*pUnlockMethod(lpddsdst))(lpddsdst, lpdestrect);
if (res) OutTraceE("EmuBlt24_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__);
res=(*pUnlockMethod(lpddssrc))(lpddssrc, lpsrcrect);
diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp
index b5316ee..1f4adb6 100644
--- a/dll/dxhook.cpp
+++ b/dll/dxhook.cpp
@@ -727,8 +727,8 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
lparam = MAKELPARAM(curr.x, curr.y);
OutTraceC("WindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y);
}
- GetHookInfo()->CursorX=(short)curr.x;
- GetHookInfo()->CursorY=(short)curr.y;
+ GetHookInfo()->CursorX=LOWORD(lparam);
+ GetHookInfo()->CursorY=HIWORD(lparam);
break;
// fall through cases:
case WM_MOUSEWHEEL:
@@ -750,8 +750,8 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
lparam = MAKELPARAM(curr.x, curr.y);
OutTraceC("WindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y);
}
- GetHookInfo()->CursorX=(short)curr.x;
- GetHookInfo()->CursorY=(short)curr.y;
+ GetHookInfo()->CursorX=LOWORD(lparam);
+ GetHookInfo()->CursorY=HIWORD(lparam);
break;
case WM_SETFOCUS:
if (dxw.dwFlags1 & ENABLECLIPPING) extClipCursor(lpClipRegion);
@@ -1279,6 +1279,7 @@ int HookInit(TARGETMAP *target, HWND hwnd)
WINDOWPOS wp;
HMODULE base;
char *sModule;
+ char sModuleBuf[60+1];
static char *dxversions[14]={
"Automatic", "DirectX1~6", "", "", "", "", "",
"DirectX7", "DirectX8", "DirectX9", "DirectX10", "DirectX11", "None", ""
@@ -1291,8 +1292,8 @@ int HookInit(TARGETMAP *target, HWND hwnd)
dxw.hParentWnd=GetParent(hwnd);
dxw.hChildWnd=hwnd;
- OutTraceD("HookInit: path=\"%s\" module=\"%s\" dxversion=%s hWnd=%x dxw.hParentWnd=%x\n",
- target->path, target->module, dxversions[dxw.dwTargetDDVersion], hwnd, dxw.hParentWnd);
+ OutTraceD("HookInit: path=\"%s\" module=\"%s\" dxversion=%s hWnd=%x dxw.hParentWnd=%x desktop=%x\n",
+ target->path, target->module, dxversions[dxw.dwTargetDDVersion], hwnd, dxw.hParentWnd, GetDesktopWindow());
if (IsDebug){
DWORD dwStyle, dwExStyle;
dwStyle=GetWindowLong(dxw.GethWnd(), GWL_STYLE);
@@ -1327,17 +1328,19 @@ int HookInit(TARGETMAP *target, HWND hwnd)
// extern BOOL ListProcessModules(BOOL);
// ListProcessModules(true);
//}
- sModule=strtok(dxw.gsModules," ");
+ strncpy(sModuleBuf, dxw.gsModules, 60);
+ sModule=strtok(sModuleBuf," ;");
while (sModule) {
base=(*pLoadLibraryA)(sModule);
if(!base){
OutTraceE("HookInit: LoadLibrary ERROR module=%s err=%d\n", sModule, GetLastError());
- continue;
}
- OutTraceD("HookInit: hooking additional module=%s base=%x\n", sModule, base);
- if (dxw.dwTFlags & OUTIMPORTTABLE) DumpImportTable(base);
- HookModule(base, dxw.dwTargetDDVersion);
- sModule=strtok(NULL," ");
+ else {
+ OutTraceD("HookInit: hooking additional module=%s base=%x\n", sModule, base);
+ if (dxw.dwTFlags & OUTIMPORTTABLE) DumpImportTable(base);
+ HookModule(base, dxw.dwTargetDDVersion);
+ }
+ sModule=strtok(NULL," ;");
}
diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp
index 8fda53b..d71c6b9 100644
--- a/dll/dxwcore.cpp
+++ b/dll/dxwcore.cpp
@@ -141,6 +141,17 @@ RECT dxwCore::GetScreenRect()
return Screen;
}
+BOOL dxwCore::IsDesktop(HWND hwnd)
+{
+ return (
+ (hwnd == 0)
+ ||
+ (hwnd == (*pGetDesktopWindow)())
+ ||
+ (hwnd == hWnd)
+ );
+}
+
// v2.1.93: FixCursorPos completely revised to introduce a clipping tolerance in
// clipping regions as well as in normal operations
@@ -264,14 +275,6 @@ void dxwCore::EraseClipCursor()
(*pClipCursor)(NULL);
}
-// MapWindow Rect: returns a rectangle in the real coordinate system from the virtual coordinates
-// of an emulated fullscreen window. NULL or void returns the rectangle of the whole client area.
-
-RECT dxwCore::MapWindowRect(void)
-{
- return MapWindowRect(NULL);
-}
-
RECT dxwCore::MapWindowRect(LPRECT lpRect)
{
POINT UpLeft={0,0};
@@ -298,7 +301,17 @@ RECT dxwCore::MapWindowRect(LPRECT lpRect)
return RetRect;
}
-void dxwCore::MapRect(int *nXDest, int *nYDest, int *nWDest, int *nHDest)
+void dxwCore::MapClient(LPRECT rect)
+{
+ RECT client;
+ (*pGetClientRect)(hWnd, &client);
+ rect->left= rect->left * client.right / dwScreenWidth;
+ rect->top= rect->top * client.bottom / dwScreenHeight;
+ rect->right= rect->right * client.right / dwScreenWidth;
+ rect->bottom= rect->bottom * client.bottom / dwScreenHeight;
+}
+
+void dxwCore::MapClient(int *nXDest, int *nYDest, int *nWDest, int *nHDest)
{
RECT client;
(*pGetClientRect)(hWnd, &client);
@@ -308,7 +321,7 @@ void dxwCore::MapRect(int *nXDest, int *nYDest, int *nWDest, int *nHDest)
*nHDest= *nHDest * client.bottom / dwScreenHeight;
}
-void dxwCore::MapPoint(LPPOINT lppoint)
+void dxwCore::MapClient(LPPOINT lppoint)
{
RECT client;
(*pGetClientRect)(hWnd, &client);
@@ -316,12 +329,109 @@ void dxwCore::MapPoint(LPPOINT lppoint)
lppoint->y = (lppoint->y * client.bottom) / dwScreenHeight;
}
-void dxwCore::UnmapPoint(LPPOINT lppoint)
+void dxwCore::MapWindow(LPRECT rect)
{
RECT client;
+ POINT upleft = {0,0};
(*pGetClientRect)(hWnd, &client);
- if (client.right) lppoint->x = (lppoint->x * dwScreenWidth) / client.right;
- if (client.bottom) lppoint->y = (lppoint->y * dwScreenHeight) / client.bottom;
+ (*pClientToScreen)(hWnd, &upleft);
+ rect->left= upleft.x + ((rect->left * client.right) / dwScreenWidth);
+ rect->top= upleft.y + ((rect->top * client.bottom) / dwScreenHeight);
+ rect->right= upleft.x + ((rect->right * client.right) / dwScreenWidth);
+ rect->bottom= upleft.y + ((rect->bottom * client.bottom) / dwScreenHeight);
+}
+
+void dxwCore::MapWindow(int *nXDest, int *nYDest, int *nWDest, int *nHDest)
+{
+ RECT client;
+ POINT upleft = {0,0};
+ (*pGetClientRect)(hWnd, &client);
+ (*pClientToScreen)(hWnd, &upleft);
+ *nXDest= upleft.x + ((*nXDest * client.right) / dwScreenWidth);
+ *nYDest= upleft.y + ((*nYDest * client.bottom) / dwScreenHeight);
+ *nWDest= (*nWDest * client.right) / dwScreenWidth;
+ *nHDest= (*nHDest * client.bottom) / dwScreenHeight;
+}
+
+void dxwCore::MapWindow(LPPOINT lppoint)
+{
+ RECT client;
+ POINT upleft = {0,0};
+ (*pGetClientRect)(hWnd, &client);
+ (*pClientToScreen)(hWnd, &upleft);
+ lppoint->x = upleft.x + ((lppoint->x * client.right) / dwScreenWidth);
+ lppoint->y = upleft.y + ((lppoint->y * client.bottom) / dwScreenHeight);
+}
+
+POINT dxwCore::ClientOffset(HWND hwnd)
+{
+ RECT desktop;
+ POINT upleft, win0, desk0, ret;
+ ret.x = ret.y = 0;
+
+ (*pGetClientRect)(hWnd,&desktop);
+ if(!desktop.right || !desktop.bottom) return ret;
+
+ upleft.x = upleft.y = 0;
+ (*pClientToScreen)(hwnd, &upleft);
+ win0 = upleft;
+ upleft.x = upleft.y = 0;
+ (*pClientToScreen)(hWnd, &upleft);
+ desk0 = upleft;
+ if (desktop.right) ret.x = ((win0.x - desk0.x) * (LONG)dwScreenWidth) / desktop.right;
+ if (desktop.bottom) ret.y = ((win0.y - desk0.y) * (LONG)dwScreenHeight) / desktop.bottom;
+ OutTraceB("ClientOffset: hwnd=%x offset=(%d,%d)\n", hwnd, ret.x, ret.y);
+ return ret;
+}
+
+RECT dxwCore::GetWindowRect(RECT win)
+{
+ RECT desktop;
+ POINT desk0;
+ desk0.x = desk0.y = 0;
+
+ (*pGetClientRect)(hWnd, &desktop);
+ (*pClientToScreen)(hWnd,&desk0);
+
+ if(!desktop.right || !desktop.bottom) return win;
+
+ win.left = ((win.left - desk0.x) * (LONG)dwScreenWidth) / desktop.right;
+ win.top = ((win.top - desk0.y) * (LONG)dwScreenHeight) / desktop.bottom;
+ win.right = ((win.right - desk0.x) * (LONG)dwScreenWidth) / desktop.right;
+ win.bottom = ((win.bottom - desk0.y) * (LONG)dwScreenWidth) / desktop.right;
+
+ return win;
+}
+
+RECT dxwCore::GetClientRect(RECT win)
+{
+ RECT desktop;
+ (*pGetClientRect)(hWnd, &desktop);
+
+ if(!desktop.right || !desktop.bottom) return win;
+
+ win.left = (win.left * dwScreenWidth) / desktop.right;
+ win.top = (win.top * dwScreenHeight) / desktop.bottom;
+ win.right = (win.right * dwScreenWidth) / desktop.right;
+ win.bottom = (win.bottom * dwScreenHeight) / desktop.bottom;
+
+ return win;
+}
+
+POINT dxwCore::AddCoordinates(POINT p1, POINT p2)
+{
+ POINT ps;
+ ps.x = p1.x + p2.x;
+ ps.y = p1.y + p2.y;
+ return ps;
+}
+
+POINT dxwCore::SubCoordinates(POINT p1, POINT p2)
+{
+ POINT ps;
+ ps.x = p1.x - p2.x;
+ ps.y = p1.y - p2.y;
+ return ps;
}
void dxwCore::ScreenRefresh(void)
@@ -331,7 +441,6 @@ void dxwCore::ScreenRefresh(void)
#define DXWREFRESHINTERVAL 20
LPDIRECTDRAWSURFACE lpDDSPrim;
-// extern LPDIRECTDRAWSURFACE GetPrimarySurface();
extern HRESULT WINAPI extBlt(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx);
static int t = -1;
@@ -376,7 +485,7 @@ static void CountFPS(HWND hwnd)
DWORD tmp;
tmp = (*pGetTickCount)();
if((tmp - time) > 1000) {
- char sBuf[80+12+1]; // title + fps string + terminator
+ char sBuf[80+15+1]; // title + fps string + terminator
char *fpss;
// log fps count
OutTrace("FPS: Delta=%x FPSCount=%d\n", (tmp-time), FPSCount);
@@ -387,7 +496,7 @@ static void CountFPS(HWND hwnd)
GetWindowText(hwnd, sBuf, 80);
fpss=strstr(sBuf," ~ (");
if(fpss==NULL) fpss=&sBuf[strlen(sBuf)];
- sprintf(fpss, " ~ (%d FPS)", FPSCount);
+ sprintf_s(fpss, 15, " ~ (%d FPS)", FPSCount);
SetWindowText(hwnd, sBuf);
}
// reset
@@ -396,7 +505,7 @@ static void CountFPS(HWND hwnd)
}
else {
FPSCount++;
- OutTrace("FPS: Delta=%x FPSCount++=%d\n", (tmp-time), FPSCount);
+ OutTraceB("FPS: Delta=%x FPSCount++=%d\n", (tmp-time), FPSCount);
}
}
@@ -573,7 +682,7 @@ void dxwCore::ShowFPS(HDC xdc)
SetTextColor(xdc,color);
//SetBkMode(xdc, TRANSPARENT);
SetBkMode(xdc, OPAQUE);
- sprintf(sBuf, "FPS: %d", GetHookInfo()->FPSCount);
+ sprintf_s(sBuf, 80, "FPS: %d", GetHookInfo()->FPSCount);
TextOut(xdc, x, y, sBuf, strlen(sBuf));
}
@@ -602,7 +711,7 @@ void dxwCore::ShowFPS(LPDIRECTDRAWSURFACE lpdds)
SetTextColor(xdc,color);
//SetBkMode(xdc, TRANSPARENT);
SetBkMode(xdc, OPAQUE);
- sprintf(sBuf, "FPS: %d", GetHookInfo()->FPSCount);
+ sprintf_s(sBuf, 80, "FPS: %d", GetHookInfo()->FPSCount);
TextOut(xdc, x, y, sBuf, strlen(sBuf));
lpdds->ReleaseDC(xdc);
}
diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp
index a7577ea..66da8bf 100644
--- a/dll/dxwcore.hpp
+++ b/dll/dxwcore.hpp
@@ -20,10 +20,9 @@ public: // methods
void SetScreenSize(int x, int y) {if(x)dwScreenWidth=x; if(y)dwScreenHeight=y;}
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;}
+ BOOL IsDesktop(HWND);
POINT FixCursorPos(POINT);
POINT FixCursorPos(HWND, POINT);
void FixNCHITCursorPos(LPPOINT);
@@ -31,8 +30,18 @@ public: // methods
void EraseClipCursor(void);
RECT MapWindowRect(LPRECT lpRect);
RECT MapWindowRect(void);
- void MapPoint(LPPOINT);
- void UnmapPoint(LPPOINT);
+ void MapClient(LPPOINT);
+ void MapClient(LPRECT);
+ void MapClient(int *, int *, int *, int *);
+ void MapWindow(LPPOINT);
+ void MapWindow(LPRECT);
+ void MapWindow(int *, int *, int *, int *);
+ RECT GetScreenRect(void);
+ RECT GetWindowRect(RECT);
+ RECT GetClientRect(RECT);
+ POINT AddCoordinates(POINT, POINT);
+ POINT SubCoordinates(POINT, POINT);
+ POINT ClientOffset(HWND);
void ScreenRefresh(void);
BOOL HandleFPS(void);
DWORD GetTickCount(void);
diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp
index 4ec646a..a7a6cc6 100644
--- a/dll/dxwnd.cpp
+++ b/dll/dxwnd.cpp
@@ -24,7 +24,7 @@ along with this program. If not, see .
#include "dxwnd.h"
#include "dxwcore.hpp"
-#define VERSION "2.02.18"
+#define VERSION "2.02.19"
LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam);
diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo
index 5cbd7d1..399e480 100644
Binary files a/dll/dxwnd.vs2008.suo and b/dll/dxwnd.vs2008.suo differ
diff --git a/dll/dxwnd.vs2008.vcproj.User-PC.User.user b/dll/dxwnd.vs2008.vcproj.User-PC.User.user
new file mode 100644
index 0000000..21df666
--- /dev/null
+++ b/dll/dxwnd.vs2008.vcproj.User-PC.User.user
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dll/hd3d.cpp b/dll/hd3d.cpp
index 7b44a29..7a108ab 100644
--- a/dll/hd3d.cpp
+++ b/dll/hd3d.cpp
@@ -361,6 +361,10 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,
param[2] = mode.Format;
OutTraceD(" Current Format = 0x%x\n", mode.Format);
+ // useless ...
+ //param[0] = 0; //defaulting to window width
+ //param[1] = 0; //defaulting to window height
+ //param[2] = D3DFMT_UNKNOWN; // try
if(dwD3DVersion == 9){
param[7] = 0; //hDeviceWindow
diff --git a/dll/hddraw.cpp b/dll/hddraw.cpp
index 9b5641a..207a068 100644
--- a/dll/hddraw.cpp
+++ b/dll/hddraw.cpp
@@ -671,7 +671,12 @@ int lpddsHookedVersion(LPDIRECTDRAWSURFACE lpdds)
char sMsg[81];
void * extGetCaps;
+ __try{
extGetCaps=(void *)*(DWORD *)(*(DWORD *)lpdds + 56);
+ }
+ __except (EXCEPTION_EXECUTE_HANDLER){
+ extGetCaps=NULL;
+ };
if(extGetCaps==(void *)extGetCaps1S) return 1;
if(extGetCaps==(void *)extGetCaps2S) return 2;
if(extGetCaps==(void *)extGetCaps3S) return 3;
@@ -688,7 +693,12 @@ int lpddHookedVersion(LPDIRECTDRAW lpdd)
char sMsg[81];
void * extCreateSurface;
+ __try{
extCreateSurface=(void *)*(DWORD *)(*(DWORD *)lpdd + 24);
+ }
+ __except (EXCEPTION_EXECUTE_HANDLER){
+ extCreateSurface=NULL;
+ };
if(extCreateSurface==(void *)extCreateSurface1) return 1;
if(extCreateSurface==(void *)extCreateSurface2) return 2;
if(extCreateSurface==(void *)extCreateSurface4) return 4;
@@ -1788,7 +1798,7 @@ HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurf
// some games (Monopoly 3D) may depend on this setting - i.e. they could close
// the exceeding references - so this is better be replicated adding an initial
// reference to the zero count.
- lpDDSBack->AddRef(); // should it be repeated BBCount times????
+ if (lpDDSBack) lpDDSBack->AddRef(); // should it be repeated BBCount times????
// rebuild emulated primary surface
@@ -1847,28 +1857,19 @@ HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurf
OutTraceD("CreateSurface: created DDSEmu_Prim=%x DDSEmu_Back=%x DDSPrim=%x DDSBack=%x\n",
lpDDSEmu_Prim, lpDDSEmu_Back, lpDDSPrim, lpDDSBack);
- // creation of lpDDSHDC service surfae moved to GetDC method
+ // creation of lpDDSHDC service surface moved to GetDC method
if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();
return 0;
}
- // not primary emulated surface ....
- // try begin
- //if((ddsd.dwFlags && DDSD_CAPS) && (ddsd.ddsCaps.dwCaps && DDSCAPS_ZBUFFER)){
- // pfmt="untouched";
- //}
- //else
- //end try
if(((ddsd.dwFlags & DDSD_WIDTH) && !(ddsd.dwFlags & DDSD_HEIGHT)) ||
(ddsd.dwFlags & DDSD_ZBUFFERBITDEPTH) ||
- //(ddsd.dwFlags & DDSD_PIXELFORMAT) ||
- ((ddsd.dwFlags & DDSD_PIXELFORMAT) && !(ddsd.dwFlags & DDSD_PITCH)) || // fix good for "Wargames"
- //((ddsd.dwFlags & DDSD_CAPS) && (ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE)) ||
- ((ddsd.dwFlags & DDSD_CAPS) && (ddsd.ddsCaps.dwCaps & DDSCAPS_3DDEVICE))){
+ ((ddsd.dwFlags & DDSD_PIXELFORMAT) && !(ddsd.dwFlags & DDSD_PITCH) && !(ddsd.ddsCaps.dwCaps & DDSCAPS_3DDEVICE)) || // fix good for "Wargames"
+ ((ddsd.dwFlags & DDSD_CAPS) && (ddsd.ddsCaps.dwCaps & DDSCAPS_3DDEVICE) && !(ddsd.dwFlags & DDSD_PIXELFORMAT)) // fix good for Premier Manager 98
+ ){
// don't alter pixel format
- //ddsd.dwFlags &= ~DDSD_PIXELFORMAT; // Warhammer Dark Omen
- ddsd.dwFlags &= ~DDSD_PIXELFORMAT; // Wargames ???
+ ddsd.dwFlags &= ~DDSD_PIXELFORMAT; // Wargames, Warhammer Dark Omen
pfmt="(none)";
}
else {
@@ -2261,6 +2262,21 @@ static void BlitError(HRESULT res, LPRECT lps, LPRECT lpd, int line)
return;
}
+static void BlitTrace(char *label, LPRECT lps, LPRECT lpd, int line)
+{
+ OutTrace("Blt: %s", label);
+ if (lps)
+ OutTrace(" src=(%d,%d)-(%d,%d)",lps->left, lps->top, lps->right, lps->bottom);
+ else
+ OutTrace(" src=(NULL)");
+ if (lpd)
+ OutTrace(" dest=(%d,%d)-(%d,%d)",lpd->left, lpd->top, lpd->right, lpd->bottom);
+ else
+ OutTrace(" dest=(NULL)");
+ OutTrace(" at %d\n", __LINE__);
+ return;
+}
+
HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx, BOOL isFlipping)
{
@@ -2299,22 +2315,24 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
OutTrace("\n");
}
-#define ONEPIXELFIXFlag 1
+#ifdef ONEPIXELFIX
+ if (lpdestrect){
+ if ((lpdestrect->top == 0) && (lpdestrect->bottom == dxw.GetScreenHeight() -1)) lpdestrect->bottom = dxw.GetScreenHeight();
+ if ((lpdestrect->left == 0) && (lpdestrect->right == dxw.GetScreenWidth() -1)) lpdestrect->right = dxw.GetScreenWidth();
+ }
+ if (lpsrcrect){
+ if ((lpsrcrect->top == 0) && (lpsrcrect->bottom == dxw.GetScreenHeight() -1)) lpsrcrect->bottom = dxw.GetScreenHeight();
+ if ((lpsrcrect->left == 0) && (lpsrcrect->right == dxw.GetScreenWidth() -1)) lpsrcrect->right = dxw.GetScreenWidth();
+ }
+#endif
+
#define FIXBIGGERRECT 1
-
- if (ONEPIXELFIXFlag){
- if (lpdestrect){
- if (lpdestrect->bottom == dxw.GetScreenHeight() -1) lpdestrect->bottom = dxw.GetScreenHeight();
- if (lpdestrect->right == dxw.GetScreenWidth() -1) lpdestrect->right = dxw.GetScreenWidth();
- }
- }
-
- if(FIXBIGGERRECT){
- if(ToPrim && lpdestrect){
- if((DWORD)lpdestrect->bottom > dxw.GetScreenHeight()) lpdestrect->bottom = dxw.GetScreenHeight();
- if((DWORD)lpdestrect->right > dxw.GetScreenWidth()) lpdestrect->right = dxw.GetScreenWidth();
- }
+#ifdef FIXBIGGERRECT
+ if(ToPrim && lpdestrect){
+ if((DWORD)lpdestrect->bottom > dxw.GetScreenHeight()) lpdestrect->bottom = dxw.GetScreenHeight();
+ if((DWORD)lpdestrect->right > dxw.GetScreenWidth()) lpdestrect->right = dxw.GetScreenWidth();
}
+#endif
if((dxw.dwFlags1 & EMULATESURFACE) && (dwflags==DDBLT_COLORFILL)){
OutTraceD("Debug: dwFillDepth=%d, EmuBPP=%d, dwFillColor=%x\n",
@@ -2370,18 +2388,22 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
srcrect=dxw.MapWindowRect(lpsrcrect);
}
}
+
+ if (IsDebug) BlitTrace("NOPRIM", lpsrcrect, lpdestrect, __LINE__);
res= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags, lpddbltfx);
// Blitting compressed data may work to screen surfaces only. In this case, it may be worth
// trying blitting directly to lpDDSEmu_Prim: it makes DK2 intro movies working.
switch(res){
case DDERR_UNSUPPORTED:
if (dxw.dwFlags1 & EMULATESURFACE){
+ if (IsDebug) BlitTrace("UNSUPP", lpsrcrect ? &srcrect : NULL, lpdestrect, __LINE__);
res=(*pBlt)(lpDDSEmu_Prim, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags, lpddbltfx);
}
break;
case DDERR_SURFACEBUSY:
(*pUnlockMethod(lpdds))(lpdds, NULL);
- if (lpddssrc) (*pUnlockMethod(lpddssrc))(lpddssrc, NULL);
+ if (lpddssrc) (*pUnlockMethod(lpddssrc))(lpddssrc, NULL);
+ if (IsDebug) BlitTrace("BUSY", lpsrcrect ? &srcrect : NULL, lpdestrect, __LINE__);
res=(*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags|DDBLT_WAIT, lpddbltfx);
break;
default:
@@ -2402,8 +2424,7 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
res=0;
// blit only when source and dest surface are different. Should make ScreenRefresh faster.
if (lpdds != lpddssrc) {
- //OutTrace("DEBUG: lpdds=%x lpddssrc=%x destrect=(%d,%d)-(%d,%d) lpsrcrect=%x flags=%x lpddbltfx=%x\n",
- // lpdds, lpddssrc, destrect.left, destrect.top, destrect.right, destrect.bottom, lpsrcrect, dwflags, lpddbltfx);
+ if (IsDebug) BlitTrace("PRIM-NOEMU", lpsrcrect, &destrect, __LINE__);
res= (*pBlt)(lpdds, &destrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);
}
if(res){
@@ -2411,6 +2432,7 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
// Try to handle HDC lock concurrency....
if(res==DDERR_SURFACEBUSY){
(*pUnlockMethod(lpdds))(lpdds, NULL);
+ if (IsDebug) BlitTrace("BUSY", lpsrcrect, &destrect, __LINE__);
res= (*pBlt)(lpdds, &destrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);
if (res) BlitError(res, lpsrcrect, &destrect, __LINE__);
}
@@ -2445,8 +2467,10 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
res=0;
// blit only when source and dest surface are different. Should make ScreenRefresh faster.
- if (lpdds != lpddssrc)
+ if (lpdds != lpddssrc){
+ if (IsDebug) BlitTrace("SRC2EMU", &emurect, &destrect, __LINE__);
res=(*pBlt)(lpdds, &emurect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);
+ }
if (res) {
BlitError(res, lpsrcrect, &emurect, __LINE__);
@@ -2458,6 +2482,7 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
*/
if(res==DDERR_UNSUPPORTED){
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(lpddssrc);
+ if (IsDebug) BlitTrace("UNSUPP", &emurect, &destrect, __LINE__);
res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);
if (res) BlitError(res, lpsrcrect, &destrect, __LINE__);
}
@@ -2466,6 +2491,7 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
if(res==DDERR_SURFACEBUSY){
res=(*pUnlockMethod(lpddssrc))(lpddssrc, NULL);
if(res) OutTraceE("Unlock ERROR: err=%x(%s)\n", res, ExplainDDError(res));
+ if (IsDebug) BlitTrace("BUSY", &emurect, &destrect, __LINE__);
res=(*pBlt)(lpdds, &emurect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);
if (res) BlitError(res, lpsrcrect, &destrect, __LINE__);
}
@@ -2494,14 +2520,17 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
}
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(lpDDSSource);
+ if (IsDebug) BlitTrace("BACK2PRIM", &emurect, &destrect, __LINE__);
res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect, DDBLT_WAIT, 0);
if (res==DDERR_NOCLIPLIST){
RenewClipper(lpDD, lpDDSEmu_Prim);
+ if (IsDebug) BlitTrace("NOCLIP", &emurect, &destrect, __LINE__);
res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect, DDBLT_WAIT, 0);
}
if (res) BlitError(res, &emurect, &destrect, __LINE__);
if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=0;
+ if (IsDebug) OutTrace("%s: done ret=%x at %d\n", api, res, __LINE__);
return res;
}
@@ -2739,35 +2768,10 @@ HRESULT WINAPI extSetPalette(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpdd
isPrim=dxw.IsAPrimarySurface(lpdds);
OutTraceD("SetPalette: lpdds=%x%s lpddp=%x\n", lpdds, isPrim?"(PRIM)":"", lpddp);
-#if 0
- if(!(dxw.dwFlags1 & EMULATESURFACE) || !isPrim) {
- res=(*pSetPalette)(lpdds, lpddp);
- if(res)OutTraceE("SetPalette: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
- return res;
- }
-
- OutTraceD("SetPalette: DEBUG emulating palette\n");
- lpDDP = lpddp;
- //if (lpDDSBack) { GHOGHO
- // res=(*pSetPalette)(lpDDSBack, lpddp);
- // if(res) OutTraceE("SetPalette: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
- //}
- // add a reference to simulate what would happen in reality....
- lpdds->AddRef();
-
- if(lpddp){
- lpentries = (LPPALETTEENTRY)PaletteEntries;
- res=lpddp->GetEntries(0, 0, 256, lpentries);
- if(res) OutTraceE("SetPalette: GetEntries ERROR res=%x(%s)\n", res, ExplainDDError(res));
- mySetPalette(0, 256, lpentries);
- }
-
- return 0;
-#else
res=(*pSetPalette)(lpdds, lpddp);
if(res)OutTraceE("SetPalette: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
- if((dxw.dwFlags1 & EMULATESURFACE) && (res==DD_OK)){
+ if(dxw.dwFlags1 & EMULATESURFACE){
OutTraceD("SetPalette: DEBUG emulating palette\n");
lpDDP = lpddp;
@@ -2778,10 +2782,10 @@ HRESULT WINAPI extSetPalette(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpdd
if(res2) OutTraceE("SetPalette: GetEntries ERROR res=%x(%s)\n", res2, ExplainDDError(res2));
mySetPalette(0, 256, lpentries);
}
+ res=0;
}
return res;
-#endif
}
HRESULT WINAPI extSetEntries(LPDIRECTDRAWPALETTE lpddp, DWORD dwflags, DWORD dwstart, DWORD dwcount, LPPALETTEENTRY lpentries)
diff --git a/dll/syslibs.cpp b/dll/syslibs.cpp
index fcc37fd..0525b66 100644
--- a/dll/syslibs.cpp
+++ b/dll/syslibs.cpp
@@ -192,6 +192,10 @@ HWND WINAPI extCreateWindowExA(
)
&&
(((DWORD)nWidth>=dxw.GetScreenWidth())&&((DWORD)nHeight>=dxw.GetScreenHeight()))
+ &&
+ !(dwExStyle & WS_EX_CONTROLPARENT) // Diablo fix
+ &&
+ !(dwStyle & WS_CHILD) // Diablo fix
){
RECT screen;
POINT upleft = {0,0};
@@ -240,32 +244,19 @@ HWND WINAPI extCreateWindowExA(
// tested on Gangsters: coordinates must be window-relative!!!
// Age of Empires....
if (dwStyle & WS_CHILD){
- RECT screen;
- (*pGetClientRect)(dxw.GethWnd(),&screen);
- x=x*screen.right/dxw.GetScreenWidth();
- y=y*screen.bottom/dxw.GetScreenHeight();
- nWidth=nWidth*screen.right/dxw.GetScreenWidth();
- nHeight=nHeight*screen.bottom/dxw.GetScreenHeight();
+ dxw.MapClient(&x, &y, &nWidth, &nHeight);
OutTraceD("CreateWindowEx: fixed WS_CHILD pos=(%d,%d) size=(%d,%d)\n",
x, y, nWidth, nHeight);
}
// needed for Diablo, that creates a new control parent window that must be
// overlapped to the directdraw surface.
else if (dwExStyle & WS_EX_CONTROLPARENT){
- RECT screen;
- POINT upleft = {0,0};
- (*pGetClientRect)(dxw.GethWnd(),&screen);
- (*pClientToScreen)(dxw.GethWnd(),&upleft);
- x=upleft.x;
- y=upleft.y;
- nWidth=screen.right;
- nHeight=screen.bottom;
- OutTraceD("CreateWindowEx: fixed WS_EX_CONTROLPARENT win=(%d,%d)-(%d,%d)\n",
- x, y, x+nWidth, y+nHeight);
+ dxw.MapWindow(&x, &y, &nWidth, &nHeight);
+ OutTraceD("CreateWindowEx: fixed WS_EX_CONTROLPARENT pos=(%d,%d) size=(%d,%d)\n",
+ x, y, nWidth, nHeight);
}
- if(IsDebug)
- OutTrace("CreateWindowEx: fixed pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n",
+ OutTraceB("CreateWindowEx: fixed pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n",
x, y, nWidth, nHeight, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
wndh= (*pCreateWindowExA)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight,
@@ -281,7 +272,6 @@ HWND WINAPI extCreateWindowExA(
extern void AdjustWindowPos(HWND, DWORD, DWORD);
(*pSetWindowLong)(wndh, GWL_STYLE, (dxw.dwFlags2 & MODALSTYLE) ? 0 : WS_OVERLAPPEDWINDOW);
(*pSetWindowLong)(wndh, GWL_EXSTYLE, 0);
- //(*pShowWindow)(wndh, SW_SHOWNORMAL);
OutTraceD("CreateWindow: hwnd=%x, set style=WS_OVERLAPPEDWINDOW extstyle=0\n", wndh);
AdjustWindowPos(wndh, nWidth, nHeight);
(*pShowWindow)(wndh, SW_SHOWNORMAL);
@@ -536,10 +526,26 @@ BOOL WINAPI extRectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, i
int WINAPI extFillRect(HDC hdc, const RECT *lprc, HBRUSH hbr)
{
- RECT rc;
+ RECT rc, trim;
+ HWND hWnd;
OutTraceD("FillRect: hdc=%x xy=(%d,%d)-(%d,%d)\n", hdc, lprc->left, lprc->top, lprc->right, lprc->bottom);
memcpy(&rc, lprc, sizeof(rc));
+ hWnd = WindowFromDC(hdc);
+ if((hWnd == dxw.GethWnd()) ||
+ (hWnd == 0) ||
+ (hWnd == GetDesktopWindow())){
+ // trim: some games (Player Manager 98) clear the screen by filling an exagerated rect
+ (*pGetClientRect)(dxw.GethWnd(), &trim);
+ hdc=GetDC(dxw.GethWnd());
+ dxw.MapWindowRect(&rc);
+ if(rc.left < trim.left) rc.left = trim.left;
+ if(rc.top < trim.top) rc.top = trim.top;
+ if(rc.right > trim.right) rc.right = trim.right;
+ if(rc.bottom > trim.bottom) rc.bottom = trim.bottom;
+ OutTraceD("FillRect: hwnd=%x hdc=%x fixed xy=(%d,%d)-(%d,%d)\n", hWnd, hdc, rc.left, rc.top, rc.right, rc.bottom);
+ }
if (dxw.dwFlags1 & FIXTEXTOUT) {
+ // to be verified: why shifting and not scaling?
POINT anchor;
anchor.x=rc.left;
anchor.y=rc.top;
@@ -1274,10 +1280,11 @@ BOOL WINAPI extClientToScreen(HWND hwnd, LPPOINT lppoint)
{
// v2.02.10: fully revised to handle scaled windows
BOOL res;
+
OutTraceB("ClientToScreen: hwnd=%x hWnd=%x FullScreen=%x point=(%d,%d)\n",
hwnd, dxw.GethWnd(), dxw.IsFullScreen(), lppoint->x, lppoint->y);
if (lppoint && dxw.IsFullScreen()){
- dxw.MapPoint(lppoint);
+ *lppoint = dxw.AddCoordinates(*lppoint, dxw.ClientOffset(hwnd));
OutTraceB("ClientToScreen: FIXED point=(%d,%d)\n", lppoint->x, lppoint->y);
res=TRUE;
}
@@ -1293,8 +1300,11 @@ BOOL WINAPI extScreenToClient(HWND hwnd, LPPOINT lppoint)
BOOL res;
OutTraceB("ScreenToClient: hwnd=%x hWnd=%x FullScreen=%x point=(%d,%d)\n",
hwnd, dxw.GethWnd(), dxw.IsFullScreen(), lppoint->x, lppoint->y);
+
+ if (lppoint && (lppoint->x == -32000) && (lppoint->y == -32000)) return 1;
+
if (lppoint && dxw.IsFullScreen()){
- dxw.UnmapPoint(lppoint);
+ *lppoint = dxw.SubCoordinates(*lppoint, dxw.ClientOffset(hwnd));
OutTraceB("ScreenToClient: FIXED point=(%d,%d)\n", lppoint->x, lppoint->y);
res=TRUE;
}
@@ -1307,72 +1317,62 @@ BOOL WINAPI extScreenToClient(HWND hwnd, LPPOINT lppoint)
BOOL WINAPI extGetClientRect(HWND hwnd, LPRECT lpRect)
{
BOOL ret;
- OutTraceD("GetClientRect: whnd=%x FullScreen=%x\n", hwnd, dxw.IsFullScreen());
- if (lpRect && dxw.IsFullScreen() && (hwnd == dxw.GethWnd())){
- lpRect->left=0;
- lpRect->top=0;
- lpRect->right=dxw.GetScreenWidth();
- lpRect->bottom=dxw.GetScreenHeight();
- OutTraceD("GetClientRect: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
- return 1;
- }
+ OutTraceB("GetClientRect: whnd=%x FullScreen=%x\n", hwnd, dxw.IsFullScreen());
+
+ if(!lpRect) return 0;
- // v2.1.75: in PREVENTMAXIMIZE mode, prevent the application to know the actual size of the desktop
- // by calling GetClientRect on it!! Used to windowize "AfterLife".
- // should I do the same with hwnd==0 ??
- if ((hwnd==(*pGetDesktopWindow)()) || (hwnd==0)){
- lpRect->left=0;
- lpRect->top=0;
- lpRect->right=dxw.GetScreenWidth();
- lpRect->bottom=dxw.GetScreenHeight();
- OutTraceD("GetClientRect: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
- return 1;
- }
-
// proxed call
ret=(*pGetClientRect)(hwnd, lpRect);
- OutTraceB("GetClientRect: rect=(%d,%d)-(%d,%d) ret=%d\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, ret);
- return ret;
+ if(!ret) {
+ OutTraceE("GetClientRect: ERROR hwnd=%x err=%d at %d\n", hwnd, GetLastError(), __LINE__);
+ return ret;
}
+ OutTraceB("GetClientRect: actual rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
+
+ if (dxw.IsDesktop(hwnd)){
+ *lpRect = dxw.GetScreenRect();
+ OutTraceB("GetClientRect: desktop rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
+ }
+ else
+ if (dxw.IsFullScreen()){
+ *lpRect=dxw.GetClientRect(*lpRect);
+ OutTraceB("GetClientRect: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
+ }
+ return ret;
+}
BOOL WINAPI extGetWindowRect(HWND hwnd, LPRECT lpRect)
{
BOOL ret;
-
- OutTraceD("GetWindowRect: hwnd=%x hWnd=%x FullScreen=%x\n", hwnd, dxw.GethWnd(), dxw.IsFullScreen());
- if (lpRect && dxw.IsFullScreen() && (hwnd == dxw.GethWnd())){
- // a fullscreen window should have NO BORDERS!
- lpRect->left = 0;
- lpRect->top = 0;
- lpRect->right = dxw.GetScreenWidth();
- lpRect->bottom = dxw.GetScreenHeight();
- OutTraceD("GetWindowRect: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
- return 1;
- }
-
- if (dxw.IsFullScreen() && ((*pGetWindowLong)(hwnd, GWL_STYLE) & WS_CHILD)){
- // a child win should return the original supposed size
- // so you basically revert here the coordinates compensation.
- // Used by "Road Rash" to blit graphic on top of child windows
- POINT upleft={0,0};
- RECT client;
- (*pClientToScreen)(dxw.GethWnd(),&upleft);
- (*pGetClientRect)(dxw.GethWnd(),&client);
-
- // using GetWindowRect and compensate for displacement.....
- ret=(*pGetWindowRect)(hwnd, lpRect);
- if (client.right && client.bottom){ // avoid divide by 0
- lpRect->left = ((lpRect->left - upleft.x) * dxw.GetScreenWidth()) / client.right;
- lpRect->top = ((lpRect->top - upleft.y) * dxw.GetScreenHeight()) / client.bottom;
- lpRect->right = ((lpRect->right - upleft.x) * dxw.GetScreenWidth()) / client.right;
- lpRect->bottom = ((lpRect->bottom - upleft.y) * dxw.GetScreenHeight()) / client.bottom;
- OutTraceD("GetWindowRect: fixed CHILD rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
- }
+ OutTraceB("GetWindowRect: hwnd=%x hWnd=%x FullScreen=%x\n", hwnd, dxw.GethWnd(), dxw.IsFullScreen());
+ ret=(*pGetWindowRect)(hwnd, lpRect);
+ if(!ret) {
+ OutTraceE("GetWindowRect: GetWindowRect hwnd=%x error %d at %d\n", hwnd, GetLastError(), __LINE__);
return ret;
}
+ OutTraceB("GetWindowRect: rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
+
+ // minimized windows behaviour
+ if((lpRect->left == -32000)||(lpRect->top == -32000)) return ret;
+
+ if (dxw.IsDesktop(hwnd)){
+ // to avoid keeping track of window frame
+ *lpRect = dxw.GetScreenRect();
+ OutTraceB("GetWindowRect: desktop rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
+ }
+ else
+ if (dxw.IsFullScreen()){
+ *lpRect=dxw.GetWindowRect(*lpRect);
+
+ // Diablo fix: it retrieves coordinates for the explorer window, that are as big as the real desktop!!!
+ if(lpRect->left < 0) lpRect->left=0;
+ if(lpRect->right > (LONG)dxw.GetScreenWidth()) lpRect->right=dxw.GetScreenWidth();
+ if(lpRect->top < 0) lpRect->top=0;
+ if(lpRect->bottom > (LONG)dxw.GetScreenHeight()) lpRect->bottom=dxw.GetScreenHeight();
+
+ OutTraceB("GetWindowRect: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
+ }
- ret=(*pGetWindowRect)(hwnd, lpRect);
- OutTraceD("GetWindowRect: rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
return ret;
}
@@ -1429,6 +1429,8 @@ BOOL WINAPI extPeekMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsg
if((MsgCopy.message <= WM_MOUSELAST) && (MsgCopy.message >= WM_MOUSEFIRST)) MsgCopy.lParam = MAKELPARAM(MsgCopy.pt.x, MsgCopy.pt.y);
OutTraceC("PeekMessage: fixed lparam/pt=(%d,%d)\n", MsgCopy.pt.x, MsgCopy.pt.y);
lpMsg=&MsgCopy;
+ GetHookInfo()->CursorX=(short)MsgCopy.pt.x;
+ GetHookInfo()->CursorY=(short)MsgCopy.pt.y;
}
return res;
@@ -1455,6 +1457,8 @@ BOOL WINAPI extGetMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgF
lpMsg->pt=FixMessagePt(FixedHwnd, lpMsg->pt);
lpMsg->lParam = MAKELPARAM(lpMsg->pt.x, lpMsg->pt.y);
OutTraceC("PeekMessage: fixed lparam/pt=(%d,%d)\n", lpMsg->pt.x, lpMsg->pt.y);
+ GetHookInfo()->CursorX=(short)lpMsg->pt.x;
+ GetHookInfo()->CursorY=(short)lpMsg->pt.y;
}
return res;
}
@@ -1469,6 +1473,7 @@ BOOL WINAPI extGetMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgF
#define SYSLIBIDX_DIRECTDRAW 4
#define SYSLIBIDX_OPENGL 5
#define SYSLIBIDX_MSVFW 6
+//#define SYSLIBIDX_SMACK 7
#define SYSLIBIDX_MAX 7 // array size
HMODULE SysLibs[SYSLIBIDX_MAX];
char *SysNames[SYSLIBIDX_MAX]={
@@ -1478,7 +1483,8 @@ char *SysNames[SYSLIBIDX_MAX]={
"ole32.dll",
"ddraw.dll",
"opengl32.dll",
- "msvfw32.dll"
+ //"msvfw32.dll",
+ "smackw32.dll"
};
char *SysNames2[SYSLIBIDX_MAX]={
"kernel32",
@@ -1487,7 +1493,8 @@ char *SysNames2[SYSLIBIDX_MAX]={
"ole32",
"ddraw",
"opengl32",
- "msvfw32"
+ //"msvfw32",
+ "smackw32"
};
extern void HookModule(HMODULE, int);
extern void HookSysLibs(HMODULE);
@@ -1525,7 +1532,7 @@ HMODULE WINAPI LoadLibraryExWrapper(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFl
idx=SYSLIBIDX_OPENGL;
SysLibs[idx]=libhandle;
}
- HookModule(libhandle, 0);
+ if (idx == SYSLIBIDX_MAX) HookModule(libhandle, 0);
return libhandle;
}
@@ -1537,7 +1544,7 @@ HMODULE WINAPI extLoadLibraryA(LPCTSTR lpFileName)
HMODULE WINAPI extLoadLibraryW(LPCWSTR lpFileName)
{
char sFileName[256+1];
- wcstombs(sFileName, lpFileName, 80);
+ wcstombs_s(NULL, sFileName, lpFileName, 80);
return LoadLibraryExWrapper(sFileName, NULL, 0, "LoadLibraryW");;
}
@@ -1549,7 +1556,7 @@ HMODULE WINAPI extLoadLibraryExA(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags
HMODULE WINAPI extLoadLibraryExW(LPCWSTR lpFileName, HANDLE hFile, DWORD dwFlags)
{
char sFileName[256+1];
- wcstombs(sFileName, lpFileName, 80);
+ wcstombs_s(NULL, sFileName, lpFileName, 80);
return LoadLibraryExWrapper(sFileName, hFile, dwFlags, "LoadLibraryExW");;
}
@@ -1829,7 +1836,7 @@ BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
int nWDest, nHDest;
nWDest= nWidth;
nHDest= nHeight;
- dxw.MapRect(&nXDest, &nYDest, &nWDest, &nHDest);
+ dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
}
@@ -1852,7 +1859,7 @@ BOOL WINAPI extGDIPatBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdcDest))){
int nWDest, nHDest;
- dxw.MapRect(&nXDest, &nYDest, &nWDest, &nHDest);
+ dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, dwRop);
}
diff --git a/host/Resource.h b/host/Resource.h
index f220f6f..0823b97 100644
--- a/host/Resource.h
+++ b/host/Resource.h
@@ -82,6 +82,8 @@
#define IDC_USERGB565 1033
#define IDC_SUPPRESSDXERRORS 1034
#define IDC_PREVENTMAXIMIZE 1035
+#define IDC_SUPPRESSDXERRORS2 1035
+#define IDC_MARKBLIT 1035
#define IDC_OUTWINMESSAGES 1036
#define IDC_OUTDXTRACE 1037
#define IDC_MODEXEMULATION 1038
diff --git a/host/TabDirectX.cpp b/host/TabDirectX.cpp
index 67adfa2..fc26bc0 100644
--- a/host/TabDirectX.cpp
+++ b/host/TabDirectX.cpp
@@ -38,6 +38,7 @@ void CTabDirectX::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_VIDEOTOSYSTEMMEM, cTarget->m_VideoToSystemMem);
DDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565);
DDX_Check(pDX, IDC_SUPPRESSDXERRORS, cTarget->m_SuppressDXErrors);
+ DDX_Check(pDX, IDC_MARKBLIT, cTarget->m_MarkBlit);
DDX_Check(pDX, IDC_MAPGDITOPRIMARY, cTarget->m_MapGDIToPrimary);
DDX_Check(pDX, IDC_BACKBUFATTACH, cTarget->m_BackBufAttach);
DDX_Check(pDX, IDC_FULLRECTBLT, cTarget->m_FullRectBlt);
diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp
index 54f9508..7c4290c 100644
--- a/host/TargetDlg.cpp
+++ b/host/TargetDlg.cpp
@@ -60,6 +60,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_KeepCursorFixed = FALSE;
m_UseRGB565 = FALSE;
m_SuppressDXErrors = FALSE;
+ m_MarkBlit = FALSE;
m_PreventMaximize = FALSE;
m_ClientRemapping = FALSE;
m_MapGDIToPrimary = FALSE;
diff --git a/host/TargetDlg.h b/host/TargetDlg.h
index 689afd7..c3c1c9b 100644
--- a/host/TargetDlg.h
+++ b/host/TargetDlg.h
@@ -64,6 +64,7 @@ public:
BOOL m_KeepCursorFixed;
BOOL m_UseRGB565;
BOOL m_SuppressDXErrors;
+ BOOL m_MarkBlit;
BOOL m_PreventMaximize;
BOOL m_ClientRemapping;
BOOL m_MapGDIToPrimary;
diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps
index 2ce2eab..b0ac20a 100644
Binary files a/host/dxwndhost.aps and b/host/dxwndhost.aps differ
diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc
index 6ac0c69..9bcfa59 100644
--- a/host/dxwndhost.rc
+++ b/host/dxwndhost.rc
@@ -326,6 +326,7 @@ BEGIN
CONTROL "DirectInput Hooking",IDC_HOOKDI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,182,97,12
GROUPBOX "DirectInput",IDC_STATIC,7,172,286,61
CONTROL "Set AERO compatible mode",IDC_SETCOMPATIBILITY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,153,109,12
+ CONTROL "Highlight blit to primary",IDC_MARKBLIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,84,127,10
END
IDD_TAB_MOUSE DIALOGEX 0, 0, 300, 240
diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo
index c46af5b..7967bc4 100644
Binary files a/host/dxwndhost.vs2008.suo and b/host/dxwndhost.vs2008.suo differ
diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp
index dbfc057..4570906 100644
--- a/host/dxwndhostView.cpp
+++ b/host/dxwndhostView.cpp
@@ -98,6 +98,25 @@ CDxwndhostView::CDxwndhostView()
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &this->InitDevMode);
}
+void CDxwndhostView::SaveWinPos()
+{
+ char val[32];
+ RECT rect;
+
+ // save window rect
+ //::GetWindowRect(::GetActiveWindow(), &rect);
+ this->GetActiveWindow()->GetWindowRect(&rect);
+ if((rect.top < 0) || (rect.bottom < 0) || (rect.left < 0) || (rect.right < 0)) return;
+ sprintf_s(val, sizeof(val), "%i", rect.left);
+ WritePrivateProfileString("window", "posx", val, InitPath);
+ sprintf_s(val, sizeof(val), "%i", rect.top);
+ WritePrivateProfileString("window", "posy", val, InitPath);
+ sprintf_s(val, sizeof(val), "%i", rect.right-rect.left);
+ WritePrivateProfileString("window", "sizx", val, InitPath);
+ sprintf_s(val, sizeof(val), "%i", rect.bottom-rect.top);
+ WritePrivateProfileString("window", "sizy", val, InitPath);
+}
+
void CDxwndhostView::SaveConfigFile()
{
int i;
@@ -234,6 +253,7 @@ CDxwndhostView::~CDxwndhostView()
void CDxwndhostView::OnExit()
{
// check for running apps ....
+ this->SaveWinPos();
if (GetHookStatus(NULL)==DXW_RUNNING){
if (MessageBoxEx(0,
"A hooked task is still running.\n"
@@ -267,6 +287,7 @@ void CDxwndhostView::OnInitialUpdate()
LV_ITEM listitem;
int i;
char key[32];
+ RECT rect;
listcol.mask = LVCF_WIDTH;
listcol.cx = 100;
@@ -275,6 +296,17 @@ void CDxwndhostView::OnInitialUpdate()
GetCurrentDirectory(MAX_PATH, InitPath);
strcat_s(InitPath, sizeof(InitPath), "\\");
strcat_s(InitPath, sizeof(InitPath), m_ConfigFileName);
+
+ // restore last window pos
+ AfxGetApp()->m_pMainWnd->GetWindowRect(&rect);
+ rect.left = GetPrivateProfileInt("window", "posx", 50, InitPath);
+ rect.top = GetPrivateProfileInt("window", "posy", 50, InitPath);
+ rect.right = rect.left + GetPrivateProfileInt("window", "sizx", 320, InitPath);
+ rect.bottom = rect.top + GetPrivateProfileInt("window", "sizy", 200, InitPath);
+ AfxGetApp()->m_pMainWnd->MoveWindow(&rect, TRUE);
+ AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
+ AfxGetApp()->m_pMainWnd->UpdateWindow();
+
for(i = 0; i < MAXTARGETS; i ++){
sprintf_s(key, sizeof(key), "path%i", i);
GetPrivateProfileString("target", key, "", TargetMaps[i].path, MAX_PATH, InitPath);
@@ -427,6 +459,7 @@ void CDxwndhostView::OnModify()
dlg.m_KeepCursorFixed = TargetMaps[i].flags2 & KEEPCURSORFIXED ? 1 : 0;
dlg.m_UseRGB565 = TargetMaps[i].flags & USERGB565 ? 1 : 0;
dlg.m_SuppressDXErrors = TargetMaps[i].flags & SUPPRESSDXERRORS ? 1 : 0;
+ dlg.m_MarkBlit = TargetMaps[i].flags3 & MARKBLIT ? 1 : 0;
dlg.m_PreventMaximize = TargetMaps[i].flags & PREVENTMAXIMIZE ? 1 : 0;
dlg.m_ClientRemapping = TargetMaps[i].flags & CLIENTREMAPPING ? 1 : 0;
dlg.m_MapGDIToPrimary = TargetMaps[i].flags & MAPGDITOPRIMARY ? 1 : 0;
@@ -538,6 +571,7 @@ void CDxwndhostView::OnModify()
if(dlg.m_KeepCursorFixed) TargetMaps[i].flags2 |= KEEPCURSORFIXED;
if(dlg.m_UseRGB565) TargetMaps[i].flags |= USERGB565;
if(dlg.m_SuppressDXErrors) TargetMaps[i].flags |= SUPPRESSDXERRORS;
+ if(dlg.m_MarkBlit) TargetMaps[i].flags3 |= MARKBLIT;
if(dlg.m_PreventMaximize) TargetMaps[i].flags |= PREVENTMAXIMIZE;
if(dlg.m_ClientRemapping) TargetMaps[i].flags |= CLIENTREMAPPING;
if(dlg.m_MapGDIToPrimary) TargetMaps[i].flags |= MAPGDITOPRIMARY;
@@ -840,6 +874,7 @@ void CDxwndhostView::OnAdd()
if(dlg.m_KeepCursorFixed) TargetMaps[i].flags2 |= KEEPCURSORFIXED;
if(dlg.m_UseRGB565) TargetMaps[i].flags |= USERGB565;
if(dlg.m_SuppressDXErrors) TargetMaps[i].flags |= SUPPRESSDXERRORS;
+ if(dlg.m_MarkBlit) TargetMaps[i].flags3 |= MARKBLIT;
if(dlg.m_PreventMaximize) TargetMaps[i].flags |= PREVENTMAXIMIZE;
if(dlg.m_ClientRemapping) TargetMaps[i].flags |= CLIENTREMAPPING;
if(dlg.m_MapGDIToPrimary) TargetMaps[i].flags |= MAPGDITOPRIMARY;
@@ -1093,6 +1128,7 @@ void CDxwndhostView::OnGoToTrayIcon()
void CDxwndhostView::OnSaveFile()
{
+ this->SaveWinPos();
if (this->isUpdated)
if (MessageBoxEx(0,
"Task list has changed.\n"
diff --git a/host/dxwndhostView.h b/host/dxwndhostView.h
index 281e7d8..3dfa6e3 100644
--- a/host/dxwndhostView.h
+++ b/host/dxwndhostView.h
@@ -20,6 +20,7 @@ protected: // Create from serialization only features.
private:
void Resize(void);
void SaveConfigFile();
+ void SaveWinPos();
TARGETMAP TargetMaps[MAXTARGETS];
PRIVATEMAP TitleMaps[MAXTARGETS];
char InitPath[MAX_PATH];