In this tutorial, I will provide an overview for adding Fleep’s pinball sound package to your VPX tables. These are professionally recorded and processed sounds to provide the most realistic pinball sound experience to date. Many have commented that these sounds make the game physics feel more real. There’s no doubt that the quality and randomization these provide, make the virtual pinball experience more immersive than ever!

The current standardized set of Fleep’s pinball sounds can be downloaded here:

You may want to delete all the existing sound files in the table first.  Note, Fleep’s sound package will probably cover 90%+ of the sounds you’ll need for your table.  There may be a few existing sounds you’ll need to reuse along side this package.

I recommend importing Fleep’s sound package in two batches.  VPX doesn’t seem to be able to handle importing them all at once.  They are already named correctly for the scripting included in this tutorial.  In the editor, select Table -> Sound Manager from the drop down menu and click the Import button. Select approximately half of the sounds from the package above and click the Open button.  Repeat for the remaining sound files.

Next we’ll add the mechanical sounds functions.  Copy and paste the following into your table script:

Mechanical Sound Functions

This script includes variable definitions, volume multipliers, standard positional playback methods, supporting ball & sound functions, and subroutines for all the sounds included in the Fleep’s pinball sound package.  You may find some of these methods already in your table script.  I recommend removing any sound related methods already in your table to prevent conflicts.  While you could adjust some of the volume multipliers, I recommend using the existing values and find they already provide excellent balance.  These functions also provide for full SSF and DOF implementation.

Some of these sound functions work best using CorTracker.  This requires adding in the following updated CorTracker code to the script and a timer named RDampen with timer interval of 1.

CorTracker Functions

The overall volume of most of these mechanical sounds can be adjusted using a single variable that should be included at the top of the script in the options section.  It will allow each user to adjust the mechanical sound volume to their taste.

'///////////////////////-----General Sound Options-----///////////////////////
'// VolumeDial:
'// VolumeDial is the actual global volume multiplier for the mechanical sounds.
'// Values smaller than 1 will decrease mechanical sounds volume.
'// Recommended values should be no greater than 1.
Const VolumeDial = 0.8

Many of the sounds in this package can be added by creating collections and adding the appropriate objects to those collections.  We’ll create the following new collections:

  • Metals (all metal objects, metal walls, metal posts, metal wire guides)
  • Apron (the apron walls and plunger wall)
  • Walls (all wood or plastic walls)
  • Rollovers (wire rollover triggers, star triggers, or button triggers)
  • Targets (standup or drop targets, these are hit sounds only … you will want to add separate dropping sounds for drop targets)
  • Gates (plate gates)
  • GatesWire (wire gates)
  • Rubbers (all rubbers including posts, sleeves, pegs, and bands)

When creating the collections, make sure “Fire events for this collection” is checked.  You’ll also need to make sure “Has Hit Event” is checked for each object placed in these collections (not necessary for gates and triggers).  Once the collections and objects are added, I recommend saving and closing VPX.  I’ve noticed that new collections don’t fire correctly until VPX is restarted.

Nudging, plunger, coin-in, start button sounds will be added to the keydown and keyup subs.  Here are examples of these sounds added in the keydown sub:


And examples for sounds added to the keyup sub:


Note: The code for determining if the ball is in the plunger lane is generic.  You will need to modify this code for your specific table.

Sound implementation for the flippers is a little more complex than traditional implementations.  But the result is well worth the additional effort.  The sounds should be added to the flipper Sol and flipper collide subs.  The attached code should make implementation relatively straight forward:

Flipper Sounds

Ball rolling and ball drop sound implementation is similar to what has been traditionally done.  However there are a few nuances that help with randomization.  The following is an example of their implementation using Fleep’s sound package:

Ball Rolling and Drop Sounds

The knocker sound is called from a solenoid sub.  It requires a primitive be added to the table and positioned where the knocker would be located on the table.  I just used a simple VP primitive.  It must be named “KnockerPosition”.

Knocker Sound

For drain sounds, we’ll add the following to the drain kicker hit sub where drainswitch is the name of the drain kicker:

RandomSoundDrain drainswitch

For ball release sounds, we’ll add the following to the ballrelease solenoid sub where ballreleaseswitch is the name of the ball release kicker:

RandomSoundBallRelease ballreleaseswitch

For bumpers, we’ll add one of the following to the bumper hit sub where bumper is the name of bumper object (any of these could be used for any bumper, having three helps improve randomization):

RandomSoundBumperTop bumper
RandomSoundBumperMiddle bumper
RandomSoundBumperBottom bumper

For slings, we’ll add the following to the right or left slingshot sub where sling is the name of the sling arm primitive:

RandomSoundSlingshotLeft sling
RandomSoundSlingshotRight sling

For saucers, add the following to the hit sub for the saucer kicker object:


And the following is an example of the saucer solenoid sub where kicker is the name of the saucer kicker object:

Saucer Kick

Note: The code for determining if the ball is in the saucer kicker is generic.  You will need to modify this code for your specific table.

An example of the Fleep’s standard sound package implemented on a table can be found with the latest Star Trek (Bally 1979) table located at the link below:


Leave a reply


Log in with your credentials


Forgot your details?

Create Account

The Vpinball app