diff --git a/Include/dxwnd.h b/Include/dxwnd.h index a34a3fd..4c9c641 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -120,6 +120,8 @@ #define ZBUFFERCLEAN 0x00000010 // Clean ZBUFFER upon (fix for "Star Wars Ep. I - Racer") #define ZBUFFER0CLEAN 0x00000020 // Clean ZBUFFER upon (fix for "Star Wars Ep. I - Racer") #define ZBUFFERALWAYS 0x00000040 // Forces ZBUFFER D3DCMP_ALWAYS condition to show all planes.... +#define DISABLEFOGGING 0x00000080 // Disable D3D fogging +#define NOPOWER2FIX 0x00000100 // Handle textures whose size is not a power of 2 (32, 64, 128 ...) // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 90c719f..96ef9a7 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:404c01ee20ad1832dc37c27ab836098886b2f3363181e6976a52457ecd82d59e -size 430592 +oid sha256:57ef9c7d9946325fb6dd60e4af9dc304c495324ecae9a692cf86f91992cebbfb +size 431616 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index c837a02..e721987 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a5c2c347ab9be31f30206cc590f69d6d24bbd4e63aca63bea0f46931ef7afcb1 +oid sha256:0a4a4d772a6ec7426fd16e1891cfb4b0bc0f853cbb5a6cdcaa080f131bdd340e size 531968 diff --git a/build/dxwnd.ini b/build/dxwnd.ini index 10cc6bc..c3fe53f 100644 --- a/build/dxwnd.ini +++ b/build/dxwnd.ini @@ -281,10 +281,10 @@ module12= opengllib12= ver12=7 coord12=0 -flag12=134234148 -flagg12=1207959552 +flag12=155205668 +flagg12=1207959568 flagh12=20 -flagi12=36 +flagi12=292 tflag12=258 initx12=0 inity12=0 @@ -919,17 +919,17 @@ sizx39=800 sizy39=600 maxfps39=0 initts39=0 -title40=Magic & Mayhem -path40=D:\Games\Magic_&_Mayhem\Chaos.exe +title40=Mageslayer +path40=D:\Games\MAGE\MAGESLAY.EXE module40= opengllib40= ver40=0 coord40=0 flag40=134217762 -flagg40=1207959552 +flagg40=1207959584 flagh40=20 -flagi40=4 -tflag40=0 +flagi40=0 +tflag40=67 initx40=0 inity40=0 minx40=0 @@ -942,16 +942,16 @@ sizx40=800 sizy40=600 maxfps40=0 initts40=0 -title41=Motocross Madness (DEMO) -path41=D:\Games\Motocross Madness Trial\mcm.exe +title41=Magic & Mayhem +path41=D:\Games\Magic_&_Mayhem\Chaos.exe module41= opengllib41= ver41=0 coord41=0 -flag41=134217760 +flag41=134217762 flagg41=1207959552 flagh41=20 -flagi41=0 +flagi41=4 tflag41=0 initx41=0 inity41=0 @@ -965,16 +965,16 @@ sizx41=800 sizy41=600 maxfps41=0 initts41=0 -title42=Pandemonium 2 (GLIDE) -path42=D:\Games\Pandemonium 2\pandy.exe +title42=Motocross Madness (DEMO) +path42=D:\Games\Motocross Madness Trial\mcm.exe module42= opengllib42= ver42=0 coord42=0 -flag42=134217762 +flag42=134217760 flagg42=1207959552 flagh42=20 -flagi42=4 +flagi42=0 tflag42=0 initx42=0 inity42=0 @@ -988,17 +988,17 @@ sizx42=800 sizy42=600 maxfps42=0 initts42=0 -title43=Praetorians -path43=D:\games\Praetorians\Praetorians.exe +title43=Pandemonium 2 (GLIDE) +path43=D:\Games\Pandemonium 2\pandy.exe module43= opengllib43= ver43=0 -coord43=2 -flag43=134217760 -flagg43=1209008144 -flagh43=22 +coord43=0 +flag43=134217762 +flagg43=1207959552 +flagh43=20 flagi43=4 -tflag43=2 +tflag43=0 initx43=0 inity43=0 minx43=0 @@ -1011,17 +1011,17 @@ sizx43=800 sizy43=600 maxfps43=0 initts43=0 -title44=Praetorians (DEMO) -path44=D:\Games\Praetorians Demo\Praetorians.exe +title44=Panzer Dragoon +path44=D:\Games\Panzer Dragoon\game\PANZERDG.EXE module44= opengllib44= ver44=0 coord44=0 -flag44=134217760 +flag44=134217762 flagg44=1207959552 -flagh44=65556 +flagh44=20 flagi44=4 -tflag44=2 +tflag44=67 initx44=0 inity44=0 minx44=0 @@ -1034,17 +1034,17 @@ sizx44=800 sizy44=600 maxfps44=0 initts44=0 -title45=Project Nomads (DEMO) -path45=D:\Games\Project Nomads Demo\bin\win32\nomads.exe +title45=Praetorians +path45=D:\games\Praetorians\Praetorians.exe module45= opengllib45= -ver45=8 -coord45=0 -flag45=-1476394974 -flagg45=1207959808 -flagh45=4 -flagi45=0 -tflag45=274 +ver45=0 +coord45=2 +flag45=134217760 +flagg45=1209008144 +flagh45=22 +flagi45=4 +tflag45=2 initx45=0 inity45=0 minx45=0 @@ -1057,17 +1057,17 @@ sizx45=800 sizy45=600 maxfps45=0 initts45=0 -title46=Rayman 2 Demo -path46=D:\Games\Rayman2Demo\Rayman2Demo.exe +title46=Praetorians (DEMO) +path46=D:\Games\Praetorians Demo\Praetorians.exe module46= opengllib46= -ver46=7 +ver46=0 coord46=0 -flag46=402653219 -flagg46=1208025088 -flagh46=2097172 -flagi46=0 -tflag46=258 +flag46=134217760 +flagg46=1207959552 +flagh46=65556 +flagi46=4 +tflag46=2 initx46=0 inity46=0 minx46=0 @@ -1079,16 +1079,16 @@ posy46=50 sizx46=800 sizy46=600 maxfps46=0 -initts46=4 -title47=Shadows of the Empire (DEMO) -path47=D:\Games\Shadows of the Empire\shadows.exe +initts46=0 +title47=Project Nomads (DEMO) +path47=D:\Games\Project Nomads Demo\bin\win32\nomads.exe module47= opengllib47= -ver47=0 -coord47=2 -flag47=134479906 -flagg47=1207959568 -flagh47=33554452 +ver47=8 +coord47=0 +flag47=-1476394974 +flagg47=1207959808 +flagh47=4 flagi47=0 tflag47=274 initx47=0 @@ -1103,17 +1103,17 @@ sizx47=800 sizy47=600 maxfps47=0 initts47=0 -title48=StarCraft -path48=D:\Games\Starcraft\StarCraft.exe +title48=Rayman 2 Demo +path48=D:\Games\Rayman2Demo\Rayman2Demo.exe module48= opengllib48= -ver48=0 +ver48=7 coord48=0 -flag48=134217762 -flagg48=134283264 -flagh48=20 -flagi48=8 -tflag48=64 +flag48=402653219 +flagg48=1208025088 +flagh48=2097172 +flagi48=0 +tflag48=258 initx48=0 inity48=0 minx48=0 @@ -1125,18 +1125,18 @@ posy48=50 sizx48=800 sizy48=600 maxfps48=0 -initts48=0 -title49=Tomb Raider 4 (DEMO) -path49=D:\Games\Tomb Raider - The Last Revelation (Demo)\tomb4.exe +initts48=4 +title49=Shadows of the Empire (DEMO) +path49=D:\Games\Shadows of the Empire\shadows.exe module49= opengllib49= -ver49=7 -coord49=0 -flag49=134217760 -flagg49=1207959552 -flagh49=20 +ver49=0 +coord49=2 +flag49=134479906 +flagg49=1207959568 +flagh49=33554452 flagi49=0 -tflag49=258 +tflag49=274 initx49=0 inity49=0 minx49=0 @@ -1149,17 +1149,17 @@ sizx49=800 sizy49=600 maxfps49=0 initts49=0 -title50=Tomb Raider II -path50=D:\Games\Tomb Raider II\Tomb2.exe +title50=Star Wars Episode I Racer +path50=D:\Games\Star Wars Episode 1 racer\SWEP1RCR.EXE module50= opengllib50= ver50=0 coord50=0 -flag50=671088674 -flagg50=1207959552 -flagh50=20 -flagi50=0 -tflag50=0 +flag50=679493669 +flagg50=1210056720 +flagh50=8212 +flagi50=20 +tflag50=67 initx50=0 inity50=0 minx50=0 @@ -1172,20 +1172,20 @@ sizx50=800 sizy50=600 maxfps50=0 initts50=0 -title51=Tomb Raider II Gold (DEMO) +title51=StarCraft module51= opengllib51= -title52=Tomb Raider III +title52=Tomb Raider 4 (DEMO) module52= opengllib52= -path51=D:\Games\Tomb Raider II Gold (Demo)\Tomb2.exe +path51=D:\Games\Starcraft\StarCraft.exe ver51=0 -coord51=2 -flag51=671088674 -flagg51=1224736784 +coord51=0 +flag51=134217762 +flagg51=134283264 flagh51=20 -flagi51=0 -tflag51=258 +flagi51=8 +tflag51=64 initx51=0 inity51=0 minx51=0 @@ -1198,14 +1198,14 @@ sizx51=800 sizy51=600 maxfps51=0 initts51=0 -path52=D:\Games\Tomb Raider III\tomb3.exe -ver52=0 -coord52=2 +path52=D:\Games\Tomb Raider - The Last Revelation (Demo)\tomb4.exe +ver52=7 +coord52=0 flag52=134217760 -flagg52=1241514000 +flagg52=1207959552 flagh52=20 flagi52=0 -tflag52=322 +tflag52=258 initx52=0 inity52=0 minx52=0 @@ -1218,14 +1218,14 @@ sizx52=800 sizy52=600 maxfps52=0 initts52=0 -title53=Virtua Fighter 2 (DEMO) -path53=D:\Games\vf2_demo\VF2DEMO.EXE +title53=Tomb Raider II +path53=D:\Games\Tomb Raider II\Tomb2.exe module53= opengllib53= ver53=0 coord53=0 -flag53=939524131 -flagg53=1207959664 +flag53=671088674 +flagg53=1207959552 flagh53=20 flagi53=0 tflag53=0 @@ -1241,15 +1241,15 @@ sizx53=800 sizy53=600 maxfps53=0 initts53=0 -title54=Virtua Fighter PC -path54=D:\Games\Virtua Fighter\VFPC.EXE +title54=Tomb Raider II Gold (DEMO) +path54=D:\Games\Tomb Raider II Gold (Demo)\Tomb2.exe module54= opengllib54= ver54=0 -coord54=0 -flag54=402653218 +coord54=2 +flag54=671088674 flagg54=1224736784 -flagh54=33562644 +flagh54=20 flagi54=0 tflag54=258 initx54=0 @@ -1264,17 +1264,17 @@ sizx54=800 sizy54=600 maxfps54=0 initts54=0 -title55=Warcraft 2 Battlenet Ed -path55=D:\Games\Warcraft 2 Battlenet Ed\Warcraft II BNE.exe +title55=Tomb Raider III +path55=D:\Games\Tomb Raider III\tomb3.exe module55= opengllib55= ver55=0 -coord55=0 -flag55=134217762 -flagg55=1210122240 -flagh55=148 -flagi55=12 -tflag55=0 +coord55=2 +flag55=134217760 +flagg55=1241514000 +flagh55=20 +flagi55=0 +tflag55=322 initx55=0 inity55=0 minx55=0 @@ -1287,17 +1287,17 @@ sizx55=800 sizy55=600 maxfps55=0 initts55=0 -title56=Wargasm -path56=D:\Games\Wargasm\tank.exe +title56=Virtua Fighter 2 (DEMO) +path56=D:\Games\vf2_demo\VF2DEMO.EXE module56= opengllib56= ver56=0 -coord56=2 -flag56=671088672 -flagg56=1207959696 -flagh56=65556 +coord56=0 +flag56=939524131 +flagg56=1207959664 +flagh56=20 flagi56=0 -tflag56=3 +tflag56=0 initx56=0 inity56=0 minx56=0 @@ -1310,15 +1310,15 @@ sizx56=800 sizy56=600 maxfps56=0 initts56=0 -title57=Warlords Battlecry II (DEMO) -path57=D:\Games\Warlords Battlecry II Demo\Battlecry II Demo.exe +title57=Virtua Fighter PC +path57=D:\Games\Virtua Fighter\VFPC.EXE module57= opengllib57= ver57=0 -coord57=2 -flag57=134217762 -flagg57=1207959568 -flagh57=22 +coord57=0 +flag57=402653218 +flagg57=1224736784 +flagh57=33562644 flagi57=0 tflag57=258 initx57=0 @@ -1333,17 +1333,17 @@ sizx57=800 sizy57=600 maxfps57=0 initts57=0 -title58=Whiteout -path58=D:\Games\Whiteout\Whiteout.exe +title58=Warcraft 2 Battlenet Ed +path58=D:\Games\Warcraft 2 Battlenet Ed\Warcraft II BNE.exe module58= opengllib58= ver58=0 coord58=0 -flag58=402653217 -flagg58=1207959552 -flagh58=20 -flagi58=0 -tflag58=66 +flag58=134217762 +flagg58=1210122240 +flagh58=148 +flagi58=12 +tflag58=0 initx58=0 inity58=0 minx58=0 @@ -1352,21 +1352,21 @@ maxx58=0 maxy58=0 posx58=50 posy58=50 -sizx58=640 -sizy58=480 +sizx58=800 +sizy58=600 maxfps58=0 initts58=0 -title59=Wildfire -path59=D:\Games\Wildfire\Wildfire.exe +title59=Wargasm +path59=D:\Games\Wargasm\tank.exe module59= opengllib59= ver59=0 -coord59=0 -flag59=-1476392958 -flagg59=1210122240 -flagh59=20 -flagi59=12 -tflag59=0 +coord59=2 +flag59=671088672 +flagg59=1207959696 +flagh59=65556 +flagi59=0 +tflag59=3 initx59=0 inity59=0 minx59=0 @@ -1379,16 +1379,16 @@ sizx59=800 sizy59=600 maxfps59=0 initts59=0 -title60=Worms Pinball -path60=D:\Games\Worms Pinball\WPIB.exe +title60=Warlords Battlecry II (DEMO) +path60=D:\Games\Warlords Battlecry II Demo\Battlecry II Demo.exe module60= opengllib60= ver60=0 coord60=2 -flag60=679477282 -flagg60=1744830480 -flagh60=20 -flagi60=4 +flag60=134217762 +flagg60=1207959568 +flagh60=22 +flagi60=0 tflag60=258 initx60=0 inity60=0 @@ -1402,17 +1402,17 @@ sizx60=800 sizy60=600 maxfps60=0 initts60=0 -title61=Zanzarah -path61=D:\Games\Zanzarah\System\zanthp.exe +title61=Whiteout +path61=D:\Games\Whiteout\Whiteout.exe module61= opengllib61= ver61=0 coord61=0 -flag61=679477280 +flag61=402653217 flagg61=1207959552 flagh61=20 flagi61=0 -tflag61=0 +tflag61=66 initx61=0 inity61=0 minx61=0 @@ -1421,21 +1421,21 @@ maxx61=0 maxy61=0 posx61=50 posy61=50 -sizx61=800 -sizy61=600 +sizx61=640 +sizy61=480 maxfps61=0 initts61=0 -title62=Zax the Alien Hunter (DEMO) -path62=D:\Games\ZaxDemo\Zax.exe +title62=Wildfire +path62=D:\Games\Wildfire\Wildfire.exe module62= opengllib62= ver62=0 -coord62=2 -flag62=-2011168734 -flagg62=1209008144 +coord62=0 +flag62=-1476392958 +flagg62=1210122240 flagh62=20 -flagi62=0 -tflag62=258 +flagi62=12 +tflag62=0 initx62=0 inity62=0 minx62=0 @@ -1448,17 +1448,17 @@ sizx62=800 sizy62=600 maxfps62=0 initts62=0 -title63=ZPC Zero Population Count -path63=D:\Games\ZPC\ZPC.EXE +title63=Worms Pinball +path63=D:\Games\Worms Pinball\WPIB.exe module63= opengllib63= ver63=0 -coord63=0 -flag63=134217762 -flagg63=1207959552 +coord63=2 +flag63=679477282 +flagg63=1744830480 flagh63=20 flagi63=4 -tflag63=0 +tflag63=258 initx63=0 inity63=0 minx63=0 @@ -1471,17 +1471,17 @@ sizx63=800 sizy63=600 maxfps63=0 initts63=0 -title64=Star Wars Episode I Racer -path64=D:\Games\Star Wars Episode 1 racer\SWEP1RCR.EXE +title64=Zanzarah +path64=D:\Games\Zanzarah\System\zanthp.exe module64= opengllib64= ver64=0 coord64=0 -flag64=679493669 -flagg64=1210056720 -flagh64=8212 -flagi64=20 -tflag64=67 +flag64=679477280 +flagg64=1207959552 +flagh64=20 +flagi64=0 +tflag64=0 initx64=0 inity64=0 minx64=0 @@ -1494,17 +1494,17 @@ sizx64=800 sizy64=600 maxfps64=0 initts64=0 -title65=Mageslayer -path65=D:\Games\MAGE\MAGESLAY.EXE +title65=Zax the Alien Hunter (DEMO) +path65=D:\Games\ZaxDemo\Zax.exe module65= opengllib65= ver65=0 -coord65=0 -flag65=134217762 -flagg65=1207959552 +coord65=2 +flag65=-2011168734 +flagg65=1209008144 flagh65=20 flagi65=0 -tflag65=67 +tflag65=258 initx65=0 inity65=0 minx65=0 @@ -1517,8 +1517,31 @@ sizx65=800 sizy65=600 maxfps65=0 initts65=0 +title66=ZPC Zero Population Count +path66=D:\Games\ZPC\ZPC.EXE +module66= +opengllib66= +ver66=0 +coord66=0 +flag66=134217762 +flagg66=1207959552 +flagh66=20 +flagi66=4 +tflag66=0 +initx66=0 +inity66=0 +minx66=0 +miny66=0 +maxx66=0 +maxy66=0 +posx66=50 +posy66=50 +sizx66=800 +sizy66=600 +maxfps66=0 +initts66=0 [window] -posx=1056 -posy=200 +posx=953 +posy=245 sizx=638 sizy=670 diff --git a/build/exports/Crimson Skies.dxw b/build/exports/Crimson Skies.dxw index 741addf..b617446 100644 --- a/build/exports/Crimson Skies.dxw +++ b/build/exports/Crimson Skies.dxw @@ -5,10 +5,10 @@ module0= opengllib0= ver0=7 coord0=0 -flag0=134234148 -flagg0=1207959552 +flag0=155205668 +flagg0=1207959568 flagh0=20 -flagi0=36 +flagi0=292 tflag0=258 initx0=0 inity0=0 diff --git a/build/exports/Panzer Dragoon.dxw b/build/exports/Panzer Dragoon.dxw new file mode 100644 index 0000000..f8d0ef4 --- /dev/null +++ b/build/exports/Panzer Dragoon.dxw @@ -0,0 +1,24 @@ +[target] +title0=Panzer Dragoon +path0=D:\Games\Panzer Dragoon\game\PANZERDG.EXE +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134217762 +flagg0=1207959552 +flagh0=20 +flagi0=4 +tflag0=67 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 9a15f7f..4829097 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -319,4 +319,8 @@ Configuration tabs reorganization: now some tabs have merged making it easier to core: improved d3d wrapping and sdded ZBUFFER cleanup flags to fix some d3d games. In particular: Clean ZBUFFER @1.0 fix: to fix "Star Wars Episode I Racer" -Clean ZBUFFER @0.0 fix: to fix "Crimson Skies" black blocks bug on ATI cards \ No newline at end of file +Clean ZBUFFER @0.0 fix: to fix "Crimson Skies" black blocks bug on ATI cards + +v2.02.48 +New options: "Disable fogging", "Textures not power of 2 fix" +A few fix to prevent game crashes \ No newline at end of file diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 49ddff8..ff6737f 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -3609,7 +3609,7 @@ HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSUR res=(*pUnlock)(lpdds, lprect); if (res) OutTraceE("Unlock ERROR res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__); if (IsPrim && res==DD_OK) sBlt("Unlock", lpdds, NULL, lpdds, NULL, NULL, 0, FALSE); - if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=0; + if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; return res; } diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 9780100..88e3f42 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -66,8 +66,8 @@ static char *Flag3Names[32]={ static char *Flag4Names[32]={ "NOALPHACHANNEL", "SUPPRESSCHILD", "FIXREFCOUNTER", "SHOWTIMESTRETCH", - "", "", "", "", - "", "", "", "", + "ZBUFFERCLEAN", "ZBUFFER0CLEAN", "ZBUFFERALWAYS", "DISABLEFOGGING", + "NOPOWER2FIX", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index 1026b3c..b3131b9 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -28,6 +28,7 @@ dxwCore::dxwCore() //IsGDIPalette = FALSE; memset(PrimSurfaces, 0, sizeof(PrimSurfaces)); ResetEmulatedDC(); + MustShowOverlay=FALSE; } dxwCore::~dxwCore() @@ -73,6 +74,7 @@ void dxwCore::InitTarget(TARGETMAP *target) if(TimeShift > 8) TimeShift = 8; FakeVersionId = target->FakeVersionId; Coordinates = target->coordinates; + MustShowOverlay=((dwFlags2 & SHOWFPSOVERLAY) || (dwFlags4 & SHOWTIMESTRETCH)); } /* ------------------------------------------------------------------ */ @@ -919,35 +921,39 @@ void dxwCore::GetSystemTime(LPSYSTEMTIME lpSystemTime) void dxwCore::ShowOverlay() { - this->ShowOverlay(GetDC(hWnd)); + if (MustShowOverlay) this->ShowOverlay(GetDC(hWnd)); } void dxwCore::ShowOverlay(LPDIRECTDRAWSURFACE lpdds) { HDC hdc; // the working dc - if (FAILED(lpdds->GetDC(&hdc))) return; - this->ShowOverlay(hdc); - lpdds->ReleaseDC(hdc); + if (MustShowOverlay) { + if(!lpdds) return; + if (FAILED(lpdds->GetDC(&hdc))) return; + this->ShowOverlay(hdc); + lpdds->ReleaseDC(hdc); + } } void dxwCore::ShowOverlay(HDC hdc) { + if(!hdc) return; if (dwFlags2 & SHOWFPSOVERLAY) ShowFPS(hdc); if (dwFlags4 & SHOWTIMESTRETCH) ShowTimeStretching(hdc); } -void dxwCore::ShowFPS() -{ - this->ShowFPS(GetDC(hWnd)); -} - -void dxwCore::ShowFPS(LPDIRECTDRAWSURFACE lpdds) -{ - HDC hdc; // the working dc - if (FAILED(lpdds->GetDC(&hdc))) return; - this->ShowFPS(hdc); - lpdds->ReleaseDC(hdc); -} +//void dxwCore::ShowFPS() +//{ +// this->ShowFPS(GetDC(hWnd)); +//} +// +//void dxwCore::ShowFPS(LPDIRECTDRAWSURFACE lpdds) +//{ +// HDC hdc; // the working dc +// if (FAILED(lpdds->GetDC(&hdc))) return; +// this->ShowFPS(hdc); +// lpdds->ReleaseDC(hdc); +//} void dxwCore::ShowFPS(HDC xdc) { @@ -978,25 +984,25 @@ void dxwCore::ShowFPS(HDC xdc) TextOut(xdc, x, y, sBuf, strlen(sBuf)); } -void dxwCore::ShowTimeStretching() -{ - HDC hdc; - hdc=GetDC(hWnd); - if(hdc)this->ShowTimeStretching(hdc); -} - -void dxwCore::ShowTimeStretching(LPDIRECTDRAWSURFACE lpdds) -{ - HDC hdc; // the working dc - __try { - if (FAILED(lpdds->GetDC(&hdc))) return; - } - __except(EXCEPTION_EXECUTE_HANDLER){ - return; - } - if(hdc)this->ShowTimeStretching(hdc); - lpdds->ReleaseDC(hdc); -} +//void dxwCore::ShowTimeStretching() +//{ +// HDC hdc; +// hdc=GetDC(hWnd); +// if(hdc)this->ShowTimeStretching(hdc); +//} +// +//void dxwCore::ShowTimeStretching(LPDIRECTDRAWSURFACE lpdds) +//{ +// HDC hdc; // the working dc +// __try { +// if (FAILED(lpdds->GetDC(&hdc))) return; +// } +// __except(EXCEPTION_EXECUTE_HANDLER){ +// return; +// } +// if(hdc)this->ShowTimeStretching(hdc); +// lpdds->ReleaseDC(hdc); +//} void dxwCore::ShowTimeStretching(HDC xdc) { diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index b6b8801..eb25a1e 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -65,12 +65,6 @@ public: // methods void GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime); DWORD StretchTime(DWORD); DWORD StretchCounter(DWORD); - void ShowFPS(LPDIRECTDRAWSURFACE); - void ShowTimeStretching(LPDIRECTDRAWSURFACE); - void ShowFPS(void); - void ShowTimeStretching(void); - void ShowFPS(HDC); - void ShowTimeStretching(HDC); void ShowOverlay(); void ShowOverlay(HDC); void ShowOverlay(LPDIRECTDRAWSURFACE); @@ -112,8 +106,6 @@ public: // simple data variables short iPosY; short iSizX; short iSizY; - //BOOL IsWithinDDraw; // flag to avoid double intervention at ddraw & GDI level - //BOOL IsGDIPalette; char *CustomOpenGLLib; WORD palVersion; WORD palNumEntries; @@ -135,7 +127,9 @@ protected: private: void UnmarkPrimarySurface(LPDIRECTDRAWSURFACE); void UnmarkBackBufferSurface(LPDIRECTDRAWSURFACE); - + BOOL MustShowOverlay; + void ShowFPS(HDC); + void ShowTimeStretching(HDC); }; extern dxwCore dxw; diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 8d838cd..ddf12ff 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -24,7 +24,7 @@ along with this program. If not, see . #include "dxwnd.h" #include "dxwcore.hpp" -#define VERSION "2.02.47" +#define VERSION "2.02.48" #define DDTHREADLOCK 1 diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index f162989..6509a8b 100644 Binary files a/dll/dxwnd.vs2008.suo and b/dll/dxwnd.vs2008.suo differ diff --git a/dll/hd3d7.cpp b/dll/hd3d7.cpp index be0164c..4b69d10 100644 --- a/dll/hd3d7.cpp +++ b/dll/hd3d7.cpp @@ -42,6 +42,7 @@ typedef HRESULT (WINAPI *D3DGetCaps_Type)(void *, LPD3DDEVICEDESC ,LPD3DDEVICEDE typedef HRESULT (WINAPI *SetRenderState3_Type)(void *, D3DRENDERSTATETYPE, DWORD); typedef HRESULT (WINAPI *Scene3_Type)(void *); +typedef HRESULT (WINAPI *GetCaps3_Type)(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC); Initialize_Type pInitialize = NULL; @@ -67,6 +68,8 @@ Scene3_Type pEndScene1 = NULL; Scene3_Type pEndScene2 = NULL; Scene3_Type pEndScene3 = NULL; +GetCaps3_Type pGetCaps3 = NULL; + D3DInitialize_Type pD3DInitialize = NULL; D3DGetCaps_Type pD3DGetCaps = NULL; @@ -95,6 +98,7 @@ HRESULT WINAPI extEndScene2(void *); HRESULT WINAPI extSetRenderState3(void *, D3DRENDERSTATETYPE, DWORD); HRESULT WINAPI extBeginScene3(void *); HRESULT WINAPI extEndScene3(void *); +HRESULT WINAPI extGetCaps3(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC); extern char *ExplainDDError(DWORD); @@ -215,23 +219,28 @@ void HookDirect3DDevice(void **lpd3ddev, int 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)"); 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(dxw.dwFlags2 & WIREFRAME){ - (*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); + 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 + 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)"); - if(dxw.dwFlags2 & WIREFRAME){ - (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); + if(pSetRenderState3){ + if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); + if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE); } break; } @@ -347,7 +356,19 @@ HRESULT WINAPI extDeviceProxy(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR OutTraceD("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"); - res = (*(((CallbackArg *)arg)->cb))(lpGuid, lpDeviceDescription, lpDeviceName, lpd3ddd1, lpd3ddd2, ((CallbackArg *)arg)->arg); + if(dxw.dwFlags4 & NOPOWER2FIX){ + D3DDEVICEDESC lpd3ddd1fix, lpd3ddd2fix; + if(lpd3ddd1) memcpy(&lpd3ddd1fix, lpd3ddd1, sizeof(D3DDEVICEDESC)); + if(lpd3ddd2) memcpy(&lpd3ddd2fix, lpd3ddd2, sizeof(D3DDEVICEDESC)); + lpd3ddd1fix.dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; + lpd3ddd1fix.dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; + lpd3ddd2fix.dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; + lpd3ddd2fix.dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; + res = (*(((CallbackArg *)arg)->cb))(lpGuid, lpDeviceDescription, lpDeviceName, lpd3ddd1?&lpd3ddd1fix:NULL, lpd3ddd2?&lpd3ddd2fix:NULL, ((CallbackArg *)arg)->arg); + } + else { + res = (*(((CallbackArg *)arg)->cb))(lpGuid, lpDeviceDescription, lpDeviceName, lpd3ddd1, lpd3ddd2, ((CallbackArg *)arg)->arg); + } OutTraceD("EnumDevices: CALLBACK ret=%x\n", res); return res; } @@ -595,6 +616,10 @@ HRESULT WINAPI extSetRenderState3(void *d3dd, D3DRENDERSTATETYPE State, DWORD Va Value = D3DFILL_WIREFRAME; OutTraceD("SetRenderState: FIXED State=FILLMODE Value=D3DFILL_WIREFRAME\n"); } + if((dxw.dwFlags4 & DISABLEFOGGING) && (State == D3DRENDERSTATE_FOGENABLE)){ + OutTraceD("SetRenderState: FIXED State=FOGENABLE Value=FALSE\n"); + Value = FALSE; + } res=(*pSetRenderState3)(d3dd, State, Value); if(res) OutTraceE("SetRenderState(3): res=%x(%s)\n", res, ExplainDDError(res)); return res; @@ -614,18 +639,21 @@ HRESULT WINAPI extBeginScene2(void *d3dd) HRESULT res; OutTraceD("BeginScene(2): d3dd=%x\n", d3dd); if(dxw.dwFlags4 & ZBUFFERCLEAN){ + HRESULT res2; LPDIRECT3DVIEWPORT2 vp; D3DVIEWPORT vpd; - ((LPDIRECT3DDEVICE2)d3dd)->GetCurrentViewport(&vp); - D3DRECT d3dRect; - vpd.dwSize=sizeof(D3DVIEWPORT); - vp->GetViewport(&vpd); - d3dRect.x1 = vpd.dwX; - d3dRect.y1 = vpd.dwY; - d3dRect.x2 = vpd.dwX + vpd.dwWidth; - d3dRect.y2 = vpd.dwY + vpd.dwHeight; - OutTraceD("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2); - vp->Clear(1, &d3dRect, D3DCLEAR_ZBUFFER); + res2=((LPDIRECT3DDEVICE2)d3dd)->GetCurrentViewport(&vp); + if(!res2){ + D3DRECT d3dRect; + vpd.dwSize=sizeof(D3DVIEWPORT); + vp->GetViewport(&vpd); + d3dRect.x1 = vpd.dwX; + d3dRect.y1 = vpd.dwY; + d3dRect.x2 = vpd.dwX + vpd.dwWidth; + d3dRect.y2 = vpd.dwY + vpd.dwHeight; + OutTraceD("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2); + vp->Clear(1, &d3dRect, D3DCLEAR_ZBUFFER); + } } res=(*pBeginScene2)(d3dd); if(res) OutTraceE("BeginScene(2): res=%x(%s)\n", res, ExplainDDError(res)); @@ -637,19 +665,22 @@ HRESULT WINAPI extBeginScene3(void *d3dd) HRESULT res; OutTraceD("BeginScene(3): d3dd=%x\n", d3dd); if(dxw.dwFlags4 & (ZBUFFERCLEAN|ZBUFFER0CLEAN)){ + HRESULT res2; LPDIRECT3DVIEWPORT3 vp; D3DVIEWPORT vpd; - ((LPDIRECT3DDEVICE3)d3dd)->GetCurrentViewport(&vp); - D3DRECT d3dRect; - vpd.dwSize=sizeof(D3DVIEWPORT); - vp->GetViewport(&vpd); - d3dRect.x1 = vpd.dwX; - d3dRect.y1 = vpd.dwY; - d3dRect.x2 = vpd.dwX + vpd.dwWidth; - d3dRect.y2 = vpd.dwY + vpd.dwHeight; - OutTraceD("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); + res2=((LPDIRECT3DDEVICE3)d3dd)->GetCurrentViewport(&vp); + if(!res2){ + D3DRECT d3dRect; + vpd.dwSize=sizeof(D3DVIEWPORT); + vp->GetViewport(&vpd); + d3dRect.x1 = vpd.dwX; + d3dRect.y1 = vpd.dwY; + d3dRect.x2 = vpd.dwX + vpd.dwWidth; + d3dRect.y2 = vpd.dwY + vpd.dwHeight; + OutTraceD("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); + } } res=(*pBeginScene3)(d3dd); if(res) OutTraceE("BeginScene(3): res=%x(%s)\n", res, ExplainDDError(res)); @@ -685,3 +716,25 @@ HRESULT WINAPI extEndScene3(void *d3dd) if(res) OutTraceE("EndScene(3): res=%x(%s)\n", res, ExplainDDError(res)); return res; } + +HRESULT WINAPI extGetCaps3(void *d3dd, LPD3DDEVICEDESC hd, LPD3DDEVICEDESC sd) +{ + HRESULT res; + OutTraceD("GetCaps(3): d3dd=%x hd=%x sd=%x\n", d3dd, hd, sd); + res=(*pGetCaps3)(d3dd, hd, sd); + if(res) { + OutTraceE("GetCaps(3): res=%x(%s)\n", res, ExplainDDError(res)); + return res; + } + if(dxw.dwFlags4 & NOPOWER2FIX){ + if(hd) { + hd->dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; + hd->dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; + } + if(sd) { + sd->dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; + sd->dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; + } + } + return res; +} diff --git a/dll/ole32.cpp b/dll/ole32.cpp index a967f07..dd0c95c 100644 --- a/dll/ole32.cpp +++ b/dll/ole32.cpp @@ -46,14 +46,14 @@ struct { static void HookAdditionalModules() { for(int i=0; im_BufferedIOFix); DDX_Check(pDX, IDC_ZBUFFERCLEAN, cTarget->m_ZBufferClean); DDX_Check(pDX, IDC_ZBUFFER0CLEAN, cTarget->m_ZBuffer0Clean); + DDX_Check(pDX, IDC_NOPOWER2FIX, cTarget->m_NoPower2Fix); } BEGIN_MESSAGE_MAP(CTabCompat, CDialog) diff --git a/host/TabWindow.cpp b/host/TabWindow.cpp index a595c26..af3e130 100644 --- a/host/TabWindow.cpp +++ b/host/TabWindow.cpp @@ -50,10 +50,13 @@ void CTabWindow::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_INIT16BPP, cTarget->m_Init16BPP); DDX_Check(pDX, IDC_DISABLEGAMMARAMP, cTarget->m_DisableGammaRamp); DDX_Check(pDX, IDC_FORCE16BPP, cTarget->m_Force16BPP); - DDX_Check(pDX, IDC_WIREFRAME, cTarget->m_WireFrame); DDX_Check(pDX, IDC_BLACKWHITE, cTarget->m_BlackWhite); DDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565); DDX_Check(pDX, IDC_LOCKSYSCOLORS, cTarget->m_LockSysColors); + + // 3D management + DDX_Check(pDX, IDC_WIREFRAME, cTarget->m_WireFrame); + DDX_Check(pDX, IDC_DISABLEFOGGING, cTarget->m_DisableFogging); } BOOL CTabWindow::OnInitDialog() diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index c208288..3ea2c6c 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -56,6 +56,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_ZBufferClean = FALSE; m_ZBuffer0Clean = FALSE; m_ZBufferAlways = FALSE; + m_DisableFogging = FALSE; + m_NoPower2Fix = FALSE; m_UnNotify = FALSE; m_Windowize = TRUE; // default true !! m_HookDLLs = TRUE; // default true !! diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 1edded0..7b6605f 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -119,6 +119,8 @@ public: BOOL m_ZBufferClean; BOOL m_ZBuffer0Clean; BOOL m_ZBufferAlways; + BOOL m_NoPower2Fix; + BOOL m_DisableFogging; BOOL m_SuppressIME; BOOL m_SetCompatibility; BOOL m_DisableHAL; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 41cb995..c083292 100644 Binary files a/host/dxwndhost.aps and b/host/dxwndhost.aps differ diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index c4f757d..e819ac9 100644 --- a/host/dxwndhost.rc +++ b/host/dxwndhost.rc @@ -417,6 +417,7 @@ BEGIN CONTROL "Set 16BPP RGB565 encoding",IDC_USERGB565,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,64,126,9 CONTROL "Lock Sys Colors",IDC_LOCKSYSCOLORS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,76,126,9 GROUPBOX "3D effects",IDC_STATIC,149,122,144,111 + CONTROL "Disable Fogging",IDC_DISABLEFOGGING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,147,96,10 END IDD_TAB_EMPTY DIALOGEX 0, 0, 300, 240 @@ -443,6 +444,7 @@ BEGIN CONTROL "Fix buffered IO after Win98",IDC_BUFFEREDIOFIX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,128,109,12 CONTROL "Clean ZBUFFER @1.0 fix",IDC_ZBUFFERCLEAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,116,109,12 CONTROL "Clean ZBUFFER @0.0 fix",IDC_ZBUFFER0CLEAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,104,109,12 + CONTROL "Textures not power of 2 fix",IDC_NOPOWER2FIX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,92,109,12 END IDD_TAB_SYSLIBS DIALOGEX 0, 0, 300, 240 diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index f78b449..9e72604 100644 Binary files a/host/dxwndhost.vs2008.suo and b/host/dxwndhost.vs2008.suo differ diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 14e2187..e141ccb 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -157,6 +157,8 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_ZBufferClean) t->flags4 |= ZBUFFERCLEAN; if(dlg->m_ZBuffer0Clean) t->flags4 |= ZBUFFER0CLEAN; if(dlg->m_ZBufferAlways) t->flags4 |= ZBUFFERALWAYS; + if(dlg->m_NoPower2Fix) t->flags4 |= NOPOWER2FIX; + if(dlg->m_DisableFogging) t->flags4 |= DISABLEFOGGING; if(dlg->m_SuppressIME) t->flags2 |= SUPPRESSIME; if(dlg->m_SuppressD3DExt) t->flags3 |= SUPPRESSD3DEXT; if(dlg->m_SetCompatibility) t->flags2 |= SETCOMPATIBILITY; @@ -314,6 +316,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_ZBufferClean = t->flags4 & ZBUFFERCLEAN ? 1 : 0; dlg->m_ZBuffer0Clean = t->flags4 & ZBUFFER0CLEAN ? 1 : 0; dlg->m_ZBufferAlways = t->flags4 & ZBUFFERALWAYS ? 1 : 0; + dlg->m_NoPower2Fix = t->flags4 & NOPOWER2FIX ? 1 : 0; + dlg->m_DisableFogging = t->flags4 & DISABLEFOGGING ? 1 : 0; dlg->m_SaveLoad = t->flags & SAVELOAD ? 1 : 0; dlg->m_SlowDown = t->flags & SLOWDOWN ? 1 : 0; dlg->m_BlitFromBackBuffer = t->flags & BLITFROMBACKBUFFER ? 1 : 0;