diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 15c7704..8bf3e55 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -20,7 +20,6 @@ #define HANDLEEXCEPTIONS 0x00000040 // Handles exceptions: Div by 0 .... #define SAVELOAD 0x00000080 #define EMULATEBUFFER 0x00000100 -//#define HANDLEDC 0x00000200 #define AUTOMATIC 0x00000200 #define BLITFROMBACKBUFFER 0x00000400 #define SUPPRESSCLIPPING 0x00000800 @@ -130,6 +129,7 @@ #define NOFILLRECT 0x00002000 // Suppress FillRect calls #define HOOKGLIDE 0x00004000 // Hook glide calls #define HIDEDESKTOP 0x00008000 // Hide desktop background +#define STRETCHTIMERS 0x00010000 // Enables timers stretching when TIMESTRETCH is on // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.dll b/build/dxwnd.dll index d1a1101..8850703 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6470041921d673a2f604bd9a646a2462aba707cab537c42a5770a9cc981dbb0a -size 458240 +oid sha256:7f096da2bcb539a443b930cc06ca3814a98394da357dcc2817a7ffa431bb5faa +size 459776 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 8f9b3f1..56379f4 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9760719d7520e5a1b652d530fc2f32b8018842d333594f06241a692b3904652 -size 535040 +oid sha256:4ccfe97f2a4ee32296cfaae398fe767a22f26d620ba7065c0cbc7a078eb2d459 +size 535552 diff --git a/build/dxwnd.ini b/build/dxwnd.ini index 76b75c2..9af460b 100644 --- a/build/dxwnd.ini +++ b/build/dxwnd.ini @@ -1332,7 +1332,7 @@ ver53=1 coord53=0 flag53=679477282 flagg53=1744830480 -flagh53=65556 +flagh53=65540 flagi53=4 tflag53=258 initx53=0 @@ -2305,7 +2305,7 @@ module92=jgl opengllib92= ver92=0 coord92=0 -flag92=973352994 +flag92=973353504 flagg92=136462360 flagh92=2162708 flagi92=4100 @@ -2375,14 +2375,14 @@ initts94=0 winver94=0 maxres94=0 title95=StarCraft -path95=D:\Games\Starcraft\StarCraft.exe +path95=D:\Games\Starcraft\Starcraft\StarCraft.exe module95= opengllib95= ver95=0 coord95=0 flag95=134217762 flagg95=134283264 -flagh95=20 +flagh95=32788 flagi95=8 tflag95=64 initx95=0 @@ -2824,17 +2824,17 @@ maxfps112=0 initts112=0 winver112=0 maxres112=0 -title113=Virtua Fighter PC -path113=D:\Games\Virtua Fighter\VFPC.EXE +title113=Warcraft 2 Battlenet Ed +path113=D:\Games\Warcraft 2 Battlenet Ed\Warcraft II BNE.exe module113= opengllib113= ver113=0 coord113=0 -flag113=402653218 -flagg113=1224736784 -flagh113=33562644 -flagi113=0 -tflag113=290 +flag113=134217762 +flagg113=1210122240 +flagh113=148 +flagi113=12 +tflag113=0 initx113=0 inity113=0 minx113=0 @@ -2848,18 +2848,18 @@ sizy113=600 maxfps113=0 initts113=0 winver113=0 -maxres113=2 -title114=Warcraft 2 Battlenet Ed -path114=D:\Games\Warcraft 2 Battlenet Ed\Warcraft II BNE.exe +maxres113=0 +title114=Wargasm +path114=D:\Games\Wargasm\tank.exe module114= opengllib114= ver114=0 -coord114=0 -flag114=134217762 -flagg114=1210122240 -flagh114=148 -flagi114=12 -tflag114=0 +coord114=2 +flag114=671088672 +flagg114=1207959696 +flagh114=65556 +flagi114=0 +tflag114=6162 initx114=0 inity114=0 minx114=0 @@ -2874,17 +2874,17 @@ maxfps114=0 initts114=0 winver114=0 maxres114=0 -title115=Wargasm -path115=D:\Games\Wargasm\tank.exe +title115=Whiteout +path115=D:\Games\Whiteout\Whiteout.exe module115= opengllib115= ver115=0 -coord115=2 -flag115=671088672 -flagg115=1207959696 -flagh115=65556 +coord115=0 +flag115=402653217 +flagg115=1207959552 +flagh115=20 flagi115=0 -tflag115=6162 +tflag115=66 initx115=0 inity115=0 minx115=0 @@ -2893,23 +2893,23 @@ maxx115=0 maxy115=0 posx115=50 posy115=50 -sizx115=800 -sizy115=600 +sizx115=640 +sizy115=480 maxfps115=0 initts115=0 winver115=0 maxres115=0 -title116=Warlords Battlecry II (DEMO) -path116=D:\Games\Warlords Battlecry II Demo\Battlecry II Demo.exe +title116=Wildfire +path116=D:\Games\Wildfire\Wildfire.exe module116= opengllib116= ver116=0 -coord116=2 -flag116=134217762 -flagg116=1207959568 -flagh116=22 -flagi116=0 -tflag116=258 +coord116=0 +flag116=-1476392958 +flagg116=1210122240 +flagh116=20 +flagi116=12 +tflag116=0 initx116=0 inity116=0 minx116=0 @@ -2924,17 +2924,17 @@ maxfps116=0 initts116=0 winver116=0 maxres116=0 -title117=Whiteout -path117=D:\Games\Whiteout\Whiteout.exe +title117=Worms Pinball +path117=D:\Games\Worms Pinball\WPIB.exe module117= opengllib117= -ver117=0 +ver117=1 coord117=0 -flag117=402653217 -flagg117=1207959552 +flag117=134217762 +flagg117=1207959568 flagh117=20 -flagi117=0 -tflag117=66 +flagi117=4 +tflag117=0 initx117=0 inity117=0 minx117=0 @@ -2943,22 +2943,22 @@ maxx117=0 maxy117=0 posx117=50 posy117=50 -sizx117=640 -sizy117=480 +sizx117=800 +sizy117=600 maxfps117=0 initts117=0 winver117=0 maxres117=0 -title118=Wildfire -path118=D:\Games\Wildfire\Wildfire.exe +title118=Zanzarah +path118=D:\Games\Zanzarah\System\zanthp.exe module118= opengllib118= ver118=0 coord118=0 -flag118=-1476392958 -flagg118=1210122240 +flag118=679477280 +flagg118=1207959552 flagh118=20 -flagi118=12 +flagi118=0 tflag118=0 initx118=0 inity118=0 @@ -2974,14 +2974,14 @@ maxfps118=0 initts118=0 winver118=0 maxres118=0 -title119=Worms Pinball -path119=D:\Games\Worms Pinball\WPIB.exe +title119=ZPC Zero Population Count +path119=D:\Games\ZPC\ZPC.EXE module119= opengllib119= -ver119=1 +ver119=0 coord119=0 flag119=134217762 -flagg119=1207959568 +flagg119=1207959552 flagh119=20 flagi119=4 tflag119=0 @@ -2999,17 +2999,17 @@ maxfps119=0 initts119=0 winver119=0 maxres119=0 -title120=Zanzarah -path120=D:\Games\Zanzarah\System\zanthp.exe +title120=Black Thorn +path120=D:\Games\Black Thorn\BlackThorn.exe module120= opengllib120= ver120=0 coord120=0 -flag120=679477280 -flagg120=1207959552 -flagh120=20 -flagi120=0 -tflag120=0 +flag120=687886372 +flagg120=134217728 +flagh120=65556 +flagi120=4 +tflag120=6211 initx120=0 inity120=0 minx120=0 @@ -3023,18 +3023,18 @@ sizy120=600 maxfps120=0 initts120=0 winver120=0 -maxres120=0 -title121=Zax the Alien Hunter (DEMO) -path121=D:\Games\ZaxDemo\Zax.exe +maxres120=-1 +title121=Empire of the Ants +path121=D:\Games\Empire of the Ants\Game.exe module121= opengllib121= ver121=0 -coord121=2 -flag121=-2011168734 -flagg121=1209008144 +coord121=0 +flag121=1023426596 +flagg121=134217744 flagh121=20 -flagi121=0 -tflag121=258 +flagi121=4 +tflag121=6466 initx121=0 inity121=0 minx121=0 @@ -3048,18 +3048,18 @@ sizy121=600 maxfps121=0 initts121=0 winver121=0 -maxres121=0 -title122=ZPC Zero Population Count -path122=D:\Games\ZPC\ZPC.EXE +maxres121=-1 +title122=Populous 3 (GOG - D3D) +path122=D:\Games\Populous 3 (GOG)\D3DPopTB.exe module122= opengllib122= ver122=0 -coord122=0 -flag122=134217762 -flagg122=1207959552 -flagh122=20 +coord122=2 +flag122=738214436 +flagg122=134217744 +flagh122=65556 flagi122=4 -tflag122=0 +tflag122=6147 initx122=0 inity122=0 minx122=0 @@ -3073,18 +3073,18 @@ sizy122=600 maxfps122=0 initts122=0 winver122=0 -maxres122=0 -title123=Black Thorn -path123=D:\Games\Black Thorn\BlackThorn.exe +maxres122=-1 +title123=Populous 3 (GOG) +path123=D:\Games\Populous 3 (GOG)\popTB.exe module123= opengllib123= ver123=0 coord123=0 -flag123=692076580 -flagg123=1207959552 +flag123=671105572 +flagg123=1207959568 flagh123=20 flagi123=4 -tflag123=6211 +tflag123=0 initx123=0 inity123=0 minx123=0 @@ -3099,17 +3099,17 @@ maxfps123=0 initts123=0 winver123=0 maxres123=-1 -title124=Empire of the Ants -path124=D:\Games\Empire of the Ants\Game.exe +title124=Thief 2 (GOG) +path124=D:\Games\Thief 2 (GOG)\thief2_no_ddfix.exe module124= opengllib124= ver124=0 coord124=0 -flag124=1023426596 -flagg124=134217744 -flagh124=20 +flag124=671089184 +flagg124=1207959552 +flagh124=65556 flagi124=4 -tflag124=6466 +tflag124=0 initx124=0 inity124=0 minx124=0 @@ -3124,20 +3124,20 @@ maxfps124=0 initts124=0 winver124=0 maxres124=-1 -title125=Populous 3 (GOG - D3D) +title125=Freelancer module125= opengllib125= -title126=Populous 3 (GOG) +title126=Virtua Fighter PC module126= opengllib126= -path125=D:\Games\Populous 3 (GOG)\D3DPopTB.exe +path125=D:\Games\Freelancer\EXE\Freelancer.exe ver125=0 coord125=0 -flag125=671105572 -flagg125=134217744 +flag125=671089184 +flagg125=1207959552 flagh125=65556 flagi125=4 -tflag125=6146 +tflag125=1024 initx125=0 inity125=0 minx125=0 @@ -3152,14 +3152,14 @@ maxfps125=0 initts125=0 winver125=0 maxres125=-1 -path126=D:\Games\Populous 3 (GOG)\popTB.exe +path126=D:\Games\Virtua Fighter\VFPC.EXE ver126=0 coord126=0 -flag126=671105572 -flagg126=1207959568 +flag126=134218272 +flagg126=134217744 flagh126=20 flagi126=4 -tflag126=0 +tflag126=6147 initx126=0 inity126=0 minx126=0 @@ -3174,15 +3174,15 @@ maxfps126=0 initts126=0 winver126=0 maxres126=-1 -title127=Thief 2 (GOG) -path127=D:\Games\Thief 2 (GOG)\thief2_no_ddfix.exe +title127=Heroes of Might & Magic 2 +path127=D:\Games\Heroes of Might & Magic 2\HEROES2W.EXE module127= opengllib127= ver127=0 coord127=0 -flag127=687865888 +flag127=2 flagg127=1207959552 -flagh127=65556 +flagh127=20 flagi127=4 tflag127=0 initx127=0 @@ -3199,8 +3199,389 @@ maxfps127=0 initts127=0 winver127=0 maxres127=-1 +title128=Evolva +path128=D:\Games\Evolva\Evolva.exe +module128= +opengllib128= +ver128=0 +coord128=0 +flag128=134217760 +flagg128=1207959552 +flagh128=20 +flagi128=4 +tflag128=6146 +initx128=0 +inity128=0 +minx128=0 +miny128=0 +maxx128=0 +maxy128=0 +posx128=50 +posy128=50 +sizx128=800 +sizy128=600 +maxfps128=0 +initts128=0 +winver128=0 +maxres128=-1 +title129=Heroes of Might & Magic 2 (POL) +path129=D:\Games\HEROES2\HEROES2W.EXE +module129= +opengllib129= +ver129=0 +coord129=0 +flag129=134218240 +flagg129=1207959560 +flagh129=20 +flagi129=32772 +tflag129=1024 +initx129=0 +inity129=0 +minx129=0 +miny129=0 +maxx129=0 +maxy129=0 +posx129=50 +posy129=50 +sizx129=800 +sizy129=600 +maxfps129=0 +initts129=0 +winver129=0 +maxres129=-1 +title130=Castle Strike +path130=D:\Games\Castle Strike\Castlestrike.exe +module130= +opengllib130= +ver130=8 +coord130=0 +flag130=671089184 +flagg130=1208483840 +flagh130=20 +flagi130=4 +tflag130=6155 +initx130=0 +inity130=0 +minx130=0 +miny130=0 +maxx130=0 +maxy130=0 +posx130=50 +posy130=50 +sizx130=800 +sizy130=600 +maxfps130=0 +initts130=0 +winver130=0 +maxres130=-1 +title131=Carnivores 3DFX +path131=D:\Games\Carnivores\HUNT3DFX.EXE +module131= +opengllib131= +ver131=0 +coord131=0 +flag131=671089184 +flagg131=1207959552 +flagh131=20 +flagi131=4 +tflag131=0 +initx131=0 +inity131=0 +minx131=0 +miny131=0 +maxx131=0 +maxy131=0 +posx131=50 +posy131=50 +sizx131=800 +sizy131=600 +maxfps131=0 +initts131=0 +winver131=0 +maxres131=-1 +title132=Carnivores +path132=D:\Games\Carnivores\HUNTSOFT.EXE +module132= +opengllib132= +ver132=0 +coord132=0 +flag132=939524640 +flagg132=1209008128 +flagh132=20 +flagi132=4 +tflag132=0 +initx132=0 +inity132=0 +minx132=0 +miny132=0 +maxx132=0 +maxy132=0 +posx132=50 +posy132=50 +sizx132=800 +sizy132=600 +maxfps132=0 +initts132=0 +winver132=0 +maxres132=-1 +title133=Catechumen (3DFX) +path133=D:\Games\Catechumen\game\Catechumen.exe +module133= +opengllib133= +ver133=9 +coord133=0 +flag133=402653218 +flagg133=1207959552 +flagh133=65556 +flagi133=16388 +tflag133=0 +initx133=0 +inity133=0 +minx133=0 +miny133=0 +maxx133=0 +maxy133=0 +posx133=50 +posy133=50 +sizx133=800 +sizy133=600 +maxfps133=0 +initts133=0 +winver133=0 +maxres133=-1 +title134=Deus Ex +path134=D:\Games\Deus Ex\System\DeusEx.exe +module134= +opengllib134= +ver134=9 +coord134=0 +flag134=134218240 +flagg134=1207959552 +flagh134=65556 +flagi134=4 +tflag134=0 +initx134=0 +inity134=0 +minx134=0 +miny134=0 +maxx134=0 +maxy134=0 +posx134=50 +posy134=50 +sizx134=800 +sizy134=600 +maxfps134=0 +initts134=0 +winver134=0 +maxres134=-1 +title135=Warhammer 40K Chaos Gate +path135=D:\Games\Warhammer 40K Chaos Gate\game\WH40K.exe +module135= +opengllib135= +ver135=0 +coord135=0 +flag135=679494176 +flagg135=134217728 +flagh135=20 +flagi135=4 +tflag135=0 +initx135=0 +inity135=0 +minx135=0 +miny135=0 +maxx135=0 +maxy135=0 +posx135=50 +posy135=50 +sizx135=800 +sizy135=600 +maxfps135=0 +initts135=0 +winver135=0 +maxres135=-1 +title136=Warhammer 40K Final Liberation +path136=D:\Games\Warhammer 40K Final Liberation\EPIC40K.EXE +module136= +opengllib136= +ver136=0 +coord136=0 +flag136=134217762 +flagg136=134217744 +flagh136=98324 +flagi136=4 +tflag136=6147 +initx136=0 +inity136=0 +minx136=0 +miny136=0 +maxx136=0 +maxy136=0 +posx136=50 +posy136=50 +sizx136=640 +sizy136=480 +maxfps136=0 +initts136=0 +winver136=0 +maxres136=-1 +title137=Warhammer 40K Rites Of War +path137=D:\Games\Warhammer 40K Rites Of War\game\RoW.orig.exe +module137= +opengllib137= +ver137=1 +coord137=0 +flag137=1744846882 +flagg137=134217858 +flagh137=20 +flagi137=0 +tflag137=6403 +initx137=0 +inity137=0 +minx137=0 +miny137=0 +maxx137=0 +maxy137=0 +posx137=50 +posy137=50 +sizx137=800 +sizy137=600 +maxfps137=0 +initts137=0 +winver137=0 +maxres137=-1 +title138=Darkened Skye +path138=D:\Games\Darkened Skye\Skye.exe +module138= +opengllib138= +ver138=0 +coord138=0 +flag138=679493664 +flagg138=1208025088 +flagh138=65556 +flagi138=4 +tflag138=6147 +initx138=0 +inity138=0 +minx138=0 +miny138=0 +maxx138=0 +maxy138=0 +posx138=50 +posy138=50 +sizx138=800 +sizy138=600 +maxfps138=0 +initts138=-2 +winver138=0 +maxres138=-1 +title139=New York Race +path139=D:\Games\New York Race\NYR.exe +module139= +opengllib139= +ver139=8 +coord139=0 +flag139=687867937 +flagg139=1208025104 +flagh139=65556 +flagi139=12 +tflag139=4097 +initx139=0 +inity139=0 +minx139=0 +miny139=0 +maxx139=0 +maxy139=0 +posx139=50 +posy139=50 +sizx139=800 +sizy139=600 +maxfps139=0 +initts139=0 +winver139=0 +maxres139=-1 +title140=Incoming (GOG) +path140=D:\Games\Incoming and Incoming Forces\Incoming\incoming.exe +module140= +opengllib140= +ver140=7 +coord140=2 +flag140=150994976 +flagg140=1207959568 +flagh140=20 +flagi140=4 +tflag140=1024 +initx140=0 +inity140=0 +minx140=0 +miny140=0 +maxx140=0 +maxy140=0 +posx140=50 +posy140=50 +sizx140=800 +sizy140=600 +maxfps140=0 +initts140=0 +winver140=0 +maxres140=-1 +title141=Incoming Forces (GOG) +path141=D:\Games\Incoming and Incoming Forces\Incoming Forces\forces.exe +module141= +opengllib141= +ver141=0 +coord141=0 +flag141=134218272 +flagg141=1207959552 +flagh141=20 +flagi141=4 +tflag141=1024 +initx141=0 +inity141=0 +minx141=0 +miny141=0 +maxx141=0 +maxy141=0 +posx141=50 +posy141=50 +sizx141=800 +sizy141=600 +maxfps141=0 +initts141=0 +winver141=0 +maxres141=-1 +title142=CIsland.exe +path142=D:\Games\ChaosIsland\CIsland.exe +module142= +opengllib142= +ver142=0 +coord142=0 +flag142=134218272 +flagg142=1207959552 +flagh142=20 +flagi142=4 +tflag142=6147 +initx142=0 +inity142=0 +minx142=0 +miny142=0 +maxx142=0 +maxy142=0 +posx142=50 +posy142=50 +sizx142=800 +sizy142=600 +maxfps142=0 +initts142=0 +winver142=0 +maxres142=-1 +title143=Incoming (GOG) +module143= +opengllib143= +title144=Incoming Forces (GOG) +module144= +opengllib144= [window] -posx=1129 -posy=466 +posx=1161 +posy=364 sizx=638 -sizy=448 +sizy=618 diff --git a/build/exports/Carnivores 3DFX.dxw b/build/exports/Carnivores 3DFX.dxw new file mode 100644 index 0000000..ad91712 --- /dev/null +++ b/build/exports/Carnivores 3DFX.dxw @@ -0,0 +1,26 @@ +[target] +title0=Carnivores 3DFX +path0=D:\Games\Carnivores\HUNT3DFX.EXE +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=671089184 +flagg0=1207959552 +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/Carnivores.dxw b/build/exports/Carnivores.dxw new file mode 100644 index 0000000..ba8d91d --- /dev/null +++ b/build/exports/Carnivores.dxw @@ -0,0 +1,26 @@ +[target] +title0=Carnivores +path0=D:\Games\Carnivores\HUNTSOFT.EXE +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=939524640 +flagg0=1209008128 +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/Catechumen (3DFX).dxw b/build/exports/Catechumen (3DFX).dxw new file mode 100644 index 0000000..efd3ca6 --- /dev/null +++ b/build/exports/Catechumen (3DFX).dxw @@ -0,0 +1,26 @@ +[target] +title0=Catechumen (3DFX) +path0=D:\Games\Catechumen\game\Catechumen.exe +module0= +opengllib0= +ver0=9 +coord0=0 +flag0=402653218 +flagg0=1207959552 +flagh0=65556 +flagi0=16388 +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/Darkened Skye.dxw b/build/exports/Darkened Skye.dxw new file mode 100644 index 0000000..8aa2c65 --- /dev/null +++ b/build/exports/Darkened Skye.dxw @@ -0,0 +1,26 @@ +[target] +title0=Darkened Skye +path0=D:\Games\Darkened Skye\Skye.exe +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=679493664 +flagg0=1207959552 +flagh0=65556 +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/Evolva.dxw b/build/exports/Evolva.dxw new file mode 100644 index 0000000..1aa687b --- /dev/null +++ b/build/exports/Evolva.dxw @@ -0,0 +1,26 @@ +[target] +title0=Evolva +path0=D:\Games\Evolva\Evolva.exe +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134217760 +flagg0=1207959552 +flagh0=20 +flagi0=4 +tflag0=6146 +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/Incoming (GOG).dxw b/build/exports/Incoming (GOG).dxw new file mode 100644 index 0000000..5d12196 --- /dev/null +++ b/build/exports/Incoming (GOG).dxw @@ -0,0 +1,26 @@ +[target] +title0=Incoming (GOG) +path0=D:\Games\Incoming and Incoming Forces\Incoming\incoming.exe +module0= +opengllib0= +ver0=7 +coord0=0 +flag0=150994976 +flagg0=1207959552 +flagh0=20 +flagi0=4 +tflag0=1024 +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/Incoming Forces (GOG).dxw b/build/exports/Incoming Forces (GOG).dxw new file mode 100644 index 0000000..f340bff --- /dev/null +++ b/build/exports/Incoming Forces (GOG).dxw @@ -0,0 +1,26 @@ +[target] +title0=Incoming Forces (GOG) +path0=D:\Games\Incoming and Incoming Forces\Incoming Forces\forces.exe +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134218272 +flagg0=1207959552 +flagh0=20 +flagi0=4 +tflag0=1024 +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/New York Race.dxw b/build/exports/New York Race.dxw new file mode 100644 index 0000000..51801a6 --- /dev/null +++ b/build/exports/New York Race.dxw @@ -0,0 +1,26 @@ +[target] +title0=New York Race +path0=D:\Games\New York Race\NYR.exe +module0= +opengllib0= +ver0=8 +coord0=0 +flag0=687867937 +flagg0=1207959568 +flagh0=65556 +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/Star Wars Episode I Racer.dxw b/build/exports/Star Wars Episode I Racer.dxw index 37ebbe2..b1a9c5a 100644 --- a/build/exports/Star Wars Episode I Racer.dxw +++ b/build/exports/Star Wars Episode I Racer.dxw @@ -9,7 +9,7 @@ flag0=679493669 flagg0=1210056720 flagh0=8212 flagi0=20 -tflag0=67 +tflag0=0 initx0=0 inity0=0 minx0=0 @@ -22,3 +22,5 @@ sizx0=800 sizy0=600 maxfps0=0 initts0=0 +winver0=0 +maxres0=0 diff --git a/build/exports/Virtua Fighter PC.dxw b/build/exports/Virtua Fighter PC.dxw new file mode 100644 index 0000000..efd27c1 --- /dev/null +++ b/build/exports/Virtua Fighter PC.dxw @@ -0,0 +1,26 @@ +[target] +title0=Virtua Fighter PC +path0=D:\Games\Virtua Fighter\VFPC.EXE +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134218272 +flagg0=134217744 +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/Warhammer 40K Chaos Gate.dxw b/build/exports/Warhammer 40K Chaos Gate.dxw index 439ffb7..1d4db28 100644 --- a/build/exports/Warhammer 40K Chaos Gate.dxw +++ b/build/exports/Warhammer 40K Chaos Gate.dxw @@ -5,11 +5,11 @@ module0= opengllib0= ver0=0 coord0=0 -flag0=679493667 -flagg0=1207959552 +flag0=679494176 +flagg0=134217728 flagh0=20 flagi0=4 -tflag0=64 +tflag0=0 initx0=0 inity0=0 minx0=0 diff --git a/build/exports/Warhammer 40K Final Liberation.dxw b/build/exports/Warhammer 40K Final Liberation.dxw new file mode 100644 index 0000000..7e394c3 --- /dev/null +++ b/build/exports/Warhammer 40K Final Liberation.dxw @@ -0,0 +1,26 @@ +[target] +title0=Warhammer 40K Final Liberation +path0=D:\Games\Warhammer 40K Final Liberation\EPIC40K.EXE +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134217762 +flagg0=134217744 +flagh0=98324 +flagi0=4 +tflag0=6147 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=640 +sizy0=480 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 6aaf2f4..34966fe 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -396,5 +396,9 @@ Automatic mode allows dynamic mode change depending on the situation: it is nece fixed BltFast operation with SRC color key (often used to draw cursor from texures) directly to primary surface: this makes the cursor visible in Populous 3. minor fixes on logging +v2.02.59 +fixed IDIrectDraw reference counter for ddraw release 1 session: fixes "Warhammer 40K Rites Of War" first screen +fixed QueryPerformanceCounter handling: fixes "New Yourk Racer" time stretching problems + diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index f8d8ea2..05180b0 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -317,8 +317,8 @@ static char *DumpPixelFormat(LPDDSURFACEDESC2 lpddsd) static char sBuf[512]; char sItem[256]; DWORD flags=lpddsd->ddpfPixelFormat.dwFlags; - sprintf(sBuf, " PixelFormat size=%d flags=%x(%s) BPP=%d", - lpddsd->dwSize, flags, ExplainPixelFormatFlags(flags), lpddsd->ddpfPixelFormat.dwRGBBitCount); + sprintf(sBuf, " PixelFormat flags=%x(%s) BPP=%d", + flags, ExplainPixelFormatFlags(flags), lpddsd->ddpfPixelFormat.dwRGBBitCount); if (flags & DDPF_RGB) { if (flags & DDPF_ALPHAPIXELS) { sprintf(sItem, " RGBA=(%x,%x,%x,%x)", @@ -1443,6 +1443,13 @@ HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, I HookDDSession(lplpdd, dxw.dwDDVersion); + // beware: old ddraw games seem to reuse a closed ddraw handle. The theory is that maybe whenever + // you created a ddraw session, you got more than one reference count, so that releasing it once + // did not destroy the object.... but why? when (I mean, in which situations? Maybe not always...) + // and for which releases? The fix here assumes that this fact is true and holds always for ddraw 1 + // sessions. + if(dxw.dwDDVersion==1) (*lplpdd)->AddRef(); // seems to fix problems in "Warhammer 40K Rites Of War" + if(IsDebug && (dxw.dwTFlags & OUTPROXYTRACE)){ DDCAPS DriverCaps, EmulCaps; memset(&DriverCaps, 0, sizeof(DriverCaps)); @@ -3438,6 +3445,7 @@ HRESULT WINAPI extSetClipper(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpdd // v2.1.84: SUPPRESSCLIPPING flag - improves "Monopoly Edition 3D" where continuous // clipping ON & OFF affects blitting on primary surface. + // Needed also to avoid "New Yourk Racer" intro movie clipping. if(dxw.dwFlags1 & SUPPRESSCLIPPING) return 0; if(dxw.dwFlags1 & (EMULATESURFACE|EMULATEBUFFER)){ diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index c3a0e36..6d670e0 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -72,7 +72,7 @@ static char *Flag4Names[32]={ "ZBUFFERCLEAN", "ZBUFFER0CLEAN", "ZBUFFERALWAYS", "DISABLEFOGGING", "NOPOWER2FIX", "NOPERFCOUNTER", "ADDPROXYLIBS", "INTERCEPTRDTSC", "LIMITSCREENRES", "NOFILLRECT", "HOOKGLIDE", "HIDEDESKTOP", - "", "", "", "", + "STRETCHTIMERS", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", @@ -787,8 +787,10 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp } } + if(dxw.dwFlags4 & STRETCHTIMERS){ if(LastTimeShift != dxw.TimeShift) dxw.RenewTimers(); LastTimeShift=dxw.TimeShift; + } switch(message){ // v2.02.13: added WM_GETMINMAXINFO/WM_NCCALCSIZE interception - (see Actua Soccer 3 problems...) @@ -1200,7 +1202,8 @@ LONG CALLBACK Int3Handler(PEXCEPTION_POINTERS ExceptionInfo) mov myPerfCount.HighPart, edx } #endif - myPerfCount = dxw.StretchCounter(myPerfCount); + //myPerfCount = dxw.StretchCounter(myPerfCount); + myPerfCount = dxw.StretchLargeCounter(myPerfCount); OutTraceDW("Int3Handler: INT3 at=%x tick=%x RDTSC=%x:%x\n", ExceptionInfo->ExceptionRecord->ExceptionAddress, (*pGetTickCount)(), myPerfCount.HighPart, myPerfCount.LowPart); diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index b48d26f..9a1946c 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -1438,18 +1438,24 @@ void dxwCore::PopTimer(HWND hWnd, UINT_PTR nIDEvent) void dxwCore::RenewTimers() { + OutTraceE("DXWND: RenewTimers type=%x\n", TimerEvent.dwTimerType); switch(TimerEvent.dwTimerType){ case TIMER_TYPE_NONE: + OutTraceDW("DXWND: RenewTimers type=NONE\n"); break; case TIMER_TYPE_USER32: if(pSetTimer && pKillTimer){ UINT uElapse; UINT_PTR res; - (*pKillTimer)(TimerEvent.t.hWnd, TimerEvent.t.nIDEvent); + res=(*pKillTimer)(TimerEvent.t.hWnd, TimerEvent.t.nIDEvent); + if(!res) OutTraceE("DXWND: KillTimer ERROR hWnd=%x IDEvent=%x err=%d\n", TimerEvent.t.hWnd, TimerEvent.t.nIDEvent, GetLastError()); uElapse = dxw.StretchTime(TimerEvent.t.uElapse); res=(*pSetTimer)(TimerEvent.t.hWnd, TimerEvent.t.nIDEvent, uElapse, TimerEvent.t.lpTimerFunc); TimerEvent.t.nIDEvent = res; + if(res) OutTraceDW("DXWND: RenewTimers type=USER32 Elsapse=%d IDEvent=%x\n", uElapse, res); + else + OutTraceE("DXWND: SetTimer ERROR hWnd=%x Elapse=%d TimerFunc=%x err=%d\n", TimerEvent.t.hWnd, uElapse, TimerEvent.t.lpTimerFunc, GetLastError()); } break; case TIMER_TYPE_WINMM: @@ -1463,9 +1469,37 @@ void dxwCore::RenewTimers() OutTraceDW("DXWND: RenewTimers type=WINMM Delay=%d TimerId=%x\n", NewDelay, res); } break; + default: + OutTraceE("DXWND: RenewTimers type=%x(UNKNOWN)\n", TimerEvent.dwTimerType); + break; } } +LARGE_INTEGER dxwCore::StretchLargeCounter(LARGE_INTEGER CurrentInCount) +{ + LARGE_INTEGER CurrentOutPerfCount; + static LARGE_INTEGER LastInPerfCount; + static LARGE_INTEGER LastOutPerfCount; + static BOOL FirstTime = TRUE; + LARGE_INTEGER ElapsedCount; + + if(FirstTime){ + // first time through, initialize both inner and output per counters with real values + LastInPerfCount.QuadPart = CurrentInCount.QuadPart; + LastOutPerfCount.QuadPart = CurrentInCount.QuadPart; + FirstTime=FALSE; + } + + ElapsedCount.QuadPart = CurrentInCount.QuadPart - LastInPerfCount.QuadPart; + ElapsedCount = dxw.StretchCounter(ElapsedCount); + CurrentOutPerfCount.QuadPart = LastOutPerfCount.QuadPart + ElapsedCount.QuadPart; + LastInPerfCount = CurrentInCount; + LastOutPerfCount = CurrentOutPerfCount; + + OutTraceB("dxw::StretchCounter: Count=[%x-%x]\n", CurrentOutPerfCount.HighPart, CurrentOutPerfCount.LowPart); + return CurrentOutPerfCount; +} + BOOL dxwCore::CheckScreenResolution(unsigned int w, unsigned int h) { #define HUGE 100000 diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index b995bda..685218c 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -113,6 +113,7 @@ public: // methods void PopTimer(HWND, UINT_PTR); void RenewTimers(); BOOL CheckScreenResolution(unsigned int, unsigned int); + LARGE_INTEGER StretchLargeCounter(LARGE_INTEGER); public: // simple data variables DDPIXELFORMAT ActualPixelFormat; diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index de28892..f043e94 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.58" +#define VERSION "2.02.59" #define DDTHREADLOCK 1 diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index b8f058b..68bd8e7 100644 Binary files a/dll/dxwnd.vs2008.suo and b/dll/dxwnd.vs2008.suo differ diff --git a/dll/kernel32.cpp b/dll/kernel32.cpp index 670af27..8e37c87 100644 --- a/dll/kernel32.cpp +++ b/dll/kernel32.cpp @@ -351,17 +351,18 @@ void WINAPI extGetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) BOOL WINAPI extQueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount) { BOOL ret; - LARGE_INTEGER myPerfCount; + if(dxw.dwFlags4 & NOPERFCOUNTER){ ret=0; - myPerfCount.QuadPart = 0; + (*lpPerformanceCount).QuadPart = 0; } else{ - ret=(*pQueryPerformanceCounter)(&myPerfCount); - myPerfCount = dxw.StretchCounter(myPerfCount); + LARGE_INTEGER CurrentInCount; + ret=(*pQueryPerformanceCounter)(&CurrentInCount); + *lpPerformanceCount = dxw.StretchLargeCounter(CurrentInCount); } - *lpPerformanceCount = myPerfCount; - OutTraceB("QueryPerformanceCounter: ret=%x Count=%x-%x\n", ret, lpPerformanceCount->HighPart, lpPerformanceCount->LowPart); + + OutTraceB("QueryPerformanceCounter: ret=%x Count=[%x-%x]\n", ret, lpPerformanceCount->HighPart, lpPerformanceCount->LowPart); return ret; } diff --git a/dll/user32.cpp b/dll/user32.cpp index b721eaf..7e0ae39 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -149,7 +149,7 @@ FARPROC Remap_user32_ProcAddress(LPCSTR proc, HMODULE hModule) if (addr=RemapLibrary(proc, hModule, MouseHooks2)) return addr; if (dxw.dwFlags3 & PEEKALLMESSAGES) if (addr=RemapLibrary(proc, hModule, PeekAllHooks)) return addr; - if(dxw.dwFlags2 & TIMESTRETCH) + if((dxw.dwFlags2 & TIMESTRETCH) && (dxw.dwFlags4 & STRETCHTIMERS)) if (addr=RemapLibrary(proc, hModule, TimeHooks)) return addr; return NULL; @@ -2268,5 +2268,6 @@ BOOL WINAPI extKillTimer(HWND hWnd, UINT_PTR uIDEvent) OutTraceDW("KillTimer: hwnd=%x IDEvent=%x\n", hWnd, uIDEvent); ret = (*pKillTimer)(hWnd, uIDEvent); OutTraceDW("KillTimer: ret=%x\n", ret); + if(ret) dxw.PopTimer(hWnd, uIDEvent); return ret; } diff --git a/dll/winmm.cpp b/dll/winmm.cpp index 3ba6458..c573f76 100644 --- a/dll/winmm.cpp +++ b/dll/winmm.cpp @@ -51,7 +51,8 @@ MMRESULT WINAPI exttimeSetEvent(UINT uDelay, UINT uResolution, LPTIMECALLBACK lp MMRESULT res; UINT NewDelay; OutTraceDW("timeSetEvent: Delay=%d Resolution=%d Event=%x\n", uDelay, uResolution, fuEvent); - NewDelay = dxw.StretchTime(uDelay); + if(dxw.dwFlags4 & STRETCHTIMERS) NewDelay = dxw.StretchTime(uDelay); + else NewDelay = uDelay; res=(*ptimeSetEvent)(NewDelay, uResolution, lpTimeProc, dwUser, fuEvent); if(res) dxw.PushTimer(res, uDelay, uResolution, lpTimeProc, dwUser, fuEvent); OutTraceDW("timeSetEvent: ret=%x\n", res); diff --git a/host/Resource.h b/host/Resource.h index 73a9d8a..c0b4241 100644 --- a/host/Resource.h +++ b/host/Resource.h @@ -204,6 +204,7 @@ #define IDC_INTERCEPTRDTSC 1161 #define IDC_NOFILLRECT 1162 #define IDC_HIDEDESKTOP 1163 +#define IDC_STRETCHTIMERS 1164 #define ID_MODIFY 32771 #define ID_DELETE 32772 #define ID_ADD 32773 diff --git a/host/TabTiming.cpp b/host/TabTiming.cpp index 050d326..e0c5bc5 100644 --- a/host/TabTiming.cpp +++ b/host/TabTiming.cpp @@ -35,6 +35,7 @@ void CTabTiming::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_SHOWTIMESTRETCH, cTarget->m_ShowTimeStretch); DDX_Check(pDX, IDC_TIMESTRETCH, cTarget->m_TimeStretch); DDX_Check(pDX, IDC_INTERCEPTRDTSC, cTarget->m_InterceptRDTSC); + DDX_Check(pDX, IDC_STRETCHTIMERS, cTarget->m_StretchTimers); DDX_Text(pDX, IDC_MAXFPS, cTarget->m_MaxFPS); DDX_LBIndex(pDX, IDC_LISTTS, cTarget->m_InitTS); //{{AFX_DATA_MAP(CTabTiming) diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index c9532aa..50043fc 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -123,6 +123,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_ShowFPSOverlay = FALSE; m_ShowTimeStretch = FALSE; m_TimeStretch = FALSE; + m_StretchTimers = FALSE; m_InterceptRDTSC = FALSE; m_HookOpenGL = FALSE; m_ForceHookOpenGL = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index ee22b11..18ba2c4 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -104,6 +104,7 @@ public: BOOL m_ShowFPSOverlay; BOOL m_ShowTimeStretch; BOOL m_TimeStretch; + BOOL m_StretchTimers; BOOL m_InterceptRDTSC; BOOL m_HookOpenGL; BOOL m_ForceHookOpenGL; diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 5060d65..9884c9d 100644 --- a/host/dxwndhost.rc +++ b/host/dxwndhost.rc @@ -401,6 +401,7 @@ BEGIN GROUPBOX "Time Stretching",IDC_STATIC,7,94,139,102 CONTROL "Show time stretch",IDC_SHOWTIMESTRETCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,134,84,10 CONTROL "Intercept RDTSC opcode",IDC_INTERCEPTRDTSC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,164,127,10 + CONTROL "Stretch timers",IDC_STRETCHTIMERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,176,127,10 END IDD_TAB_OUTPUT DIALOGEX 0, 0, 300, 240 diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index 2352abc..cc73e27 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 ddcdda3..351a9b0 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -232,6 +232,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_ShowFPSOverlay) t->flags2 |= SHOWFPSOVERLAY; if(dlg->m_ShowTimeStretch) t->flags4 |= SHOWTIMESTRETCH; if(dlg->m_TimeStretch) t->flags2 |= TIMESTRETCH; + if(dlg->m_StretchTimers) t->flags4 |= STRETCHTIMERS; if(dlg->m_InterceptRDTSC) t->flags4 |= INTERCEPTRDTSC; if(dlg->m_HookOpenGL) t->flags2 |= HOOKOPENGL; if(dlg->m_ForceHookOpenGL) t->flags3 |= FORCEHOOKOPENGL; @@ -387,6 +388,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_ShowFPSOverlay = t->flags2 & SHOWFPSOVERLAY ? 1 : 0; dlg->m_ShowTimeStretch = t->flags4 & SHOWTIMESTRETCH ? 1 : 0; dlg->m_TimeStretch = t->flags2 & TIMESTRETCH ? 1 : 0; + dlg->m_StretchTimers = t->flags4 & STRETCHTIMERS ? 1 : 0; dlg->m_InterceptRDTSC = t->flags4 & INTERCEPTRDTSC ? 1 : 0; dlg->m_HookOpenGL = t->flags2 & HOOKOPENGL ? 1 : 0; dlg->m_ForceHookOpenGL = t->flags3 & FORCEHOOKOPENGL ? 1 : 0;