User Tools

Site Tools


planetforeveronlinuxusingwinemanual

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Last revision Both sides next revision
planetforeveronlinuxusingwinemanual [2012/11/04 18:23]
rockfire created
planetforeveronlinuxusingwinemanual [2012/12/01 16:09]
rockfire [Setting Up Wine]
Line 1: Line 1:
 ====== Planet Forever On Linux Using Wine - Manual Patch Method ====== ====== Planet Forever On Linux Using Wine - Manual Patch Method ======
  
-The patches required are same as always needed, but this time I have combined them into a single ​patch. ​Underneath, it's still the same my "​inet-address"​ patch that fixes the logon, and the "​d3d9-hack"​ patch provided by PsyQ which (mostly) fixes crashes when resizing the window from its default 800x600The latter patch was described by the author as, "The single most evil thing done to wine, ever!"For this reason, it's best not to use Wine patched for Earth Eternal with any other applications or games.+This patch has recently been improvedAfter spending months living with 3 or 4 warps in one session causing ​the client to crash due to a memory leakI decided to sit down and try and find an alternativeI am pleased ​to say I haveA nice side effect is that the window resizing issue appears ​to have completely gone away :) However, you will still have the same eventual memory issue that Windows users have.
  
-I used Ubuntu 12.04 for this, you may have to adjust some commands for other distributions,​ particularly installing packages.+I used Ubuntu 12.10 for this, you may have to adjust some commands for other distributions,​ particularly installing packages.
  
-If there is sufficient demand, I can resurrect the old script that used to do most of this for you. 
  
 **A note about Ubuntu 64 bit installations. If you are using 64bit Ubuntu 12.04, maybe 11.10 as well (which has a thing called "​multi-arch"​),​ getting Wine to compile as 32 bit is a total nightmare. The easiest option is to install a 32 bit Ubuntu 12.04 virtual machine, compile wine on that, and copy the result back your 64 bit host in the same location. Alternatively,​ on request I can provide a pre-compiled patched wine for most distributions (not always quickly though).** **A note about Ubuntu 64 bit installations. If you are using 64bit Ubuntu 12.04, maybe 11.10 as well (which has a thing called "​multi-arch"​),​ getting Wine to compile as 32 bit is a total nightmare. The easiest option is to install a 32 bit Ubuntu 12.04 virtual machine, compile wine on that, and copy the result back your 64 bit host in the same location. Alternatively,​ on request I can provide a pre-compiled patched wine for most distributions (not always quickly though).**
Line 12: Line 11:
  
   - Install Wine build dependencies. On Ubuntu, this is easy :​-<​code>​sudo apt-get build-dep wine1.5</​code>​   - Install Wine build dependencies. On Ubuntu, this is easy :​-<​code>​sudo apt-get build-dep wine1.5</​code>​
-  - Download the latest wine from http://​sourceforge.net/​projects/​wine/​files/​Source/​. At the time of writing this is 1.5.10, although the patch should work on most versions since 1.1.39, sometimes with tiny bits of tweaking. Grab the file named wine-1.5.10.tar.bz2 +  - Download the latest wine from http://​sourceforge.net/​projects/​wine/​files/​Source/​. At the time of writing this is 1.5.17, although the patch should work on most versions since 1.1.39, sometimes with tiny bits of tweaking. Grab the file named wine-1.5.17.tar.bz2 
-  - Copy and paste the following into a file on your desktop called ee.patch.<​code>​gedit ~/​Desktop/​ee.patch</​code>​And now the content of this file ..<​code>​diff -ru wine-1.5.10.orig/dlls/d3d9/tests/buffer.c wine-1.5.10/dlls/d3d9/tests/​buffer.c +  - Copy and paste the following into a file on your desktop called ee.patch.<​code>​gedit ~/​Desktop/​ee.patch</​code>​And now the content of this file ..<​code>​diff -crB wine-1.5.17.orig/dlls/wined3d/device.c wine-1.5.17/dlls/wined3d/device.c 
---- wine-1.5.10.orig/dlls/d3d9/tests/​buffer.c 2012-07-31 20:08:12.000000000 +0100 +*** wine-1.5.17.orig/dlls/wined3d/device.c 2012-10-26 19:12:40.000000000 +0100 
-+++ wine-1.5.10/dlls/d3d9/tests/​buffer.c 2012-08-08 18:29:29.410660651 ​+0100 +--- wine-1.5.17/dlls/wined3d/device.c 2012-11-04 14:17:29.457321843 ​+0000 
-@@ -120,10 +120,9 @@ +*************** 
- { +*** 4990,4997 **** 
-     switch(pool+      ​LIST_FOR_EACH_ENTRY_SAFE(resource, cursor, &​device->​resources,​ struct wined3d_resource,​ resource_list_entry
-     ​+      
--        case D3DPOOL_DEFAULT:​ return ​"D3DPOOL_DEFAULT"; +          ​TRACE("Enumerating resource %p.\n", resource)
-         case D3DPOOL_SYSTEMMEM:​ return "​D3DPOOL_SYSTEMMEM";​ +        ​if (FAILED(hr = callback(resource))) 
-         case D3DPOOL_SCRATCH: ​return ​"​D3DPOOL_SCRATCH"​+!             return ​hr; 
-       case D3DPOOL_MANAGED:​ return "​D3DPOOL_MANAGED";​ +      } 
-+        case D3DPOOL_MANAGED || D3DPOOL_DEFAULT: return ​"D3DPOOL_MANAGED"; +   
-         default: +      /* Is it necessary to recreate the gl context? Actually every setting can be changed 
-         return ​"unknown pool"; +--- 4990,4999 ---- 
-     ​+      ​LIST_FOR_EACH_ENTRY_SAFE(resource, cursor, &​device->​resources,​ struct wined3d_resource,​ resource_list_entry) 
-diff -ru wine-1.5.10.orig/​dlls/​ws2_32/​socket.c wine-1.5.10/​dlls/​ws2_32/​socket.c +      { 
---- wine-1.5.10.orig/​dlls/​ws2_32/​socket.c 2012-07-31 20:08:​12.000000000 +0100 +          TRACE("Enumerating resource %p.\n", resource)
-+++ wine-1.5.10/​dlls/​ws2_32/​socket.c 2012-08-08 18:29:29.410660651 ​+0100 +        ​if (FAILED(hr = callback(resource))) { 
-@@ -2976,11 +2976,22 @@ +!     ERR("Failed resource %p.\n", resource)
-  */ +!             //​return hr; 
- ​WS_u_long WINAPI WS_inet_addr(const char *cp) +! } 
- { +      } 
--    ​if (!cp) return INADDR_NONE;​ +   
--    ​return inet_addr(cp);​ +      /* Is it necessary to recreate the gl context? Actually every setting can be changed 
-+    ​unsigned long ulAddr = INADDR_NONE;​ +diff -crB wine-1.5.16.orig/​dlls/​ws2_32/​socket.c wine-1.5.16/​dlls/​ws2_32/​socket.c 
-+    ​if (cp) { +*** wine-1.5.16.orig/​dlls/​ws2_32/​socket.c 2012-10-26 19:12:40.000000000 +0100 
-+        ​ulAddr = inet_addr(cp);​ +--- wine-1.5.16/​dlls/​ws2_32/​socket.c 2012-11-04 14:17:13.613520668 ​+0000 
-+    ​+*************** 
-+    ​/* Try and resolve by name (although the docs say the argument should +*** 3079,3089 **** 
-+be an IP address) */ +   ​*/ 
-+    ​if(cp && ulAddr == INADDR_NONE) { +  WS_u_long WINAPI WS_inet_addr(const char *cp) 
-+        ​struct hostent *remoteHost;​ +  
-+        ​remoteHost = gethostbyname(cp);​ +!     if (!cp) return INADDR_NONE;​ 
-+        ​if (remoteHost != NULL) { +!     return inet_addr(cp);​ 
-+            ​return *(u_long *) remoteHost->​h_addr_list[0];​ +  } 
-+        ​+   
-+    ​+-  
-+    ​return ulAddr; +  /​*********************************************************************** 
- } +   ​* ntohl (WS2_32.14) 
-  +   */ 
-+--- 3079,3100 ---- 
- /​*********************************************************************** +   */ 
-  * ntohl (WS2_32.14) +  WS_u_long WINAPI WS_inet_addr(const char *cp) 
-  */ +  { 
-diff -ru wine-1.5.10.orig/include/​d3d9types.h wine-1.5.10/include/​d3d9types.+!     unsigned long ulAddr = INADDR_NONE;​ 
---- wine-1.5.10.orig/​include/​d3d9types.h 2012-07-31 20:​08:​12.000000000 +0100 +!     if (cp) { 
-+++ wine-1.5.10/​include/​d3d9types.h 2012-08-08 18:​29:​29.414660470 +0100 +!         ulAddr = inet_addr(cp);​ 
-@@ -890,7 +890,7 @@ +!     
- } D3DPATCHEDGESTYLE;​ +!     /* Try and resolve by name (although the docs say the argument should 
-  +be an IP address) */ 
- ​typedef enum _D3DPOOL { +!     if(cp && ulAddr == INADDR_NONE) { 
--    D3DPOOL_DEFAULT ​                = 0, +!         struct hostent *remoteHost;​ 
-+    D3DPOOL_DEFAULT ​                = 1, +!         remoteHost = gethostbyname(cp);​ 
-     ​D3DPOOL_MANAGED ​                = 1, +!         if (remoteHost != NULL) { 
-     ​D3DPOOL_SYSTEMMEM ​              = 2, +!             return *(u_long *) remoteHost->​h_addr_list[0];​ 
-     ​D3DPOOL_SCRATCH ​                = 3,+!         
 +!     
 +!     return ulAddr; 
 +  
 +   
 +  /​*********************************************************************** 
 +   ​* ntohl (WS2_32.14) 
 +   ​*/ 
 +Only in wine-1.5.16/dlls/ws2_32: socket.c.orig
 </​code>​ </​code>​
   - Open a terminal to extract the wine source and patch it (change paths as appropriate)<​code>​cd ~/Desktop   - Open a terminal to extract the wine source and patch it (change paths as appropriate)<​code>​cd ~/Desktop
-tar xjf ~/​Downloads/​wine-1.5.10.tar.bz2 +tar xjf ~/​Downloads/​wine-1.5.16.tar.bz2 
-cd wine-1.5.10+cd wine-1.5.16
 patch -p1 < ~/​Desktop/​ee.patch</​code>​ patch -p1 < ~/​Desktop/​ee.patch</​code>​
   - Now build Wine. Note the use of "​prefix"​. You are installing a completely separate version of Wine. You can change this location, but be sure to adjust the locations in the script described later on in these instructions.<​code>​./​configure --prefix=/​opt/​games/​wine-ee   - Now build Wine. Note the use of "​prefix"​. You are installing a completely separate version of Wine. You can change this location, but be sure to adjust the locations in the script described later on in these instructions.<​code>​./​configure --prefix=/​opt/​games/​wine-ee
Line 114: Line 121:
 === Known problems === === Known problems ===
  
-  ​- Window resizing. Without the patch, it will crash immediately. With the patch, it only crashes sometimes. Try to resize the window before logging in. Also, some window managers are worse than others.  +  - You will eventually be affected by a memory leak. Don't worry, it's not personal, Windows users get it too.
-  ​- You will eventually be affected by a memory leak. Don't worry, it's not personal, ​I believe ​Windows users get it too.+
   - Changing some video options may crash. Not seen this for a while, but it used to happen a lot.   - Changing some video options may crash. Not seen this for a while, but it used to happen a lot.
planetforeveronlinuxusingwinemanual.txt · Last modified: 2013/01/22 12:10 by rockfire