This part of the virtual pinball guide will cover the software. A visual pinball table requires a lot of software to work together to give a seamless feel when selecting and switching tables. the front end I’ll be using will be PinballX, which will basically show a list of all available pinball tables across all different games that are installed on your machine. Every platform installation is covered including the configuration of your cabinet special effects, buttons and graphics setup. This will be a large tutorial but I tried to cover all the steps as short as possible so you can just follow along on your own cabinet.
DIY Virtual Pinball
Introduction & Design
Building the cabinet
Installing computer, controls, special effects
Adding games & tables
Setup PinballX & Controllers
This is the basic working principle, we use PinballX as our “menu”, pinballX will run on startup and will show all tables available across all the games that are installed. By launching a table, pinballX will use the corresponding configuration to launch any game directly into the table you selected. since these games are all from different developers and requires different parameters to start correctly. every game needs its own little setup tutorial.
I Recommend downloading these files upfront, most of the sites require registration.
- PinballX (Registration Required)
- Visual Pinball X/10 (Registration Required)(10.5 Beta latest)
- Visual Pinball Fonts (Required)
- DOFLinx (6.23 at time of writing) (for controlling all your LEDs, flashers…)
- DOF b3 (DirectOutputFramework Docs )
- Future Pinball (Pinball Engine)
- BAM (Better Arcade Mode – Better camera, settings for Future Pinball)
- SAM (SAM Build – allows to play vp10 tables or something like that)
- X360ce (32bit) – Convert controller to Xbox controller input
I will be to using windows 10 for my build, I recommend keeping the software on this computer as minimal as possible.
Disable windows UAC
- Windows 10: Control Panel -> User Accounts -> Settings for UAC -> drag the slider down and apply
I recommend updating to the latest version, then install all your software and turn off windows update completely. You don’t want windows to update to randomly ruin your setup with no clue to start looking. I also advise staying away from updates as long as you are not having troubles with your current version. A few solutions to disable windows 10 updates are described on This website.
⚠️ Remember the “October 2018” update which randomly deleted important files for no reason. it eventually took Microsoft over 5 months for this update to be re-released. gotta love Microsoft! but since the software only works on windows, no use for Mac or Linux here 🙁
I recommend using a black wallpaper without any icons on your desktop and autohiding the start menu. This will make the machine look more professional during startup.
I don’t recommend using an antivirus, I used AVG in my first setup which managed to destroy my complete setup due to removing false positive files. the preinstalled windows defender seems to have less of a problem with these programs but I still disabled the “real-time scanning/protection” option. the last thing you want is it to delete necessary files corrupting your setup
To start, this is my folder structure when I installed everything. I did install some parts on a second HDD since my SSD was only 120gb. I will still show the folder structure as 1 drive to keep it as simple as possible. feel free to change this structure but the guides will have everything linked for this structure. I will only add the files we will have to edit manually or replace during the guide so keep in mind your folders will contain more files than I show here.
- 📂Program Files/Steam/../../../FX2/FX3/TPa
- 📂 Pinball
- *All media are shown in the UI*
- Future Pinball
- Visual Pinball
- 📂Tools – Extract my package here?
- 📂Backup – I recommend keeping a backup folder to store (Installers, backups, configurations, media, tables….)
This is the tree of all the important files and folders you will have after you installed everything using this guide
First, we will install the front-end, which is pinballX. We will skip the configuration of our games for now and only configure the front-end. The latest pinballX installer can be downloaded from Gameex. Once downloaded extract and run the PinballX installer, go through all steps:
When done, uncheck setup for now, since our other files are not yet in place.
When installed, right-click the pinballX executable en make sure to run it as administrator every time. we will do this with most of our apps further on.
Then DoubleClick the settingns.exe, choose advanced settings. This is my setup (my INI file can be downloaded HERE)
Save and exit the settings app, now run the pinballX.exe and your front-end should appear on your main monitor. the backbox monitor should just be black for now as pinballX has no tables/content yet to display. For now, PinballX is done
DOF – DirectOutputFramework
DOF requires no installation, just download and extract the files to C:/DirectOutput. The official instructions can be found here. I would still use my guide but you can always double-check the official instructions if something is not completely clear.
When extracted you should end up with the following files
Unblock DLL Files, since windows 7. Windows has the ability to block DLL files you downloaded from the internet. There is no real way to see if a DLL is blocked or not other than checking the properties of each individual DLL file in the Directoutput folder. Then follow the following instructions
- Right-click the DLL file and select Properties in the context menu.
- Select the General tab in the properties window.
- If you find the text _”This file came from another computer and might be blocked to help protect this computer” or something similar on this tab, click the Unblock button. This should fix the issue.
When you are sure you unblocked all blocked files, run the “RegisterDirectOutputComObject.exe”, this will register some runtime DLL’s in your registry so they can be used by other applications
DOFLinx makes DOF work in Future Pinball and Pinball FX2/FX3 and can be downloaded from VPForums (Link). Extract and copy all files in the same folder as DOF ( C:/DirectOutput)
again make sure all the files are unblocked or it will not work.
Ddoflinx is installed. the configuration will be covered later
To install x360ce, download the 32bit executable from the official website (Link). Extract and run the file in your C:/DirectOutput folder. Before starting also make sure you have all the required software installed:
- .NET 3.5 (includes 2.0 and 3.0) – included in Windows 7. In Windows 8 and 10: Control Panel > Programs and Features > Turn Windows features on or off > enable “.NET Framework 3.5 (includes 2.0 and 3.0)”.
- .NET 4.6 (includes 4.0) – included in Windows 8 and 10.
- DirectX End-User Runtime (June 2010) – Required regardless of OS; .NET MUST be installed prior to the DirectX update.
- Visual C++ Redistributable for Visual Studio 2013 – For x64 systems install both x86 and x64 redistributables.
Then on the first start of x360ce, you will get an error “not found” xinput1_3.dll file. Click create to install the file in the same directory.
On the next screen, x360ce will try to download the best mapping for your device but, since we wired them ourselves, the mapping will differ for each build so click Cancel to skip this.
The mapping will be done later but if the program opens up, you are done for now.
The configuration of DOF and DOFLinx is rather complicated and will be different for every build. Take your time and do some extra research on the official websites and forums to make sure you get your setup working correctly.
To configure all your “toys” in DOF, open the DOF Config Tool website (Link), create a new account and login. Then open the account page and configure all to match your pinball cabinet:
Click save to save your settings, then open the port assignment’s tab, in here you will find your devices configured earlier. For each device, select the corresponding button in the list, if the button is not in the list, leave it empty. Eventually, your LEDwiz and Saintsmart should be configured something like this:
Click “save config” and generate config to download your configuration. this may take some time as the files will be generated on the server but be patient and your download should start. The downloaded zip archive contains the following files (leave for now)
now create a C:/DirectOutput/Config folder and create a new file called “GlobalConfig_PinballX.xml”. Paste the following content in the file save and exit the editor.
<?xml version="1.0" encoding="utf-8"?> <GlobalConfig> <LedWizDefaultMinCommandIntervalMs>1</LedWizDefaultMinCommandIntervalMs> <LedControlMinimumEffectDurationMs>60</LedControlMinimumEffectDurationMs> <LedControlMinimumRGBEffectDurationMs>120</LedControlMinimumRGBEffectDurationMs> <IniFilesPath>C:\DirectOutput\DOF3_INI</IniFilesPath> <CabinetConfigFilePattern></CabinetConfigFilePattern> <TableConfigFilePatterns /> <EnableLogging>false</EnableLogging> <ClearLogOnSessionStart>false</ClearLogOnSessionStart> <LogFilePattern>.\DirectOutput.log</LogFilePattern> </GlobalConfig>
Then create a new folder in the C/DirectOutput folder called “DOF3_INI”. Open the folder and copy the content of the zip we downloaded from the DOF config tool in here. Also copy the Directoutputshapes.png and directoutputshapes.png in the root of your direct output installation (C:/DirectouOutput)
Now we need a cabinet config for our cabinet, this is an XML file with all controls available for use. I recommend reading the official information/setup guide (Link). My cabinetconfig.xml is posted below, this is not perfect but it got the job done. I recommend to start with an empty file and doing some research yourself on getting the corect configuration for your cabinet
This part is very hard to explain in text so I recommend watching “MAME IN A BOXES” VIDEO
The latest versions of DOFLinx includes a few sample config files, you can use and modify one of those or use mine as a starting point, I recommend at least checking out some of these sample files to understand what every line somewhat does. The config file should be called DOFLinx.ini in C:/DirectOutput my file looks like this
DOFlinx link parameters
- 117 – device 1, port 17
- 50 – default on time in milliseconds, if a link was to not specify an on time, or set a shorter on time that this, then this value is used. That value is really dependant on your toy, if you turn some thing on / off to quickly, then the solenoid / contactor cannot “thump”
- 10000 – maximum on time in milliseconds
- 255 – the intensity of the output when triggered between 0 and 255. For a SainSmart board only one value makes any sense and that is 255 – fully on. A device partially on is relevant to Pinscape, LEDWiz, Ultimate IO, PACLed64
#### # The config file for DOFLinx # A mad idea by DDH69 to have some flipper sounds, RGB display and turn buttons on when playing Pinball FX2 via Steam # Its grown a lot since that silly start! # Note - this works with LEDWiz, PacLed64, Pinscape, Ultimate I/O and Sainsmart (FTDI devices) # Edit this file as you see fit, lines that start with a hash (#) or are blank are not processed. This blurb and comments can be cut out if you want. # # Output devices outputs are entered in the format of # device (D) and output number (#) in the format D##, so controller device 1 and output 3 is "103" without the quotes, controller board 2 output 23 is "223" without quotes #### # location of your standard DOF outut configuration file. Keep this as the first item in the file DIRECTOUTPUTCONFIG=c:\DirectOutput\DOF3_INI\directoutputconfig.ini # If you want to list the processes that will wake up DOFLinx, comment it out if you just want Pinball FX2 PROCESSES=PinballX,Pinball FX2,Pinball FX3,Future Pinball # If you are using flag files, comment the line below out or set to 2000 as the default. # If you need to use the Pinball FX2 grid to select games you will want this at around 30000 - I recommend not using the FX2 grid PROCESS_TO_ACTIVE_TIME=2000 # Which DOF Controller output for the flipper solenoids / contactors L_FLIPPER_OUTPUT=305 R_FLIPPER_OUTPUT=306 # The keyboard hex code for the key that is used for each flipper from https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx # Left Shift = A0, Right Shift = A1 L_FLIPPER_KEY=53 R_FLIPPER_KEY=A1 # Just in case things go wrong (ie no keyup signal is detected, flipper held down for a long time), what is the maximum time a flipper solenoid / contactor can be in in milliseconds MAX_FLIPPER_ON=5000 # What LEDWiz output(s) are used for RGB devices. Just enter the Red output number. Multiples can be entered seperated by a comma RGB_OUTPUT=117,120,123,126,201,204,207,210,213 # Rainbow - cycle through the colours, Random - pick a random next colour, A colour name as it appears in the DirectOutputConfig.ini file RGB_STYLE=RAINBOW # What changes the colour? Time - set time period, Flipper = flipper press after the RGB_TRIGGER minimum time (to stop rapid colour changes) RGB_TRIGGER=TIME # Dependent on trigger selection the period between changes or the minimum time for change between flipper flips RGB_MIN_TIME=10000 # The button(s) to turn on when DOFLinx starts, ie the exit button LED BUTTONS_ON=101 102 104 105 106 107 108 109 110 111 112 131 132 217 218 # Make the "1" (31) key (Start in VP) pulse LEDWiz 120 and "4" (34) to pulse controller/output 121 #KEY_TO_OUTPUT=32 101 35 106 36 105 # Set a key to turn on a specific colour for your RGB. The line below makes the Left Control (A2) and the Right Control (A3) turn my undercab RGB strip red. # In Pinball FX2 this means when I nudge it all goes red. #KEY_TO_COLOUR=A2 109 Red A3 109 Red # Setting FORCE_ACTIVE=1 will cause DOFFX2 to not listen for processes and just run until you kill the process. Handy for using it for things other than PinBall FX2 FORCE_ACTIVE=1 # If you want the program to stop when your named process stops then set this to 1. If you want it to run in the background all the time leave it as 0 QUIT_AFTER_PROCESS=0 # Set to 1 to output the game name to the log regardless of the DEBUG flag setting. Set to 0 to simply follow the DEBUG flag. # Quite useful when you trying to get the FX2 window game name for setting game specific colours OUTPUT_GAME_NAME=1 PATH_FX2=C:\DirectOutput\DOFLinx_FX2\ PATH_FX3=C:\DirectOutput\DOFLinx_FX3\ #### # Sample setup to enable the Future Pinball Link. Edit the LINK_ items to be your ports and settings. #### FP_ATTEMPT_LINK=1 # Use the line below if you need to extend the wait time for a FP table to load #LF = Left flipper #RF = Right flipper #LS = Left slingshot #RS= Right slingshot #ML = Mid field left solenoid #MC = Mid field centre solenoid #MR = Mid field right solenoid #BL = Back left solenoid #BC = Back centre solenoid #BR = Back right solenoid #SH = Shaker motor #GR = Gear motor #KN = Knocker #FN = Fan #FLOL = Flasher outer left #FLIL = Flasher Inner Left #FLCN = Flasher Centre #FLOR = Flasher Outer Right #FLIR = Flasher Inner Right #SR = Strobe #BK = Beacon #ST = Start button #EB = Extra Ball button #EX = Exit button #CN = Coin button #LB = Launch Ball button #FR = Fire Button FP_LINK_WAIT_TIME=4500 LINK_LF=205,100,10000,255 LINK_RF=206,100,10000,255 LINK_LS=205,50,500,255 LINK_RS=206,50,500,255 LINK_ML=205,50,500,255 LINK_MC=205,50,500,255 LINK_MR=126,50,500,255 LINK_BL=208,50,500,255 LINK_BC=208,50,500,255 LINK_BR=207,50,500,255 LINK_SH=115,1000,5000,255 LINK_SR=131 132 LINK_GR=116,750,10000,255 LINK_KN=124,120,500,255 LINK_ST=109 LINK_EB=101 LINK_CN=101,102 LINK_EX=104 #### # 0 = OFF (normal operation), 1 = ON - When ON a window will appear and a log file will be created in the EXE directory. DEBUG=1
|101||Coin Door Left|
|102||Coin Door Right|
|104||Blue Round Button|
|105||Orange Rectangel Button|
|106||Yellow Rectangle Button|
|107||Green Rectangle Button|
|108||Red Rectangle Button|
|110||Blue Rectangle Button|
|111||White Rectangle Button|
|112||Green Round Button|
|117||RGB Strip Left Bottom – Red|
|118||RGB Strip Left Bottom – Green|
|119||RGB Strip Left Bottom – Blue|
|120||RGB Strip Right Bottom – Red|
|121||RGB Strip Right Bottom – Green|
|122||RGB Strip Right Bottom – Blue|
|123||RGB Strip Right Rear – Red|
|124||RGB Strip Right Rear – Green|
|125||RGB Strip Right Rear – Blue|
|126||RGB Strip Left Rear – Red|
|127||RGB Strip Left Rear – Green|
|128||RGB Strip Left Rear – Blue|
|131||Flasher Backbox Top Right|
|132||Flasher Backbox Top Left|
|201||Flasher 1 – Red|
|202||Flasher 1 – Green|
|203||Flasher 1 – Blue|
|204||Flasher 2 – Red|
|205||Flasher 2 – Green|
|206||Flasher 2 – Blue|
|207||Flasher 3 – Red|
|208||Flasher 3 – Green|
|209||Flasher 3 – Blue|
|210||Flasher 4 – Red|
|211||Flasher 4 – Green|
|212||Flasher 4 – Blue|
|213||Flasher 5 – Red|
|214||Flasher 5 – Green|
|215||Flasher 5 – Blue|
Police Rotary Light
Front Left Relay
Front Right Relay
Rear Right Relay
Rear Left Relay
Your control software is now correctly setup, the last part will cover the installation of games and tables.
Awesome Build !!!!!!!! congrats