diff --git a/Include/dxwnd.h b/Include/dxwnd.h
index 5cab89f..e2b557b 100644
--- a/Include/dxwnd.h
+++ b/Include/dxwnd.h
@@ -84,6 +84,9 @@
#define SUPPRESSD3DEXT 0x00000008 // Disables extended d3d APIs for Vista/Win7/Win8 platforms
#define HOOKENABLED 0x00000010 // Enables task hooking
#define FIXD3DFRAME 0x00000020 // Preserve windows frame in D3D9 programs
+#define FORCE16BPP 0x00000040 // Forces 16BPP desktop color depth
+#define BLACKWHITE 0x00000080 // Simulate a B&W screen monitor mapping colors to grayscales
+#define SAVECAPS 0x00000100 // Saves and restores original surface flags & capabilities
// logging Tflags DWORD:
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
diff --git a/build/dxwnd.dll b/build/dxwnd.dll
index 31af4a0..d80fa58 100644
--- a/build/dxwnd.dll
+++ b/build/dxwnd.dll
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8c93bb6e4097da150e945750f0b04e1b4b490868251332a3ea2451fb5338cf60
-size 341504
+oid sha256:bce7a60e60155037cd12e0c1383f1078103923d7ba43a349e368606025bec75a
+size 343040
diff --git a/build/dxwnd.exe b/build/dxwnd.exe
index d12c5fa..c180623 100644
--- a/build/dxwnd.exe
+++ b/build/dxwnd.exe
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0995a55f7547535590183f7287c7b511fcb4ee2203a39f6e8414afce2a0af15f
-size 520192
+oid sha256:920bc90915cbde2b59ef55c17b59fe4b741720c68c65491186044fa50ebb4985
+size 521216
diff --git a/build/dxwnd.ini b/build/dxwnd.ini
index 23ed643..31c7dea 100644
--- a/build/dxwnd.ini
+++ b/build/dxwnd.ini
@@ -2,9 +2,9 @@
title0=007 NightFire
path0=D:\Games\007_NightFire\Bond.exe
module0=
-ver0=8
-flag0=134217728
-flagg0=675282944
+ver0=0
+flag0=134217730
+flagg0=138412032
tflag0=3
initx0=0
inity0=0
@@ -39,7 +39,7 @@ module2=
ver2=0
flag2=134479906
flagg2=134217728
-tflag2=3
+tflag2=2
initx2=0
inity2=0
minx2=0
@@ -71,7 +71,7 @@ title4=A10 Cuba
path4=D:\Games\A10\A10Cuba.exe
module4=
ver4=0
-flag4=34
+flag4=162
flagg4=1073741824
tflag4=258
initx4=0
@@ -107,7 +107,7 @@ module6=
ver6=0
flag6=671088674
flagg6=256
-tflag6=263
+tflag6=262
initx6=0
inity6=0
minx6=0
@@ -123,8 +123,8 @@ path7=d:\Games\ALIFE\ALIFE.EXE
module7=
ver7=1
flag7=142606370
-flagg7=160
-tflag7=259
+flagg7=1048736
+tflag7=258
initx7=0
inity7=0
minx7=0
@@ -141,7 +141,7 @@ module8=
ver8=0
flag8=402655267
flagg8=536940544
-tflag8=3
+tflag8=2
initx8=0
inity8=0
minx8=0
@@ -157,8 +157,8 @@ path9=D:\Games\Age of Empires 2\empires2.exe
module9=
ver9=0
flag9=134217762
-flagg9=1073762304
-tflag9=3
+flagg9=1073762320
+tflag9=2
initx9=0
inity9=0
minx9=0
@@ -173,9 +173,9 @@ title10=Age of Empires III
path10=D:\Games\Age of Empires III\age3.exe
module10=
ver10=0
-flag10=-1342169054
-flagg10=169869312
-tflag10=3
+flag10=-1342169053
+flagg10=1243611136
+tflag10=2
initx10=0
inity10=0
minx10=0
@@ -191,7 +191,7 @@ path11=D:\Games\Age of Empires\EMPIRESX.EXE
module11=
ver11=0
flag11=134217762
-flagg11=81920
+flagg11=1073823744
tflag11=0
initx11=0
inity11=0
@@ -209,7 +209,7 @@ module12=VideoP.dpl vcl30.dpl
ver12=0
flag12=813826050
flagg12=537919505
-tflag12=3
+tflag12=2
initx12=0
inity12=0
minx12=0
@@ -224,9 +224,9 @@ title13=Airline Tycoon Evolution
path13=D:\Games\Airline.Tycoon.Evolution\AT.EXE
module13=
ver13=0
-flag13=402653217
-flagg13=5242880
-tflag13=259
+flag13=402653219
+flagg13=0
+tflag13=323
initx13=0
inity13=0
minx13=0
@@ -241,9 +241,9 @@ title14=Alien Cabal 95
path14=D:\Games\Alien_cabal\ACabal95.exe
module14=
ver14=0
-flag14=71303200
+flag14=32
flagg14=0
-tflag14=3
+tflag14=259
initx14=0
inity14=0
minx14=0
@@ -310,7 +310,7 @@ path18=D:\Games\American McGee's Alice Demo\alice.exe
module18=
ver18=10
flag18=268435458
-flagg18=-2147352576
+flagg18=131072
tflag18=0
initx18=0
inity18=0
@@ -464,7 +464,7 @@ module27=
ver27=0
flag27=134217761
flagg27=134217808
-tflag27=3
+tflag27=2
initx27=0
inity27=0
minx27=0
@@ -526,13 +526,13 @@ posx30=50
posy30=50
sizx30=800
sizy30=600
-title31=Beyond Good & Evil Demo
-path31=C:\Games\Beyond Good & Evil\BGE.exe
+title31=Beyond Divinity
+path31=D:\Games\Beyond Divinity\Div.exe
module31=
ver31=0
flag31=0
-flagg31=0
-tflag31=0
+flagg31=134218240
+tflag31=3
initx31=0
inity31=0
minx31=0
@@ -543,12 +543,12 @@ posx31=50
posy31=50
sizx31=800
sizy31=600
-title32=Black & White
-path32=D:\Games\Black & White\runblack.exe
+title32=Beyond Good & Evil Demo
+path32=C:\Games\Beyond Good & Evil\BGE.exe
module32=
ver32=0
flag32=0
-flagg32=134217728
+flagg32=0
tflag32=0
initx32=0
inity32=0
@@ -560,12 +560,12 @@ posx32=50
posy32=50
sizx32=800
sizy32=600
-title33=Black Moon Lune Noire
-path33=C:\Games\Black Moon\Lune noire\Engine.exe
+title33=Black & White
+path33=D:\Games\Black & White\runblack.exe
module33=
ver33=0
-flag33=262179
-flagg33=0
+flag33=0
+flagg33=134217728
tflag33=0
initx33=0
inity33=0
@@ -577,13 +577,13 @@ posx33=50
posy33=50
sizx33=800
sizy33=600
-title34=Black Thorn
-path34=D:\Games\BlackThorn\BlackThorn.exe
+title34=Black Moon Lune Noire
+path34=C:\Games\Black Moon\Lune noire\Engine.exe
module34=
ver34=0
-flag34=0
-flagg34=134217984
-tflag34=66
+flag34=262179
+flagg34=0
+tflag34=0
initx34=0
inity34=0
minx34=0
@@ -594,13 +594,13 @@ posx34=50
posy34=50
sizx34=800
sizy34=600
-title35=Blood Omen Legacy of Kain
-path35=C:\Games\Blood Omen\KAIN.EXE
+title35=Black Thorn
+path35=D:\Games\BlackThorn\BlackThorn.exe
module35=
ver35=0
-flag35=49190
-flagg35=0
-tflag35=0
+flag35=0
+flagg35=134217984
+tflag35=66
initx35=0
inity35=0
minx35=0
@@ -611,13 +611,13 @@ posx35=50
posy35=50
sizx35=800
sizy35=600
-title36=Bonkheads
-path36=C:\Games\Bonkheads\Bonkheads.exe
+title36=Blood Omen Legacy of Kain
+path36=C:\Games\Blood Omen\KAIN.EXE
module36=
ver36=0
-flag36=262690
-flagg36=16
-tflag36=78
+flag36=49190
+flagg36=0
+tflag36=0
initx36=0
inity36=0
minx36=0
@@ -628,13 +628,13 @@ posx36=50
posy36=50
sizx36=800
sizy36=600
-title37=Bubble Bobble 2
-path37=C:\Games\bubble2\BOBO2.EXE
+title37=Bonkheads
+path37=C:\Games\Bonkheads\Bonkheads.exe
module37=
ver37=0
-flag37=34
-flagg37=0
-tflag37=0
+flag37=262690
+flagg37=16
+tflag37=78
initx37=0
inity37=0
minx37=0
@@ -645,46 +645,46 @@ posx37=50
posy37=50
sizx37=800
sizy37=600
-title38=Bug!
-path38=C:\Games\Bug\BUG!.EXE
+title38=Bubble Bobble 2
+path38=C:\Games\bubble2\BOBO2.EXE
module38=
ver38=0
-flag38=134225954
-flagg38=32
-tflag38=2
+flag38=34
+flagg38=0
+tflag38=0
initx38=0
inity38=0
minx38=0
miny38=0
maxx38=0
maxy38=0
-posx38=0
-posy38=0
+posx38=50
+posy38=50
sizx38=800
sizy38=600
-title39=BW2Demo.exe
-path39=D:\Games\Black & White 2 Demo\BW2Demo.exe
+title39=Bug!
+path39=C:\Games\Bug\BUG!.EXE
module39=
ver39=0
-flag39=0
-flagg39=134217728
-tflag39=0
+flag39=134225954
+flagg39=32
+tflag39=2
initx39=0
inity39=0
minx39=0
miny39=0
maxx39=0
maxy39=0
-posx39=50
-posy39=50
+posx39=0
+posy39=0
sizx39=800
sizy39=600
-title40=Caesar III
-path40=C:\Games\Caesar III\c3.exe
+title40=BW2Demo.exe
+path40=D:\Games\Black & White 2 Demo\BW2Demo.exe
module40=
ver40=0
-flag40=-2147475422
-flagg40=0
+flag40=0
+flagg40=134217728
tflag40=0
initx40=0
inity40=0
@@ -696,11 +696,11 @@ posx40=50
posy40=50
sizx40=800
sizy40=600
-title41=Championship Manager 99-00
-path41=C:\Games\CM9900\cm9900.exe
+title41=Caesar III
+path41=C:\Games\Caesar III\c3.exe
module41=
ver41=0
-flag41=10306
+flag41=-2147475422
flagg41=0
tflag41=0
initx41=0
@@ -713,11 +713,11 @@ posx41=50
posy41=50
sizx41=800
sizy41=600
-title42=Civilization Call to Power
-path42=C:\Games\civctp\Civilization_Call_To_Power\ctp_program\ctp\civctp.exe
+title42=Championship Manager 99-00
+path42=C:\Games\CM9900\cm9900.exe
module42=
ver42=0
-flag42=545267746
+flag42=10306
flagg42=0
tflag42=0
initx42=0
@@ -730,12 +730,12 @@ posx42=50
posy42=50
sizx42=800
sizy42=600
-title43=Claw
-path43=C:\Games\claw\clawexe.exe
+title43=Chariots of War
+path43=D:\Games\Chariots of War\CoW.exe
module43=
ver43=0
-flag43=24610
-flagg43=0
+flag43=134217730
+flagg43=134217728
tflag43=0
initx43=0
inity43=0
@@ -747,13 +747,13 @@ posx43=50
posy43=50
sizx43=800
sizy43=600
-title44=Commando's Behind Enemy Lines Demo
-path44=C:\Games\Commando's Behind Enemy Lines Demo\COMANDOS\Comandos.exe
+title44=Civilization Call to Power
+path44=C:\Games\civctp\Civilization_Call_To_Power\ctp_program\ctp\civctp.exe
module44=
ver44=0
-flag44=1744838944
+flag44=545267746
flagg44=0
-tflag44=64
+tflag44=0
initx44=0
inity44=0
minx44=0
@@ -764,11 +764,11 @@ posx44=50
posy44=50
sizx44=800
sizy44=600
-title45=Commandos II: Men of Courage
-path45=C:\Games\Commandos II\comm2.exe
+title45=Claw
+path45=C:\Games\claw\clawexe.exe
module45=
ver45=0
-flag45=-1207951008
+flag45=24610
flagg45=0
tflag45=0
initx45=0
@@ -781,13 +781,13 @@ posx45=50
posy45=50
sizx45=800
sizy45=600
-title46=Crazy Taxy
-path46=C:\Games\Crazy_Taxi\Crazy Taxi PC Version\crazy_taxi_pc.exe
+title46=Commando's Behind Enemy Lines Demo
+path46=C:\Games\Commando's Behind Enemy Lines Demo\COMANDOS\Comandos.exe
module46=
-ver46=8
-flag46=536870945
+ver46=0
+flag46=1744838944
flagg46=0
-tflag46=0
+tflag46=64
initx46=0
inity46=0
minx46=0
@@ -798,11 +798,11 @@ posx46=50
posy46=50
sizx46=800
sizy46=600
-title47=Crush! Deluxe
-path47=C:\Games\Crush! Deluxe\CRUSHD.EXE
+title47=Commandos II: Men of Courage
+path47=C:\Games\Commandos II\comm2.exe
module47=
ver47=0
-flag47=134492706
+flag47=-1207951008
flagg47=0
tflag47=0
initx47=0
@@ -815,12 +815,12 @@ posx47=50
posy47=50
sizx47=800
sizy47=600
-title48=Cybermercs
-path48=C:\Games\cybermercs\cybermercs.exe
+title48=Crazy Taxy
+path48=C:\Games\Crazy_Taxi\Crazy Taxi PC Version\crazy_taxi_pc.exe
module48=
-ver48=0
-flag48=134234146
-flagg48=16
+ver48=8
+flag48=536870945
+flagg48=0
tflag48=0
initx48=0
inity48=0
@@ -832,13 +832,13 @@ posx48=50
posy48=50
sizx48=800
sizy48=600
-title49=Daikatana
-path49=D:\Games\Daikatana\daikatana.exe
+title49=Crush! Deluxe
+path49=C:\Games\Crush! Deluxe\CRUSHD.EXE
module49=
-ver49=12
-flag49=806486528
-flagg49=131585
-tflag49=3
+ver49=0
+flag49=134492706
+flagg49=0
+tflag49=0
initx49=0
inity49=0
minx49=0
@@ -849,12 +849,12 @@ posx49=50
posy49=50
sizx49=800
sizy49=600
-title50=Darius Gaiden
-path50=C:\Games\Darius_gaiden\DARIUS.EXE
+title50=Cybermercs
+path50=C:\Games\cybermercs\cybermercs.exe
module50=
ver50=0
-flag50=536870946
-flagg50=0
+flag50=134234146
+flagg50=16
tflag50=0
initx50=0
inity50=0
@@ -866,13 +866,13 @@ posx50=50
posy50=50
sizx50=800
sizy50=600
-title51=Dark Colony the Council Wars
-path51=C:\Games\darkcolony_council\dc\DC16.EXE
+title51=Daikatana
+path51=D:\Games\Daikatana\daikatana.exe
module51=
-ver51=0
-flag51=268435462
-flagg51=0
-tflag51=0
+ver51=12
+flag51=806486530
+flagg51=131585
+tflag51=2
initx51=0
inity51=0
minx51=0
@@ -883,11 +883,11 @@ posx51=50
posy51=50
sizx51=800
sizy51=600
-title52=Darkstone
-path52=C:\Games\darkstone\Darkstone.exe
+title52=Darius Gaiden
+path52=C:\Games\Darius_gaiden\DARIUS.EXE
module52=
ver52=0
-flag52=134234148
+flag52=536870946
flagg52=0
tflag52=0
initx52=0
@@ -900,11 +900,11 @@ posx52=50
posy52=50
sizx52=800
sizy52=600
-title53=Dave Mirra Freestyle BMX Demo
-path53=C:\Games\Dave Mirra Freestyle BMX\NgBMXDemo.exe
+title53=Dark Colony the Council Wars
+path53=C:\Games\darkcolony_council\dc\DC16.EXE
module53=
ver53=0
-flag53=8224
+flag53=268435462
flagg53=0
tflag53=0
initx53=0
@@ -917,11 +917,11 @@ posx53=50
posy53=50
sizx53=800
sizy53=600
-title54=Daytona USA Deluxe
-path54=C:\Games\Daytona USA Deluxe\DAYTONA USA Deluxe.exe
+title54=Darkstone
+path54=C:\Games\darkstone\Darkstone.exe
module54=
ver54=0
-flag54=402661410
+flag54=134234148
flagg54=0
tflag54=0
initx54=0
@@ -934,11 +934,11 @@ posx54=50
posy54=50
sizx54=800
sizy54=600
-title55=Deadlock 2
-path55=C:\Games\deadlock2\DEADLOCK.EXE
+title55=Dave Mirra Freestyle BMX Demo
+path55=C:\Games\Dave Mirra Freestyle BMX\NgBMXDemo.exe
module55=
ver55=0
-flag55=-2012995550
+flag55=8224
flagg55=0
tflag55=0
initx55=0
@@ -951,11 +951,11 @@ posx55=50
posy55=50
sizx55=800
sizy55=600
-title56=Deeper Dungeons 95
-path56=C:\Games\Keeper95\Deeper95.exe
+title56=Daytona USA Deluxe
+path56=C:\Games\Daytona USA Deluxe\DAYTONA USA Deluxe.exe
module56=
ver56=0
-flag56=268460070
+flag56=402661410
flagg56=0
tflag56=0
initx56=0
@@ -968,11 +968,11 @@ posx56=50
posy56=50
sizx56=800
sizy56=600
-title57=Delta Force
-path57=C:\Games\Delta Force\Df.exe
+title57=Deadlock 2
+path57=C:\Games\deadlock2\DEADLOCK.EXE
module57=
ver57=0
-flag57=34
+flag57=-2012995550
flagg57=0
tflag57=0
initx57=0
@@ -985,13 +985,13 @@ posx57=50
posy57=50
sizx57=800
sizy57=600
-title58=Dementia
-path58=C:\Games\dementia\program\CRUX.EXE -h
+title58=Deeper Dungeons 95
+path58=C:\Games\Keeper95\Deeper95.exe
module58=
ver58=0
-flag58=536887330
+flag58=268460070
flagg58=0
-tflag58=2
+tflag58=0
initx58=0
inity58=0
minx58=0
@@ -1002,11 +1002,11 @@ posx58=50
posy58=50
sizx58=800
sizy58=600
-title59=Dethkarz
-path59=D:\Games\DethKarz\Dethkarz.exe
+title59=Delta Force
+path59=C:\Games\Delta Force\Df.exe
module59=
ver59=0
-flag59=0
+flag59=34
flagg59=0
tflag59=0
initx59=0
@@ -1019,13 +1019,13 @@ posx59=50
posy59=50
sizx59=800
sizy59=600
-title60=Devil Inside
-path60=C:\Games\Devil Inside\Devil.exe
+title60=Dementia
+path60=C:\Games\dementia\program\CRUX.EXE -h
module60=
ver60=0
-flag60=32
+flag60=536887330
flagg60=0
-tflag60=0
+tflag60=2
initx60=0
inity60=0
minx60=0
@@ -1036,13 +1036,13 @@ posx60=50
posy60=50
sizx60=800
sizy60=600
-title61=Diablo
-path61=D:\Games\Diablo\Diablo.exe
+title61=Dethkarz
+path61=D:\Games\DethKarz\Dethkarz.exe
module61=
-ver61=1
-flag61=138428450
-flagg61=1108344832
-tflag61=259
+ver61=0
+flag61=0
+flagg61=0
+tflag61=3
initx61=0
inity61=0
minx61=0
@@ -1051,15 +1051,15 @@ maxx61=0
maxy61=0
posx61=50
posy61=50
-sizx61=640
-sizy61=480
-title62=Dink Smallwood (BAD)
-path62=C:\Games\Dink SmallWood\Dink.exe
+sizx61=800
+sizy61=600
+title62=Devil Inside
+path62=C:\Games\Devil Inside\Devil.exe
module62=
ver62=0
-flag62=546
+flag62=32
flagg62=0
-tflag62=258
+tflag62=0
initx62=0
inity62=0
minx62=0
@@ -1070,13 +1070,13 @@ posx62=50
posy62=50
sizx62=800
sizy62=600
-title63=Doom 64 Absolution
-path63=D:\Games\Doom 64 - Absolution (Win32 Port)\Bin\Absolution.exe
+title63=Diablo
+path63=D:\Games\Diablo\Diablo.exe
module63=
-ver63=8
-flag63=134217728
-flagg63=86016
-tflag63=3
+ver63=1
+flag63=138428450
+flagg63=1108344832
+tflag63=258
initx63=0
inity63=0
minx63=0
@@ -1085,14 +1085,14 @@ maxx63=0
maxy63=0
posx63=50
posy63=50
-sizx63=800
-sizy63=600
-title64=Doom 95
-path64=D:\Games\Doom95\DOOM95.EXE
+sizx63=640
+sizy63=480
+title64=Dink Smallwood (BAD)
+path64=C:\Games\Dink SmallWood\Dink.exe
module64=
ver64=0
-flag64=134217762
-flagg64=2113536
+flag64=546
+flagg64=0
tflag64=258
initx64=0
inity64=0
@@ -1104,13 +1104,13 @@ posx64=50
posy64=50
sizx64=800
sizy64=600
-title65=Drakan
-path65=C:\Games\Drakan\drakan.exe
+title65=Doom 64 Absolution
+path65=D:\Games\Doom 64 - Absolution (Win32 Port)\Bin\Absolution.exe
module65=
-ver65=0
-flag65=536887328
-flagg65=0
-tflag65=0
+ver65=8
+flag65=134217728
+flagg65=86016
+tflag65=2
initx65=0
inity65=0
minx65=0
@@ -1121,13 +1121,13 @@ posx65=50
posy65=50
sizx65=800
sizy65=600
-title66=Dream Aquarium
-path66=D:\Program Files\Dream Aquarium\Dream_Aquarium.scr
+title66=Doom 95
+path66=D:\Games\Doom95\DOOM95.EXE
module66=
-ver66=9
-flag66=679477249
-flagg66=303104
-tflag66=256
+ver66=0
+flag66=134217762
+flagg66=2113536
+tflag66=258
initx66=0
inity66=0
minx66=0
@@ -1138,13 +1138,13 @@ posx66=50
posy66=50
sizx66=800
sizy66=600
-title67=Dungeon Keeper 2 GOG release
-path67=D:\Games\Dungeon Keeper 2 GOG release\DKII.EXE
+title67=Drakan
+path67=C:\Games\Drakan\drakan.exe
module67=
ver67=0
-flag67=134217762
-flagg67=4276224
-tflag67=6
+flag67=536887328
+flagg67=0
+tflag67=0
initx67=0
inity67=0
minx67=0
@@ -1155,13 +1155,13 @@ posx67=50
posy67=50
sizx67=800
sizy67=600
-title68=Dungeon Keeper 95
-path68=D:\Games\Keeper95\KEEPER95.EXE
+title68=Dream Aquarium
+path68=D:\Program Files\Dream Aquarium\Dream_Aquarium.scr
module68=
-ver68=0
-flag68=134234150
-flagg68=0
-tflag68=64
+ver68=9
+flag68=679477249
+flagg68=303104
+tflag68=256
initx68=0
inity68=0
minx68=0
@@ -1172,13 +1172,13 @@ posx68=50
posy68=50
sizx68=800
sizy68=600
-title69=Dungeon Keeper D3D
-path69=D:\Games\Keeper95\keepd3d.exe
+title69=Dungeon Keeper 2 GOG release
+path69=D:\Games\Dungeon Keeper 2 GOG release\DKII.EXE
module69=
ver69=0
-flag69=134217760
-flagg69=134217728
-tflag69=3
+flag69=134217762
+flagg69=4276224
+tflag69=6
initx69=0
inity69=0
minx69=0
@@ -1189,30 +1189,30 @@ posx69=50
posy69=50
sizx69=800
sizy69=600
-title70=Dungeon Keeper II
-path70=D:\Games\Dungeon Keeper 2\DKII.exe
+title70=Dungeon Keeper 95
+path70=D:\Games\Keeper95\KEEPER95.EXE
module70=
ver70=0
-flag70=34
-flagg70=574619648
-tflag70=262
+flag70=134234150
+flagg70=0
+tflag70=64
initx70=0
inity70=0
minx70=0
miny70=0
maxx70=0
maxy70=0
-posx70=150
+posx70=50
posy70=50
sizx70=800
sizy70=600
-title71=Emergency Fighters for life
-path71=D:\Games\Emergency\EMERGY.EXE
+title71=Dungeon Keeper D3D
+path71=D:\Games\Keeper95\keepd3d.exe
module71=
ver71=0
-flag71=134545443
-flagg71=18
-tflag71=3
+flag71=134217762
+flagg71=134217728
+tflag71=2
initx71=0
inity71=0
minx71=0
@@ -1223,30 +1223,30 @@ posx71=50
posy71=50
sizx71=800
sizy71=600
-title72=Enemy Infestation
-path72=C:\Games\Enemy Infestation (1998)\Ei.exe
+title72=Dungeon Keeper II
+path72=D:\Games\Dungeon Keeper 2\DKII.exe
module72=
ver72=0
-flag72=38
-flagg72=0
-tflag72=0
+flag72=34
+flagg72=574619648
+tflag72=262
initx72=0
inity72=0
minx72=0
miny72=0
maxx72=0
maxy72=0
-posx72=50
+posx72=150
posy72=50
sizx72=800
sizy72=600
-title73=Evil Genius
-path73=D:\Games\Evil Genius\ReleaseExe\EvilGenius_Cracked.exe
+title73=Emergency Fighters for life
+path73=D:\Games\Emergency\EMERGY.EXE
module73=
-ver73=9
-flag73=2053
-flagg73=80
-tflag73=0
+ver73=0
+flag73=134545443
+flagg73=18
+tflag73=2
initx73=0
inity73=0
minx73=0
@@ -1257,13 +1257,13 @@ posx73=50
posy73=50
sizx73=800
sizy73=600
-title74=Expendable
-path74=C:\Games\eXpendable\go.exe -nocputest
+title74=Enemy Infestation
+path74=C:\Games\Enemy Infestation (1998)\Ei.exe
module74=
ver74=0
-flag74=402653280
-flagg74=1
-tflag74=2
+flag74=38
+flagg74=0
+tflag74=0
initx74=0
inity74=0
minx74=0
@@ -1274,12 +1274,12 @@ posx74=50
posy74=50
sizx74=800
sizy74=600
-title75=Fallen Heaven
-path75=D:\Games\Fallen haven\Exe\FALLEN.EXE
-module75=MFC42.dll MSVCRT.DLL mciavi32.dll
-ver75=1
-flag75=135004674
-flagg75=1049120
+title75=Evany La chiave per mondi sconosciuti
+path75=D:\Games\Evany La chiave per mondi sconosciuti\Evany.exe
+module75=
+ver75=0
+flag75=134348866
+flagg75=0
tflag75=259
initx75=0
inity75=0
@@ -1291,12 +1291,12 @@ posx75=50
posy75=50
sizx75=800
sizy75=600
-title76=Fallen Heaven (BAD)
-path76=C:\Games\falhaven\Exe\FALLEN.EXE
+title76=Evil Genius
+path76=D:\Games\Evil Genius\ReleaseExe\EvilGenius_Cracked.exe
module76=
-ver76=0
-flag76=679485962
-flagg76=32
+ver76=9
+flag76=2053
+flagg76=80
tflag76=0
initx76=0
inity76=0
@@ -1304,17 +1304,17 @@ minx76=0
miny76=0
maxx76=0
maxy76=0
-posx76=0
-posy76=0
+posx76=50
+posy76=50
sizx76=800
sizy76=600
-title77=Fallout
-path77=D:\Games\Fallout\FALLOUTW.EXE
+title77=Expendable
+path77=C:\Games\eXpendable\go.exe -nocputest
module77=
-ver77=1
-flag77=134217734
-flagg77=16
-tflag77=0
+ver77=0
+flag77=402653280
+flagg77=1
+tflag77=2
initx77=0
inity77=0
minx77=0
@@ -1325,13 +1325,13 @@ posx77=50
posy77=50
sizx77=800
sizy77=600
-title78=FreakOut
-path78=C:\Games\Freak Out - Extreme Freeride\FreakOut.exe
-module78=
-ver78=9
-flag78=0
-flagg78=0
-tflag78=2
+title78=Fallen Heaven
+path78=D:\Games\Fallen haven\Exe\FALLEN.EXE
+module78=MFC42.dll MSVCRT.DLL mciavi32.dll
+ver78=1
+flag78=135004674
+flagg78=1049120
+tflag78=258
initx78=0
inity78=0
minx78=0
@@ -1342,29 +1342,29 @@ posx78=50
posy78=50
sizx78=800
sizy78=600
-title79=Funtracks
-path79=C:\Games\Funtracks\Fun_win.exe
+title79=Fallen Heaven (BAD)
+path79=C:\Games\falhaven\Exe\FALLEN.EXE
module79=
-ver79=1
-flag79=2
-flagg79=0
-tflag79=258
+ver79=0
+flag79=679485962
+flagg79=32
+tflag79=0
initx79=0
inity79=0
minx79=0
miny79=0
maxx79=0
maxy79=0
-posx79=50
-posy79=50
+posx79=0
+posy79=0
sizx79=800
sizy79=600
-title80=Galapagos
-path80=C:\Games\Galapagos\GALA.EXE
+title80=Fallout
+path80=D:\Games\Fallout\FALLOUTW.EXE
module80=
ver80=0
-flag80=134217760
-flagg80=0
+flag80=134217734
+flagg80=16
tflag80=0
initx80=0
inity80=0
@@ -1376,30 +1376,30 @@ posx80=50
posy80=50
sizx80=800
sizy80=600
-title81=Gangsters
-path81=C:\Games\Gangsters\gangsters.exe
+title81=Fighting Force
+path81=D:\Games\Fighting Force\FFORCE.EXE
module81=
ver81=0
-flag81=134217762
-flagg81=0
-tflag81=2
+flag81=134217730
+flagg81=134217728
+tflag81=0
initx81=0
inity81=0
minx81=0
miny81=0
maxx81=0
maxy81=0
-posx81=100
-posy81=100
+posx81=50
+posy81=50
sizx81=800
sizy81=600
-title82=Gangsters
-path82=D:\Games\Gangsters\gangsters.exe
+title82=FreakOut
+path82=C:\Games\Freak Out - Extreme Freeride\FreakOut.exe
module82=
-ver82=0
-flag82=134217730
-flagg82=135266304
-tflag82=0
+ver82=9
+flag82=0
+flagg82=0
+tflag82=2
initx82=0
inity82=0
minx82=0
@@ -1410,13 +1410,13 @@ posx82=50
posy82=50
sizx82=800
sizy82=600
-title83=GeneRally
-path83=C:\Games\generally105\GeneRally.exe
+title83=Funtracks
+path83=C:\Games\Funtracks\Fun_win.exe
module83=
-ver83=0
-flag83=34
+ver83=1
+flag83=2
flagg83=0
-tflag83=0
+tflag83=258
initx83=0
inity83=0
minx83=0
@@ -1427,12 +1427,12 @@ posx83=50
posy83=50
sizx83=800
sizy83=600
-title84=Get Medieval
-path84=C:\Games\Get Medieval\MEDIEVAL.EXE
+title84=Galapagos
+path84=C:\Games\Galapagos\GALA.EXE
module84=
ver84=0
-flag84=34
-flagg84=2
+flag84=134217760
+flagg84=0
tflag84=0
initx84=0
inity84=0
@@ -1440,46 +1440,46 @@ minx84=0
miny84=0
maxx84=0
maxy84=0
-posx84=0
-posy84=0
+posx84=50
+posy84=50
sizx84=800
sizy84=600
-title85=Gift
-path85=C:\Games\Gift\Gift.exe
+title85=Gangsters
+path85=D:\Games\Gangsters\gangsters.exe
module85=
ver85=0
-flag85=4196384
-flagg85=0
-tflag85=34
+flag85=134217730
+flagg85=135266304
+tflag85=0
initx85=0
inity85=0
minx85=0
miny85=0
maxx85=0
maxy85=0
-posx85=0
-posy85=0
-sizx85=0
-sizy85=0
-title86=glsample.exe
-path86=D:\DxWnd\code examples\glsample\Debug\glsample.exe
+posx85=50
+posy85=50
+sizx85=800
+sizy85=600
+title86=Garshasp
+path86=D:\Games\Garshasp\distro\Garshasp.exe
module86=
ver86=0
-flag86=0
-flagg86=134348800
-tflag86=3
+flag86=402653184
+flagg86=134217728
+tflag86=0
initx86=0
inity86=0
minx86=0
miny86=0
maxx86=0
maxy86=0
-posx86=0
-posy86=0
+posx86=50
+posy86=50
sizx86=800
sizy86=600
-title87=Golden Age of Racing
-path87=C:\Games\Golden Age of Racing\GAOR.exe
+title87=GeneRally
+path87=C:\Games\generally105\GeneRally.exe
module87=
ver87=0
flag87=34
@@ -1495,64 +1495,64 @@ posx87=50
posy87=50
sizx87=800
sizy87=600
-title88=Gp500 for Win2K
-path88=C:\Games\gp500\gp500_win2k.exe
+title88=Get Medieval
+path88=C:\Games\Get Medieval\MEDIEVAL.EXE
module88=
-ver88=1
-flag88=545677860
-flagg88=0
-tflag88=2
+ver88=0
+flag88=34
+flagg88=2
+tflag88=0
initx88=0
inity88=0
minx88=0
miny88=0
maxx88=0
maxy88=0
-posx88=50
-posy88=50
+posx88=0
+posy88=0
sizx88=800
sizy88=600
-title89=G-Police
-path89=C:\Games\gpolice\GPOLICE.EXE
+title89=Gift
+path89=C:\Games\Gift\Gift.exe
module89=
ver89=0
-flag89=67125286
+flag89=4196384
flagg89=0
-tflag89=2
+tflag89=34
initx89=0
inity89=0
minx89=0
miny89=0
maxx89=0
maxy89=0
-posx89=50
-posy89=50
-sizx89=800
-sizy89=600
-title90=gpwxp.exe
-path90=D:\Games\Grand Prix World\gpwxp.exe
+posx89=0
+posy89=0
+sizx89=0
+sizy89=0
+title90=glsample.exe
+path90=D:\DxWnd\code examples\glsample\Debug\glsample.exe
module90=
ver90=0
flag90=0
-flagg90=671088768
-tflag90=3
+flagg90=134348800
+tflag90=2
initx90=0
inity90=0
minx90=0
miny90=0
maxx90=0
maxy90=0
-posx90=50
-posy90=50
+posx90=0
+posy90=0
sizx90=800
sizy90=600
-title91=Grand Prix Legends
-path91=D:\Games\Grand Prix Legends\gpl\gpl.exe
+title91=Golden Age of Racing
+path91=C:\Games\Golden Age of Racing\GAOR.exe
module91=
ver91=0
-flag91=-1979678687
-flagg91=4
-tflag91=271
+flag91=34
+flagg91=0
+tflag91=0
initx91=0
inity91=0
minx91=0
@@ -1561,15 +1561,15 @@ maxx91=0
maxy91=0
posx91=50
posy91=50
-sizx91=640
-sizy91=480
-title92=Grand Prix Legends MAX
-path92=D:\Games\Grand Prix Legends MAX\gpl.exe
+sizx91=800
+sizy91=600
+title92=Gp500 for Win2K
+path92=C:\Games\gp500\gp500_win2k.exe
module92=
-ver92=7
-flag92=537001986
-flagg92=134217729
-tflag92=3
+ver92=1
+flag92=545677860
+flagg92=0
+tflag92=2
initx92=0
inity92=0
minx92=0
@@ -1580,13 +1580,13 @@ posx92=50
posy92=50
sizx92=800
sizy92=600
-title93=Grand Theft Auto 2
-path93=D:\Games\GTA2\gta2.exe
-module93=binkw32 d3ddll
+title93=G-Police
+path93=C:\Games\gpolice\GPOLICE.EXE
+module93=
ver93=0
-flag93=671096866
-flagg93=1048576
-tflag93=3
+flag93=67125286
+flagg93=0
+tflag93=2
initx93=0
inity93=0
minx93=0
@@ -1595,15 +1595,15 @@ maxx93=0
maxy93=0
posx93=50
posy93=50
-sizx93=400
-sizy93=300
-title94=Grand Touring
-path94=D:\Games\Grand Touring\gt.exe
+sizx93=800
+sizy93=600
+title94=Grand Prix Legends
+path94=D:\Games\Grand Prix Legends\gpl\gpl.exe
module94=
ver94=0
-flag94=16388
-flagg94=134283264
-tflag94=275
+flag94=-1979678687
+flagg94=4
+tflag94=270
initx94=0
inity94=0
minx94=0
@@ -1612,15 +1612,15 @@ maxx94=0
maxy94=0
posx94=50
posy94=50
-sizx94=400
-sizy94=300
-title95=Grim Fandango Demo
-path95=C:\Games\GrimWebDemo\grimdemo.exe
+sizx94=640
+sizy94=480
+title95=Grand Prix Legends MAX
+path95=D:\Games\Grand Prix Legends MAX\gpl.exe
module95=
-ver95=0
-flag95=34
-flagg95=0
-tflag95=258
+ver95=7
+flag95=537001986
+flagg95=134217729
+tflag95=2
initx95=0
inity95=0
minx95=0
@@ -1631,13 +1631,13 @@ posx95=50
posy95=50
sizx95=800
sizy95=600
-title96=Gruntz
-path96=D:\Games\gruntz\GRUNTZ.EXE
+title96=Grand Prix World
+path96=D:\Games\Grand Prix World\gpwxp3.exe
module96=
ver96=0
-flag96=34
-flagg96=134217728
-tflag96=0
+flag96=-2011168605
+flagg96=134217856
+tflag96=258
initx96=0
inity96=0
minx96=0
@@ -1648,13 +1648,13 @@ posx96=50
posy96=50
sizx96=800
sizy96=600
-title97=GTA 3
-path97=D:\Games\GTA3\gta3.exe
-module97=
+title97=Grand Theft Auto 2
+path97=D:\Games\GTA2\gta2.exe
+module97=binkw32 d3ddll
ver97=0
-flag97=16420
-flagg97=134234112
-tflag97=67
+flag97=671096866
+flagg97=1048576
+tflag97=2
initx97=0
inity97=0
minx97=0
@@ -1663,31 +1663,31 @@ maxx97=0
maxy97=0
posx97=50
posy97=50
-sizx97=800
-sizy97=600
-title98=Gunman Chronicles
-path98=D:\Games\Gunman\gunman.exe
+sizx97=400
+sizy97=300
+title98=Grand Touring
+path98=D:\Games\Grand Touring\gt.exe
module98=
ver98=0
-flag98=0
-flagg98=-2013134848
-tflag98=0
+flag98=16390
+flagg98=134283264
+tflag98=275
initx98=0
inity98=0
minx98=0
miny98=0
maxx98=0
maxy98=0
-posx98=0
-posy98=0
-sizx98=400
-sizy98=300
-title99=Half-Life Blue-Shift (d3d)
-path99=D:\Games\Half-Life Blue-Shift\bshift.exe
+posx98=50
+posy98=50
+sizx98=800
+sizy98=600
+title99=Grim Fandango Demo
+path99=C:\Games\GrimWebDemo\grimdemo.exe
module99=
-ver99=7
-flag99=1207959554
-flagg99=513
+ver99=0
+flag99=34
+flagg99=0
tflag99=258
initx99=0
inity99=0
@@ -1699,13 +1699,13 @@ posx99=50
posy99=50
sizx99=800
sizy99=600
-title100=Half-Life Uplink Demo
-path100=D:\Games\Half-Life Uplink\hldemo.exe
+title100=Gruntz
+path100=D:\Games\gruntz\GRUNTZ.EXE
module100=
-ver100=1
-flag100=1073741826
-flagg100=16384
-tflag100=2
+ver100=0
+flag100=34
+flagg100=134217728
+tflag100=0
initx100=0
inity100=0
minx100=0
@@ -1714,15 +1714,15 @@ maxx100=0
maxy100=0
posx100=50
posy100=50
-sizx100=640
-sizy100=480
-title101=Halo Combat Evolved
-path101=D:\Games\Halo Combat Evolved\halo.exe
+sizx100=800
+sizy100=600
+title101=GTA 3
+path101=D:\Games\GTA3\gta3.exe
module101=
-ver101=9
-flag101=570425377
-flagg101=-2147483648
-tflag101=478
+ver101=0
+flag101=134234150
+flagg101=1207975952
+tflag101=2
initx101=0
inity101=0
minx101=0
@@ -1733,12 +1733,12 @@ posx101=50
posy101=50
sizx101=800
sizy101=600
-title102=Heart of Darkness
-path102=d:\Games\Heart of Darkness\HODWin32.exe
+title102=Gunman Chronicles
+path102=D:\Games\Gunman\gunman.exe
module102=
ver102=0
-flag102=8226
-flagg102=2179072
+flag102=0
+flagg102=-2013134848
tflag102=0
initx102=0
inity102=0
@@ -1746,17 +1746,17 @@ minx102=0
miny102=0
maxx102=0
maxy102=0
-posx102=50
-posy102=50
-sizx102=800
-sizy102=600
-title103=Heavy Metal FAKK 2
-path103=C:\Games\Heavy Metal - FAKK2\fakk2.exe
+posx102=0
+posy102=0
+sizx102=400
+sizy102=300
+title103=Half-Life Blue-Shift (d3d)
+path103=D:\Games\Half-Life Blue-Shift\bshift.exe
module103=
-ver103=0
-flag103=33554464
-flagg103=64
-tflag103=2
+ver103=7
+flag103=1207959554
+flagg103=513
+tflag103=258
initx103=0
inity103=0
minx103=0
@@ -1767,13 +1767,13 @@ posx103=50
posy103=50
sizx103=800
sizy103=600
-title104=HellCopter
-path104=C:\Games\hellcop\HCopter.exe
+title104=Half-Life Uplink Demo
+path104=D:\Games\Half-Life Uplink\hldemo.exe
module104=
-ver104=0
-flag104=-2013249500
-flagg104=256
-tflag104=0
+ver104=1
+flag104=1073741826
+flagg104=16384
+tflag104=2
initx104=0
inity104=0
minx104=0
@@ -1782,15 +1782,15 @@ maxx104=0
maxy104=0
posx104=50
posy104=50
-sizx104=800
-sizy104=600
-title105=Heretic 2
-path105=D:\Games\Heretic 2\Heretic2.exe
+sizx104=640
+sizy104=480
+title105=Halo Combat Evolved
+path105=D:\Games\Halo Combat Evolved\halo.exe
module105=
-ver105=0
-flag105=0
-flagg105=134348800
-tflag105=259
+ver105=9
+flag105=570425377
+flagg105=-2147483648
+tflag105=478
initx105=0
inity105=0
minx105=0
@@ -1801,13 +1801,13 @@ posx105=50
posy105=50
sizx105=800
sizy105=600
-title106=Heroes of Might & Magic III Demo
-path106=C:\Games\Heroes III Demo\h3demo.exe
+title106=Heart of Darkness
+path106=d:\Games\Heart of Darkness\HODWin32.exe
module106=
-ver106=1
-flag106=134234146
-flagg106=0
-tflag106=2
+ver106=0
+flag106=8226
+flagg106=2179072
+tflag106=0
initx106=0
inity106=0
minx106=0
@@ -1818,13 +1818,13 @@ posx106=50
posy106=50
sizx106=800
sizy106=600
-title107=Hexen II (opengl)
-path107=D:\Games\Hexen II\glh2.exe
+title107=Heavy Metal FAKK 2
+path107=C:\Games\Heavy Metal - FAKK2\fakk2.exe
module107=
-ver107=10
-flag107=3
-flagg107=212993
-tflag107=387
+ver107=0
+flag107=33554464
+flagg107=64
+tflag107=2
initx107=0
inity107=0
minx107=0
@@ -1835,12 +1835,12 @@ posx107=50
posy107=50
sizx107=800
sizy107=600
-title108=Hexen II (software)
-path108=D:\Games\Hexen II\h2.exe
+title108=HellCopter
+path108=C:\Games\hellcop\HCopter.exe
module108=
ver108=0
-flag108=671088642
-flagg108=1130496
+flag108=-2013249500
+flagg108=256
tflag108=0
initx108=0
inity108=0
@@ -1852,13 +1852,13 @@ posx108=50
posy108=50
sizx108=800
sizy108=600
-title109=hover
-path109=C:\Games\hover\hoverX.exe
+title109=Heretic 2
+path109=D:\Games\Heretic 2\Heretic2.exe
module109=
ver109=0
-flag109=8224
-flagg109=0
-tflag109=0
+flag109=0
+flagg109=134348800
+tflag109=258
initx109=0
inity109=0
minx109=0
@@ -1869,12 +1869,12 @@ posx109=50
posy109=50
sizx109=800
sizy109=600
-title110=Hyperblade
-path110=D:\Games\Hyperblade\HYPERX.EXE
+title110=Heroes of Might & Magic III Demo
+path110=C:\Games\Heroes III Demo\h3demo.exe
module110=
-ver110=0
-flag110=134217891
-flagg110=3231762
+ver110=1
+flag110=134234146
+flagg110=0
tflag110=2
initx110=0
inity110=0
@@ -1886,13 +1886,13 @@ posx110=50
posy110=50
sizx110=800
sizy110=600
-title111=Idinaloq
-path111=C:\Games\idina101\idinaloq.exe
+title111=Hexen II (opengl)
+path111=D:\Games\Hexen II\glh2.exe
module111=
-ver111=0
-flag111=32
-flagg111=0
-tflag111=0
+ver111=10
+flag111=3
+flagg111=212993
+tflag111=386
initx111=0
inity111=0
minx111=0
@@ -1903,12 +1903,12 @@ posx111=50
posy111=50
sizx111=800
sizy111=600
-title112=Immanis
-path112=C:\Games\Immanis CD release\immanis.exe
+title112=Hexen II (software)
+path112=D:\Games\Hexen II\h2.exe
module112=
ver112=0
-flag112=24611
-flagg112=0
+flag112=671088642
+flagg112=1130496
tflag112=0
initx112=0
inity112=0
@@ -1920,13 +1920,13 @@ posx112=50
posy112=50
sizx112=800
sizy112=600
-title113=Immanis (v2)
-path113=C:\Games\Immanis CD release\immanis_v2.exe
+title113=Hitman - Codename 47
+path113=D:\Games\Hitman - Codename 47\Hitman.Exe
module113=
ver113=0
-flag113=268460067
-flagg113=0
-tflag113=0
+flag113=134217728
+flagg113=671088640
+tflag113=3
initx113=0
inity113=0
minx113=0
@@ -1937,12 +1937,12 @@ posx113=50
posy113=50
sizx113=800
sizy113=600
-title114=In the Hunt
-path114=C:\Games\In The Hunt\e8.exe
+title114=Homeworld 2
+path114=D:\Games\Homeworld2\Bin\Release\Homeworld2.exe
module114=
ver114=0
-flag114=2
-flagg114=0
+flag114=671088642
+flagg114=134217728
tflag114=0
initx114=0
inity114=0
@@ -1954,13 +1954,13 @@ posx114=50
posy114=50
sizx114=800
sizy114=600
-title115=Incoming Forces
-path115=D:\Games\Incoming Forces\forces.exe
+title115=hover
+path115=C:\Games\hover\hoverX.exe
module115=
-ver115=8
-flag115=134217760
+ver115=0
+flag115=8224
flagg115=0
-tflag115=2
+tflag115=0
initx115=0
inity115=0
minx115=0
@@ -1971,13 +1971,13 @@ posx115=50
posy115=50
sizx115=800
sizy115=600
-title116=International Superstar Soccer 3
-path116=C:\Games\ISS_3\iss3.exe
+title116=Hyperblade
+path116=D:\Games\Hyperblade\HYPERX.EXE
module116=
-ver116=8
-flag116=545267715
-flagg116=0
-tflag116=0
+ver116=0
+flag116=134217891
+flagg116=3231762
+tflag116=2
initx116=0
inity116=0
minx116=0
@@ -1988,13 +1988,13 @@ posx116=50
posy116=50
sizx116=800
sizy116=600
-title117=Jacked
-path117=D:\Games\Jacked\Jacked.exe
-module117=winmm
-ver117=9
-flag117=537010208
-flagg117=196608
-tflag117=258
+title117=Idinaloq
+path117=C:\Games\idina101\idinaloq.exe
+module117=
+ver117=0
+flag117=32
+flagg117=0
+tflag117=0
initx117=0
inity117=0
minx117=0
@@ -2005,13 +2005,13 @@ posx117=50
posy117=50
sizx117=800
sizy117=600
-title118=Jedi Knight II Jedi Outcast
-path118=D:\Games\Jedi Knight II Jedi Outcast\GameData\jk2sp.exe
+title118=Immanis
+path118=C:\Games\Immanis CD release\immanis.exe
module118=
ver118=0
-flag118=2
-flagg118=1180161
-tflag118=3
+flag118=24611
+flagg118=0
+tflag118=0
initx118=0
inity118=0
minx118=0
@@ -2022,11 +2022,11 @@ posx118=50
posy118=50
sizx118=800
sizy118=600
-title119=Jet Moto
-path119=M:\JETMOTO.EXE
+title119=Immanis (v2)
+path119=C:\Games\Immanis CD release\immanis_v2.exe
module119=
ver119=0
-flag119=139298
+flag119=268460067
flagg119=0
tflag119=0
initx119=0
@@ -2039,11 +2039,11 @@ posx119=50
posy119=50
sizx119=800
sizy119=600
-title120=Kiss Psyco Cyrcus
-path120=C:\Games\Psycho\client.exe
-module120=d3d.ren
-ver120=7
-flag120=537018404
+title120=In the Hunt
+path120=C:\Games\In The Hunt\e8.exe
+module120=
+ver120=0
+flag120=2
flagg120=0
tflag120=0
initx120=0
@@ -2056,13 +2056,13 @@ posx120=50
posy120=50
sizx120=800
sizy120=600
-title121=Koplio
-path121=D:\Games\Koplio\KOPLIO.exe
+title121=Incoming Forces
+path121=D:\Games\Incoming Forces\forces.exe
module121=
-ver121=0
-flag121=545259520
-flagg121=134217729
-tflag121=0
+ver121=8
+flag121=134217760
+flagg121=0
+tflag121=2
initx121=0
inity121=0
minx121=0
@@ -2073,11 +2073,11 @@ posx121=50
posy121=50
sizx121=800
sizy121=600
-title122=Krazy Ivan
-path122=C:\Games\Krazy Ivan\KRAZY.EXE
+title122=International Superstar Soccer 3
+path122=C:\Games\ISS_3\iss3.exe
module122=
-ver122=0
-flag122=536870914
+ver122=8
+flag122=545267715
flagg122=0
tflag122=0
initx122=0
@@ -2090,13 +2090,13 @@ posx122=50
posy122=50
sizx122=800
sizy122=600
-title123=Last Bronx
-path123=C:\Games\Last_Bronx\LB.EXE
-module123=
-ver123=0
-flag123=40994
-flagg123=0
-tflag123=64
+title123=Jacked
+path123=D:\Games\Jacked\Jacked.exe
+module123=winmm
+ver123=9
+flag123=537010208
+flagg123=196608
+tflag123=258
initx123=0
inity123=0
minx123=0
@@ -2107,13 +2107,13 @@ posx123=50
posy123=50
sizx123=800
sizy123=600
-title124=Lionheart
-path124=C:\Games\Lionheart Demo\Lionheart.exe
+title124=Jedi Knight II Jedi Outcast
+path124=D:\Games\Jedi Knight II Jedi Outcast\GameData\jk2sp.exe
module124=
ver124=0
-flag124=-2147483612
-flagg124=0
-tflag124=0
+flag124=2
+flagg124=1180161
+tflag124=2
initx124=0
inity124=0
minx124=0
@@ -2124,13 +2124,13 @@ posx124=50
posy124=50
sizx124=800
sizy124=600
-title125=lithtech.exe
-path125=D:\Games\NOLF Technology Demo\lithtech.exe
+title125=Jet Moto
+path125=M:\JETMOTO.EXE
module125=
-ver125=7
-flag125=0
-flagg125=512
-tflag125=258
+ver125=0
+flag125=139298
+flagg125=0
+tflag125=0
initx125=0
inity125=0
minx125=0
@@ -2141,13 +2141,13 @@ posx125=50
posy125=50
sizx125=800
sizy125=600
-title126=Lords of the Realm 2
-path126=D:\Games\L2SIEGE\LORDS2.EXE
-module126=
-ver126=0
-flag126=38
-flagg126=65536
-tflag126=9
+title126=Kiss Psyco Cyrcus
+path126=C:\Games\Psycho\client.exe
+module126=d3d.ren
+ver126=7
+flag126=537018404
+flagg126=0
+tflag126=0
initx126=0
inity126=0
minx126=0
@@ -2158,12 +2158,12 @@ posx126=50
posy126=50
sizx126=800
sizy126=600
-title127=M.A.X. 2
-path127=C:\Games\MAX 2\MAX_2\MAX2\MAX2.EXE
+title127=Kohan II Kings of War
+path127=D:\Games\Kohan II Kings of War\k2.exe
module127=
ver127=0
-flag127=34
-flagg127=0
+flag127=134217728
+flagg127=134217728
tflag127=0
initx127=0
inity127=0
@@ -2175,12 +2175,12 @@ posx127=50
posy127=50
sizx127=800
sizy127=600
-title128=M1 Tank Platoon 2
-path128=C:\Games\M1 Tank Platoon 2\M1TP2.exe
+title128=Koplio
+path128=D:\Games\Koplio\KOPLIO.exe
module128=
-ver128=8
-flag128=34
-flagg128=0
+ver128=0
+flag128=545259520
+flagg128=134217729
tflag128=0
initx128=0
inity128=0
@@ -2192,13 +2192,13 @@ posx128=50
posy128=50
sizx128=800
sizy128=600
-title129=Mario Worlds (stripped PE)
-path129=C:\Games\Mario Worlds\Mario Worlds.exe
+title129=Krazy Ivan
+path129=C:\Games\Krazy Ivan\KRAZY.EXE
module129=
-ver129=1
-flag129=2
-flagg129=1
-tflag129=386
+ver129=0
+flag129=536870914
+flagg129=0
+tflag129=0
initx129=0
inity129=0
minx129=0
@@ -2209,13 +2209,13 @@ posx129=50
posy129=50
sizx129=800
sizy129=600
-title130=Masters of Orion 2
-path130=C:\Games\Orion2\Orion95.exe
+title130=Last Bronx
+path130=C:\Games\Last_Bronx\LB.EXE
module130=
ver130=0
-flag130=34
+flag130=40994
flagg130=0
-tflag130=0
+tflag130=64
initx130=0
inity130=0
minx130=0
@@ -2226,11 +2226,11 @@ posx130=50
posy130=50
sizx130=800
sizy130=600
-title131=Microsoft Flight Simulator 98
-path131=C:\Games\Flight Simulator 98\FLTSIM98.EXE
+title131=Lionheart
+path131=C:\Games\Lionheart Demo\Lionheart.exe
module131=
ver131=0
-flag131=288
+flag131=-2147483612
flagg131=0
tflag131=0
initx131=0
@@ -2243,13 +2243,13 @@ posx131=50
posy131=50
sizx131=800
sizy131=600
-title132=Microsoft Midtown Madness
-path132=C:\Games\Midtown Madness\midtown.exe
+title132=lithtech.exe
+path132=D:\Games\NOLF Technology Demo\lithtech.exe
module132=
-ver132=0
-flag132=8192
-flagg132=0
-tflag132=2
+ver132=7
+flag132=0
+flagg132=512
+tflag132=258
initx132=0
inity132=0
minx132=0
@@ -2260,30 +2260,30 @@ posx132=50
posy132=50
sizx132=800
sizy132=600
-title133=Microsoft Midtown Madness Trial (BAD)
-path133=C:\Games\Midtown Madness Trial\midtrial.exe
+title133=Lords of the Realm 2
+path133=D:\Games\L2SIEGE\LORDS2.EXE
module133=
ver133=0
-flag133=2
-flagg133=0
-tflag133=0
+flag133=38
+flagg133=65536
+tflag133=8
initx133=0
inity133=0
minx133=0
miny133=0
maxx133=0
maxy133=0
-posx133=0
-posy133=0
+posx133=50
+posy133=50
sizx133=800
sizy133=600
-title134=Microsoft Motocross Madness 2 (BAD!!)
-path134=C:\Games\Motocross Madness 2\MCM2.cracked.EXE
+title134=M.A.X. 2
+path134=C:\Games\MAX 2\MAX_2\MAX2\MAX2.EXE
module134=
-ver134=7
-flag134=201326664
-flagg134=1
-tflag134=82
+ver134=0
+flag134=34
+flagg134=0
+tflag134=0
initx134=0
inity134=0
minx134=0
@@ -2294,13 +2294,13 @@ posx134=50
posy134=50
sizx134=800
sizy134=600
-title135=Microsoft Motocross Madness Trial (BAD)
-path135=C:\Games\Motocross Madness Trial\mcm.exe
+title135=M1 Tank Platoon 2
+path135=C:\Games\M1 Tank Platoon 2\M1TP2.exe
module135=
-ver135=1
-flag135=134225952
+ver135=8
+flag135=34
flagg135=0
-tflag135=130
+tflag135=0
initx135=0
inity135=0
minx135=0
@@ -2309,15 +2309,15 @@ maxx135=0
maxy135=0
posx135=50
posy135=50
-sizx135=0
-sizy135=0
-title136=Mission Force Cyberstorm (BAD ?)
-path136=C:\Games\SIERRA\CSTORM\CSTORM.EXE
+sizx135=800
+sizy135=600
+title136=Mario Worlds (stripped PE)
+path136=C:\Games\Mario Worlds\Mario Worlds.exe
module136=
-ver136=0
-flag136=33562658
-flagg136=0
-tflag136=0
+ver136=1
+flag136=2
+flagg136=1
+tflag136=386
initx136=0
inity136=0
minx136=0
@@ -2326,15 +2326,15 @@ maxx136=0
maxy136=0
posx136=50
posy136=50
-sizx136=0
-sizy136=0
-title137=Monopoly 3D
-path137=C:\Games\Monopoly (Edition 3D)\Monopoly.exe
+sizx136=800
+sizy136=600
+title137=Masters of Orion 2
+path137=C:\Games\Orion2\Orion95.exe
module137=
ver137=0
-flag137=134244388
+flag137=34
flagg137=0
-tflag137=2
+tflag137=0
initx137=0
inity137=0
minx137=0
@@ -2345,12 +2345,12 @@ posx137=50
posy137=50
sizx137=800
sizy137=600
-title138=Monster Truck Madness 2
-path138=C:\Games\Monster Truck Madness 2\Monster.EXE
+title138=Microsoft Flight Simulator 98
+path138=C:\Games\Flight Simulator 98\FLTSIM98.EXE
module138=
-ver138=1
-flag138=34
-flagg138=1
+ver138=0
+flag138=288
+flagg138=0
tflag138=0
initx138=0
inity138=0
@@ -2362,13 +2362,13 @@ posx138=50
posy138=50
sizx138=800
sizy138=600
-title139=Moto Racer Demo
-path139=D:\Games\Moto Racer Demo\PlayDemo.exe
+title139=Microsoft Midtown Madness
+path139=C:\Games\Midtown Madness\midtown.exe
module139=
ver139=0
-flag139=167903267
-flagg139=192
-tflag139=14
+flag139=8192
+flagg139=0
+tflag139=2
initx139=0
inity139=0
minx139=0
@@ -2379,12 +2379,12 @@ posx139=50
posy139=50
sizx139=800
sizy139=600
-title140=MTV Music Generator
-path140=D:\Codemasters\MTV Music Generator\mtvmusic.exe
+title140=Microsoft Midtown Madness Trial (BAD)
+path140=C:\Games\Midtown Madness Trial\midtrial.exe
module140=
ver140=0
flag140=2
-flagg140=134217728
+flagg140=0
tflag140=0
initx140=0
inity140=0
@@ -2392,17 +2392,17 @@ minx140=0
miny140=0
maxx140=0
maxy140=0
-posx140=50
-posy140=50
+posx140=0
+posy140=0
sizx140=800
sizy140=600
-title141=Necrodrome
-path141=C:\Games\Necrodome\NECRO95.EXE
+title141=Microsoft Motocross Madness 2 (BAD!!)
+path141=C:\Games\Motocross Madness 2\MCM2.cracked.EXE
module141=
-ver141=0
-flag141=268435495
-flagg141=256
-tflag141=0
+ver141=7
+flag141=201326664
+flagg141=1
+tflag141=82
initx141=0
inity141=0
minx141=0
@@ -2413,13 +2413,13 @@ posx141=50
posy141=50
sizx141=800
sizy141=600
-title142=Need For Speed - Porsche 2000
-path142=C:\Games\Need For Speed - Porsche 2000\Porsche.exe
+title142=Microsoft Motocross Madness Trial (BAD)
+path142=C:\Games\Motocross Madness Trial\mcm.exe
module142=
-ver142=7
-flag142=0
+ver142=1
+flag142=134225952
flagg142=0
-tflag142=258
+tflag142=130
initx142=0
inity142=0
minx142=0
@@ -2428,15 +2428,15 @@ maxx142=0
maxy142=0
posx142=50
posy142=50
-sizx142=800
-sizy142=600
-title143=Need For Speed Underground
-path143=D:\Games\Need For Speed Underground\speed.exe
+sizx142=0
+sizy142=0
+title143=Mission Force Cyberstorm (BAD ?)
+path143=C:\Games\SIERRA\CSTORM\CSTORM.EXE
module143=
ver143=0
-flag143=671088674
-flagg143=1815101441
-tflag143=323
+flag143=33562658
+flagg143=0
+tflag143=0
initx143=0
inity143=0
minx143=0
@@ -2445,15 +2445,15 @@ maxx143=0
maxy143=0
posx143=50
posy143=50
-sizx143=800
-sizy143=600
-title144=Need for Speed Underground 2
-path144=D:\Games\Need for Speed Underground 2\SPEED2.EXE
+sizx143=0
+sizy143=0
+title144=Monopoly 3D
+path144=C:\Games\Monopoly (Edition 3D)\Monopoly.exe
module144=
ver144=0
-flag144=671105024
-flagg144=673202176
-tflag144=7
+flag144=134244388
+flagg144=0
+tflag144=2
initx144=0
inity144=0
minx144=0
@@ -2464,13 +2464,13 @@ posx144=50
posy144=50
sizx144=800
sizy144=600
-title145=Need For Speed Underground Demo
-path145=D:\Games\Need For Speed Underground Demo\speeddemo.exe
+title145=Monster Truck Madness 2
+path145=C:\Games\Monster Truck Madness 2\Monster.EXE
module145=
-ver145=9
-flag145=0
-flagg145=673464320
-tflag145=3
+ver145=1
+flag145=34
+flagg145=1
+tflag145=0
initx145=0
inity145=0
minx145=0
@@ -2481,13 +2481,13 @@ posx145=50
posy145=50
sizx145=800
sizy145=600
-title146=Netstorm Islands at War
-path146=C:\Games\Netstorm\Netstorm.exe
+title146=Moto Racer Demo
+path146=D:\Games\Moto Racer Demo\PlayDemo.exe
module146=
ver146=0
-flag146=2
-flagg146=0
-tflag146=0
+flag146=167903267
+flagg146=192
+tflag146=14
initx146=0
inity146=0
minx146=0
@@ -2498,12 +2498,12 @@ posx146=50
posy146=50
sizx146=800
sizy146=600
-title147=Nightmare Ned
-path147=D:\Games\Ned\NITENED.EXE
+title147=MTV Music Generator
+path147=D:\games\MTV Music Generator\mtvmusic.exe
module147=
ver147=0
-flag147=537395202
-flagg147=135266305
+flag147=0
+flagg147=671088640
tflag147=0
initx147=0
inity147=0
@@ -2511,17 +2511,17 @@ minx147=0
miny147=0
maxx147=0
maxy147=0
-posx147=0
-posy147=0
+posx147=50
+posy147=50
sizx147=800
sizy147=600
-title148=Nocturne
-path148=D:\Games\Nocturne\nocturne.exe
+title148=Necrodrome
+path148=C:\Games\Necrodome\NECRO95.EXE
module148=
ver148=0
-flag148=134217730
-flagg148=402653264
-tflag148=387
+flag148=268435495
+flagg148=256
+tflag148=0
initx148=0
inity148=0
minx148=0
@@ -2532,13 +2532,13 @@ posx148=50
posy148=50
sizx148=800
sizy148=600
-title149=Nox
-path149=d:\Games\Nox\Game.exe
+title149=Need For Speed - Porsche 2000
+path149=C:\Games\Need For Speed - Porsche 2000\Porsche.exe
module149=
-ver149=0
-flag149=939540515
+ver149=7
+flag149=0
flagg149=0
-tflag149=386
+tflag149=258
initx149=0
inity149=0
minx149=0
@@ -2549,13 +2549,13 @@ posx149=50
posy149=50
sizx149=800
sizy149=600
-title150=Pacific General
-path150=C:\Games\Pacific General\PACGEN.EXE
+title150=Need For Speed Underground
+path150=D:\Games\Need For Speed Underground\speed.exe
module150=
ver150=0
-flag150=8226
-flagg150=0
-tflag150=2
+flag150=671088674
+flagg150=1815101441
+tflag150=322
initx150=0
inity150=0
minx150=0
@@ -2566,13 +2566,13 @@ posx150=50
posy150=50
sizx150=800
sizy150=600
-title151=Pandemonium 2
-path151=D:\Games\Pandemonium 2\pandy.exe
+title151=Need for Speed Underground 2
+path151=D:\Games\Need for Speed Underground 2\SPEED2.EXE
module151=
ver151=0
-flag151=671219714
-flagg151=1
-tflag151=0
+flag151=671105026
+flagg151=136331264
+tflag151=6
initx151=0
inity151=0
minx151=0
@@ -2583,13 +2583,13 @@ posx151=50
posy151=50
sizx151=800
sizy151=600
-title152=Pharaoh
-path152=D:\Games\Pharaoh\Pharaoh.exe
+title152=Need For Speed Underground Demo
+path152=D:\Games\Need For Speed Underground Demo\speeddemo.exe
module152=
-ver152=0
-flag152=1208483874
-flagg152=1048576
-tflag152=0
+ver152=9
+flag152=0
+flagg152=673202192
+tflag152=2
initx152=0
inity152=0
minx152=0
@@ -2600,13 +2600,13 @@ posx152=50
posy152=50
sizx152=800
sizy152=600
-title153=Postal
-path153=D:\Games\Postal\POSTAL.EXE
+title153=Netstorm Islands at War
+path153=C:\Games\Netstorm\Netstorm.exe
module153=
-ver153=1
-flag153=537133059
-flagg153=65536
-tflag153=266
+ver153=0
+flag153=2
+flagg153=0
+tflag153=0
initx153=0
inity153=0
minx153=0
@@ -2617,12 +2617,12 @@ posx153=50
posy153=50
sizx153=800
sizy153=600
-title154=Premier Manager 98
-path154=D:\Games\Premier Manager 98\MANAGER.EXE
+title154=Nightmare Ned
+path154=D:\Games\Ned\NITENED.EXE
module154=
ver154=0
-flag154=671088674
-flagg154=134217728
+flag154=537395202
+flagg154=135266305
tflag154=0
initx154=0
inity154=0
@@ -2630,17 +2630,17 @@ minx154=0
miny154=0
maxx154=0
maxy154=0
-posx154=50
-posy154=50
+posx154=0
+posy154=0
sizx154=800
sizy154=600
-title155=Project Nomads Demo (BAD)
-path155=C:\Games\Project Nomads Demo\bin\win32\nomads.exe
+title155=Nocturne
+path155=D:\Games\Nocturne\nocturne.exe
module155=
-ver155=8
-flag155=-1476394912
-flagg155=256
-tflag155=258
+ver155=0
+flag155=134217730
+flagg155=402653264
+tflag155=3
initx155=0
inity155=0
minx155=0
@@ -2651,13 +2651,13 @@ posx155=50
posy155=50
sizx155=800
sizy155=600
-title156=Puzzle Bubble
-path156=C:\Games\Puzzle Bubble\PB.EXE
+title156=Nox
+path156=d:\Games\Nox\Game.exe
module156=
ver156=0
-flag156=34
+flag156=939540515
flagg156=0
-tflag156=0
+tflag156=386
initx156=0
inity156=0
minx156=0
@@ -2668,13 +2668,13 @@ posx156=50
posy156=50
sizx156=800
sizy156=600
-title157=Quake 2
-path157=D:\Games\QUAKE2\quake2.exe
+title157=Pacific General
+path157=C:\Games\Pacific General\PACGEN.EXE
module157=
-ver157=10
-flag157=671089154
-flagg157=-1476263359
-tflag157=259
+ver157=0
+flag157=8226
+flagg157=0
+tflag157=2
initx157=0
inity157=0
minx157=0
@@ -2685,12 +2685,12 @@ posx157=50
posy157=50
sizx157=800
sizy157=600
-title158=Quake 3 Arena
-path158=D:\Games\Q3A\quake3.exe
+title158=Pandemonium 2
+path158=D:\Games\Pandemonium 2\pandy.exe
module158=
-ver158=10
-flag158=0
-flagg158=1180160
+ver158=0
+flag158=134217728
+flagg158=1
tflag158=3
initx158=0
inity158=0
@@ -2702,12 +2702,12 @@ posx158=50
posy158=50
sizx158=800
sizy158=600
-title159=Raiden II
-path159=C:\Games\Raiden II\Raiden II\RAIDENII.EXE
+title159=Pharaoh
+path159=D:\Games\Pharaoh\Pharaoh.exe
module159=
ver159=0
-flag159=34
-flagg159=0
+flag159=1208483874
+flagg159=1048576
tflag159=0
initx159=0
inity159=0
@@ -2719,13 +2719,13 @@ posx159=50
posy159=50
sizx159=800
sizy159=600
-title160=Railroad Tycoon II
-path160=C:\Games\Railroad.Tycoon.II\RT2.EXE
+title160=Postal
+path160=D:\Games\Postal\POSTAL.EXE
module160=
ver160=1
-flag160=134225954
-flagg160=0
-tflag160=0
+flag160=537133059
+flagg160=65536
+tflag160=266
initx160=0
inity160=0
minx160=0
@@ -2736,13 +2736,13 @@ posx160=50
posy160=50
sizx160=800
sizy160=600
-title161=Rally Championship 2000
-path161=C:\Games\Rally Championship 2000\RAL.EXE
+title161=Premier Manager 98
+path161=D:\Games\Premier Manager 98\MANAGER.EXE
module161=
ver161=0
-flag161=67108864
-flagg161=0
-tflag161=2
+flag161=671088674
+flagg161=1207959552
+tflag161=0
initx161=0
inity161=0
minx161=0
@@ -2753,13 +2753,13 @@ posx161=50
posy161=50
sizx161=800
sizy161=600
-title162=Rebel Moon Rising
-path162=C:\Games\Rebel Moon Rising\Rmr.exe
+title162=Project Nomads Demo (BAD)
+path162=C:\Games\Project Nomads Demo\bin\win32\nomads.exe
module162=
-ver162=0
-flag162=0
-flagg162=0
-tflag162=0
+ver162=8
+flag162=-1476394912
+flagg162=256
+tflag162=258
initx162=0
inity162=0
minx162=0
@@ -2770,13 +2770,13 @@ posx162=50
posy162=50
sizx162=800
sizy162=600
-title163=Redline - Gang Warfare 2066
-path163=C:\Games\Redline - Gang Warfare 2066\redline.exe
+title163=Puzzle Bubble
+path163=C:\Games\Puzzle Bubble\PB.EXE
module163=
ver163=0
-flag163=32
+flag163=34
flagg163=0
-tflag163=386
+tflag163=0
initx163=0
inity163=0
minx163=0
@@ -2787,13 +2787,13 @@ posx163=50
posy163=50
sizx163=800
sizy163=600
-title164=Resident Evil
-path164=D:\Games\Resident Evil\residentevil.patched.exe
+title164=Quake 2
+path164=D:\Games\QUAKE2\quake2.exe
module164=
-ver164=1
-flag164=134217827
-flagg164=-2147483520
-tflag164=2
+ver164=10
+flag164=671089154
+flagg164=671220289
+tflag164=258
initx164=0
inity164=0
minx164=0
@@ -2804,13 +2804,13 @@ posx164=50
posy164=50
sizx164=800
sizy164=600
-title165=Return to Castle Wolfenstein
-path165=D:\Games\Return to Castle Wolfenstein (2001)\Return to Castle Wolfenstein\WolfSP.exe
+title165=Quake 3 Arena
+path165=D:\Games\Q3A\quake3.exe
module165=
ver165=0
-flag165=134234114
-flagg165=-2147270656
-tflag165=256
+flag165=536870914
+flagg165=1180161
+tflag165=2
initx165=0
inity165=0
minx165=0
@@ -2821,11 +2821,11 @@ posx165=50
posy165=50
sizx165=800
sizy165=600
-title166=Re-Volt
-path166=C:\Games\Re-Volt\REVOLT.EXE
+title166=Raiden II
+path166=C:\Games\Raiden II\Raiden II\RAIDENII.EXE
module166=
ver166=0
-flag166=134217792
+flag166=34
flagg166=0
tflag166=0
initx166=0
@@ -2838,13 +2838,13 @@ posx166=50
posy166=50
sizx166=800
sizy166=600
-title167=Road Rash
-path167=D:\Games\Road Rash\ROADRASH\ROADRASH.EXE
+title167=Railroad Tycoon II
+path167=C:\Games\Railroad.Tycoon.II\RT2.EXE
module167=
-ver167=0
-flag167=134217730
+ver167=1
+flag167=134225954
flagg167=0
-tflag167=386
+tflag167=0
initx167=0
inity167=0
minx167=0
@@ -2855,13 +2855,13 @@ posx167=50
posy167=50
sizx167=800
sizy167=600
-title168=Road Rash Demo
-path168=D:\Games\RoadRash DEMO\DEMORASH.EXE
+title168=Rally Championship 2000
+path168=C:\Games\Rally Championship 2000\RAL.EXE
module168=
ver168=0
-flag168=134218242
+flag168=67108864
flagg168=0
-tflag168=258
+tflag168=2
initx168=0
inity168=0
minx168=0
@@ -2872,13 +2872,13 @@ posx168=50
posy168=50
sizx168=800
sizy168=600
-title169=Rogue Spear (BAD)
-path169=D:\Games\Rogue Spear\RogueSpear.exe
+title169=Rebel Moon Rising
+path169=C:\Games\Rebel Moon Rising\Rmr.exe
module169=
-ver169=1
-flag169=16388
-flagg169=134217984
-tflag169=2
+ver169=0
+flag169=0
+flagg169=0
+tflag169=0
initx169=0
inity169=0
minx169=0
@@ -2887,15 +2887,15 @@ maxx169=0
maxy169=0
posx169=50
posy169=50
-sizx169=400
-sizy169=300
-title170=Rollcage
-path170=D:\Games\Rollcage\Direct3D\Rollcage.exe
+sizx169=800
+sizy169=600
+title170=Redline - Gang Warfare 2066
+path170=C:\Games\Redline - Gang Warfare 2066\redline.exe
module170=
ver170=0
-flag170=268698112
-flagg170=-2013200384
-tflag170=387
+flag170=32
+flagg170=0
+tflag170=386
initx170=0
inity170=0
minx170=0
@@ -2906,47 +2906,47 @@ posx170=50
posy170=50
sizx170=800
sizy170=600
-title171=RollerCoaster Tycoon 2 Mini Game
-path171=C:\Games\RollerCoaster Tycoon 2 Mini Game\rct2.exe
+title171=Resident Evil
+path171=D:\Games\Resident Evil\residentevil.patched.exe
module171=
ver171=1
-flag171=536870946
-flagg171=0
-tflag171=0
+flag171=134217827
+flagg171=128
+tflag171=2
initx171=0
inity171=0
minx171=0
miny171=0
maxx171=0
maxy171=0
-posx171=0
-posy171=0
+posx171=50
+posy171=50
sizx171=800
sizy171=600
-title172=Sega Rally 2 Championship
-path172=C:\Games\Sega Rally 2 Championship\SEGA RALLY 2.exe
+title172=Resurrection
+path172=D:\Games\Resurrection Il Ritorno del Drago Nero\Resurrection.exe
module172=
-ver172=1
-flag172=268435488
-flagg172=2
-tflag172=0
+ver172=7
+flag172=136314882
+flagg172=134217728
+tflag172=3
initx172=0
inity172=0
minx172=0
miny172=0
maxx172=0
maxy172=0
-posx172=0
-posy172=0
+posx172=50
+posy172=50
sizx172=800
sizy172=600
-title173=Sentinel Returns
-path173=D:\Games\Sentinel Returns\Sentinel.exe
+title173=Return to Castle Wolfenstein
+path173=D:\Games\Return to Castle Wolfenstein (2001)\Return to Castle Wolfenstein\WolfSP.exe
module173=
-ver173=1
-flag173=3
-flagg173=-2147483648
-tflag173=0
+ver173=0
+flag173=134234114
+flagg173=-2147270656
+tflag173=256
initx173=0
inity173=0
minx173=0
@@ -2957,13 +2957,13 @@ posx173=50
posy173=50
sizx173=800
sizy173=600
-title174=Shadow Master (TBD)
-path174=C:\Games\Shadow Master\rmg.exe
+title174=Re-Volt
+path174=C:\Games\Re-Volt\REVOLT.EXE
module174=
-ver174=1
-flag174=32
-flagg174=256
-tflag174=450
+ver174=0
+flag174=134217792
+flagg174=0
+tflag174=0
initx174=0
inity174=0
minx174=0
@@ -2974,13 +2974,13 @@ posx174=50
posy174=50
sizx174=800
sizy174=600
-title175=Sid Meier's SimGolf Demo
-path175=C:\Games\Sid Meier's SimGolf Demo\golf.exe
-module175=jgl.dll
+title175=Road Rash
+path175=D:\Games\Road Rash\ROADRASH\ROADRASH.EXE
+module175=
ver175=0
-flag175=33554434
+flag175=134217730
flagg175=0
-tflag175=2
+tflag175=386
initx175=0
inity175=0
minx175=0
@@ -2991,13 +2991,13 @@ posx175=50
posy175=50
sizx175=800
sizy175=600
-title176=Silent Storm Demo
-path176=D:\Games\Silent Storm Demo\SilentStormDemo.exe
+title176=Road Rash Demo
+path176=D:\Games\RoadRash DEMO\DEMORASH.EXE
module176=
ver176=0
-flag176=536870913
-flagg176=-2013265664
-tflag176=3
+flag176=134218242
+flagg176=0
+tflag176=258
initx176=0
inity176=0
minx176=0
@@ -3008,13 +3008,13 @@ posx176=50
posy176=50
sizx176=800
sizy176=600
-title177=Sin, Wages of (sw renderer)
-path177=D:\Games\sin\sin.exe
-module177=ref_gl.dll ref_soft.dll
-ver177=10
-flag177=402670082
-flagg177=513
-tflag177=386
+title177=Rogue Spear (BAD)
+path177=D:\Games\Rogue Spear\RogueSpear.exe
+module177=
+ver177=1
+flag177=134234116
+flagg177=134217984
+tflag177=2
initx177=0
inity177=0
minx177=0
@@ -3025,13 +3025,13 @@ posx177=50
posy177=50
sizx177=800
sizy177=600
-title178=SleepWalker
-path178=C:\Games\SleepWalker\Sleepy.exe
+title178=Rollcage
+path178=D:\Games\Rollcage\Direct3D\Rollcage.exe
module178=
ver178=0
-flag178=301989954
-flagg178=0
-tflag178=198
+flag178=339739138
+flagg178=135331844
+tflag178=258
initx178=0
inity178=0
minx178=0
@@ -3042,11 +3042,11 @@ posx178=50
posy178=50
sizx178=800
sizy178=600
-title179=SnowBoard Racer
-path179=C:\Games\Snowboard Racer\SnowBoard.exe
+title179=RollerCoaster Tycoon 2 Mini Game
+path179=C:\Games\RollerCoaster Tycoon 2 Mini Game\rct2.exe
module179=
-ver179=0
-flag179=268443681
+ver179=1
+flag179=536870946
flagg179=0
tflag179=0
initx179=0
@@ -3055,33 +3055,33 @@ minx179=0
miny179=0
maxx179=0
maxy179=0
-posx179=50
-posy179=50
+posx179=0
+posy179=0
sizx179=800
sizy179=600
-title180=Solaris (~BAD)
-path180=c:\Games\Solaris\solaris.exe
+title180=Sega Rally 2 Championship
+path180=C:\Games\Sega Rally 2 Championship\SEGA RALLY 2.exe
module180=
-ver180=7
-flag180=973078627
-flagg180=1
-tflag180=2
+ver180=1
+flag180=268435488
+flagg180=2
+tflag180=0
initx180=0
inity180=0
minx180=0
miny180=0
maxx180=0
maxy180=0
-posx180=50
-posy180=50
+posx180=0
+posy180=0
sizx180=800
sizy180=600
-title181=Soldiers at War
-path181=D:\Games\Soldiers at War\SAW_Game.exe
+title181=Sentinel Returns
+path181=D:\Games\Sentinel Returns\Sentinel.exe
module181=
-ver181=0
-flag181=671359010
-flagg181=64
+ver181=1
+flag181=3
+flagg181=-2147483648
tflag181=0
initx181=0
inity181=0
@@ -3091,15 +3091,15 @@ maxx181=0
maxy181=0
posx181=50
posy181=50
-sizx181=640
-sizy181=480
-title182=Sonic 3
-path182=C:\Games\Sonic 3 + Sonic et Knuckles\Sonic 3\SONIC3K.EXE
+sizx181=800
+sizy181=600
+title182=Shadow Master (TBD)
+path182=C:\Games\Shadow Master\rmg.exe
module182=
ver182=1
-flag182=546
-flagg182=0
-tflag182=0
+flag182=32
+flagg182=256
+tflag182=450
initx182=0
inity182=0
minx182=0
@@ -3110,13 +3110,13 @@ posx182=50
posy182=50
sizx182=800
sizy182=600
-title183=Sonic 3D Blast
-path183=C:\Games\Sonic3D\pcsonic.exe
-module183=
+title183=Sid Meier's SimGolf Demo
+path183=C:\Games\Sid Meier's SimGolf Demo\golf.exe
+module183=jgl.dll
ver183=0
-flag183=134217762
+flag183=33554434
flagg183=0
-tflag183=0
+tflag183=2
initx183=0
inity183=0
minx183=0
@@ -3127,13 +3127,13 @@ posx183=50
posy183=50
sizx183=800
sizy183=600
-title184=Sonic R
-path184=C:\Games\SonicR\sonicr.exe
+title184=Silent Storm Demo
+path184=D:\Games\Silent Storm Demo\SilentStormDemo.exe
module184=
ver184=0
-flag184=8288
-flagg184=0
-tflag184=0
+flag184=536870913
+flagg184=-2013265664
+tflag184=2
initx184=0
inity184=0
minx184=0
@@ -3144,13 +3144,13 @@ posx184=50
posy184=50
sizx184=800
sizy184=600
-title185=Soulbringer
-path185=C:\Games\SoulBringer\SoulbringeVCnoeax.exe
-module185=
-ver185=0
-flag185=143024174
-flagg185=0
-tflag185=0
+title185=Sin, Wages of (sw renderer)
+path185=D:\Games\sin\sin.exe
+module185=ref_gl.dll ref_soft.dll
+ver185=10
+flag185=402670082
+flagg185=513
+tflag185=386
initx185=0
inity185=0
minx185=0
@@ -3161,13 +3161,13 @@ posx185=50
posy185=50
sizx185=800
sizy185=600
-title186=Speedboat Attack (BAD)
-path186=C:\Games\Speedboat Attack\SBOAT.EXE
+title186=SleepWalker
+path186=C:\Games\SleepWalker\Sleepy.exe
module186=
ver186=0
-flag186=541073954
+flag186=301989954
flagg186=0
-tflag186=2
+tflag186=198
initx186=0
inity186=0
minx186=0
@@ -3178,13 +3178,13 @@ posx186=50
posy186=50
sizx186=800
sizy186=600
-title187=Star trek Klingon Honor Guard
-path187=D:\Games\Star trek Klingon Honor Guard\System\Khg.exe
-module187=OGIDrv.dll
-ver187=10
-flag187=0
-flagg187=131585
-tflag187=387
+title187=SnowBoard Racer
+path187=C:\Games\Snowboard Racer\SnowBoard.exe
+module187=
+ver187=0
+flag187=268443681
+flagg187=0
+tflag187=0
initx187=0
inity187=0
minx187=0
@@ -3258,12 +3258,12 @@ maxfps59=0
maxfps60=0
maxfps61=0
maxfps62=0
-maxfps63=100
-maxfps64=20
-maxfps65=0
-maxfps66=500
+maxfps63=0
+maxfps64=0
+maxfps65=100
+maxfps66=20
maxfps67=0
-maxfps68=0
+maxfps68=500
maxfps69=0
maxfps70=0
maxfps71=0
@@ -3302,23 +3302,23 @@ maxfps103=0
maxfps104=0
maxfps105=0
maxfps106=0
-maxfps107=50
+maxfps107=0
maxfps108=0
maxfps109=0
-maxfps110=25
-maxfps111=0
+maxfps110=0
+maxfps111=50
maxfps112=0
maxfps113=0
maxfps114=0
maxfps115=0
-maxfps116=0
-maxfps117=100
+maxfps116=25
+maxfps117=0
maxfps118=0
maxfps119=0
maxfps120=0
maxfps121=0
maxfps122=0
-maxfps123=0
+maxfps123=100
maxfps124=0
maxfps125=0
maxfps126=0
@@ -3360,7 +3360,7 @@ maxfps161=0
maxfps162=0
maxfps163=0
maxfps164=0
-maxfps165=50
+maxfps165=0
maxfps166=0
maxfps167=0
maxfps168=0
@@ -3368,7 +3368,7 @@ maxfps169=0
maxfps170=0
maxfps171=0
maxfps172=0
-maxfps173=0
+maxfps173=50
maxfps174=0
maxfps175=0
maxfps176=0
@@ -3383,13 +3383,13 @@ maxfps184=0
maxfps185=0
maxfps186=0
maxfps187=0
-title188=Star Wars Episode 1 Racer
-path188=C:\Games\sw racer\SWEP1RCR.EXE
+title188=Solaris (~BAD)
+path188=c:\Games\Solaris\solaris.exe
module188=
-ver188=0
-flag188=142606368
-flagg188=0
-tflag188=0
+ver188=7
+flag188=973078627
+flagg188=1
+tflag188=2
initx188=0
inity188=0
minx188=0
@@ -3527,13 +3527,13 @@ initts61=0
opengllib62=
initts62=0
opengllib63=
-initts63=-5
+initts63=0
opengllib64=
-initts64=-9
+initts64=0
opengllib65=
-initts65=0
+initts65=-5
opengllib66=
-initts66=0
+initts66=-9
opengllib67=
initts67=0
opengllib68=
@@ -3589,7 +3589,7 @@ initts92=0
opengllib93=
initts93=0
opengllib94=
-initts94=8
+initts94=0
opengllib95=
initts95=0
opengllib96=
@@ -3597,7 +3597,7 @@ initts96=0
opengllib97=
initts97=0
opengllib98=
-initts98=0
+initts98=8
opengllib99=
initts99=0
opengllib100=
@@ -3605,7 +3605,7 @@ initts100=0
opengllib101=
initts101=0
opengllib102=
-initts102=4
+initts102=0
opengllib103=
initts103=0
opengllib104=
@@ -3613,19 +3613,19 @@ initts104=0
opengllib105=
initts105=0
opengllib106=
-initts106=0
+initts106=4
opengllib107=
-initts107=8
+initts107=0
opengllib108=
-initts108=8
+initts108=0
opengllib109=
initts109=0
opengllib110=
-initts110=1
+initts110=0
opengllib111=
-initts111=0
+initts111=8
opengllib112=
-initts112=0
+initts112=8
opengllib113=
initts113=0
opengllib114=
@@ -3633,9 +3633,9 @@ initts114=0
opengllib115=
initts115=0
opengllib116=
-initts116=0
+initts116=1
opengllib117=
-initts117=3
+initts117=0
opengllib118=
initts118=0
opengllib119=
@@ -3647,7 +3647,7 @@ initts121=0
opengllib122=
initts122=0
opengllib123=
-initts123=0
+initts123=3
opengllib124=
initts124=0
opengllib125=
@@ -3687,7 +3687,7 @@ initts141=0
opengllib142=
initts142=0
opengllib143=
-initts143=6
+initts143=0
opengllib144=
initts144=0
opengllib145=
@@ -3701,13 +3701,13 @@ initts148=0
opengllib149=
initts149=0
opengllib150=
-initts150=0
+initts150=6
opengllib151=
initts151=0
opengllib152=
initts152=0
opengllib153=
-initts153=-3
+initts153=0
opengllib154=
initts154=0
opengllib155=
@@ -3721,7 +3721,7 @@ initts158=0
opengllib159=
initts159=0
opengllib160=
-initts160=0
+initts160=-3
opengllib161=
initts161=0
opengllib162=
@@ -3731,7 +3731,7 @@ initts163=0
opengllib164=
initts164=0
opengllib165=
-initts165=-4
+initts165=0
opengllib166=
initts166=0
opengllib167=
@@ -3741,13 +3741,13 @@ initts168=0
opengllib169=
initts169=0
opengllib170=
-initts170=3
+initts170=0
opengllib171=
initts171=0
opengllib172=
initts172=0
opengllib173=
-initts173=0
+initts173=-4
opengllib174=
initts174=0
opengllib175=
@@ -3757,7 +3757,7 @@ initts176=0
opengllib177=
initts177=0
opengllib178=
-initts178=0
+initts178=3
opengllib179=
initts179=0
opengllib180=
@@ -3779,14 +3779,14 @@ initts187=0
opengllib188=
sizy188=600
initts188=0
-title189=Star Wars Jedi Knight Jedi Academy
-path189=D:\Games\Star_Wars_Jedi_Knight_Jedi_Academy\GameData\jasp.exe
+title189=Soldiers at War
+path189=D:\Games\Soldiers at War\SAW_Game.exe
module189=
opengllib189=
ver189=0
-flag189=2
-flagg189=196608
-tflag189=3
+flag189=671359010
+flagg189=64
+tflag189=0
initx189=0
inity189=0
minx189=0
@@ -3795,16 +3795,16 @@ maxx189=0
maxy189=0
posx189=50
posy189=50
-sizx189=800
-sizy189=600
+sizx189=640
+sizy189=480
maxfps189=0
initts189=0
-title190=Star Wars: Jedi Knight
+title190=Sonic 3
module190=
opengllib190=
-path190=C:\Games\Jedi Knight\Jedi Knight\JK.EXE
-ver190=0
-flag190=8226
+path190=C:\Games\Sonic 3 + Sonic et Knuckles\Sonic 3\SONIC3K.EXE
+ver190=1
+flag190=546
flagg190=0
tflag190=0
initx190=0
@@ -3819,13 +3819,13 @@ sizx190=800
sizy190=600
maxfps190=0
initts190=0
-title191=Star Wars: the Gungan Frontier
-path191=C:\Games\sw the gungan frontier\Gungan Frontier.exe
+title191=Sonic 3D Blast
+path191=C:\Games\Sonic3D\pcsonic.exe
module191=
opengllib191=
-ver191=1
-flag191=402915362
-flagg191=512
+ver191=0
+flag191=134217762
+flagg191=0
tflag191=0
initx191=0
inity191=0
@@ -3833,20 +3833,20 @@ minx191=0
miny191=0
maxx191=0
maxy191=0
-posx191=0
-posy191=0
+posx191=50
+posy191=50
sizx191=800
sizy191=600
maxfps191=0
initts191=0
-title192=Starcraft
-path192=D:\Games\Starcraft\StarCraft.exe
+title192=Sonic R
+path192=C:\Games\SonicR\sonicr.exe
module192=
opengllib192=
ver192=0
-flag192=134234115
-flagg192=2179088
-tflag192=258
+flag192=8288
+flagg192=0
+tflag192=0
initx192=0
inity192=0
minx192=0
@@ -3859,12 +3859,12 @@ sizx192=800
sizy192=600
maxfps192=0
initts192=0
-title193=Starship Troopers
-path193=C:\Games\Starship Troopers - Terran Ascendancy\stta\StarshipTroopers.exe
+title193=Soulbringer
+path193=C:\Games\SoulBringer\SoulbringeVCnoeax.exe
module193=
opengllib193=
-ver193=1
-flag193=32
+ver193=0
+flag193=143024174
flagg193=0
tflag193=0
initx193=0
@@ -3879,14 +3879,14 @@ sizx193=800
sizy193=600
maxfps193=0
initts193=0
-title194=Starshot Space Circus
-path194=D:\SpaceCircus.exe
+title194=Speedboat Attack (BAD)
+path194=C:\Games\Speedboat Attack\SBOAT.EXE
module194=
opengllib194=
ver194=0
-flag194=66
+flag194=541073954
flagg194=0
-tflag194=0
+tflag194=2
initx194=0
inity194=0
minx194=0
@@ -3899,14 +3899,14 @@ sizx194=800
sizy194=600
maxfps194=0
initts194=0
-title195=Stronghold Demo
-path195=C:\Games\Firefly Studios' Stronghold - Demo\Stronghold Demo.exe
-module195=
+title195=Star trek Klingon Honor Guard
+path195=D:\Games\Star trek Klingon Honor Guard\System\Khg.exe
+module195=OGIDrv.dll
opengllib195=
-ver195=0
-flag195=98
-flagg195=0
-tflag195=0
+ver195=10
+flag195=0
+flagg195=537002497
+tflag195=386
initx195=0
inity195=0
minx195=0
@@ -3919,20 +3919,20 @@ sizx195=800
sizy195=600
maxfps195=0
initts195=0
-title196=Sub Culture
-path196=C:\Games\Sub Culture\sc.exe
+title196=Star Wars Episode 1 Racer
+path196=C:\Games\sw racer\SWEP1RCR.EXE
module196=
opengllib196=
ver196=0
-flag196=66
-flagg196=256
-tflag196=10
-initx196=50
-inity196=50
-minx196=50
-miny196=50
-maxx196=800
-maxy196=600
+flag196=142606368
+flagg196=0
+tflag196=0
+initx196=0
+inity196=0
+minx196=0
+miny196=0
+maxx196=0
+maxy196=0
posx196=50
posy196=50
sizx196=800
@@ -3940,14 +3940,14 @@ sizy196=600
maxfps196=0
initts196=0
-title197=Superbike 2001
-path197=C:\Games\Superbike 2001\Sbk2001.exe
+title197=Star Wars Jedi Knight Jedi Academy
+path197=D:\Games\Star_Wars_Jedi_Knight_Jedi_Academy\GameData\jasp.exe
module197=
opengllib197=
-ver197=1
-flag197=536887332
-flagg197=0
-tflag197=0
+ver197=0
+flag197=2
+flagg197=196608
+tflag197=2
initx197=0
inity197=0
minx197=0
@@ -3960,12 +3960,12 @@ sizx197=800
sizy197=600
maxfps197=0
initts197=0
-title198=Syberia 2 Demo
-path198=C:\Games\Syberia 2 Demo\Syberia2Demo.exe
+title198=Star Wars: Jedi Knight
+path198=C:\Games\Jedi Knight\Jedi Knight\JK.EXE
module198=
opengllib198=
-ver198=8
-flag198=536887332
+ver198=0
+flag198=8226
flagg198=0
tflag198=0
initx198=0
@@ -3980,13 +3980,13 @@ sizx198=800
sizy198=600
maxfps198=0
initts198=0
-title199=Syberia Demo
-path199=C:\Games\SyberiaDemo\SyberiaDemo.exe
+title199=Star Wars: the Gungan Frontier
+path199=C:\Games\sw the gungan frontier\Gungan Frontier.exe
module199=
opengllib199=
ver199=1
-flag199=536887332
-flagg199=0
+flag199=402915362
+flagg199=512
tflag199=0
initx199=0
inity199=0
@@ -3994,20 +3994,20 @@ minx199=0
miny199=0
maxx199=0
maxy199=0
-posx199=50
-posy199=50
+posx199=0
+posy199=0
sizx199=800
sizy199=600
maxfps199=0
initts199=0
-title200=System Shock 2 (BAD!!!)
-path200=C:\Games\Sys Shock II\Shock2.exe
+title200=Starcraft
+path200=D:\Games\Starcraft\StarCraft.exe
module200=
opengllib200=
-ver200=1
-flag200=0
-flagg200=64
-tflag200=0
+ver200=0
+flag200=134234115
+flagg200=2179088
+tflag200=258
initx200=0
inity200=0
minx200=0
@@ -4020,13 +4020,13 @@ sizx200=800
sizy200=600
maxfps200=0
initts200=0
-title201=Take no Prisoners
-path201=D:\Games\Take no Prisoners\TNP.EXE
+title201=Starship Troopers
+path201=C:\Games\Starship Troopers - Terran Ascendancy\stta\StarshipTroopers.exe
module201=
opengllib201=
-ver201=0
-flag201=2
-flagg201=16777248
+ver201=1
+flag201=32
+flagg201=0
tflag201=0
initx201=0
inity201=0
@@ -4040,14 +4040,14 @@ sizx201=800
sizy201=600
maxfps201=0
initts201=0
-title202=Test Drive 4
-path202=D:\Games\Test Drive 4\td4.EXE
+title202=Starshot Space Circus
+path202=D:\SpaceCircus.exe
module202=
opengllib202=
ver202=0
-flag202=-2013265885
-flagg202=-2147418094
-tflag202=2
+flag202=66
+flagg202=0
+tflag202=0
initx202=0
inity202=0
minx202=0
@@ -4059,15 +4059,15 @@ posy202=50
sizx202=800
sizy202=600
maxfps202=0
-initts202=-2
-title203=Test Drive 5 (D3D)
-path203=D:\Games\Test Drive 5\TD5_D3D.exe
+initts202=0
+title203=Stronghold Demo
+path203=C:\Games\Firefly Studios' Stronghold - Demo\Stronghold Demo.exe
module203=
opengllib203=
ver203=0
-flag203=536870944
-flagg203=-2147483648
-tflag203=263
+flag203=98
+flagg203=0
+tflag203=0
initx203=0
inity203=0
minx203=0
@@ -4080,34 +4080,34 @@ sizx203=800
sizy203=600
maxfps203=0
initts203=0
-title204=The Nations Demo
-path204=C:\Games\The Nations Demo\bin\Game.exe
+title204=Sub Culture
+path204=C:\Games\Sub Culture\sc.exe
module204=
opengllib204=
-ver204=1
-flag204=402661920
+ver204=0
+flag204=66
flagg204=256
-tflag204=0
-initx204=0
-inity204=0
-minx204=0
-miny204=0
-maxx204=0
-maxy204=0
+tflag204=10
+initx204=50
+inity204=50
+minx204=50
+miny204=50
+maxx204=800
+maxy204=600
posx204=50
posy204=50
sizx204=800
sizy204=600
maxfps204=0
initts204=0
-title205=The Sims
-path205=D:\Games\sims\Sims.exe
+title205=Superbike 2001
+path205=C:\Games\Superbike 2001\Sbk2001.exe
module205=
opengllib205=
-ver205=0
-flag205=134226976
-flagg205=65536
-tflag205=2
+ver205=1
+flag205=536887332
+flagg205=0
+tflag205=0
initx205=0
inity205=0
minx205=0
@@ -4120,12 +4120,12 @@ sizx205=800
sizy205=600
maxfps205=0
initts205=0
-title206=Thief the Dark Project (FRE)
-path206=C:\Games\thief\game\thieffixed.exe
+title206=Syberia 2 Demo
+path206=C:\Games\Syberia 2 Demo\Syberia2Demo.exe
module206=
opengllib206=
-ver206=1
-flag206=16390
+ver206=8
+flag206=536887332
flagg206=0
tflag206=0
initx206=0
@@ -4140,14 +4140,14 @@ sizx206=800
sizy206=600
maxfps206=0
initts206=0
-title207=TinTin: Prisoners of the Sun
-path207=C:\Games\tintin\TINTINW.EXE
+title207=Syberia Demo
+path207=C:\Games\SyberiaDemo\SyberiaDemo.exe
module207=
opengllib207=
-ver207=0
-flag207=34
+ver207=1
+flag207=536887332
flagg207=0
-tflag207=2
+tflag207=0
initx207=0
inity207=0
minx207=0
@@ -4160,14 +4160,14 @@ sizx207=800
sizy207=600
maxfps207=0
initts207=0
-title208=Tintoy (BAD gfx)
-path208=C:\Games\Tintoy\Tintoy.exe
+title208=System Shock 2 (BAD!!!)
+path208=C:\Games\Sys Shock II\Shock2.exe
module208=
opengllib208=
-ver208=0
-flag208=546
-flagg208=256
-tflag208=258
+ver208=1
+flag208=0
+flagg208=64
+tflag208=0
initx208=0
inity208=0
minx208=0
@@ -4180,14 +4180,14 @@ sizx208=800
sizy208=600
maxfps208=0
initts208=0
-title209=Tomb Raider - Anniversary
+title209=Take no Prisoners
module209=
opengllib209=
-path209=C:\Games\Tomb Raider - Anniversary\tra.exe
-ver209=9
-flag209=0
-flagg209=256
-tflag209=2
+path209=D:\Games\Take no Prisoners\TNP.EXE
+ver209=0
+flag209=2
+flagg209=16777248
+tflag209=0
initx209=0
inity209=0
minx209=0
@@ -4199,15 +4199,15 @@ posy209=50
sizx209=800
sizy209=600
maxfps209=0
-initts209=8
-title210=Tomb Raider 2 the Golden Mask
-path210=D:\Games\TR2 Golden Mask\T2GOLD.EXE
+initts209=0
+title210=Test Drive 4
+path210=D:\Games\Test Drive 4\td4.EXE
module210=
opengllib210=
ver210=0
-flag210=570425378
-flagg210=1064960
-tflag210=258
+flag210=-2013265885
+flagg210=-2147418094
+tflag210=2
initx210=0
inity210=0
minx210=0
@@ -4219,13 +4219,13 @@ posy210=50
sizx210=800
sizy210=600
maxfps210=0
-initts210=8
-title211=Tomb Raider 3 Demo
-path211=C:\Games\Tomb Raider 3 - The Lost Artifact Demo\tr3gold.exe
+initts210=-2
+title211=Test Drive 5 (D3D)
+path211=D:\Games\Test Drive 5\TD5_D3D.exe
module211=
opengllib211=
-ver211=1
-flag211=369098848
+ver211=0
+flag211=671088640
flagg211=0
tflag211=258
initx211=0
@@ -4240,14 +4240,14 @@ sizx211=800
sizy211=600
maxfps211=0
initts211=0
-title212=Tomb Raider 4 Demo
-path212=C:\Games\Tomb Raider 4 - The Last Revelation (Demo)\tomb4.patched.exe
+title212=The Nations Demo
+path212=C:\Games\The Nations Demo\bin\Game.exe
module212=
opengllib212=
-ver212=0
-flag212=234881056
-flagg212=16
-tflag212=258
+ver212=1
+flag212=402661920
+flagg212=256
+tflag212=0
initx212=0
inity212=0
minx212=0
@@ -4260,14 +4260,14 @@ sizx212=800
sizy212=600
maxfps212=0
initts212=0
-title213=Total Annihilation Kingdoms
-path213=D:\Games\Total Annihilation Kingdoms\Kingdoms.exe
+title213=The Sims
+path213=D:\Games\sims\Sims.exe
module213=
opengllib213=
ver213=0
-flag213=134234146
-flagg213=1073741824
-tflag213=0
+flag213=134226976
+flagg213=65536
+tflag213=2
initx213=0
inity213=0
minx213=0
@@ -4280,13 +4280,13 @@ sizx213=800
sizy213=600
maxfps213=0
initts213=0
-title214=Total Soccer 2000
-path214=D:\Games\Total Soccer 2000\Total Soccer 2000\SOCCERDX.EXE
+title214=Thief the Dark Project (FRE)
+path214=C:\Games\thief\game\thieffixed.exe
module214=
opengllib214=
ver214=1
-flag214=33554434
-flagg214=1069056
+flag214=16390
+flagg214=0
tflag214=0
initx214=0
inity214=0
@@ -4298,16 +4298,16 @@ posx214=50
posy214=50
sizx214=800
sizy214=600
-maxfps214=200
+maxfps214=0
initts214=0
-title215=Ultim@te Race Pro
-path215=C:\Games\Ultim@te race pro\Ultim@te Race Pro.exe
+title215=TinTin: Prisoners of the Sun
+path215=C:\Games\tintin\TINTINW.EXE
module215=
opengllib215=
ver215=0
-flag215=570425440
-flagg215=256
-tflag215=0
+flag215=34
+flagg215=0
+tflag215=2
initx215=0
inity215=0
minx215=0
@@ -4320,14 +4320,14 @@ sizx215=800
sizy215=600
maxfps215=0
initts215=0
-title216=Uprising - Join or Die
-path216=D:\Games\Uprising\uprising.exe
+title216=Tintoy (BAD gfx)
+path216=C:\Games\Tintoy\Tintoy.exe
module216=
opengllib216=
ver216=0
-flag216=-2013265882
-flagg216=18
-tflag216=0
+flag216=546
+flagg216=256
+tflag216=258
initx216=0
inity216=0
minx216=0
@@ -4340,14 +4340,14 @@ sizx216=800
sizy216=600
maxfps216=0
initts216=0
-title217=Urban Assault
-path217=D:\Games\Urban Assault\UA.EXE
+title217=Tomb Raider - Anniversary
+path217=C:\Games\Tomb Raider - Anniversary\tra.exe
module217=
opengllib217=
-ver217=0
-flag217=671236130
+ver217=9
+flag217=0
flagg217=256
-tflag217=258
+tflag217=2
initx217=0
inity217=0
minx217=0
@@ -4359,14 +4359,14 @@ posy217=50
sizx217=800
sizy217=600
maxfps217=0
-initts217=0
-title218=Urban Assault CD
+initts217=8
+title218=Tomb Raider 2 the Golden Mask
module218=
opengllib218=
-path218=D:\Games\Urban Assault CD\UA.EXE
+path218=D:\Games\TR2 Golden Mask\T2GOLD.EXE
ver218=0
-flag218=671236130
-flagg218=33024
+flag218=570425378
+flagg218=1064960
tflag218=258
initx218=0
inity218=0
@@ -4379,15 +4379,15 @@ posy218=50
sizx218=800
sizy218=600
maxfps218=0
-initts218=0
-title219=wa[cracked].exe
-path219=D:\Games\Worms 2 Armageddon\wa[cracked].exe
+initts218=8
+title219=Tomb Raider 3 Demo
+path219=C:\Games\Tomb Raider 3 - The Lost Artifact Demo\tr3gold.exe
module219=
opengllib219=
-ver219=0
-flag219=679477250
-flagg219=171966464
-tflag219=0
+ver219=1
+flag219=369098848
+flagg219=0
+tflag219=258
initx219=0
inity219=0
minx219=0
@@ -4400,12 +4400,12 @@ sizx219=800
sizy219=600
maxfps219=0
initts219=0
-title220=Warcraft 2 Battlenet Edition
-path220=D:\Games\Warcraft 2\Warcraft II BNE.exe
+title220=Tomb Raider 4 Demo
+path220=C:\Games\Tomb Raider 4 - The Last Revelation (Demo)\tomb4.patched.exe
module220=
opengllib220=
ver220=0
-flag220=268452003
+flag220=234881056
flagg220=16
tflag220=258
initx220=0
@@ -4418,16 +4418,16 @@ posx220=50
posy220=50
sizx220=800
sizy220=600
-maxfps220=40
+maxfps220=0
initts220=0
-title221=Wargames (demo)
-path221=D:\Games\Wargames\wargames.exe
+title221=Total Annihilation Kingdoms
+path221=D:\Games\Total Annihilation Kingdoms\Kingdoms.exe
module221=
opengllib221=
ver221=0
-flag221=268436642
-flagg221=134217728
-tflag221=3
+flag221=134234146
+flagg221=1073741824
+tflag221=0
initx221=0
inity221=0
minx221=0
@@ -4440,13 +4440,13 @@ sizx221=800
sizy221=600
maxfps221=0
initts221=0
-title222=WarHammer Rites of War
-path222=C:\Games\Rites of War\RoW.exe
+title222=Total Soccer 2000
+path222=D:\Games\Total Soccer 2000\Total Soccer 2000\SOCCERDX.EXE
module222=
opengllib222=
-ver222=0
-flag222=134217760
-flagg222=128
+ver222=1
+flag222=167772162
+flagg222=1069056
tflag222=0
initx222=0
inity222=0
@@ -4458,9 +4458,9 @@ posx222=50
posy222=50
sizx222=800
sizy222=600
-maxfps222=0
+maxfps222=200
initts222=0
-flagh0=20
+flagh0=276
flagi0=0
flagh1=0
flagi1=0
@@ -4470,25 +4470,25 @@ flagh3=0
flagi3=0
flagh4=16
flagi4=0
-flagh5=0
+flagh5=16
flagi5=0
flagh6=0
flagi6=0
-flagh7=0
+flagh7=16
flagi7=0
-flagh8=16
+flagh8=144
flagi8=0
-flagh9=16
+flagh9=176
flagi9=0
-flagh10=28
+flagh10=56
flagi10=0
-flagh11=0
+flagh11=16
flagi11=0
flagh12=20
flagi12=0
-flagh13=2
+flagh13=144
flagi13=0
-flagh14=0
+flagh14=16
flagi14=0
flagh15=0
flagi15=0
@@ -4496,9 +4496,9 @@ flagh16=0
flagi16=0
flagh17=20
flagi17=0
-flagh18=0
+flagh18=16
flagi18=0
-flagh19=0
+flagh19=80
flagi19=0
flagh20=0
flagi20=0
@@ -4514,7 +4514,7 @@ flagh25=0
flagi25=0
flagh26=0
flagi26=0
-flagh27=0
+flagh27=16
flagi27=0
flagh28=0
flagi28=0
@@ -4522,15 +4522,15 @@ flagh29=0
flagi29=0
flagh30=0
flagi30=0
-flagh31=0
+flagh31=29
flagi31=0
-flagh32=29
+flagh32=0
flagi32=0
-flagh33=0
+flagh33=29
flagi33=0
-flagh34=48
+flagh34=0
flagi34=0
-flagh35=0
+flagh35=48
flagi35=0
flagh36=0
flagi36=0
@@ -4538,15 +4538,15 @@ flagh37=0
flagi37=0
flagh38=0
flagi38=0
-flagh39=-842150435
-flagi39=-842150451
-flagh40=0
-flagi40=0
+flagh39=0
+flagi39=0
+flagh40=-842150435
+flagi40=-842150451
flagh41=0
flagi41=0
flagh42=0
flagi42=0
-flagh43=0
+flagh43=28
flagi43=0
flagh44=0
flagi44=0
@@ -4558,11 +4558,11 @@ flagh47=0
flagi47=0
flagh48=0
flagi48=0
-flagh49=20
+flagh49=0
flagi49=0
flagh50=0
flagi50=0
-flagh51=0
+flagh51=20
flagi51=0
flagh52=0
flagi52=0
@@ -4582,7 +4582,7 @@ flagh59=0
flagi59=0
flagh60=0
flagi60=0
-flagh61=20
+flagh61=16
flagi61=0
flagh62=0
flagi62=0
@@ -4590,39 +4590,39 @@ flagh63=20
flagi63=0
flagh64=0
flagi64=0
-flagh65=0
+flagh65=20
flagi65=0
-flagh66=0
+flagh66=16
flagi66=0
flagh67=0
flagi67=0
-flagh68=18
+flagh68=0
flagi68=0
-flagh69=1
+flagh69=0
flagi69=0
-flagh70=20
+flagh70=18
flagi70=0
-flagh71=0
+flagh71=1
flagi71=0
-flagh72=0
+flagh72=20
flagi72=0
-flagh73=0
+flagh73=16
flagi73=0
flagh74=0
flagi74=0
-flagh75=0
+flagh75=277
flagi75=0
flagh76=0
flagi76=0
-flagh77=16
+flagh77=0
flagi77=0
flagh78=0
flagi78=0
flagh79=0
flagi79=0
-flagh80=0
+flagh80=16
flagi80=0
-flagh81=0
+flagh81=477
flagi81=0
flagh82=0
flagi82=0
@@ -4630,9 +4630,9 @@ flagh83=0
flagi83=0
flagh84=0
flagi84=0
-flagh85=0
+flagh85=16
flagi85=0
-flagh86=0
+flagh86=477
flagi86=0
flagh87=0
flagi87=0
@@ -4640,7 +4640,7 @@ flagh88=0
flagi88=0
flagh89=0
flagi89=0
-flagh90=29
+flagh90=0
flagi90=0
flagh91=0
flagi91=0
@@ -4652,43 +4652,43 @@ flagh94=0
flagi94=0
flagh95=0
flagi95=0
-flagh96=0
+flagh96=93
flagi96=0
-flagh97=16
+flagh97=0
flagi97=0
-flagh98=0
+flagh98=16
flagi98=0
flagh99=0
flagi99=0
-flagh100=0
+flagh100=16
flagi100=0
-flagh101=0
+flagh101=176
flagi101=0
-flagh102=16
+flagh102=0
flagi102=0
flagh103=0
flagi103=0
flagh104=0
flagi104=0
-flagh105=29
+flagh105=0
flagi105=0
-flagh106=0
+flagh106=16
flagi106=0
-flagh107=16
+flagh107=0
flagi107=0
-flagh108=16
+flagh108=0
flagi108=0
-flagh109=0
+flagh109=29
flagi109=0
flagh110=0
flagi110=0
-flagh111=0
+flagh111=16
flagi111=0
-flagh112=0
+flagh112=16
flagi112=0
-flagh113=0
+flagh113=28
flagi113=0
-flagh114=0
+flagh114=477
flagi114=0
flagh115=0
flagi115=0
@@ -4696,7 +4696,7 @@ flagh116=0
flagi116=0
flagh117=0
flagi117=0
-flagh118=16
+flagh118=0
flagi118=0
flagh119=0
flagi119=0
@@ -4708,14 +4708,14 @@ flagh122=0
flagi122=0
flagh123=0
flagi123=0
-flagh124=0
+flagh124=16
flagi124=0
flagh125=0
flagi125=0
flagh126=0
flagi126=0
-flagh127=0
-flagi127=0
+flagh127=-842150435
+flagi127=-842150451
flagh128=0
flagi128=0
flagh129=0
@@ -4726,7 +4726,7 @@ flagh131=0
flagi131=0
flagh132=0
flagi132=0
-flagh133=0
+flagh133=16
flagi133=0
flagh134=0
flagi134=0
@@ -4740,57 +4740,57 @@ flagh138=0
flagi138=0
flagh139=0
flagi139=0
-flagh140=29
+flagh140=0
flagi140=0
flagh141=0
flagi141=0
flagh142=0
flagi142=0
-flagh143=60
+flagh143=0
flagi143=0
-flagh144=61
+flagh144=0
flagi144=0
-flagh145=61
+flagh145=0
flagi145=0
-flagh146=0
+flagh146=16
flagi146=0
-flagh147=0
+flagh147=285
flagi147=0
flagh148=16
flagi148=0
flagh149=0
flagi149=0
-flagh150=0
+flagh150=60
flagi150=0
-flagh151=0
+flagh151=61
flagi151=0
-flagh152=0
+flagh152=61
flagi152=0
-flagh153=20
+flagh153=0
flagi153=0
flagh154=0
flagi154=0
-flagh155=0
+flagh155=144
flagi155=0
flagh156=0
flagi156=0
flagh157=0
flagi157=0
-flagh158=0
+flagh158=20
flagi158=0
-flagh159=0
+flagh159=16
flagi159=0
-flagh160=0
+flagh160=20
flagi160=0
-flagh161=0
+flagh161=16
flagi161=0
flagh162=0
flagi162=0
flagh163=0
flagi163=0
-flagh164=0
+flagh164=16
flagi164=0
-flagh165=0
+flagh165=16
flagi165=0
flagh166=0
flagi166=0
@@ -4802,9 +4802,9 @@ flagh169=0
flagi169=0
flagh170=0
flagi170=0
-flagh171=0
+flagh171=16
flagi171=0
-flagh172=0
+flagh172=29
flagi172=0
flagh173=0
flagi173=0
@@ -4814,9 +4814,9 @@ flagh175=0
flagi175=0
flagh176=0
flagi176=0
-flagh177=0
+flagh177=20
flagi177=0
-flagh178=0
+flagh178=20
flagi178=0
flagh179=0
flagi179=0
@@ -4830,7 +4830,7 @@ flagh183=0
flagi183=0
flagh184=0
flagi184=0
-flagh185=0
+flagh185=16
flagi185=0
flagh186=0
flagi186=0
@@ -4838,7 +4838,7 @@ flagh187=0
flagi187=0
flagh188=0
flagi188=0
-flagh189=20
+flagh189=0
flagi189=0
flagh190=0
flagi190=0
@@ -4850,11 +4850,11 @@ flagh193=0
flagi193=0
flagh194=0
flagi194=0
-flagh195=0
+flagh195=16
flagi195=0
flagh196=0
flagi196=0
-flagh197=0
+flagh197=20
flagi197=0
flagh198=0
flagi198=0
@@ -4866,11 +4866,11 @@ flagh201=0
flagi201=0
flagh202=0
flagi202=0
-flagh203=2
+flagh203=0
flagi203=0
flagh204=0
flagi204=0
-flagh205=16
+flagh205=0
flagi205=0
flagh206=0
flagi206=0
@@ -4880,13 +4880,13 @@ flagh208=0
flagi208=0
flagh209=0
flagi209=0
-flagh210=0
+flagh210=16
flagi210=0
-flagh211=0
+flagh211=20
flagi211=0
flagh212=0
flagi212=0
-flagh213=16
+flagh213=144
flagi213=0
flagh214=0
flagi214=0
@@ -4894,28 +4894,28 @@ flagh215=0
flagi215=0
flagh216=0
flagi216=0
-flagh217=16
+flagh217=0
flagi217=0
-flagh218=0
+flagh218=16
flagi218=0
flagh219=0
flagi219=0
-flagh220=16
+flagh220=0
flagi220=0
-flagh221=0
+flagh221=16
flagi221=0
-flagh222=0
+flagh222=16
flagi222=0
-title223=Warlords 3
-path223=D:\Games\WARLORDS3\Darklord.exe
+title223=Ultim@te Race Pro
+path223=C:\Games\Ultim@te race pro\Ultim@te Race Pro.exe
module223=
opengllib223=
ver223=0
-flag223=-2013264350
-flagg223=286261280
+flag223=570425440
+flagg223=256
flagh223=0
flagi223=0
-tflag223=259
+tflag223=0
initx223=0
inity223=0
minx223=0
@@ -4924,18 +4924,18 @@ maxx223=0
maxy223=0
posx223=50
posy223=50
-sizx223=0
-sizy223=0
+sizx223=800
+sizy223=600
maxfps223=0
initts223=0
-title224=WarTorn
-path224=C:\Games\WarTorn\W.exe
+title224=Uprising - Join or Die
+path224=D:\Games\Uprising\uprising.exe
module224=
opengllib224=
ver224=0
-flag224=32
-flagg224=0
-flagh224=0
+flag224=-2013265882
+flagg224=18
+flagh224=16
flagi224=0
tflag224=0
initx224=0
@@ -4950,16 +4950,16 @@ sizx224=800
sizy224=600
maxfps224=0
initts224=0
-title225=WarWind
-path225=C:\Games\WarWind\WW.EXE
+title225=Urban Assault
+path225=D:\Games\Urban Assault\UA.EXE
module225=
opengllib225=
ver225=0
-flag225=16418
-flagg225=81936
-flagh225=0
+flag225=671236130
+flagg225=256
+flagh225=16
flagi225=0
-tflag225=0
+tflag225=258
initx225=0
inity225=0
minx225=0
@@ -4972,36 +4972,36 @@ sizx225=800
sizy225=600
maxfps225=0
initts225=0
-title226=Worms Armageddon Demo (BAD!!!)
-path226=C:\Games\Worms Armageddon Demo\WaDemo.exe
+title226=Urban Assault CD
+path226=D:\Games\Urban Assault CD\UA.EXE
module226=
opengllib226=
-ver226=1
-flag226=939524099
-flagg226=8
+ver226=0
+flag226=671236130
+flagg226=33024
flagh226=0
flagi226=0
-tflag226=2
+tflag226=258
initx226=0
inity226=0
minx226=0
miny226=0
maxx226=0
maxy226=0
-posx226=0
-posy226=0
-sizx226=0
-sizy226=0
+posx226=50
+posy226=50
+sizx226=800
+sizy226=600
maxfps226=0
initts226=0
-title227=Worms World Party
-path227=D:\Games\Worms World Party\wwp.exe
+title227=wa[cracked].exe
+path227=D:\Games\Worms 2 Armageddon\wa[cracked].exe
module227=
opengllib227=
-ver227=1
-flag227=8388610
-flagg227=0
-flagh227=0
+ver227=0
+flag227=134217730
+flagg227=171966464
+flagh227=16
flagi227=0
tflag227=0
initx227=0
@@ -5016,60 +5016,60 @@ sizx227=800
sizy227=600
maxfps227=0
initts227=0
-title228=Worms World Party Demo (BAD)
-path228=C:\Games\WWP Demo\wwp.exe
-module228=MFC42.DLL ltkrn10N.dll
+title228=Warcraft 2 Battlenet Edition
+path228=D:\Games\Warcraft 2\Warcraft II BNE.exe
+module228=
opengllib228=
-ver228=1
-flag228=406847491
-flagg228=8
-flagh228=0
+ver228=0
+flag228=268452003
+flagg228=16
+flagh228=16
flagi228=0
-tflag228=2
+tflag228=258
initx228=0
inity228=0
minx228=0
miny228=0
maxx228=0
maxy228=0
-posx228=0
-posy228=0
-sizx228=0
-sizy228=0
-maxfps228=0
+posx228=50
+posy228=50
+sizx228=800
+sizy228=600
+maxfps228=40
initts228=0
-title229=X-Com Enforcer
-path229=C:\Games\X-Com Enforcer\System\xcom.exe
+title229=Wargames (demo)
+path229=D:\Games\Wargames\wargames.exe
module229=
opengllib229=
-ver229=1
-flag229=32
-flagg229=0
-flagh229=0
+ver229=0
+flag229=268435618
+flagg229=1207959552
+flagh229=20
flagi229=0
-tflag229=0
+tflag229=3
initx229=0
inity229=0
minx229=0
miny229=0
maxx229=0
maxy229=0
-posx229=0
-posy229=0
+posx229=50
+posy229=50
sizx229=800
sizy229=600
maxfps229=0
initts229=0
-title230=X-Com Interceptor
+title230=WarHammer Rites of War
module230=
opengllib230=
-title231=Z Steel Soldiers
+title231=Warlords 3
module231=
opengllib231=
-path230=C:\Games\X-Com_Interceptor\X-COM Interceptor\Interceptor.exe
+path230=C:\Games\Rites of War\RoW.exe
ver230=0
-flag230=16418
-flagg230=0
+flag230=134217760
+flagg230=128
flagh230=0
flagi230=0
tflag230=0
@@ -5085,13 +5085,13 @@ sizx230=800
sizy230=600
maxfps230=0
initts230=0
-path231=C:\Games\ZSteelSoldiers\Bin\z2.exe
-ver231=8
-flag231=805462020
-flagg231=0
-flagh231=0
+path231=D:\Games\WARLORDS3\Darklord.exe
+ver231=0
+flag231=-2013265886
+flagg231=1343225888
+flagh231=20
flagi231=0
-tflag231=0
+tflag231=258
initx231=0
inity231=0
minx231=0
@@ -5100,16 +5100,16 @@ maxx231=0
maxy231=0
posx231=50
posy231=50
-sizx231=800
-sizy231=600
+sizx231=0
+sizy231=0
maxfps231=0
initts231=0
-title232=Zax Alien Hunter
-path232=C:\Games\ZaxDemo\Zax.exe
+title232=WarTorn
+path232=C:\Games\WarTorn\W.exe
module232=
opengllib232=
ver232=0
-flag232=-1476386784
+flag232=32
flagg232=0
flagh232=0
flagi232=0
@@ -5126,13 +5126,13 @@ sizx232=800
sizy232=600
maxfps232=0
initts232=0
-title233=Zero Critical (BAD)
-path233=C:\Games\zero_critical_-_satin_rift\ZEROCR.EXE
+title233=WarWind
+path233=C:\Games\WarWind\WW.EXE
module233=
opengllib233=
ver233=0
-flag233=679477858
-flagg233=8
+flag233=16418
+flagg233=81936
flagh233=0
flagi233=0
tflag233=0
@@ -5142,22 +5142,22 @@ minx233=0
miny233=0
maxx233=0
maxy233=0
-posx233=0
-posy233=0
+posx233=50
+posy233=50
sizx233=800
sizy233=600
maxfps233=0
initts233=0
-title234=Zero Population Count
-path234=C:\Games\ZPC\ZPC.EXE
+title234=Worms Armageddon Demo (BAD!!!)
+path234=C:\Games\Worms Armageddon Demo\WaDemo.exe
module234=
opengllib234=
-ver234=0
-flag234=1073741859
-flagg234=0
+ver234=1
+flag234=939524099
+flagg234=8
flagh234=0
flagi234=0
-tflag234=0
+tflag234=2
initx234=0
inity234=0
minx234=0
@@ -5166,8 +5166,8 @@ maxx234=0
maxy234=0
posx234=0
posy234=0
-sizx234=800
-sizy234=600
+sizx234=0
+sizy234=0
maxfps234=0
initts234=0
coord0=0
@@ -5179,7 +5179,7 @@ coord5=0
coord6=0
coord7=0
coord8=0
-coord9=0
+coord9=1
coord10=1
coord11=0
coord12=0
@@ -5362,7 +5362,7 @@ coord188=0
coord189=0
coord190=0
coord191=0
-coord192=1
+coord192=0
coord193=0
coord194=0
coord195=0
@@ -5370,7 +5370,7 @@ coord196=0
coord197=0
coord198=0
coord199=0
-coord200=0
+coord200=1
coord201=0
coord202=0
coord203=0
@@ -5383,7 +5383,7 @@ coord209=0
coord210=0
coord211=0
coord212=0
-coord213=1
+coord213=0
coord214=0
coord215=0
coord216=0
@@ -5391,7 +5391,7 @@ coord217=0
coord218=0
coord219=0
coord220=0
-coord221=0
+coord221=1
coord222=0
coord223=0
coord224=0
@@ -5401,17 +5401,17 @@ coord227=0
coord228=0
coord229=0
coord230=0
-coord231=0
+coord231=1
coord232=0
coord233=0
coord234=0
-title235=Zero Zone
-path235=D:\ZZone\ZeroZone.exe
+title235=Worms World Party
+path235=D:\Games\Worms World Party\wwp.exe
module235=
opengllib235=
-ver235=0
+ver235=1
coord235=0
-flag235=34
+flag235=8388610
flagg235=0
flagh235=0
flagi235=0
@@ -5428,36 +5428,36 @@ sizx235=800
sizy235=600
maxfps235=0
initts235=0
-title236=Zeus Poseidon
-path236=C:\Games\Zeus-Poseidon\Zeus.exe
-module236=
+title236=Worms World Party Demo (BAD)
+path236=C:\Games\WWP Demo\wwp.exe
+module236=MFC42.DLL ltkrn10N.dll
opengllib236=
-ver236=0
+ver236=1
coord236=0
-flag236=34
-flagg236=0
+flag236=406847491
+flagg236=8
flagh236=0
flagi236=0
-tflag236=0
+tflag236=2
initx236=0
inity236=0
minx236=0
miny236=0
maxx236=0
maxy236=0
-posx236=50
-posy236=50
-sizx236=800
-sizy236=600
+posx236=0
+posy236=0
+sizx236=0
+sizy236=0
maxfps236=0
initts236=0
-title237=Zoo Tycoon
-path237=C:\Games\Zoo Tycoon\zoo.exe
+title237=X-Com Enforcer
+path237=C:\Games\X-Com Enforcer\System\xcom.exe
module237=
opengllib237=
-ver237=0
+ver237=1
coord237=0
-flag237=-2013265886
+flag237=32
flagg237=0
flagh237=0
flagi237=0
@@ -5468,14 +5468,221 @@ minx237=0
miny237=0
maxx237=0
maxy237=0
-posx237=50
-posy237=50
+posx237=0
+posy237=0
sizx237=800
sizy237=600
maxfps237=0
initts237=0
+title238=X-Com Interceptor
+path238=C:\Games\X-Com_Interceptor\X-COM Interceptor\Interceptor.exe
+module238=
+opengllib238=
+ver238=0
+coord238=0
+flag238=16418
+flagg238=0
+flagh238=0
+flagi238=0
+tflag238=0
+initx238=0
+inity238=0
+minx238=0
+miny238=0
+maxx238=0
+maxy238=0
+posx238=50
+posy238=50
+sizx238=800
+sizy238=600
+maxfps238=0
+initts238=0
+title239=Z Steel Soldiers
+path239=C:\Games\ZSteelSoldiers\Bin\z2.exe
+module239=
+opengllib239=
+ver239=8
+coord239=0
+flag239=805462020
+flagg239=0
+flagh239=0
+flagi239=0
+tflag239=0
+initx239=0
+inity239=0
+minx239=0
+miny239=0
+maxx239=0
+maxy239=0
+posx239=50
+posy239=50
+sizx239=800
+sizy239=600
+maxfps239=0
+initts239=0
+title240=Zax Alien Hunter
+path240=C:\Games\ZaxDemo\Zax.exe
+module240=
+opengllib240=
+ver240=0
+coord240=0
+flag240=-1476386784
+flagg240=0
+flagh240=0
+flagi240=0
+tflag240=0
+initx240=0
+inity240=0
+minx240=0
+miny240=0
+maxx240=0
+maxy240=0
+posx240=50
+posy240=50
+sizx240=800
+sizy240=600
+maxfps240=0
+initts240=0
+title241=Zero Critical (BAD)
+path241=C:\Games\zero_critical_-_satin_rift\ZEROCR.EXE
+module241=
+opengllib241=
+ver241=0
+coord241=0
+flag241=679477858
+flagg241=8
+flagh241=0
+flagi241=0
+tflag241=0
+initx241=0
+inity241=0
+minx241=0
+miny241=0
+maxx241=0
+maxy241=0
+posx241=0
+posy241=0
+sizx241=800
+sizy241=600
+maxfps241=0
+initts241=0
+title242=Zero Population Count
+path242=C:\Games\ZPC\ZPC.EXE
+module242=
+opengllib242=
+ver242=0
+coord242=0
+flag242=1073741859
+flagg242=0
+flagh242=0
+flagi242=0
+tflag242=0
+initx242=0
+inity242=0
+minx242=0
+miny242=0
+maxx242=0
+maxy242=0
+posx242=0
+posy242=0
+sizx242=800
+sizy242=600
+maxfps242=0
+initts242=0
+title243=Zero Zone
+path243=D:\ZZone\ZeroZone.exe
+module243=
+opengllib243=
+ver243=0
+coord243=0
+flag243=34
+flagg243=0
+flagh243=0
+flagi243=0
+tflag243=0
+initx243=0
+inity243=0
+minx243=0
+miny243=0
+maxx243=0
+maxy243=0
+posx243=50
+posy243=50
+sizx243=800
+sizy243=600
+maxfps243=0
+initts243=0
+title244=Zeus Poseidon
+path244=C:\Games\Zeus-Poseidon\Zeus.exe
+module244=
+opengllib244=
+ver244=0
+coord244=0
+flag244=34
+flagg244=0
+flagh244=0
+flagi244=0
+tflag244=0
+initx244=0
+inity244=0
+minx244=0
+miny244=0
+maxx244=0
+maxy244=0
+posx244=50
+posy244=50
+sizx244=800
+sizy244=600
+maxfps244=0
+initts244=0
+title245=Zoo Tycoon
+path245=C:\Games\Zoo Tycoon\zoo.exe
+module245=
+opengllib245=
+ver245=0
+coord245=0
+flag245=-2013265886
+flagg245=0
+flagh245=0
+flagi245=0
+tflag245=0
+initx245=0
+inity245=0
+minx245=0
+miny245=0
+maxx245=0
+maxy245=0
+posx245=50
+posy245=50
+sizx245=800
+sizy245=600
+maxfps245=0
+initts245=0
+title246=Warhammer 40K Final Liberation
+path246=D:\Games\Warhammer 40K Final Liberation\EPIC40K.EXE
+module246=
+opengllib246=
+ver246=1
+coord246=0
+flag246=134217730
+flagg246=1209008128
+flagh246=221
+flagi246=0
+tflag246=3
+initx246=0
+inity246=0
+minx246=0
+miny246=0
+maxx246=0
+maxy246=0
+posx246=50
+posy246=50
+sizx246=800
+sizy246=600
+maxfps246=0
+initts246=0
[window]
-posx=851
-posy=329
-sizx=435
-sizy=299
+posx=934
+posy=634
+sizx=400
+sizy=300
diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt
index 4c9af22..34428c1 100644
--- a/build/readme-relnotes.txt
+++ b/build/readme-relnotes.txt
@@ -129,3 +129,15 @@ Fixed ChangeDisplaySettings
GUI: added ListView icons
GUI: added pause command
GUI: updated commands layout
+
+v2.02.23/24
+Fixed "disable setting gamma ramp" flag to intercept both GDI and D3D calls
+Fixed client workarea setting to occupy the whole client area even when preserving aspect ratio (it draws black rectangles to the left/right or top/bottom side)
+Added DisableThreadLibraryCalls optimization
+Added B&W screen simulation (for primary emulation only)
+Improved the primary emulation capacity to handle 3D games
+Added the "preserve surface capabilities" flag
+Fixed an hooking bug for user32.dll
+
+v2.02.23/24.fix1
+Fixed a few things to make Grand Prix World playable in emulation mode - sorry, no movies!
diff --git a/build/v2_02_22_build.rar b/build/v2_02_22_build.rar
deleted file mode 100644
index fd35067..0000000
Binary files a/build/v2_02_22_build.rar and /dev/null differ
diff --git a/dll/dxemublt.cpp b/dll/dxemublt.cpp
index ccab3dd..830e30f 100644
--- a/dll/dxemublt.cpp
+++ b/dll/dxemublt.cpp
@@ -203,18 +203,13 @@ static HRESULT WINAPI EmuBlt_16_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
Palette16BPP[pi]=(pi & 0x1F)<<3 | (pi & 0x3E0)<<6 | (pi & 0x7C00)<<9; // RGB555
}
}
-#ifdef RGB655
- //default: GetPixelFormat: Flags=40(DDPF_RGB) FourCC=0 BitCount=16 RGBA=(7c00,3e0,1f,0)
- //DK2: GetPixelFormat: Flags=40(DDPF_RGB) FourCC=0 BitCount=16 RGBA=(f800,7e0,1f,0)
- for (pi=0; pi<0x10000; pi++) {
- Palette16BPP[pi]=(pi & 0x1F)<<3 | (pi & 0x3E0)<<6 | (pi & 0xFC00)<<8; // RGB655
+ if (dxw.dwFlags3 & BLACKWHITE){
+ for (pi=0; pi<0x10000; pi++) {
+ DWORD grey;
+ grey=((pi & 0xFF) + ((pi & 0xFF00)>>8) + ((pi & 0xFF0000)>>16)) / 3;
+ Palette16BPP[pi] = grey + (grey<<8) + (grey<<16);
+ }
}
-#endif
-#ifdef RGB444
- for (pi=0; pi<0x10000; pi++) {
- Palette16BPP[pi]=(pi & 0x0F)<<4 | (pi & 0xF0)<<8 | (pi & 0xF00)<<12; // RGB444
- }
-#endif
}
for(y = 0; y < h; y ++){
for(x = 0; x < w; x ++){
diff --git a/dll/dxhelper.cpp b/dll/dxhelper.cpp
index c97099b..282b86d 100644
--- a/dll/dxhelper.cpp
+++ b/dll/dxhelper.cpp
@@ -381,23 +381,6 @@ char *ExplainShowCmd(int c)
return(eb);
}
-char *ExplainPixelFlags(DWORD c)
-{
- static char eb[256];
- unsigned int l;
- strcpy(eb,"DDPF_");
- if (c & DDPF_ALPHA) strcat(eb, "ALPHA+");
- if (c & DDPF_ALPHAPIXELS) strcat(eb, "ALPHAPIXELS+");
- if (c & DDPF_ALPHAPREMULT) strcat(eb, "ALPHAPREMULT+");
- if (c & DDPF_FOURCC) strcat(eb, "FOURCC+");
- //if (c & DDPF_PALETTEINDEXED) strcat(eb, "PALETTEINDEXED+"); //unsupported
- if (c & DDPF_RGB) strcat(eb, "RGB+");
- l=strlen(eb);
- if (l>strlen("DDPF_")) eb[l-1]=0; // delete last '+' if any
- else eb[0]=0;; // when zero ...
- return(eb);
-}
-
char *ExplainBltStatus(DWORD c)
{
static char *eb;
diff --git a/dll/dxhelper.h b/dll/dxhelper.h
index 5f00983..e1d710a 100644
--- a/dll/dxhelper.h
+++ b/dll/dxhelper.h
@@ -16,7 +16,6 @@ extern char *ExplainExStyle(DWORD);
extern char *ExplainShowCmd(int);
extern char *ExplainBltStatus(DWORD);
extern char *ExplainDDError(DWORD);
-extern char *ExplainPixelFlags(DWORD);
extern char *ExplainWinMessage(DWORD);
extern char *ExplainResizing(DWORD);
extern char *ExplainDeviceCaps(DWORD);
diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp
index 273f1bf..53987ea 100644
--- a/dll/dxhook.cpp
+++ b/dll/dxhook.cpp
@@ -52,8 +52,8 @@ static char *Flag2Names[32]={
static char *Flag3Names[32]={
"FORCEHOOKOPENGL", "MARKBLIT", "HOOKDLLS", "SUPPRESSD3DEXT",
- "", "", "", "",
- "", "", "", "",
+ "HOOKENABLED", "FIXD3DFRAME", "FORCE16BPP", "BLACKWHITE",
+ "SAVECAPS", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
@@ -426,7 +426,7 @@ void CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWPOS wp)
case DXW_DESKTOP_WORKAREA:
SystemParametersInfo(SPI_GETWORKAREA, NULL, &workarea, 0);
rect = workarea;
- if (dxw.dwFlags2 & KEEPASPECTRATIO) {
+ if ((dxw.dwFlags2 & KEEPASPECTRATIO) && !(dxw.dwFlags3 & FIXD3DFRAME)) {
int w, h, b; // width, height and border
w = workarea.right - workarea.left;
h = workarea.bottom - workarea.top;
@@ -874,6 +874,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
break;
case WM_CLOSE:
OutTraceD("WindowProc: WM_CLOSE - terminating process\n");
+ if(dxw.dwFlags3 & FORCE16BPP) RecoverScreenMode();
TerminateProcess(GetCurrentProcess(),0);
break;
case WM_SYSKEYDOWN:
@@ -925,6 +926,8 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
if (dxw.dwFlags1 & AUTOREFRESH) dxw.ScreenRefresh();
pWindowProc=WhndGetWindowProc(hwnd);
+ //OutTraceB("WindowProc: pWindowProc=%x extWindowProc=%x message=%x(%s) wparam=%x lparam=%x\n",
+ // (*pWindowProc), extWindowProc, message, ExplainWinMessage(message), wparam, lparam);
if(pWindowProc) {
LRESULT ret;
ret=(*pWindowProc)(hwnd, message, wparam, lparam);
@@ -1102,6 +1105,20 @@ static void RecoverScreenMode()
EnumDisplaySettings(NULL, ENUM_REGISTRY_SETTINGS, &InitDevMode);
OutTraceD("ChangeDisplaySettings: RECOVER wxh=(%dx%d) BitsPerPel=%d\n",
InitDevMode.dmPelsWidth, InitDevMode.dmPelsHeight, InitDevMode.dmBitsPerPel);
+ InitDevMode.dmFields |= DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
+ res=(*pChangeDisplaySettings)(&InitDevMode, 0);
+ if(res) OutTraceE("ChangeDisplaySettings: ERROR err=%d at %d\n", GetLastError(), __LINE__);
+}
+
+static void SwitchTo16BPP()
+{
+ DEVMODE InitDevMode;
+ BOOL res;
+ EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &InitDevMode);
+ OutTraceD("ChangeDisplaySettings: CURRENT wxh=(%dx%d) BitsPerPel=%d -> 16\n",
+ InitDevMode.dmPelsWidth, InitDevMode.dmPelsHeight, InitDevMode.dmBitsPerPel);
+ InitDevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
+ InitDevMode.dmBitsPerPel = 16;
res=(*pChangeDisplaySettings)(&InitDevMode, 0);
if(res) OutTraceE("ChangeDisplaySettings: ERROR err=%d at %d\n", GetLastError(), __LINE__);
}
@@ -1309,8 +1326,8 @@ int HookInit(TARGETMAP *target, HWND hwnd)
sModule=strtok(NULL," ;");
}
-
if(dxw.dwFlags2 & RECOVERSCREENMODE) RecoverScreenMode();
+ if(dxw.dwFlags3 & FORCE16BPP) SwitchTo16BPP();
InitScreenParameters();
diff --git a/dll/dxuser32.cpp b/dll/dxuser32.cpp
index f877f1b..6bb89df 100644
--- a/dll/dxuser32.cpp
+++ b/dll/dxuser32.cpp
@@ -17,7 +17,7 @@ static HookEntry_Type Hooks[]={
{"EnumDisplaySettingsA", NULL, (FARPROC *)&pEnumDisplaySettings, (FARPROC)extEnumDisplaySettings},
{"GetClipCursor", NULL, (FARPROC *)&pGetClipCursor, (FARPROC)extGetClipCursor},
{"ClipCursor", NULL, (FARPROC *)&pClipCursor, (FARPROC)extClipCursor},
- {"FillRect", NULL, (FARPROC *)&pClipCursor, (FARPROC)extFillRect},
+ {"FillRect", NULL, (FARPROC *)&pFillRect, (FARPROC)extFillRect},
{"DefWindowProcA", NULL, (FARPROC *)&pDefWindowProc, (FARPROC)extDefWindowProc},
{"CreateWindowExA", NULL, (FARPROC *)&pCreateWindowExA, (FARPROC)extCreateWindowExA},
{"RegisterClassExA", NULL, (FARPROC *)&pRegisterClassExA, (FARPROC)extRegisterClassExA},
diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp
index 9962b94..460b8f4 100644
--- a/dll/dxwcore.cpp
+++ b/dll/dxwcore.cpp
@@ -2,6 +2,7 @@
#include "dxwnd.h"
#include "dxwcore.hpp"
#include "syslibs.h"
+#include "dxhelper.h"
#include "resource.h"
/* ------------------------------------------------------------------ */
@@ -832,4 +833,47 @@ int dxwCore::GetDLLIndex(char *lpFileName)
}
if (!SysNames[idx]) return -1;
return idx;
-}
\ No newline at end of file
+}
+
+void dxwCore::FixStyle(char *ApiName, HWND hwnd, WPARAM wParam, LPARAM lParam)
+{
+ LPSTYLESTRUCT lpSS;
+ lpSS = (LPSTYLESTRUCT) lParam;
+
+ switch (wParam) {
+ case GWL_STYLE:
+ OutTraceD("%s: new Style=%x(%s)\n",
+ ApiName, lpSS->styleNew, ExplainStyle(lpSS->styleNew));
+ if (dxw.dwFlags1 & FIXWINFRAME){ // set canonical style
+ lpSS->styleNew= WS_OVERLAPPEDWINDOW;
+ }
+ if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value
+ lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_STYLE);
+ }
+ if (dxw.dwFlags1 & PREVENTMAXIMIZE){ // disable maximize settings
+ if (lpSS->styleNew & WS_MAXIMIZE){
+ OutTraceD("%s: prevent maximize style\n", ApiName);
+ lpSS->styleNew &= ~WS_MAXIMIZE;
+ }
+ }
+ break;
+ case GWL_EXSTYLE:
+ OutTraceD("%s: new ExStyle=%x(%s)\n",
+ ApiName, lpSS->styleNew, ExplainExStyle(lpSS->styleNew));
+ if (dxw.dwFlags1 & FIXWINFRAME){ // set canonical style
+ lpSS->styleNew= 0;
+ }
+ if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value
+ lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_EXSTYLE);
+ }
+ if (dxw.dwFlags1 & PREVENTMAXIMIZE){ // disable maximize settings
+ if (lpSS->styleNew & WS_EX_TOPMOST){
+ OutTraceD("%s: prevent EXSTYLE topmost style\n", ApiName);
+ lpSS->styleNew &= ~WS_EX_TOPMOST;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+}
diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp
index e396f69..2c5a128 100644
--- a/dll/dxwcore.hpp
+++ b/dll/dxwcore.hpp
@@ -64,6 +64,7 @@ public: // methods
void ShowBanner(HWND);
POINT ScreenToClient(POINT);
int GetDLLIndex(char *);
+ void FixStyle(char *, HWND, WPARAM, LPARAM);
public: // simple data variables
DDPIXELFORMAT ActualPixelFormat;
diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp
index ca84efc..bdd0bb7 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.22"
+#define VERSION "2.02.24.f1"
LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam);
@@ -56,6 +56,8 @@ BOOL APIENTRY DllMain( HANDLE hmodule,
if(dwreason != DLL_PROCESS_ATTACH) return TRUE;
hInst = (HINSTANCE)hmodule;
+ // optimization: disables DLL_THREAD_ATTACH and DLL_THREAD_DETACH notifications for the specified DLL
+ DisableThreadLibraryCalls((HMODULE)hmodule);
hMapping = CreateFileMapping((HANDLE)0xffffffff, NULL, PAGE_READWRITE,
0, sizeof(DxWndStatus)+sizeof(TARGETMAP)*MAXTARGETS, "UniWind_TargetList");
pStatus = (DXWNDSTATUS *)MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DXWNDSTATUS)+sizeof(TARGETMAP)*MAXTARGETS);
diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo
index a8ce95b..f294880 100644
Binary files a/dll/dxwnd.vs2008.suo and b/dll/dxwnd.vs2008.suo differ
diff --git a/dll/hd3d.cpp b/dll/hd3d.cpp
index a867de9..3e80c05 100644
--- a/dll/hd3d.cpp
+++ b/dll/hd3d.cpp
@@ -33,6 +33,7 @@ typedef HRESULT (WINAPI *CreateAdditionalSwapChain_Type)(void *, D3DPRESENT_PARA
typedef HRESULT (WINAPI *GetDirect3D_Type)(void *, IDirect3D9 **);
typedef HRESULT (WINAPI *GetViewport_Type)(void *, D3DVIEWPORT9 *);
typedef HRESULT (WINAPI *SetViewport_Type)(void *, D3DVIEWPORT9 *);
+typedef void (WINAPI *SetGammaRamp_Type)(UINT, DWORD, D3DGAMMARAMP *);
typedef HRESULT (WINAPI *D3D10CreateDevice_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, ID3D10Device **);
typedef HRESULT (WINAPI *D3D10CreateDeviceAndSwapChain_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device **);
@@ -67,6 +68,7 @@ HRESULT WINAPI extGetRenderState(void *, D3DRENDERSTATETYPE, DWORD);
HRESULT WINAPI extCreateAdditionalSwapChain(void *, D3DPRESENT_PARAMETERS *, IDirect3DSwapChain9 **);
HRESULT WINAPI extGetViewport(void *, D3DVIEWPORT9 *);
HRESULT WINAPI extSetViewport(void *, D3DVIEWPORT9 *);
+void WINAPI extSetGammaRamp(UINT, DWORD, D3DGAMMARAMP *);
HRESULT WINAPI extD3D10CreateDevice(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, ID3D10Device **);
HRESULT WINAPI extD3D10CreateDeviceAndSwapChain(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device **);
@@ -103,6 +105,7 @@ GetRenderState_Type pGetRenderState = 0;
CreateAdditionalSwapChain_Type pCreateAdditionalSwapChain = 0;
GetViewport_Type pGetViewport = 0;
SetViewport_Type pSetViewport = 0;
+SetGammaRamp_Type pSetGammaRamp = 0;
D3D10CreateDevice_Type pD3D10CreateDevice = 0;
D3D10CreateDeviceAndSwapChain_Type pD3D10CreateDeviceAndSwapChain = 0;
@@ -573,16 +576,33 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,
if(dxw.dwFlags3 & FIXD3DFRAME){
char ClassName[81];
+ RECT workarea;
GetClassName(dxw.GethWnd(), ClassName, 80);
+ (*pGetClientRect)(dxw.GethWnd(), &workarea);
+ if ((dxw.dwFlags2 & KEEPASPECTRATIO) && (dxw.Coordinates == DXW_DESKTOP_WORKAREA)) {
+ int w, h, b; // width, height and border
+ w = workarea.right - workarea.left;
+ h = workarea.bottom - workarea.top;
+ if ((w * 600) > (h * 800)){
+ b = (w - (h * 800 / 600))/2;
+ workarea.left += b;
+ workarea.right -= b;
+ }
+ else {
+ b = (h - (w * 600 / 800))/2;
+ workarea.top += b;
+ workarea.bottom -= b;
+ }
+ }
hfocuswindow=(*pCreateWindowExA)(
0, ClassName, "child",
WS_CHILD|WS_VISIBLE,
//GetSystemMetrics(SM_CXSIZEFRAME), GetSystemMetrics(SM_CYSIZEFRAME)+GetSystemMetrics(SM_CYCAPTION),
- 0, 0,
- dxw.GetScreenWidth(), dxw.GetScreenHeight(), dxw.GethWnd(),
- NULL, NULL, NULL);
+ workarea.left, workarea.top, workarea.right-workarea.left, workarea.bottom-workarea.top,
+ dxw.GethWnd(), NULL, NULL, NULL);
if (hfocuswindow)
- OutTraceD("CreateDevice: updated hfocuswindow=%x\n", hfocuswindow, GetLastError());
+ OutTraceD("CreateDevice: updated hfocuswindow=%x pos=(%d,%d) size=(%d,%d)\n",
+ hfocuswindow, workarea.left, workarea.top, workarea.right-workarea.left, workarea.bottom-workarea.top);
else
OutTraceD("CreateDevice: CreateWindowEx ERROR err=%d\n", GetLastError());
dxw.SethWnd(hfocuswindow, dxw.GethWnd());
@@ -640,7 +660,7 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,
}
OutTraceD("SUCCESS! device=%x\n", *ppd3dd);
- if(dwD3DVersion == 8){
+ if(dwD3DVersion == 8){
void *pReset;
pReset=NULL; // to avoid assert condition
SetHook((void *)(**(DWORD **)ppd3dd + 0), extQueryInterfaceDev8, (void **)&pQueryInterfaceDev8, "QueryInterface(D8)");
@@ -649,9 +669,10 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,
SetHook((void *)(**(DWORD **)ppd3dd + 52), extCreateAdditionalSwapChain, (void **)&pCreateAdditionalSwapChain, "CreateAdditionalSwapChain(D8)");
SetHook((void *)(**(DWORD **)ppd3dd + 56), extReset, (void **)&pReset, "Reset(D8)");
SetHook((void *)(**(DWORD **)ppd3dd + 60), extPresent, (void **)&pPresent, "Present(D8)");
+ SetHook((void *)(**(DWORD **)ppd3dd + 72), extSetGammaRamp, (void **)&pSetGammaRamp, "SetGammaRamp(D8)");
if(dxw.dwFlags2 & WIREFRAME){
- SetHook((void *)(**(DWORD **)ppd3dd + 200), extSetRenderState, (void **)&pSetRenderState, "SetRenderState(D9)");
- SetHook((void *)(**(DWORD **)ppd3dd + 204), extGetRenderState, (void **)&pGetRenderState, "GetRenderState(D9)");
+ SetHook((void *)(**(DWORD **)ppd3dd + 200), extSetRenderState, (void **)&pSetRenderState, "SetRenderState(D8)");
+ SetHook((void *)(**(DWORD **)ppd3dd + 204), extGetRenderState, (void **)&pGetRenderState, "GetRenderState(D8)");
(*pSetRenderState)((void *)*ppd3dd, D3DRS_FILLMODE, D3DFILL_WIREFRAME);
}
}
@@ -664,6 +685,7 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,
SetHook((void *)(**(DWORD **)ppd3dd + 52), extCreateAdditionalSwapChain, (void **)&pCreateAdditionalSwapChain, "CreateAdditionalSwapChain(D9)");
SetHook((void *)(**(DWORD **)ppd3dd + 64), extReset, (void **)&pReset, "Reset(D9)");
SetHook((void *)(**(DWORD **)ppd3dd + 68), extPresent, (void **)&pPresent, "Present(D9)");
+ SetHook((void *)(**(DWORD **)ppd3dd + 84), extSetGammaRamp, (void **)&pSetGammaRamp, "SetGammaRamp(D9)");
//SetHook((void *)(**(DWORD **)ppd3dd +188), extSetViewport, (void **)&pSetViewport, "SetViewport(D9)");
//SetHook((void *)(**(DWORD **)ppd3dd +192), extGetViewport, (void **)&pGetViewport, "GetViewport(D9)");
if(dxw.dwFlags2 & WIREFRAME){
@@ -748,6 +770,7 @@ HRESULT WINAPI extCreateDeviceEx(void *lpd3d, UINT adapter, D3DDEVTYPE devicetyp
SetHook((void *)(**(DWORD **)ppd3dd + 52), extCreateAdditionalSwapChain, (void **)&pCreateAdditionalSwapChain, "CreateAdditionalSwapChain(D9)");
SetHook((void *)(**(DWORD **)ppd3dd + 64), extReset, (void **)&pReset, "Reset(D9)");
SetHook((void *)(**(DWORD **)ppd3dd + 68), extPresent, (void **)&pPresent, "Present(D9)");
+ SetHook((void *)(**(DWORD **)ppd3dd + 84), extSetGammaRamp, (void **)&pSetGammaRamp, "SetGammaRamp(D9)");
//SetHook((void *)(**(DWORD **)ppd3dd +188), extSetViewport, (void **)&pSetViewport, "SetViewport(D9)");
//SetHook((void *)(**(DWORD **)ppd3dd +192), extGetViewport, (void **)&pGetViewport, "GetViewport(D9)");
if(dxw.dwFlags2 & WIREFRAME){
@@ -1072,3 +1095,10 @@ HRESULT WINAPI extCheckFullScreen(void)
OutTraceD("CheckFullScreen\n");
return 0;
}
+
+void WINAPI extSetGammaRamp(UINT iSwapChain, DWORD Flags, D3DGAMMARAMP *pRamp)
+{
+ OutTraceD("SetGammaRamp: SwapChain=%d flags=%x\n", iSwapChain, Flags);
+ if (dxw.dwFlags2 & DISABLEGAMMARAMP) return;
+ (*pSetGammaRamp)(iSwapChain, Flags, pRamp);
+}
diff --git a/dll/hddproxy.cpp b/dll/hddproxy.cpp
index 75fef85..d0ddd61 100644
--- a/dll/hddproxy.cpp
+++ b/dll/hddproxy.cpp
@@ -1443,7 +1443,7 @@ HRESULT WINAPI extGetPixelFormatProxy(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT
OutTraceP("GetPixelFormat(S): ERROR res=%x(%s)\n", res, ExplainDDError(res));
else
OutTraceP("GetPixelFormat(S): Flags=%x(%s) FourCC=%x BitCount=%d RGBA=(%x,%x,%x,%x)\n",
- p->dwFlags, ExplainPixelFlags(p->dwFlags), p->dwFourCC, p->dwRGBBitCount,
+ p->dwFlags, ExplainPixelFormatFlags(p->dwFlags), p->dwFourCC, p->dwRGBBitCount,
p->dwRBitMask, p->dwGBitMask, p->dwBBitMask, p->dwRGBAlphaBitMask );
return res;
}
diff --git a/dll/hddraw.cpp b/dll/hddraw.cpp
index 8ae86b0..61f1991 100644
--- a/dll/hddraw.cpp
+++ b/dll/hddraw.cpp
@@ -286,6 +286,75 @@ static void DumpSurfaceAttributes(LPDDSURFACEDESC lpddsd, char *label, int line)
LogSurfaceAttributes(lpddsd, label, line);
}
+#define CAPSHASHSIZE 100
+
+typedef struct {
+ LPDIRECTDRAWSURFACE lpdds;
+ DWORD Flags;
+ DWORD Caps;
+ DDPIXELFORMAT PixelFormat;
+} CapsHash_Type;
+static CapsHash_Type CapsHash[CAPSHASHSIZE];
+
+static void PushCaps(LPDDSURFACEDESC2 lpddsd, LPDIRECTDRAWSURFACE lpdds)
+{
+ static BOOL DoFirst = TRUE;
+ int i;
+ if (DoFirst) { // initialize
+ memset(CapsHash, 0, sizeof(CapsHash));
+ DoFirst = FALSE;
+ }
+ if(IsDebug){
+ OutTrace("PushCaps: lpdds=%x dwFlags=%x dwCaps=%x", lpdds, lpddsd->dwFlags, lpddsd->ddsCaps.dwCaps);
+ if (lpddsd->dwFlags & DDSD_PIXELFORMAT) OutTrace(" PF.dwFlags=%x PF.dwFourCC=%x PF.dwRGBBitCount=%x RGBA=(%x,%x,%x,%x)",
+ lpddsd->ddpfPixelFormat.dwFlags, lpddsd->ddpfPixelFormat.dwFourCC, lpddsd->ddpfPixelFormat.dwRGBBitCount,
+ lpddsd->ddpfPixelFormat.dwRBitMask, lpddsd->ddpfPixelFormat.dwGBitMask, lpddsd->ddpfPixelFormat.dwBBitMask, lpddsd->ddpfPixelFormat.dwRGBAlphaBitMask);
+ OutTrace("\n");
+ }
+ i = (DWORD)lpdds % CAPSHASHSIZE;
+ if(CapsHash[i].lpdds && (CapsHash[i].lpdds != lpdds)) {
+ char sMsg[80];
+ sprintf(sMsg, "PushCaps CONFLICT %x:%x\n", lpdds, CapsHash[i].lpdds);
+ OutTraceE(sMsg);
+ if (IsAssertEnabled) MessageBox(0, sMsg, "PushCaps", MB_OK | MB_ICONEXCLAMATION);
+ return;
+ }
+ CapsHash[i].lpdds = lpdds;
+ CapsHash[i].Flags = lpddsd->dwFlags;
+ CapsHash[i].Caps = lpddsd->ddsCaps.dwCaps;
+ memcpy((void *)&CapsHash[i].PixelFormat, &lpddsd->ddpfPixelFormat, sizeof(DDPIXELFORMAT));
+ //CapsHash[i].PixelFormat.dwFlags = lpddsd->ddpfPixelFormat.dwFlags;
+}
+
+static int PopCaps(LPDDSURFACEDESC2 lpddsd, LPDIRECTDRAWSURFACE lpdds)
+{
+ int i;
+ //DWORD Flags;
+ i = (DWORD)lpdds % 100;
+ if(lpdds != CapsHash[i].lpdds){
+ char sMsg[80];
+ sprintf(sMsg, "PopCaps MISMATCH %x:%x\n", lpdds, CapsHash[i].lpdds);
+ OutTraceE(sMsg);
+ if (IsAssertEnabled) MessageBox(0, sMsg, "PopCaps", MB_OK | MB_ICONEXCLAMATION);
+ return FALSE;
+ }
+ //Flags = lpddsd->ddpfPixelFormat.dwFlags;
+ if (lpddsd->dwSize > (DWORD)&((LPDDSURFACEDESC2)NULL)->dwFlags) lpddsd->dwFlags = CapsHash[i].Flags;
+ if (lpddsd->dwSize > (DWORD)&((LPDDSURFACEDESC2)NULL)->ddsCaps.dwCaps) lpddsd->ddsCaps.dwCaps = CapsHash[i].Caps;
+ if ((lpddsd->dwFlags & DDSD_PIXELFORMAT) && (lpddsd->dwSize > (DWORD)&((LPDDSURFACEDESC2)NULL)->ddpfPixelFormat))
+ memcpy(&(lpddsd->ddpfPixelFormat), (void *)&CapsHash[i].PixelFormat, sizeof(DDPIXELFORMAT));
+ //lpddsd->ddpfPixelFormat.dwFlags = Flags;
+
+ if(IsDebug){
+ OutTrace("PopCaps: lpdds=%x dwFlags=%x dwCaps=%x", lpdds, lpddsd->dwFlags, lpddsd->ddsCaps.dwCaps);
+ if (lpddsd->dwFlags & DDSD_PIXELFORMAT) OutTrace(" PF.dwFlags=%x PF.dwFourCC=%x PF.dwRGBBitCount=%x RGBA=(%x,%x,%x,%x)",
+ lpddsd->ddpfPixelFormat.dwFlags, lpddsd->ddpfPixelFormat.dwFourCC, lpddsd->ddpfPixelFormat.dwRGBBitCount,
+ lpddsd->ddpfPixelFormat.dwRBitMask, lpddsd->ddpfPixelFormat.dwGBitMask, lpddsd->ddpfPixelFormat.dwBBitMask, lpddsd->ddpfPixelFormat.dwRGBAlphaBitMask);
+ OutTrace("\n");
+ }
+ return TRUE;
+}
+
/* ------------------------------------------------------------------------------ */
// auxiliary (static) functions for HDC service surfaces stack
/* ------------------------------------------------------------------------------ */
@@ -344,6 +413,14 @@ void mySetPalette(int dwstart, int dwcount, LPPALETTEENTRY lpentries)
OutTraceD("\n");
}
+ if (dxw.dwFlags3 & BLACKWHITE){
+ for(i = 0; i < dwcount; i ++){
+ DWORD grayscale;
+ grayscale = ((DWORD)lpentries[i].peRed + (DWORD)lpentries[i].peGreen + (DWORD)lpentries[i].peBlue) / 3;
+ lpentries[i].peRed = lpentries[i].peGreen = lpentries[i].peBlue = (BYTE)grayscale;
+ }
+ }
+
switch (dxw.ActualPixelFormat.dwRGBBitCount){
case 32:
for(i = 0; i < dwcount; i ++){
@@ -660,9 +737,9 @@ int lpddHookedVersion(LPDIRECTDRAW lpdd)
static void DumpPixFmt(LPDDSURFACEDESC2 lpdd)
{
- OutTraceD("PixFmt: Size=%x Flags=%x FourCC=%x RGBBitCount=%d RGBA BitMask=(%x,%x,%x,%x)\n",
+ OutTraceD("PixFmt: Size=%x Flags=%x(%s) FourCC=%x RGBBitCount=%d RGBA BitMask=(%x,%x,%x,%x)\n",
lpdd->ddpfPixelFormat.dwSize,
- lpdd->ddpfPixelFormat.dwFlags,
+ lpdd->ddpfPixelFormat.dwFlags, ExplainPixelFormatFlags(lpdd->ddpfPixelFormat.dwFlags),
lpdd->ddpfPixelFormat.dwFourCC,
lpdd->ddpfPixelFormat.dwRGBBitCount,
lpdd->ddpfPixelFormat.dwRBitMask,
@@ -1451,6 +1528,10 @@ HRESULT WINAPI extQueryInterfaceS(void *lpdds, REFIID riid, LPVOID *obp)
break;
}
+ if (dxw.dwFlags3 & SAVECAPS) {
+ DDSURFACEDESC2 ddsd;
+ if (PopCaps(&ddsd, (LPDIRECTDRAWSURFACE)lpdds)) PushCaps(&ddsd, (LPDIRECTDRAWSURFACE)*obp);
+ }
return 0;
}
@@ -1634,6 +1715,49 @@ HRESULT WINAPI extSetCooperativeLevel(void *lpdd, HWND hwnd, DWORD dwflags)
return res;
}
+static char *FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd)
+{
+ // experimental part:
+ switch (lpddsd->dwFlags){
+ case DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PITCH:
+ switch (lpddsd->ddsCaps.dwCaps){
+ case DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY:
+ OutTrace("FixSurfaceCaps: null action (Airline Tycoon Evolution)\n");
+ return "null";
+ break;
+ default:
+ break;
+ }
+ case DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT:
+ default:
+ break;
+ }
+
+ if(((lpddsd->dwFlags & (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT)) == (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT)) &&
+ (lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER)){
+ OutTraceB("FixSurfaceCaps: Experimental pixelformat for ZBUFFER case\n");
+ lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; // Evany
+ lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;
+ return "ZBUFFER";
+ }
+ if(((lpddsd->dwFlags & DDSD_WIDTH) && !(lpddsd->dwFlags & DDSD_HEIGHT)) ||
+ (lpddsd->dwFlags & DDSD_ZBUFFERBITDEPTH) ||
+ ((lpddsd->dwFlags & DDSD_PIXELFORMAT) && !(lpddsd->dwFlags & DDSD_PITCH) && !(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE)) || // fix good for "Wargames"
+ ((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) && !(lpddsd->dwFlags & DDSD_PIXELFORMAT)) // fix good for Premier Manager 98
+ ){
+ OutTraceB("FixSurfaceCaps: suppress DDSD_PIXELFORMAT case\n");
+ // don't alter pixel format
+ lpddsd->dwFlags &= ~DDSD_PIXELFORMAT; // Wargames, Warhammer Dark Omen
+ return "(none)";
+ }
+ // adjust pixel format
+ OutTraceB("FixSurfaceCaps: suppress DDSCAPS_VIDEOMEMORY case\n");
+ lpddsd->dwFlags |= DDSD_CAPS | DDSD_PIXELFORMAT;
+ lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;
+ lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN;
+ return SetPixFmt(lpddsd);
+}
+
HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurface, LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd,
LPDIRECTDRAWSURFACE *lplpdds, void *pu)
{
@@ -1716,6 +1840,7 @@ HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurf
OutTraceD("CreateSurface: created PRIMARY DDSPrim=%x\n", lpDDSPrim);
dxw.MarkPrimarySurface(*lplpdds);
HookDDSurfacePrim(lplpdds, dxversion);
+ //if (dxw.dwFlags3 & SAVECAPS) PushCaps(&ddsd, lpDDSPrim); handled outside ....
if (BBCount){
// create BackBuffer surface
@@ -1734,7 +1859,7 @@ HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurf
if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd);
return res;
}
- //ddsd.ddsCaps.dwCaps &= ~DDSCAPS_BACKBUFFER;
+ if (dxw.dwFlags3 & SAVECAPS) PushCaps(&ddsd, lpDDSBack);
OutTraceD("CreateSurface: created BACK DDSBack=%x\n", lpDDSBack);
dxw.UnmarkPrimarySurface(lpDDSBack);
HookDDSurfaceGeneric(&lpDDSBack, dxversion); // added !!!
@@ -1810,25 +1935,10 @@ HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurf
return 0;
}
- if(((ddsd.dwFlags & DDSD_WIDTH) && !(ddsd.dwFlags & DDSD_HEIGHT)) ||
- (ddsd.dwFlags & DDSD_ZBUFFERBITDEPTH) ||
- ((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; // Wargames, Warhammer Dark Omen
- pfmt="(none)";
- }
- else {
- // adjust pixel format
- pfmt="(none)";
- ddsd.dwFlags |= DDSD_CAPS | DDSD_PIXELFORMAT;
- ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;
- ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN;
- pfmt=SetPixFmt(&ddsd);
- }
+ pfmt=FixSurfaceCaps(&ddsd);
DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Emu Generic]" , __LINE__);
+ DumpPixFmt(&ddsd);
//OutTrace("pCreateSurface=%x lpdd=%x &ddsd=%x lplpdds=%x pu=%x\n",pCreateSurface, lpdd, &ddsd, lplpdds, pu);
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu);
if(res){
@@ -1847,7 +1957,8 @@ HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurf
}
if (res) {
OutTraceE("CreateSurface: CreateSurface ERROR res=%x(%s) pfmt=%s at %d\n", res, ExplainDDError(res), pfmt, __LINE__);
- if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd);
+ //if((res==DDERR_INVALIDPIXELFORMAT) || (res && (ddsd.dwFlags & DDSD_PIXELFORMAT))) DumpPixFmt(&ddsd);
+ DumpPixFmt(&ddsd); // why Pandemonium2 fails ???
return res;
}
@@ -2080,6 +2191,7 @@ HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface
LPDIRECTDRAWSURFACE *lplpdds, void *pu)
{
HRESULT res;
+ DDSURFACEDESC2 ddsd;
if(IsTraceD){
// beware: incomplete trace lines - must be line terminated below!
@@ -2094,6 +2206,7 @@ HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface
if (lpddsd->dwFlags & DDSD_CKSRCBLT ) OutTrace(" CKSrcBlt=(%x,%x)", lpddsd->ddckCKSrcBlt.dwColorSpaceLowValue, lpddsd->ddckCKSrcBlt.dwColorSpaceHighValue);
if (lpddsd->dwFlags & DDSD_CKSRCOVERLAY ) OutTrace(" CKSrcOverlay=(%x,%x)", lpddsd->ddckCKSrcOverlay.dwColorSpaceLowValue, lpddsd->ddckCKSrcOverlay.dwColorSpaceHighValue);
OutTrace("\n");
+ if (lpddsd->dwFlags & DDSD_PIXELFORMAT) DumpPixFmt(lpddsd);
}
//GHO workaround (needed for WarWind, Rogue Spear):
@@ -2104,12 +2217,15 @@ HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface
}
lpDD = lpdd;
+ if (dxw.dwFlags3 & SAVECAPS) ddsd=*lpddsd;
if (dxw.dwFlags1 & EMULATESURFACE)
res= extCreateSurfaceEmu(dxversion, pCreateSurface, lpdd, lpddsd, lplpdds, pu);
else
res= extCreateSurfaceDir(dxversion, pCreateSurface, lpdd, lpddsd, lplpdds, pu);
+ if (dxw.dwFlags3 & SAVECAPS) PushCaps(&ddsd, *lplpdds);
+
return res;
}
@@ -3264,7 +3380,7 @@ HRESULT WINAPI extGetPixelFormat(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p)
}
else{
OutTraceD("GetPixelFormat: Flags=%x(%s) FourCC=%x BitCount=%d RGBA=(%x,%x,%x,%x)\n",
- p->dwFlags, ExplainPixelFlags(p->dwFlags), p->dwFourCC, p->dwRGBBitCount,
+ p->dwFlags, ExplainPixelFormatFlags(p->dwFlags), p->dwFourCC, p->dwRGBBitCount,
p->dwRBitMask, p->dwGBitMask, p->dwBBitMask, p->dwRGBAlphaBitMask );
}
@@ -3322,10 +3438,10 @@ HRESULT WINAPI extReleaseS(LPDIRECTDRAWSURFACE lpdds)
// if primary, clean primay surface list
if(IsPrim) dxw.UnmarkPrimarySurface(lpdds);
// service surfaces cleanup
- if(lpdds==lpDDSBack) {
- OutTraceD("Release(S): Clearing lpDDSBack pointer\n");
- lpDDSBack=NULL;
- }
+ //if(lpdds==lpDDSBack) { // v2.02.24fixed: to be investigated
+ // OutTraceD("Release(S): Clearing lpDDSBack pointer\n");
+ // lpDDSBack=NULL;
+ //}
if (dxw.dwFlags1 & EMULATESURFACE) {
if(lpdds==lpDDSEmu_Prim) {
OutTraceD("Release(S): Clearing lpDDSEmu_Prim pointer\n");
@@ -3620,8 +3736,9 @@ HRESULT WINAPI extReleaseC(LPDIRECTDRAWCLIPPER lpddClip)
HRESULT WINAPI extGetSurfaceDesc(GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd)
{
HRESULT res;
- BOOL IsPrim;
+ BOOL IsPrim, IsFixed;
IsPrim=dxw.IsAPrimarySurface(lpdds);
+ IsFixed=FALSE;
if (!pGetSurfaceDesc) {
OutTraceE("GetSurfaceDesc: ERROR no hooked function\n");
@@ -3639,6 +3756,7 @@ HRESULT WINAPI extGetSurfaceDesc(GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDR
LogSurfaceAttributes(lpddsd, "GetSurfaceDesc", __LINE__);
if (IsPrim) {
+ IsFixed=TRUE;
// expose original caps
if (dxw.dwFlags1 & EMULATESURFACE) {
lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat;
@@ -3650,16 +3768,25 @@ HRESULT WINAPI extGetSurfaceDesc(GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDR
lpddsd->dwBackBufferCount=dxw.dwBackBufferCount;
lpddsd->dwHeight=dxw.GetScreenHeight();
lpddsd->dwWidth=dxw.GetScreenWidth();
-
- //OutTraceD("GetSurfaceDesc: DEBUG restoring original caps=%x(%s) size=(%dx%d) BackBufferCount=%d\n",
- // lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps),
- // lpddsd->dwWidth=dxw.GetScreenWidth(), lpddsd->dwHeight=dxw.GetScreenHeight(),
- // lpddsd->dwBackBufferCount);
-
- DumpSurfaceAttributes(lpddsd, "GetSurfaceDesc FIXED", __LINE__);
}
- return res;
+ if((dxw.dwFlags1 & EMULATESURFACE) &&
+ (dxw.dwFlags1 & SWITCHVIDEOMEMORY) &&
+ (lpddsd->ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY)){
+ IsFixed=TRUE;
+ lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY;
+ lpddsd->ddsCaps.dwCaps |= DDSCAPS_VIDEOMEMORY;
+ }
+
+ if (dxw.dwFlags3 & SAVECAPS) {
+ if (PopCaps((LPDDSURFACEDESC2)lpddsd, lpdds)) IsFixed=TRUE;
+ if (lpddsd->ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY) lpddsd->ddsCaps.dwCaps |= DDSCAPS_LOCALVIDMEM;
+ }
+
+ lpddsd->ddsCaps.dwCaps |= DDSCAPS_3DDEVICE;
+
+ if(IsFixed) DumpSurfaceAttributes(lpddsd, "GetSurfaceDesc [FIXED]", __LINE__);
+ return DD_OK;
}
// Beware: despite the surface version, some game (The Sims!!!) intentionally uses a different dwSize, so that
diff --git a/dll/syslibs.cpp b/dll/syslibs.cpp
index 1b85d37..3088d7d 100644
--- a/dll/syslibs.cpp
+++ b/dll/syslibs.cpp
@@ -899,49 +899,6 @@ void dxwFixMinMaxInfo(char *ApiName, HWND hwnd, LPARAM lParam)
}
}
-void dxwFixStyle(char *ApiName, HWND hwnd, LPARAM lParam)
-{
- LPSTYLESTRUCT lpSS;
- lpSS = (LPSTYLESTRUCT) lParam;
-
- OutTraceD("%s: new Style=%x(%s)\n",
- ApiName, lpSS->styleNew, ExplainStyle(lpSS->styleNew));
-
- if (dxw.dwFlags1 & FIXWINFRAME){ // set canonical style
- lpSS->styleNew= WS_OVERLAPPEDWINDOW;
- }
- if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value
- lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_STYLE);
- }
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){ // disable maximize settings
- if (lpSS->styleNew & WS_MAXIMIZE){
- OutTraceD("%s: prevent maximize style\n", ApiName);
- lpSS->styleNew &= ~WS_MAXIMIZE;
- }
- }
-}
-
-void dxwFixExStyle(char *ApiName, HWND hwnd, LPARAM lParam)
-{
- LPSTYLESTRUCT lpSS;
- lpSS = (LPSTYLESTRUCT) lParam;
-
- OutTraceD("%s: new ExStyle=%x(%s)\n",
- ApiName, lpSS->styleNew, ExplainExStyle(lpSS->styleNew));
-
- if (dxw.dwFlags1 & FIXWINFRAME){ // set canonical style
- lpSS->styleNew= 0;
- }
- if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value
- lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_EXSTYLE);
- }
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){ // disable maximize settings
- if (lpSS->styleNew & WS_EX_TOPMOST){
- OutTraceD("%s: prevent EXSTYLE topmost style\n", ApiName);
- lpSS->styleNew &= ~WS_EX_TOPMOST;
- }
- }
-}
static LRESULT WINAPI FixWindowProc(char *ApiName, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM *lpParam)
{
@@ -970,10 +927,7 @@ static LRESULT WINAPI FixWindowProc(char *ApiName, HWND hwnd, UINT Msg, WPARAM w
break;
case WM_STYLECHANGING:
case WM_STYLECHANGED:
- if (wParam==GWL_STYLE)
- dxwFixStyle(ApiName, hwnd, lParam);
- else
- dxwFixExStyle(ApiName, hwnd, lParam);
+ dxw.FixStyle(ApiName, hwnd, wParam, lParam);
break;
case WM_DISPLAYCHANGE:
// too late? to be deleted....
@@ -1173,66 +1127,32 @@ LONG WINAPI MyChangeDisplaySettings(char *fname, DEVMODE *lpDevMode, DWORD dwfla
HRESULT res;
// save desired settings first v.2.1.89
- // v2.1.95 protect when lpDevMode is null (closing game... Jedi Outcast
- if(lpDevMode)
+ // v2.1.95 protect when lpDevMode is null (closing game... Jedi Outcast)
+ // v2.2.23 consider new width/height only when dmFields flags are set.
+ if(lpDevMode && (lpDevMode->dmFields & (DM_PELSWIDTH | DM_PELSHEIGHT)))
dxw.SetScreenSize(lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight);
if ((dwflags==0 || dwflags==CDS_FULLSCREEN) && lpDevMode){
-
- // v2.2.21: save desired mode to possible use in EnumDisplaySettings wrapper v2.2.21
- SetDevMode=*lpDevMode;
- pSetDevMode=&SetDevMode;
-
- if (dxw.dwFlags1 & EMULATESURFACE){
+ if (dxw.dwFlags1 & EMULATESURFACE || !(lpDevMode->dmFields & DM_BITSPERPEL)){
OutTraceD("%s: BYPASS res=DISP_CHANGE_SUCCESSFUL\n", fname);
return DISP_CHANGE_SUCCESSFUL;
}
else{
- DEVMODE NewMode, TryMode;
- int i;
- HDC DesktopDC;
-
- // set the proper mode
- NewMode = *lpDevMode;
- NewMode.dmPelsHeight = (*GetSystemMetrics)(SM_CYSCREEN);
- NewMode.dmPelsWidth = (*GetSystemMetrics)(SM_CXSCREEN);
- if (!(NewMode.dmFields & DM_BITSPERPEL)) {
- DesktopDC = GetDC(GetDesktopWindow());
- NewMode.dmBitsPerPel = GetDeviceCaps(DesktopDC, BITSPIXEL) * GetDeviceCaps(DesktopDC, PLANES);
- }
- TryMode.dmSize = sizeof(TryMode);
- OutTraceD("ChangeDisplaySettings: DEBUG looking for size=(%d x %d) bpp=%d\n",
- NewMode.dmPelsWidth, NewMode.dmPelsHeight, NewMode.dmBitsPerPel);
- for(i=0; ;i++){
- if (pEnumDisplaySettings)
- res=(*pEnumDisplaySettings)(NULL, i, &TryMode);
- else
- res=EnumDisplaySettings(NULL, i, &TryMode);
- if(res==0) {
- OutTraceE("%s: ERROR unable to find a matching video mode among %d ones\n", fname, i);
- return DISP_CHANGE_FAILED;
- }
- //OutTraceD("ChangeDisplaySettings: DEBUG index=%d size=(%d x %d) bpp=%x\n",
- // i, TryMode.dmPelsWidth, TryMode.dmPelsHeight, TryMode.dmBitsPerPel);
- if((NewMode.dmBitsPerPel==TryMode.dmBitsPerPel) &&
- (NewMode.dmPelsHeight==TryMode.dmPelsHeight) &&
- (NewMode.dmPelsWidth==TryMode.dmPelsWidth)) break;
-
- //if ((NewMode.dmFields & DM_BITSPERPEL) && (NewMode.dmBitsPerPel!=TryMode.dmBitsPerPel)) continue;
- //if (NewMode.dmPelsHeight!=TryMode.dmPelsHeight) continue;
- //if (NewMode.dmPelsWidth!=TryMode.dmPelsWidth) continue;
- break;
- }
+ DEVMODE NewMode;
if(dwflags==CDS_FULLSCREEN) dwflags=0; // no FULLSCREEN
- res=(*ChangeDisplaySettings)(&TryMode, dwflags);
- OutTraceD("%s: fixed size=(%d x %d) bpp=%d res=%x(%s)\n",
- fname, NewMode.dmPelsWidth, NewMode.dmPelsHeight, NewMode.dmBitsPerPel,
- res, ExplainDisplaySettingsRetcode(res));
+ EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &NewMode);
+ OutTraceD("ChangeDisplaySettings: CURRENT wxh=(%dx%d) BitsPerPel=%d -> %d\n",
+ NewMode.dmPelsWidth, NewMode.dmPelsHeight, NewMode.dmBitsPerPel,
+ lpDevMode->dmBitsPerPel);
+ NewMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
+ NewMode.dmBitsPerPel = lpDevMode->dmBitsPerPel;
+ res=(*pChangeDisplaySettings)(&NewMode, 0);
+ if(res) OutTraceE("ChangeDisplaySettings: ERROR err=%d at %d\n", GetLastError(), __LINE__);
return res;
}
}
else
- return (*ChangeDisplaySettings)(lpDevMode, dwflags);
+ return (*pChangeDisplaySettings)(lpDevMode, dwflags);
}
LONG WINAPI extChangeDisplaySettings(DEVMODE *lpDevMode, DWORD dwflags)
diff --git a/dll/syslibs.cpp.bak b/dll/syslibs.cpp.bak
deleted file mode 100644
index e2eb11a..0000000
--- a/dll/syslibs.cpp.bak
+++ /dev/null
@@ -1,2493 +0,0 @@
-#define _WIN32_WINNT 0x0600
-#define WIN32_LEAN_AND_MEAN
-#include
-#include
-#include
-#include
-#include "dxwnd.h"
-#include "dxwcore.hpp"
-#include "dxhook.h"
-#include "glhook.h"
-#include "msvfwhook.h"
-#include "syslibs.h"
-#include "dxhelper.h"
-#include "hddraw.h"
-#include "hddproxy.h"
-
-#define WINDOWDC 0xFFFFFFFF
-
-extern DWORD PaletteEntries[256];
-extern LPDIRECTDRAW lpDD;
-extern Unlock4_Type pUnlockMethod(LPDIRECTDRAWSURFACE);
-
-extern GetDC_Type pGetDC;
-extern ReleaseDC_Type pReleaseDC;
-
-DEVMODE SetDevMode;
-DEVMODE *pSetDevMode=NULL;
-
-extern HRESULT WINAPI extBlt(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX);
-extern HRESULT WINAPI sBlt(char *, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX, BOOL);
-
-extern DirectDrawEnumerate_Type pDirectDrawEnumerate;
-extern DirectDrawEnumerateEx_Type pDirectDrawEnumerateEx;
-
-extern LRESULT CALLBACK extChildWindowProc(HWND, UINT, WPARAM, LPARAM);
-extern INT_PTR CALLBACK extDialogWindowProc(HWND, UINT, WPARAM, LPARAM);
-
-/* ------------------------------------------------------------------ */
-
-static POINT FixMessagePt(HWND hwnd, POINT point)
-{
- RECT rect;
- static POINT curr;
- curr=point;
-
- if(!(*pScreenToClient)(hwnd, &curr)){
- OutTraceE("ScreenToClient ERROR=%d hwnd=%x at %d\n", GetLastError(), hwnd, __LINE__);
- curr.x = curr.y = 0;
- }
-
- if (!(*pGetClientRect)(hwnd, &rect)) {
- OutTraceE("GetClientRect ERROR=%d hwnd=%x at %d\n", GetLastError(), hwnd, __LINE__);
- curr.x = curr.y = 0;
- }
-
-#ifdef ISDEBUG
- if(IsDebug) OutTrace("FixMessagePt point=(%d,%d) hwnd=%x win pos=(%d,%d) size=(%d,%d)\n",
- point.x, point.y, hwnd, point.x-curr.x, point.y-curr.y, rect.right, rect.bottom);
-#endif
-
- if (curr.x < 0) curr.x=0;
- if (curr.y < 0) curr.y=0;
- if (curr.x > rect.right) curr.x=rect.right;
- if (curr.y > rect.bottom) curr.y=rect.bottom;
- if (rect.right) curr.x = (curr.x * dxw.GetScreenWidth()) / rect.right;
- if (rect.bottom) curr.y = (curr.y * dxw.GetScreenHeight()) / rect.bottom;
-
- return curr;
-}
-
-/* ------------------------------------------------------------------ */
-
-static COLORREF GetMatchingColor(COLORREF crColor)
-{
- int iDistance, iMinDistance;
- int iColorIndex, iMinColorIndex;
- COLORREF PalColor;
-
- iMinDistance=0xFFFFFF;
- iMinColorIndex=0;
-
- for(iColorIndex=0; iColorIndex<256; iColorIndex++){
- int iDist;
- iDistance=0;
-
- PalColor=PaletteEntries[iColorIndex];
- switch(dxw.ActualPixelFormat.dwRGBBitCount){
- case 32:
- PalColor = ((PalColor & 0x00FF0000) >> 16) | (PalColor & 0x0000FF00) | ((PalColor & 0x000000FF) << 16);
- break;
- case 16:
- if(dxw.ActualPixelFormat.dwGBitMask==0x03E0){
- // RGB555 screen settings
- PalColor = ((PalColor & 0x7C00) >> 7) | ((PalColor & 0x03E0) << 6) | ((PalColor & 0x001F) << 19);
- }
- else {
- // RGB565 screen settings
- PalColor = ((PalColor & 0xF800) >> 8) | ((PalColor & 0x07E0) << 5) | ((PalColor & 0x001F) << 19);
- }
- break;
- }
-
- iDist = (crColor & 0x00FF0000) - (PalColor & 0x00FF0000);
- iDist >>= 16;
- if (iDist<0) iDist=-iDist;
- iDist *= iDist;
- iDistance += iDist;
-
- iDist = (crColor & 0x0000FF00) - (PalColor & 0x0000FF00);
- iDist >>= 8;
- if (iDist<0) iDist=-iDist;
- iDist *= iDist;
- iDistance += iDist;
-
- iDist = (crColor & 0x000000FF) - (PalColor & 0x000000FF);
- // iDist >>= 0;
- if (iDist<0) iDist=-iDist;
- iDist *= iDist;
- iDistance += iDist;
-
- if (iDistance < iMinDistance) {
- iMinDistance = iDistance;
- iMinColorIndex = iColorIndex;
- }
-
- if (iMinDistance==0) break; // got the perfect match!
- }
- OutTraceD("GetMatchingColor: color=%x matched with palette[%d]=%x dist=%d\n",
- crColor, iMinColorIndex, PaletteEntries[iMinColorIndex], iDistance);
- PalColor=PaletteEntries[iMinColorIndex];
- switch(dxw.ActualPixelFormat.dwRGBBitCount){
- case 32:
- crColor = ((PalColor & 0x00FF0000) >> 16) | (PalColor & 0x0000FF00) | ((PalColor & 0x000000FF) << 16);
- break;
- case 16:
- if(dxw.ActualPixelFormat.dwGBitMask==0x03E0){
- // RGB555 screen settings
- crColor = ((PalColor & 0x7C00) >> 7) | ((PalColor & 0x03E0) << 6) | ((PalColor & 0x001F) << 19);
- }
- else {
- // RGB565 screen settings
- crColor = ((PalColor & 0xF800) >> 8) | ((PalColor & 0x07E0) << 5) | ((PalColor & 0x001F) << 19);
- }
- break;
- }
- return crColor;
-}
-
-extern void FixWindowFrame(HWND);
-
-// GHO: pro Diablo
-HWND WINAPI extCreateWindowExA(
- DWORD dwExStyle,
- LPCTSTR lpClassName,
- LPCTSTR lpWindowName,
- DWORD dwStyle,
- int x,
- int y,
- int nWidth,
- int nHeight,
- HWND hWndParent,
- HMENU hMenu,
- HINSTANCE hInstance,
- LPVOID lpParam)
-{
- HWND wndh;
- WNDPROC pWindowProc;
- BOOL isValidHandle=TRUE;
-
- OutTraceD("CreateWindowEx: class=\"%s\" wname=\"%s\" pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n",
- lpClassName, lpWindowName, x, y, nWidth, nHeight,
- dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
- if(IsDebug) OutTrace("CreateWindowEx: DEBUG screen=(%d,%d)\n", dxw.GetScreenWidth(), dxw.GetScreenHeight());
-
- // no maximized windows in any case
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){
- OutTraceD("CreateWindowEx: handling PREVENTMAXIMIZE mode\n");
- dwStyle &= ~(WS_MAXIMIZE | WS_POPUP);
- dwExStyle &= ~WS_EX_TOPMOST;
- }
-
- // v2.1.92: fixes size & position for auxiliary big window, often used
- // for intro movies etc. : needed for ......
- // evidently, this was supposed to be a fullscreen window....
- // v2.1.100: fixes for "The Grinch": this game creates a new main window for OpenGL
- // rendering using CW_USEDEFAULT placement and 800x600 size while the previous
- // main win was 640x480 only!
- // v2.02.13: if it's a WS_CHILD window, don't reposition the x,y, placement for BIG win.
- if (
- (
- ((x==0)&&(y==0)) || ((x==CW_USEDEFAULT)&&(y==CW_USEDEFAULT))
- )
- &&
- (((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};
- // update virtual screen size if it has grown
- dxw.SetScreenSize(nWidth, nHeight);
- // inserted some checks here, since the main window could be destroyed
- // or minimized (see "Jedi Outcast") so that you may get a dangerous
- // zero size. In this case, better renew the hWnd assignement and its coordinates.
- do { // fake loop
- isValidHandle = FALSE;
- if (!(*pGetClientRect)(dxw.GethWnd(),&screen)) break;
- if (!(*pClientToScreen)(dxw.GethWnd(),&upleft)) break;
- if (screen.right==0 || screen.bottom==0) break;
- isValidHandle = TRUE;
- } while(FALSE);
- if (isValidHandle){
- if (!(dwStyle & WS_CHILD)){
- x=upleft.x;
- y=upleft.y;
- }
- nWidth=screen.right;
- nHeight=screen.bottom;
- OutTraceD("CreateWindowEx: fixed BIG win pos=(%d,%d) size=(%d,%d)\n", x, y, nWidth, nHeight);
- }
- else {
- // invalid parent coordinates: use initial placement, but leave the size.
- // should also fix the window style and compensate for borders here?
- if (!(dwStyle & WS_CHILD)){
- x=dxw.iPosX;
- y=dxw.iPosY;
- }
- nWidth=dxw.iSizX;
- nHeight=dxw.iSizY;
- OutTraceD("CreateWindowEx: renewed BIG win pos=(%d,%d) size=(%d,%d)\n", x, y, nWidth, nHeight);
- }
- dxw.SetFullScreen(TRUE);
- }
-
- if(!dxw.IsFullScreen()){ // v2.1.63: needed for "Monster Truck Madness"
- wndh= (*pCreateWindowExA)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight,
- hWndParent, hMenu, hInstance, lpParam);
- OutTraceD("CreateWindowEx: windowed mode ret=%x\n", wndh);
- return wndh;
- }
-
- // tested on Gangsters: coordinates must be window-relative!!!
- // Age of Empires....
- if (dwStyle & WS_CHILD){
- 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){
- dxw.MapWindow(&x, &y, &nWidth, &nHeight);
- OutTraceD("CreateWindowEx: fixed WS_EX_CONTROLPARENT pos=(%d,%d) size=(%d,%d)\n",
- x, y, nWidth, nHeight);
- }
-
- 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,
- hWndParent, hMenu, hInstance, lpParam);
- if (wndh==(HWND)NULL){
- OutTraceE("CreateWindowEx: ERROR err=%d Style=%x(%s) ExStyle=%x\n",
- GetLastError(), dwStyle, ExplainStyle(dwStyle), dwExStyle);
- return wndh;
- }
-
- if ((!isValidHandle) && dxw.IsFullScreen()) {
- dxw.SethWnd(wndh);
- extern void AdjustWindowPos(HWND, DWORD, DWORD);
- (*pSetWindowLong)(wndh, GWL_STYLE, (dxw.dwFlags2 & MODALSTYLE) ? 0 : WS_OVERLAPPEDWINDOW);
- (*pSetWindowLong)(wndh, GWL_EXSTYLE, 0);
- OutTraceD("CreateWindow: hwnd=%x, set style=WS_OVERLAPPEDWINDOW extstyle=0\n", wndh);
- AdjustWindowPos(wndh, nWidth, nHeight);
- (*pShowWindow)(wndh, SW_SHOWNORMAL);
- }
-
- if ((dxw.dwFlags1 & FIXWINFRAME) && !(dwStyle & WS_CHILD))
- FixWindowFrame(wndh);
-
- // to do: handle inner child, and leave dialogue & modal child alone!!!
- if (dwStyle & WS_CHILD){
- long res;
- pWindowProc = (WNDPROC)(*pGetWindowLong)(wndh, GWL_WNDPROC);
- OutTraceD("Hooking CHILD wndh=%x WindowProc %x->%x\n", wndh, pWindowProc, extChildWindowProc);
- res=(*pSetWindowLong)(wndh, GWL_WNDPROC, (LONG)extChildWindowProc);
- WhndStackPush(wndh, pWindowProc);
- if(!res) OutTraceE("CreateWindowExA: SetWindowLong ERROR %x\n", GetLastError());
- }
-
- OutTraceD("CreateWindowEx: ret=%x\n", wndh);
- return wndh;
-}
-
-COLORREF WINAPI extSetTextColor(HDC hdc, COLORREF crColor)
-{
- COLORREF res;
-
- if ((dxw.dwFlags1 & EMULATESURFACE) && (dxw.dwFlags1 & HANDLEDC) && (dxw.VirtualPixelFormat.dwRGBBitCount==8))
- crColor=GetMatchingColor(crColor);
-
- res=(*pGDISetTextColor)(hdc, crColor);
- OutTraceD("SetTextColor: color=%x res=%x%s\n", crColor, res, (res==CLR_INVALID)?"(CLR_INVALID)":"");
- return res;
-}
-
-COLORREF WINAPI extSetBkColor(HDC hdc, COLORREF crColor)
-{
- COLORREF res;
-
- if ((dxw.dwFlags1 & EMULATESURFACE) && (dxw.dwFlags1 & HANDLEDC) && (dxw.VirtualPixelFormat.dwRGBBitCount==8))
- crColor=GetMatchingColor(crColor);
-
- res=(*pGDISetBkColor)(hdc, crColor);
- OutTraceD("SetBkColor: color=%x res=%x%s\n", crColor, res, (res==CLR_INVALID)?"(CLR_INVALID)":"");
- return res;
-}
-
-LPRECT lpClipRegion=NULL;
-RECT ClipRegion;
-
-BOOL WINAPI extClipCursor(RECT *lpRectArg)
-{
- // reference: hooking and setting ClipCursor is mandatori in "Emergency: Fighters for Life"
- // where the application expects the cursor to be moved just in a inner rect within the
- // main window surface.
-
- BOOL res;
- RECT *lpRect;
- RECT Rect;
-
- if(IsTraceC){
- if (lpRectArg)
- OutTrace("ClipCursor: rect=(%d,%d)-(%d,%d)\n",
- lpRectArg->left,lpRectArg->top,lpRectArg->right,lpRectArg->bottom);
- else
- OutTrace("ClipCursor: rect=(NULL)\n");
- }
-
- if (!(dxw.dwFlags1 & ENABLECLIPPING)) return 1;
-
- if(lpRectArg){
- Rect=*lpRectArg;
- lpRect=&Rect;
- }
- else
- lpRect=NULL;
-
- if(dxw.dwFlags1 & MODIFYMOUSE){
- // save desired clip region
- if (lpRect) {
- ClipRegion=*lpRectArg;
- lpClipRegion=&ClipRegion;
- }
- else
- lpClipRegion=NULL;
-
- *lpRect=dxw.MapWindowRect(lpRect);
- }
-
- if (pClipCursor) res=(*pClipCursor)(lpRect);
- OutTraceD("ClipCursor: rect=(%d,%d)-(%d,%d) res=%x\n",
- lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, res);
-
- return TRUE;
-}
-
-BOOL WINAPI extGetClipCursor(LPRECT lpRect)
-{
- // v2.1.93: if ENABLECLIPPING, return the saved clip rect coordinates
-
- BOOL ret;
-
- // proxy....
- if (!(dxw.dwFlags1 & ENABLECLIPPING)) {
- ret=(*pGetClipCursor)(lpRect);
- if(IsTraceD){
- if (lpRect)
- OutTrace("ClipCursor: PROXED rect=(%d,%d)-(%d,%d) ret=%d\n",
- lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, ret);
- else
- OutTrace("ClipCursor: PROXED rect=(NULL) ret=%d\n", ret);
- }
- return ret;
- }
-
- if(lpRect){
- if(lpClipRegion)
- *lpRect=ClipRegion;
- else{
- lpRect->top = lpRect->left = 0;
- lpRect->right = dxw.GetScreenWidth();
- lpRect->bottom = dxw.GetScreenHeight();
- }
- OutTraceD("ClipCursor: rect=(%d,%d)-(%d,%d) ret=%d\n",
- lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, TRUE);
- }
-
- return TRUE;
-}
-
-int LastCurPosX, LastCurPosY;
-
-BOOL WINAPI extGetCursorPos(LPPOINT lppoint)
-{
- HRESULT res;
- static int PrevX, PrevY;
- POINT prev;
-
- if(dxw.dwFlags1 & SLOWDOWN) dxw.DoSlow(2);
-
- if (pGetCursorPos) {
- res=(*pGetCursorPos)(lppoint);
- }
- else {
- lppoint->x =0; lppoint->y=0;
- res=1;
- }
-
- prev=*lppoint;
- *lppoint=dxw.ScreenToClient(*lppoint);
- *lppoint=dxw.FixCursorPos(*lppoint);
- GetHookInfo()->CursorX=(short)lppoint->x;
- GetHookInfo()->CursorY=(short)lppoint->y;
- OutTraceC("GetCursorPos: FIXED pos=(%d,%d)->(%d,%d)\n", prev.x, prev.y, lppoint->x, lppoint->y);
-
- return res;
-}
-
-BOOL WINAPI extSetCursorPos(int x, int y)
-{
- BOOL res;
- int PrevX, PrevY;
-
- PrevX=x;
- PrevY=y;
-
- if(dxw.dwFlags2 & KEEPCURSORFIXED) {
- OutTraceC("SetCursorPos: FIXED pos=(%d,%d)\n", x, y);
- LastCurPosX=x;
- LastCurPosY=y;
- return 1;
- }
-
- if(dxw.dwFlags1 & SLOWDOWN) dxw.DoSlow(2);
-
- if(dxw.dwFlags1 & KEEPCURSORWITHIN){
- // Intercept SetCursorPos outside screen boundaries (used as Cursor OFF in some games)
- if ((y<0)||(y>=(int)dxw.GetScreenHeight())||(x<0)||(x>=(int)dxw.GetScreenWidth())) return 1;
- }
-
- if(dxw.dwFlags1 & MODIFYMOUSE){
- POINT cur;
- RECT rect;
-
- // find window metrics
- if (!(*pGetClientRect)(dxw.GethWnd(), &rect)) {
- // report error and ignore ...
- OutTraceE("GetClientRect(%x) ERROR %d at %d\n", dxw.GethWnd(), GetLastError(), __LINE__);
- return 0;
- }
-
- x= x * rect.right / dxw.GetScreenWidth();
- y= y * rect.bottom / dxw.GetScreenHeight();
-
- // check for boundaries (???)
- if (x >= rect.right) x=rect.right-1;
- if (x<0) x=0;
- if (y >= rect.bottom) y=rect.bottom-1;
- if (y<0) y=0;
-
- // make it screen absolute
- cur.x = x;
- cur.y = y;
- if (!(*pClientToScreen)(dxw.GethWnd(), &cur)) {
- OutTraceE("ClientToScreen(%x) ERROR %d at %d\n", dxw.GethWnd(), GetLastError(), __LINE__);
- return 0;
- }
- x = cur.x;
- y = cur.y;
- }
-
- res=0;
- if (pSetCursorPos) res=(*pSetCursorPos)(x,y);
-
- OutTraceC("SetCursorPos: res=%x XY=(%d,%d)->(%d,%d)\n",res, PrevX, PrevY, x, y);
- return res;
-}
-
-BOOL WINAPI extTextOutA(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cchString)
-{
- BOOL res;
- OutTraceD("TextOut: hdc=%x xy=(%d,%d) str=(%d)\"%s\"\n", hdc, nXStart, nYStart, cchString, lpString);
- if (dxw.dwFlags1 & FIXTEXTOUT) {
- POINT anchor;
- anchor.x=nXStart;
- anchor.y=nYStart;
- (*pClientToScreen)(dxw.GethWnd(), &anchor);
- nXStart=anchor.x;
- nYStart=anchor.y;
- }
- res=(*pGDITextOutA)(hdc, nXStart, nYStart, lpString, cchString);
- return res;
-}
-
-BOOL WINAPI extRectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)
-{
- OutTraceD("Rectangle: hdc=%x xy=(%d,%d)-(%d,%d)\n", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
- if (dxw.dwFlags1 & FIXTEXTOUT) {
- POINT anchor;
- anchor.x=nLeftRect;
- anchor.y=nTopRect;
- (*pClientToScreen)(dxw.GethWnd(), &anchor);
- nLeftRect=anchor.x;
- nTopRect=anchor.y;
- anchor.x=nRightRect;
- anchor.y=nBottomRect;
- (*pClientToScreen)(dxw.GethWnd(), &anchor);
- nRightRect=anchor.x;
- nBottomRect=anchor.y;
- }
- return (*pGDIRectangle)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
-}
-
-int WINAPI extFillRect(HDC hdc, const RECT *lprc, HBRUSH hbr)
-{
- 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;
- (*pClientToScreen)(dxw.GethWnd(), &anchor);
- rc.left=anchor.x;
- rc.top=anchor.y;
- anchor.x=rc.right;
- anchor.y=rc.bottom;
- (*pClientToScreen)(dxw.GethWnd(), &anchor);
- rc.right=anchor.x;
- rc.bottom=anchor.y;
- }
- return (*pFillRect)(hdc, &rc, hbr);
-}
-
-HFONT WINAPI extCreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight,
- DWORD fdwItalic, DWORD fdwUnderline, DWORD fdwStrikeOut, DWORD fdwCharSet,
- DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality,
- DWORD fdwPitchAndFamily, LPCTSTR lpszFace)
-{
- OutTraceD("CreateFont: h=%d w=%d face=\"%s\"\n", nHeight, nWidth, lpszFace);
- return (*pGDICreateFont)(nHeight, nWidth, nEscapement, nOrientation, fnWeight,
- fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet,
- fdwOutputPrecision, fdwClipPrecision, NONANTIALIASED_QUALITY,
- fdwPitchAndFamily, lpszFace);
-}
-
-// CreateFontIndirect hook routine to avoid font aliasing that prevents reverse blitting working on palettized surfaces
-
-HFONT WINAPI extCreateFontIndirect(const LOGFONT* lplf)
-{
- LOGFONT lf;
- HFONT retHFont;
- OutTraceD("CreateFontIndirect: h=%d w=%d face=\"%s\"\n", lplf->lfHeight, lplf->lfWidth, lplf->lfFaceName);
- memcpy((char *)&lf, (char *)lplf, sizeof(LOGFONT));
- lf.lfQuality=NONANTIALIASED_QUALITY;
- retHFont=((*pGDICreateFontIndirect)(&lf));
- if(retHFont)
- OutTraceD("CreateFontIndirect: hfont=%x\n", retHFont);
- else
- OutTraceD("CreateFontIndirect: error=%d at %d\n", GetLastError(), __LINE__);
- return retHFont;
-}
-
-BOOL WINAPI extShowWindow(HWND hwnd, int nCmdShow)
-{
- BOOL res;
-
- OutTraceD("ShowWindow: hwnd=%x, CmdShow=%x(%s)\n", hwnd, nCmdShow, ExplainShowCmd(nCmdShow));
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){
- if(nCmdShow==SW_MAXIMIZE){
- OutTraceD("ShowWindow: suppress maximize\n");
- nCmdShow=SW_SHOWNORMAL;
- }
- }
-
- res=pShowWindow(hwnd, nCmdShow);
-
- return res;
-}
-
-LONG WINAPI extGetWindowLong(HWND hwnd, int nIndex)
-{
- LONG res;
-
- res=(*pGetWindowLong)(hwnd, nIndex);
-
- OutTraceD("GetWindowLong: hwnd=%x, Index=%x(%s) res=%x\n", hwnd, nIndex, ExplainSetWindowIndex(nIndex), res);
-
- if(nIndex==GWL_WNDPROC){
- WNDPROC wp;
- wp=WhndGetWindowProc(hwnd);
- OutTraceD("GetWindowLong: remapping WindowProc res=%x -> %x\n", res, (LONG)wp);
- if(wp) res=(LONG)wp; // if not found, don't alter the value.
- }
-
- return res;
-}
-
-LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong)
-{
- LONG res;
-
- OutTraceD("SetWindowLong: hwnd=%x, Index=%x(%s) Val=%x\n",
- hwnd, nIndex, ExplainSetWindowIndex(nIndex), dwNewLong);
-
- //if(!hwnd) hwnd=dxw.GethWnd();
-
- if (dxw.dwFlags1 & LOCKWINSTYLE){
- if(nIndex==GWL_STYLE){
- OutTraceD("SetWindowLong: Lock GWL_STYLE=%x\n", dwNewLong);
- //return 1;
- return (*pGetWindowLong)(hwnd, nIndex);
- }
- if(nIndex==GWL_EXSTYLE){
- OutTraceD("SetWindowLong: Lock GWL_EXSTYLE=%x\n", dwNewLong);
- //return 1;
- return (*pGetWindowLong)(hwnd, nIndex);
- }
- }
-
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){
- if(nIndex==GWL_STYLE){
- OutTraceD("SetWindowLong: GWL_STYLE %x suppress MAXIMIZE\n", dwNewLong);
- dwNewLong |= WS_OVERLAPPEDWINDOW;
- dwNewLong &= ~(WS_DLGFRAME|WS_MAXIMIZE|WS_POPUP|WS_VSCROLL|WS_HSCROLL|WS_CLIPSIBLINGS);
- }
- if(nIndex==GWL_EXSTYLE){
- OutTraceD("SetWindowLong: GWL_EXSTYLE %x suppress TOPMOST\n", dwNewLong);
- dwNewLong = dwNewLong & ~(WS_EX_TOPMOST);
- }
- }
-
- if (dxw.dwFlags1 & FIXWINFRAME){
- if((nIndex==GWL_STYLE) && !(dwNewLong & WS_CHILD)){
- OutTraceD("SetWindowLong: GWL_STYLE %x force OVERLAPPEDWINDOW\n", dwNewLong);
- dwNewLong |= WS_OVERLAPPEDWINDOW;
- dwNewLong &= ~WS_CLIPSIBLINGS;
- }
- }
-
- if (nIndex==GWL_WNDPROC){
- long lres;
- // GPL fix
- if(hwnd==0) {
- hwnd=dxw.GethWnd();
- OutTrace("SetWindowLong: NULL hwnd, FIXING hwnd=%x\n",hwnd);
- }
- // end of GPL fix
- res=(LONG)WhndGetWindowProc(hwnd);
- WhndStackPush(hwnd, (WNDPROC)dwNewLong);
- SetLastError(0);
- lres=(*pSetWindowLong)(hwnd, GWL_WNDPROC, (LONG)extWindowProc);
- if(!lres && GetLastError())OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__);
- }
- else {
- res=(*pSetWindowLong)(hwnd, nIndex, dwNewLong);
- }
-
- OutTraceD("SetWindowLong: hwnd=%x, nIndex=%x, Val=%x, res=%x\n", hwnd, nIndex, dwNewLong, res);
- return res;
-}
-
-BOOL WINAPI extSetWindowPos(HWND hwnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)
-{
- BOOL res;
-
- OutTraceD("SetWindowPos: hwnd=%x%s pos=(%d,%d) dim=(%d,%d) Flags=%x\n",
- hwnd, dxw.IsFullScreen()?"(FULLSCREEN)":"", X, Y, cx, cy, uFlags);
-
- if ((hwnd != dxw.GethWnd()) || !dxw.IsFullScreen()){
- // just proxy
- res=(*pSetWindowPos)(hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags);
- if(!res)OutTraceE("SetWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__);
- return res;
- }
-
- if ((dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen()){
- // Note: any attempt to change the window position, no matter where and how, through the
- // SetWindowPos API is causing resizing to the default 1:1 pixed size in Commandos.
- // in such cases, there is incompatibility between LOCKWINPOS and LOCKWINSTYLE.
- return 1;
- }
-
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){
- int UpdFlag =0;
- int MaxX, MaxY;
- MaxX = dxw.iSizX;
- MaxY = dxw.iSizY;
- if (!MaxX) MaxX = dxw.GetScreenWidth();
- if (!MaxY) MaxY = dxw.GetScreenHeight();
- if(cx>MaxX) { cx=MaxX; UpdFlag=1; }
- if(cy>MaxY) { cy=MaxY; UpdFlag=1; }
- if (UpdFlag)
- OutTraceD("SetWindowPos: using max dim=(%d,%d)\n", cx, cy);
- }
-
- // useful??? to be demonstrated....
- // when altering main window in fullscreen mode, fix the coordinates for borders
- DWORD dwCurStyle;
- RECT rect;
- rect.top=rect.left=0;
- rect.right=cx; rect.bottom=cy;
- dwCurStyle=(*pGetWindowLong)(hwnd, GWL_STYLE);
- AdjustWindowRect(&rect, dwCurStyle, FALSE);
- cx=rect.right; cy=rect.bottom;
- OutTraceD("SetWindowPos: main form hwnd=%x fixed size=(%d,%d)\n", hwnd, cx, cy);
-
- res=(*pSetWindowPos)(hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags);
- if(!res)OutTraceE("SetWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__);
- return res;
-}
-
-HDWP WINAPI extDeferWindowPos(HDWP hWinPosInfo, HWND hwnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)
-{
- HDWP res;
-
- OutTraceD("DeferWindowPos: hwnd=%x%s pos=(%d,%d) dim=(%d,%d) Flags=%x\n",
- hwnd, dxw.IsFullScreen()?"(FULLSCREEN)":"", X, Y, cx, cy, uFlags);
-
- if ((hwnd != dxw.GethWnd()) || !dxw.IsFullScreen()){
- // just proxy
- res=(*pGDIDeferWindowPos)(hWinPosInfo, hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags);
- if(!res)OutTraceE("SetWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__);
- return res;
- }
-
- if (dxw.dwFlags1 & LOCKWINPOS){
- return hWinPosInfo;
- }
-
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){
- int UpdFlag =0;
- int MaxX, MaxY;
- MaxX = dxw.iSizX;
- MaxY = dxw.iSizY;
- if (!MaxX) MaxX = dxw.GetScreenWidth();
- if (!MaxY) MaxY = dxw.GetScreenHeight();
- if(cx>MaxX) { cx=MaxX; UpdFlag=1; }
- if(cy>MaxY) { cy=MaxY; UpdFlag=1; }
- if (UpdFlag)
- OutTraceD("SetWindowPos: using max dim=(%d,%d)\n", cx, cy);
- }
-
- // useful??? to be demonstrated....
- // when altering main window in fullscreen mode, fix the coordinates for borders
- DWORD dwCurStyle;
- RECT rect;
- rect.top=rect.left=0;
- rect.right=cx; rect.bottom=cy;
- dwCurStyle=(*pGetWindowLong)(hwnd, GWL_STYLE);
- AdjustWindowRect(&rect, dwCurStyle, FALSE);
- cx=rect.right; cy=rect.bottom;
- OutTraceD("SetWindowPos: main form hwnd=%x fixed size=(%d,%d)\n", hwnd, cx, cy);
-
- res=(*pGDIDeferWindowPos)(hWinPosInfo, hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags);
- if(!res)OutTraceE("DeferWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__);
- return res;
-}
-
-void dxwFixWindowPos(char *ApiName, HWND hwnd, LPARAM lParam)
-{
- LPWINDOWPOS wp;
- int MaxX, MaxY;
- wp = (LPWINDOWPOS)lParam;
- MaxX = dxw.iSizX;
- MaxY = dxw.iSizY;
- if (!MaxX) MaxX = dxw.GetScreenWidth();
- if (!MaxY) MaxY = dxw.GetScreenHeight();
- static int iLastCX, iLastCY;
- static int BorderX=-1;
- static int BorderY=-1;
- int cx, cy;
-
- OutTraceD("%s: GOT hwnd=%x pos=(%d,%d) dim=(%d,%d) Flags=%x(%s)\n",
- ApiName, hwnd, wp->x, wp->y, wp->cx, wp->cy, wp->flags, ExplainWPFlags(wp->flags));
-
- if ((wp->flags & (SWP_NOMOVE|SWP_NOSIZE))==(SWP_NOMOVE|SWP_NOSIZE)) return; //v2.02.13
- //if (wp->flags & (SWP_NOMOVE|SWP_NOSIZE)) return; //v2.02.10
-
- if ((dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen() && (hwnd==dxw.GethWnd())){
- extern void CalculateWindowPos(HWND, DWORD, DWORD, LPWINDOWPOS);
- CalculateWindowPos(hwnd, MaxX, MaxY, wp);
- OutTraceD("%s: LOCK pos=(%d,%d) dim=(%d,%d)\n", ApiName, wp->x, wp->y, wp->cx, wp->cy);
- }
-
- if ((dxw.dwFlags2 & KEEPASPECTRATIO) && dxw.IsFullScreen() && (hwnd==dxw.GethWnd())){
- // note: while keeping aspect ration, resizing from one corner doesn't tell
- // which coordinate is prevalent to the other. We made an arbitrary choice.
- // note: v2.1.93: compensation must refer to the client area, not the wp
- // window dimensions that include the window borders.
- if(BorderX==-1){
- RECT client, full;
- (*pGetClientRect)(hwnd, &client);
- (*pGetWindowRect)(hwnd, &full);
- BorderX= full.right - full.left - client.right;
- BorderY= full.bottom - full.top - client.bottom;
- OutTraceD("%s: KEEPASPECTRATIO window borders=(%d,%d)\n", ApiName, BorderX, BorderY);
- }
- extern LRESULT LastCursorPos;
- switch (LastCursorPos){
- case HTBOTTOM:
- case HTTOP:
- case HTBOTTOMLEFT:
- case HTBOTTOMRIGHT:
- case HTTOPLEFT:
- case HTTOPRIGHT:
- cx = BorderX + ((wp->cy - BorderY) * dxw.GetScreenWidth()) / dxw.GetScreenHeight();
- if(cx!=wp->cx){
- OutTraceD("%s: KEEPASPECTRATIO adjusted cx=%d->%d\n", ApiName, wp->cx, cx);
- wp->cx = cx;
- }
- break;
- case HTLEFT:
- case HTRIGHT:
- cy = BorderY + ((wp->cx - BorderX) * dxw.GetScreenHeight()) / dxw.GetScreenWidth();
- if(cy!=wp->cy){
- OutTraceD("%s: KEEPASPECTRATIO adjusted cy=%d->%d\n", ApiName, wp->cy, cy);
- wp->cy = cy;
- }
- break;
- }
- }
-
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){
- int UpdFlag = 0;
-
- if(wp->cx>MaxX) { wp->cx=MaxX; UpdFlag=1; }
- if(wp->cy>MaxY) { wp->cy=MaxY; UpdFlag=1; }
- if (UpdFlag)
- OutTraceD("%s: SET max dim=(%d,%d)\n", ApiName, wp->cx, wp->cy);
- }
-
- iLastCX= wp->cx;
- iLastCY= wp->cy;
-}
-
-void dxwFixMinMaxInfo(char *ApiName, HWND hwnd, LPARAM lParam)
-{
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){
- LPMINMAXINFO lpmmi;
- lpmmi=(LPMINMAXINFO)lParam;
- OutTraceD("%s: GOT MaxPosition=(%d,%d) MaxSize=(%d,%d)\n", ApiName,
- lpmmi->ptMaxPosition.x, lpmmi->ptMaxPosition.y, lpmmi->ptMaxSize.x, lpmmi->ptMaxSize.y);
- lpmmi->ptMaxPosition.x=0;
- lpmmi->ptMaxPosition.y=0;
- if(pSetDevMode){
- lpmmi->ptMaxSize.x = pSetDevMode->dmPelsWidth;
- lpmmi->ptMaxSize.y = pSetDevMode->dmPelsHeight;
- }
- else{
- lpmmi->ptMaxSize.x = dxw.GetScreenWidth();
- lpmmi->ptMaxSize.y = dxw.GetScreenHeight();
- }
- OutTraceD("%s: SET PREVENTMAXIMIZE MaxPosition=(%d,%d) MaxSize=(%d,%d)\n", ApiName,
- lpmmi->ptMaxPosition.x, lpmmi->ptMaxPosition.y, lpmmi->ptMaxSize.x, lpmmi->ptMaxSize.y);
- }
- // v2.1.75: added logic to fix win coordinates to selected ones.
- // fixes the problem with "Achtung Spitfire", that can't be managed through PREVENTMAXIMIZE flag.
- if (dxw.dwFlags1 & LOCKWINPOS){
- LPMINMAXINFO lpmmi;
- lpmmi=(LPMINMAXINFO)lParam;
- OutTraceD("%s: GOT MaxPosition=(%d,%d) MaxSize=(%d,%d)\n", ApiName,
- lpmmi->ptMaxPosition.x, lpmmi->ptMaxPosition.y, lpmmi->ptMaxSize.x, lpmmi->ptMaxSize.y);
- lpmmi->ptMaxPosition.x=dxw.iPosX;
- lpmmi->ptMaxPosition.y=dxw.iPosY;
- lpmmi->ptMaxSize.x = dxw.iSizX ? dxw.iSizX : dxw.GetScreenWidth();
- lpmmi->ptMaxSize.y = dxw.iSizY ? dxw.iSizY : dxw.GetScreenHeight();
- OutTraceD("%s: SET LOCKWINPOS MaxPosition=(%d,%d) MaxSize=(%d,%d)\n", ApiName,
- lpmmi->ptMaxPosition.x, lpmmi->ptMaxPosition.y, lpmmi->ptMaxSize.x, lpmmi->ptMaxSize.y);
- }
-}
-
-void dxwFixStyle(char *ApiName, HWND hwnd, LPARAM lParam)
-{
- LPSTYLESTRUCT lpSS;
- lpSS = (LPSTYLESTRUCT) lParam;
-
- OutTraceD("%s: new Style=%x(%s)\n",
- ApiName, lpSS->styleNew, ExplainStyle(lpSS->styleNew));
-
- if (dxw.dwFlags1 & FIXWINFRAME){ // set canonical style
- lpSS->styleNew= WS_OVERLAPPEDWINDOW;
- }
- if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value
- lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_STYLE);
- }
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){ // disable maximize settings
- if (lpSS->styleNew & WS_MAXIMIZE){
- OutTraceD("%s: prevent maximize style\n", ApiName);
- lpSS->styleNew &= ~WS_MAXIMIZE;
- }
- }
-}
-
-void dxwFixExStyle(char *ApiName, HWND hwnd, LPARAM lParam)
-{
- LPSTYLESTRUCT lpSS;
- lpSS = (LPSTYLESTRUCT) lParam;
-
- OutTraceD("%s: new ExStyle=%x(%s)\n",
- ApiName, lpSS->styleNew, ExplainExStyle(lpSS->styleNew));
-
- if (dxw.dwFlags1 & FIXWINFRAME){ // set canonical style
- lpSS->styleNew= 0;
- }
- if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value
- lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_EXSTYLE);
- }
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){ // disable maximize settings
- if (lpSS->styleNew & WS_EX_TOPMOST){
- OutTraceD("%s: prevent EXSTYLE topmost style\n", ApiName);
- lpSS->styleNew &= ~WS_EX_TOPMOST;
- }
- }
-}
-
-static LRESULT WINAPI FixWindowProc(char *ApiName, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM *lpParam)
-{
- LPARAM lParam;
-
- lParam=*lpParam;
- OutTraceW("%s: hwnd=%x msg=[0x%x]%s(%x,%x)\n",
- ApiName, hwnd, Msg, ExplainWinMessage(Msg), wParam, lParam);
-
- switch(Msg){
- // attempt to fix Sleepwalker
- //case WM_NCCALCSIZE:
- // if (dxw.dwFlags1 & PREVENTMAXIMIZE)
- // return 0;
- // break;
- case WM_ERASEBKGND:
- OutTraceD("%s: prevent erase background\n", ApiName);
- return 1; // 1=erased
- break; // useless
- case WM_GETMINMAXINFO:
- dxwFixMinMaxInfo(ApiName, hwnd, lParam);
- break;
- case WM_WINDOWPOSCHANGING:
- case WM_WINDOWPOSCHANGED:
- dxwFixWindowPos(ApiName, hwnd, lParam);
- break;
- case WM_STYLECHANGING:
- case WM_STYLECHANGED:
- if (wParam==GWL_STYLE)
- dxwFixStyle(ApiName, hwnd, lParam);
- else
- dxwFixExStyle(ApiName, hwnd, lParam);
- break;
- case WM_DISPLAYCHANGE:
- // too late? to be deleted....
- if ((dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen()) return 0;
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){
- OutTraceD("%s: WM_DISPLAYCHANGE depth=%d size=(%d,%d)\n",
- ApiName, wParam, HIWORD(lParam), LOWORD(lParam));
- return 0;
- }
- break;
- case WM_SIZE:
- if ((dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen()) return 0;
- if (dxw.dwFlags1 & PREVENTMAXIMIZE){
- if ((wParam == SIZE_MAXIMIZED)||(wParam == SIZE_MAXSHOW)){
- OutTraceD("%s: prevent screen SIZE to fullscreen wparam=%d(%s) size=(%d,%d)\n", ApiName,
- wParam, ExplainResizing(wParam), HIWORD(lParam), LOWORD(lParam));
- return 0; // checked
- //lParam = MAKELPARAM(dxw.GetScreenWidth(), dxw.GetScreenHeight());
- //OutTraceD("%s: updated SIZE wparam=%d(%s) size=(%d,%d)\n", ApiName,
- // wParam, ExplainResizing(wParam), HIWORD(lParam), LOWORD(lParam));
- }
- }
- break;
- default:
- break;
- }
-
- // marker to run hooked function
- return(-1);
-}
-
-LRESULT WINAPI extCallWindowProc(WNDPROC lpPrevWndFunc, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
-{
- HRESULT res;
-
- res=FixWindowProc("CallWindowProc", hwnd, Msg, wParam, &lParam);
-
- if (res==(HRESULT)-1)
- return (*pCallWindowProc)(lpPrevWndFunc, hwnd, Msg, wParam, lParam);
- else
- return res;
-}
-
-LRESULT WINAPI extDefWindowProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
-{
- HRESULT res;
-
- res=FixWindowProc("DefWindowProc", hwnd, Msg, wParam, &lParam);
-
- if (res==(HRESULT)-1)
- return (*pDefWindowProc)(hwnd, Msg, wParam, lParam);
- else
- return res;
-}
-
-int WINAPI extGetDeviceCaps(HDC hdc, int nindex)
-{
- DWORD res;
-
- res = (*pGDIGetDeviceCaps)(hdc, nindex);
- OutTraceD("GetDeviceCaps: hdc=%x index=%x(%s) res=%x\n",
- hdc, nindex, ExplainDeviceCaps(nindex), res);
-
- // if you have a bypassed setting, use it first!
- if(pSetDevMode){
- switch(nindex){
- case BITSPIXEL:
- case COLORRES:
- res = pSetDevMode->dmBitsPerPel;
- OutTraceD("GetDeviceCaps: fix BITSPIXEL/COLORRES cap=%x\n",res);
- return res;
- case HORZRES:
- res = pSetDevMode->dmPelsWidth;
- OutTraceD("GetDeviceCaps: fix HORZRES cap=%d\n", res);
- return res;
- case VERTRES:
- res = pSetDevMode->dmPelsHeight;
- OutTraceD("GetDeviceCaps: fix VERTRES cap=%d\n", res);
- return res;
- }
- }
-
- switch(nindex){
- case VERTRES:
- res= dxw.GetScreenHeight();
- OutTraceD("GetDeviceCaps: fix VERTRES cap=%d\n", res);
- break;
- case HORZRES:
- res= dxw.GetScreenWidth();
- OutTraceD("GetDeviceCaps: fix HORZRES cap=%d\n", res);
- break;
- // WARNING: in no-emu mode, the INIT8BPP and INIT16BPP flags expose capabilities that
- // are NOT implemented and may cause later troubles!
- case RASTERCAPS:
- if(dxw.dwFlags2 & INIT8BPP) {
- res |= RC_PALETTE; // v2.02.12
- OutTraceD("GetDeviceCaps: fix RASTERCAPS setting RC_PALETTE cap=%x\n",res);
- }
- break;
- case BITSPIXEL:
- case COLORRES:
- if(dxw.dwFlags2 & INIT8BPP|INIT16BPP){
- if(dxw.dwFlags2 & INIT8BPP) res = 8;
- if(dxw.dwFlags2 & INIT16BPP) res = 16;
- OutTraceD("GetDeviceCaps: fix BITSPIXEL/COLORRES cap=%d\n",res);
- }
- break;
- }
-
- if(dxw.dwFlags1 & EMULATESURFACE){
- switch(nindex){
- case RASTERCAPS:
- if((dxw.VirtualPixelFormat.dwRGBBitCount==8) || (dxw.dwFlags2 & INIT8BPP)){
- res = RC_PALETTE;
- OutTraceD("GetDeviceCaps: fix RASTERCAPS setting RC_PALETTE cap=%x\n",res);
- }
- break;
- case BITSPIXEL:
- case COLORRES:
- int PrevRes;
- PrevRes=res;
- if(dxw.VirtualPixelFormat.dwRGBBitCount!=0) res = dxw.VirtualPixelFormat.dwRGBBitCount;
- if(dxw.dwFlags2 & INIT8BPP) res = 8;
- if(dxw.dwFlags2 & INIT16BPP) res = 16;
- if(PrevRes != res) OutTraceD("GetDeviceCaps: fix BITSPIXEL/COLORRES cap=%d\n",res);
- break;
- case SIZEPALETTE:
- res = 256;
- OutTraceD("GetDeviceCaps: fix SIZEPALETTE cap=%x\n",res);
- break;
- case NUMRESERVED:
- res = 0;
- OutTraceD("GetDeviceCaps: fix NUMRESERVED cap=%x\n",res);
- break;
- }
- }
- return res;
-}
-
-int WINAPI extGetSystemMetrics(int nindex)
-{
- HRESULT res;
-
- res=(*pGetSystemMetrics)(nindex);
- OutTraceD("GetSystemMetrics: index=%x(%s), res=%d\n", nindex, ExplainsSystemMetrics(nindex), res);
-
- // if you have a bypassed setting, use it first!
- if(pSetDevMode){
- switch(nindex){
- case SM_CXFULLSCREEN:
- case SM_CXSCREEN:
- res = pSetDevMode->dmPelsWidth;
- OutTraceD("GetDeviceCaps: fix HORZRES cap=%d\n", res);
- return res;
- case SM_CYFULLSCREEN:
- case SM_CYSCREEN:
- res = pSetDevMode->dmPelsHeight;
- OutTraceD("GetDeviceCaps: fix VERTRES cap=%d\n", res);
- return res;
- }
- }
-
- switch(nindex){
- case SM_CXFULLSCREEN:
- case SM_CXSCREEN:
- res= dxw.GetScreenWidth();
- OutTraceD("GetSystemMetrics: fix SM_CXSCREEN=%d\n", res);
- break;
- case SM_CYFULLSCREEN:
- case SM_CYSCREEN:
- res= dxw.GetScreenHeight();
- OutTraceD("GetSystemMetrics: fix SM_CYSCREEN=%d\n", res);
- break;
- case SM_CMONITORS:
- if((dxw.dwFlags2 & HIDEMULTIMONITOR) && res>1) {
- res=1;
- OutTraceD("GetSystemMetrics: fix SM_CMONITORS=%d\n", res);
- }
- break;
- }
-
- return res;
-}
-
-BOOL WINAPI extScaleWindowExtEx(HDC hdc, int Xnum, int Xdenom, int Ynum, int Ydenom, LPSIZE lpSize)
-{
- OutTraceD("ScaleWindowExtEx: hdc=%x num=(%d,%d) denom=(%d,%d) lpSize=%d\n",
- hdc, Xnum, Ynum, Xdenom, Ydenom, lpSize);
-
- if ((dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen()) return 1;
-
- return (*pGDIScaleWindowExtEx)(hdc, Xnum, Xdenom, Ynum, Ydenom, lpSize);
-}
-
-LONG WINAPI MyChangeDisplaySettings(char *fname, DEVMODE *lpDevMode, DWORD dwflags)
-{
- HRESULT res;
-
- // save desired settings first v.2.1.89
- // v2.1.95 protect when lpDevMode is null (closing game... Jedi Outcast
- if(lpDevMode)
- dxw.SetScreenSize(lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight);
-
- if ((dwflags==0 || dwflags==CDS_FULLSCREEN) && lpDevMode){
-
- // v2.2.21: save desired mode to possible use in EnumDisplaySettings wrapper v2.2.21
- SetDevMode=*lpDevMode;
- pSetDevMode=&SetDevMode;
-
- if (dxw.dwFlags1 & EMULATESURFACE){
- OutTraceD("%s: BYPASS res=DISP_CHANGE_SUCCESSFUL\n", fname);
- return DISP_CHANGE_SUCCESSFUL;
- }
- else{
- DEVMODE NewMode, TryMode;
- int i;
-
- // set the proper mode
- NewMode = *lpDevMode;
- NewMode.dmPelsHeight = (*GetSystemMetrics)(SM_CYSCREEN);
- NewMode.dmPelsWidth = (*GetSystemMetrics)(SM_CXSCREEN);
- TryMode.dmSize = sizeof(TryMode);
- OutTraceD("ChangeDisplaySettings: DEBUG looking for size=(%d x %d) bpp=%d\n",
- NewMode.dmPelsWidth, NewMode.dmPelsHeight, NewMode.dmBitsPerPel);
- for(i=0; ;i++){
- if (pEnumDisplaySettings)
- res=(*pEnumDisplaySettings)(NULL, i, &TryMode);
- else
- res=EnumDisplaySettings(NULL, i, &TryMode);
- if(res==0) {
- OutTraceE("%s: ERROR unable to find a matching video mode among %d ones\n", fname, i);
- return DISP_CHANGE_FAILED;
- }
- //OutTraceD("ChangeDisplaySettings: DEBUG index=%d size=(%d x %d) bpp=%x\n",
- // i, TryMode.dmPelsWidth, TryMode.dmPelsHeight, TryMode.dmBitsPerPel);
- if((NewMode.dmBitsPerPel==TryMode.dmBitsPerPel) &&
- (NewMode.dmPelsHeight==TryMode.dmPelsHeight) &&
- (NewMode.dmPelsWidth==TryMode.dmPelsWidth)) break;
- }
- if(dwflags==CDS_FULLSCREEN) dwflags=0; // no FULLSCREEN
- res=(*ChangeDisplaySettings)(&TryMode, dwflags);
- OutTraceD("%s: fixed size=(%d x %d) bpp=%d res=%x(%s)\n",
- fname, NewMode.dmPelsWidth, NewMode.dmPelsHeight, NewMode.dmBitsPerPel,
- res, ExplainDisplaySettingsRetcode(res));
- return res;
- }
- }
- else
- return (*ChangeDisplaySettings)(lpDevMode, dwflags);
-}
-
-LONG WINAPI extChangeDisplaySettings(DEVMODE *lpDevMode, DWORD dwflags)
-{
- if(IsTraceD){
- OutTrace("ChangeDisplaySettings: lpDevMode=%x flags=%x", lpDevMode, dwflags);
- if (lpDevMode) OutTrace(" size=(%d x %d) bpp=%x",
- lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel);
- OutTrace("\n");
- }
-
- return MyChangeDisplaySettings("ChangeDisplaySettings", lpDevMode, dwflags);
-}
-
-LONG WINAPI extChangeDisplaySettingsEx(LPCTSTR lpszDeviceName, DEVMODE *lpDevMode, HWND hwnd, DWORD dwflags, LPVOID lParam)
-{
- if(IsTraceD){
- OutTrace("ChangeDisplaySettingsEx: DeviceName=%s lpDevMode=%x flags=%x", lpszDeviceName, lpDevMode, dwflags);
- if (lpDevMode) OutTrace(" size=(%d x %d) bpp=%x",
- lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel);
- OutTrace("\n");
- }
-
- return MyChangeDisplaySettings("ChangeDisplaySettingsEx", lpDevMode, dwflags);
-}
-
-LONG WINAPI extEnumDisplaySettings(LPCTSTR lpszDeviceName, DWORD iModeNum, DEVMODE *lpDevMode)
-{
- OutTraceD("EnumDisplaySettings: Devicename=%s ModeNum=%x\n", lpszDeviceName, iModeNum);
- if(pSetDevMode && iModeNum==ENUM_CURRENT_SETTINGS){
- lpDevMode=pSetDevMode;
- return 1;
- }
- else
- return (*pEnumDisplaySettings)(lpszDeviceName, iModeNum, lpDevMode);
-}
-
-BOOL WINAPI extSetWindowPlacement(const WINDOWPLACEMENT*lpwndpl)
-{
- OutTraceD("SetWindowPlacement: BYPASS\n");
- return 1;
-}
-
-ATOM WINAPI extRegisterClassExA(WNDCLASSEX *lpwcx)
-{
- OutTraceD("RegisterClassEx: PROXED ClassName=%s style=%x(%s)\n",
- lpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style));
- return (*pRegisterClassExA)(lpwcx);
-}
-
-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()){
- *lppoint = dxw.AddCoordinates(*lppoint, dxw.ClientOffset(hwnd));
- OutTraceB("ClientToScreen: FIXED point=(%d,%d)\n", lppoint->x, lppoint->y);
- res=TRUE;
- }
- else {
- res=(*pClientToScreen)(hwnd, lppoint);
- }
- return res;
-}
-
-BOOL WINAPI extScreenToClient(HWND hwnd, LPPOINT lppoint)
-{
- // v2.02.10: fully revised to handle scaled windows
- 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()){
- *lppoint = dxw.SubCoordinates(*lppoint, dxw.ClientOffset(hwnd));
- OutTraceB("ScreenToClient: FIXED point=(%d,%d)\n", lppoint->x, lppoint->y);
- res=TRUE;
- }
- else {
- res=(*pScreenToClient)(hwnd, lppoint);
- }
- return res;
-}
-
-BOOL WINAPI extGetClientRect(HWND hwnd, LPRECT lpRect)
-{
- BOOL ret;
- OutTraceB("GetClientRect: whnd=%x FullScreen=%x\n", hwnd, dxw.IsFullScreen());
-
- if(!lpRect) return 0;
-
- // proxed call
- ret=(*pGetClientRect)(hwnd, lpRect);
- 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;
- 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);
- }
-
- return ret;
-}
-
-int WINAPI extMapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT cPoints)
-{
- // a rarely used API, but responsible for a painful headache: needs hooking for "Commandos 2".
-
- OutTraceD("MapWindowPoints: hWndFrom=%x hWndTo=%x cPoints=%d FullScreen=%x\n",
- hWndFrom, hWndTo, cPoints, dxw.IsFullScreen());
- if(IsDebug){
- UINT pi;
- OutTrace("Points: ");
- for(pi=0; pihwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg,
- lpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF),
- lpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res);
-
- // v2.1.74: skip message fix for WM_CHAR to avoid double typing bug
- switch(lpMsg->message){
- //case WM_CHAR:
- case WM_KEYUP:
- case WM_KEYDOWN:
- return res;
- }
-
- // fix to avoid crash in Warhammer Final Liberation, that evidently intercepts mouse position by
- // peeking & removing messages from window queue and considering the lParam parameter.
- // v2.1.100 - never alter the mlMsg, otherwise the message is duplicated in the queue! Work on a copy of it.
- if(wRemoveMsg){
- static MSG MsgCopy;
- MsgCopy=*lpMsg;
- MsgCopy.pt=FixMessagePt(dxw.GethWnd(), MsgCopy.pt);
- 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;
-}
-
-BOOL WINAPI extGetMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax)
-{
- BOOL res;
- HWND FixedHwnd;
-
- res=(*pGetMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax);
-
- OutTraceW("GetMessage: lpmsg=%x hwnd=%x filter=(%x-%x) msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n",
- lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax,
- lpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF),
- lpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res);
-
- // V2.1.68: processing ALL mouse events, to sync mouse over and mouse click events
- // in "Uprising 2", now perfectly working.
- DWORD Message;
- Message=lpMsg->message & 0xFFFF;
- if((Message <= WM_MOUSELAST) && (Message >= WM_MOUSEFIRST)){
- FixedHwnd=(hwnd)?hwnd:dxw.GethWnd();
- 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;
-}
-
-// intercept GetProcAddress to initialize DirectDraw hook pointers.
-// This is necessary in "The Sims" game, that loads DirectDraw dinamically
-
-
-extern void HookModule(HMODULE, int);
-extern void HookSysLibs(HMODULE);
-
-HMODULE SysLibs[SYSLIBIDX_MAX];
-
-HMODULE WINAPI LoadLibraryExWrapper(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags, char *api)
-{
- HMODULE libhandle;
- int idx;
-
- //if(!strcmp(lpFileName, "d3d9.dll") && GetModuleHandle(lpFileName)) return GetModuleHandle(lpFileName); // attempt to avoid loading same dll twice....
-
- libhandle=(*pLoadLibraryExA)(lpFileName, hFile, dwFlags);
- OutTraceD("%s: FileName=%s hFile=%x Flags=%x(%s) hmodule=%x\n", api, lpFileName, hFile, dwFlags, ExplainLoadLibFlags(dwFlags), libhandle);
- if(!libhandle){
- OutTraceE("%s: ERROR FileName=%s err=%d\n", api, lpFileName, GetLastError());
- return libhandle;
- }
-
- // when loaded with LOAD_LIBRARY_AS_DATAFILE or LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE flags,
- // there's no symbol map, then itěs no possible to hook function calls.
- if(dwFlags & (LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE|LOAD_LIBRARY_AS_DATAFILE)) return libhandle;
-
- idx=dxw.GetDLLIndex((char *)lpFileName);
- if(idx != -1) SysLibs[idx]=libhandle;
- // handle custom OpenGL library
- if(!lstrcmpi(lpFileName,dxw.CustomOpenGLLib)){
- idx=SYSLIBIDX_OPENGL;
- SysLibs[idx]=libhandle;
- }
- //if (idx == SYSLIBIDX_MAX) HookModule(libhandle, 0);
- if (idx == SYSLIBIDX_DIRECT3D9) {
- HookSysLibs(libhandle); // trap D3D9 GetProcAddress calls
- HookDirect3D(libhandle, 9);
- }
- if (idx == -1) HookModule(libhandle, 0);
- return libhandle;
-}
-
-HMODULE WINAPI extLoadLibraryA(LPCTSTR lpFileName)
-{
- return LoadLibraryExWrapper(lpFileName, NULL, 0, "LoadLibraryA");
-}
-
-HMODULE WINAPI extLoadLibraryW(LPCWSTR lpFileName)
-{
- char sFileName[256+1];
- wcstombs_s(NULL, sFileName, lpFileName, 80);
- return LoadLibraryExWrapper(sFileName, NULL, 0, "LoadLibraryW");;
-}
-
-HMODULE WINAPI extLoadLibraryExA(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags)
-{
- return LoadLibraryExWrapper(lpFileName, hFile, dwFlags, "LoadLibraryExA");
-}
-
-HMODULE WINAPI extLoadLibraryExW(LPCWSTR lpFileName, HANDLE hFile, DWORD dwFlags)
-{
- char sFileName[256+1];
- wcstombs_s(NULL, sFileName, lpFileName, 80);
- return LoadLibraryExWrapper(sFileName, hFile, dwFlags, "LoadLibraryExW");;
-}
-
-extern DirectDrawCreate_Type pDirectDrawCreate;
-extern DirectDrawCreateEx_Type pDirectDrawCreateEx;
-extern HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *);
-extern HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *, LPDIRECTDRAW FAR *, REFIID, IUnknown FAR *);
-extern GetProcAddress_Type pGetProcAddress;
-//extern HRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*);
-
-FARPROC WINAPI extGetProcAddress(HMODULE hModule, LPCSTR proc)
-{
- FARPROC ret;
- int idx;
-
- // WARNING: seems to be called with bad LPCSTR value....
- // from MSDN:
- // The function or variable name, or the function's ordinal value.
- // If this parameter is an ordinal value, it must be in the low-order word;
- // the high-order word must be zero.
-
- OutTraceD("GetProcAddress: hModule=%x proc=%s\n", hModule, ProcToString(proc));
-
- for(idx=0; idx%x\n", hwnd, dxw.GethWnd());
- lochwnd=dxw.GethWnd();
- }
- ret=(*pGDIGetDC)(lochwnd);
- if(ret){
- OutTraceD("GDI.GetDC: hwnd=%x ret=%x\n", lochwnd, ret);
- }
- else{
- int err;
- err=GetLastError();
- OutTraceE("GDI.GetDC ERROR: hwnd=%x err=%d at %d\n", lochwnd, err, __LINE__);
- if((err==ERROR_INVALID_WINDOW_HANDLE) && (lochwnd!=hwnd)){
- ret=(*pGDIGetDC)(hwnd);
- if(ret)
- OutTraceD("GDI.GetDC: hwnd=%x ret=%x\n", hwnd, ret);
- else
- OutTraceE("GDI.GetDC ERROR: hwnd=%x err=%d at %d\n", hwnd, GetLastError(), __LINE__);
- }
- }
-
- return ret;
-}
-
-HDC WINAPI extGDIGetWindowDC(HWND hwnd)
-{
- HDC ret;
- HWND lochwnd;
- OutTraceD("GDI.GetWindowDC: hwnd=%x\n", hwnd);
- lochwnd=hwnd;
- if ((hwnd==0) || (hwnd==(*pGetDesktopWindow)())) {
- OutTraceD("GDI.GetWindowDC: desktop remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd());
- lochwnd=dxw.GethWnd();
- }
- ret=(*pGDIGetWindowDC)(lochwnd);
- if(ret){
- OutTraceD("GDI.GetWindowDC: hwnd=%x ret=%x\n", lochwnd, ret);
- }
- else{
- int err;
- err=GetLastError();
- OutTraceE("GDI.GetWindowDC ERROR: hwnd=%x err=%d at %d\n", lochwnd, err, __LINE__);
- if((err==ERROR_INVALID_WINDOW_HANDLE) && (lochwnd!=hwnd)){
- ret=(*pGDIGetWindowDC)(hwnd);
- if(ret)
- OutTraceD("GDI.GetWindowDC: hwnd=%x ret=%x\n", hwnd, ret);
- else
- OutTraceE("GDI.GetWindowDC ERROR: hwnd=%x err=%d at %d\n", hwnd, GetLastError(), __LINE__);
- }
- }
- return ret;
-}
-
-int WINAPI extGDIReleaseDC(HWND hwnd, HDC hDC)
-{
- int res;
-
- OutTraceD("GDI.ReleaseDC: hwnd=%x hdc=%x\n", hwnd, hDC);
- if (hwnd==0) hwnd=dxw.GethWnd();
- res=(*pGDIReleaseDC)(hwnd, hDC);
- if (!res) OutTraceE("GDI.ReleaseDC ERROR: err=%d at %d\n", GetLastError(), __LINE__);
- return(res);
-}
-
-HDC WINAPI extGDICreateDC(LPSTR Driver, LPSTR Device, LPSTR Output, CONST DEVMODE *InitData)
-{
- HDC WinHDC, RetHDC;
- OutTraceD("GDI.CreateDC: Driver=%s Device=%s Output=%s InitData=%x\n",
- Driver?Driver:"(NULL)", Device?Device:"(NULL)", Output?Output:"(NULL)", InitData);
-
- if (!Driver || !strncmp(Driver,"DISPLAY",7)) {
- OutTraceD("GDI.CreateDC: returning window surface DC\n");
- WinHDC=(*pGDIGetDC)(dxw.GethWnd());
- RetHDC=(*pGDICreateCompatibleDC)(WinHDC);
- (*pGDIReleaseDC)(dxw.GethWnd(), WinHDC);
- }
- else{
- RetHDC=(*pGDICreateDC)(Driver, Device, Output, InitData);
- }
- if(RetHDC)
- OutTraceD("GDI.CreateDC: returning HDC=%x\n", RetHDC);
- else
- OutTraceE("GDI.CreateDC ERROR: err=%d at %d\n", GetLastError(), __LINE__);
- return RetHDC;
-}
-
-HDC WINAPI extGDICreateCompatibleDC(HDC hdc)
-{
- HDC RetHdc, SrcHdc;
- extern LPDIRECTDRAWSURFACE lpDDSHDC;
- extern GetDC_Type pGetDC;
- DWORD LastError;
-
- OutTraceD("GDI.CreateCompatibleDC: hdc=%x\n", hdc);
- if(hdc==0){
- SrcHdc=(*pGDIGetDC)(dxw.GethWnd());
- OutTraceD("GDI.CreateCompatibleDC: duplicating win HDC hWnd=%x\n", dxw.GethWnd());
- }
-
- // eliminated error message for errorcode 0.
- SetLastError(0);
- RetHdc=(*pGDICreateCompatibleDC)(hdc);
- LastError=GetLastError();
- if(!LastError)
- OutTraceD("GDI.CreateCompatibleDC: returning HDC=%x\n", RetHdc);
- else
- OutTraceE("GDI.CreateCompatibleDC ERROR: err=%d at %d\n", LastError, __LINE__);
- return RetHdc;
-}
-
-BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop)
-{
- BOOL res;
- extern BOOL isWithinDialog;
-
- OutTraceD("GDI.BitBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d dwRop=%x(%s)\n",
- hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop, ExplainROP(dwRop));
-
- if (dxw.HandleFPS()) return TRUE;
-
- // beware: HDC could refer to screen DC that are written directly on screen, or memory DC that will be scaled to
- // the screen surface later on, on ReleaseDC or ddraw Blit / Flip operation. Scaling of rect coordinates is
- // needed only in the first case, and must be avoided on the second, otherwise the image would be scaled twice!
-
- if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdcDest))){
- int nWDest, nHDest;
- nWDest= nWidth;
- nHDest= nHeight;
- 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);
- }
- else {
- res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
- }
- if(!res) OutTraceE("GDI.BitBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
-
- return res;
-}
-
-BOOL WINAPI extGDIPatBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, DWORD dwRop)
-{
- BOOL res;
-
- OutTraceD("GDI.PatBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d dwRop=%x(%s)\n",
- hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop, ExplainROP(dwRop));
-
- if (dxw.HandleFPS()) return TRUE;
-
- if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdcDest))){
- int nWDest, nHDest;
- dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);
- if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
- res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, dwRop);
- }
- else {
- res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop);
- }
- if(!res) OutTraceE("GDI.PatBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
-
- return res;
-}
-
-BOOL WINAPI extGDIStretchBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight,
- HDC hdcSrc, int nXSrc, int nYSrc, int nWSrc, int nHSrc, DWORD dwRop)
-{
- BOOL res;
-
- OutTraceD("GDI.StretchBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d nWSrc=%d nHSrc=%d dwRop=%x(%s)\n",
- hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop, ExplainROP(dwRop));
-
- if (dxw.HandleFPS()) return TRUE;
-
- // to do: what happend if StretchBlt is applied on screen DC ?
-
- if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
- res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);
- if(!res) OutTraceE("GDI.StretchBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
- return res;
-}
-
-BOOL WINAPI extGDIDeleteDC(HDC hdc)
-{
- BOOL res;
- OutTraceD("GDI.DeleteDC: hdc=%x\n", hdc);
- res=(*pGDIDeleteDC)(hdc);
- if(!res) OutTraceE("GDI.DeleteDC: ERROR err=%d at %d\n", GetLastError(), __LINE__);
- return res;
-}
-
-static HANDLE AutoRefreshThread;
-static DWORD dwThrdId;
-void AutoRefresh(HDC hdc)
-{
- while(1){
- (*pSleep)(10);
- (*pInvalidateRect)(dxw.GethWnd(), 0, FALSE);
- }
-}
-
-int WINAPI extGDISaveDC(HDC hdc)
-{
- int ret;
-
- ret=(*pGDISaveDC)(hdc);
- //ret=1;
- OutTraceD("GDI.SaveDC: hdc=%x ret=%x\n", hdc, ret);
- //AutoRefreshThread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)AutoRefresh, (LPVOID)hdc, 0, &dwThrdId);
- return ret;
-}
-
-BOOL WINAPI extGDIRestoreDC(HDC hdc, int nSavedDC)
-{
- BOOL ret;
-
- ret=(*pGDIRestoreDC)(hdc, nSavedDC);
- //ret=1;
- OutTraceD("GDI.RestoreDC: hdc=%x nSavedDC=%x ret=%x\n", hdc, nSavedDC, ret);
- //TerminateThread(AutoRefreshThread, 0);
- return ret;
-}
-
-/* -------------------------------------------------------------------- */
-// directdraw supported GDI calls
-/* -------------------------------------------------------------------- */
-
-// PrimHDC: DC handle of the selected DirectDraw primary surface. NULL when invalid.
-static HDC PrimHDC=NULL;
-
-HDC WINAPI extDDCreateCompatibleDC(HDC hdc)
-{
- HDC RetHdc, SrcHdc;
- extern GetDC_Type pGetDC;
-
- OutTraceD("GDI.CreateCompatibleDC: hdc=%x\n", hdc);
-
- if(hdc==0 && pGetDC && dxw.IsFullScreen()){
- dxw.SetPrimarySurface();
- (*pGetDC)(dxw.lpDDSPrimHDC,&SrcHdc);
- OutTraceD("GDI.CreateCompatibleDC: duplicating screen HDC lpDDSPrimHDC=%x\n", dxw.lpDDSPrimHDC);
- RetHdc=(*pGDICreateCompatibleDC)(SrcHdc);
- (*pReleaseDC)(dxw.lpDDSPrimHDC,SrcHdc);
- }
- else
- RetHdc=(*pGDICreateCompatibleDC)(hdc);
-
- if(RetHdc)
- OutTraceD("GDI.CreateCompatibleDC: returning HDC=%x\n", RetHdc);
- else
- OutTraceE("GDI.CreateCompatibleDC ERROR: err=%d at %d\n", GetLastError(), __LINE__);
-
- return RetHdc;
-}
-
-BOOL WINAPI extDDDeleteDC(HDC hdc)
-{
- BOOL res;
-
- OutTraceD("GDI.DeleteDC: hdc=%x\n", hdc);
-
- res=(*pGDIDeleteDC)(hdc);
- if(!res) OutTraceE("GDI.DeleteDC: ERROR err=%d at %d\n", GetLastError(), __LINE__);
- return res;
-}
-
-static HDC WINAPI winDDGetDC(HWND hwnd, char *api)
-{
- HDC hdc;
- HRESULT res;
- extern HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE, HDC FAR *);
-
- OutTraceD("%s: hwnd=%x\n", api, hwnd);
-
- dxw.ResetPrimarySurface();
- dxw.SetPrimarySurface();
-
- if(dxw.lpDDSPrimHDC){
- if (PrimHDC){
- OutTraceD("%s: reusing primary hdc\n", api);
- (*pUnlockMethod(dxw.lpDDSPrimHDC))(dxw.lpDDSPrimHDC, NULL);
- hdc=PrimHDC;
- }
- else{
- OutTraceD("%s: get hdc from PRIMARY surface lpdds=%x\n", api, dxw.lpDDSPrimHDC);
- res=extGetDC(dxw.lpDDSPrimHDC,&hdc);
- if(res) {
- OutTraceE("%s: GetDC(%x) ERROR %x(%s) at %d\n", api, dxw.lpDDSPrimHDC, res, ExplainDDError(res), __LINE__);
- if(res==DDERR_DCALREADYCREATED){
- // try recovery....
- (*pReleaseDC)(dxw.lpDDSPrimHDC,NULL);
- res=extGetDC(dxw.lpDDSPrimHDC,&hdc);
- }
- if(res)return 0;
- }
- PrimHDC=hdc;
- }
- }
- else {
- hdc=(*pGDIGetDC)(hwnd ? hwnd : dxw.GethWnd());
- OutTraceD("%s: returning window DC handle hwnd=%x hdc=%x\n", api, hwnd, hdc);
- PrimHDC=NULL;
- }
-
- if(hdc)
- OutTraceD("%s: hwnd=%x hdc=%x\n", api, hwnd, hdc);
- else
- OutTraceE("%s: ERROR err=%d at %d\n", api, GetLastError, __LINE__);
- return(hdc);
-}
-
-HDC WINAPI extDDCreateDC(LPSTR Driver, LPSTR Device, LPSTR Output, CONST DEVMODE *InitData)
-{
- HDC RetHDC;
- OutTraceD("GDI.CreateDC: Driver=%s Device=%s Output=%s InitData=%x\n",
- Driver?Driver:"(NULL)", Device?Device:"(NULL)", Output?Output:"(NULL)", InitData);
-
- if (!Driver || !strncmp(Driver,"DISPLAY",7)) {
- //HDC PrimHDC;
- LPDIRECTDRAWSURFACE lpdds;
- OutTraceD("GDI.CreateDC: returning primary surface DC\n");
- lpdds=dxw.GetPrimarySurface();
- (*pGetDC)(lpdds, &PrimHDC);
- RetHDC=(*pGDICreateCompatibleDC)(PrimHDC);
- (*pReleaseDC)(lpdds, PrimHDC);
- }
- else{
- RetHDC=(*pGDICreateDC)(Driver, Device, Output, InitData);
- }
- if(RetHDC)
- OutTraceD("GDI.CreateDC: returning HDC=%x\n", RetHDC);
- else
- OutTraceE("GDI.CreateDC ERROR: err=%d at %d\n", GetLastError(), __LINE__);
- return RetHDC;
-}
-
-HDC WINAPI extDDGetDC(HWND hwnd)
-{
- HDC ret;
- ret=winDDGetDC(hwnd, "GDI.GetDC");
- return ret;
-}
-
-HDC WINAPI extDDGetWindowDC(HWND hwnd)
-{
- HDC ret;
- ret=winDDGetDC(hwnd, "GDI.GetWindowDC");
- return ret;
-}
-
-int WINAPI extDDReleaseDC(HWND hwnd, HDC hDC)
-{
- int res;
- extern HRESULT WINAPI extReleaseDC(LPDIRECTDRAWSURFACE, HDC);
-
- OutTraceD("GDI.ReleaseDC: hwnd=%x hdc=%x\n", hwnd, hDC);
- res=0;
- if ((hDC == PrimHDC) || (hwnd==0)){
- dxw.SetPrimarySurface();
- OutTraceD("GDI.ReleaseDC: refreshing primary surface lpdds=%x\n",dxw.lpDDSPrimHDC);
- if(!dxw.lpDDSPrimHDC) return 0;
- extReleaseDC(dxw.lpDDSPrimHDC, hDC);
- PrimHDC=NULL;
- res=1; // 1 = OK
- }
- else {
- res=(*pGDIReleaseDC)(hwnd, hDC);
- if (!res) OutTraceE("GDI.ReleaseDC: ERROR err=%d at %d\n", GetLastError(), __LINE__);
- }
- return(res);
-}
-
-BOOL WINAPI extDDBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop)
-{
- BOOL ret;
- HRESULT res;
- extern HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE, HDC FAR *);
-
- OutTraceD("GDI.BitBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d dwRop=%x(%s)\n",
- hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop, ExplainROP(dwRop));
-
- ret=1; // OK
-
- if(hdcDest==0) hdcDest=PrimHDC;
- if(hdcDest==0) {
- dxw.ResetPrimarySurface();
- dxw.SetPrimarySurface();
- res=extGetDC(dxw.lpDDSPrimHDC, &PrimHDC);
- hdcDest=PrimHDC;
- }
-
- res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
- if(!res) OutTraceE("GDI.BitBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
-
- res=(*pGDIBitBlt)(NULL, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
-
- if(!res) ret=0;
- return ret;
-}
-
-BOOL WINAPI extDDStretchBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight,
- HDC hdcSrc, int nXSrc, int nYSrc, int nWSrc, int nHSrc, DWORD dwRop)
-{
- BOOL ret;
- HRESULT res;
- RECT ClientRect;
-
- OutTraceD("GDI.StretchBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d nWSrc=%x nHSrc=%x dwRop=%x\n",
- hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);
-
- if(hdcDest != hdcSrc){
- (*pGetClientRect)(dxw.GethWnd(),&ClientRect);
- ret=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
- if(!ret) {
- OutTraceE("GDI.StretchBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
- return ret;
- }
- }
- dxw.SetPrimarySurface();
- OutTraceD("GDI.StretchBlt: refreshing primary surface lpdds=%x\n",dxw.lpDDSPrimHDC);
- sBlt("GDI.StretchBlt", dxw.lpDDSPrimHDC, NULL, dxw.lpDDSPrimHDC, NULL, 0, NULL, 0);
- res=(*pUnlockMethod(dxw.lpDDSPrimHDC))(dxw.lpDDSPrimHDC, NULL);
- return ret;
-}
-
-HDC WINAPI extBeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint)
-{
- HDC hdc;
- extern HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE, HDC FAR *);
-
- // proxy part ...
- OutTraceD("GDI.BeginPaint: hwnd=%x lpPaint=%x FullScreen=%x\n", hwnd, lpPaint, dxw.IsFullScreen());
- hdc=(*pBeginPaint)(hwnd, lpPaint);
-
- // if not in fullscreen mode, that's all!
- if(!dxw.IsFullScreen()) return hdc;
-
- // on MAPGDITOPRIMARY, return the PrimHDC handle instead of the window DC
- if(dxw.dwFlags1 & MAPGDITOPRIMARY) {
- if(pGetDC && dxw.lpDDSPrimHDC){
- extGetDC(dxw.lpDDSPrimHDC,&PrimHDC);
- OutTraceD("GDI.BeginPaint: redirect hdc=%x -> PrimHDC=%x\n", hdc, PrimHDC);
- hdc=PrimHDC;
- }
- else {
- OutTraceD("GDI.BeginPaint: hdc=%x\n", hdc);
- }
- }
-
- // on CLIENTREMAPPING, resize the paint area to virtual screen size
- if(dxw.dwFlags1 & CLIENTREMAPPING){
- lpPaint->rcPaint.top=0;
- lpPaint->rcPaint.left=0;
- lpPaint->rcPaint.right=dxw.GetScreenWidth();
- lpPaint->rcPaint.bottom=dxw.GetScreenHeight();
- }
-
- return hdc;
-}
-
-BOOL WINAPI extEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint)
-{
- BOOL ret;
- HRESULT WINAPI extReleaseDC(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc);
-
- // proxy part ...
- OutTraceD("GDI.EndPaint: hwnd=%x lpPaint=%x\n", hwnd, lpPaint);
- ret=(*pEndPaint)(hwnd, lpPaint);
- OutTraceD("GDI.EndPaint: hwnd=%x ret=%x\n", hwnd, ret);
- if(!ret) OutTraceE("GDI.EndPaint ERROR: err=%d at %d\n", GetLastError(), __LINE__);
-
- // if not in fullscreen mode, that's all!
- if(!dxw.IsFullScreen()) return ret;
-
- // v2.02.09: on MAPGDITOPRIMARY, release the PrimHDC handle
- if(dxw.dwFlags1 & MAPGDITOPRIMARY) {
- if(pReleaseDC && dxw.lpDDSPrimHDC){
- extReleaseDC(dxw.lpDDSPrimHDC, PrimHDC);
- OutTraceD("GDI.EndPaint: released hdc=%x\n", PrimHDC);
- }
- }
-
- return ret;
-}
-
-/* --------------------------------------------------------------------------- */
-// C&C Tiberian Sun: mixes DirectDraw with GDI Dialogues.
-// To make them visible, the lpDialog call had to be hooked to insert a periodic
-// InvalidateRect call to make GDI appear on screen
-/* --------------------------------------------------------------------------- */
-
-BOOL __cdecl TraceChildWin(HWND hwnd, LPARAM lParam)
-{
- POINT pos={0,0};
- RECT child;
- (*pGetClientRect)(hwnd, &child);
- (*pClientToScreen)(hwnd,&pos);
- OutTraceD("Father hwnd=%x has child=%x pos=(%d,%d) size=(%d,%d)\n",
- HWND(lParam), hwnd, pos.x, pos.y, child.right, child.bottom);
- return TRUE;
-}
-
-BOOL isWithinDialog=FALSE;
-
-HWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit)
-{
- HWND RetHWND;
- isWithinDialog=TRUE;
- OutTraceD("CreateDialogIndirectParam: hInstance=%x lpTemplate=%s hWndParent=%x lpDialogFunc=%x lParamInit=%x\n",
- hInstance, "tbd", hWndParent, lpDialogFunc, lParamInit);
- if(hWndParent==NULL) hWndParent=dxw.GethWnd();
- RetHWND=(*pCreateDialogIndirectParam)(hInstance, lpTemplate, hWndParent, lpDialogFunc, lParamInit);
-
- WhndStackPush(RetHWND, (WNDPROC)lpDialogFunc);
- if(!(*pSetWindowLong)(RetHWND, DWL_DLGPROC, (LONG)extDialogWindowProc))
- OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__);
-
- OutTraceD("CreateDialogIndirectParam: hwnd=%x\n", RetHWND);
- isWithinDialog=FALSE;
- //if (IsDebug) EnumChildWindows(RetHWND, (WNDENUMPROC)TraceChildWin, (LPARAM)RetHWND);
- return RetHWND;
-}
-
-HWND WINAPI extCreateDialogParam(HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit)
-{
- HWND RetHWND;
- isWithinDialog=TRUE;
- OutTraceD("CreateDialogParam: hInstance=%x lpTemplateName=%s hWndParent=%x lpDialogFunc=%x lParamInit=%x\n",
- hInstance, "tbd", hWndParent, lpDialogFunc, lParamInit);
- if(hWndParent==NULL) hWndParent=dxw.GethWnd();
- RetHWND=(*pCreateDialogParam)(hInstance, lpTemplateName, hWndParent, lpDialogFunc, lParamInit);
-
- WhndStackPush(RetHWND, (WNDPROC)lpDialogFunc);
- if(!(*pSetWindowLong)(RetHWND, DWL_DLGPROC, (LONG)extDialogWindowProc))
- OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__);
-
- OutTraceD("CreateDialogParam: hwnd=%x\n", RetHWND);
- isWithinDialog=FALSE;
- //if (IsDebug) EnumChildWindows(RetHWND, (WNDENUMPROC)TraceChildWin, (LPARAM)RetHWND);
- return RetHWND;
-}
-
-BOOL WINAPI extDDInvalidateRect(HWND hwnd, RECT *lpRect, BOOL bErase)
-{
- if(lpRect)
- OutTraceD("InvalidateRect: hwnd=%x rect=(%d,%d)-(%d,%d) erase=%x\n",
- hwnd, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, bErase);
- else
- OutTraceD("InvalidateRect: hwnd=%x rect=NULL erase=%x\n",
- hwnd, bErase);
-
- return (*pInvalidateRect)(hwnd, NULL, bErase);
-}
-
-BOOL WINAPI extInvalidateRect(HWND hwnd, RECT *lpRect, BOOL bErase)
-{
- if(lpRect)
- OutTraceD("InvalidateRect: hwnd=%x rect=(%d,%d)-(%d,%d) erase=%x\n",
- hwnd, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, bErase);
- else
- OutTraceD("InvalidateRect: hwnd=%x rect=NULL erase=%x\n",
- hwnd, bErase);
-
- return (*pInvalidateRect)(hwnd, NULL, bErase);
-}
-
-/* --------------------------------------------------------------------------- */
-
-// v2.1.75: Hooking for GDI32 CreatePalette, SelectPalette, RealizePalette:
-// maps the GDI palette to the buffered DirectDraw one. This fixes the screen
-// output for "Dementia" (a.k.a. "Armed & Delirious").
-
-HPALETTE WINAPI extGDICreatePalette(CONST LOGPALETTE *plpal)
-{
- HPALETTE ret;
- int idx;
-
- dxw.IsGDIPalette=TRUE;
- OutTraceD("GDI.CreatePalette: plpal=%x version=%x NumEntries=%x\n", plpal, plpal->palVersion, plpal->palNumEntries);
- ret=(*pGDICreatePalette)(plpal);
- if(IsDebug){
- OutTraceD("PalEntry[%x]= ", plpal->palNumEntries);
- for(idx=0; idxpalNumEntries; idx++) OutTraceD("(%x)", plpal->palPalEntry[idx]);
- OutTraceD("\n");
- }
- dxw.palVersion=plpal->palVersion;
- dxw.palNumEntries=plpal->palNumEntries;
- if(dxw.palNumEntries>256) dxw.palNumEntries=256;
- for(idx=0; idxpalPalEntry[idx];
- OutTraceD("GDI.CreatePalette: hPalette=%x\n", ret);
- return ret;
-}
-
-HPALETTE WINAPI extSelectPalette(HDC hdc, HPALETTE hpal, BOOL bForceBackground)
-{
- HPALETTE ret;
-
- ret=(*pGDISelectPalette)(hdc, hpal, bForceBackground);
- OutTraceD("GDI.SelectPalette: hdc=%x hpal=%x ForceBackground=%x ret=%x\n", hdc, hpal, bForceBackground, ret);
- return ret;
-}
-
-UINT WINAPI extRealizePalette(HDC hdc)
-{
- UINT ret;
- extern void mySetPalette(int, int, LPPALETTEENTRY);
-
- ret=(*pGDIRealizePalette)(hdc);
- OutTraceD("GDI.RealizePalette: hdc=%x ret=%x\n", hdc, ret);
-
- if(!dxw.IsGDIPalette) return ret;
-
- // quick & dirty implementation through a nasty global:
- // if the SelectPalette didn't force to the background (arg bForceBackground==FALSE)
- // then don't override the current palette set by the DirectDrawPalette class.
- // should be cleaned up a little....
- // maybe not: now both Diablo & Dementia colors are working...
- if(dxw.dwFlags1 & EMULATESURFACE)
- mySetPalette(0, dxw.palNumEntries, dxw.palPalEntry);
- // DEBUGGING
- if(IsDebug){
- int idx;
- OutTraceD("PaletteEntries[%x]= ", dxw.palNumEntries);
- for(idx=0; idx(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y);
- break;
- default:
- break;
- }
- }
- ret=(*pSendMessage)(hwnd, Msg, wParam, lParam);
- OutTraceW("SendMessage: lresult=%x\n", ret);
- return ret;
-}
-
-DWORD WINAPI exttimeGetTime(void)
-{
- DWORD ret;
- ret = dxw.GetTickCount();
- if (IsDebug) OutTrace("timeGetTime: time=%x\n", ret);
- return ret;
-}
-
-int WINAPI extShowCursor(BOOL bShow)
-{
- static int iFakeCounter;
- int ret;
-
- OutTraceC("ShowCursor: bShow=%x\n", bShow);
- if (bShow){
- if (dxw.dwFlags1 & HIDEHWCURSOR){
- iFakeCounter++;
- OutTraceC("ShowCursor: HIDEHWCURSOR ret=%x\n", iFakeCounter);
- return iFakeCounter;
- }
- }
- else {
- if (dxw.dwFlags2 & SHOWHWCURSOR){
- iFakeCounter--;
- OutTraceC("ShowCursor: SHOWHWCURSOR ret=%x\n", iFakeCounter);
- return iFakeCounter;
- }
- }
- ret=(*pShowCursor)(bShow);
- OutTraceC("ShowCursor: ret=%x\n", ret);
- return ret;
-}
-
diff --git a/host/Resource.h b/host/Resource.h
index 0e21bb4..4ce4f12 100644
--- a/host/Resource.h
+++ b/host/Resource.h
@@ -35,6 +35,7 @@
#define IDD_TAB_OPENGL 159
#define IDD_TAB_COMPAT 160
#define IDD_TAB_GDI 161
+#define IDD_TAB_COLOR 162
#define IDC_AUTO 300
#define IDC_DIRECTX1 301
#define IDC_DIRECTX7 302
@@ -137,7 +138,7 @@
#define IDC_WIREFRAME 1094
#define IDC_DISABLEGAMMARAMP 1095
#define IDC_FORCEWINRESIZE 1096
-#define IDC_TIMESLIDER 1097
+#define IDC_FORCE16BPP 1097
#define IDC_FORCEHOOKOPENGL 1098
#define IDC_DESKTOPCENTER 1099
#define IDC_COORDINATES 1100
@@ -148,6 +149,9 @@
#define IDC_HOOKENABLED 1105
#define IDC_DESKTOPWORKAREA 1106
#define IDC_FIXD3DFRAME 1107
+#define IDC_TIMESLIDER 1108
+#define IDC_BLACKWHITE 1109
+#define IDC_SAVECAPS 1110
#define ID_MODIFY 32771
#define ID_DELETE 32772
#define ID_ADD 32773
diff --git a/host/TabColor.cpp b/host/TabColor.cpp
new file mode 100644
index 0000000..7802c47
--- /dev/null
+++ b/host/TabColor.cpp
@@ -0,0 +1,45 @@
+// TabLogs.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "TargetDlg.h"
+#include "TabColor.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CTabColor dialog
+
+CTabColor::CTabColor(CWnd* pParent /*=NULL*/)
+ : CDialog(CTabColor::IDD, pParent)
+{
+ //{{AFX_DATA_INIT(CTabColor)
+ // NOTE: the ClassWizard will add member initialization here
+ //}}AFX_DATA_INIT
+}
+
+void CTabColor::DoDataExchange(CDataExchange* pDX)
+{
+ CDialog::DoDataExchange(pDX);
+ CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
+ DDX_Check(pDX, IDC_INIT8BPP, cTarget->m_Init8BPP);
+ DDX_Check(pDX, IDC_INIT16BPP, cTarget->m_Init16BPP);
+ DDX_Check(pDX, IDC_DISABLEGAMMARAMP, cTarget->m_DisableGammaRamp);
+ DDX_Check(pDX, IDC_FORCE16BPP, cTarget->m_Force16BPP);
+ DDX_Check(pDX, IDC_WIREFRAME, cTarget->m_WireFrame);
+ DDX_Check(pDX, IDC_BLACKWHITE, cTarget->m_BlackWhite);
+ DDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565);
+}
+
+BEGIN_MESSAGE_MAP(CTabColor, CDialog)
+ //{{AFX_MSG_MAP(CTabColor)
+ // NOTE: the ClassWizard will add message map macros here
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CTabColor message handlers
diff --git a/host/TabColor.h b/host/TabColor.h
new file mode 100644
index 0000000..1c94d79
--- /dev/null
+++ b/host/TabColor.h
@@ -0,0 +1,47 @@
+#if !defined(AFX_TABLOGS_H__7E062B52_3B6E_44C4_B58E_AAD73592C888__INCLUDED_)
+#define AFX_TABLOGS_H__7E062B52_3B6E_44C4_B58E_AAD73592C888__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+// TabColor.h : header file
+//
+#include "resource.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CTabLogs dialog
+
+class CTabColor : public CDialog
+{
+// Construction
+public:
+ CTabColor(CWnd* pParent = NULL); // standard constructor
+
+// Dialog Data
+ //{{AFX_DATA(CTabLogs)
+ enum { IDD = IDD_TAB_LOG };
+ // NOTE: the ClassWizard will add data members here
+ //}}AFX_DATA
+
+
+// Overrides
+ // ClassWizard generated virtual function overrides
+ //{{AFX_VIRTUAL(CTabLogs)
+ protected:
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
+ //}}AFX_VIRTUAL
+
+// Implementation
+protected:
+
+ // Generated message map functions
+ //{{AFX_MSG(CTabLogs)
+ // NOTE: the ClassWizard will add member functions here
+ //}}AFX_MSG
+ DECLARE_MESSAGE_MAP()
+};
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif
diff --git a/host/TabDirectX.cpp b/host/TabDirectX.cpp
index af89a38..0d2ff08 100644
--- a/host/TabDirectX.cpp
+++ b/host/TabDirectX.cpp
@@ -36,14 +36,13 @@ void CTabDirectX::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_BLITFROMBACKBUFFER, cTarget->m_BlitFromBackBuffer);
DDX_Check(pDX, IDC_AUTOREFRESH, cTarget->m_AutoRefresh);
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);
DDX_Check(pDX, IDC_NOPALETTEUPDATE, cTarget->m_NoPaletteUpdate);
DDX_Check(pDX, IDC_SETCOMPATIBILITY, cTarget->m_SetCompatibility);
+ DDX_Check(pDX, IDC_SAVECAPS, cTarget->m_SaveCaps);
// DirectInput
DDX_Check(pDX, IDC_HOOKDI, cTarget->m_HookDI);
DDX_Text(pDX, IDC_INITX, cTarget->m_InitX);
diff --git a/host/TabGDI.cpp b/host/TabGDI.cpp
index b0890d6..7531046 100644
--- a/host/TabGDI.cpp
+++ b/host/TabGDI.cpp
@@ -26,9 +26,9 @@ void CTabGDI::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
- DDX_Check(pDX, IDC_DISABLEGAMMARAMP, cTarget->m_DisableGammaRamp);
DDX_Check(pDX, IDC_FIXTEXTOUT, cTarget->m_FixTextOut);
DDX_Check(pDX, IDC_HOOKGDI, cTarget->m_HookGDI);
+ DDX_Check(pDX, IDC_MAPGDITOPRIMARY, cTarget->m_MapGDIToPrimary);
}
BEGIN_MESSAGE_MAP(CTabGDI, CDialog)
diff --git a/host/TabProgram.cpp b/host/TabProgram.cpp
index f6b7c52..e7f1bdf 100644
--- a/host/TabProgram.cpp
+++ b/host/TabProgram.cpp
@@ -40,7 +40,6 @@ void CTabProgram::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_CLIENTREMAPPING, cTarget->m_ClientRemapping);
DDX_Check(pDX, IDC_SAVELOAD, cTarget->m_SaveLoad);
DDX_Check(pDX, IDC_HANDLEALTF4, cTarget->m_HandleAltF4);
- DDX_Check(pDX, IDC_WIREFRAME, cTarget->m_WireFrame);
DDX_Text(pDX, IDC_POSX, cTarget->m_PosX);
DDX_Text(pDX, IDC_POSY, cTarget->m_PosY);
DDX_Text(pDX, IDC_SIZX, cTarget->m_SizX);
diff --git a/host/TabWindow.cpp b/host/TabWindow.cpp
index 8f6dc62..f3cdace 100644
--- a/host/TabWindow.cpp
+++ b/host/TabWindow.cpp
@@ -41,8 +41,6 @@ void CTabWindow::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin);
DDX_Check(pDX, IDC_RECOVERSCREENMODE, cTarget->m_RecoverScreenMode);
DDX_Check(pDX, IDC_REFRESHONRESIZE, cTarget->m_RefreshOnResize);
- DDX_Check(pDX, IDC_INIT8BPP, cTarget->m_Init8BPP);
- DDX_Check(pDX, IDC_INIT16BPP, cTarget->m_Init16BPP);
DDX_Check(pDX, IDC_FIXD3DFRAME, cTarget->m_FixD3DFrame);
}
diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp
index 845f053..dcb1bb8 100644
--- a/host/TargetDlg.cpp
+++ b/host/TargetDlg.cpp
@@ -38,6 +38,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_SuppressIME = FALSE;
m_SuppressD3DExt = FALSE;
m_SetCompatibility = FALSE;
+ m_SaveCaps = FALSE;
m_LimitResources = FALSE;
m_UnNotify = FALSE;
m_Windowize = TRUE; // default true !!
@@ -78,6 +79,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_HideMultiMonitor = FALSE;
m_WallpaperMode = FALSE;
m_FixD3DFrame = FALSE;
+ m_Force16BPP = FALSE;
m_HookChildWin = FALSE;
m_MessageProc = FALSE;
m_FixNCHITTEST = FALSE;
@@ -98,6 +100,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_FullRectBlt = FALSE;
m_NoPaletteUpdate = FALSE;
m_WireFrame = FALSE;
+ m_BlackWhite = FALSE;
m_InitX = 0;
m_InitY = 0;
m_MaxX = 0;
@@ -116,17 +119,19 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
BOOL CTargetDlg::OnInitDialog()
{
+ int i=0;
AfxEnableControlContainer();
CDialog::OnInitDialog();
- m_tabdxTabCtrl.InsertItem(0, _T("Main"));
- m_tabdxTabCtrl.InsertItem(1, _T("Window"));
- m_tabdxTabCtrl.InsertItem(2, _T("Mouse"));
- m_tabdxTabCtrl.InsertItem(3, _T("Timing"));
- m_tabdxTabCtrl.InsertItem(4, _T("Log"));
- m_tabdxTabCtrl.InsertItem(5, _T("DirectX"));
- m_tabdxTabCtrl.InsertItem(6, _T("OpenGL"));
- m_tabdxTabCtrl.InsertItem(7, _T("GDI"));
- m_tabdxTabCtrl.InsertItem(8, _T("Compat"));
+ m_tabdxTabCtrl.InsertItem(i++, _T("Main"));
+ m_tabdxTabCtrl.InsertItem(i++, _T("Window"));
+ m_tabdxTabCtrl.InsertItem(i++, _T("Color"));
+ m_tabdxTabCtrl.InsertItem(i++, _T("Mouse"));
+ m_tabdxTabCtrl.InsertItem(i++, _T("Timing"));
+ m_tabdxTabCtrl.InsertItem(i++, _T("Log"));
+ m_tabdxTabCtrl.InsertItem(i++, _T("DirectX"));
+ m_tabdxTabCtrl.InsertItem(i++, _T("OpenGL"));
+ m_tabdxTabCtrl.InsertItem(i++, _T("GDI"));
+ m_tabdxTabCtrl.InsertItem(i++, _T("Compat"));
m_tabdxTabCtrl.Init();
return TRUE;
}
diff --git a/host/TargetDlg.h b/host/TargetDlg.h
index c94ab45..001bf6c 100644
--- a/host/TargetDlg.h
+++ b/host/TargetDlg.h
@@ -104,8 +104,11 @@ public:
BOOL m_LimitResources;
BOOL m_SuppressIME;
BOOL m_SetCompatibility;
+ BOOL m_SaveCaps;
BOOL m_WireFrame;
+ BOOL m_BlackWhite;
BOOL m_SuppressD3DExt;
+ BOOL m_Force16BPP;
int m_InitX;
int m_InitY;
int m_MaxX;
diff --git a/host/dxTabCtrl.cpp b/host/dxTabCtrl.cpp
index 593e662..528fc4a 100644
--- a/host/dxTabCtrl.cpp
+++ b/host/dxTabCtrl.cpp
@@ -29,6 +29,7 @@
#include "TabWindow.h"
#include "TabOpenGL.h"
#include "TabCompat.h"
+#include "TabColor.h"
#include "TabGDI.h"
#ifdef _DEBUG
@@ -42,17 +43,19 @@ static char THIS_FILE[] = __FILE__;
CDXTabCtrl::CDXTabCtrl()
{
- m_tabPages[0]=new CTabProgram;
- m_tabPages[1]=new CTabWindow;
- m_tabPages[2]=new CTabMouse;
- m_tabPages[3]=new CTabTiming;
- m_tabPages[4]=new CTabLogs;
- m_tabPages[5]=new CTabDirectX;
- m_tabPages[6]=new CTabOpenGL;
- m_tabPages[7]=new CTabGDI;
- m_tabPages[8]=new CTabCompat;
+ int i=0;
+ m_tabPages[i++]=new CTabProgram;
+ m_tabPages[i++]=new CTabWindow;
+ m_tabPages[i++]=new CTabColor;
+ m_tabPages[i++]=new CTabMouse;
+ m_tabPages[i++]=new CTabTiming;
+ m_tabPages[i++]=new CTabLogs;
+ m_tabPages[i++]=new CTabDirectX;
+ m_tabPages[i++]=new CTabOpenGL;
+ m_tabPages[i++]=new CTabGDI;
+ m_tabPages[i++]=new CTabCompat;
- m_nNumberOfPages=9;
+ m_nNumberOfPages=i;
}
CDXTabCtrl::~CDXTabCtrl()
@@ -64,17 +67,19 @@ CDXTabCtrl::~CDXTabCtrl()
void CDXTabCtrl::Init()
{
+ int i = 0;
m_tabCurrent=0;
- m_tabPages[0]->Create(IDD_TAB_PROGRAM, this);
- m_tabPages[1]->Create(IDD_TAB_WINDOW, this);
- m_tabPages[2]->Create(IDD_TAB_MOUSE, this);
- m_tabPages[3]->Create(IDD_TAB_TIMING, this);
- m_tabPages[4]->Create(IDD_TAB_LOG, this);
- m_tabPages[5]->Create(IDD_TAB_DIRECTX, this);
- m_tabPages[6]->Create(IDD_TAB_OPENGL, this);
- m_tabPages[7]->Create(IDD_TAB_GDI, this);
- m_tabPages[8]->Create(IDD_TAB_COMPAT, this);
+ m_tabPages[i++]->Create(IDD_TAB_PROGRAM, this);
+ m_tabPages[i++]->Create(IDD_TAB_WINDOW, this);
+ m_tabPages[i++]->Create(IDD_TAB_COLOR, this);
+ m_tabPages[i++]->Create(IDD_TAB_MOUSE, this);
+ m_tabPages[i++]->Create(IDD_TAB_TIMING, this);
+ m_tabPages[i++]->Create(IDD_TAB_LOG, this);
+ m_tabPages[i++]->Create(IDD_TAB_DIRECTX, this);
+ m_tabPages[i++]->Create(IDD_TAB_OPENGL, this);
+ m_tabPages[i++]->Create(IDD_TAB_GDI, this);
+ m_tabPages[i++]->Create(IDD_TAB_COMPAT, this);
for(int nCount=0; nCount < m_nNumberOfPages; nCount++){
m_tabPages[nCount]->ShowWindow(nCount ? SW_HIDE:SW_SHOW);
diff --git a/host/dxTabCtrl.h b/host/dxTabCtrl.h
index 683399f..6f9c22d 100644
--- a/host/dxTabCtrl.h
+++ b/host/dxTabCtrl.h
@@ -16,7 +16,7 @@ class CDXTabCtrl : public CTabCtrl
// Construction
public:
CDXTabCtrl();
- CDialog *m_tabPages[9];
+ CDialog *m_tabPages[10];
int m_tabCurrent;
int m_nNumberOfPages;
enum { IDD = IDC_TABPANEL };
diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps
index 98d4a36..b41bdaf 100644
Binary files a/host/dxwndhost.aps and b/host/dxwndhost.aps differ
diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc
index 74e9c1d..781ca13 100644
--- a/host/dxwndhost.rc
+++ b/host/dxwndhost.rc
@@ -265,7 +265,6 @@ BEGIN
GROUPBOX "Generic",IDC_STATIC,7,103,286,88
CONTROL "No banner",IDC_NOBANNER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,122,108,10
CONTROL "use DLL Injection",IDC_STARTDEBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,132,100,10
- CONTROL "3D Wireframe",IDC_WIREFRAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,142,96,10
CONTROL "Remap Client Rect",IDC_CLIENTREMAPPING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,112,115,10
CONTROL "Hook all DLLs",IDC_HOOKDLLS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,152,124,10
CONTROL "Hook enabled",IDC_HOOKENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,112,124,10
@@ -307,19 +306,17 @@ BEGIN
CONTROL "Primary Buffer",IDC_EMULATEBUFFER,"Button",BS_AUTORADIOBUTTON,14,142,67,12
GROUPBOX "DirectX Version Hook",IDC_STATIC,6,3,98,103,WS_GROUP
GROUPBOX "Emulation",IDC_STATIC,6,120,98,49,WS_GROUP
- CONTROL "Handle DC",IDC_HANDLEDC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,25,78,12
+ CONTROL "Handle DC",IDC_HANDLEDC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,26,78,12
CONTROL "Auto Primary Surface Refresh",IDC_AUTOREFRESH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,38,126,9
GROUPBOX "DirectDraw Surface handling",IDC_STATIC,112,3,181,167
CONTROL "VIDEO->SYSTEM surf. on fail",IDC_VIDEOTOSYSTEMMEM,
- "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,118,61,126,9
- CONTROL "Set 16BPP RGB565 encoding",IDC_USERGB565,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,50,126,9
- CONTROL "Suppress DX common errors",IDC_SUPPRESSDXERRORS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,73,127,10
- CONTROL "Map GDI HDC to Primary DC",IDC_MAPGDITOPRIMARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,15,119,10
- CONTROL "Make Backbuf attachable",IDC_BACKBUFATTACH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,96,119,10
- CONTROL "Blit from BackBuffer",IDC_BLITFROMBACKBUFFER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,107,119,10
- CONTROL "Suppress clipping",IDC_SUPPRESSCLIPPING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,119,119,10
- CONTROL "Full RECT Blit",IDC_FULLRECTBLT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,131,119,10
- CONTROL "Palette update don't Blit",IDC_NOPALETTEUPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,142,119,10
+ "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,118,49,126,9
+ CONTROL "Suppress DX common errors",IDC_SUPPRESSDXERRORS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,61,127,10
+ CONTROL "Make Backbuf attachable",IDC_BACKBUFATTACH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,84,119,10
+ CONTROL "Blit from BackBuffer",IDC_BLITFROMBACKBUFFER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,95,119,10
+ CONTROL "Suppress clipping",IDC_SUPPRESSCLIPPING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,107,119,10
+ CONTROL "Full RECT Blit",IDC_FULLRECTBLT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,119,119,10
+ CONTROL "Palette update don't Blit",IDC_NOPALETTEUPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,130,119,10
LTEXT "DirectInput initial coord. and X,Y range",IDC_STATIC,19,197,146,9
LTEXT "X",IDC_STATIC,13,212,9,9
LTEXT "Y",IDC_STATIC,40,212,9,9
@@ -336,8 +333,9 @@ BEGIN
EDITTEXT IDC_MAXY,148,209,17,14,ES_AUTOHSCROLL,WS_EX_RIGHT
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
+ CONTROL "Set AERO compatible mode",IDC_SETCOMPATIBILITY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,141,109,12
+ CONTROL "Highlight blit to primary",IDC_MARKBLIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,72,127,10
+ CONTROL "Preserve surface capabilities",IDC_SAVECAPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,14,109,12
END
IDD_TAB_MOUSE DIALOGEX 0, 0, 300, 240
@@ -381,20 +379,18 @@ BEGIN
CONTROL "Fix Window Frame Style",IDC_FIXWINFRAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,16,120,10
CONTROL "Prevent Win Maximize",IDC_PREVENTMAXIMIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,28,115,10
GROUPBOX "Windows handling",IDC_STATIC,6,4,140,229
- CONTROL "Lock win coordinates",IDC_LOCKWINPOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,39,115,10
- CONTROL "Hook CHILD windows",IDC_HOOKCHILDWIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,62,115,10
- CONTROL "Recover screen mode",IDC_RECOVERSCREENMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,74,115,10
- CONTROL "Refresh on win resize",IDC_REFRESHONRESIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,86,115,10
- CONTROL "Simulate 8BPP desktop",IDC_INIT8BPP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,97,115,10
- CONTROL "Simulate 16BPP desktop",IDC_INIT16BPP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,108,115,10
- CONTROL "Lock win style",IDC_LOCKWINSTYLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,51,115,10
- CONTROL "Fix Parent Window",IDC_FIXPARENTWIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,120,115,10
- CONTROL "Modal Style",IDC_MODALSTYLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,132,115,10
- CONTROL "Keep aspect ratio",IDC_KEEPASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,143,115,10
- CONTROL "Force win resize",IDC_FORCEWINRESIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,154,115,10
- CONTROL "Hide multi-monitor config.",IDC_HIDEMULTIMONITOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,166,115,10
- CONTROL "Wallpaper mode",IDC_WALLPAPERMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,178,115,10
- CONTROL "Fix Windows Frame in D3D",IDC_FIXD3DFRAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,188,115,10
+ CONTROL "Lock win coordinates",IDC_LOCKWINPOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,40,115,10
+ CONTROL "Hook CHILD windows",IDC_HOOKCHILDWIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,64,115,10
+ CONTROL "Recover screen mode",IDC_RECOVERSCREENMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,76,115,10
+ CONTROL "Refresh on win resize",IDC_REFRESHONRESIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,88,115,10
+ CONTROL "Lock win style",IDC_LOCKWINSTYLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,52,115,10
+ CONTROL "Fix Parent Window",IDC_FIXPARENTWIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,100,115,10
+ CONTROL "Modal Style",IDC_MODALSTYLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,112,115,10
+ CONTROL "Keep aspect ratio",IDC_KEEPASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,124,115,10
+ CONTROL "Force win resize",IDC_FORCEWINRESIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,136,115,10
+ CONTROL "Hide multi-monitor config.",IDC_HIDEMULTIMONITOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,148,115,10
+ CONTROL "Wallpaper mode",IDC_WALLPAPERMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,160,115,10
+ CONTROL "Fix Windows Frame in D3D",IDC_FIXD3DFRAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,172,115,10
END
IDD_TAB_EMPTY DIALOGEX 0, 0, 300, 240
@@ -431,10 +427,24 @@ IDD_TAB_GDI DIALOGEX 0, 0, 300, 240
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
- CONTROL "Fix TextOutA placement",IDC_FIXTEXTOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,26,125,10
+ CONTROL "Fix TextOutA placement",IDC_FIXTEXTOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,28,125,10
GROUPBOX "GDI Handling",IDC_STATIC,6,3,140,51
- CONTROL "Hook GDI",IDC_HOOKGDI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,15,119,10
- CONTROL "Disable setting gamma ramp",IDC_DISABLEGAMMARAMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,38,119,10
+ CONTROL "Hook GDI",IDC_HOOKGDI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,16,119,10
+ CONTROL "Map GDI HDC to Primary DC",IDC_MAPGDITOPRIMARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,40,119,10
+END
+
+IDD_TAB_COLOR DIALOGEX 0, 0, 300, 240
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ GROUPBOX "Color management",IDC_STATIC,7,3,144,230
+ CONTROL "Simulate 8BPP desktop",IDC_INIT8BPP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,16,115,10
+ CONTROL "Simulate 16BPP desktop",IDC_INIT16BPP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,28,115,10
+ CONTROL "Disable setting gamma ramp",IDC_DISABLEGAMMARAMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,40,119,10
+ CONTROL "Forces 16BPP desktop",IDC_FORCE16BPP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,52,119,10
+ CONTROL "3D Wireframe",IDC_WIREFRAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,64,96,10
+ CONTROL "Simulate BW monitor",IDC_BLACKWHITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,76,96,10
+ CONTROL "Set 16BPP RGB565 encoding",IDC_USERGB565,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,88,126,9
END
@@ -596,6 +606,14 @@ BEGIN
TOPMARGIN, 7
BOTTOMMARGIN, 233
END
+
+ IDD_TAB_COLOR, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 293
+ TOPMARGIN, 3
+ BOTTOMMARGIN, 233
+ END
END
#endif // APSTUDIO_INVOKED
diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo
index 7dba9e5..63aaf93 100644
Binary files a/host/dxwndhost.vs2008.suo and b/host/dxwndhost.vs2008.suo differ
diff --git a/host/dxwndhost.vs2008.vcproj b/host/dxwndhost.vs2008.vcproj
index e58df9b..905ef70 100644
--- a/host/dxwndhost.vs2008.vcproj
+++ b/host/dxwndhost.vs2008.vcproj
@@ -365,6 +365,10 @@
RelativePath=".\SystemTray.h"
>
+
+
@@ -466,6 +470,10 @@
RelativePath="StdAfx.h"
>
+
+
diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp
index ddd1f5e..5b1fd4e 100644
--- a/host/dxwndhostView.cpp
+++ b/host/dxwndhostView.cpp
@@ -377,7 +377,6 @@ void CDxwndhostView::OnInitialUpdate()
listctrl.InsertColumn(0, &listcol);
for(i = 0; i < MAXTARGETS; i ++){
- FILE *target;
if (!LoadConfigItem(&TargetMaps[i], TitleMaps[i].title, i, InitPath)) break;
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i;
@@ -525,6 +524,7 @@ void CDxwndhostView::OnModify()
dlg.m_SuppressIME = TargetMaps[i].flags2 & SUPPRESSIME ? 1 : 0;
dlg.m_SuppressD3DExt = TargetMaps[i].flags3 & SUPPRESSD3DEXT ? 1 : 0;
dlg.m_SetCompatibility = TargetMaps[i].flags2 & SETCOMPATIBILITY ? 1 : 0;
+ dlg.m_SaveCaps = TargetMaps[i].flags3 & SAVECAPS ? 1 : 0;
dlg.m_LimitResources = TargetMaps[i].flags2 & LIMITRESOURCES ? 1 : 0;
dlg.m_SaveLoad = TargetMaps[i].flags & SAVELOAD ? 1 : 0;
dlg.m_SlowDown = TargetMaps[i].flags & SLOWDOWN ? 1 : 0;
@@ -557,6 +557,7 @@ void CDxwndhostView::OnModify()
dlg.m_HideMultiMonitor = TargetMaps[i].flags2 & HIDEMULTIMONITOR ? 1 : 0;
dlg.m_WallpaperMode = TargetMaps[i].flags2 & WALLPAPERMODE ? 1 : 0;
dlg.m_FixD3DFrame = TargetMaps[i].flags3 & FIXD3DFRAME ? 1 : 0;
+ dlg.m_Force16BPP = TargetMaps[i].flags3 & FORCE16BPP ? 1 : 0;
dlg.m_HookChildWin = TargetMaps[i].flags & HOOKCHILDWIN ? 1 : 0;
dlg.m_MessageProc = TargetMaps[i].flags & MESSAGEPROC ? 1 : 0;
dlg.m_FixNCHITTEST = TargetMaps[i].flags2 & FIXNCHITTEST ? 1 : 0;
@@ -574,6 +575,7 @@ void CDxwndhostView::OnModify()
dlg.m_HookOpenGL = TargetMaps[i].flags2 & HOOKOPENGL ? 1 : 0;
dlg.m_ForceHookOpenGL = TargetMaps[i].flags3 & FORCEHOOKOPENGL ? 1 : 0;
dlg.m_WireFrame = TargetMaps[i].flags2 & WIREFRAME ? 1 : 0;
+ dlg.m_BlackWhite = TargetMaps[i].flags3 & BLACKWHITE ? 1 : 0;
dlg.m_FakeVersion = TargetMaps[i].flags2 & FAKEVERSION ? 1 : 0;
dlg.m_FullRectBlt = TargetMaps[i].flags2 & FULLRECTBLT ? 1 : 0;
dlg.m_NoPaletteUpdate = TargetMaps[i].flags2 & NOPALETTEUPDATE ? 1 : 0;
@@ -643,6 +645,7 @@ void CDxwndhostView::OnModify()
if(dlg.m_SuppressIME) TargetMaps[i].flags2 |= SUPPRESSIME;
if(dlg.m_SuppressD3DExt) TargetMaps[i].flags3 |= SUPPRESSD3DEXT;
if(dlg.m_SetCompatibility) TargetMaps[i].flags2 |= SETCOMPATIBILITY;
+ if(dlg.m_SaveCaps) TargetMaps[i].flags3 |= SAVECAPS;
if(dlg.m_SaveLoad) TargetMaps[i].flags |= SAVELOAD;
if(dlg.m_SlowDown) TargetMaps[i].flags |= SLOWDOWN;
if(dlg.m_BlitFromBackBuffer) TargetMaps[i].flags |= BLITFROMBACKBUFFER;
@@ -674,6 +677,7 @@ void CDxwndhostView::OnModify()
if(dlg.m_HideMultiMonitor) TargetMaps[i].flags2 |= HIDEMULTIMONITOR;
if(dlg.m_WallpaperMode) TargetMaps[i].flags2 |= WALLPAPERMODE;
if(dlg.m_FixD3DFrame) TargetMaps[i].flags3 |= FIXD3DFRAME;
+ if(dlg.m_Force16BPP) TargetMaps[i].flags3 |= FORCE16BPP;
if(dlg.m_HookChildWin) TargetMaps[i].flags |= HOOKCHILDWIN;
if(dlg.m_MessageProc) TargetMaps[i].flags |= MESSAGEPROC;
if(dlg.m_FixNCHITTEST) TargetMaps[i].flags2 |= FIXNCHITTEST;
@@ -691,6 +695,7 @@ void CDxwndhostView::OnModify()
if(dlg.m_HookOpenGL) TargetMaps[i].flags2 |= HOOKOPENGL;
if(dlg.m_ForceHookOpenGL) TargetMaps[i].flags3 |= FORCEHOOKOPENGL;
if(dlg.m_WireFrame) TargetMaps[i].flags2 |= WIREFRAME;
+ if(dlg.m_BlackWhite) TargetMaps[i].flags3 |= BLACKWHITE;
if(dlg.m_FakeVersion) TargetMaps[i].flags2 |= FAKEVERSION;
if(dlg.m_FullRectBlt) TargetMaps[i].flags2 |= FULLRECTBLT;
if(dlg.m_NoPaletteUpdate) TargetMaps[i].flags2 |= NOPALETTEUPDATE;
@@ -1031,6 +1036,7 @@ void CDxwndhostView::OnAdd()
if(dlg.m_SuppressIME) TargetMaps[i].flags2 |= SUPPRESSIME;
if(dlg.m_SuppressD3DExt) TargetMaps[i].flags3 |= SUPPRESSD3DEXT;
if(dlg.m_SetCompatibility) TargetMaps[i].flags2 |= SETCOMPATIBILITY;
+ if(dlg.m_SaveCaps) TargetMaps[i].flags3 |= SAVECAPS;
if(dlg.m_LimitResources) TargetMaps[i].flags2 |= LIMITRESOURCES;
if(dlg.m_SaveLoad) TargetMaps[i].flags |= SAVELOAD;
if(dlg.m_SlowDown) TargetMaps[i].flags |= SLOWDOWN;
@@ -1063,6 +1069,7 @@ void CDxwndhostView::OnAdd()
if(dlg.m_HideMultiMonitor) TargetMaps[i].flags2 |= HIDEMULTIMONITOR;
if(dlg.m_WallpaperMode) TargetMaps[i].flags2 |= WALLPAPERMODE;
if(dlg.m_FixD3DFrame) TargetMaps[i].flags3 |= FIXD3DFRAME;
+ if(dlg.m_Force16BPP) TargetMaps[i].flags3 |= FORCE16BPP;
if(dlg.m_HookChildWin) TargetMaps[i].flags |= HOOKCHILDWIN;
if(dlg.m_MessageProc) TargetMaps[i].flags |= MESSAGEPROC;
if(dlg.m_FixNCHITTEST) TargetMaps[i].flags2 |= FIXNCHITTEST;
@@ -1080,6 +1087,7 @@ void CDxwndhostView::OnAdd()
if(dlg.m_HookOpenGL) TargetMaps[i].flags2 |= HOOKOPENGL;
if(dlg.m_ForceHookOpenGL) TargetMaps[i].flags3 |= FORCEHOOKOPENGL;
if(dlg.m_WireFrame) TargetMaps[i].flags2 |= WIREFRAME;
+ if(dlg.m_BlackWhite) TargetMaps[i].flags3 |= BLACKWHITE;
if(dlg.m_FakeVersion) TargetMaps[i].flags2 |= FAKEVERSION;
if(dlg.m_FullRectBlt) TargetMaps[i].flags2 |= FULLRECTBLT;
if(dlg.m_NoPaletteUpdate) TargetMaps[i].flags2 |= NOPALETTEUPDATE;
diff --git a/host/res/bitmap2.bmp b/host/res/bitmap2.bmp
new file mode 100644
index 0000000..6e8e840
Binary files /dev/null and b/host/res/bitmap2.bmp differ
diff --git a/host/res/smallicons2.bmp b/host/res/smallicons2.bmp
new file mode 100644
index 0000000..0bdfab4
Binary files /dev/null and b/host/res/smallicons2.bmp differ
diff --git a/release/.gitattributes b/release/.gitattributes
new file mode 100644
index 0000000..b110a24
--- /dev/null
+++ b/release/.gitattributes
@@ -0,0 +1 @@
+*.{dll,exe} filter=lfs diff=lfs merge=lfs -text
\ No newline at end of file
diff --git a/release/dxwnd.dll b/release/dxwnd.dll
new file mode 100644
index 0000000..d80fa58
--- /dev/null
+++ b/release/dxwnd.dll
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bce7a60e60155037cd12e0c1383f1078103923d7ba43a349e368606025bec75a
+size 343040