diff --git a/build/dxwnd.dll b/build/dxwnd.dll index aa1c284..1357954 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:204b88153c343d4bd1b32eadbb4f2c0267ad6f3147cf813cf591084e27893061 -size 450048 +oid sha256:0ab0518cd95cd490131b9ba49cc94686af2bdc129622f112e8499bc5c386cc42 +size 458240 diff --git a/build/dxwnd.ini b/build/dxwnd.ini index fab5947..5e2a67d 100644 --- a/build/dxwnd.ini +++ b/build/dxwnd.ini @@ -1424,8 +1424,8 @@ maxfps56=0 initts56=0 winver56=0 maxres56=-1 -title57=LEGOŽ Marvel Super Heroes Demo -path57=C:\Program Files (x86)\Warner Bros. Interactive Entertainment\LEGOŽ Marvel Super Heroes Demo\LEGOMarvelDemo.exe +title57=LEGO Star Wars +path57=D:\Games\LEGO Star Wars Game\LegoStarwars.crack.exe module57= opengllib57= ver57=0 @@ -1434,7 +1434,7 @@ flag57=134217762 flagg57=1207959552 flagh57=20 flagi57=4 -tflag57=0 +tflag57=64 initx57=0 inity57=0 minx57=0 @@ -1448,18 +1448,18 @@ sizy57=600 maxfps57=0 initts57=0 winver57=0 -maxres57=0 -title58=L'Elefante a Strisce -path58=D:\Games\L'Elefante a Strisce\Pilots1I.EXE +maxres57=-1 +title58=LEGOŽ Marvel Super Heroes Demo +path58=C:\Program Files (x86)\Warner Bros. Interactive Entertainment\LEGOŽ Marvel Super Heroes Demo\LEGOMarvelDemo.exe module58= opengllib58= ver58=0 coord58=0 flag58=134217762 -flagg58=135266368 +flagg58=1207959552 flagh58=20 -flagi58=0 -tflag58=64 +flagi58=4 +tflag58=0 initx58=0 inity58=0 minx58=0 @@ -1474,17 +1474,17 @@ maxfps58=0 initts58=0 winver58=0 maxres58=0 -title59=Lords of Magic Special Edition -path59=D:\Games\LoM\SIERRA\LOMSE\lomse.exe +title59=L'Elefante a Strisce +path59=D:\Games\L'Elefante a Strisce\Pilots1I.EXE module59= opengllib59= ver59=0 coord59=0 -flag59=402669603 -flagg59=1207959568 -flagh59=6291476 +flag59=134217762 +flagg59=135266368 +flagh59=20 flagi59=0 -tflag59=6418 +tflag59=64 initx59=0 inity59=0 minx59=0 @@ -1499,17 +1499,17 @@ maxfps59=0 initts59=0 winver59=0 maxres59=0 -title60=Lords of the Realm 2 -path60=D:\Games\Lords of the Realm 2\LORDS2.EXE +title60=Lords of Magic Special Edition +path60=D:\Games\LoM\SIERRA\LOMSE\lomse.exe module60= opengllib60= ver60=0 coord60=0 -flag60=134217762 -flagg60=1209008128 -flagh60=65556 -flagi60=4 -tflag60=0 +flag60=402669603 +flagg60=1207959568 +flagh60=6291476 +flagi60=0 +tflag60=6418 initx60=0 inity60=0 minx60=0 @@ -1524,16 +1524,16 @@ maxfps60=0 initts60=0 winver60=0 maxres60=0 -title61=Lost Valley -path61=D:\Games\Lost Valley\lost valley\lost valley data.exe +title61=Lords of the Realm 2 +path61=D:\Games\Lords of the Realm 2\LORDS2.EXE module61= opengllib61= ver61=0 coord61=0 -flag61=679485474 -flagg61=1207959552 -flagh61=-2080374764 -flagi61=0 +flag61=134217762 +flagg61=1209008128 +flagh61=65556 +flagi61=4 tflag61=0 initx61=0 inity61=0 @@ -1549,17 +1549,17 @@ maxfps61=0 initts61=0 winver61=0 maxres61=0 -title62=Mageslayer -path62=D:\Games\MAGE\MAGESLAY.EXE +title62=Lost Valley +path62=D:\Games\Lost Valley\lost valley\lost valley data.exe module62= opengllib62= ver62=0 coord62=0 -flag62=134234146 -flagg62=402653216 -flagh62=8212 -flagi62=1 -tflag62=6210 +flag62=679485474 +flagg62=1207959552 +flagh62=-2080374764 +flagi62=0 +tflag62=0 initx62=0 inity62=0 minx62=0 @@ -1574,17 +1574,17 @@ maxfps62=0 initts62=0 winver62=0 maxres62=0 -title63=Magic & Mayhem -path63=D:\Games\Magic_&_Mayhem\Chaos.exe +title63=Mageslayer +path63=D:\Games\MAGE\MAGESLAY.EXE module63= opengllib63= ver63=0 coord63=0 -flag63=134217762 -flagg63=1207959552 -flagh63=20 -flagi63=4 -tflag63=0 +flag63=134234146 +flagg63=402653216 +flagh63=8212 +flagi63=1 +tflag63=6210 initx63=0 inity63=0 minx63=0 @@ -1599,17 +1599,17 @@ maxfps63=0 initts63=0 winver63=0 maxres63=0 -title64=Martian Gothic Unification -path64=D:\Games\Martian Gothic\martian gothic.exe +title64=Magic & Mayhem +path64=D:\Games\Magic_&_Mayhem\Chaos.exe module64= opengllib64= ver64=0 coord64=0 -flag64=203423776 -flagg64=1476395008 +flag64=134217762 +flagg64=1207959552 flagh64=20 -flagi64=5 -tflag64=6162 +flagi64=4 +tflag64=0 initx64=0 inity64=0 minx64=0 @@ -1624,17 +1624,17 @@ maxfps64=0 initts64=0 winver64=0 maxres64=0 -title65=Millennium Racer Y2K fighters -path65=D:\Games\Millennium Racer\MRacer.exe +title65=Martian Gothic Unification +path65=D:\Games\Martian Gothic\martian gothic.exe module65= opengllib65= ver65=0 coord65=0 -flag65=671105056 -flagg65=1476395024 +flag65=203423776 +flagg65=1476395008 flagh65=20 -flagi65=4 -tflag65=0 +flagi65=5 +tflag65=6162 initx65=0 inity65=0 minx65=0 @@ -1648,17 +1648,17 @@ sizy65=600 maxfps65=0 initts65=0 winver65=0 -maxres65=-1 -title66=Motocross Madness (DEMO) -path66=D:\Games\Motocross Madness Trial\mcm.exe +maxres65=0 +title66=Millennium Racer Y2K fighters +path66=D:\Games\Millennium Racer\MRacer.exe module66= opengllib66= ver66=0 coord66=0 -flag66=134217760 -flagg66=1207959552 +flag66=671105056 +flagg66=1476395024 flagh66=20 -flagi66=0 +flagi66=4 tflag66=0 initx66=0 inity66=0 @@ -1673,18 +1673,18 @@ sizy66=600 maxfps66=0 initts66=0 winver66=0 -maxres66=0 -title67=Nascar Racing 3 -path67=D:\Games\Nascar Racing 3\NASCAR Racing 3.exe +maxres66=-1 +title67=Motocross Madness (DEMO) +path67=D:\Games\Motocross Madness Trial\mcm.exe module67= opengllib67= ver67=0 coord67=0 -flag67=671105056 +flag67=134217760 flagg67=1207959552 flagh67=20 -flagi67=4 -tflag67=6162 +flagi67=0 +tflag67=0 initx67=0 inity67=0 minx67=0 @@ -1699,14 +1699,14 @@ maxfps67=0 initts67=0 winver67=0 maxres67=0 -title68=Need for Speed 2SE -path68=D:\Games\Need for Speed 2SE\NFS2SEN.EXE +title68=Nascar Racing 3 +path68=D:\Games\Nascar Racing 3\NASCAR Racing 3.exe module68= opengllib68= ver68=0 coord68=0 -flag68=134217826 -flagg68=1480589312 +flag68=671105056 +flagg68=1207959552 flagh68=20 flagi68=4 tflag68=6162 @@ -1724,17 +1724,17 @@ maxfps68=0 initts68=0 winver68=0 maxres68=0 -title69=Need for Speed 2SE (3dfx) -path69=D:\Games\Need for Speed 2SE\nfs2sea.exe +title69=Need for Speed 2SE +path69=D:\Games\Need for Speed 2SE\NFS2SEN.EXE module69= opengllib69= ver69=0 coord69=0 -flag69=134217760 -flagg69=1207959552 +flag69=134217826 +flagg69=1480589312 flagh69=20 flagi69=4 -tflag69=6146 +tflag69=6162 initx69=0 inity69=0 minx69=0 @@ -1749,17 +1749,17 @@ maxfps69=0 initts69=0 winver69=0 maxres69=0 -title70=Need for Speed 3 -path70=D:\Games\Need for Speed 3\nfs3.exe +title70=Need for Speed 2SE (3dfx) +path70=D:\Games\Need for Speed 2SE\nfs2sea.exe module70= opengllib70= -ver70=1 +ver70=0 coord70=0 -flag70=134217762 +flag70=134217760 flagg70=1207959552 flagh70=20 flagi70=4 -tflag70=0 +tflag70=6146 initx70=0 inity70=0 minx70=0 @@ -1774,16 +1774,16 @@ maxfps70=0 initts70=0 winver70=0 maxres70=0 -title71=Need For Speed Underground -path71=D:\Games\Need For Speed Underground\speed.exe +title71=Need for Speed 3 +path71=D:\Games\Need for Speed 3\nfs3.exe module71= opengllib71= -ver71=9 +ver71=1 coord71=0 flag71=134217762 flagg71=1207959552 flagh71=20 -flagi71=1028 +flagi71=4 tflag71=0 initx71=0 inity71=0 @@ -1799,8 +1799,8 @@ maxfps71=0 initts71=0 winver71=0 maxres71=0 -title72=Need for Speed Underground 2 -path72=D:\Games\Need for Speed Underground 2\SPEED2.EXE +title72=Need For Speed Underground +path72=D:\Games\Need For Speed Underground\speed.exe module72= opengllib72= ver72=9 @@ -1808,7 +1808,7 @@ coord72=0 flag72=134217762 flagg72=1207959552 flagh72=20 -flagi72=4 +flagi72=1028 tflag72=0 initx72=0 inity72=0 @@ -1824,13 +1824,13 @@ maxfps72=0 initts72=0 winver72=0 maxres72=0 -title73=Neophyte Koplio's Story -path73=D:\Games\Neophyte Koplio's Story\KOPLIO.exe +title73=Need for Speed Underground 2 +path73=D:\Games\Need for Speed Underground 2\SPEED2.EXE module73= opengllib73= -ver73=1 +ver73=9 coord73=0 -flag73=134234146 +flag73=134217762 flagg73=1207959552 flagh73=20 flagi73=4 @@ -1849,14 +1849,14 @@ maxfps73=0 initts73=0 winver73=0 maxres73=0 -title74=NetStorm - Islands at War -path74=D:\Games\NetStorm - Islands at War\Netstorm.exe +title74=Neophyte Koplio's Story +path74=D:\Games\Neophyte Koplio's Story\KOPLIO.exe module74= opengllib74= -ver74=0 +ver74=1 coord74=0 -flag74=679608354 -flagg74=1209008384 +flag74=134234146 +flagg74=1207959552 flagh74=20 flagi74=4 tflag74=0 @@ -1874,17 +1874,17 @@ maxfps74=0 initts74=0 winver74=0 maxres74=0 -title75=O.R.B. Offword Rescue Base -path75=D:\Games\O.R.B\orb.exe +title75=NetStorm - Islands at War +path75=D:\Games\NetStorm - Islands at War\Netstorm.exe module75= opengllib75= ver75=0 -coord75=2 -flag75=134234144 -flagg75=1207959568 +coord75=0 +flag75=679608354 +flagg75=1209008384 flagh75=20 flagi75=4 -tflag75=6162 +tflag75=0 initx75=0 inity75=0 minx75=0 @@ -1898,18 +1898,18 @@ sizy75=600 maxfps75=0 initts75=0 winver75=0 -maxres75=-1 -title76=Pandemonium 2 (GLIDE) -path76=D:\Games\Pandemonium 2\pandy.exe +maxres75=0 +title76=O.R.B. Offword Rescue Base +path76=D:\Games\O.R.B\orb.exe module76= opengllib76= ver76=0 -coord76=0 -flag76=134217762 -flagg76=1207959552 -flagh76=65556 +coord76=2 +flag76=134234144 +flagg76=1207959568 +flagh76=20 flagi76=4 -tflag76=0 +tflag76=6162 initx76=0 inity76=0 minx76=0 @@ -1923,18 +1923,18 @@ sizy76=600 maxfps76=0 initts76=0 winver76=0 -maxres76=0 -title77=Panzer Dragoon -path77=D:\Games\Panzer Dragoon\game\PANZERDG.EXE +maxres76=-1 +title77=Pandemonium 2 (GLIDE) +path77=D:\Games\Pandemonium 2\pandy.exe module77= opengllib77= ver77=0 coord77=0 flag77=134217762 flagg77=1207959552 -flagh77=20 +flagh77=65556 flagi77=4 -tflag77=66 +tflag77=0 initx77=0 inity77=0 minx77=0 @@ -1949,17 +1949,17 @@ maxfps77=0 initts77=0 winver77=0 maxres77=0 -title78=Port Royale 2 -path78=D:\Games\Port Royale 2\PR2.exe +title78=Panzer Dragoon +path78=D:\Games\Panzer Dragoon\game\PANZERDG.EXE module78= opengllib78= -ver78=8 +ver78=0 coord78=0 -flag78=671096866 +flag78=134217762 flagg78=1207959552 -flagh78=65556 +flagh78=20 flagi78=4 -tflag78=0 +tflag78=66 initx78=0 inity78=0 minx78=0 @@ -1973,18 +1973,18 @@ sizy78=600 maxfps78=0 initts78=0 winver78=0 -maxres78=-1 -title79=Praetorians -path79=D:\games\Praetorians\Praetorians.exe +maxres78=0 +title79=Port Royale 2 +path79=D:\Games\Port Royale 2\PR2.exe module79= opengllib79= -ver79=0 -coord79=2 -flag79=134217760 -flagg79=1209008144 -flagh79=22 +ver79=8 +coord79=0 +flag79=671096866 +flagg79=1207959552 +flagh79=65556 flagi79=4 -tflag79=2 +tflag79=0 initx79=0 inity79=0 minx79=0 @@ -1998,18 +1998,18 @@ sizy79=600 maxfps79=0 initts79=0 winver79=0 -maxres79=0 -title80=Praetorians (DEMO) -path80=D:\Games\Praetorians Demo\Praetorians.exe +maxres79=-1 +title80=Praetorians +path80=D:\games\Praetorians\Praetorians.exe module80= opengllib80= ver80=0 -coord80=0 -flag80=150994976 -flagg80=1209008128 -flagh80=65556 +coord80=2 +flag80=134217760 +flagg80=1209008144 +flagh80=22 flagi80=4 -tflag80=6418 +tflag80=2 initx80=0 inity80=0 minx80=0 @@ -2024,17 +2024,17 @@ maxfps80=0 initts80=0 winver80=0 maxres80=0 -title81=Premier Manager 98 -path81=D:\Games\Premier Manager 98\MANAGER.EXE +title81=Praetorians (DEMO) +path81=D:\Games\Praetorians Demo\Praetorians.exe module81= opengllib81= ver81=0 coord81=0 -flag81=671092770 -flagg81=1207959552 -flagh81=16 -flagi81=0 -tflag81=0 +flag81=150994976 +flagg81=1209008128 +flagh81=65556 +flagi81=4 +tflag81=6418 initx81=0 inity81=0 minx81=0 @@ -2049,15 +2049,15 @@ maxfps81=0 initts81=0 winver81=0 maxres81=0 -title82=Primitive Wars -path82=D:\Games\Primitive Wars\Pw.exe +title82=Premier Manager 98 +path82=D:\Games\Premier Manager 98\MANAGER.EXE module82= opengllib82= ver82=0 coord82=0 -flag82=671088674 -flagg82=134217728 -flagh82=20 +flag82=671092770 +flagg82=1207959552 +flagh82=16 flagi82=0 tflag82=0 initx82=0 @@ -2074,17 +2074,17 @@ maxfps82=0 initts82=0 winver82=0 maxres82=0 -title83=Project Eden -path83=D:\Games\Project Eden\Eden.exe +title83=Primitive Wars +path83=D:\Games\Primitive Wars\Pw.exe module83= opengllib83= ver83=0 coord83=0 -flag83=134217763 -flagg83=1207959552 +flag83=671088674 +flagg83=134217728 flagh83=20 -flagi83=4 -tflag83=64 +flagi83=0 +tflag83=0 initx83=0 inity83=0 minx83=0 @@ -2098,18 +2098,18 @@ sizy83=600 maxfps83=0 initts83=0 winver83=0 -maxres83=-1 -title84=Project IGI -path84=D:\Games\Project IGI\pc\IGI.exe +maxres83=0 +title84=Project Eden +path84=D:\Games\Project Eden\Eden.exe module84= opengllib84= ver84=0 coord84=0 -flag84=671105060 -flagg84=-939524096 +flag84=134217763 +flagg84=1207959552 flagh84=20 flagi84=4 -tflag84=66 +tflag84=64 initx84=0 inity84=0 minx84=0 @@ -2123,18 +2123,18 @@ sizy84=600 maxfps84=0 initts84=0 winver84=0 -maxres84=0 -title85=Project Nomads (DEMO) -path85=D:\Games\Project Nomads Demo\bin\win32\nomads.exe +maxres84=-1 +title85=Project IGI +path85=D:\Games\Project IGI\pc\IGI.exe module85= opengllib85= -ver85=8 +ver85=0 coord85=0 -flag85=-1476394974 -flagg85=1207959808 -flagh85=4 -flagi85=0 -tflag85=274 +flag85=671105060 +flagg85=-939524096 +flagh85=20 +flagi85=4 +tflag85=66 initx85=0 inity85=0 minx85=0 @@ -2149,17 +2149,17 @@ maxfps85=0 initts85=0 winver85=0 maxres85=0 -title86=Quake 2 -path86=D:\Games\QUAKE2\quake2.exe +title86=Project Nomads (DEMO) +path86=D:\Games\Project Nomads Demo\bin\win32\nomads.exe module86= opengllib86= -ver86=0 +ver86=8 coord86=0 -flag86=134234114 -flagg86=1208090624 -flagh86=20 -flagi86=4 -tflag86=0 +flag86=-1476394974 +flagg86=1207959808 +flagh86=4 +flagi86=0 +tflag86=274 initx86=0 inity86=0 minx86=0 @@ -2174,14 +2174,14 @@ maxfps86=0 initts86=0 winver86=0 maxres86=0 -title87=Railroad Tycoon II -path87=D:\Games\Railroad.Tycoon.II\RT2.EXE +title87=Quake 2 +path87=D:\Games\QUAKE2\quake2.exe module87= opengllib87= ver87=0 coord87=0 -flag87=134217762 -flagg87=1207959552 +flag87=134234114 +flagg87=1208090624 flagh87=20 flagi87=4 tflag87=0 @@ -2199,17 +2199,17 @@ maxfps87=0 initts87=0 winver87=0 maxres87=0 -title88=Rayman 2 Demo -path88=D:\Games\Rayman2Demo\Rayman2Demo.exe +title88=Railroad Tycoon II +path88=D:\Games\Railroad.Tycoon.II\RT2.EXE module88= opengllib88= -ver88=7 +ver88=0 coord88=0 -flag88=402653217 -flagg88=1208025088 -flagh88=2097172 -flagi88=0 -tflag88=6418 +flag88=134217762 +flagg88=1207959552 +flagh88=20 +flagi88=4 +tflag88=0 initx88=0 inity88=0 minx88=0 @@ -2221,20 +2221,20 @@ posy88=50 sizx88=800 sizy88=600 maxfps88=0 -initts88=4 +initts88=0 winver88=0 maxres88=0 -title89=Serious Sam - The Second Encounter Demo -path89=D:\Games\Serious Sam - The Second Encounter Demo\Bin\SeriousSam.exe +title89=Rayman 2 Demo +path89=D:\Games\Rayman2Demo\Rayman2Demo.exe module89= opengllib89= -ver89=0 +ver89=7 coord89=0 -flag89=671088674 -flagg89=1208156160 -flagh89=20 -flagi89=4 -tflag89=64 +flag89=402653217 +flagg89=1208025088 +flagh89=2097172 +flagi89=0 +tflag89=6418 initx89=0 inity89=0 minx89=0 @@ -2249,17 +2249,17 @@ maxfps89=0 initts89=4 winver89=0 maxres89=0 -title90=Shadows of the Empire (DEMO) -path90=D:\Games\Shadows of the Empire\shadows.exe +title90=Serious Sam - The Second Encounter Demo +path90=D:\Games\Serious Sam - The Second Encounter Demo\Bin\SeriousSam.exe module90= opengllib90= ver90=0 -coord90=2 -flag90=134479906 -flagg90=1207959568 -flagh90=33554452 -flagi90=0 -tflag90=274 +coord90=0 +flag90=671088674 +flagg90=1208156160 +flagh90=20 +flagi90=4 +tflag90=64 initx90=0 inity90=0 minx90=0 @@ -2271,20 +2271,20 @@ posy90=50 sizx90=800 sizy90=600 maxfps90=0 -initts90=0 +initts90=4 winver90=0 maxres90=0 -title91=Sid Meier's Civilization III Complete -path91=D:\Games\Sid Meier's Civilization III Complete\Conquests\Civ3Conquests.exe -module91=jgl +title91=Shadows of the Empire (DEMO) +path91=D:\Games\Shadows of the Empire\shadows.exe +module91= opengllib91= ver91=0 -coord91=0 -flag91=973352994 -flagg91=136462360 -flagh91=2162708 -flagi91=4100 -tflag91=64 +coord91=2 +flag91=134479906 +flagg91=1207959568 +flagh91=33554452 +flagi91=0 +tflag91=274 initx91=0 inity91=0 minx91=0 @@ -2296,20 +2296,20 @@ posy91=50 sizx91=800 sizy91=600 maxfps91=0 -initts91=6 +initts91=0 winver91=0 -maxres91=5 -title92=SimCity 4 Deluxe -path92=D:\Games\SimCity 4 Deluxe\Apps\SimCity 4.exe -module92= +maxres91=0 +title92=Sid Meier's Civilization III Complete +path92=D:\Games\Sid Meier's Civilization III Complete\Conquests\Civ3Conquests.exe +module92=jgl opengllib92= -ver92=7 +ver92=0 coord92=0 -flag92=32 -flagg92=1207959568 -flagh92=20 +flag92=973352994 +flagg92=136462360 +flagh92=2162708 flagi92=4100 -tflag92=8158 +tflag92=64 initx92=0 inity92=0 minx92=0 @@ -2318,23 +2318,23 @@ maxx92=0 maxy92=0 posx92=50 posy92=50 -sizx92=1200 -sizy92=900 +sizx92=800 +sizy92=600 maxfps92=0 -initts92=0 +initts92=6 winver92=0 -maxres92=1 -title93=Star Wars Episode I Racer -path93=D:\Games\Star Wars Episode 1 racer\SWEP1RCR.EXE +maxres92=5 +title93=SimCity 4 Deluxe +path93=D:\Games\SimCity 4 Deluxe\Apps\SimCity 4.exe module93= opengllib93= -ver93=0 +ver93=7 coord93=0 -flag93=679493669 -flagg93=1210056720 -flagh93=8212 -flagi93=20 -tflag93=64 +flag93=32 +flagg93=1207959568 +flagh93=20 +flagi93=4100 +tflag93=8158 initx93=0 inity93=0 minx93=0 @@ -2343,22 +2343,22 @@ maxx93=0 maxy93=0 posx93=50 posy93=50 -sizx93=800 -sizy93=600 +sizx93=1200 +sizy93=900 maxfps93=0 initts93=0 winver93=0 -maxres93=0 -title94=StarCraft -path94=D:\Games\Starcraft\StarCraft.exe +maxres93=1 +title94=Star Wars Episode I Racer +path94=D:\Games\Star Wars Episode 1 racer\SWEP1RCR.EXE module94= opengllib94= ver94=0 coord94=0 -flag94=134217762 -flagg94=134283264 -flagh94=20 -flagi94=8 +flag94=679493669 +flagg94=1210056720 +flagh94=8212 +flagi94=20 tflag94=64 initx94=0 inity94=0 @@ -2374,17 +2374,17 @@ maxfps94=0 initts94=0 winver94=0 maxres94=0 -title95=Starsky & Hutch - GAME -path95=D:\Games\Starsky & Hutch\StarskyPC.exe +title95=StarCraft +path95=D:\Games\Starcraft\StarCraft.exe module95= opengllib95= ver95=0 coord95=0 -flag95=947912739 -flagg95=1207959552 +flag95=134217762 +flagg95=134283264 flagh95=20 -flagi95=4 -tflag95=0 +flagi95=8 +tflag95=64 initx95=0 inity95=0 minx95=0 @@ -2399,13 +2399,13 @@ maxfps95=0 initts95=0 winver95=0 maxres95=0 -title96=Starsky & Hutch - LAUNCHER -path96=D:\Games\Starsky & Hutch\Starsky.exe +title96=Starsky & Hutch - GAME +path96=D:\Games\Starsky & Hutch\StarskyPC.exe module96= opengllib96= ver96=0 coord96=0 -flag96=134217728 +flag96=947912739 flagg96=1207959552 flagh96=20 flagi96=4 @@ -2424,17 +2424,17 @@ maxfps96=0 initts96=0 winver96=0 maxres96=0 -title97=State of Emergency -path97=D:\Games\State of Emergency\KaosPC.cracked.exe +title97=Starsky & Hutch - LAUNCHER +path97=D:\Games\Starsky & Hutch\Starsky.exe module97= opengllib97= -ver97=8 +ver97=0 coord97=0 -flag97=671088676 -flagg97=1208025088 +flag97=134217728 +flagg97=1207959552 flagh97=20 -flagi97=2052 -tflag97=6162 +flagi97=4 +tflag97=0 initx97=0 inity97=0 minx97=0 @@ -2445,21 +2445,21 @@ posx97=50 posy97=50 sizx97=800 sizy97=600 -maxfps97=50 -initts97=2 +maxfps97=0 +initts97=0 winver97=0 maxres97=0 -title98=State of War Warmonger -path98=D:\Games\State of War Warmonger\State of War - Warmonger.exe +title98=State of Emergency +path98=D:\Games\State of Emergency\KaosPC.cracked.exe module98= opengllib98= -ver98=0 +ver98=8 coord98=0 -flag98=134234210 -flagg98=134217728 -flagh98=532 -flagi98=4 -tflag98=0 +flag98=671088676 +flagg98=1208025088 +flagh98=20 +flagi98=2052 +tflag98=6162 initx98=0 inity98=0 minx98=0 @@ -2470,21 +2470,21 @@ posx98=50 posy98=50 sizx98=800 sizy98=600 -maxfps98=0 -initts98=0 +maxfps98=50 +initts98=2 winver98=0 -maxres98=-1 -title99=Still Life (GOG) -path99=D:\Games\Still Life (GOG)\StillLife.exe +maxres98=0 +title99=State of War Warmonger +path99=D:\Games\State of War Warmonger\State of War - Warmonger.exe module99= opengllib99= ver99=0 coord99=0 -flag99=671105058 -flagg99=1207959568 -flagh99=20 +flag99=134234210 +flagg99=134217728 +flagh99=532 flagi99=4 -tflag99=6210 +tflag99=0 initx99=0 inity99=0 minx99=0 @@ -2498,24 +2498,24 @@ sizy99=600 maxfps99=0 initts99=0 winver99=0 -maxres99=5 -title100=Syberia -path100=D:\Games\Syberia\Syberia.exe +maxres99=-1 +title100=Still Life (GOG) +path100=D:\Games\Still Life (GOG)\StillLife.exe module100= opengllib100= ver100=0 coord100=0 -flag100=822116385 -flagg100=1242562576 +flag100=671105058 +flagg100=1207959568 flagh100=20 flagi100=4 -tflag100=6170 -initx100=150 -inity100=150 -minx100=150 -miny100=150 -maxx100=800 -maxy100=600 +tflag100=6210 +initx100=0 +inity100=0 +minx100=0 +miny100=0 +maxx100=0 +maxy100=0 posx100=50 posy100=50 sizx100=800 @@ -2523,24 +2523,24 @@ sizy100=600 maxfps100=0 initts100=0 winver100=0 -maxres100=0 -title101=Take no Prisoners -path101=D:\Games\Take no Prisoners\TNP.EXE +maxres100=5 +title101=Syberia +path101=D:\Games\Syberia\Syberia.exe module101= opengllib101= ver101=0 coord101=0 -flag101=134217762 -flagg101=134217860 +flag101=822116385 +flagg101=1242562576 flagh101=20 -flagi101=512 -tflag101=258 -initx101=0 -inity101=0 -minx101=0 -miny101=0 -maxx101=0 -maxy101=0 +flagi101=4 +tflag101=6170 +initx101=150 +inity101=150 +minx101=150 +miny101=150 +maxx101=800 +maxy101=600 posx101=50 posy101=50 sizx101=800 @@ -2549,17 +2549,17 @@ maxfps101=0 initts101=0 winver101=0 maxres101=0 -title102=The Bard's Tale -path102=D:\Games\The Bard's Tale\The Bard's Tale.exe +title102=Take no Prisoners +path102=D:\Games\Take no Prisoners\TNP.EXE module102= opengllib102= -ver102=9 +ver102=0 coord102=0 -flag102=134217760 -flagg102=134217728 -flagh102=16 -flagi102=1024 -tflag102=6162 +flag102=134217762 +flagg102=134217860 +flagh102=20 +flagi102=512 +tflag102=258 initx102=0 inity102=0 minx102=0 @@ -2574,17 +2574,17 @@ maxfps102=0 initts102=0 winver102=0 maxres102=0 -title103=Tomb Raider 4 (DEMO) -path103=D:\Games\Tomb Raider - The Last Revelation (Demo)\tomb4.exe +title103=The Bard's Tale +path103=D:\Games\The Bard's Tale\The Bard's Tale.exe module103= opengllib103= -ver103=7 +ver103=9 coord103=0 flag103=134217760 -flagg103=1207959552 -flagh103=20 -flagi103=0 -tflag103=258 +flagg103=134217728 +flagh103=16 +flagi103=1024 +tflag103=6162 initx103=0 inity103=0 minx103=0 @@ -2599,17 +2599,17 @@ maxfps103=0 initts103=0 winver103=0 maxres103=0 -title104=Tomb Raider II -path104=D:\Games\Tomb Raider II\Tomb2.exe +title104=Thief the Dark Project GOLD +path104=D:\Games\Thief Gold\THIEF.EXE module104= opengllib104= -ver104=0 +ver104=7 coord104=0 -flag104=671088674 -flagg104=1207959552 -flagh104=20 -flagi104=0 -tflag104=0 +flag104=272 +flagg104=440401936 +flagh104=131612 +flagi104=4 +tflag104=9 initx104=0 inity104=0 minx104=0 @@ -2622,19 +2622,19 @@ sizx104=800 sizy104=600 maxfps104=0 initts104=0 -winver104=0 -maxres104=0 -title105=Tomb Raider II Gold (DEMO) -path105=D:\Games\Tomb Raider II Gold (Demo)\Tomb2.exe +winver104=1 +maxres104=-1 +title105=Thief the Dark Project GOLD (GOG) +path105=D:\Games\Thief Gold (GOG)\THIEF.EXE module105= opengllib105= ver105=0 -coord105=2 -flag105=671088674 -flagg105=1224736784 +coord105=0 +flag105=256 +flagg105=1207959568 flagh105=20 -flagi105=0 -tflag105=258 +flagi105=4 +tflag105=0 initx105=0 inity105=0 minx105=0 @@ -2648,18 +2648,18 @@ sizy105=600 maxfps105=0 initts105=0 winver105=0 -maxres105=0 -title106=Tomb Raider III -path106=D:\Games\Tomb Raider III\tomb3.exe +maxres105=-1 +title106=Tomb Raider 4 (DEMO) +path106=D:\Games\Tomb Raider - The Last Revelation (Demo)\tomb4.exe module106= opengllib106= -ver106=0 -coord106=2 +ver106=7 +coord106=0 flag106=134217760 -flagg106=1241514000 +flagg106=1207959552 flagh106=20 flagi106=0 -tflag106=322 +tflag106=258 initx106=0 inity106=0 minx106=0 @@ -2674,17 +2674,17 @@ maxfps106=0 initts106=0 winver106=0 maxres106=0 -title107=Total Annihilation Kingdoms -path107=D:\Games\Total Annihilation Kingdoms\Kingdoms.exe +title107=Tomb Raider II +path107=D:\Games\Tomb Raider II\Tomb2.exe module107= opengllib107= -ver107=7 +ver107=0 coord107=0 -flag107=671105058 +flag107=671088674 flagg107=1207959552 flagh107=20 -flagi107=4 -tflag107=6162 +flagi107=0 +tflag107=0 initx107=0 inity107=0 minx107=0 @@ -2699,17 +2699,17 @@ maxfps107=0 initts107=0 winver107=0 maxres107=0 -title108=Unreal Tournament -path108=D:\Games\Unreal Tournament\System\UnrealTournament.exe +title108=Tomb Raider II Gold (DEMO) +path108=D:\Games\Tomb Raider II Gold (Demo)\Tomb2.exe module108= opengllib108= ver108=0 -coord108=0 -flag108=-2013265886 -flagg108=1209073680 +coord108=2 +flag108=671088674 +flagg108=1224736784 flagh108=20 -flagi108=2052 -tflag108=4096 +flagi108=0 +tflag108=258 initx108=0 inity108=0 minx108=0 @@ -2718,23 +2718,23 @@ maxx108=0 maxy108=0 posx108=50 posy108=50 -sizx108=1200 -sizy108=900 +sizx108=800 +sizy108=600 maxfps108=0 initts108=0 winver108=0 maxres108=0 -title109=Virtua Fighter 2 (DEMO) -path109=D:\Games\vf2_demo\VF2DEMO.EXE +title109=Tomb Raider III +path109=D:\Games\Tomb Raider III\tomb3.exe module109= opengllib109= ver109=0 -coord109=0 -flag109=939524131 -flagg109=1207959664 +coord109=2 +flag109=134217760 +flagg109=1241514000 flagh109=20 flagi109=0 -tflag109=0 +tflag109=322 initx109=0 inity109=0 minx109=0 @@ -2749,17 +2749,17 @@ maxfps109=0 initts109=0 winver109=0 maxres109=0 -title110=Virtua Fighter PC -path110=D:\Games\Virtua Fighter\VFPC.EXE +title110=Total Annihilation Kingdoms +path110=D:\Games\Total Annihilation Kingdoms\Kingdoms.exe module110= opengllib110= -ver110=0 +ver110=7 coord110=0 -flag110=402653218 -flagg110=1224736784 -flagh110=33562644 -flagi110=0 -tflag110=290 +flag110=671105058 +flagg110=1207959552 +flagh110=20 +flagi110=4 +tflag110=6162 initx110=0 inity110=0 minx110=0 @@ -2773,18 +2773,18 @@ sizy110=600 maxfps110=0 initts110=0 winver110=0 -maxres110=2 -title111=Warcraft 2 Battlenet Ed -path111=D:\Games\Warcraft 2 Battlenet Ed\Warcraft II BNE.exe +maxres110=0 +title111=Unreal Tournament +path111=D:\Games\Unreal Tournament\System\UnrealTournament.exe module111= opengllib111= ver111=0 coord111=0 -flag111=134217762 -flagg111=1210122240 -flagh111=148 -flagi111=12 -tflag111=0 +flag111=-2013265886 +flagg111=1209073680 +flagh111=20 +flagi111=2052 +tflag111=4096 initx111=0 inity111=0 minx111=0 @@ -2793,23 +2793,23 @@ maxx111=0 maxy111=0 posx111=50 posy111=50 -sizx111=800 -sizy111=600 +sizx111=1200 +sizy111=900 maxfps111=0 initts111=0 winver111=0 maxres111=0 -title112=Wargasm -path112=D:\Games\Wargasm\tank.exe +title112=Virtua Fighter 2 (DEMO) +path112=D:\Games\vf2_demo\VF2DEMO.EXE module112= opengllib112= ver112=0 -coord112=2 -flag112=671088672 -flagg112=1207959696 -flagh112=65556 +coord112=0 +flag112=939524131 +flagg112=1207959664 +flagh112=20 flagi112=0 -tflag112=6162 +tflag112=0 initx112=0 inity112=0 minx112=0 @@ -2824,17 +2824,17 @@ maxfps112=0 initts112=0 winver112=0 maxres112=0 -title113=Warlords Battlecry II (DEMO) -path113=D:\Games\Warlords Battlecry II Demo\Battlecry II Demo.exe +title113=Virtua Fighter PC +path113=D:\Games\Virtua Fighter\VFPC.EXE module113= opengllib113= ver113=0 -coord113=2 -flag113=134217762 -flagg113=1207959568 -flagh113=22 +coord113=0 +flag113=402653218 +flagg113=1224736784 +flagh113=33562644 flagi113=0 -tflag113=258 +tflag113=290 initx113=0 inity113=0 minx113=0 @@ -2848,18 +2848,18 @@ sizy113=600 maxfps113=0 initts113=0 winver113=0 -maxres113=0 -title114=Whiteout -path114=D:\Games\Whiteout\Whiteout.exe +maxres113=2 +title114=Warcraft 2 Battlenet Ed +path114=D:\Games\Warcraft 2 Battlenet Ed\Warcraft II BNE.exe module114= opengllib114= ver114=0 coord114=0 -flag114=402653217 -flagg114=1207959552 -flagh114=20 -flagi114=0 -tflag114=66 +flag114=134217762 +flagg114=1210122240 +flagh114=148 +flagi114=12 +tflag114=0 initx114=0 inity114=0 minx114=0 @@ -2868,23 +2868,23 @@ maxx114=0 maxy114=0 posx114=50 posy114=50 -sizx114=640 -sizy114=480 +sizx114=800 +sizy114=600 maxfps114=0 initts114=0 winver114=0 maxres114=0 -title115=Wildfire -path115=D:\Games\Wildfire\Wildfire.exe +title115=Wargasm +path115=D:\Games\Wargasm\tank.exe module115= opengllib115= ver115=0 -coord115=0 -flag115=-1476392958 -flagg115=1210122240 -flagh115=20 -flagi115=12 -tflag115=0 +coord115=2 +flag115=671088672 +flagg115=1207959696 +flagh115=65556 +flagi115=0 +tflag115=6162 initx115=0 inity115=0 minx115=0 @@ -2899,17 +2899,17 @@ maxfps115=0 initts115=0 winver115=0 maxres115=0 -title116=Worms Pinball -path116=D:\Games\Worms Pinball\WPIB.exe +title116=Warlords Battlecry II (DEMO) +path116=D:\Games\Warlords Battlecry II Demo\Battlecry II Demo.exe module116= opengllib116= -ver116=1 -coord116=0 +ver116=0 +coord116=2 flag116=134217762 flagg116=1207959568 -flagh116=20 -flagi116=4 -tflag116=0 +flagh116=22 +flagi116=0 +tflag116=258 initx116=0 inity116=0 minx116=0 @@ -2924,17 +2924,17 @@ maxfps116=0 initts116=0 winver116=0 maxres116=0 -title117=Zanzarah -path117=D:\Games\Zanzarah\System\zanthp.exe +title117=Whiteout +path117=D:\Games\Whiteout\Whiteout.exe module117= opengllib117= ver117=0 coord117=0 -flag117=679477280 +flag117=402653217 flagg117=1207959552 flagh117=20 flagi117=0 -tflag117=0 +tflag117=66 initx117=0 inity117=0 minx117=0 @@ -2943,23 +2943,23 @@ maxx117=0 maxy117=0 posx117=50 posy117=50 -sizx117=800 -sizy117=600 +sizx117=640 +sizy117=480 maxfps117=0 initts117=0 winver117=0 maxres117=0 -title118=Zax the Alien Hunter (DEMO) -path118=D:\Games\ZaxDemo\Zax.exe +title118=Wildfire +path118=D:\Games\Wildfire\Wildfire.exe module118= opengllib118= ver118=0 -coord118=2 -flag118=-2011168734 -flagg118=1209008144 +coord118=0 +flag118=-1476392958 +flagg118=1210122240 flagh118=20 -flagi118=0 -tflag118=258 +flagi118=12 +tflag118=0 initx118=0 inity118=0 minx118=0 @@ -2974,14 +2974,14 @@ maxfps118=0 initts118=0 winver118=0 maxres118=0 -title119=ZPC Zero Population Count -path119=D:\Games\ZPC\ZPC.EXE +title119=Worms Pinball +path119=D:\Games\Worms Pinball\WPIB.exe module119= opengllib119= -ver119=0 +ver119=1 coord119=0 flag119=134217762 -flagg119=1207959552 +flagg119=1207959568 flagh119=20 flagi119=4 tflag119=0 @@ -2999,6 +2999,81 @@ maxfps119=0 initts119=0 winver119=0 maxres119=0 +title120=Zanzarah +path120=D:\Games\Zanzarah\System\zanthp.exe +module120= +opengllib120= +ver120=0 +coord120=0 +flag120=679477280 +flagg120=1207959552 +flagh120=20 +flagi120=0 +tflag120=0 +initx120=0 +inity120=0 +minx120=0 +miny120=0 +maxx120=0 +maxy120=0 +posx120=50 +posy120=50 +sizx120=800 +sizy120=600 +maxfps120=0 +initts120=0 +winver120=0 +maxres120=0 +title121=Zax the Alien Hunter (DEMO) +path121=D:\Games\ZaxDemo\Zax.exe +module121= +opengllib121= +ver121=0 +coord121=2 +flag121=-2011168734 +flagg121=1209008144 +flagh121=20 +flagi121=0 +tflag121=258 +initx121=0 +inity121=0 +minx121=0 +miny121=0 +maxx121=0 +maxy121=0 +posx121=50 +posy121=50 +sizx121=800 +sizy121=600 +maxfps121=0 +initts121=0 +winver121=0 +maxres121=0 +title122=ZPC Zero Population Count +path122=D:\Games\ZPC\ZPC.EXE +module122= +opengllib122= +ver122=0 +coord122=0 +flag122=134217762 +flagg122=1207959552 +flagh122=20 +flagi122=4 +tflag122=0 +initx122=0 +inity122=0 +minx122=0 +miny122=0 +maxx122=0 +maxy122=0 +posx122=50 +posy122=50 +sizx122=800 +sizy122=600 +maxfps122=0 +initts122=0 +winver122=0 +maxres122=0 [window] posx=1035 posy=288 diff --git a/build/exports/Affari Tuoi.dxw b/build/exports/Affari Tuoi.dxw new file mode 100644 index 0000000..0546937 --- /dev/null +++ b/build/exports/Affari Tuoi.dxw @@ -0,0 +1,26 @@ +[target] +title0=Affari Tuoi +path0=D:\Games\affari tuoi\Affari Tuoi\DOND.exe +module0= +opengllib0= +ver0=9 +coord0=0 +flag0=536870914 +flagg0=1207959568 +flagh0=16 +flagi0=4 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=4 diff --git a/build/exports/Agassi Tennis Generation.dxw b/build/exports/Agassi Tennis Generation.dxw new file mode 100644 index 0000000..f189c97 --- /dev/null +++ b/build/exports/Agassi Tennis Generation.dxw @@ -0,0 +1,26 @@ +[target] +title0=Agassi Tennis Generation +path0=D:\Games\Agassi Tennis Generation\AGASSI.exe +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=671096866 +flagg0=1207959552 +flagh0=65556 +flagi0=4 +tflag0=6147 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 diff --git a/build/exports/LEGO Star Wars.dxw b/build/exports/LEGO Star Wars.dxw new file mode 100644 index 0000000..90e5963 --- /dev/null +++ b/build/exports/LEGO Star Wars.dxw @@ -0,0 +1,26 @@ +[target] +title0=LEGO Star Wars +path0=D:\Games\LEGO Star Wars Game\LegoStarwars.crack.exe +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134217762 +flagg0=1207959552 +flagh0=20 +flagi0=4 +tflag0=64 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 diff --git a/build/exports/Legacy of Kain Soul Reaver (GOG).dxw b/build/exports/Legacy of Kain Soul Reaver (GOG).dxw new file mode 100644 index 0000000..ad09e92 --- /dev/null +++ b/build/exports/Legacy of Kain Soul Reaver (GOG).dxw @@ -0,0 +1,26 @@ +[target] +title0=Legacy of Kain Soul Reaver (GOG) +path0=D:\Games\Legacy of Kain Soul Reaver\kain2.exe +module0= +opengllib0= +ver0=7 +coord0=0 +flag0=671088672 +flagg0=134217728 +flagh0=20 +flagi0=1028 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 diff --git a/build/exports/Syberia 2.dxw b/build/exports/Syberia 2.dxw new file mode 100644 index 0000000..80d639e --- /dev/null +++ b/build/exports/Syberia 2.dxw @@ -0,0 +1,26 @@ +[target] +title0=Syberia 2 +path0=D:\Games\Syberia 2\Syberia2.exe +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134234147 +flagg0=1207959552 +flagh0=20 +flagi0=4 +tflag0=64 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 diff --git a/build/exports/Syberia.dxw b/build/exports/Syberia.dxw new file mode 100644 index 0000000..b27650c --- /dev/null +++ b/build/exports/Syberia.dxw @@ -0,0 +1,26 @@ +[target] +title0=Syberia +path0=D:\Games\Syberia\Syberia.exe +module0=Syberia ck2_3d ck2 +opengllib0= +ver0=0 +coord0=2 +flag0=1610694673 +flagg0=1207959576 +flagh0=20 +flagi0=4 +tflag0=6418 +initx0=300 +inity0=300 +minx0=0 +miny0=0 +maxx0=800 +maxy0=600 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 diff --git a/build/exports/Thief the Dark Project GOLD (GOG).dxw b/build/exports/Thief the Dark Project GOLD (GOG).dxw new file mode 100644 index 0000000..a20eb17 --- /dev/null +++ b/build/exports/Thief the Dark Project GOLD (GOG).dxw @@ -0,0 +1,26 @@ +[target] +title0=Thief the Dark Project GOLD (GOG) +path0=D:\Games\Thief Gold (GOG)\THIEF.EXE +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=256 +flagg0=1207959568 +flagh0=20 +flagi0=4 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 diff --git a/build/exports/Thief the Dark Project GOLD.dxw b/build/exports/Thief the Dark Project GOLD.dxw new file mode 100644 index 0000000..08bcc64 --- /dev/null +++ b/build/exports/Thief the Dark Project GOLD.dxw @@ -0,0 +1,26 @@ +[target] +title0=Thief the Dark Project GOLD +path0=D:\Games\Thief Gold\THIEF.EXE +module0= +opengllib0= +ver0=7 +coord0=0 +flag0=272 +flagg0=440401936 +flagh0=131612 +flagi0=4 +tflag0=9 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=1 +maxres0=-1 diff --git a/build/exports/Total Immersion Racing.dxw b/build/exports/Total Immersion Racing.dxw new file mode 100644 index 0000000..bd47b53 --- /dev/null +++ b/build/exports/Total Immersion Racing.dxw @@ -0,0 +1,26 @@ +[target] +title0=Total Immersion Racing +path0=D:\Games\TIR\game\Tir.exe +module0= +opengllib0= +ver0=8 +coord0=0 +flag0=134217762 +flagg0=1207959552 +flagh0=20 +flagi0=1028 +tflag0=6147 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index b50554f..e08a50c 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -376,5 +376,14 @@ eliminated "Disable HAL support", no longer necessary some incomplete work on gdi game handling added preliminary, incomplete (not working) glide handling -v2.02.54 +v2.02.55 added "Hide desktop background" video option + +v2.02.56 +hooked RegisterClassA API (useless so far...) +fixed bug in SendMessageW hooking: caused truncated text in window titles and form captions +fixed several d3d1-7 hooks: prevented some d3d games to properly work, i.e. "Thief the Dark Project" +fixed d3d GetDisplayMode to return virtual desktop size - fixed "Affari Tuoi", an italian game. +fixed some log messages + + diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 51bc0fa..dcb6398 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -80,6 +80,7 @@ HRESULT WINAPI extGetPalette(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *); HRESULT WINAPI extGetPixelFormat(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT); HRESULT WINAPI extGetSurfaceDesc1(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd); HRESULT WINAPI extGetSurfaceDesc2(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd); +HRESULT WINAPI extGetSurfaceDesc7(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd); // STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE; HRESULT WINAPI extLock(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, DWORD, HANDLE); HRESULT WINAPI extLockDir(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, DWORD, HANDLE); @@ -189,6 +190,8 @@ GetPalette_Type pGetPalette; GetPixelFormat_Type pGetPixelFormat; GetSurfaceDesc_Type pGetSurfaceDesc1; GetSurfaceDesc2_Type pGetSurfaceDesc4; +GetSurfaceDesc2_Type pGetSurfaceDesc7; + //Initialize IsLost_Type pIsLost; Lock_Type pLock; @@ -424,17 +427,30 @@ static void DescribeSurface(LPDIRECTDRAWSURFACE lpdds, int dxversion, char *labe int dwSize = (dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2); memset(&ddsd, 0, dwSize); ddsd.dwSize = dwSize; - if(dxversion<4){ + switch (dxversion){ + case 0: + case 1: + case 2: + case 3: if (pGetSurfaceDesc1) res=(*pGetSurfaceDesc1)(lpdds, (LPDDSURFACEDESC)&ddsd); else res=lpdds->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd); - } - else { + break; + case 4: + case 5: + case 6: if (pGetSurfaceDesc4) res=(*pGetSurfaceDesc4)((LPDIRECTDRAWSURFACE2)lpdds, &ddsd); else res=lpdds->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd); + break; + case 7: + if (pGetSurfaceDesc7) + res=(*pGetSurfaceDesc7)((LPDIRECTDRAWSURFACE2)lpdds, &ddsd); + else + res=lpdds->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd); + break; } if(res)return; OutTrace("Surface %s: ddsd=%x dxversion=%d ", label, lpdds, dxversion); @@ -1071,9 +1087,12 @@ static void HookDDSurfacePrim(LPDIRECTDRAWSURFACE *lplpdds, int dxversion) if (dxversion < 4) { SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc1, (void **)&pGetSurfaceDesc1, "GetSurfaceDesc(S1)"); } - else { + if((dxversion >= 4) && (dxversion < 7)) { SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc2, (void **)&pGetSurfaceDesc4, "GetSurfaceDesc(S4)"); } + if(dxversion == 7) { + SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc7, (void **)&pGetSurfaceDesc7, "GetSurfaceDesc(S7)"); + } // IDirectDrawSurface::SetClipper SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper, (void **)&pSetClipper, "SetClipper(S)"); // IDirectDrawSurface::SetColorKey @@ -1545,10 +1564,10 @@ HRESULT WINAPI extQueryInterfaceD(void *lpdd, REFIID riid, LPVOID *obp) dwLocalD3DVersion = 1; break; case 0x6aae1ec1: //Direct3D2 - dwLocalD3DVersion = 5; + dwLocalD3DVersion = 2; break; case 0xbb223240: //Direct3D3 - dwLocalD3DVersion = 6; + dwLocalD3DVersion = 3; break; case 0xf5049e77: //Direct3D7 dwLocalD3DVersion = 7; @@ -1582,8 +1601,8 @@ HRESULT WINAPI extQueryInterfaceD(void *lpdd, REFIID riid, LPVOID *obp) extern void HookDirect3DSession(LPDIRECTDRAW *, int); switch (dwLocalD3DVersion){ case 1: - case 5: - case 6: + case 2: + case 3: case 7: HookDirect3DSession((LPDIRECTDRAW *)obp, dwLocalD3DVersion); break; @@ -1799,7 +1818,7 @@ HRESULT WINAPI extSetDisplayMode1(LPDIRECTDRAW lpdd, HRESULT WINAPI extGetDisplayMode(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd) { - OutTraceDDRAW("GetDisplayMode: lpdd=%x lpddsd=%s\n", lpdd, lpddsd); + OutTraceDDRAW("GetDisplayMode: lpdd=%x lpddsd=%x\n", lpdd, lpddsd); (*pGetDisplayMode)(lpdd, lpddsd); if(dxw.dwFlags1 & EMULATESURFACE) { @@ -4391,6 +4410,25 @@ HRESULT WINAPI extGetSurfaceDesc2(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 l return DDERR_INVALIDOBJECT; } +HRESULT WINAPI extGetSurfaceDesc7(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd) +{ + if (!lpddsd->dwSize) lpddsd->dwSize = sizeof(DDSURFACEDESC2); // enforce correct dwSize value + switch(lpddsd->dwSize){ + case sizeof(DDSURFACEDESC): + if (pGetSurfaceDesc1) return extGetSurfaceDesc(pGetSurfaceDesc1, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd); + break; + case sizeof(DDSURFACEDESC2): + if (pGetSurfaceDesc7) return extGetSurfaceDesc((GetSurfaceDesc_Type)pGetSurfaceDesc7, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd); + break; + default: + OutTraceDW("GetSurfaceDesc: ASSERT - bad dwSize=%d lpdds=%x at %d\n", lpddsd->dwSize, lpdds, __LINE__); + return DDERR_INVALIDOBJECT; + } + OutTraceDW("GetSurfaceDesc: ASSERT - missing hook lpdds=%x dwSize=%d(%s) at %d\n", + lpdds, lpddsd->dwSize, lpddsd->dwSize==sizeof(DDSURFACEDESC)?"DDSURFACEDESC":"DDSURFACEDESC2", __LINE__); + return DDERR_INVALIDOBJECT; +} + HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE lpddPalette) { ULONG ref; @@ -4479,10 +4517,10 @@ HRESULT WINAPI extDDGetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDG HRESULT WINAPI extDDSetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDGAMMARAMP lpgr) { HRESULT ret; - OutTraceDDRAW("GetGammaRamp: dds=%x dwFlags=%x RGB=(%x,%x,%x)\n", lpdds, dwFlags, lpgr->red, lpgr->green, lpgr->blue); + OutTraceDDRAW("SetGammaRamp: dds=%x dwFlags=%x RGB=(%x,%x,%x)\n", lpdds, dwFlags, lpgr->red, lpgr->green, lpgr->blue); if (dxw.dwFlags2 & DISABLEGAMMARAMP) return DD_OK; ret=(*pDDSetGammaRamp)(lpdds, dwFlags, lpgr); - if(ret) OutTraceE("GetGammaRamp: ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); + if(ret) OutTraceE("SetGammaRamp: ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); return ret; } diff --git a/dll/dinput.cpp b/dll/dinput.cpp index 278e5d2..c007538 100644 --- a/dll/dinput.cpp +++ b/dll/dinput.cpp @@ -5,6 +5,7 @@ #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" +#include "dxhelper.h" typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *); typedef HRESULT (WINAPI *DirectInputCreate_Type)(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN); @@ -103,7 +104,10 @@ HRESULT WINAPI extDirectInputCreate(HINSTANCE hinst, dwversion); res = (*pDirectInputCreate)(hinst, dwversion, lplpdi, pu); - if(res) return res; + if(res) { + OutTraceE("DirectInputCreate: ERROR err=%x(%s)\n", res, ExplainDDError(res)); + return res; + } SetHook((void *)(**(DWORD **)lplpdi), extQueryInterfaceI, (void **)&pQueryInterfaceI, "QueryInterface(I)"); SetHook((void *)(**(DWORD **)lplpdi + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I)"); SetHook((void *)(**(DWORD **)lplpdi + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I)"); @@ -119,10 +123,14 @@ HRESULT WINAPI extDirectInputCreateEx(HINSTANCE hinst, dwversion, riidltf.Data1); res = (*pDirectInputCreateEx)(hinst, dwversion, riidltf, ppvout, pu); - if(res) return res; + if(res) { + OutTraceE("DirectInputCreateEx: ERROR err=%x(%s)\n", res, ExplainDDError(res)); + return res; + } SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I)"); SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I)"); - SetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceEx, (void **)pDICreateDeviceEx, "DICreateDeviceEx(I)"); + if(dwversion > 700) + SetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceEx, (void **)&pDICreateDeviceEx, "DICreateDeviceEx(I)"); return 0; } @@ -139,7 +147,7 @@ HRESULT WINAPI extQueryInterfaceI(void * lpdi, REFIID riid, LPVOID *obp) switch(riid.Data1){ case 0x5944E662: //DirectInput2A case 0x5944E663: //DirectInput2W - SetHook((void *)(**(DWORD **)obp + 12), extDICreateDevice, (void **)pDICreateDevice, "CreateDevice(I)"); + SetHook((void *)(**(DWORD **)obp + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I)"); SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I)"); break; } diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index cece195..547bfed 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 e4eef40..0ef3618 100644 --- a/dll/hd3d.cpp +++ b/dll/hd3d.cpp @@ -165,7 +165,7 @@ void dxwCopyProxyLib9() GetModuleFileName(GetModuleHandle("dxwnd"), sSourcePath, MAX_FILE_PATH); p=&sSourcePath[strlen(sSourcePath)-strlen("dxwnd.dll")]; strcpy(p, "d3d9.dll"); - OutTraceDW("HookInit: copy %s -> d3d9.dll\n", sSourcePath); + OutTraceD3D("HookInit: copy %s -> d3d9.dll\n", sSourcePath); CopyFile(sSourcePath, "d3d9.dll", FALSE); } @@ -198,7 +198,7 @@ void WINAPI voidDebugSetMute(void) BOOL WINAPI voidDisableD3DSpy(void) { - OutTraceD3D("DisableD3DSpy: SUPPRESSED\n"); + OutTraceDW("DisableD3DSpy: SUPPRESSED\n"); return FALSE; } @@ -512,7 +512,7 @@ void* WINAPI extDirect3DCreate8(UINT sdkversion) OutTraceD3D("Direct3DCreate8: sdkversion=%x\n", sdkversion); lpd3d = (*pDirect3DCreate8)(sdkversion); if(!lpd3d) { - OutTraceD3D("Direct3DCreate8: ERROR err=%d\n", GetLastError()); + OutTraceE("Direct3DCreate8: ERROR err=%d\n", GetLastError()); return 0; } dwD3DVersion = 8; @@ -534,7 +534,7 @@ void* WINAPI extDirect3DCreate9(UINT sdkversion) OutTraceD3D("Direct3DCreate9: sdkversion=%x\n", sdkversion); lpd3d = (*pDirect3DCreate9)(sdkversion); if(!lpd3d) { - OutTraceD3D("Direct3DCreate9: ERROR err=%d\n", GetLastError()); + OutTraceE("Direct3DCreate9: ERROR err=%d\n", GetLastError()); return 0; } @@ -558,7 +558,7 @@ HRESULT WINAPI extDirect3DCreate9Ex(UINT sdkversion, IDirect3D9Ex **ppD3D) OutTraceD3D("Direct3DCreate9Ex: sdkversion=%x\n", sdkversion); res = (*pDirect3DCreate9Ex)(sdkversion, ppD3D); if(res) { - OutTraceD3D("Direct3DCreate9Ex: ERROR res=%x(%s)\n", res, ExplainDDError(res)); + OutTraceE("Direct3DCreate9Ex: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } dwD3DVersion = 9; @@ -578,7 +578,7 @@ UINT WINAPI extGetAdapterCount8(void *lpd3d) { UINT res; res=(*pGetAdapterCount8)(lpd3d); - OutTraceDW("GetAdapterCount(8): count=%d\n", res); + OutTraceD3D("GetAdapterCount(8): count=%d\n", res); if(dxw.dwFlags2 & HIDEMULTIMONITOR) { OutTraceDW("GetAdapterCount: HIDEMULTIMONITOR count=1\n"); res=1; @@ -590,7 +590,7 @@ UINT WINAPI extGetAdapterCount9(void *lpd3d) { UINT res; res=(*pGetAdapterCount9)(lpd3d); - OutTraceDW("GetAdapterCount(9): count=%d\n", res); + OutTraceD3D("GetAdapterCount(9): count=%d\n", res); if(dxw.dwFlags2 & HIDEMULTIMONITOR) { OutTraceDW("GetAdapterCount: HIDEMULTIMONITOR count=1\n"); res=1; @@ -638,13 +638,17 @@ HRESULT WINAPI extGetDisplayMode8(void *lpd3d, D3DDISPLAYMODE *pMode) { HRESULT res; res=(*pGetDisplayMode8)(lpd3d, pMode); - OutTraceD3D("DEBUG: GetDisplayMode(8): size=(%dx%d) RefreshRate=%d Format=%d\n", + OutTraceD3D("GetDisplayMode(8): size=(%dx%d) RefreshRate=%d Format=%d\n", pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format); if(dxw.dwFlags2 & KEEPASPECTRATIO){ pMode->Width=dxw.iSizX; pMode->Height=dxw.iSizY; - OutTraceD3D("DEBUG: GetDisplayMode(8): fixed size=(%dx%d)\n", pMode->Width, pMode->Height); } + else{ + pMode->Width = dxw.GetScreenWidth(); + pMode->Height = dxw.GetScreenHeight(); + } + OutTraceDW("GetDisplayMode(8): fixed size=(%dx%d)\n", pMode->Width, pMode->Height); return res; } @@ -652,13 +656,17 @@ HRESULT WINAPI extGetDisplayMode9(void *lpd3d, UINT iSwapChain, D3DDISPLAYMODE * { HRESULT res; res=(*pGetDisplayMode9)(lpd3d, iSwapChain, pMode); - OutTraceD3D("DEBUG: GetDisplayMode(9): SwapChain=%d size=(%dx%d) RefreshRate=%d Format=%d\n", + OutTraceD3D("GetDisplayMode(9): SwapChain=%d size=(%dx%d) RefreshRate=%d Format=%d\n", iSwapChain, pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format); if(dxw.dwFlags2 & KEEPASPECTRATIO){ pMode->Width=dxw.iSizX; pMode->Height=dxw.iSizY; - OutTraceD3D("DEBUG: GetDisplayMode(9): fixed size=(%dx%d)\n", pMode->Width, pMode->Height); } + else{ + pMode->Width = dxw.GetScreenWidth(); + pMode->Height = dxw.GetScreenHeight(); + } + OutTraceDW("GetDisplayMode(9): fixed size=(%dx%d)\n", pMode->Width, pMode->Height); return res; } @@ -684,13 +692,17 @@ HRESULT WINAPI extGetAdapterDisplayMode8(void *lpd3d, UINT Adapter, D3DDISPLAYMO { HRESULT res; res=(*pGetAdapterDisplayMode8)(lpd3d, Adapter, pMode); - OutTraceD3D("DEBUG: GetAdapterDisplayMode(8): size=(%dx%d) RefreshRate=%d Format=%d\n", + OutTraceD3D("GetAdapterDisplayMode(8): size=(%dx%d) RefreshRate=%d Format=%d\n", pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format); if(dxw.dwFlags2 & KEEPASPECTRATIO){ pMode->Width=dxw.iSizX; pMode->Height=dxw.iSizY; - OutTraceDW("DEBUG: GetAdapterDisplayMode(8): fixed size=(%dx%d)\n", pMode->Width, pMode->Height); } + else{ + pMode->Width = dxw.GetScreenWidth(); + pMode->Height = dxw.GetScreenHeight(); + } + OutTraceDW("GetAdapterDisplayMode(8): fixed size=(%dx%d)\n", pMode->Width, pMode->Height); return res; } @@ -698,13 +710,17 @@ HRESULT WINAPI extGetAdapterDisplayMode9(void *lpd3d, UINT Adapter, D3DDISPLAYMO { HRESULT res; res=(*pGetAdapterDisplayMode9)(lpd3d, Adapter, pMode); - OutTraceD3D("DEBUG: GetAdapterDisplayMode(9): size=(%dx%d) RefreshRate=%d Format=%d\n", + OutTraceD3D("GetAdapterDisplayMode(9): size=(%dx%d) RefreshRate=%d Format=%d\n", pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format); if(dxw.dwFlags2 & KEEPASPECTRATIO){ pMode->Width=dxw.iSizX; pMode->Height=dxw.iSizY; - OutTraceDW("DEBUG: GetAdapterDisplayMode(9): fixed size=(%dx%d)\n", pMode->Width, pMode->Height); } + else{ + pMode->Width = dxw.GetScreenWidth(); + pMode->Height = dxw.GetScreenHeight(); + } + OutTraceDW("GetAdapterDisplayMode(9): fixed size=(%dx%d)\n", pMode->Width, pMode->Height); return res; } @@ -726,7 +742,7 @@ HRESULT WINAPI extGetAdapterDisplayMode9(void *lpd3d, UINT Adapter, D3DDISPLAYMO //} HRESULT WINAPI extProbe(void *lpd3dd) { - OutTrace("Probe: %x\n", lpd3dd); + OutTraceD3D("Probe: d3dd=%x\n", lpd3dd); return 0; } @@ -762,7 +778,7 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype, OutTraceDW("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 - OutTraceDW("CreateDevice: CreateWindowEx ERROR err=%d\n", GetLastError()); + OutTraceE("CreateDevice: CreateWindowEx ERROR err=%d\n", GetLastError()); dxw.SethWnd(hfocuswindow, dxw.GethWnd()); } @@ -848,6 +864,9 @@ HRESULT WINAPI extCreateDeviceEx(void *lpd3d, UINT adapter, D3DDEVTYPE devicetyp D3DDISPLAYMODE mode; int Windowed; + OutTraceD3D("CreateDeviceEx: D3DVersion=%d lpd3d=%x adapter=%x hFocusWnd=%x behavior=%x, size=(%d,%d)\n", + dwD3DVersion, lpd3d, adapter, hfocuswindow, behaviorflags, ppresentparam->BackBufferWidth, ppresentparam->BackBufferHeight); + memcpy(param, ppresentparam, 56); dxw.SethWnd(hfocuswindow); dxw.SetScreenSize(param[0], param[1]); @@ -947,6 +966,8 @@ HRESULT WINAPI extCreateAdditionalSwapChain(void *lpd3d, D3DPRESENT_PARAMETERS * D3DDISPLAYMODE mode; int Windowed; + OutTraceD3D("CreateAdditionalSwapChain: d3d=%x\n", lpd3d); + memcpy(param, pPresentationParameters, (dwD3DVersion == 9)?56:52); dxw.SetScreenSize(param[0], param[1]); AdjustWindowFrame(dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight()); @@ -1103,7 +1124,7 @@ HRESULT WINAPI extD3D11CreateDevice( //return 0x887a0004; res=(*pD3D11CreateDevice)(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, ppDevice, pFeatureLevel, ppImmediateContext); if(res){ - OutTraceD3D("D3D11CreateDevice: ret=%x\n", res); + OutTraceE("D3D11CreateDevice: ret=%x\n", res); return res; } SetHook((void *)(*(DWORD *)ppImmediateContext + 148), extRSSetViewports, (void **)&pRSSetViewports, "RSSetViewports(D11)"); diff --git a/dll/hd3d7.cpp b/dll/hd3d7.cpp index 5824da9..50d38aa 100644 --- a/dll/hd3d7.cpp +++ b/dll/hd3d7.cpp @@ -8,9 +8,8 @@ // exported API -DWORD gD3DVersion; // quick & dirty .... -//#undef OutTraceDW -//#define OutTraceDW OutTrace +//#undef OutTraceD3D +//#define OutTraceD3D OutTrace typedef HRESULT (WINAPI *Direct3DCreateDevice_Type)(GUID FAR *, LPDIRECT3D, LPDIRECTDRAWSURFACE, LPDIRECT3D *, LPUNKNOWN); typedef HRESULT (WINAPI *Direct3DCreate_Type)(UINT, LPDIRECT3D *, LPUNKNOWN); @@ -21,68 +20,125 @@ Direct3DCreate_Type pDirect3DCreate = NULL; HRESULT WINAPI extDirect3DCreateDevice(GUID FAR *, LPDIRECT3D, LPDIRECTDRAWSURFACE, LPDIRECT3D *, LPUNKNOWN); HRESULT WINAPI extDirect3DCreate(UINT, LPDIRECT3D *, LPUNKNOWN); -// IDirect3D interfaces +// IDirect3D-n interfaces +typedef HRESULT (WINAPI *QueryInterfaceD3_Type)(void *, REFIID, LPVOID *); typedef HRESULT (WINAPI *Initialize_Type)(void *); typedef HRESULT (WINAPI *EnumDevices_Type)(void *, LPD3DENUMDEVICESCALLBACK, LPVOID); +typedef HRESULT (WINAPI *EnumDevices7_Type)(void *, LPD3DENUMDEVICESCALLBACK7, LPVOID); typedef HRESULT (WINAPI *CreateLight_Type)(void *, LPDIRECT3DLIGHT *, IUnknown *); typedef HRESULT (WINAPI *CreateMaterial_Type)(void *, LPDIRECT3DMATERIAL *, IUnknown *); -typedef HRESULT (WINAPI *CreateViewport_Type)(void *, LPDIRECT3DVIEWPORT *, IUnknown *); +typedef HRESULT (WINAPI *CreateViewport1_Type)(void *, LPDIRECT3DVIEWPORT *, IUnknown *); +typedef HRESULT (WINAPI *CreateViewport2_Type)(void *, LPDIRECT3DVIEWPORT2 *, IUnknown *); +typedef HRESULT (WINAPI *CreateViewport3_Type)(void *, LPDIRECT3DVIEWPORT3 *, IUnknown *); typedef HRESULT (WINAPI *FindDevice_Type)(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT); typedef HRESULT (WINAPI *CreateDevice2_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 *); typedef HRESULT (WINAPI *CreateDevice3_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE4, LPDIRECT3DDEVICE3 *, LPUNKNOWN); +typedef HRESULT (WINAPI *CreateDevice7_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE7, LPDIRECT3DDEVICE7 *); -typedef HRESULT (WINAPI *InitializeVP_Type)(void *, LPDIRECT3D); -typedef HRESULT (WINAPI *SetViewport_Type)(void *, LPD3DVIEWPORT); -typedef HRESULT (WINAPI *GetViewport_Type)(void *, LPD3DVIEWPORT); -typedef HRESULT (WINAPI *QueryInterfaceD3_Type)(void *, REFIID, LPVOID *); - -typedef HRESULT (WINAPI *D3DInitialize_Type)(void *, LPDIRECT3D , LPGUID, LPD3DDEVICEDESC); -typedef HRESULT (WINAPI *D3DGetCaps_Type)(void *, LPD3DDEVICEDESC ,LPD3DDEVICEDESC); - -typedef HRESULT (WINAPI *SetRenderState3_Type)(void *, D3DRENDERSTATETYPE, DWORD); -typedef HRESULT (WINAPI *Scene3_Type)(void *); -typedef HRESULT (WINAPI *GetCaps3_Type)(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC); -typedef HRESULT (WINAPI *SetLightState_Type)(void *, D3DLIGHTSTATETYPE, DWORD); - +QueryInterfaceD3_Type pQueryInterfaceD3 = NULL; Initialize_Type pInitialize = NULL; EnumDevices_Type pEnumDevices = NULL; +EnumDevices7_Type pEnumDevices7 = NULL; CreateLight_Type pCreateLight = NULL; CreateMaterial_Type pCreateMaterial = NULL; -CreateViewport_Type pCreateViewport = NULL; +CreateViewport1_Type pCreateViewport1 = NULL; +CreateViewport2_Type pCreateViewport2 = NULL; +CreateViewport3_Type pCreateViewport3 = NULL; FindDevice_Type pFindDevice = NULL; CreateDevice2_Type pCreateDevice2 = NULL; CreateDevice3_Type pCreateDevice3 = NULL; +CreateDevice7_Type pCreateDevice7 = NULL; -InitializeVP_Type pInitializeVP = NULL; -SetViewport_Type pSetViewport = NULL; -GetViewport_Type pGetViewport = NULL; -QueryInterfaceD3_Type pQueryInterfaceD3 = NULL; +// Direct3DDevice-n interfaces -SetRenderState3_Type pSetRenderState2 = NULL; -SetRenderState3_Type pSetRenderState3 = NULL; +typedef HRESULT (WINAPI *D3DInitialize_Type)(void *, LPDIRECT3D , LPGUID, LPD3DDEVICEDESC); +typedef HRESULT (WINAPI *D3DGetCaps_Type)(void *, LPD3DDEVICEDESC ,LPD3DDEVICEDESC); +typedef HRESULT (WINAPI *D3DGetCaps3_Type)(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC); +typedef HRESULT (WINAPI *AddViewport1_Type)(void *, LPDIRECT3DVIEWPORT); +typedef HRESULT (WINAPI *AddViewport2_Type)(void *, LPDIRECT3DVIEWPORT2); +typedef HRESULT (WINAPI *AddViewport3_Type)(void *, LPDIRECT3DVIEWPORT3); +typedef HRESULT (WINAPI *Scene3_Type)(void *); // BeginScene, EndScene +typedef HRESULT (WINAPI *SetRenderState3_Type)(void *, D3DRENDERSTATETYPE, DWORD); +typedef HRESULT (WINAPI *GetViewport7_Type)(void *, LPD3DVIEWPORT7); +typedef HRESULT (WINAPI *SetViewport7_Type)(void *, LPD3DVIEWPORT7); +typedef HRESULT (WINAPI *SetLightState_Type)(void *, D3DLIGHTSTATETYPE, DWORD); +typedef HRESULT (WINAPI *GetCurrentViewport2_Type)(void *, LPDIRECT3DVIEWPORT2 *); +typedef HRESULT (WINAPI *SetCurrentViewport2_Type)(void *, LPDIRECT3DVIEWPORT2); +typedef HRESULT (WINAPI *GetCurrentViewport3_Type)(void *, LPDIRECT3DVIEWPORT3 *); +typedef HRESULT (WINAPI *SetCurrentViewport3_Type)(void *, LPDIRECT3DVIEWPORT3); + +D3DInitialize_Type pD3DInitialize = NULL; +D3DGetCaps_Type pD3DGetCaps = NULL; +D3DGetCaps3_Type pGetCaps3 = NULL; +AddViewport1_Type pAddViewport1 = NULL; +AddViewport2_Type pAddViewport2 = NULL; +AddViewport3_Type pAddViewport3 = NULL; Scene3_Type pBeginScene1 = NULL; Scene3_Type pBeginScene2 = NULL; Scene3_Type pBeginScene3 = NULL; Scene3_Type pEndScene1 = NULL; Scene3_Type pEndScene2 = NULL; Scene3_Type pEndScene3 = NULL; - -GetCaps3_Type pGetCaps3 = NULL; - +SetRenderState3_Type pSetRenderState2 = NULL; +SetRenderState3_Type pSetRenderState3 = NULL; +GetViewport7_Type pGetViewport7 = NULL; +SetViewport7_Type pSetViewport7 = NULL; SetLightState_Type pSetLightState3 = NULL; +GetCurrentViewport2_Type pGetCurrentViewport2 = NULL; +SetCurrentViewport2_Type pSetCurrentViewport2 = NULL; +GetCurrentViewport3_Type pGetCurrentViewport3 = NULL; +SetCurrentViewport3_Type pSetCurrentViewport3 = NULL; + +// IDirect3DViewport-n interfaces + +typedef HRESULT (WINAPI *InitializeVP_Type)(void *, LPDIRECT3D); +typedef HRESULT (WINAPI *SetViewport_Type)(void *, LPD3DVIEWPORT); +typedef HRESULT (WINAPI *GetViewport_Type)(void *, LPD3DVIEWPORT); +typedef HRESULT (WINAPI *GetViewport2_Type)(void *, LPD3DVIEWPORT); +typedef HRESULT (WINAPI *SetViewport2_Type)(void *, LPD3DVIEWPORT); +typedef HRESULT (WINAPI *GetViewport3_Type)(void *, LPD3DVIEWPORT); +typedef HRESULT (WINAPI *SetViewport3_Type)(void *, LPD3DVIEWPORT); +typedef HRESULT (WINAPI *GetViewport2_3_Type)(void *, LPD3DVIEWPORT2); +typedef HRESULT (WINAPI *SetViewport2_3_Type)(void *, LPD3DVIEWPORT2); +typedef HRESULT (WINAPI *DeleteViewport1_Type)(void *, LPDIRECT3DVIEWPORT); +typedef HRESULT (WINAPI *NextViewport1_Type)(void *, LPDIRECT3DVIEWPORT, LPDIRECT3DVIEWPORT *, DWORD); +typedef HRESULT (WINAPI *DeleteViewport2_Type)(void *, LPDIRECT3DVIEWPORT2); +typedef HRESULT (WINAPI *NextViewport2_Type)(void *, LPDIRECT3DVIEWPORT2, LPDIRECT3DVIEWPORT2 *, DWORD); + +InitializeVP_Type pInitializeVP = NULL; +SetViewport_Type pSetViewport = NULL; +GetViewport_Type pGetViewport = NULL; +GetViewport2_Type pGetViewport2 = NULL; +SetViewport2_Type pSetViewport2 = NULL; +GetViewport2_3_Type pGetViewport2_3 = NULL; +SetViewport2_3_Type pSetViewport2_3 = NULL; +GetViewport3_Type pGetViewport3 = NULL; +SetViewport3_Type pSetViewport3 = NULL; +DeleteViewport1_Type pDeleteViewport1 = NULL; +NextViewport1_Type pNextViewport1 = NULL; +DeleteViewport2_Type pDeleteViewport2 = NULL; +NextViewport2_Type pNextViewport2 = NULL; + + -D3DInitialize_Type pD3DInitialize = NULL; -D3DGetCaps_Type pD3DGetCaps = NULL; HRESULT WINAPI extInitialize(void *); HRESULT WINAPI extEnumDevices(void *, LPD3DENUMDEVICESCALLBACK, LPVOID); +HRESULT WINAPI extEnumDevices7(void *, LPD3DENUMDEVICESCALLBACK7, LPVOID); HRESULT WINAPI extCreateLight(void *, LPDIRECT3DLIGHT *, IUnknown *); HRESULT WINAPI extCreateMaterial(void *, LPDIRECT3DMATERIAL *, IUnknown *); -HRESULT WINAPI extCreateViewport(void *, LPDIRECT3DVIEWPORT *, IUnknown *); +HRESULT WINAPI extCreateViewport1(void *, LPDIRECT3DVIEWPORT *, IUnknown *); +HRESULT WINAPI extCreateViewport2(void *, LPDIRECT3DVIEWPORT2 *, IUnknown *); +HRESULT WINAPI extCreateViewport3(void *, LPDIRECT3DVIEWPORT3 *, IUnknown *); HRESULT WINAPI extFindDevice(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT); HRESULT WINAPI extCreateDevice2(void *, REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 *); HRESULT WINAPI extCreateDevice3(void *, REFCLSID, LPDIRECTDRAWSURFACE4, LPDIRECT3DDEVICE3 *, LPUNKNOWN); +HRESULT WINAPI extCreateDevice7(void *, REFCLSID, LPDIRECTDRAWSURFACE7, LPDIRECT3DDEVICE7 *); +HRESULT WINAPI extDeleteViewport1(void *, LPDIRECT3DVIEWPORT); +HRESULT WINAPI extNextViewport1(void *, LPDIRECT3DVIEWPORT, LPDIRECT3DVIEWPORT *, DWORD); +HRESULT WINAPI extDeleteViewport2(void *, LPDIRECT3DVIEWPORT2); +HRESULT WINAPI extNextViewport2(void *, LPDIRECT3DVIEWPORT2, LPDIRECT3DVIEWPORT2 *, DWORD); HRESULT WINAPI extInitializeVP(void *, LPDIRECT3D); HRESULT WINAPI extSetViewport(void *, LPD3DVIEWPORT); @@ -102,6 +158,21 @@ HRESULT WINAPI extBeginScene3(void *); HRESULT WINAPI extEndScene3(void *); HRESULT WINAPI extGetCaps3(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC); HRESULT WINAPI extSetLightState3(void *d3dd, D3DLIGHTSTATETYPE d3dls, DWORD t); +HRESULT WINAPI extSetViewport3(void *, LPD3DVIEWPORT); +HRESULT WINAPI extGetViewport3(void *, LPD3DVIEWPORT); +HRESULT WINAPI extAddViewport1(void *, LPDIRECT3DVIEWPORT); +HRESULT WINAPI extAddViewport2(void *, LPDIRECT3DVIEWPORT2); +HRESULT WINAPI extAddViewport3(void *, LPDIRECT3DVIEWPORT3); +HRESULT WINAPI extGetViewport2(void *, LPD3DVIEWPORT); +HRESULT WINAPI extSetViewport2(void *, LPD3DVIEWPORT); +HRESULT WINAPI extGetViewport2_3(void *, LPD3DVIEWPORT2); +HRESULT WINAPI extSetViewport2_3(void *, LPD3DVIEWPORT2); +HRESULT WINAPI extSetCurrentViewport2(void *, LPDIRECT3DVIEWPORT2); +HRESULT WINAPI extGetCurrentViewport2(void *, LPDIRECT3DVIEWPORT2 *); +HRESULT WINAPI extSetCurrentViewport3(void *, LPDIRECT3DVIEWPORT3); +HRESULT WINAPI extGetCurrentViewport3(void *, LPDIRECT3DVIEWPORT3 *); +HRESULT WINAPI extSetViewport7(void *, LPD3DVIEWPORT7); +HRESULT WINAPI extGetViewport7(void *, LPD3DVIEWPORT7); extern char *ExplainDDError(DWORD); @@ -111,8 +182,6 @@ int HookDirect3D7(HMODULE module, int version){ LPDIRECT3D lpd3d=NULL; HRESULT res; - gD3DVersion = version; - switch(version){ case 0: case 1: @@ -153,18 +222,131 @@ FARPROC Remap_d3d7_ProcAddress(LPCSTR proc, HMODULE hModule) { if (!strcmp(proc,"Direct3DCreate") && !pDirect3DCreate){ pDirect3DCreate=(Direct3DCreate_Type)(*pGetProcAddress)(hModule, proc); - OutTraceDW("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pDirect3DCreate); + OutTraceD3D("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pDirect3DCreate); return (FARPROC)extDirect3DCreate; } if (!strcmp(proc,"Direct3DCreateDevice") && !pDirect3DCreateDevice){ pDirect3DCreateDevice=(Direct3DCreateDevice_Type)(*pGetProcAddress)(hModule, proc); - OutTraceDW("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pDirect3DCreateDevice); + OutTraceD3D("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pDirect3DCreateDevice); return (FARPROC)extDirect3DCreateDevice; } // NULL -> keep the original call address return NULL; } +void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int d3dversion) +{ + OutTraceD3D("HookDirect3DSession: d3d=%x d3dversion=%d\n", *lplpdd, d3dversion); + + switch(d3dversion){ + case 1: + SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)"); + SetHook((void *)(**(DWORD **)lplpdd + 12), extInitialize, (void **)&pInitialize, "Initialize(1)"); + SetHook((void *)(**(DWORD **)lplpdd + 16), extEnumDevices, (void **)&pEnumDevices, "EnumDevices"); + SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateLight, (void **)&pCreateLight, "CreateLight"); + SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial"); + SetHook((void *)(**(DWORD **)lplpdd + 28), extCreateViewport1, (void **)&pCreateViewport1, "CreateViewport(1)"); + SetHook((void *)(**(DWORD **)lplpdd + 32), extFindDevice, (void **)&pFindDevice, "FindDevice"); + break; + case 2: + SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)"); + SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices(2)"); + SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateLight, (void **)&pCreateLight, "CreateLight"); + SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial"); + SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport2, (void **)&pCreateViewport2, "CreateViewport(2)"); + SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice, (void **)&pFindDevice, "FindDevice"); + SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice2, (void **)&pCreateDevice2, "CreateDevice(D3D2)"); + break; + case 3: + SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)"); + SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices(3)"); + SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateLight, (void **)&pCreateLight, "CreateLight"); + SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial"); + SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport3, (void **)&pCreateViewport3, "CreateViewport(3)"); + SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice, (void **)&pFindDevice, "FindDevice"); + SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice3, (void **)&pCreateDevice3, "CreateDevice(D3D3)"); + break; + case 7: + SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)"); + SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices7, (void **)&pEnumDevices7, "EnumDevices(7)"); + SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice7, (void **)&pCreateDevice7, "CreateDevice(D3D7)"); + break; + } +} + + +void HookDirect3DDevice(void **lpd3ddev, int d3dversion) +{ + OutTraceD3D("HookDirect3DDevice: d3ddev=%x d3dversion=%d\n", lpd3ddev, d3dversion); + + switch(d3dversion){ + case 1: + //SetHook((void *)(**(DWORD **)lpd3ddev + 16), extGetCaps1, (void **)&pGetCaps1, "GetCaps(1)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 36), extAddViewport1, (void **)&pAddViewport1, "AddViewport(1)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 40), extDeleteViewport1, (void **)&pDeleteViewport1, "DeleteViewport(1)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 44), extNextViewport1, (void **)&pNextViewport1, "NextViewport(1)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 76), extBeginScene1, (void **)&pBeginScene1, "BeginScene(1)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 80), extEndScene1, (void **)&pEndScene1, "EndScene(1)"); + break; + case 2: + //SetHook((void *)(**(DWORD **)lpd3ddev + 12), extGetCaps2, (void **)&pGetCaps2, "GetCaps(2)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 24), extAddViewport2, (void **)&pAddViewport2, "AddViewport(2)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 28), extDeleteViewport2, (void **)&pDeleteViewport2, "DeleteViewport(2)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 32), extNextViewport2, (void **)&pNextViewport2, "NextViewport(2)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 40), extBeginScene2, (void **)&pBeginScene2, "BeginScene(2)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 44), extEndScene2, (void **)&pEndScene2, "EndScene(2)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 52), extSetCurrentViewport2, (void **)&pSetCurrentViewport2, "SetCurrentViewport(2)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 56), extGetCurrentViewport2, (void **)&pGetCurrentViewport2, "GetCurrentViewport(2)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 92), extSetRenderState2, (void **)&pSetRenderState2, "SetRenderState(2)"); + if(pSetRenderState2){ + if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); + if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE); + } + break; + case 3: + SetHook((void *)(**(DWORD **)lpd3ddev + 12), extGetCaps3, (void **)&pGetCaps3, "GetCaps(3)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 20), extAddViewport3, (void **)&pAddViewport3, "AddViewport(3)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 36), extBeginScene3, (void **)&pBeginScene3, "BeginScene(3)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 40), extEndScene3, (void **)&pEndScene3, "EndScene(3)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 48), extSetCurrentViewport3, (void **)&pSetCurrentViewport3, "SetCurrentViewport(3)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 52), extGetCurrentViewport3, (void **)&pGetCurrentViewport3, "GetCurrentViewport(3)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 88), extSetRenderState3, (void **)&pSetRenderState3, "SetRenderState(3)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 96), extSetLightState3, (void **)&pSetLightState3, "SetLightState(3)"); + if(pSetRenderState3){ + if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); + if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE); + } + break; + case 7: + SetHook((void *)(**(DWORD **)lpd3ddev + 52), extSetViewport7, (void **)&pSetViewport7, "SetViewport(7)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 60), extGetViewport7, (void **)&pGetViewport7, "GetViewport(7)"); + break; + } +} + +HRESULT WINAPI extDirect3DCreate(UINT SDKVersion, LPDIRECT3D *lplpd3d, LPUNKNOWN pUnkOuter) +{ + HRESULT res; + UINT d3dversion; + + OutTraceD3D("Direct3DCreate: SDKVersion=%x UnkOuter=%x\n", SDKVersion, pUnkOuter); + res=(*pDirect3DCreate)(SDKVersion, lplpd3d, pUnkOuter); + + if(res) { + OutTraceE("Direct3DCreate ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + return res; + } + + d3dversion = 1; + if(SDKVersion >= 0x0500) d3dversion = 2; + if(SDKVersion >= 0x0600) d3dversion = 3; + if(SDKVersion >= 0x0700) d3dversion = 7; + + HookDirect3DSession((LPDIRECTDRAW *)lplpd3d, d3dversion); + OutTraceD3D("Direct3DCreate: d3d=%x\n", *lplpd3d); + return res; +} + HRESULT WINAPI extDirect3DCreateDevice(GUID FAR *lpGUID, LPDIRECT3D lpd3ddevice, LPDIRECTDRAWSURFACE surf, LPDIRECT3D *lplpd3ddevice, LPUNKNOWN pUnkOuter) { HRESULT res; @@ -174,112 +356,49 @@ HRESULT WINAPI extDirect3DCreateDevice(GUID FAR *lpGUID, LPDIRECT3D lpd3ddevice, res=(*pDirect3DCreateDevice)(lpGUID, lpd3ddevice, surf, lplpd3ddevice, pUnkOuter); if(res) OutTraceE("Direct3DCreateDevice ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("Direct3DCreateDevice: d3ddevice=%x\n", *lplpd3ddevice); + + switch(lpGUID->Data1){ + case 0x64108800: // IID_IDirect3DDevice + HookDirect3DDevice((void **)lplpd3ddevice, 1); + break; + case 0x93281501: // IID_IDirect3DDevice2 + HookDirect3DDevice((void **)lplpd3ddevice, 2); + break; + case 0xb0ab3b60: // IID_IDirect3DDevice3 + HookDirect3DDevice((void **)lplpd3ddevice, 3); + break; + case 0xf5049e79: // IID_IDirect3DDevice7 + HookDirect3DDevice((void **)lplpd3ddevice, 7); + break; + } return res; } -void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int dxversion) +void HookViewport(LPDIRECT3DVIEWPORT *lpViewport, int d3dversion) { - OutTraceDW("HookDirect3DSession: d3d=%x d3dversion=%d\n", *lplpdd, dxversion); + OutTraceD3D("HookViewport: Viewport=%x d3dversion=%d\n", *lpViewport, d3dversion); - gD3DVersion = dxversion; - - switch(dxversion){ + switch(d3dversion){ case 1: - SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)"); - SetHook((void *)(**(DWORD **)lplpdd + 12), extInitialize, (void **)&pInitialize, "Initialize"); - SetHook((void *)(**(DWORD **)lplpdd + 16), extEnumDevices, (void **)&pEnumDevices, "EnumDevices"); - SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateLight, (void **)&pCreateLight, "CreateLight"); - SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial"); - SetHook((void *)(**(DWORD **)lplpdd + 28), extCreateViewport, (void **)&pCreateViewport, "CreateViewport"); - SetHook((void *)(**(DWORD **)lplpdd + 32), extFindDevice, (void **)&pFindDevice, "FindDevice"); - break; - case 5: - SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)"); - SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices"); - SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateLight, (void **)&pCreateLight, "CreateLight"); - SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial"); - SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport, (void **)&pCreateViewport, "CreateViewport"); - SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice, (void **)&pFindDevice, "FindDevice"); - SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice2, (void **)&pCreateDevice2, "CreateDevice(D3D2)"); - break; - case 6: - SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)"); - SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices"); - SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateLight, (void **)&pCreateLight, "CreateLight"); - SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial"); - SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport, (void **)&pCreateViewport, "CreateViewport"); - SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice, (void **)&pFindDevice, "FindDevice"); - SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice3, (void **)&pCreateDevice3, "CreateDevice(D3D3)"); - break; - } -} - - -void HookDirect3DDevice(void **lpd3ddev, int dxversion) -{ - OutTraceDW("HookDirect3DDevice: d3ddev=%x d3dversion=%d\n", lpd3ddev, dxversion); - - gD3DVersion = dxversion; - - switch(dxversion){ - case 1: - //SetHook((void *)(**(DWORD **)lpd3ddev + 16), extGetCaps1, (void **)&pGetCaps1, "GetCaps(1)"); - SetHook((void *)(**(DWORD **)lpd3ddev + 76), extBeginScene1, (void **)&pBeginScene1, "BeginScene(1)"); - SetHook((void *)(**(DWORD **)lpd3ddev + 80), extEndScene1, (void **)&pEndScene1, "EndScene(1)"); + SetHook((void *)(**(DWORD **)lpViewport + 12), extInitializeVP, (void **)&pInitializeVP, "Initialize(VP1)"); + SetHook((void *)(**(DWORD **)lpViewport + 16), extGetViewport, (void **)&pGetViewport, "GetViewport(1)"); + SetHook((void *)(**(DWORD **)lpViewport + 20), extSetViewport, (void **)&pSetViewport, "SetViewport(1)"); break; case 2: - //SetHook((void *)(**(DWORD **)lpd3ddev + 12), extGetCaps2, (void **)&pGetCaps2, "GetCaps(2)"); - SetHook((void *)(**(DWORD **)lpd3ddev + 40), extBeginScene2, (void **)&pBeginScene2, "BeginScene(2)"); - SetHook((void *)(**(DWORD **)lpd3ddev + 44), extEndScene2, (void **)&pEndScene2, "EndScene(2)"); - SetHook((void *)(**(DWORD **)lpd3ddev + 92), extSetRenderState2, (void **)&pSetRenderState2, "SetRenderState(2)"); - if(pSetRenderState2){ - if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); - if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE); - } + SetHook((void *)(**(DWORD **)lpViewport + 12), extInitializeVP, (void **)&pInitializeVP, "Initialize(VP2)"); + SetHook((void *)(**(DWORD **)lpViewport + 16), extGetViewport, (void **)&pGetViewport, "GetViewport(2)"); + SetHook((void *)(**(DWORD **)lpViewport + 20), extSetViewport, (void **)&pSetViewport, "SetViewport(2)"); + SetHook((void *)(**(DWORD **)lpViewport + 64), extGetViewport2_3, (void **)&pGetViewport2_3, "GetViewport2(2)"); + SetHook((void *)(**(DWORD **)lpViewport + 68), extSetViewport2_3, (void **)&pSetViewport2_3, "SetViewport2(2)"); break; case 3: - SetHook((void *)(**(DWORD **)lpd3ddev + 12), extGetCaps3, (void **)&pGetCaps3, "GetCaps(3)"); - SetHook((void *)(**(DWORD **)lpd3ddev + 36), extBeginScene3, (void **)&pBeginScene3, "BeginScene(3)"); - SetHook((void *)(**(DWORD **)lpd3ddev + 40), extEndScene3, (void **)&pEndScene3, "EndScene(3)"); - SetHook((void *)(**(DWORD **)lpd3ddev + 88), extSetRenderState3, (void **)&pSetRenderState3, "SetRenderState(3)"); - SetHook((void *)(**(DWORD **)lpd3ddev + 96), extSetLightState3, (void **)&pSetLightState3, "SetLightState(3)"); - if(pSetRenderState3){ - if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); - if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE); - } + SetHook((void *)(**(DWORD **)lpViewport + 12), extInitializeVP, (void **)&pInitializeVP, "Initialize(VP3)"); + SetHook((void *)(**(DWORD **)lpViewport + 16), extGetViewport, (void **)&pGetViewport, "GetViewport(3)"); + SetHook((void *)(**(DWORD **)lpViewport + 20), extSetViewport, (void **)&pSetViewport, "SetViewport(3)"); + SetHook((void *)(**(DWORD **)lpViewport + 64), extGetViewport2_3, (void **)&pGetViewport2_3, "GetViewport2(3)"); + SetHook((void *)(**(DWORD **)lpViewport + 68), extSetViewport2_3, (void **)&pSetViewport2_3, "SetViewport2(3)"); break; - } -} - -HRESULT WINAPI extDirect3DCreate(UINT SDKVersion, LPDIRECT3D *lplpd3d, LPUNKNOWN pUnkOuter) -{ - HRESULT res; - - OutTraceD3D("Direct3DCreate: SDKVersion=%x UnkOuter=%x\n", SDKVersion, pUnkOuter); - res=(*pDirect3DCreate)(SDKVersion, lplpd3d, pUnkOuter); - - if(res) { - OutTraceE("Direct3DCreate ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - return res; - } - - HookDirect3DSession((LPDIRECTDRAW *)lplpd3d, SDKVersion); - OutTraceD3D("Direct3DCreate: d3d=%x\n", *lplpd3d); - return res; -} - -void HookViewport(LPDIRECT3DVIEWPORT *lpViewport, int dxversion) -{ - OutTraceDW("HookViewport: Viewport=%x d3dversion=%d\n", *lpViewport, dxversion); - - switch(dxversion){ - case 1: - case 5: - case 6: case 7: - SetHook((void *)(**(DWORD **)lpViewport + 12), extInitializeVP, (void **)&pInitializeVP, "Initialize(VP)"); - SetHook((void *)(**(DWORD **)lpViewport + 16), extGetViewport, (void **)&pGetViewport, "GetViewport"); - SetHook((void *)(**(DWORD **)lpViewport + 20), extSetViewport, (void **)&pSetViewport, "SetViewport"); break; } } @@ -294,28 +413,38 @@ HRESULT WINAPI extQueryInterfaceD3(void *lpd3d, REFIID riid, LPVOID *ppvObj) res=(*pQueryInterfaceD3)(lpd3d, riid, ppvObj); switch(riid.Data1){ case 0x3BBA0080: d3dversion=1; break; - case 0x6aae1ec1: d3dversion=5; break; - case 0xbb223240: d3dversion=6; break; + case 0x6aae1ec1: d3dversion=2; break; + case 0xbb223240: d3dversion=3; break; case 0xf5049e77: d3dversion=7; break; } - if(d3dversion) OutTraceDW("QueryInterface(D3): hooking version=%d\n", d3dversion); + if(d3dversion) OutTraceD3D("QueryInterface(D3): hooking version=%d\n", d3dversion); switch(d3dversion){ case 1: SetHook((void *)(**(DWORD **)ppvObj + 12), extInitialize, (void **)&pInitialize, "Initialize"); SetHook((void *)(**(DWORD **)ppvObj + 16), extEnumDevices, (void **)&pEnumDevices, "EnumDevices"); SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateLight, (void **)&pCreateLight, "CreateLight"); SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial"); - SetHook((void *)(**(DWORD **)ppvObj + 28), extCreateViewport, (void **)&pCreateViewport, "CreateViewport"); + SetHook((void *)(**(DWORD **)ppvObj + 28), extCreateViewport1, (void **)&pCreateViewport1, "CreateViewport(1)"); SetHook((void *)(**(DWORD **)ppvObj + 32), extFindDevice, (void **)&pFindDevice, "FindDevice"); break; - case 5: - case 6: + case 2: SetHook((void *)(**(DWORD **)ppvObj + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices"); SetHook((void *)(**(DWORD **)ppvObj + 16), extCreateLight, (void **)&pCreateLight, "CreateLight"); SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial"); - SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateViewport, (void **)&pCreateViewport, "CreateViewport"); + SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateViewport2, (void **)&pCreateViewport2, "CreateViewport(2)"); SetHook((void *)(**(DWORD **)ppvObj + 28), extFindDevice, (void **)&pFindDevice, "FindDevice"); break; + case 3: + SetHook((void *)(**(DWORD **)ppvObj + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices"); + SetHook((void *)(**(DWORD **)ppvObj + 16), extCreateLight, (void **)&pCreateLight, "CreateLight"); + SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial"); + SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateViewport3, (void **)&pCreateViewport3, "CreateViewport(3)"); + SetHook((void *)(**(DWORD **)ppvObj + 28), extFindDevice, (void **)&pFindDevice, "FindDevice"); + break; + case 7: + SetHook((void *)(**(DWORD **)ppvObj + 12), extEnumDevices7, (void **)&pEnumDevices7, "EnumDevices(7)"); + SetHook((void *)(**(DWORD **)ppvObj + 32), extCreateDevice7, (void **)&pCreateDevice7, "CreateDevice(D3D7)"); + break; } return res; } @@ -336,29 +465,38 @@ typedef struct { LPVOID arg; } CallbackArg; +typedef struct { + LPD3DENUMDEVICESCALLBACK7 *cb; + LPVOID arg; +} CallbackArg7; + static void DumpD3DDevideDesc(LPD3DDEVICEDESC d3, char *label) { if(IsTraceD3D){ - OutTrace("EnumDevices: CALLBACK dev=%s Size=%d Flags=%x ", label, d3->dwSize, d3->dwFlags); - if(d3->dwFlags & D3DDD_COLORMODEL) OutTrace("ColorModel=%x ", d3->dcmColorModel); - if(d3->dwFlags & D3DDD_DEVCAPS) OutTrace("DevCaps=%x ", d3->dwDevCaps); - if(d3->dwFlags & D3DDD_TRANSFORMCAPS) OutTrace("TransformCaps=%x ", d3->dtcTransformCaps.dwCaps); - if(d3->dwFlags & D3DDD_LIGHTINGCAPS) OutTrace("LightingCaps=%x ", d3->dlcLightingCaps); - if(d3->dwFlags & D3DDD_BCLIPPING) OutTrace("Clipping=%x ", d3->bClipping); - if(d3->dwFlags & D3DDD_LINECAPS) OutTrace("LineCaps=%x ", d3->dpcLineCaps); - if(d3->dwFlags & D3DDD_TRICAPS) OutTrace("TriCaps=%x ", d3->dpcTriCaps); - if(d3->dwFlags & D3DDD_DEVICERENDERBITDEPTH) OutTrace("DeviceRenderBitDepth=%d ", d3->dwDeviceRenderBitDepth); - if(d3->dwFlags & D3DDD_DEVICEZBUFFERBITDEPTH) OutTrace("DeviceZBufferBitDepth=%d ", d3->dwDeviceZBufferBitDepth); - if(d3->dwFlags & D3DDD_MAXBUFFERSIZE) OutTrace("MaxBufferSize=%d ", d3->dwMaxBufferSize); - if(d3->dwFlags & D3DDD_MAXVERTEXCOUNT) OutTrace("MaxVertexCount=%d ", d3->dwMaxVertexCount); - OutTrace("\n"); + if(d3){ + OutTrace("EnumDevices: CALLBACK dev=%s Size=%d Flags=%x ", label, d3->dwSize, d3->dwFlags); + if(d3->dwFlags & D3DDD_COLORMODEL) OutTrace("ColorModel=%x ", d3->dcmColorModel); + if(d3->dwFlags & D3DDD_DEVCAPS) OutTrace("DevCaps=%x ", d3->dwDevCaps); + if(d3->dwFlags & D3DDD_TRANSFORMCAPS) OutTrace("TransformCaps=%x ", d3->dtcTransformCaps.dwCaps); + if(d3->dwFlags & D3DDD_LIGHTINGCAPS) OutTrace("LightingCaps=%x ", d3->dlcLightingCaps); + if(d3->dwFlags & D3DDD_BCLIPPING) OutTrace("Clipping=%x ", d3->bClipping); + if(d3->dwFlags & D3DDD_LINECAPS) OutTrace("LineCaps=%x ", d3->dpcLineCaps); + if(d3->dwFlags & D3DDD_TRICAPS) OutTrace("TriCaps=%x ", d3->dpcTriCaps); + if(d3->dwFlags & D3DDD_DEVICERENDERBITDEPTH) OutTrace("DeviceRenderBitDepth=%d ", d3->dwDeviceRenderBitDepth); + if(d3->dwFlags & D3DDD_DEVICEZBUFFERBITDEPTH) OutTrace("DeviceZBufferBitDepth=%d ", d3->dwDeviceZBufferBitDepth); + if(d3->dwFlags & D3DDD_MAXBUFFERSIZE) OutTrace("MaxBufferSize=%d ", d3->dwMaxBufferSize); + if(d3->dwFlags & D3DDD_MAXVERTEXCOUNT) OutTrace("MaxVertexCount=%d ", d3->dwMaxVertexCount); + OutTrace("\n"); + } + else + OutTrace("EnumDevices: CALLBACK dev=%s ddesc=NULL\n", label); } } HRESULT WINAPI extDeviceProxy(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC lpd3ddd1, LPD3DDEVICEDESC lpd3ddd2, LPVOID arg) { HRESULT res; - OutTraceDW("EnumDevices: CALLBACK GUID=%x(%s) DeviceDescription=\"%s\", DeviceName=\"%s\", arg=%x\n", lpGuid->Data1, ExplainGUID(lpGuid), lpDeviceDescription, lpDeviceName, ((CallbackArg *)arg)->arg); + OutTraceD3D("EnumDevices: CALLBACK GUID=%x(%s) DeviceDescription=\"%s\", DeviceName=\"%s\", arg=%x\n", lpGuid->Data1, ExplainGUID(lpGuid), lpDeviceDescription, lpDeviceName, ((CallbackArg *)arg)->arg); DumpD3DDevideDesc(lpd3ddd1, "HWDEV"); DumpD3DDevideDesc(lpd3ddd2, "SWDEV"); if(dxw.dwFlags4 & NOPOWER2FIX){ @@ -374,7 +512,26 @@ HRESULT WINAPI extDeviceProxy(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR else { res = (*(((CallbackArg *)arg)->cb))(lpGuid, lpDeviceDescription, lpDeviceName, lpd3ddd1, lpd3ddd2, ((CallbackArg *)arg)->arg); } - OutTraceDW("EnumDevices: CALLBACK ret=%x\n", res); + OutTraceD3D("EnumDevices: CALLBACK ret=%x\n", res); + return res; +} + +HRESULT WINAPI extDeviceProxy7(LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC7 lpd3ddd, LPVOID arg) +{ + HRESULT res; + OutTraceD3D("EnumDevices(D3D7): CALLBACK DeviceDescription=\"%s\", DeviceName=\"%s\", arg=%x\n", lpDeviceDescription, lpDeviceName, ((CallbackArg *)arg)->arg); + DumpD3DDevideDesc((LPD3DDEVICEDESC)lpd3ddd, "DEV"); + if(dxw.dwFlags4 & NOPOWER2FIX){ + D3DDEVICEDESC7 lpd3dddfix; + if(lpd3ddd) memcpy(&lpd3dddfix, lpd3ddd, sizeof(D3DDEVICEDESC7)); + lpd3dddfix.dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; + lpd3dddfix.dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; + res = (*(((CallbackArg7 *)arg)->cb))(lpDeviceDescription, lpDeviceName, lpd3ddd?&lpd3dddfix:NULL, ((CallbackArg7 *)arg)->arg); + } + else { + res = (*(((CallbackArg7 *)arg)->cb))(lpDeviceDescription, lpDeviceName, lpd3ddd, ((CallbackArg7 *)arg)->arg); + } + OutTraceD3D("EnumDevices: CALLBACK ret=%x\n", res); return res; } @@ -392,6 +549,20 @@ HRESULT WINAPI extEnumDevices(void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID a return res; } +HRESULT WINAPI extEnumDevices7(void *lpd3d, LPD3DENUMDEVICESCALLBACK7 cb, LPVOID arg) +{ + HRESULT res; + CallbackArg7 Arg; + + OutTraceD3D("EnumDevices: d3d=%x arg=%x\n", lpd3d, arg); + Arg.cb= &cb; + Arg.arg=arg; + res=(*pEnumDevices7)(lpd3d, (LPD3DENUMDEVICESCALLBACK7)extDeviceProxy7, (LPVOID)&Arg); + if(res) OutTraceE("EnumDevices ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else OutTraceD3D("EnumDevices: OK\n"); + return res; +} + HRESULT WINAPI extCreateLight(void *lpd3d, LPDIRECT3DLIGHT *lpLight, IUnknown *p0) { HRESULT res; @@ -414,18 +585,42 @@ HRESULT WINAPI extCreateMaterial(void *lpd3d, LPDIRECT3DMATERIAL *lpMaterial, IU return res; } -HRESULT WINAPI extCreateViewport(void *lpd3d, LPDIRECT3DVIEWPORT *lpViewport, IUnknown *p0) +HRESULT WINAPI extCreateViewport1(void *lpd3d, LPDIRECT3DVIEWPORT *lpViewport, IUnknown *p0) { HRESULT res; - OutTraceD3D("CreateViewport: d3d=%x\n", lpd3d); - res=(*pCreateViewport)(lpd3d, lpViewport, p0); + OutTraceD3D("CreateViewport(1): d3d=%x\n", lpd3d); + res=(*pCreateViewport1)(lpd3d, lpViewport, p0); if(res) OutTraceE("CreateViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("CreateViewport: Viewport=%x\n", *lpViewport); - HookViewport(lpViewport, gD3DVersion); + HookViewport(lpViewport, 1); return res; } - + +HRESULT WINAPI extCreateViewport2(void *lpd3d, LPDIRECT3DVIEWPORT2 *lpViewport, IUnknown *p0) +{ + HRESULT res; + + OutTraceD3D("CreateViewport(2): d3d=%x\n", lpd3d); + res=(*pCreateViewport2)(lpd3d, lpViewport, p0); + if(res) OutTraceE("CreateViewport(2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else OutTraceD3D("CreateViewport(2): Viewport=%x\n", *lpViewport); + HookViewport((LPDIRECT3DVIEWPORT *)lpViewport, 2); + return res; +} + +HRESULT WINAPI extCreateViewport3(void *lpd3d, LPDIRECT3DVIEWPORT3 *lpViewport, IUnknown *p0) +{ + HRESULT res; + + OutTraceD3D("CreateViewport(3): d3d=%x\n", lpd3d); + res=(*pCreateViewport3)(lpd3d, lpViewport, p0); + if(res) OutTraceE("CreateViewport(3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else OutTraceD3D("CreateViewport(3): Viewport=%x\n", *lpViewport); + HookViewport((LPDIRECT3DVIEWPORT *)lpViewport, 3); + return res; +} + HRESULT WINAPI extFindDevice(void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2) { HRESULT res; @@ -447,7 +642,7 @@ HRESULT WINAPI extSetViewport(void *lpvp, LPD3DVIEWPORT vpd) HRESULT res; OutTraceD3D("SetViewport: viewport=%x viewportd=%x size=%d pos=(%d,%d) dim=(%dx%d) scale=(%fx%f) maxXYZ=(%f,%f,%f) minZ=%f\n", - lpvp, vpd, vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwHeight, vpd->dwWidth, vpd->dvScaleX, vpd->dvScaleY, + lpvp, vpd, vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight, vpd->dvScaleX, vpd->dvScaleY, vpd->dvMaxX, vpd->dvMaxY, vpd->dvMaxZ, vpd->dvMinZ); res=(*pSetViewport)(lpvp, vpd); if(res) OutTraceE("SetViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); @@ -463,7 +658,7 @@ HRESULT WINAPI extGetViewport(void *lpvp, LPD3DVIEWPORT vpd) res=(*pGetViewport)(lpvp, vpd); if(res) OutTraceE("GetViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("GetViewport: OK size=%d pos=(%d,%d) dim=(%dx%d) scale=(%fx%f) maxXYZ=(%f,%f,%f) minZ=%f\n", - vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwHeight, vpd->dwWidth, vpd->dvScaleX, vpd->dvScaleY, + vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight, vpd->dvScaleX, vpd->dvScaleY, vpd->dvMaxX, vpd->dvMaxY, vpd->dvMaxZ, vpd->dvMinZ); return res; } @@ -525,7 +720,23 @@ HRESULT WINAPI extCreateDevice3(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE4 return res; } - HookDirect3DDevice((void **)lplpd3dd, 3); + HookDirect3DDevice((void **)lplpd3dd, 3); + + return res; +} + +HRESULT WINAPI extCreateDevice7(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE7 lpdds, LPDIRECT3DDEVICE7 *lplpd3dd) +{ + HRESULT res; + + OutTraceD3D("CreateDevice(D3D7): d3d=%x GUID=%x(%s) lpdds=%x\n", lpd3d, Guid.Data1, ExplainGUID((GUID *)&Guid), lpdds); + res=(*pCreateDevice7)(lpd3d, Guid, lpdds, lplpd3dd); + if(res) { + OutTraceE("CreateDevice(D3D7) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + return res; + } + + HookDirect3DDevice((void **)lplpd3dd, 7); return res; } @@ -596,11 +807,11 @@ HRESULT WINAPI extSetRenderState2(void *d3dd, D3DRENDERSTATETYPE State, DWORD Va DWORD OldValue; OldValue = Value; Value = D3DCMP_ALWAYS; - OutTraceDW("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(OldValue)); + OutTraceD3D("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(OldValue)); } if((dxw.dwFlags2 & WIREFRAME) && (State == D3DRENDERSTATE_FILLMODE)){ Value = D3DFILL_WIREFRAME; - OutTraceDW("SetRenderState: FIXED State=FILLMODE Value=D3DFILL_WIREFRAME\n"); + OutTraceD3D("SetRenderState: FIXED State=FILLMODE Value=D3DFILL_WIREFRAME\n"); } res=(*pSetRenderState2)(d3dd, State, Value); if(res) OutTraceE("SetRenderState(2): res=%x(%s)\n", res, ExplainDDError(res)); @@ -615,14 +826,14 @@ HRESULT WINAPI extSetRenderState3(void *d3dd, D3DRENDERSTATETYPE State, DWORD Va DWORD OldValue; OldValue = Value; Value = D3DCMP_ALWAYS; - OutTraceDW("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(OldValue)); + OutTraceD3D("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(OldValue)); } if((dxw.dwFlags2 & WIREFRAME) && (State == D3DRENDERSTATE_FILLMODE)){ Value = D3DFILL_WIREFRAME; - OutTraceDW("SetRenderState: FIXED State=FILLMODE Value=D3DFILL_WIREFRAME\n"); + OutTraceD3D("SetRenderState: FIXED State=FILLMODE Value=D3DFILL_WIREFRAME\n"); } if((dxw.dwFlags4 & DISABLEFOGGING) && (State == D3DRENDERSTATE_FOGENABLE)){ - OutTraceDW("SetRenderState: FIXED State=FOGENABLE Value=FALSE\n"); + OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=FALSE\n"); Value = FALSE; } res=(*pSetRenderState3)(d3dd, State, Value); @@ -656,7 +867,7 @@ HRESULT WINAPI extBeginScene2(void *d3dd) d3dRect.y1 = vpd.dwY; d3dRect.x2 = vpd.dwX + vpd.dwWidth; d3dRect.y2 = vpd.dwY + vpd.dwHeight; - OutTraceDW("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2); + OutTraceD3D("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2); vp->Clear(1, &d3dRect, D3DCLEAR_ZBUFFER); } } @@ -682,7 +893,7 @@ HRESULT WINAPI extBeginScene3(void *d3dd) d3dRect.y1 = vpd.dwY; d3dRect.x2 = vpd.dwX + vpd.dwWidth; d3dRect.y2 = vpd.dwY + vpd.dwHeight; - OutTraceDW("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2); + OutTraceD3D("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2); if(dxw.dwFlags4 & ZBUFFERCLEAN )vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 1.0, 0); if(dxw.dwFlags4 & ZBUFFER0CLEAN)vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 0.0, 0); } @@ -752,3 +963,208 @@ HRESULT WINAPI extSetLightState3(void *d3dd, D3DLIGHTSTATETYPE d3dls, DWORD t) if(res) OutTraceE("SetLightState(3): ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } + +HRESULT WINAPI extSetViewport2(void *d3dd, LPD3DVIEWPORT lpd3dvp) +{ + HRESULT res; + OutTraceD3D("SetViewport(2): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); + res=(*pSetViewport2)(d3dd, lpd3dvp); + if(res) OutTraceE("SetViewport(2): ERROR res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extGetViewport2(void *d3dd, LPD3DVIEWPORT lpd3dvp) +{ + HRESULT res; + OutTraceD3D("GetViewport(2): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); + res=(*pGetViewport2)(d3dd, lpd3dvp); + if(res) OutTraceE("GetViewport(2): ERROR res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extSetViewport3(void *d3dd, LPD3DVIEWPORT lpd3dvp) +{ + HRESULT res; + OutTraceD3D("SetViewport(3): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); + res=(*pSetViewport3)(d3dd, lpd3dvp); + if(res) OutTraceE("SetViewport(3): ERROR res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extGetViewport3(void *d3dd, LPD3DVIEWPORT lpd3dvp) +{ + HRESULT res; + OutTraceD3D("GetViewport(3): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); + res=(*pGetViewport3)(d3dd, lpd3dvp); + if(res) OutTraceE("GetViewport(3): ERROR res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extSetViewport7(void *d3dd, LPD3DVIEWPORT7 lpd3dvp) +{ + HRESULT res; + OutTraceD3D("SetViewport(7): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); + res=(*pSetViewport7)(d3dd, lpd3dvp); + if(res) OutTraceE("SetViewport(7): ERROR res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extGetViewport7(void *d3dd, LPD3DVIEWPORT7 lpd3dvp) +{ + HRESULT res; + OutTraceD3D("GetViewport(7): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); + res=(*pGetViewport7)(d3dd, lpd3dvp); + if(res) OutTraceE("GetViewport(7): ERROR res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extAddViewport1(void *d3dd, LPDIRECT3DVIEWPORT lpd3dvp) +{ + HRESULT res; + OutTraceD3D("AddViewport(1): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); + res=(*pAddViewport1)(d3dd, lpd3dvp); + if(res) { + OutTraceE("AddViewport(1): ERROR res=%x(%s)\n", res, ExplainDDError(res)); + return res; + } + HookViewport(&lpd3dvp, 1); + return res; +} + +HRESULT WINAPI extAddViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp) +{ + HRESULT res; + OutTraceD3D("AddViewport(2): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); + res=(*pAddViewport2)(d3dd, lpd3dvp); + if(res) { + OutTraceE("AddViewport(2): ERROR res=%x(%s)\n", res, ExplainDDError(res)); + return res; + } + HookViewport((LPDIRECT3DVIEWPORT *)&lpd3dvp, 2); + return res; +} + +HRESULT WINAPI extAddViewport3(void *d3dd, LPDIRECT3DVIEWPORT3 lpd3dvp) +{ + HRESULT res; + OutTraceD3D("AddViewport(3): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); + res=(*pAddViewport3)(d3dd, lpd3dvp); + if(res) { + OutTraceE("AddViewport(3): ERROR res=%x(%s)\n", res, ExplainDDError(res)); + return res; + } + HookViewport((LPDIRECT3DVIEWPORT *)&lpd3dvp, 3); + return res; +} + +HRESULT WINAPI extSetViewport2_3(void *lpvp, LPD3DVIEWPORT2 vpd) +{ + HRESULT res; + + OutTraceD3D("SetViewport2(VP3): viewport=%x viewportd=%x size=%d pos=(%d,%d) dim=(%dx%d)\n", + lpvp, vpd, vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight); + res=(*pSetViewport2_3)(lpvp, vpd); + if(res) OutTraceE("SetViewport2(VP3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else OutTraceD3D("SetViewport2(VP3): OK\n"); + return res; +} + +HRESULT WINAPI extGetViewport2_3(void *lpvp, LPD3DVIEWPORT2 vpd) +{ + HRESULT res; + + OutTraceD3D("GetViewport2(VP3): viewport=%x viewportd=%x\n", lpvp, vpd); + res=(*pGetViewport2_3)(lpvp, vpd); + if(res) OutTraceE("GetViewport2(VP3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else OutTraceD3D("GetViewport2(VP3): OK size=%d pos=(%d,%d) dim=(%dx%d)\n", + vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight); + return res; +} + +HRESULT WINAPI extGetCurrentViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 *lpd3dvp) +{ + HRESULT res; + OutTraceD3D("GetCurrentViewport(D3DD2): d3dd=%x viewportd=%x\n", d3dd, lpd3dvp); + res=(*pGetCurrentViewport2)(d3dd, lpd3dvp); + if(res) { + OutTraceE("GetCurrentViewport(D3DD2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + return res; + } + HookViewport((LPDIRECT3DVIEWPORT *)lpd3dvp, 2); + return res; +} + +HRESULT WINAPI extSetCurrentViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp) +{ + HRESULT res; + + OutTraceD3D("SetCurrentViewport(D3DD2): d3dd=%x viewportd=%x\n", d3dd, lpd3dvp); + res=(*pSetCurrentViewport2)(d3dd, lpd3dvp); + if(res) OutTraceE("SetCurrentViewport(D3DD2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else OutTraceD3D("SetCurrentViewport(D3DD2): OK\n"); + return res; +} + +HRESULT WINAPI extGetCurrentViewport3(void *d3dd, LPDIRECT3DVIEWPORT3 *lpd3dvp) +{ + HRESULT res; + OutTraceD3D("GetCurrentViewport(D3DD3): d3dd=%x viewportd=%x\n", d3dd, lpd3dvp); + res=(*pGetCurrentViewport3)(d3dd, lpd3dvp); + if(res) { + OutTraceE("GetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + return res; + } + HookViewport((LPDIRECT3DVIEWPORT *)lpd3dvp, 3); + return res; +} + +HRESULT WINAPI extSetCurrentViewport3(void *lpvp, LPDIRECT3DVIEWPORT3 vpd) +{ + HRESULT res; + + OutTraceD3D("SetCurrentViewport(D3DD3): viewport=%x\n", lpvp, vpd); + res=(*pSetCurrentViewport3)(lpvp, vpd); + if(res) OutTraceE("SetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else OutTraceD3D("SetCurrentViewport(D3DD3): OK\n"); + return res; +} + +HRESULT WINAPI extDeleteViewport1(void *d3dd, LPDIRECT3DVIEWPORT lpd3dvp) +{ + HRESULT res; + OutTraceD3D("DeletetViewport(D3DD1): d3dd=%x viewport=%x\n", d3dd, lpd3dvp); + res=(*pDeleteViewport1)(d3dd, lpd3dvp); + if(res) OutTraceE("DeletetViewport(D3DD1) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else OutTraceD3D("DeletetViewport(D3DD1): OK\n"); + return res; +} + +HRESULT WINAPI extNextViewport1(void *d3dd, LPDIRECT3DVIEWPORT lpd3dvp, LPDIRECT3DVIEWPORT *vpnext, DWORD dw) +{ + HRESULT res; + OutTraceD3D("NextViewport(D3DD1): d3dd=%x viewport=%x dw=%x\n", d3dd, lpd3dvp); + res=(*pNextViewport1)(d3dd, lpd3dvp, vpnext, dw); + if(res) OutTraceE("NextViewport(D3DD1) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else OutTraceD3D("NextViewport(D3DD1): next=%x\n", *vpnext); + return res; +} + +HRESULT WINAPI extDeleteViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp) +{ + HRESULT res; + OutTraceD3D("DeletetViewport(D3DD2): d3dd=%x viewport=%x\n", d3dd, lpd3dvp); + res=(*pDeleteViewport2)(d3dd, lpd3dvp); + if(res) OutTraceE("DeletetViewport(D3DD2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else OutTraceD3D("DeletetViewport(D3DD2): OK\n"); + return res; +} + +HRESULT WINAPI extNextViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp, LPDIRECT3DVIEWPORT2 *vpnext, DWORD dw) +{ + HRESULT res; + OutTraceD3D("NextViewport(D3DD2): d3dd=%x viewport=%x dw=%x\n", d3dd, lpd3dvp); + res=(*pNextViewport2)(d3dd, lpd3dvp, vpnext, dw); + if(res) OutTraceE("NextViewport(D3DD2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else OutTraceD3D("NextViewport(D3DD2): next=%x\n", *vpnext); + return res; +} diff --git a/dll/syslibs.h b/dll/syslibs.h index bd95e6b..086fb8a 100644 --- a/dll/syslibs.h +++ b/dll/syslibs.h @@ -168,6 +168,7 @@ typedef int (WINAPI *MapWindowPoints_Type)(HWND, HWND, LPPOINT, UINT); typedef BOOL (WINAPI *MoveWindow_Type)(HWND, int, int, int, int, BOOL); typedef BOOL (WINAPI *PeekMessage_Type)(LPMSG, HWND, UINT, UINT, UINT); typedef ATOM (WINAPI *RegisterClassExA_Type)(WNDCLASSEX *); +typedef ATOM (WINAPI *RegisterClassA_Type)(WNDCLASS *); typedef int (WINAPI *GDIReleaseDC_Type)(HWND, HDC); typedef BOOL (WINAPI *ScreenToClient_Type)(HWND, LPPOINT); typedef LRESULT (WINAPI *SendMessage_Type)(HWND, UINT, WPARAM, LPARAM); @@ -365,6 +366,7 @@ DXWEXTERN MapWindowPoints_Type pMapWindowPoints DXWINITIALIZED; DXWEXTERN MoveWindow_Type pMoveWindow DXWINITIALIZED; DXWEXTERN PeekMessage_Type pPeekMessage DXWINITIALIZED; DXWEXTERN RegisterClassExA_Type pRegisterClassExA DXWINITIALIZED; +DXWEXTERN RegisterClassA_Type pRegisterClassA DXWINITIALIZED; DXWEXTERN GDIReleaseDC_Type pGDIReleaseDC DXWINITIALIZED; DXWEXTERN ScreenToClient_Type pScreenToClient DXWINITIALIZED; DXWEXTERN SendMessage_Type pSendMessageA DXWINITIALIZED; @@ -564,10 +566,12 @@ extern int WINAPI extMapWindowPoints(HWND, HWND, LPPOINT, UINT); extern BOOL WINAPI extMoveWindow(HWND, int, int, int, int, BOOL); extern BOOL WINAPI extPeekMessage(LPMSG, HWND, UINT, UINT, UINT); extern ATOM WINAPI extRegisterClassExA(WNDCLASSEXA *); +extern ATOM WINAPI extRegisterClassA(WNDCLASSA *); extern int WINAPI extDDReleaseDC(HWND, HDC); extern int WINAPI extGDIReleaseDC(HWND, HDC); extern BOOL WINAPI extScreenToClient(HWND, LPPOINT); -extern LRESULT WINAPI extSendMessage(HWND, UINT, WPARAM, LPARAM); +extern LRESULT WINAPI extSendMessageA(HWND, UINT, WPARAM, LPARAM); +extern LRESULT WINAPI extSendMessageW(HWND, UINT, WPARAM, LPARAM); extern HCURSOR WINAPI extSetCursor(HCURSOR); extern BOOL WINAPI extSetCursorPos(int, int); extern UINT_PTR WINAPI extSetTimer(HWND, UINT_PTR, UINT, TIMERPROC); diff --git a/dll/user32.cpp b/dll/user32.cpp index a824a69..b721eaf 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -32,6 +32,7 @@ static HookEntry_Type Hooks[]={ {"CreateWindowExA", (FARPROC)CreateWindowExA, (FARPROC *)&pCreateWindowExA, (FARPROC)extCreateWindowExA}, {"CreateWindowExW", (FARPROC)CreateWindowExW, (FARPROC *)&pCreateWindowExW, (FARPROC)extCreateWindowExW}, {"RegisterClassExA", (FARPROC)RegisterClassExA, (FARPROC *)&pRegisterClassExA, (FARPROC)extRegisterClassExA}, + {"RegisterClassA", (FARPROC)RegisterClassA, (FARPROC *)&pRegisterClassA, (FARPROC)extRegisterClassA}, {"GetSystemMetrics", (FARPROC)GetSystemMetrics, (FARPROC *)&pGetSystemMetrics, (FARPROC)extGetSystemMetrics}, {"GetDesktopWindow", (FARPROC)GetDesktopWindow, (FARPROC *)&pGetDesktopWindow, (FARPROC)extGetDesktopWindow}, {"TabbedTextOutA", (FARPROC)TabbedTextOutA, (FARPROC *)&pTabbedTextOutA, (FARPROC)extTabbedTextOutA}, @@ -102,8 +103,8 @@ static HookEntry_Type PeekAllHooks[]={ static HookEntry_Type MouseHooks[]={ {"GetCursorPos", (FARPROC)GetCursorPos, (FARPROC *)&pGetCursorPos, (FARPROC)extGetCursorPos}, {"SetCursor", (FARPROC)SetCursor, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor}, - {"SendMessageA", (FARPROC)SendMessageA, (FARPROC *)&pSendMessageA, (FARPROC)extSendMessage}, // ??? - {"SendMessageW", (FARPROC)SendMessageW, (FARPROC *)&pSendMessageW, (FARPROC)extSendMessage}, // ??? + {"SendMessageA", (FARPROC)SendMessageA, (FARPROC *)&pSendMessageA, (FARPROC)extSendMessageA}, + {"SendMessageW", (FARPROC)SendMessageW, (FARPROC *)&pSendMessageW, (FARPROC)extSendMessageW}, //{"SetPhysicalCursorPos", NULL, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor}, // ??? {0, NULL, 0, 0} // terminator }; @@ -677,7 +678,7 @@ HDWP WINAPI extDeferWindowPos(HDWP hWinPosInfo, HWND hwnd, HWND hWndInsertAfter, return res; } -LRESULT WINAPI extSendMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) +LRESULT WINAPI extSendMessage(SendMessage_Type pSendMessage, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { LRESULT ret; OutTraceW("SendMessage: hwnd=%x WinMsg=[0x%x]%s(%x,%x)\n", @@ -718,11 +719,21 @@ LRESULT WINAPI extSendMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) break; } } - ret=(*pSendMessageA)(hwnd, Msg, wParam, lParam); + ret=(*pSendMessage)(hwnd, Msg, wParam, lParam); OutTraceW("SendMessage: lresult=%x\n", ret); return ret; } +LRESULT WINAPI extSendMessageA(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + return extSendMessage(pSendMessageA, hwnd, Msg, wParam, lParam); +} + +LRESULT WINAPI extSendMessageW(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + return extSendMessage(pSendMessageW, hwnd, Msg, wParam, lParam); +} + HCURSOR WINAPI extSetCursor(HCURSOR hCursor) { HCURSOR ret; @@ -1030,11 +1041,19 @@ int WINAPI extGetSystemMetrics(int nindex) ATOM WINAPI extRegisterClassExA(WNDCLASSEX *lpwcx) { - OutTraceDW("RegisterClassEx: PROXED ClassName=%s style=%x(%s)\n", - lpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style)); + OutTraceDW("RegisterClassEx: PROXED ClassName=%s style=%x(%s) WndProc=%x cbClsExtra=%d cbWndExtra=%d hInstance=%x\n", + lpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style), lpwcx->lpfnWndProc, lpwcx->cbClsExtra, lpwcx->cbWndExtra, lpwcx->hInstance); return (*pRegisterClassExA)(lpwcx); } +ATOM WINAPI extRegisterClassA(WNDCLASS *lpwcx) +{ + // referenced by Syberia, together with RegisterClassExA + OutTraceDW("RegisterClass: PROXED ClassName=%s style=%x(%s) WndProc=%x cbClsExtra=%d cbWndExtra=%d hInstance=%x\n", + lpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style), lpwcx->lpfnWndProc, lpwcx->cbClsExtra, lpwcx->cbWndExtra, lpwcx->hInstance); + return (*pRegisterClassA)(lpwcx); +} + static HWND WINAPI extCreateWindowCommon( LPCTSTR ApiName, BOOL WideChar, diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index a5e1d6a..70653fa 100644 Binary files a/host/dxwndhost.vs2008.suo and b/host/dxwndhost.vs2008.suo differ