Friday, June 8, 2012

Getting Continuum .40 to work under Fedora 16 without messing with your global wine installation

I have played subspace (now called continuum) on and off for decades. Its a fun little game and I've always been addicted to Trench Wars :)

If you goto the www.getcontinuum.com, you'll see that they specifically have a Linux solution available. It is clunky and to be honest, quite limiting. I've managed to get Continuum to work without issue AND without messing with my global wine installation :)

Here's how I managed to do it.

get the .40 install here. and install it using your default global wine installation. (apt-get install wine   or yum install wine  or w/e your linux method is). It should install without issue.

Using git, Now clone the wine source tree somewhere. To do this, do a  git clone http://source.winehq.org/git/wine.git

Then checkout the latest stable branch (at the time of this post, was 1.4.0) by doing this,  git checkout wine-1.4

At this point you need to do either one of two things, either manually add the next specific piece by hand (its really simple and only 1 line to add) or apply a patch. I did it by hand because its literally one line and the patch 'given' at winehq doesn't work out of the box (its setup with the incorrect paths) for any version except the one it was made off of. The patch i'm referring to is located here.

The specific text to be added is

if (access & PROCESS_VM_WRITE) return NULL; 


In the dlls/kernel32/process.c file in the OpenProcess function. You can also just apply this following patch (modified from the above original source so that it will work with anything so long as it is applied while in the root wine source directory)

--- dlls/kernel32/process.c
+++ dlls/kernel32/process.c
@@ -2881,6 +2881,9 @@ HANDLE WINAPI OpenProcess( DWORD access, BOOL inherit, DWORD id )
     OBJECT_ATTRIBUTES   attr;
     CLIENT_ID           cid;
 
+    /*This fixes continuum, but seems to break nothing */
+    if (access & PROCESS_VM_WRITE) return NULL; 
+
     cid.UniqueProcess = ULongToHandle(id);
     cid.UniqueThread = 0; /* FIXME ? */ 

Now that the specific 'bug' is patched, we need to ./configure, make depends, make, make install. But I did one thing so that it wouldn't mess up my global install AS well as not need sudo functionality... I set a `--prefix=/path/to/ending/location` option with my ./configure. This will setup the makefiles to now 'overwrite' (if you had the permissions to) the global standard location for wine and build it in a location that you choose.

After your make install is finished, you will see a whole bunch of things in that /path/to/ending/location including a `bin` folder. To run Continuum, you need to start the 'wineserver' in that bin directory (kill any other ones). I started it with the `-p` option and haven't had any issues. Then using the `wine` in that directory, run Continuum.exe (like so)

./path/to/ending/location/bin/wine ~/.wine/drive_c/Program\ Files/Continuum/Continuum.exe

Works like a charm and I still have my global wine installation setup and running smooth with my other 'wine' installs. Now its at the latest version of wine (should probably fix up the winehq page to say it still works with the current version and should work with newer versions as well...)

If people have specific questions, let me know and I'll try help :) Not that this will ever be read by anyone :P

No comments: