From 99db43a1024a3473fee55b5afffd616001558a1e Mon Sep 17 00:00:00 2001 From: gho tik Date: Wed, 10 Dec 2014 11:39:52 -0500 Subject: [PATCH] v2_02_95_src Former-commit-id: 1f95c954fdb504821a546455bf46c232ec9a8bc6 --- build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- build/exports/007 NightFire.dxw | 6 +- .../101 The Airborne Invasion of Normandy.dxw | 8 +- build/exports/Actua Soccer 3.dxw | 1 + build/exports/Age of Empires.dxw | 3 +- .../exports/Doom Shareware for Windows 95.dxw | 6 +- .../exports/Kingpin Life Of Crime (intro).dxw | 28 +++++ build/exports/Kingpin Life Of Crime.dxw | 28 +++++ .../exports/Knights_And_Merchants (1024).dxw | 28 +++++ build/exports/Knights_And_Merchants (800).dxw | 28 +++++ build/exports/Shadow Watch.dxw | 28 +++++ .../Star Wars Episode I Racer (emulated).dxw | 28 +++++ build/exports/Thorgal.dxw | 28 +++++ build/exports/Wind Fantasy SP.dxw | 4 +- build/exports/dxwnd.ini | 8 +- build/readme-relnotes.txt | 7 ++ dll/advapi.cpp | 40 +++++-- dll/ddraw.cpp | 34 ++++-- dll/dxhook.cpp | 3 +- dll/dxwcore.cpp | 61 +++++------ dll/dxwcore.hpp | 1 - dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 280576 -> 280576 bytes dll/gdi32.cpp | 38 +++++-- dll/kernel32.cpp | 1 + dll/user32.cpp | 102 +++++++++++++++--- dll/winmm.cpp | 3 +- host/dxwndhost.vs2008.suo | Bin 110592 -> 110592 bytes locale/cn/RCa05260 | Bin 77592 -> 0 bytes locale/cn/Release/BuildLog.htm | Bin 6532 -> 0 bytes .../Resources_CN.dll.intermediate.manifest | 10 -- locale/cn/Release/Resources_CN.res | Bin 127732 -> 0 bytes locale/cn/Release/mt.dep | 1 - .../cn/Resources_CN.vcproj.User-PC.User.user | 65 ----------- locale/cn/Resources_Cn.ncb | Bin 35840 -> 35840 bytes locale/cn/Resources_Cn.rc | Bin 82246 -> 82246 bytes locale/cn/Resources_Cn.suo | Bin 7168 -> 7168 bytes locale/cn/Resources_EN.rc | Bin 88626 -> 0 bytes 39 files changed, 437 insertions(+), 169 deletions(-) create mode 100644 build/exports/Kingpin Life Of Crime (intro).dxw create mode 100644 build/exports/Kingpin Life Of Crime.dxw create mode 100644 build/exports/Knights_And_Merchants (1024).dxw create mode 100644 build/exports/Knights_And_Merchants (800).dxw create mode 100644 build/exports/Shadow Watch.dxw create mode 100644 build/exports/Star Wars Episode I Racer (emulated).dxw create mode 100644 build/exports/Thorgal.dxw delete mode 100644 locale/cn/RCa05260 delete mode 100644 locale/cn/Release/BuildLog.htm delete mode 100644 locale/cn/Release/Resources_CN.dll.intermediate.manifest delete mode 100644 locale/cn/Release/Resources_CN.res delete mode 100644 locale/cn/Release/mt.dep delete mode 100644 locale/cn/Resources_CN.vcproj.User-PC.User.user delete mode 100644 locale/cn/Resources_EN.rc diff --git a/build/dxwnd.dll b/build/dxwnd.dll index f2ce6d0..afa42c5 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f3a3c1ff5c9ff0497a5155abf197a32ac7481a31130d4c441ece3e50b022e6eb -size 525312 +oid sha256:768707a31acc1f63671cfd55c5a50d061b29db777bdf61b5439a42dea27c7c6a +size 525824 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 06dd726..3ad4a83 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f379180ba2b97d28926280bc4a1b02ed95f3f90cd191aa3fa94d4757bdd106b3 +oid sha256:d802959c3ec0c17b5e1e7d58672c91b0223a9b3285725418cb44a73bbfe5b3d4 size 558592 diff --git a/build/exports/007 NightFire.dxw b/build/exports/007 NightFire.dxw index b22a450..d580eb3 100644 --- a/build/exports/007 NightFire.dxw +++ b/build/exports/007 NightFire.dxw @@ -8,7 +8,7 @@ coord0=0 flag0=134234150 flagg0=1207959552 flagh0=20 -flagi0=4 +flagi0=4194308 tflag0=0 initx0=0 inity0=0 @@ -22,3 +22,7 @@ sizx0=800 sizy0=600 maxfps0=0 initts0=0 +launchpath0= +flagj0=128 +winver0=0 +maxres0=0 diff --git a/build/exports/101 The Airborne Invasion of Normandy.dxw b/build/exports/101 The Airborne Invasion of Normandy.dxw index 71bb96f..0ed54a6 100644 --- a/build/exports/101 The Airborne Invasion of Normandy.dxw +++ b/build/exports/101 The Airborne Invasion of Normandy.dxw @@ -6,9 +6,9 @@ opengllib0= ver0=0 coord0=0 flag0=134234146 -flagg0=134217728 +flagg0=1207959552 flagh0=20 -flagi0=0 +flagi0=4194304 tflag0=192 initx0=0 inity0=0 @@ -22,3 +22,7 @@ sizx0=800 sizy0=600 maxfps0=0 initts0=0 +launchpath0= +flagj0=128 +winver0=0 +maxres0=0 diff --git a/build/exports/Actua Soccer 3.dxw b/build/exports/Actua Soccer 3.dxw index ba11b10..f429d80 100644 --- a/build/exports/Actua Soccer 3.dxw +++ b/build/exports/Actua Soccer 3.dxw @@ -25,3 +25,4 @@ initts0=0 launchpath0= winver0=0 maxres0=0 +flagj0=128 diff --git a/build/exports/Age of Empires.dxw b/build/exports/Age of Empires.dxw index 7eb4bf9..b8e909f 100644 --- a/build/exports/Age of Empires.dxw +++ b/build/exports/Age of Empires.dxw @@ -9,7 +9,7 @@ coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 -flagi0=4 +flagi0=4194308 tflag0=0 initx0=0 inity0=0 @@ -25,3 +25,4 @@ maxfps0=0 initts0=0 winver0=0 maxres0=-1 +flagj0=128 diff --git a/build/exports/Doom Shareware for Windows 95.dxw b/build/exports/Doom Shareware for Windows 95.dxw index 4a7a3ab..409ee16 100644 --- a/build/exports/Doom Shareware for Windows 95.dxw +++ b/build/exports/Doom Shareware for Windows 95.dxw @@ -8,7 +8,7 @@ coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 -flagi0=0 +flagi0=4194304 tflag0=0 initx0=0 inity0=0 @@ -22,3 +22,7 @@ sizx0=800 sizy0=600 maxfps0=0 initts0=0 +launchpath0= +flagj0=128 +winver0=0 +maxres0=2 diff --git a/build/exports/Kingpin Life Of Crime (intro).dxw b/build/exports/Kingpin Life Of Crime (intro).dxw new file mode 100644 index 0000000..20704a1 --- /dev/null +++ b/build/exports/Kingpin Life Of Crime (intro).dxw @@ -0,0 +1,28 @@ +[target] +title0=Kingpin Life Of Crime (intro) +path0=D:\Games\Kingpin Life Of Crime\kpintro.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134217762 +flagg0=1207959552 +flagh0=20 +flagi0=134218756 +flagj0=128 +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/Kingpin Life Of Crime.dxw b/build/exports/Kingpin Life Of Crime.dxw new file mode 100644 index 0000000..f9579ac --- /dev/null +++ b/build/exports/Kingpin Life Of Crime.dxw @@ -0,0 +1,28 @@ +[target] +title0=Kingpin Life Of Crime +path0=D:\Games\Kingpin Life Of Crime\kingpin.exe +launchpath0= +module0= +opengllib0=3dfxgl.dll +ver0=9 +coord0=0 +flag0=134234400 +flagg0=1744830464 +flagh0=21 +flagi0=-2009071610 +flagj0=128 +tflag0=6147 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 diff --git a/build/exports/Knights_And_Merchants (1024).dxw b/build/exports/Knights_And_Merchants (1024).dxw new file mode 100644 index 0000000..b1679ec --- /dev/null +++ b/build/exports/Knights_And_Merchants (1024).dxw @@ -0,0 +1,28 @@ +[target] +title0=Knights_And_Merchants (1024) +path0=D:\Games\Knights_And_Merchants_-_The_Shattered_Kingdom\KaM_1024.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134217762 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=128 +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/Knights_And_Merchants (800).dxw b/build/exports/Knights_And_Merchants (800).dxw new file mode 100644 index 0000000..91b2a53 --- /dev/null +++ b/build/exports/Knights_And_Merchants (800).dxw @@ -0,0 +1,28 @@ +[target] +title0=Knights_And_Merchants (800) +path0=D:\Games\Knights_And_Merchants_-_The_Shattered_Kingdom\KaM_800.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134217762 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +flagj0=128 +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/Shadow Watch.dxw b/build/exports/Shadow Watch.dxw new file mode 100644 index 0000000..1804f5b --- /dev/null +++ b/build/exports/Shadow Watch.dxw @@ -0,0 +1,28 @@ +[target] +title0=Shadow Watch +path0=D:\Games\Shadow Watch\sw.exe +launchpath0=D:\Games\Shadow Watch\ShadowWatch.exe +module0=dx.dll +opengllib0= +ver0=1 +coord0=0 +flag0=-2013265869 +flagg0=1241513984 +flagh0=4259856 +flagi0=203423748 +flagj0=128 +tflag0=0 +initx0=200 +inity0=290 +minx0=0 +miny0=0 +maxx0=800 +maxy0=600 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 diff --git a/build/exports/Star Wars Episode I Racer (emulated).dxw b/build/exports/Star Wars Episode I Racer (emulated).dxw new file mode 100644 index 0000000..ca8f2fd --- /dev/null +++ b/build/exports/Star Wars Episode I Racer (emulated).dxw @@ -0,0 +1,28 @@ +[target] +title0=Star Wars Episode I Racer (emulated) +path0=D:\Games\Star Wars Episode 1 racer\SWEP1RCR.EXE +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=679493671 +flagg0=1210056720 +flagh0=8212 +flagi0=2097172 +flagj0=136 +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=0 diff --git a/build/exports/Thorgal.dxw b/build/exports/Thorgal.dxw new file mode 100644 index 0000000..e189893 --- /dev/null +++ b/build/exports/Thorgal.dxw @@ -0,0 +1,28 @@ +[target] +title0=Thorgal +path0=D:\Games\Thorgal\THORGAL.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=136314914 +flagg0=1242038528 +flagh0=65552 +flagi0=136314885 +flagj0=136 +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/Wind Fantasy SP.dxw b/build/exports/Wind Fantasy SP.dxw index 1cae916..41bd5f3 100644 --- a/build/exports/Wind Fantasy SP.dxw +++ b/build/exports/Wind Fantasy SP.dxw @@ -6,7 +6,7 @@ module0= opengllib0= ver0=0 coord0=0 -flag0=134480416 +flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=4194308 @@ -25,4 +25,4 @@ maxfps0=0 initts0=0 winver0=0 maxres0=-1 -flagj0=0 +flagj0=128 diff --git a/build/exports/dxwnd.ini b/build/exports/dxwnd.ini index 722aee0..35d043b 100644 --- a/build/exports/dxwnd.ini +++ b/build/exports/dxwnd.ini @@ -1,5 +1,5 @@ [window] -posx=1036 -posy=444 -sizx=320 -sizy=200 +posx=1347 +posy=477 +sizx=417 +sizy=450 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 33697a9..aa531af 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -616,3 +616,10 @@ fix: debug option "highlight blit to primary" was causing game crashes when the fix: trapped sporadic CloseHandle(hMenu) crashes in a try/catch clause. fix: attempt to fix FIXD3DFRAME option fix: added SetStretchBltMode(hdc,HALFTONE) to SetDIBitsToDevice hooker to improve stretching: fixes "Celtic Kings Rage of War" + +v2.02.95 +fix: handling of limit resolution field +fix: FPS handling to screen updated made by SetDIBitsToDevice +fix: PeekMessage implementation with "Peek all message in queue": fixes "Shadow Watch" +fix: missing hook to CreateProcess - needed for "Suppress child process creation". +fix: exception for bilinear filtering applied to certain games (e.g. "Shadow Watch") diff --git a/dll/advapi.cpp b/dll/advapi.cpp index 66c7656..af95845 100644 --- a/dll/advapi.cpp +++ b/dll/advapi.cpp @@ -33,11 +33,39 @@ FARPROC Remap_AdvApi32_ProcAddress(LPCSTR proc, HMODULE hModule) #define HKEY_MASK 0x7FFFFF00 #define IsFake(hKey) (((DWORD)hKey & HKEY_MASK) == HKEY_MASK) +static FILE *OpenFakeRegistry(); + static char *hKey2String(HKEY hKey) { char *skey; + static char sKey[MAX_PATH+1]; static char skeybuf[10]; - if(IsFake(hKey)) return "HKEY_FAKE"; + if(IsFake(hKey)) { + FILE *regf; + char RegBuf[MAX_PATH+1]; + regf=OpenFakeRegistry(); + if(regf!=NULL){ + HKEY hLocalKey=HKEY_FAKE; + fgets(RegBuf, 256, regf); + while (!feof(regf)){ + if(RegBuf[0]=='['){ + if(hLocalKey == hKey){ + OutTrace("building fake Key=\"%s\" hKey=%x\n", sKey, hKey); + fclose(regf); + strcpy(sKey, &RegBuf[1]); + sKey[strlen(sKey)-2]=0; // get rid of "]" + return sKey; + } + else { + hLocalKey--; + } + } + fgets(RegBuf, 256, regf); + } + fclose(regf); + } + return "HKEY_NOT_FOUND"; + } switch((ULONG)hKey){ case HKEY_CLASSES_ROOT: skey="HKEY_CLASSES_ROOT"; break; case HKEY_CURRENT_CONFIG: skey="HKEY_CURRENT_CONFIG"; break; @@ -74,7 +102,7 @@ static LONG myRegOpenKeyEx( char RegBuf[MAX_PATH+1]; sprintf(sKey,"%s\\%s", hKey2String(hKey), lpSubKey); - OutTraceDW("RegOpenKeyEx: searching for key=\"%s\"\n", sKey); + OutTraceR("RegOpenKeyEx: searching for key=\"%s\"\n", sKey); regf=OpenFakeRegistry(); if(regf!=NULL){ @@ -181,7 +209,7 @@ LONG WINAPI extRegQueryValueEx( else { if(hCurKey==hKey){ - //OutTraceDW("loop: \"%s\"\n", RegBuf); + //OutTrace("loop: \"%s\"\n", RegBuf); if((RegBuf[0]=='"') && !strncmp(lpValueName, &RegBuf[1], strlen(lpValueName)) && (RegBuf[strlen(lpValueName)+1]=='"') && @@ -202,7 +230,7 @@ LONG WINAPI extRegQueryValueEx( *lpb = 0; // string terminator if(lpType) *lpType=REG_SZ; // - OutTraceDW("RegQueryValueEx: Data=\"%s\" type=REG_SZ\n", lpData); + OutTraceR("RegQueryValueEx: Data=\"%s\" type=REG_SZ\n", lpData); res=ERROR_SUCCESS; } if(!strncmp(pData,"dword:",strlen("dword:"))){ //dword value @@ -212,7 +240,7 @@ LONG WINAPI extRegQueryValueEx( memcpy(lpData, &val, sizeof(DWORD)); if(lpType) *lpType=REG_DWORD; *lpcbData=sizeof(DWORD); - OutTraceDW("RegQueryValueEx: Data=0x%x type=REG_DWORD\n", val); + OutTraceR("RegQueryValueEx: Data=0x%x type=REG_DWORD\n", val); res=ERROR_SUCCESS; } if(!strncmp(pData,"hex:",strlen("hex:"))){ //dword value @@ -228,7 +256,7 @@ LONG WINAPI extRegQueryValueEx( lpData++; (*lpcbData)++; } - OutTraceDW(" type=REG_BINARY cbData=%d\n", *lpcbData); + OutTraceR(" type=REG_BINARY cbData=%d\n", *lpcbData); res=ERROR_SUCCESS; } fclose(regf); diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 155d13d..6d4144d 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -744,6 +744,8 @@ int HookDirectDraw(HMODULE module, int version) Unlock4_Type pUnlockMethod(LPDIRECTDRAWSURFACE lpdds) { + // to do: return extUnlock for unhooked surfaces + char sMsg[81]; void * extUnlock; __try{ // v2.02.31: catch some possible exception (i.e. Abomination in EMULATION mode) @@ -1939,6 +1941,7 @@ HRESULT WINAPI extSetDisplayMode(int version, LPDIRECTDRAW lpdd, OutTraceDW("SetDisplayMode: fixing colordepth current=%d required=%d size=(%dx%d)\n", ddsd.ddpfPixelFormat.dwRGBBitCount, dwbpp, dwwidth, dwheight); } + if(dxw.dwFlags1 & EMULATESURFACE){ dwbpp = ddsd.ddpfPixelFormat.dwRGBBitCount; } @@ -1948,8 +1951,10 @@ HRESULT WINAPI extSetDisplayMode(int version, LPDIRECTDRAW lpdd, else res = (*pSetDisplayMode2)(lpdd, dwwidth, dwheight, dwbpp, ddsd.dwRefreshRate, 0); + if(res) OutTraceE("SetDisplayMode: error=%x\n", res); + SetVSyncDelays(lpdd); - return 0; + return DD_OK; } HRESULT WINAPI extSetDisplayMode2(LPDIRECTDRAW lpdd, @@ -3012,6 +3017,15 @@ HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGet OutTraceE("GetAttachedSurface(%d): ERROR res=%x(%s) at %d\n", dxversion, res, ExplainDDError(res), __LINE__); else OutTraceDDRAW("GetAttachedSurface(%d): attached=%x\n", dxversion, *lplpddas); + +#if 0 + // beware: ddraw 7 surfaces can be created with FLIP capability, hence could have a backbuffer ??? + if((res==DDERR_NOTFOUND) && (dxversion==7) && (!IsPrim) && (!IsBack)){ + *lplpddas = lpdds; + res = DD_OK; + } +#endif + return res; } @@ -3161,8 +3175,6 @@ HRESULT WINAPI PrimaryBilinearBlt(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, TmpRect.bottom = ddsd.dwHeight = dwHeight; TmpRect.right = ddsd.dwWidth = dwWidth; ddsd.dwFlags = (DDSD_HEIGHT | DDSD_WIDTH | DDSD_CAPS); - // work only on even width surfaces, or you'd have to take in account proper pitch! - // dwWidth = ddsd.dwWidth = ((dwWidth + 1) >> 1) << 1; // capabilities must cope with primary / backbuffer surface capabilities to get speedy operations ddsd.ddsCaps.dwCaps = bIs3DPrimarySurfaceDevice ? DDSCAPS_OFFSCREENPLAIN : (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); res=(*pCreateSurface1)(lpPrimaryDD, (LPDDSURFACEDESC)&ddsd, &lpddsTmp, NULL); @@ -3190,9 +3202,8 @@ HRESULT WINAPI PrimaryBilinearBlt(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, bDestBuf, lpdestrect, DestPitch); // fast-blit to primary - //(*pUnlockMethod(lpddssrc))(lpddssrc, NULL); - //(*pUnlockMethod(lpddsTmp))(lpddsTmp, NULL); - (*pUnlock1)(lpddssrc, NULL); + if(lpddssrc==lpDDSEmu_Back) lpddssrc->Unlock(NULL); // this surface is unhooked!!! + else (*pUnlock1)(lpddssrc, NULL); //(*pUnlock1)(lpddsTmp, NULL); lpddsTmp->Unlock(NULL); // this surface is unhooked!!! res= (*pBltFast)(lpdds, lpdestrect->left, lpdestrect->top, lpddsTmp, &TmpRect, DDBLTFAST_WAIT); @@ -3374,8 +3385,9 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, if(dxw.dwFlags5 & NOBLT) return DD_OK; destrect=dxw.MapWindowRect(lpdestrect); - - //OutTraceB("DESTRECT=(%d,%d)-(%d,%d)\n", destrect.left, destrect.top, destrect.right, destrect.bottom); + OutTraceB("DESTRECT=(%d,%d)-(%d,%d) Screen=(%dx%d)\n", + destrect.left, destrect.top, destrect.right, destrect.bottom, + dxw.GetScreenWidth(), dxw.GetScreenHeight()); // ========================= // Blit to primary direct surface @@ -4896,10 +4908,12 @@ HRESULT WINAPI extGetSurfaceDesc1(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpd switch(lpddsd->dwSize){ case sizeof(DDSURFACEDESC): if (pGetSurfaceDesc1) return extGetSurfaceDesc(pGetSurfaceDesc1, lpdds, lpddsd); - /**/ if (pGetSurfaceDesc4) return extGetSurfaceDesc((GetSurfaceDesc_Type)pGetSurfaceDesc4, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd); + //else return lpdds->GetSurfaceDesc((LPDDSURFACEDESC)lpddsd); + if (pGetSurfaceDesc4) return extGetSurfaceDesc((GetSurfaceDesc_Type)pGetSurfaceDesc4, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd); break; case sizeof(DDSURFACEDESC2): if (pGetSurfaceDesc4) return extGetSurfaceDesc((GetSurfaceDesc_Type)pGetSurfaceDesc4, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd); + //else return lpdds->GetSurfaceDesc((LPDDSURFACEDESC)lpddsd); break; default: OutTraceDW("GetSurfaceDesc: ASSERT - bad dwSize=%d lpdds=%x at %d\n", lpddsd->dwSize, lpdds, __LINE__); @@ -4917,9 +4931,11 @@ HRESULT WINAPI extGetSurfaceDesc2(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 l switch(lpddsd->dwSize){ case sizeof(DDSURFACEDESC): if (pGetSurfaceDesc1) return extGetSurfaceDesc(pGetSurfaceDesc1, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd); + //else return lpdds->GetSurfaceDesc((LPDDSURFACEDESC)lpddsd); break; case sizeof(DDSURFACEDESC2): if (pGetSurfaceDesc4) return extGetSurfaceDesc((GetSurfaceDesc_Type)pGetSurfaceDesc4, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd); + //else return lpdds->GetSurfaceDesc((LPDDSURFACEDESC)lpddsd); break; default: OutTraceDW("GetSurfaceDesc: ASSERT - bad dwSize=%d lpdds=%x at %d\n", lpddsd->dwSize, lpdds, __LINE__); diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 6368ea1..6b250e3 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -1406,8 +1406,7 @@ LRESULT CALLBACK MessageHook(int code, WPARAM wParam, LPARAM lParam) } else { // fix the message point coordinates - msg->pt=dxw.FixMessagePt(dxw.GethWnd(), msg->pt); - //msg->pt=dxw.FixMessagePt(msg->hwnd, msg->pt); + msg->pt=dxw.FixCursorPos(msg->pt); // beware: needs fix for mousewheel? if((msg->message <= WM_MOUSELAST) && (msg->message >= WM_MOUSEFIRST)) msg->lParam = MAKELPARAM(msg->pt.x, msg->pt.y); OutTraceC("MessageHook: fixed lparam/pt=(%d,%d)\n", msg->pt.x, msg->pt.y); diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index 2ba86cb..9b12780 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -118,11 +118,17 @@ void dxwCore::InitTarget(TARGETMAP *target) void dxwCore::SetScreenSize(void) { - SetScreenSize(800, 600); // set to default screen resolution - //SetScreenSize(640, 480); // set to default screen resolution + if(dxw.Windowize) + SetScreenSize(800, 600); // set to default screen resolution + else{ + int sizx, sizy; + sizx = GetSystemMetrics(SM_CXSCREEN); + sizy = GetSystemMetrics(SM_CYSCREEN); + SetScreenSize(sizx, sizy); + } } -void dxwCore::SetScreenSize(int x, int y) +void dxwCore::SetScreenSize(int x, int y) { DXWNDSTATUS *p; OutTraceDW("DXWND: set screen size=(%d,%d)\n", x, y); @@ -147,8 +153,9 @@ void dxwCore::SetScreenSize(int x, int y) } if(((DWORD)p->Width > maxw) || ((DWORD)p->Height > maxh)){ OutTraceDW("DXWND: limit device size=(%d,%d)\n", maxw, maxh); - p->Width = (short)maxw; - p->Height = (short)maxh; + // v2.02.95 setting new virtual desktop size + dwScreenWidth = p->Width = (short)maxw; + dwScreenHeight= p->Height = (short)maxh; } } } @@ -461,6 +468,19 @@ POINT dxwCore::FixCursorPos(POINT prev) if (h) curr.y = (curr.y * dxw.GetScreenHeight()) / h; } + if(dxw.dwFlags4 & FRAMECOMPENSATION){ + static int dx, dy, todo=TRUE; + if (todo){ + POINT FrameOffset = dxw.GetFrameOffset(); + dx=FrameOffset.x; + dy=FrameOffset.y; + OutTraceC("GetCursorPos: frame compensation=(%d,%d)\n", dx, dy); + todo=FALSE; + } + curr.x += dx; + curr.y += dy; + } + if((dxw.dwFlags1 & ENABLECLIPPING) && lpClipRegion){ // v2.1.93: // in clipping mode, avoid the cursor position to lay outside the valid rect @@ -645,37 +665,6 @@ RECT dxwCore::MapWindowRect(LPRECT lpRect) return RetRect; } -POINT dxwCore::FixMessagePt(HWND hwnd, POINT point) -{ - RECT rect; - static POINT curr; - curr=point; - - if(!(*pScreenToClient)(hwnd, &curr)){ - OutTraceE("ScreenToClient ERROR=%d hwnd=%x at %d\n", GetLastError(), hwnd, __LINE__); - curr.x = curr.y = 0; - } - - if (!(*pGetClientRect)(hwnd, &rect)) { - OutTraceE("GetClientRect ERROR=%d hwnd=%x at %d\n", GetLastError(), hwnd, __LINE__); - curr.x = curr.y = 0; - } - -#ifdef ISDEBUG - if(IsDebug) OutTrace("FixMessagePt point=(%d,%d) hwnd=%x win pos=(%d,%d) size=(%d,%d)\n", - point.x, point.y, hwnd, point.x-curr.x, point.y-curr.y, rect.right, rect.bottom); -#endif - - if (curr.x < 0) curr.x=0; - if (curr.y < 0) curr.y=0; - if (curr.x > rect.right) curr.x=rect.right; - if (curr.y > rect.bottom) curr.y=rect.bottom; - if (rect.right) curr.x = ((curr.x * dxw.GetScreenWidth()) + (rect.right >> 1)) / rect.right; - if (rect.bottom) curr.y = ((curr.y * dxw.GetScreenHeight()) + (rect.bottom >> 1)) / rect.bottom; - - return curr; -} - void dxwCore::MapClient(LPRECT rect) { RECT client; diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index 6800dff..acd4c92 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -63,7 +63,6 @@ public: // methods void MapWindow(LPRECT); void MapWindow(int *, int *, int *, int *); void FixWorkarea(LPRECT); - POINT FixMessagePt(HWND, POINT); RECT GetScreenRect(void); RECT GetUnmappedScreenRect(); RECT GetWindowRect(RECT); diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 278516f..ec92b34 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.94" +#define VERSION "2.02.95" #define DDTHREADLOCK 1 diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 683f2c76f203060e31bb114da65f7f5ed3ee6347..3dbd9838b9471ef16b1fd1a9480e2420f3a839c9 100644 GIT binary patch delta 26466 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 G;(r0J12nS$ delta 19737 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 M;w-aw^aw`(KbW0jaR2}S diff --git a/dll/gdi32.cpp b/dll/gdi32.cpp index 6af95e4..e376ef8 100644 --- a/dll/gdi32.cpp +++ b/dll/gdi32.cpp @@ -326,24 +326,34 @@ int WINAPI extGetDeviceCaps(HDC hdc, int nindex) OutTraceDW("GetDeviceCaps: fix(1) BITSPIXEL/COLORRES cap=%x\n",res); return res; case HORZRES: - res = pSetDevMode->dmPelsWidth; - OutTraceDW("GetDeviceCaps: fix(1) HORZRES cap=%d\n", res); - return res; + if(dxw.Windowize){ + res = pSetDevMode->dmPelsWidth; + OutTraceDW("GetDeviceCaps: fix(1) HORZRES cap=%d\n", res); + return res; + } + break; case VERTRES: - res = pSetDevMode->dmPelsHeight; - OutTraceDW("GetDeviceCaps: fix(1) VERTRES cap=%d\n", res); - return res; + if(dxw.Windowize){ + res = pSetDevMode->dmPelsHeight; + OutTraceDW("GetDeviceCaps: fix(1) VERTRES cap=%d\n", res); + return res; + } + break; } } switch(nindex){ case VERTRES: - res= dxw.GetScreenHeight(); - OutTraceDW("GetDeviceCaps: fix(2) VERTRES cap=%d\n", res); + if(dxw.Windowize){ + res= dxw.GetScreenHeight(); + OutTraceDW("GetDeviceCaps: fix(2) VERTRES cap=%d\n", res); + } break; case HORZRES: - res= dxw.GetScreenWidth(); - OutTraceDW("GetDeviceCaps: fix(2) HORZRES cap=%d\n", res); + if(dxw.Windowize){ + res= dxw.GetScreenWidth(); + OutTraceDW("GetDeviceCaps: fix(2) HORZRES cap=%d\n", res); + } break; // WARNING: in no-emu mode, the INIT8BPP and INIT16BPP flags expose capabilities that // are NOT implemented and may cause later troubles! @@ -1313,6 +1323,7 @@ int WINAPI extSetDIBitsToDevice(HDC hdc, int XDest, int YDest, DWORD dwWidth, DW } //else if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){ + // blitting toprimary surface !!! DWORD OrigWidth, OrigHeight; int OrigXDest, OrigYDest; OrigWidth=dwWidth; @@ -1323,6 +1334,10 @@ int WINAPI extSetDIBitsToDevice(HDC hdc, int XDest, int YDest, DWORD dwWidth, DW OutTraceDW("SetDIBitsToDevice: fixed dest=(%d,%d)-(%dx%d)\n", XDest, YDest, dwWidth, dwHeight); HDC hTempDc; HBITMAP hbmPic; + + if(dxw.HandleFPS()) return DD_OK; + if(dxw.dwFlags5 & NOBLT) return DD_OK; + if(!(hTempDc=CreateCompatibleDC(hdc))) OutTraceE("CreateCompatibleDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); // tricky part: CreateCompatibleBitmap is needed to set the dc size, but it has to be performed @@ -1338,6 +1353,9 @@ int WINAPI extSetDIBitsToDevice(HDC hdc, int XDest, int YDest, DWORD dwWidth, DW SetStretchBltMode(hdc,HALFTONE); if(!(ret=(*pGDIStretchBlt)(hdc, XDest, YDest, dwWidth, dwHeight, hTempDc, 0, 0, OrigWidth, OrigHeight, SRCCOPY))) OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__); + + dxw.ShowOverlay(hdc); + if(!(DeleteObject(hbmPic))) // v2.02.32 - avoid resource leakage OutTraceE("DeleteObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(DeleteDC(hTempDc))) diff --git a/dll/kernel32.cpp b/dll/kernel32.cpp index 96909f3..abd4bf0 100644 --- a/dll/kernel32.cpp +++ b/dll/kernel32.cpp @@ -82,6 +82,7 @@ void HookKernel32Init() HookLibInit(LimitHooks); HookLibInit(TimeHooks); HookLibInit(VersionHooks); + HookLibInit(SuppressChildHooks); } FARPROC Remap_kernel32_ProcAddress(LPCSTR proc, HMODULE hModule) diff --git a/dll/user32.cpp b/dll/user32.cpp index e2c3982..047091a 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -54,8 +54,9 @@ static HookEntry_Type Hooks[]={ {HOOK_HOT_CANDIDATE, "SetWindowLongW", (FARPROC)SetWindowLongW, (FARPROC *)&pSetWindowLongW, (FARPROC)extSetWindowLongW}, {HOOK_HOT_CANDIDATE, "GetWindowLongW", (FARPROC)GetWindowLongW, (FARPROC *)&pGetWindowLongW, (FARPROC)extGetWindowLongW}, - //{HOOK_IAT_CANDIDATE, "GetActiveWindow", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow}, - //{HOOK_IAT_CANDIDATE, "GetForegroundWindow", (FARPROC)NULL, (FARPROC *)&pGetForegroundWindow, (FARPROC)extGetForegroundWindow}, + //{HOOK_HOT_CANDIDATE, "GetActiveWindow", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow}, + //{HOOK_HOT_CANDIDATE, "GetForegroundWindow", (FARPROC)NULL, (FARPROC *)&pGetForegroundWindow, (FARPROC)extGetForegroundWindow}, + {HOOK_IAT_CANDIDATE, "IsWindowVisible", (FARPROC)NULL, (FARPROC *)&pIsWindowVisible, (FARPROC)extIsWindowVisible}, {HOOK_IAT_CANDIDATE, "SystemParametersInfoA", (FARPROC)SystemParametersInfoA, (FARPROC *)&pSystemParametersInfoA, (FARPROC)extSystemParametersInfoA}, {HOOK_IAT_CANDIDATE, "SystemParametersInfoW", (FARPROC)SystemParametersInfoW, (FARPROC *)&pSystemParametersInfoW, (FARPROC)extSystemParametersInfoW}, @@ -825,6 +826,7 @@ BOOL WINAPI extGetCursorPos(LPPOINT lppoint) *lppoint=dxw.ScreenToClient(*lppoint); *lppoint=dxw.FixCursorPos(*lppoint); +#if 0 if(dxw.dwFlags4 & FRAMECOMPENSATION){ static int dx, dy, todo=TRUE; if (todo){ @@ -837,6 +839,7 @@ BOOL WINAPI extGetCursorPos(LPPOINT lppoint) lppoint->x += dx; lppoint->y += dy; } +#endif GetHookInfo()->CursorX=(short)lppoint->x; GetHookInfo()->CursorY=(short)lppoint->y; @@ -909,12 +912,74 @@ BOOL WINAPI extPeekMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsg { BOOL res; - res=(*pPeekMessage)(lpMsg, hwnd, 0, 0, (wRemoveMsg & 0x000F)); +#if 0 + UINT bRemoveMsg = (wRemoveMsg & 0x000F); + UINT message; + + do{ + res=(*pPeekMessage)(lpMsg, hwnd, 0, 0, bRemoveMsg); + if(!res) break; // no message available + + OutTraceW("PeekMessage: GOT lpmsg=%x hwnd=%x filter=(%x-%x) remove=%x(%s) msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n", + lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg), + lpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF), + lpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res); + + message = lpMsg->message; + if(res &&(dxw.dwFlags3 & FILTERMESSAGES)){ // filter offending messages + switch(message){ + case WM_NCMOUSEMOVE: + case WM_NCLBUTTONDOWN: + case WM_NCLBUTTONUP: + case WM_NCLBUTTONDBLCLK: + case WM_NCRBUTTONDOWN: + case WM_NCRBUTTONUP: + case WM_NCRBUTTONDBLCLK: + case WM_NCMBUTTONDOWN: + case WM_NCMBUTTONUP: + case WM_NCMBUTTONDBLCLK: + OutTraceDW("WindowProc[%x]: SUPPRESS WinMsg=[0x%x]%s(%x,%x)\n", hwnd, message, ExplainWinMessage(message), lpMsg->wParam, lpMsg->lParam); + if(!bRemoveMsg) (*pPeekMessage)(lpMsg, hwnd, message, message, TRUE); + continue; + } + } + if((wMsgFilterMin==0) && (wMsgFilterMax == 0)) break; // no filtering, everything is good + if((message < wMsgFilterMin) || (message > wMsgFilterMax)){ + OutTraceDW("WindowProc[%x]: SUPPRESS WinMsg=[0x%x]%s(%x,%x)\n", hwnd, message, ExplainWinMessage(message), lpMsg->wParam, lpMsg->lParam); + if(!bRemoveMsg) (*pPeekMessage)(lpMsg, hwnd, message, message, TRUE); + continue; // skip this one .... + } + } while(FALSE); +#endif + + if((wMsgFilterMin==0) && (wMsgFilterMax == 0)){ + // no filtering, everything is good + res=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, (wRemoveMsg & 0x000F)); + } + else { + MSG Dummy; + // better eliminate all messages before and after the selected range !!!! + //if(wMsgFilterMin)(*pPeekMessage)(&Dummy, hwnd, 0, wMsgFilterMin-1, TRUE); + if(wMsgFilterMin>0x0F)(*pPeekMessage)(&Dummy, hwnd, 0x0F, wMsgFilterMin-1, TRUE); + res=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, (wRemoveMsg & 0x000F)); + if(wMsgFilterMaxhwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg), + lpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF), + lpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res); + else + OutTraceW("PeekMessage: ANY lpmsg=%x hwnd=%x filter=(%x-%x) remove=%x(%s) res=%x\n", + lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg), res); - OutTraceW("PeekMessage: ANY lpmsg=%x hwnd=%x filter=(%x-%x) remove=%x(%s) msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n", - lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg), - lpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF), - lpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res); return res; } @@ -1101,6 +1166,17 @@ int WINAPI extGetSystemMetrics(int nindex) res=(*pGetSystemMetrics)(nindex); OutTraceDW("GetSystemMetrics: index=%x(%s), res=%d\n", nindex, ExplainsSystemMetrics(nindex), res); + if(!dxw.Windowize){ + // v2.02.95: if not in window mode, just implement the HIDEMULTIMONITOR flag + if( (nindex ==SM_CMONITORS) && + (dxw.dwFlags2 & HIDEMULTIMONITOR) && + res>1) { + res=1; + OutTraceDW("GetSystemMetrics: fix SM_CMONITORS=%d\n", res); + } + return res; + } + // if you have a bypassed setting, use it first! if(pSetDevMode){ switch(nindex){ @@ -2556,18 +2632,18 @@ HWND WINAPI extGetActiveWindow(void) { HWND ret; ret=(*pGetActiveWindow)(); - OutTraceDW("GetActiveWindow: ret=%x\n", ret); - STOPPER("GetActiveWindow"); - return ret; + OutTraceDW("GetActiveWindow: ret=%x->%x\n", ret, dxw.GethWnd()); + //STOPPER("GetActiveWindow"); + return dxw.GethWnd(); } HWND WINAPI extGetForegroundWindow(void) { HWND ret; ret=(*pGetForegroundWindow)(); - OutTraceDW("GetForegroundWindow: ret=%x\n", ret); - STOPPER("GetForegroundWindow"); - return ret; + OutTraceDW("GetForegroundWindow: ret=%x->%x\n", ret, dxw.GethWnd()); + //STOPPER("GetForegroundWindow"); + return dxw.GethWnd(); } BOOL WINAPI extIsWindowVisible(HWND hwnd) diff --git a/dll/winmm.cpp b/dll/winmm.cpp index 8783e4e..ab634f6 100644 --- a/dll/winmm.cpp +++ b/dll/winmm.cpp @@ -121,7 +121,8 @@ MCIERROR WINAPI extmciSendCommand(MCIDEVICEID IDDevice, UINT uMsg, DWORD_PTR fdw } ret=(*pmciSendCommand)(IDDevice, uMsg, fdwCommand, dwParam); + if(dxw.IsFullScreen() && uMsg==MCI_PUT) pr->rc=saverect; - if (ret) OutTraceE("mciSendCommand: ERROR res=%x\n", ret); + if (ret) OutTraceE("mciSendCommand: ERROR res=%d\n", ret); return ret; } diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index 90117f8898357872da36099af13fe0fce43442ff..a16d2dfc910425c96e3c22ef4d714d81406abd4d 100644 GIT binary patch delta 2112 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 v#i1R;vwLsueFUqM1~6HED@aSDu$!># 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%0DVX}yKUQuAC4x?mYlvsGD?5x- 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 - - - - - - - - - diff --git a/locale/cn/Release/Resources_CN.res b/locale/cn/Release/Resources_CN.res deleted file mode 100644 index ee878cdd57b954b923e63a3cc1a84e02f44eee3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127732 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
  • *k|_g z-5qS+&kbgP8%KV=%+*+Odx1Ijxs^!8Kiilw`>MSX_4PXtR|j8D_SE3xta`=Lvgog0 zZmmgv^7)kA{*7m!Yg3;R@4!4!c=zDx=GIY%|MI+a?VP?9s2A&jn_I4g$t@9nnz3Tg zBH{VMvyLYzY0>tqF3g}4(zbi_y)u1{K9|%~{ZlpZbl%ObP8Ajt55JrF{W>{xw{toD z)5f(bUkhnZ*U!WB)n=W<#L4Yn!Zq_VkQvJ^jXqweEBBtu?2rmyJ6?pLci%>&xX!94*(L@pYKJx?6qO z3AlHe=sN-5EZEU7=MpP+_8lJBj(@u=R{V6SG`;RGP@b$&yz}}eZsOVarY>W0?%BJ4 z$~a2@rp0`6wIo&EI>4vG7)|so7QAVAhLB}?s-Ld-?v04{b>GrKh}rY8*K+SSi4>yi znwvp9rCd1nGzkniwa$s!2YNdR*Z-iD`tPW{#7toi?u{fIGxhr0k+k+qNvp{A9^W$9 z&m!01#sYOla)7s1_W3*o-MayO$La_^T_S|ftv&8Z?(iAjJJ?4M!mXGteW&4_T1M|P mAX3)jQ_3m{XS=g - - - - - - - - - - diff --git a/locale/cn/Resources_Cn.ncb b/locale/cn/Resources_Cn.ncb index a8d0402a368e7e634e10fd7647c489622b54afba..2b80c0b5cc363f4ba1e983b8c12dd2e229a0b6f8 100644 GIT binary patch delta 547 zcmZpe!PGE=X#o!}BLf2i7&koQX4=dvA<4*Sx>;RvACQ`?!LK-(onHYcpdo#OWl|1{ zgws2#5GJ4w_k9yDWk${Po5XnK^v#_+w@jAdnFQ3Zo~MK{Y_bZk8Lv1{5gQN}0WtUH z^xV5ltU^F0>t;`n?aYj9n*~+=Gfz^GVdUB@tMEe{XoHxA7RY8t%LRY~0m#Q7pbBJ|0%~-cCw7fBu10T>qSZ! zgD0zqn(-C^6>$TxI1sZ#VF3z&>|+Abq}jJQU34bXBo}U`dyJcTc_e|>ZdT{rhhqC?4gMP}n|wqi zfO29MS|BBkmJ1l2P2!7-l4El6lM{1NW0Lb?tW&IFTq?rzQew)C;th=AEzuP)02QQE zlp`qshJw^&J8PiHK$iIAJZoNEpbr?%0{!6x@+c560H0(B{1N2y!%_3!Rhb}78VKe5(zNU?lLj5Y<4Z!Ee!w;rjsoI diff --git a/locale/cn/Resources_Cn.rc b/locale/cn/Resources_Cn.rc index d1c1b76e090301ef8b5a089c240ac6662006c793..38041e94ce918aeddd6c1d0c19b25d0f02f125c7 100644 GIT binary patch delta 22 ecmX@s#CoiWbwk2@W@84E$rrC_Ztj`CYasw`TnbPC delta 22 ecmX@s#CoiWbwk4Z$vuzwCf~Uxx4CEju7v=CC=2xf diff --git a/locale/cn/Resources_Cn.suo b/locale/cn/Resources_Cn.suo index d434b50cf1740133f4e89e67e03b9d66a0a9c24f..91008cbe9220b705e98dd035872a1c769fb95ea4 100644 GIT binary patch delta 220 zcmZp$Xt3De!@|fjS&>Da?Z8$Em&9k2i&z3DI|~?2Heg|y{DZ}ZhnazaffI=T1Ht5r zEGm-^aIkEyVBNsXXu4UGa~2~n13Od}uA+exsFlkbY|H^ZmdO>|K0ItdMI1=RZ2rQ1 zo`si@6)41uBs|%HpJnq80dGcLMlql;H?mZTkUz-C&0mBz0WF`b$tl12m{={)5JsRX JCKQ#@Jpk6oOlbfB delta 234 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