From bf26e50bd9c4ad6bb9db6679012eaa5e88fbf087 Mon Sep 17 00:00:00 2001 From: gho tik Date: Sat, 11 Jul 2015 12:42:23 -0400 Subject: [PATCH] v2_03_44_src Former-commit-id: 78999489be6a5745474ed4d697cf755eb76db1a2 --- build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- build/dxwnd.ini | 70 ----------- build/exports/Imperialism II.dxw | 2 +- build/exports/Reah.dxw | 32 +++++ build/exports/Super Real Mahjong P7.dxw | 32 +++++ build/readme-relnotes.txt | 11 +- dll/dxhelper.cpp | 2 +- dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 105472 -> 105472 bytes dll/fire1.bmp | Bin 3942 -> 3942 bytes dll/fire2.bmp | Bin 3942 -> 3942 bytes dll/fire3.bmp | Bin 3942 -> 3942 bytes dll/gdi32.cpp | 151 ++++++++++++++---------- dll/msvfw.cpp | 57 ++++++++- dll/user32.cpp | 31 +++-- dll/winmm.cpp | 17 +-- host/dxwndhost.rc | Bin 106264 -> 106264 bytes host/dxwndhost.vs2008.suo | Bin 30208 -> 30208 bytes 19 files changed, 254 insertions(+), 159 deletions(-) delete mode 100644 build/dxwnd.ini create mode 100644 build/exports/Reah.dxw create mode 100644 build/exports/Super Real Mahjong P7.dxw diff --git a/build/dxwnd.dll b/build/dxwnd.dll index b101732..29e3792 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:367c504db6f66d3f5c9e40e1a3e3aeb94f3c5a3df7b7bd9134a649379a40c8fa -size 612864 +oid sha256:4fa45747fcb74b2f182ae1d40d3d2219eef7a9410a72a7db49157aba403d9fe4 +size 613888 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 8f4f1a8..fb487c0 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b44208fd7eef222ff0861d95418c3aabb46481b83198c1b40d769bc52f6a8b4 +oid sha256:48137e513053f009fb46ef066a902428491fa3fbc00119db3d5a16cd287ce4fa size 545792 diff --git a/build/dxwnd.ini b/build/dxwnd.ini deleted file mode 100644 index ce0540b..0000000 --- a/build/dxwnd.ini +++ /dev/null @@ -1,70 +0,0 @@ -[window] -exportpath=D:\DxWnd\v2_03_43_src\build\exports\ -exepath=D:\Games\Arx Fatalis demo\ -posx=1946 -posy=567 -sizx=320 -sizy=200 -[target] -title0=Arx Fatalis demo -path0=D:\Games\Arx Fatalis demo\ARX.exe -launchpath0= -module0=Athena -opengllib0= -notes0= -registry0= -ver0=0 -coord0=0 -flag0=136314918 -flagg0=1207959552 -flagh0=65552 -flagi0=138412036 -flagj0=4224 -flagk0=65536 -tflag0=0 -initx0=0 -inity0=0 -minx0=0 -miny0=0 -maxx0=0 -maxy0=0 -posx0=150 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -title1=TieFighter 95 -path1=D:\Games\TIE95\TIE95.EXE -launchpath1= -module1= -opengllib1= -notes1=The game can be played also with no joystick using the DxWnd virtual one.\nIf you have a real joystick, the "Use DLL injection" flag is not necessary.\nUse "Unlock Z order" to avoid losing control of the window. -registry1= -ver1=1 -coord1=0 -flag1=681574514 -flagg1=1744830464 -flagh1=20 -flagi1=138412036 -flagj1=1073746048 -flagk1=136642560 -tflag1=0 -initx1=0 -inity1=0 -minx1=0 -miny1=0 -maxx1=800 -maxy1=600 -posx1=50 -posy1=50 -sizx1=800 -sizy1=600 -maxfps1=0 -initts1=0 -winver1=0 -maxres1=-1 -swapeffect1=0 diff --git a/build/exports/Imperialism II.dxw b/build/exports/Imperialism II.dxw index 877dcee..d9d16fd 100644 --- a/build/exports/Imperialism II.dxw +++ b/build/exports/Imperialism II.dxw @@ -28,5 +28,5 @@ launchpath0= notes0= registry0= flagj0=0 -flagk0=262144 +flagk0=0 swapeffect0=0 diff --git a/build/exports/Reah.dxw b/build/exports/Reah.dxw new file mode 100644 index 0000000..6df2cf9 --- /dev/null +++ b/build/exports/Reah.dxw @@ -0,0 +1,32 @@ +[target] +title0=Reah +path0=D:\Games\Reah\Reah.exe +launchpath0=F:\Autorun.exe +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=0 +flag0=-1465778141 +flagg0=1209010176 +flagh0=20 +flagi0=138412036 +flagj0=1073746048 +flagk0=98304 +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 +swapeffect0=0 diff --git a/build/exports/Super Real Mahjong P7.dxw b/build/exports/Super Real Mahjong P7.dxw new file mode 100644 index 0000000..befc22d --- /dev/null +++ b/build/exports/Super Real Mahjong P7.dxw @@ -0,0 +1,32 @@ +[target] +title0=Super Real Mahjong P7 +path0=D:\Games\Super Real Mahjong P7\P7\p7.exe +launchpath0=D:\Games\Super Real Mahjong P7\P7\p7.exe -f +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=0 +flag0=681574434 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=5248 +flagk0=67436544 +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 +swapeffect0=0 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 1bdfc3e..7b294b1 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -951,4 +951,13 @@ fix: deleted emulation of ZBUFFER attach. Needed for "Arx Fatalis" fix: added emulation of PixelFormat in getPixelFormat hooker. Needed for "Arx Fatalis" add: added virtual joystick feature. Required to play "Tie Fighter 95" with no real joystick v2.03.43.fix1 -fix: recovered virtual joystick buttons \ No newline at end of file +fix: recovered virtual joystick buttons + +v2.03.44 +fix: GetSystemPaletteUse error message +fix: transparent virtual joystick icons +fix: RealizePalette hooker crash in "Super Real Mahjong P7" +fix: complete recoding of GDI BitBlt, StretchBlt and PatBlt hookers: it fixes "Reah" problems +fix: changes in USER32 BeginPaint hooker to support DC sharing with ddraw +fix: increased configuration panels heigth do avoid clipping when desktop font size is set to 125% + diff --git a/dll/dxhelper.cpp b/dll/dxhelper.cpp index 2ee318d..c85aeed 100644 --- a/dll/dxhelper.cpp +++ b/dll/dxhelper.cpp @@ -1421,7 +1421,7 @@ char *ExplainGetDCExFlags(DWORD c) char *ExplainPaletteUse(UINT uUsage) { - char *eb = SYSPAL_ERROR; + char *eb = "SYSPAL_ERROR"; switch(uUsage){ case SYSPAL_STATIC: eb="SYSPAL_STATIC"; break; case SYSPAL_NOSTATIC: eb="SYSPAL_NOSTATIC"; break; diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index dc793d8..d0a71ce 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.03.43.fix1" +#define VERSION "2.03.44" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 99cde0e29a53e06b9b32f77e3e31d288365b0c18..9b0adcf259f9e294e16884286d4fdf0ec992c119 100644 GIT binary patch delta 10138 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 delta 4097 zcmd59ZA@F&^&b2AVZb5A7~>d+c|d?N!fXd9B!L)0vV<}QjFOgigtQq;z)%vbjt1H| zS+FSEKhmsCtE|(Ssi`L%MOjMJ{>UO_`B3+vZPGUFPd7~s$& zXr)QJPsjJ%^X@zMe4lIodD(wn4tOB`TxCcL!~DLscXi;5W9@~so1kTkP0upkFa63O z@US}gWqmfE)=Ruk_lV4z=}ihB%}wFg^j7XqlK4GclQc(rdA;n>oMgc7+OBJx5HO+@t?M=b`Vb@c@UcHNEU0dzwAT_A)O$g{+9=(rDWssLMnJ9~t^2e+h3ATycRB}N6%rO>J<_?+ds4pO5; zIZGS~{E)rI@C0FtgqyWrmti$gjnVD#uhQyS3;iH?;BlVx4}GvTBf*j>=)z6+X+EXm zudDNEnj5simx@|IC-(dx`1j(pIDRW^!T<;9p(Q;fWMn(gLpjG4(0f9C78J5j>K!`>Uq=M9lXw}=RIKw z{8(v*E;5T5Quu*zr{M_ce3U>*8^f&KB#>buj1as`a9tbRIIDqGHweE;aEoAWbWiB? zzx7zv0U5mSxK)=;!Yf)XCuQGU61+|zGU5$_5ggILhE?YXeU~6e&^Ow!8w<4X8^Jweff!#A z^3cdpX<3Bls3K_fPH2Y={W9O0?7~?CA2)*S&@a^ zWet8Z0EhHL6pdF&0RHLMGD8_j@HctluaIB1vJ7VP8B8q2P|_EbN&~%TEFf`jTLzw< zfX8sA6CB(Z&g4CFX8flYHY&(TFWAuNg=TE(0w1{ff5wOK=pcA7dl2dcF%tv(s1VRb z3)r!t3)W%aC2-=j8=7E~Fxdt^bKF7ug!Qmyh;~KIVnxXV6}-Y~#bW`e=KflRg{G}sz3>|Z*;HdPB(WY9!| z5oa68jV;k-$oFj+Hl*}Wd3%N~6omvm^e|Q^R9r4}ly}2jWX~HfLKFH1q3-`Fgzllo z499r=U1_owT3`!rxVww{t&LijaH0%PP{fP46h<~?kKBw^VaKq7$JQdt#3&GrQpq$M z|8&N3_$juBdUrSbE}5>7J;l1nYy*?O&Vnqb&30$-iv@+@x z)oeRqPI@W{wi3<7Hn38{is)<6M_g{vN#2WglJl`nlEX?@Aavd$p>ssS^YpUOI9GJxI&ols|TUUK?>7wc;6R3{*0eB3bV8&bVg$;WQls1 zFLDk`6AmN<7Y1>x|ZJkxp@^y(l|A*xN&H6h=QyJgj;=!Lg}vJ z>5xb=;GScRm>+;vB^{app-}A;CLS#@8i*x$LKPWYe0z^sZ$0<9w{V6lq3`eicrkF|AJd$ z>``7*WpI?a!TnrItJU6X?|p9j+`2nw_glZU*7v)9&$a#d8H|tme7^Jc^YeZEzD0RH z^?|SX&%yuxDl021C@9Fu$;r>pFDWVcN5`$KtV~Eq=Hqaz!-r>Cckj0{$amLm3o1Dcgr%gf7IHa$K4 z`1p8rb#;Axy}!TDcGAP^^@c(rE4rklBpe9%!NI}J%?*1W9v-HqrZO`#D=I3?baaNA zni`)sWd0i&8R6K_ot&H)=nfALQ&Us3v$Om9`V3QINdGj{0_;sqO=cFU866$PK&)mZ zZE#~_V_{)|ENxF?D-; z%NpTHwh%-uzN%bZT{UMlj59Mc_FT+1HZ}^=NQu_gRuxt&V>p><2sA#tyu5Ve;u^vg z?8PTzV`Ex;RY_W!xzLdCj$Fi7aA8+xXQv9Ql}SSGVuM{I%xrSK3OF8l4FyTlPa=7et&;YOicWfLOvhY86N{4k0&oL4=#rGZlrY! z2g-9&l6*oKDC7{sNjWm%^z>9(adC0c*4D}_st#^;2_fNvgBcLaimfD$9ananttT3(gAgrvcXz^9$-rgQ{Z3Pmh9?ww4Dy&wX zot>p9!o;*%M#PD`7GG6zCvsm{frPIopY7eav$JDvmEq$XR#J55=jW;+Ql=+UN{00= zhkSB$cXz+OzDkytmzTl8LAr`dWbJl>LMMrdiQxkyIyyQlE6aUNX^Etgf5af=Ej8f_ FzX2B!G}r(D literal 3942 zcmd6q%PVbB9LMi121*?y4vzQ1@jhH#d5kV2xdxP&kve5y_?8lb@eoQd07dj#*h*nUIjs)6=uLx%u?;bb5L^G&B?+ zA0G?`KbH{`YHDhJ=^nUBOG`hC4vXsR>vcR4T~$>TYd(c8EiLW#_SS}rDUZkFo{Iz5 z)z#S(G27SI=iZZrg@qd%8;)E{OG`yXMJ`PPVR3QMk!x#fi&}8W6$k|8=H?u^*4EbC z+eJzj7Z*En5!1g-MY0z|XbZWyxx8@;T*!xqhc;bD#q-SP3Uf$reoAT>2LJ3G6#x7RQwhV)NEEx_K`*l1>vnvsza48&?y z(gxSp*XQTwIUX9K84888L_%3xTdRf=WAEiedV0DI5mPre zH>?q!WD7ym;;YJ)l@)VV!#F)XZO_GQLqmfwjg)9x_>9uh*NGmj@R^dpFX$ zg#+awDM>yd3>0#R;iMdyaB^}YtvEkFZ*6Vm%ikgiaV|I2{DupmUKAw`2BJm9Z5#bok&CNuiv$K=tgQHNkx3?Q` z)Zy6Jn5gc!xVY}_ZuT}cHQ{qYW572LsXGF}LqLfUbSkn|rt^sCi;ZeiGUHom$W<%v zsicF0gXS!?!nD%UmsVF-RamXOu&`k6U{;t`dJvYEm$mq+a(8!^y0!v|Qjce-Vii^^ z&&DJ8>t zmqR`|y1KevUS1^2^Yin-zyMvvC9-xqL7|hx#>Vo25fc-Wm6hebrnE#-$vqvlINryjE057-B-elvGg7Avj670EiYQ4a3>2Z5d7i)E zmKb}K*YuPDWo~dk*;=jETKk-H+vnEZIlJHb?zO((^?R(}-hTe_Cw%+7esK5l^L+ij ze{+4}zOUz>ga7?jUS3{USeToeTToC?T3Y&#wp&$Im6({=*Vnhbz5V?Be13jDGBOe$ zAMf+|qN|7tb#-;WO&3~aWo6Nl!=uK=Mw8ALR$X1qoT$j9r>EcD-G$KNQ9?o#s*Vje zG&F=3;_1M^fb&Qe6%}o5ZH3iZSy?GAE_N737?zip!)op9>~IzwYI(ihg@uK%S{oZ1 z&i$gKOG-+@YLU~wEk&vqM`#Oqd3oFk3tHI6$HyV$o}QjEGc%cKwG?YDJh0hCwW6Ye zX)`l3kB^U6S6A29*9Qj&ET=rOva()ZU+v_QlamP`g8}`I{;8Y=)SH`|6&`swHa3QX zc+E`O;O6G$;^HFP10kD!zh74oNPT_1oJyR%zrUBsbsJ7H!i5A;C1Th$H8mL-8G_bm z+}_?Y$BHCNNTN=zAZu%DdR3!1J3DKXkin*=Cd)NSqOGk>Vb+H@PGu^ICWe=nmolx< z<~2kpSW8UC$H#SY1)(f;Ef5Oc$S;HB*V4kTuC6YHSszk_yo(jTD44yyJ(<>M^M)1G z$QwZ?R}e~(2q;?Yv!kQK$S;GqPZe2fsj;c4DTQ1fzQ4aGB_&Zp9*>9D86N{Kmn%O% zA1#KV!$|A40x0&$k>nFX=9g_8r{t)Fv$HdSUtCM1}v_^YwZjM6{A*bCmGEUx&{4&Tpk@tliN#r>796F4k^t`;h2$f(kI5adwS8>Q}TuxHxB(brvd|<@H#AIh@J3muKAp!D_ L7^2(-61njQwpwgD literal 3942 zcmd6q%PVbB9LL>app-}AcpT4z<9)cg@)%u4at$akBX!Ea$RmZMh?0cDKoN?W=lKh6 ziLpm{O-~t6<_7nZeOj&7TKk-H+iu;Jv-_>zUhDf^zvtS1{_-cre2yPHz5G0(-?tdo zr`{KO|2YXgzW=YIqN1Xxs3isudi==d;9tM`TYERWMm{E zA;IVKeJvv<)YaAfHVwGS%geut4vQKa8%;bRT}@35YrcdoBO~MP?k)@$uM!gzopW*E zhK7dlM7$js7;x^%;^N}1t*wY$D=RA{B_$3`17Uf2IU?82&JMNUkjv}!E-WlW!_0*woaN0xnPA-`|sylSv_u$HR5T$AHV_Dkvy` zi)nZ_(z-1NibGP8d_u_hvW(%R9GP%-b|&-}7Z>gA?VOptZ*On1AwoVmIY~`T6)ZyF zgoA^FA0HnA4S@q#Cg5{fFJy|EjT~cseqK;m!sO&+T3VXGR|F!$F~^D zI}N#N=RKKjcz9UPQaemLJ$-3?eO-n%%1cX2dIz(^w9|vIy1Ht_mzDeb`_#1^NR)a! zLlw)gMtN>-j-rSX({33NC+1HQ z$&`|^-r*^ri>_51w2QR76k|L_`JkASf#6 z%{70)fauu;+^zu+5xjet-`Jrjs;iR>oq=gO&8yc{-&b#~&X1qIlqr*jQ3h zlGp2vEh8p0G&KCuU2s)YRK$u7i<+C8bvz+mZEY=cVnUadmG$uO5Qd9a$;mOuIyT(Y z)D)hGw?jii_B~lrQnItN6On6eZLPGl)TSFjSY2I>$hEh(M=jXo@_0N;OG^>CwzjtH z+eJ#3m6b*0BBp)p2vQ4S@>K0ZDQWUT-u5#fRYui`P}y1KgT>}&z6 z74GlvnPYg8B?M86FDo}THq2QK$|X(#(a1gxBKBO5$s9VOLL2j|{7oNkYzI#V!)&;NU=p)ykZ( zA{#jowD_`;RKx=c7yIn$>eAxNO3WvVjJ4$0%*>38tjHf9AE~LSe^SWp<~ZYHz~OKd z78b(AFuWUS-G&3jJ}F5)AruNR#BfrMOt`qX5aoPzb=BF~$(~vJ{{Ai-BIL8Pv-I?I z!6F29I6OT3`S~d*5ZHiW0zMZkvOrO@kZmk3E(!`mn4X@_$jA`*ia8BBl^Zd zxha|Ptu*ASmG@-E(a}+JmRez2>FG+9=Ud|7#Tct~Aa zfkdgtGgPq*tCbfP7AT4+F|DQ%apJDUmzA7}oEKIg(d)_Q@NV4S-#53)=<$`A6rJDi zmkkjzJ(*Hc=Gz?d$_xAQCSOS5-$jAs?#U`?LIYFV5BqSv8fe{}cpPQR&zoxWA OLdhR7NO=lP^ulj`O#1@> literal 3942 zcmd6q+be8Q9LJsFL8(DvFylHH_u=Ts<>~Mw#{(taNKJY0vvsye*W@1;y$h)JiYup;orA7 z=ZD@Ge*ZBDKfeF3S4BldQBhG|US45gVOd$(KiXz>b#-!ba$jHH_V)Jk^Yi)n`N+sf zQc{x7=lfblOsK1?`>ng+DlaepDmpA`Y;4r=gmpDFHO%=Ey3EYXySuvxT)c8P9QL`` za6>~wWFp=U3=G)!WN~rv*49>3u9cOQl9Cderh%}$yd0HlXJ?06u*v21dKVTJqH=9) zY}mJplrAkTjmkw#KbwkVFNV+-^7Hd~;ug4&kB^Td&^+6Gq1D2B>E|)753R%&mrl#URzz+`(Z*Fc_`|$8EJw5GqyQ`|I z%ygo;d0Zj$JvutdwxK&cJvGoB9UWz4WaQ@N_V@R@g8}nR|1{JB?9I*1W)`U#8ymww ztY#){aC38WadDCDp&^=nzu(LvHTCuNYA7-G{{CJfYXvZg2p1H16^|j;*4AcaWl31A zaC>{p9N|fp5JWA$s$5%JGiNo7v$L~W3RT(E)FezJCED8BR9LNy;bf*E(D?B3@=}G> z${a(ug0=W$e0*GsuPRAPGZz{XUW>0PiLc;ggq+0&yGWS5y*(9HD|5oi zY~)1H;;TwhQPhP>$38ncI<)wz67$I-v5*{_nwnCP4f5ODTS`jG-xTtAIL`POa5|j@ z1qE<1jO<2Qw{W1`Bqhlwgn>d1F`Sem6VA@gWI114T(q~hvuD=6zP_r4NcrUCBrPpX zvPgj)4h{~!zrRZg1U4W{z~_=h6)0*JvW@xqc}XFJ$;rv|^mK`D5QqrdXl-pJ3fO#W%0sX{85Yb#+yXuPXQV_o-_u zkQnuNhALKJwesBD97Pc$rqwhePTaNls**F2^TG-wc0KtV*^RrqyXICIJHBBiMHdJJ zR70dpPo|U%^KB0K%x\n", dxw.RealHDC, hdcDest); } - SetStretchBltMode(hdcDest, HALFTONE); - if (OBJ_DC == GetObjectType(hdcDest)){ - //if(dxw.IsRealDesktop(WindowFromDC(hdcDest))) hdcDest=GetDC(dxw.GethWnd()); // ?????? - if (dxw.HandleFPS()) return TRUE; - if (dxw.dwFlags3 & NOGDIBLT) return TRUE; - if(dxw.IsFullScreen()){ - int nWDest, nHDest; - nWDest= nWidth; - nHDest= nHeight; - dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest); - res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop); - dxw.ShowOverlay(hdcDest); - OutTrace("Debug: DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest); - } - else if(WindowFromDC(hdcDest)==NULL){ - // V2.02.31: See StretchBlt. + if(hdcDest == NULL){ + // happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ... + hdcDest = (*pGDIGetDC)(dxw.GethWnd()); + OutTraceB("GDI.BitBlt: DEBUG hdc dest=NULL->%x\n", hdcDest); + } + + IsToScreen=(OBJ_DC == GetObjectType(hdcDest)); + if (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE; + if(dxw.IsFullScreen()) { + switch(GDIEmulationMode){ + case GDIMODE_STRETCHED: { int nWDest, nHDest; nWDest= nWidth; nHDest= nHeight; - dxw.MapWindow(&nXDest, &nYDest, &nWDest, &nHDest); + dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest); res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop); - dxw.ShowOverlay(hdcDest); - OutTrace("Debug: NULL dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest); - } - else{ + OutTraceB("GDI.BitBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest); + } + break; + case GDIMODE_EMULATED: + default: res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop); - OutTrace("Debug: PROXY dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWidth, nHeight); - } + break; } + } else { res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop); } + if(res && IsToScreen) dxw.ShowOverlay(hdcDest); if(!res) OutTraceE("GDI.BitBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__); - return res; } @@ -823,29 +824,42 @@ BOOL WINAPI extGDIPatBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH OutTraceB("GDI.PatBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\n", dxw.IsFullScreen(), GetObjectType(hdcDest), ExplainDCType(GetObjectType(hdcDest)), WindowFromDC(hdcDest)); - IsToScreen=FALSE; - res=0; - if (OBJ_DC == GetObjectType(hdcDest)){ - IsToScreen=TRUE; - if (dxw.HandleFPS()) return TRUE; - if (dxw.dwFlags3 & NOGDIBLT) return TRUE; - if (dxw.IsFullScreen()){ - dxw.MapClient(&nXDest, &nYDest, &nWidth, &nHeight); - dxw.ShowOverlay(hdcDest); - res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop); - } - else if(WindowFromDC(hdcDest)==NULL){ - // V2.02.31: See StretchBlt. - dxw.MapWindow(&nXDest, &nYDest, &nWidth, &nHeight); - res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop); + if(dxw.dwFlags3 & GDIEMULATEDC){ + if (hdcDest==dxw.RealHDC) hdcDest=dxw.VirtualHDC; + OutTraceB("GDI.PatBlt: DEBUG emulated hdc dest=%x->%x\n", dxw.RealHDC, hdcDest); + } + + if(hdcDest == NULL){ + // happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ... + hdcDest = (*pGDIGetDC)(dxw.GethWnd()); + OutTraceB("GDI.PatBlt: DEBUG hdc dest=NULL->%x\n", hdcDest); + } + + IsToScreen=(OBJ_DC == GetObjectType(hdcDest)); + if (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE; + if(dxw.IsFullScreen()) { + switch(GDIEmulationMode){ + case GDIMODE_STRETCHED: { + int nWDest, nHDest; + nWDest= nWidth; + nHDest= nHeight; + dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest); + res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, dwRop); + OutTraceB("GDI.PatBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest); + } + break; + case GDIMODE_EMULATED: + default: + res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop); + break; } } else { - res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop); + res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop); } - if (IsToScreen) dxw.ShowOverlay(hdcDest); - if(!res) OutTraceE("GDI.PatBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__); + if(res && IsToScreen) dxw.ShowOverlay(hdcDest); + if(!res) OutTraceE("GDI.PatBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__); return res; } @@ -861,24 +875,41 @@ BOOL WINAPI extGDIStretchBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, in OutTraceB("GDI.StretchBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\n", dxw.IsFullScreen(), GetObjectType(hdcDest), ExplainDCType(GetObjectType(hdcDest)), WindowFromDC(hdcDest)); - IsToScreen=FALSE; - if (OBJ_DC == GetObjectType(hdcDest)){ - if (dxw.HandleFPS()) return TRUE; - if (dxw.dwFlags3 & NOGDIBLT) return TRUE; - IsToScreen=TRUE; - if(dxw.IsFullScreen()){ - dxw.MapClient(&nXDest, &nYDest, &nWidth, &nHeight); - } - else if(WindowFromDC(hdcDest)==NULL){ - // V2.02.31: In "Silent Hunter II" intro movie, QuickTime 5 renders the video on the PrimarySurface->GetDC device context, - // that is a memory device type associated to NULL (desktop) window, through GDI StretchBlt api. So, you shoud compensate - // by scaling and offsetting to main window. - dxw.MapWindow(&nXDest, &nYDest, &nWidth, &nHeight); - } + if(dxw.dwFlags3 & GDIEMULATEDC){ + if (hdcDest==dxw.RealHDC) hdcDest=dxw.VirtualHDC; + OutTraceB("GDI.StretchBlt: DEBUG emulated hdc dest=%x->%x\n", dxw.RealHDC, hdcDest); } - res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop); - if (IsToScreen) dxw.ShowOverlay(hdcDest); + if(hdcDest == NULL){ + // happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ... + hdcDest = (*pGDIGetDC)(dxw.GethWnd()); + OutTraceB("GDI.StretchBlt: DEBUG hdc dest=NULL->%x\n", hdcDest); + } + + IsToScreen=(OBJ_DC == GetObjectType(hdcDest)); + if (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE; + if(dxw.IsFullScreen()) { + switch(GDIEmulationMode){ + case GDIMODE_STRETCHED: { + int nWDest, nHDest; + nWDest= nWidth; + nHDest= nHeight; + dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest); + res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop); + OutTraceB("GDI.StretchBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest); + } + break; + case GDIMODE_EMULATED: + default: + res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop); + break; + } + } + else { + res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop); + } + + if(res && IsToScreen) dxw.ShowOverlay(hdcDest); if(!res) OutTraceE("GDI.StretchBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__); return res; } diff --git a/dll/msvfw.cpp b/dll/msvfw.cpp index cda90b5..90c88fb 100644 --- a/dll/msvfw.cpp +++ b/dll/msvfw.cpp @@ -16,6 +16,18 @@ DWORD WINAPI extICDrawBegin(HIC, DWORD, HPALETTE, HWND, HDC, int, int, int, int typedef BOOL (WINAPI *DrawDibDraw_Type)(HDRAWDIB, HDC, int, int, int, int, LPBITMAPINFOHEADER, LPVOID, int, int, int, int, UINT); DrawDibDraw_Type pDrawDibDraw = NULL; BOOL WINAPI extDrawDibDraw(HDRAWDIB, HDC, int, int, int, int, LPBITMAPINFOHEADER, LPVOID, int, int, int, int, UINT); +typedef BOOL (WINAPI *DrawDibBegin_Type)(HDRAWDIB, HDC, int, int, LPBITMAPINFOHEADER, int, int, UINT); +DrawDibBegin_Type pDrawDibBegin = NULL; +BOOL WINAPI extDrawDibBegin(HDRAWDIB, HDC, int, int, LPBITMAPINFOHEADER, int, int, UINT); +typedef BOOL (WINAPI *DrawDibStart_Type)(HDRAWDIB, LONG); +DrawDibStart_Type pDrawDibStart = NULL; +BOOL WINAPI extDrawDibStart(HDRAWDIB, LONG); +typedef BOOL (WINAPI *DrawDibStop_Type)(HDRAWDIB); +DrawDibStop_Type pDrawDibStop = NULL; +BOOL WINAPI extDrawDibStop(HDRAWDIB); +typedef BOOL (WINAPI *DrawDibEnd_Type)(HDRAWDIB); +DrawDibEnd_Type pDrawDibEnd = NULL; +BOOL WINAPI extDrawDibEnd(HDRAWDIB); static HookEntry_Type Hooks[]={ //{HOOK_HOT_CANDIDATE, "ICSendMessage", (FARPROC)NULL, (FARPROC *)&pICSendMessage, (FARPROC)extICSendMessage}, @@ -24,6 +36,10 @@ static HookEntry_Type Hooks[]={ {HOOK_HOT_CANDIDATE, "ICGetDisplayFormat", (FARPROC)NULL, (FARPROC *)&pICGetDisplayFormat, (FARPROC)extICGetDisplayFormat}, // "Man in Black" - beware: this is NOT STDCALL!!! {HOOK_HOT_CANDIDATE, "ICDrawBegin", (FARPROC)NULL, (FARPROC *)&pICDrawBegin, (FARPROC)extICDrawBegin}, {HOOK_HOT_CANDIDATE, "DrawDibDraw", (FARPROC)NULL, (FARPROC *)&pDrawDibDraw, (FARPROC)extDrawDibDraw}, + {HOOK_HOT_CANDIDATE, "DrawDibBegin", (FARPROC)NULL, (FARPROC *)&pDrawDibBegin, (FARPROC)extDrawDibBegin}, + {HOOK_HOT_CANDIDATE, "DrawDibStart", (FARPROC)NULL, (FARPROC *)&pDrawDibStart, (FARPROC)extDrawDibStart}, + {HOOK_HOT_CANDIDATE, "DrawDibStop", (FARPROC)NULL, (FARPROC *)&pDrawDibStop, (FARPROC)extDrawDibStop}, + {HOOK_HOT_CANDIDATE, "DrawDibEnd", (FARPROC)NULL, (FARPROC *)&pDrawDibEnd, (FARPROC)extDrawDibEnd}, {HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator }; @@ -236,4 +252,43 @@ BOOL WINAPI extDrawDibDraw(HDRAWDIB hdd, HDC hdc, int xDst, int yDst, int dxDst, hdd, hdc, xDst, yDst, dxDst, dyDst, xSrc, ySrc, dxSrc, dySrc, wFlags); ret = (*pDrawDibDraw)(hdd, hdc, xDst, yDst, dxDst, dyDst, lpbi, lpBits, xSrc, ySrc, dxSrc, dySrc, wFlags); return ret; -} \ No newline at end of file +} +BOOL WINAPI extDrawDibBegin(HDRAWDIB hdd, HDC hdc, int dxDest, int dyDest, LPBITMAPINFOHEADER lpbi, int dxSrc, int dySrc, UINT wFlags) +{ + // Reah game transitions + BOOL ret; + OutTrace("DrawDibBegin: hdd=%x hdc=%x DEST size=(%d,%d) SRC size=(%d,%d) flags=%x\n", + hdd, hdc, dxDest, dyDest, dxSrc, dySrc, wFlags); + ret = (*pDrawDibBegin)(hdd, hdc, dxDest, dyDest, lpbi, dxSrc, dySrc, wFlags); + return ret; +} + +BOOL WINAPI extDrawDibStart(HDRAWDIB hdd, LONG rate) +{ + // Reah game transitions + BOOL ret; + OutTrace("DrawDibStart: hdd=%x rate=%x\n", hdd, rate); + ret = (*pDrawDibStart)(hdd, rate); + return ret; +} + +BOOL WINAPI extDrawDibStop(HDRAWDIB hdd) +{ + // Reah game transitions + BOOL ret; + OutTrace("DrawDibStop: hdd=%x\n", hdd); + ret = (*pDrawDibStop)(hdd); + return ret; +} + +BOOL WINAPI extDrawDibEnd(HDRAWDIB hdd) +{ + // Reah game transitions + BOOL ret; + OutTrace("DrawDibEnd: hdd=%x\n", hdd); + ret = (*pDrawDibEnd)(hdd); + return ret; +} + + + diff --git a/dll/user32.cpp b/dll/user32.cpp index 6653001..4a68e35 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -620,7 +620,6 @@ BOOL WINAPI extInvalidateRect(HWND hwnd, RECT *lpRect, BOOL bErase) OutTraceDW("InvalidateRect: hwnd=%x rect=NULL erase=%x\n", hwnd, bErase); - if(dxw.IsFullScreen()) { switch(GDIEmulationMode){ case GDIMODE_STRETCHED: @@ -2086,20 +2085,26 @@ HDC WINAPI extBeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint) // if not in fullscreen mode, that's all! if(!dxw.IsFullScreen()) return hdc; - // on CLIENTREMAPPING, resize the paint area to virtual screen size - //if(dxw.dwFlags1 & CLIENTREMAPPING) lpPaint->rcPaint=dxw.GetScreenRect(); - if(dxw.dwFlags1 & CLIENTREMAPPING) dxw.UnmapClient(&(lpPaint->rcPaint)); - switch(GDIEmulationMode){ - case GDIMODE_STRETCHED: - break; - case GDIMODE_EMULATED: - HDC EmuHDC; - EmuHDC = dxw.AcquireEmulatedDC(hwnd); - lpPaint->hdc=EmuHDC; - hdc = EmuHDC; - break; + if(bFlippedDC) { + hdc = dxw.AcquireSharedDC(hwnd); } + else { + switch(GDIEmulationMode){ + case GDIMODE_STRETCHED: + // on CLIENTREMAPPING, resize the paint area to virtual screen size + //if(dxw.dwFlags1 & CLIENTREMAPPING) lpPaint->rcPaint=dxw.GetScreenRect(); + if(dxw.dwFlags1 & CLIENTREMAPPING) dxw.UnmapClient(&(lpPaint->rcPaint)); + break; + case GDIMODE_EMULATED: + HDC EmuHDC; + EmuHDC = dxw.AcquireEmulatedDC(hwnd); + lpPaint->hdc=EmuHDC; + hdc = EmuHDC; + break; + } + } + OutTraceDW("GDI.BeginPaint: hdc=%x rcPaint=(%d,%d)-(%d,%d)\n", hdc, lpPaint->rcPaint.left, lpPaint->rcPaint.top, lpPaint->rcPaint.right, lpPaint->rcPaint.bottom); diff --git a/dll/winmm.cpp b/dll/winmm.cpp index 111cbc2..2182c02 100644 --- a/dll/winmm.cpp +++ b/dll/winmm.cpp @@ -339,12 +339,18 @@ MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji) dwButtons = 0; if (GetKeyState(VK_LBUTTON) < 0) dwButtons |= JOY_BUTTON1; if (GetKeyState(VK_RBUTTON) < 0) dwButtons |= JOY_BUTTON2; + if (GetKeyState(VK_MBUTTON) < 0) dwButtons |= JOY_BUTTON3; POINT pt; if(hwnd=dxw.GethWnd()){ RECT client; POINT upleft = {0,0}; (*pGetClientRect)(hwnd, &client); (*pClientToScreen)(hwnd, &upleft); + if(dwButtons & JOY_BUTTON3){ + // center joystick ... + dwButtons &= ~JOY_BUTTON3; + (*pSetCursorPos)(upleft.x + (client.right >> 1), upleft.y + (client.bottom >> 1)); + } (*pGetCursorPos)(&pt); pt.x -= upleft.x; pt.y -= upleft.y; @@ -391,7 +397,6 @@ static void ShowJoystick(LONG x, LONG y, DWORD dwButtons) RECT client; RECT win; POINT PrevViewPort; - int StretchMode; // don't show when system cursor is visible CURSORINFO ci; @@ -422,16 +427,12 @@ static void ShowJoystick(LONG x, LONG y, DWORD dwButtons) (*pGetWindowRect)(dxw.GethWnd(), &win); - //if(!pSetViewportOrgEx) pSetViewportOrgEx=SetViewportOrgEx; (*pSetViewportOrgEx)(hClientDC, 0, 0, &PrevViewPort); - StretchMode=GetStretchBltMode(hClientDC); - SetStretchBltMode(hClientDC, HALFTONE); int w, h; - w=36; - h=36; - (*pGDIStretchBlt)(hClientDC, x-(w>>1), y-(h>>1), w, h, hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); + w=bm.bmWidth; + h=bm.bmHeight; + (*pGDIBitBlt)(hClientDC, x-(w>>1), y-(h>>1), w, h, hdcMem, 0, 0, SRCPAINT); - SetStretchBltMode(hClientDC, StretchMode); (*pSetViewportOrgEx)(hClientDC, PrevViewPort.x, PrevViewPort.y, NULL); SelectObject(hdcMem, hbmOld); DeleteDC(hdcMem); diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 45864e25140c318ccdd059dc3fb84fb2c2a7a2c5..4c24b1d3a1d9887c87aa0069e9d6b843423358b7 100644 GIT binary patch delta 72 zcmbQSk8Q?2whd|)%w`N`lP~HooqWz>5wi({>EyeXl9PKZ{h;jWK-yrkqqB7LB&+R{ XtQa-8nN1liCl_*wZolNp=oSe8o&^`m delta 72 zcmbQSk8Q?2whd|)%q9#LlP~HooqWz>5wj74`Q*Enl9PKZ{h;jWK-yrkqqB7LB&+R{ WtQa-8ff@`a7jlVizvRm376|~ISQozl diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index 9b0926db438869de0c6c0ad4c1ec076e22dec78a..9805e85c2d2889cc7c9b9dee6d8a272dbcabc9c0 100644 GIT binary patch delta 676 zcmYLFJ!n%=7`->S@8!oN&0o_5l2?-^XiJp_ZR$^=F**d>Xai}CG$h43WGGeJf))IE zxY|K;76*r-dllc{Vlik35kUtBC!ximLIjb3)uHiw#n=ny{+#>WbG~!cCRdyM*^H2{ zt}IW#@?%cq@g^I`kPz4sqjuiS7;FC5!6_ zNP!#fJA4+u-5>BaJE*lhw>fH+Bv!h&c6-88-vrXNq?Yax9A{EPSn!`Gt5iL(CUudF zvm>gt0w1{)B}(d0{rl+jg`kfzyUZ5Zbv8@uK~^J1@4`UXOQG8RRc=Q-G>K2aDX76h zJyyg>n|SiP9T=ZQ^CjV?L)_JjOAJRDA1^k4i% zqD1sPPh?HJr;|!sNR3(1D5f804fq)uz)PPOCoW{3sAoAE6$R%T>7#%B2o0&UqZ delta 923 zcmZA0Nla5g7zgl~_Py7=w57Bq&_}^Gpeac!OI1)QqBcTVv@s+aAsmPYqK$BnxKJ+Y z!GrPh;LXG{Cd7B}WYQQ{M5+6Zf|zK6i6&J6mHID>+r0cb-+Z(5eUmmZ%@fmnxJQtN zL*4ASgANF7w8;>pfFRI}&?qr4V@yvIyK>2`bx~3)&_S_Dv?81HJDV_Lu^7{akbMah zlf1%gHaIM`=hq^bhBdGj)J;m_$hL7CBy zsCAqp|6Yw__eWQmRRTtfO=22Fol~bWaS@5kQX{L@D}F(uoBFMdM$>;&QZ5qbbTnse zrij5W+A$oWe%k<_qFLJ*w=BPalFmKKYbr5)h=ti|wuNnGAy$dcAS-9}3vmUaAf5&m zKonk>3nL2P3DbqV*~J3mGNl}qq6%kuh&w|{om1dq_C@lRzm57_Ehb)t)ZcYb+LfXP zLqJLAr?{A%(JXH;lw$2Tpi!`-K#f8uv$BJm=yH4qFQm`1kK!vFWO0{KtjJG8h5pmN zoiyq0q-5!K`XmcfFYl(bJgQwhg*hnMR!1#%6PaRrN$#>xe{(O{WIH7Sc5bF4y-~3U zYuhPY(MZN>vyiQb66Jg7tEZikWv$#m8|6)usBm$PLVYOz1Wk1mQoP7QLtc+)!G=}} z`?o3y?@7zRRSd7eb+`dH;TDX*Z5V|+a2LiP1^3`SJb;Jr2p+=|cnZ(pIlO>*+}Nw7 z{x$kHFaeYBmN65XLhug01D&m^_0J&q2HBlib4&3L^gpvPWPssEd9ga8p@_?`^sR5w z)2V0y_uvM-=OZdgMF(kcTZW2@ebnre$QeDu%l^4ui@QW|MnBm2yuv%L7_