http://smilesword.com/
一直很喜欢玩百战天虫之世界大战,但是自从换了Ubuntu之后就木有玩过,后来尝试过wine但是失败了,在网上找了很久终于找到了解决的办法。
so,Follow me.
1.安装wine:sudo apt-get install wine (注意只能装wine 1.2版本,最新的1.3不支持,暂未找到解决办法)
2.安装百战天虫之世界大战,如果安装时有乱码的话可以使用以下命令:env LANG=zh_CN.UTF-8 wine wwp.exe(如果已经安装过百战天虫之世界大战可以不用重新安装,直接看下一步吧^^)
3.下载wine代码:sudo apt-get source wine1.2
4.用gedit或vim将以下脚本保存,文件名任意,如wwp_wine.patch
--- dlls/wined3d/swapchain_gdi.c.1.2 2010-07-16 17:05:45.000000000 +0200
+++ dlls/wined3d/swapchain_gdi.c 2010-10-27 19:39:04.000000000 +0200
@@ -101,7 +101,7 @@ void x11_copy_to_screen(IWineD3DSwapChai
hSurfaceDC = front->hDC;
- hDisplayWnd = This->win_handle;
+ hDisplayWnd = GetDesktopWindow();
hDisplayDC = GetDCEx(hDisplayWnd, 0, DCX_CLIPSIBLINGS|DCX_CACHE);
if(rc) {
TRACE(" copying rect (%d,%d)->(%d,%d), offset (%d,%d)\n",
--- dlls/ddraw/main.c.1.2 2010-07-16 17:05:45.000000000 +0200
+++ dlls/ddraw/main.c 2010-10-27 19:46:22.000000000 +0200
@@ -53,7 +53,7 @@ static typeof(WineDirect3DCreate) *pWine
WINE_DEFAULT_DEBUG_CHANNEL(ddraw);
/* The configured default surface */
-WINED3DSURFTYPE DefaultSurfaceType = SURFACE_UNKNOWN;
+WINED3DSURFTYPE DefaultSurfaceType = SURFACE_GDI;
/* DDraw list and critical section */
static struct list global_ddraw_list = LIST_INIT(global_ddraw_list);
@@ -766,6 +766,13 @@ static inline DWORD get_config_key(HKEY
return ERROR_FILE_NOT_FOUND;
}
+void print_gdi_surface_warning()
+{
+ FIXME("This is a hacked ddraw defaulting to GDI even when opengl surfaces would be used!\n");
+ FIXME("The normal way to default to GDI surfaces is to set \"HKEY_CURRENT_USER\\Software\\Wine\\Direct3D\" to \"gdi\"\n");
+ FIXME("If that works for you then you shouldn't use this hack.\n");
+}
+
/***********************************************************************
* DllMain (DDRAW.0)
*
@@ -839,14 +846,16 @@ DllMain(HINSTANCE hInstDLL,
}
else if (!strcmp(buffer,"opengl"))
{
- TRACE("Defaulting to opengl surfaces\n");
- DefaultSurfaceType = SURFACE_OPENGL;
+ TRACE("Not defaulting to opengl surfaces, in spite of the registry setting\n");
+ print_gdi_surface_warning();
}
else
{
ERR("Unknown default surface type. Supported are:\n gdi, opengl\n");
+ print_gdi_surface_warning();
}
}
+ print_gdi_surface_warning();
}
/* On Windows one can force the refresh rate that DirectDraw uses by
--- dlls/ddraw/ddraw.c.1.2 2010-07-16 17:05:45.000000000 +0200
+++ dlls/ddraw/ddraw.c 2010-10-27 19:48:54.000000000 +0200
@@ -479,7 +479,8 @@ IDirectDrawImpl_SetCooperativeLevel(IDir
!(This->devicewindow) &&
(hwnd != window) )
{
- HRESULT hr = IWineD3DDevice_AcquireFocusWindow(This->wineD3DDevice, hwnd);
+ HRESULT hr = IWineD3DDevice_AcquireFocusWindow(This->wineD3DDevice, GetDesktopWindow());
+ FIXME("This is a hacked ddraw drawing to the desktop window instead of the window the app requested!\n");
if (FAILED(hr))
{
ERR("Failed to acquire focus window, hr %#x.\n", hr);
5.将wwp_wine.patch文件copy如刚才下载的wine1.2的文件夹
6.进入源代码文件夹并执行以下命令:
patch -p0 < wwp_wine.patch
./configure
make dlls/ddraw dlls/wined3d
strip dlls/ddraw/ddraw.dll.so
strip dlls/wined3d/wined3d.dll.so
7.将当前文件夹下的
dlls/ddraw/ddraw.dll.so拷贝到百战天虫之世界大战的安装目录,并重命名为ddraw.dll
将当前文件夹下的dlls/wined3d/wined3d.dll.so拷贝到百战天虫之世界大战的安装目录,并重命名为wined3d.dll
8. OK,Enjoy the Game!!!O(∩_∩)O~
P.S.
1.如果遇到声音问题的话(一般都会遇到-_-!),尝试用winetricks安装 devenum.dll和quartz.dll
2.千万不要全屏玩,全屏无法选择武器,玩前请用winecfg将分辨率调到800*600或者你认为合适的~~
3.每玩完一局都要退出一次....呃....你玩了就知道了--
4.不能玩的话再试试用winetricks安装msvcp60.dll
5.再不能玩我也不知道了~~(╯﹏╰)b
我加了一点经验和自己的想法