How-To: Configure Future Pinball to play in Linux through Wine

April 2012 Update: Iain’s cracked the play-without-playfield-texture-or-don’t-play-at-all issue; the trick is to use PlayOnLinux, which forces use of Wine 1.2.2 for FP! See details in the comment here!


I used to play Visual Pinball back in the day on Windows, and when combined with PinMAME for the ROM side of things it was awesome! But when I moved to Linux the PC gaming basically stopped. However, the other day I picked up Williams Pinball Classics for the 360 – and it’s absolutely brilliant! So this got me thinking about whether Future Pinball (the newer incarnation of Visual Pinball) can run in Linux – and with some tweaking, it can!

Without the tweaks you’re likely to get two specific problems:

  • You can’t start a game (the table loads, lights flash, you can nudge the table and change the camera angles but the game just won’t start), and
  • There’s no sound.

The good news is that both of these can be fixed with a little bit of tweaking! The bad news is that unless you have a videocard with a lot of VRAM (I’m going to guess 1024MB minimum, as the issue occurs on my 512MB card under Gnome Shell) then tables which you download (but strangely not the Sci-Fi table that comes with FP) are likely to be missing the larger textures such as playfields. This is pretty odd as I can fire up FP in a XP virtual machine with 128MB of video RAM allocated (with far less performance, FPS-wise) and the textures will display without issue – they just don’t like to appear through Wine! So if this is a deal-breaker for you then you might be better off trying Future Pinball under an XP virtual machine, or calling the whole thing off. But if you want to get Future Pinball working in Linux, then we can make it happen…

Note: Wine automatically guesses the availble video RAM on your graphics card, and I’ve got to say, I have no idea if its guess is accurate. I took a look at the Wine useful registry keys and I don’t even have the direct3d key to modify the video RAM settings (because installing DirectX in Wine is considered bad-form, apparently), so I’ve no idea how to tell wine to allocate a reasonable amount of video RAM. Perhaps this will change in the future.

Step 1 – Installing Wine

To play Future Pinball you’re going to need a copy of the Wine (Wine Is Not an Emulator) “emulator”, which you can grab from your distro repositories or from WineHQ directly. So either run the following (or your distro’s equivilent package installing command) or grab it from synaptic package manager or such:

Once it’s installed, if winecfg doesn’t automatically run, launch it yourself with the command (don’t sudo this!):

Then, get it to autodetect your drives by going to the Drives tab and clicking on, you guessed it, [Autodetect], like this:

Wine configuration - detecting drives
Wine configuration - detecting drives. Your setup will obviously look a bit different depending on the drives you have mounted.

Once that’s done, click [OK] to close down Wine Configuration. By default, Wine creates a hidden folder called .wine in your home directory where it places its files, including the folder that acts as your C: drive in the folder ~/.wine/drive_c.

Step 2 – Install Future Pinball through Wine

Now we need to go and grab the Future Pinball installer from here: http://www.futurepinball.com/download.html. At the time of writing the most recent version is: FuturePinballSetup_v1.9.1.20101231.exe. Although this ships with a few demo tables (very, very barebones) you’ll want at least one table to play, so snag a copy of the Sci-Fi Table installer as well from here: http://www.futurepinball.com/downloads/Sci-Fi%20Classic.exe.

Once these are downloaded, navigate to the directory you downloaded them to from the commandline and run:

Accept the licence, click Next/Next/Finish etc. and that’s done. Future Pinball will now be installed in ~/.wine/drive_c/Games/Future Pinball.

Now install the the Sci-Fi table by running:

You’ll want to change the installation directory from the default of C:\Program Files\Future Pinball to C:\Games\Future Pinball during the install wizard for this. Don’t bother creating a Tables folder though, as the table itself contains a top-level Tables folder – so just pointing it at C:\Games\Future Pinball will be fine.

Step 3 – Configuration and Tweaking

By default, Wine will attempt to run things as Windows XP (as opposed to 2000, or ME, or Vista or 7 etc). This is fine, but as things stand we’re still not going to be able to play any pinball just yet because Future Pinball itself wants to run as Administrator when running in Windows… but we don’t have a Windows Administrator account (in fact, this same issue appears when running FP in Windows natively – if you don’t “Run As Administrator” it, you can’t start a game) – and unfortunately no, sudo won’t cut it ;) So next we need to workaround this by adding a dll and telling Wine to prefer it.

To do this, download the file: oleaut32.dll and place it in your ~/.wine/drive_c/Games/Future\ Pinball/ folder, then run winecfg again. This time you should see “Future Pinball.exe” in the applications pane of the Applications tab – so click on it to select it:

Wine - Select Future Pinball Application

Now click on the Libraries tab, then on the New Overide for Library dropdown. Find the listing for the file oleaut32, click on it then click [Add] (you can leave the default settings as “native, builtin”. With that done, you should see something like this:

Wine - Future Pinball DLL Override

With the new DLL taking precedence over the Wine built-in we’ll be able to start a game of pinball, so just hit [OK] to save and close the Wine configuration settings and we’re ready to get our flippers on =D

Step 4 – Launch without PulseAudio

Wine doesn’t natively support PulseAudio, although it’s fine with Alsa. So to play with sound we’ll need to bypass PulseAudio with the pasuspender util. To do this, all we have to do is launch Future Pinball like this:

With that done, just press F4 to bring up the table selection window and you should see something like this:
Future Pinball - Table Select

Now click on [Load and Play Table] and we’re good to go.

Step 5 – Play a Mean Pinball

Future Pinball is like an arcade emulator, so you have to “insert a coin” before you can play. The main keys are:

  • 5/6/7/8 – Insert coin for player 1/2/3/4 respectively
  • 1/2/3/4 – Start 1/2/3/4 player game
  • Enter – Launch ball (i.e. shoot ball w/ plunger to start game)
  • Left/Right shift – Left/Right flippers
  • Space – Nudge table
  • F1-F8 – Different camera views
  • F9 – show stats (fps etc.)

So to start a single player game you might press 5 to insert a coin, 1 to start a 1 player game, then Enter to launch the ball – and you’re off! This isn’t my video, and it’s prolly not running on Linux, but this is the kind of stuff FP is capable of:

6 – Cleaning up

FP doesn’t close down cleanly in Wine, so you have to assist it with a bit o’ the old kill -9 ;)

Update: FP will close down properly on Wine 1.5 onwards, so you won’t need to perform these steps. When I originally wrote this I was using Wine 1.3.something.

To find the process ID (PID) run:

Then to kill the pasuspender/Wine process, enter:

So in the above, I’d run:

This will get rid of all wine processes so that after a few seconds when you run ps -ef | grep wine you only see this:

And on the off-chance that pulseaudio stops working, just run the following and it’ll restart for you:

Many thanks to Christopher Leatherly and everyone who had a hand in Future Pinball for its existence, to Mahen for his posts on the WineHQ Future Pinball entry for the fixes needed to get everything running, and to everyone who’s worked on Wine =D

Cheers!

Final Technical Notes

I did try to install FP through the fpwine FP installer script, but it’s legacy because some of the wine options called are deprecated, so I found a modification of the script on ubuntuforums-fr.org, which with suitable tweaking (DCOM98.EXE would throw a fit on install) would install FP into its own ~/.fpwine “shell” but although that added overrides for the oleaut32.dll, ole32.dll, rsaenh.dll and crypt.dll, I still couldn’t get all the textures working in downloaded tables (which would work fine in an XP virtual machine). If I could specify how much VRAM I had to Wine, I think the issue would be solved.

Also, a workaround to minimise VRAM is to disable loading the textures into the editor (available in FP from Preferences | Editor Options…) – but at least for me, it doesn’t minimise VRAM usage enough. And if you’re trying to minimise VRAM and get textures working you’ll probably want to enable non-power-of-2 textures (Preferences | Video / Rendering Options…), try starting tables off at minimum detail settings (i.e. no High Quality textures), and re-start Wine/FP between table reloads as alledgedly it leaks memory (including VRAM), which is only going to make things worse each table you load.

Finally, the fpwine script likes to install version 5.6 of VBScript (vbs56men.exe), which I found completely knackered the table scripts, so I’ve found its best to avoid installing it and leave Wine alone with its own VBScript functionality.

I’m -sure- this is all doable somehow… I just haven’t managed to crack it yet, and it might be the case that Wine needs further work before it can be cracked at all.

The Sci-Fi table works perfectly, but it still feels like 4th and inches to get everthing working 100%…

21 thoughts on “How-To: Configure Future Pinball to play in Linux through Wine”

  1. Followed this exactly and just cannot get the game to start; can nudge and change views and everything, but insert coin, start, and plunger don’t function.

    I’ve added the DLL, any way to ensure Wine is using it to run the exe? Any other ideas?

    1. With oleaut32.dll I can start games, without it I get exact symptoms you describe – are you sure you put the dll in the same folder as “Future Pinball.exe” and did the Step 3 dll preferences to prefer native over builtin?

      If so, try adding any/all of (might be best to add one at a time – copy each into the same folder as “Future Pinball.exe” and use winecfg to prefer native over built-in for the Future Pinball.exe application as per step 3):

      • crypt32.dll
      • ole32.dll
      • rsaenh.dll
      • urlmon.dll

      You can get these dll’s by downloading and extracting dcom98.exe

      As a last resort, you could try the FPWine script – but I didn’t get much joy from it. I did find out that it tries to register the above DLL’s from it though.

      Hope this helps.

  2. Thanks, this works for quite a few tables, but my all time fav. table Lunch Take Out refuses to load the playfiels texture. Any suggestions?

    1. You could try disabling textures in the editor to try to save enough video memory to display the playfield… It’s under: Preferences | Editor Options | Load image into Table Editor

  3. I tried that… No joy.

    The odd thing is, if I install FP in Wine without your tweaks, the playfield loads fine, it just doesn’t allow for inserting coins etc as described at the start of your post, so I obviously have enough video memory, but using oleaut32.dll scrubs the playfield. Odd.

    1. Well that’s interesting to know… There has to be a way to get FP working properly with playfields… maybe different versions of oleaut32.dll might help, or if it’s really a VRAM issue starting the table in debug mode might give some error messages which confirm it? It’s got to be do-able…

  4. SOLVED :-D

    After switching dll versions until I ran out of options I hunted the web and found a reference on a forum to PlayOnLinux. I installed it directly from the Ubuntu Software Centre and found that Future Pinball is listed as a supported game.

    I selected Future Pinbal and installed. At the step where PlayOnLinux gives the choice of downloading automatically or use a local file, I selected use local file and selected “FuturePinballSetup_v1.9.1.20101231.exe” which I already had downloaded.

    After installing it I fired up FP and it works perfectly. It seems that the trick is that PlayOnLinux uses WINE 1.2.2.

    1. Awesome job – you’ve nailed it!

      I was twiddling DLLs and table scripts a little here and there to try and get it working, but fair play to you, fella – proper solved – excellent work! Wine 1.2.2 FTW!

      I’ve stuck a note at the top of the article pointing at your fix =D

  5. Glad to have FP back on my PC where it belongs without the hassle of dual booting to Windows!

    I can play Lunch take out to my hearts content now :-D

  6. Hi !

    I’ve been trying to get FP to run for… months ? years ? It used to work but now, I still have the “keys not working” issue. I tried using the DLL you specified (also a guy on winehq says he managed to get it to work by using 2 native DLLs : oleaut32 and vbscript).

    But still no luck as far as I’m concerned. With just oleaut32, my keys do not work ; with vbscript, the game crashes at the end of the table loading.

    Also some people mentioned using PlayOnLinux, but FP is not listed anymore as a supported game so I didn’t manage to use it.

    Did any of you guys manage to run it, recently ?
    (also, I have trouble with the NullDC emulator as well, which used to work)

    Cheers & thanks a lot !!!!

    1. The only way I know how to use FP on Linux is to use PlayOnLinux to force it to use a Wine 1.2.2 sandbox as per Iain’s comment above.

      I just checked PlayOnLinux and you’re right – it no longer supports FP – but you should still be able to set up a Wine 1.2.2 sandbox to play it, you’ll just have to do it manually.

      Unfortunately this is likely to be a complete pig to do. My understanding is that the “sandbox” is really just a “prefix folder”, as discussed here: http://wiki.winehq.org/FAQ#wineprefix – but to have a separate prefix running an older version of Wine alongside any current version you’d need to build Wine yourself (which has always been a bit of a pain in my experience). Source: WineHQ: Can I install more than one Wine version on my system?.

      If you can get away from FP, there’s a few good other pinball sims out there, like Williams Pinball Arcade (on consoles), you can use Zen Pinball on consoles and Android/iOS, and with any luck Pinball FX2 on Steam might make it to Linux some day. Not a great situation for ‘nix pinball atm =/

      Not tried NullDC in a long while, sorry!

      1. Wow ! Thanks ever so much for the long & quick reply :-)

        Actually, there is still hope ! Indeed : I don’t know how to manually install several different wine versions, but PlayOnLinux does : you can install any chosen Wine version within POL, they remain isolated from the rest of the system.

        Also, you can install any unsupported app in any Wine prefix : when trying to install an app, just click the bottom left button to add an unsupported app.

        So, I did create a wine 1.2.2 sandbox in POL. But, that didn’t do the trick, as PlayOnLinux scripts usually do more than that : for instance, install additional DLLs. As the Future Pinball script is not available anymore, I don’t know what else it used to do to get it to work.

        (you can also browse any sandbox, and there is a single “winecfg” config per sandbox. Pretty neat !)

        I’m sure we’re pretty close to the solution !

        Oh thanks for the names of other Pinball sims ! That’s pretty weird there are so few of the for PCs / Linux. As my Linux box is in an arcade cabinet, it’s definitely something I’d like to achieve !

        Thanks again, best regards !

        1. Oh, if you still have POL and FP installed, can you checked what dlls are “overloaded” (not sure about the right term) in winecfg for this specific bottle / sandbox ? (POL GUI -> Future Pinball -> Configure -> Wine)

          Thanks a lot !

          1. I had to dig it up on an old laptop with a working POL / FP but here’s what I got:

            – There’s no specific “Future Pinball.exe” entry, so I guess it comes under “Default Settings”
            – *ole32 (native, builtin),
            – *oleaut32 (native, builtin),
            – *rpcrt4 (native, builtin)

            And all using Wine 1.2.2.

            If you can’t get it working with settings I could provide a zip of my bottle / sandbox / whatever – but you’d prolly still need to hack around with it to get sorted.

            1. Hmm, still no luck with those settings… I would be really grateful if you could upload me your “wineprefix” somewhere, at least it will enable me to overwrite all DLLs and see what happens. I’m pretty confident it’ll work ! Then it will need quite some extra work to pinpoint what is really wrong :-)

              Thanks a lot for your help, again.

              BTW : I saw a video on youtube of a guy running Pinball FX2 under Wine on Linux Wheezy… It seemed pretty flawless !

                1. Well, it does ! :-)

                  2 good news at last !

                  – FP works by just dumbly replacing the content of my bottle by yours !
                  Of course, I now have to investigate and figure out how to get it to work from a blank install. Thanks a lot !

                  – I tried Pinball FX2 : it works perfectly in WINE through Steam. (just install Steam ; do not try to do like Crossover does, that is to say, do not install DX and other native DLLs). It works like a charm on my 5 years old machine.

                  Thanks !

  7. Kudos to r3dux and Bidinou for tag teaming their way to a creative solution.

    Thanks to your tireless resolve, guys, I believe I’ve uncovered an elegant alternative to the PlayOnLinux-based fix. In fact, I had to. PlayOnLinux refused to play nicely with my system, encouraging me to bring out the big guns: the command line. (Oh, yeah.)

    The following solution appears to work under any version of Wine, including the newly released Wine 1.6. Here we go, folks:

    Step 1. Consider upgrading to Wine 1.6. It’s probably not necessary, but it certainly can’t hurt.
    Step 2. Download http://r3dux.org/files/FuturePinball-PlayOnLinux.7z
    Step 3. Download http://r3dux.org/files/DLLs/oleaut32.dll
    Step 4. Download http://www.futurepinball.com/downloads/Sci-Fi%20Classic.exe
    Step 5. Open your favorite terminal application. (You should be in your home directory at the dreaded command line, now.)
    Step 6. Extract “FuturePinball-PlayOnLinux.7z” into your home directory:
    $ 7za x FuturePinball-PlayOnLinux.7z
    Step 7. The newly extracted “~/FuturePinball” directory will be your Future Pinball-specific WINEPREFIX. You may now remove “FuturePinball-PlayOnLinux.7z”, if you like:
    $ rm FuturePinball-PlayOnLinux.7z
    Step 8. Update your new WINEPREFIX. You’ll probably receive a fairly serious error, which we’ll blithely ignore. Just hit “OK” after the configuration dialogue pops up:
    $ WINEPREFIX=~/FuturePinball winecfg
    Step 9. Install the downloaded “oleaut32.dll” into your new WINEPREFIX:
    $ cp oleaut32.dll ~/FuturePinball/drive_c/Games/FuturePinball/
    Step 10. Install the downloaded “Sci-Fi%20Classic.exe” into your new WINEPREFIX. When prompted for an installation directory, choose “C:/Games/FuturePinball”:
    $ WINEPREFIX=~/FuturePinball wine “Sci-Fi%20Classic.exe”
    Step 11. Run “Future Pinball.exe”. This is the command you’ll need to use whenever you want to run Future Pinball in the… err, future.
    $ WINEPREFIX=~/FuturePinball wine ~/FuturePinball/drive_c/Games/FuturePinball/Future\ Pinball.exe
    Step 12. Load the “Sci-Fi Classic” table. Assuming “Future Pinball.exe” itself runs as advertised, select “File->Open” and choose “C:/Games/FuturePinball/Tables/Sci-Fi Classic.fpt”.
    Step 13. Hit “F5” to load the table.
    Step 14. Hit “5” followed by “1” followed by “Enter”. You should hear audio; moreover, “Left Shift” and “Right Shift” should control the two lower flippers.
    Step 15. Hit “Esc” when you’re done. Pretty sweet, eh?
    Step 16. If you want to avoid typing Step 11. in every time you want to run Future Pinball, just create a new shell script as follows:
    $ echo “#!/usr/bin/env sh\nWINEPREFIX=~/FuturePinball wine ~/FuturePinball/drive_c/Games/FuturePinball/Future\ Pinball.exe” > FuturePinball.sh
    $ chmod +x FuturePinball.sh
    Step 17. Now, to run Future Pinball just double click on “FuturePinball.sh” in your favorite file explorer or open the terminal again and type:
    $ ./FuturePinball.sh

    That’s it, folks. No PlayOnLinux. No additional DLLs. Just straight Wine 1.6 with the WINEPREFIX and DLL bundled by r3dux. (You’re thoroughly awesome, by the way.)

    Enjoy, all!

    1. Thanks, leycec – next time I’ve got some time to play with wine I’ll give it a go.

      Ideally we need to identify what it is about the ‘wine bottle’ (step 2) that makes it work and/or why it won’t work with just the oleaut32.dll file – and then remove the ‘wine bottle’ step entirely.

      The Sci-Fi classic table isn’t a good table to test with BTW, as it has a low number of textures and the missing texture issue could come back without you knowing. Try something from here if you want to see if it’s really running properly: http://www.blindmankind.tecnopinball.org/

      Cheers!

  8. Thanks @r3dux and everyone else for providing all the details to get this one working. I was able to get it working great on one Elementary OS (an Ubuntu derivative) so far.

    I’ve thrown together a bash script, hoping to automate this entire process. Available here:
    https://gist.github.com/Ugotsta/fa9551aa799218a2f508

    I’m missing some things still so it’s got some issues but it’s a work in progress. Feel free to let me know any changes that need to be made to it.

    Cheers!

Leave a Reply

Your email address will not be published.