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