Future Pinball v1.9.1.20101231 Manual

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 644

© 2007 BSP Software Design

Solutions
(Version 1.9.1.20101231)

Designed and Developed by: Christopher Leathley

3D Object Modeling by: Martin Antholzner

Physics Engine by: Newton Game Dynamics

www.newtondynamics.com

Future Pinball contains code by NanoTech Entertainment


support of the Pinball Wizard Controller

Many Thanks to Matt Ellis, Leon Spalding, Paul Wright,


Julio Jerez, Richard Dadd, James Widmark (R.I.P.), Frank
Freund
and Steve Ritchie for their help in testing and improving Future
Pinball
with their input and suggestions.

Welcome and Thank You for downloading Future Pinball.

Future Pinball is a real time Pinball Development System. It


allows you to design and play your very own pinball simulation
in True real time 3D. It uses Advanced Physics to provide the
best possible Simulation of a true to life pinball machine.
Tables are built up out of Standard components (Plastics, Pegs,
Bumpers, Lights, etc.) which are placed onto the playfield via
the Editor. Objects like Surfaces, Lights and Rubbers are
shapeable within the editor and generated real-time when the
table is played. Other objects (Bumpers, Flippers, Gates,
Triggers, Targets, etc.) use pre-made 3d Models (of which there
is a nice selection of each type).

The Table logic is scripted in Visual Basic Scripting (via the


Microsoft Scripting Technologies built into Windows XP).
Scripting is designed to be simple but flexible enough to allow a
wide vararity of Original Games to be created.

As Future Pinball is a Game Construction Program it contains


some advanced concepts which may require a little bit of time
(and patience) to learn and fully understand (such as computer
graphics and scripting concepts). If this manual cannot help you,
then please feel free to ask at the Future Pinball Support
Forums (www.futurepinball.com/~forum)

This manual should help you learn the basics of the program,
how each object works and provide tips on creating you own
tables. Please excuse any spelling / grammar errors. Some of
the screen shots have been taken under Windows Vista and the
other half under Windows XP hence a slightly different look.
Editor Overview

This part of the manual provides a simple overview of the main editor and the
functionality of the various parts on the main window. For more detailed help on
using the editor refer to the Editor Functionality part of the manual (link)

When you first run Future Pinball, it will open up the Editor in a blank state (i.e.,
no table has been loaded). At this point most of the buttons and menu times are
disabled. Only loading an existing table or creating a new table is allowed. You
can also change the default settings Future Pinball under the Preferences menu.

Loading one of the Demo Tables (File / Load) that comes with Future Pinball will
activate all of the controls and display something similar to the following picture
(of course the main table design will be different depending on what table you
have actually loaded)
The Editor is made up out of the following major components:

Top Menu Bar

This Section Describes the Menu options available to the Table Editor.

File
New (or Control + N)

Will Create a New (mostly blank) table for you to start working
with. The New table also comes with a simple but generic
script which help you create a game with up to 4 players, A
bonus system and Tilt and High score support. This generic
script provides an excellent starting frame work for your table.

Open... (or Control + O)

Will Open up an existing Future Pinball Table. A standard


windows File Requestor will ask you for the table file name to
load. Future Pinball tables have the file extension of '.fpt'

Close

Will Close the currently active table. If the table has been
changed but not saved, the editor will ask if you wish to save
the table.

Save (or Control + S)

Will Save the currently active table back to disk. If you have
created a new table (and thus it hasn't been saved to disk
previously), Future Pinball will ask you for a file name to save
the table to.

Save As...

This allows you to save the currently active table under a new
file name.
Table Launcher (or F4)...

Brings up a table loader which acts as a mini front end


allowing you to view all of the tables in the Tables\ sub-
directory. For more information see the Table Launcher section
of this manual. (link)

Generate Blueprint...

Allows you to generate a Blueprint of the currently loaded


table. For more information see the Blueprint section of this
manual. (link)

DMD Font Editor...

Allows you to edit and create DMD Fonts for use with the DMD
Display object. For more information see the DMD Font Editor
section of this manual. (link)

Resource Library Editor...

Allows you to edit and create resource libraries for your table.
For more information see the Resource Library Editor section
of this manual. (link)

* Recent File List *

This list show the last 10 tables which have been loaded. this
allows you to load a recently loaded table without having to go
though the windows file requestor each time. You Can use
keyboard shortcuts ie 'Alt F 1' to load the last loaded table (the
first entry in the recent file list).

Exit

Will exit the Future Pinball Editor. If the any of the current
tables have been changed but not saved, the editor will ask if
you wish to save each table.

Edit
Select All (or Control + A)

This will select all objects in the current view of the table editor
workspace.

Find (or Control + F)

This will bring up a simple find dialog that will allow to to find
an object on the table (obviously you will have to know its
name). If the object is found then it will be automatically
selected.

Undo (or Control + Z)

This will undo any changes you have made. Pressing this
repeatedly will continue to undo your changes.

Copy (or Control + C)

Will copy the selected table objects into the clipboard (A


Temporary storage location).

Paste (or Control +V)

Will Paste the contents (if any) of the clipboard onto the
current table.

Paste (or Delete)

Will Delete the currently selected object from the Table.

Script...

Will open up the Script Editor. Refer to the Script Editor


chapter. (link)
Table

Table Info...

Will open up the Table Information Dialog which allows to


define generic information needed by the table, such as the
author, table name, initial High Scores. For more information
see the Table Information Chapter (link).

Texture Manager...

ewWill open up the Texture Manager which allows you to


import images into your table which can then be mapped to the
various table components. For more information see the
Texture Manager Chapter (link).

Sound Manager...

Will open up the Sound Manager which allows you to import


Sounds into your table which can then be played via script
commands or on request of objects. For more information see
the Sound/Music Manager Chapter (link).

Music Manager...

Will open up the Music Manager which allows you to import


Music files into your table which can then be played via script
commands. For more information see the Sound/Music
Manager Chapter (link).

Model Manager...
Will open up the Model Manager which allows you to import
specially created Future Pinball Model files into your table. For
more information see the Model Manager Chapter (link).

Font Manager...

Will open up the Font Manager which allows you to import


specially created Future Pinball DMD Fonts into your table. For
more information see the Font Manager Chapter (link).

Image List Manager...

Will open up the Image List Manager which allows you to


create Animated Image Lists that can be used with the Overlay
object. For more information see the Image List Manager
Chapter (link).

Light List Manager...

Will open up the Light List Manager which allows you to create
Light Lists needed by the Light Sequencer object. For more
information see the Light List Manager Chapter (link).

Play Table (or F5)

Will start playing the current table.

Play Table with Debug (or F9)

Will start playing the table but will also display the Debug
Window which displays any text given to it via the
AddDebugText script command. For more information see the
Global Scripting Commands Chapter (link).

Preferences

Editor Options...
The Editor Options allow you to tweak what information the
editor gives you when you click on object. It also allows you to
define the colours used to render the table in the editor to suit
your own preferences. For more information see the Editor
Options Chapter (link).

Game Keys and Controls...

Opens the Game Key (and Controls) Preferences dialog which


allows you to redefine what keys are used to control the game
when the table is played. For more information see the Game
Keys and Controls Chapter (link).

Video / Rendering Options...

Opens the Video and Rendering Options Dialog which allows


you to specify the screen options used to render the Table (in
the Game Player) and what sort of level of detail to put into
that render. For more information see the Video Options
Chapter (link).

Window

Tile

Currently Unsupported.

Window / Table

Lists the Table(s) which have been loaded into the editor.
Future Pinball allows multiple tables to be loaded at once.
Useful if you wish to copy elements from one table to another.
The currently active table is marked with a tick. To change
tables, select the name of the table desired to be the current
table.

About
Open Manual.. (or F1)

Opens this manual.

Future Pinball Support Forums.. (or F1)

Will launch your internet browser and go to the Future Pinball


Support Forums where you can ask other table designers and
users of Future Pinball questions or look for new tables to play.

Get More Tables to Play...

This will bring up the following dialog which loads a RSS feed
from http://fprelease.free.fr/ which shows the latest 50 tables
released for Future Pinball aswell as table information, release
date, rating aswell as a screen shot of the table.
Clicking on a table in the table will display the details about
that table. Clicking on Find out more and Download Table
will go to http://fprelease.free.fr/ where you can download the
table. Clicking on View the Top Rated Tables will change the
listing to show the top rated tables.

Reload Rss Feed will manually reload the RSS feed although
this will be updated every 7 days automatically.

Many thanks to LvR and Moog for there support of Future


Pinball and for the work that they do in supporting the
community.

About..

Will open the About box dialog display the credits for Future
Pinball.

Left Control ToolBar

This is the main control toolbar for Future Pinball. It contains the
following Buttons:

Select

The Select Button will change the mouse Cursor to an Arrow


allowing you to click on Table objects to make them active.

Magnify

Changes the Editor Mouse Cursor to the Magnification Glass.


This allows you to zoom in (via the left mouse button) and
zoom out (via the right mouse button) of the Table Editing
Workspace.

Play Table

Will start playing the current table. Refer to the Playing a Table
chapter. (link)

Script
Will open up the Script Editor. Refer to the Script Editor
chapter. (link)

Table

Will change to the Table Workspace View. This allows you to


edit and place objects which are attached to the playfield.

Translite

Will change to the Translite Work Space View. This allows you
to edit and place objects which are attached to the translite (the
backbox).

Layer Selection Buttons

They layer buttons allow to toggle which layers are displayed on the
Table Editor Workspace.

Future Pinball support up to 10 Layers which every object can be


assigned to. This allows you group similar objects to a specific layer.
For example. Assigning all Surfaces to say Layer 2 will then allow
you to click one button (the Layer 2 Button) and toggle displaying
them or not allowing instant access to editing the objects
underneath. This is also very useful to limiting what information gets
exported when a Blue Print is created.

Holding down SHIFT when selecting a layer will turn off all other
layers.

Future Pinball will remember which layers have been selected (or
not selected) each time you run Future Pinball.

Layers only help in the editing process and are not used for Playing
(or Rendering the table). For more information on Layers refer to the
Editor Functionality chapter (link).
Table Editing Workspace
The Table Editor Workspace is where you will be working when developing a
Future Pinball Table. It show all the objects on the table and allows you to
click on each object to edit it. (change a property or move it around a bit).
For more information refer to the Editor Functionality chapter (link).

Bottom Table Component ToolBar

The Table Component Toolbar contains all the object


types that can be placed onto the Table workspace.
These a grouped together into similar categories (ie
as pictures any object which help guide the ball will
be in the guides category). The Icon system in
Future Pinball will stack all the sub-object vertically
up the screen. (The bottom icon will have a little
arrow on it if there are sub-items for this category).
Clicking on the object button you want will change
the mouse cursor to a crosshair. You can then place
that object onto the table by clicking the left mouse
button at the location on the table workspace you
want the object. You can then edit the properties of
that object.

Object Property Dialog Window

The Object Property window displays the properties


available for each object. the layout of this window changes
from object to object but there are many common elements
that most objects use.

Clicking on a table object will display the properties for that


object. If the Editor window size is smaller than what is
required, a scroll bar will be placed to the right of the
property window to allow you to scroll it up and down (the
Bumper Object will most likely do this)

In general the properties will only allow the correct range of


data to be put in and will stop you from inserting silly
values.

For more information about the use of the various object


properties and how they effect the selected object, please
refer to the relevant section of this manual depending on
which object you are using.

Bottom Status Bar

The Status bar shows the current cursors position


over the current table. These numbers are in
Millimeters (the scale used by Future Pinball) are
based from the Top Left of the Playfield. The Status
bar also shows the current Zoom Level.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Playing a Table

This is what Pinball is all about. Although Future Pinball is a pinball


construction set there is nothing like playing your tables (and tables created
by others). Pressing F5 in the editor (or clicking the Play button) will run the
currently loaded (and active) table. Alternatively, if you are using the Table
Launcher then it will skip the manual load and play steps.

Initial Startup Screen


As the table gets ready to be played it must calculate all of the 3d data
needed by the table as well as inject the needed textures into the
video card. This generally takes a few seconds and the bottom
progress bar will move to the right as it processes the various steps
needed.

The name of the Table, version and Author (as defined in the Table
Information (link) dialog) is also displayed.
Future Pinball requires a fairly decent video card to run. If your video
card is unable to support hardware acceleration, it will be extremely
slow (aswell as you may get graphic corruption). If Future Pinball
detects this it will bring up the following warning dialog. You should try
downloading the latest drivers for you video card to upgrading your
video card.

Let's Play Ball.


After everything has been created and loaded into your video card,
then you can start playing the table.

The Keys used to control the flippers, start a game, nudge the table
are defined by the Key Preferences (link) dialog. Depending on the
person and how they have scripted the table the ways to start the
game may differ but if it is scripted correctly then the default method
will be to press 5 (insert coin) to insert coins (for credits) and pressing
1 (start button) multiple times to start the required number of player
games.

Pressing (and holding down) Enter (Plunger) will pull back the
Plunger. Releasing the plunger key will fire the ball onto the playfield.
Using the Shift (Left and Right Flipper) keys will flip the flippers.

The Table can be nudged with the Z (Nudge Left), Space (Nudge
Forward) and / (Nudge Right). Be careful not to nudge too hard else
the table may tilt.

Looking At The Backbox (or your


scores)
As most of the time the Camera is watching the action on the playfield
you won't be able to see your scores on the backbox. Pressing (and
holding down) the TAB key will make the camera look up at the
backbox (irrelevant to the camera chosen). As a matter of course, you
should only do this when it is safe to take your eye off the ball. If the
Machine type is a old BallyHoo type (no backbox), then there is no
backbox to look at and as such pressing this key will have no effect.
Changing the Camera
Future Pinball contains many camera modes allowing you to choose
the type and style of camera you would like to use when playing the
game.

Cameras a changed by pressing the function keys F1 to F8. When you


change a camera the camera name will be displayed at the bottom of
the screen for a few seconds (before fading out). You can set your
preferred camera at startup via the Video Preferences Dialog (link).

The Normal Camera Modes are described as follows;

Full Table 2 ( F2 )
Full Table 1 ( F1 )
Shows 80% of the Table and will As with Full Table 1, but the camera
pan up and down to is positioned
follow the closest ball at the Top of Higher off the Playfield.
the Playfield.

Scrolling 2 ( F4 )
Scrolling 1 ( F3 )

The Camera will closely follow the As with Scrolling 1, but the camera
is positioned Higher
ball only showing about 2/3
of the Playfield. The Playfield will off the Playfield and will show
appear to scroll up and down. slightly more of the Playfield.

Low Angle 2 ( F6 )
Low Angle 1 ( F5 )
The Camera is positioned just As with Low Angle 1, but the
behind the lower Flippers Camera will move along
and will pan up and down following the Glass (so the table scrolls)
the Closest Ball. following the ball as it
Traverses the playfield.

Fixed View ( F7 )

The Camera shows the Entire table and is fixed in place.

There are some special camera modes in Future Pinball which allow
you to see various aspects of the pinball machine. There are cycled
though each time you press the F8 key.

Top View ( F8 )
Apron View ( F8 )
Top Down View of the Apron Top down (almost) view of the entire
allowing you to Playfield.
read the Rule sheet for the pinball.

External Left ( F8 ) External Side Left ( F8 )

Much Like the External Left View


External View of the Left side of the
Pinball Machine. but even more to the left.

External Side Right ( F8 )


External Right ( F8 )
External View of the Right side of Much Like the External Right View
the Pinball Machine. but even more to the Right.

Future Pinball also contains a special Camera which allows free


movement (via pressing the F11 key) which allows you do move freely
around the table and the game room. This allows you to check more
closely the placement of playfield objects. Future Pinball will not allow
you to move below the glass of the pinball machine. You may also
notice graphics anomys as the Future Pinball graphics engine is
optimised for the usual Forward View of the Playfield. Please note that
If you have the Track IR Client software running the Pressing F11 will
switch the Track IR camera and not the manual camera.

Use the Mouse to look around and the W / S keys to move


Forwards/Backward. A / D with strafe sideways. While in manual
camera movement the W/S/A/S keys will not be reported to the script.

To Exit Manual Camera Mode, press one of the predefined Camera


Keys (F1 to F8).

Entering A High Score


If you manage to beat a high score on the table you are playing (and it
is scripted to use the built-in high score system Future Pinball gives
you) then at the end of the game a High Score Initial entry screen will
be displayed. This will allow you to enter in your initials using the
Flipper Keys (as assigned by the Key Preferences (link) dialog) to
rotate the letters and the Start Key (or Enter) to enter in the initial. If
you make a mistake then pressing Backspace will go backwards to
the previous initial.

Pausing the Game


Pressing Pause / Break on the keyboard will pause Future Pinball and
bring up a little Paused window. This window also shows the high
scores for the table currently being played. Pressing Pause / Break
again will un pause the table allowing you to play again.
Showing the Performance Counters
Pressing F9 on the keyboard will toggle the display of the performance
counters in Future Pinball.

These counters show you:

Rendering Frames Per Second. This values shows you


how fast the Game engine is running. This value should
be above 30 and ideally close to the refresh rate of your
monitor. Adjusting the Settings in the Video Preferences
Fps can greatly affect this value. If your system is running too
slow then you should reduce the complexity of the table
via the video preferences dialog (link). The second
number (in brackets) is the average FPS over the life of
the game.

The total number of Draw operations being performed by


Ops
the Future Pinball rendering engine.
The total number of triangles (or polygons) being fed into
the Future Pinball rendering engine each frame. Adjusting
Tris
the settings in the Video Preferences dialog will greatly
affect this value.
The Total Processor time (in milliseconds) the Physics
Physics
Engine is taking on the current table over the last second.

The Graphics Card information is also shown.

Wire Frame Render Mode


Pressing F10 on the keyboard will toggle rendering in the display in
normal polygon mode or wire frame. While this is purely a geek
factor (as it serves no real use) it does allow you to see how the table
being played is created out of 3d geometry.
Changing the Volume of Sound Effects
If the sounds are too loud or too soft then you can adjust it via the
Home (turn volume up) and the End (turn volume down) keys on your
keypad. This will display a volume bar at the bottom of the screen
which shows you the level the volume is currently set at. Future Pinball
will remember the volume set even if you exit the application and start
it again. This volume is common for ALL tables that you may play in
Future Pinball.

Changing the Volume of Music


If the music (if any) is too loud or too soft then you can adjust it via the
Page Up (turn volume up) and the Page Down (turn volume down)
keys on your keypad. This will display a volume bar at the bottom of
the screen which shows you the level the volume is currently set at.
Future Pinball will remember the volume set even if you exit the
application and start it again. This volume is common for ALL tables
that you may play in Future Pinball.
Playing in Debug Mode
Playing the Table in Debug Mode (for table Developers) will show the
Debug Output Window. This window displays the last 20 strings given
by the global script method method AddDebugText(). For more
information on this command refer to the Global Script chapter (link).
This allows Table Developers to output debug text to the screen to aid
in debugging their table script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Launcher

The Table Launcher allows you to load (and run) any of the tables
stored in the Tables Sub-directory in the main Future Pinball
installation directory. The Launcher acts as a mini-front end as it will
scan for all Future Pinball Tables within the Tables Sub-directory (and
any sub-directories with in that) and display them in a list along with
bits of the table information (the Table Name, The Version of the
Table, The Author of the Table and its description). This information is
generally entered into the Table Information Dialog (link) by the
Author of the Table.

In short, the Table Launcher provides a simple way to select, load


and run a table if you are just using Future Pinball to play tables and
not author them.

When the Table Launcher dialog is opened, it will close any currently
opened table(s).
Selecting a table from the list will allow you to load and run the
specified table. You can either double click the table name or select
the table and press the button. If no table has been
selected, then the button will be disabled.

This will exit the launcher and return back to the Table
Editor.

This will refresh the table list by rescanning the Tables


sub-directory for any new tables.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Editor Functionality

This part of the manual will help you learn how the Table Editor
works in Future Pinball, How to Create new objects, move them
around the table and modify them. It doesn't cover the specifics of
the various objects used in the examples. You will have to refer to
the relevant object's help.

The Table Editing Workspace provides the area in which you can
create your own pinball machine. The Editor is designed to work as
simply as possible and provides a clean top down 2D view of the
table. The Table Elements are drawn onto the workspace and from
there you can play with using a combination of mouse and/or
keyboard actions.

This chapter is quite large but provides all the basic elements for you
to learn how to create your very own table in Future Pinball.

The Colours that are used to draw the table components are
definable in Editor Options Window (link).

Creating a New Object on the Table


Creating new objects on your Table is what Future Pinball is all
about. There are many object types built into Future Pinball and
they are accessed by the bottom Table Component toolbar.
Each component type is grouped together into similar
categories. i.e. objects that guide the around the Playfield
(Walls, Wire Guides and Plastic Guides) are all found under the
Guides Icon. Future Pinball will then stack all the sub-object
vertically up the screen. (The button icon will have a little arrow
on it if there are sub-items for this category).

In this example we will be creating a Peg and changing the


model of that Peg.

Select the "Objects" button. If you leave the mouse cursor over
the button a little tool tip will appear giving a more detailed
explanation of what the button does.

Now Select the Peg button from the pop up button list. Again
leaving the mouse cursor over a button will bring up a tool tip.

When you select an object type (in this case the Peg), the
cursor will change into a Crosshair.
Moving the Crosshair cursor to the location on the table where
you wish to create the object and pressing the Left mouse
button will create the object. If you do not wish to create an
object (i.e. you have accidentally clicked on an objects button),
press the "Select" button on the main left toolbar to revert back
into normal editing mode.

The object that you have created will then be drawn on the
Table Workspace. Selected objects are drawn with a thicker line
colour. The colour of this colour is your system's Highlight
Colour, defined in Microsoft's Windows Display Properties. If
you are using the Blue XP theme, it will be blue. If you prefer the
Green XP Theme, it will be a green colour.
When an object is Selected, the Editors Property window will
change to show you the available properties for that object (in
this example not all are shown)

For objects that use a 3D model, the properties will show a


name for that model as well as a little preview of that model.
Clicking on the Drop Down box for the Model will list the
available models for the object type (i.e., as we have created a
Peg, it will only show Peg Models). New Models can be
imported into Future Pinball via the Model Manager (link).

Selecting one of the Models in the list will change that object
over to use that model. The preview window will also change.
Note that the preview window will not draw the object in the
colour that you have specified for that object's properties. The
preview image is a static image that comes with that model.

The Peg will then be re-drawn using the new model data.

Selecting an Object on the Table


To select an object on the table, all you have to do is press the
Left Mouse Button while the cursor is over that object. As
mentioned above, any selected object will be drawn in your
system's highlight colour.
The Title of the Properties window will then change to display
the type of object you have selected (as well as show the
individual properties of that object)

By clicking on an object and holding the Left Mouse Button


down, the object will turn green signifying that you can drag the
object around the table workspace.

Alternately you can use the Cursor Key to move a selected


object. The object will move 1mm in the direction of the cursor
key (i.e., Pressing the Cursor Up key will move the object 1mm
upwards). If you hold down shift while pressing a cursor key, the
object will move 5mm.
Copying Objects. (Control + C)
You can Copy (or duplicate) an object(s) on the table
workspace. This is very useful when you have set an object up
(such as a peg and its colours) and want to use that same peg
all over your table. To Copy an object, select it and either press
'Control + C' on the keyboard or press the Right Mouse Button
to bring up the objects sub-menu.

The Sub Menu for each object may slightly change depending
on the object type but the commands are consistent for all
object types. In general, objects that use a 3d Model will bring
up a shorter menu. Objects which use Shapepoints to define
their shape have a few more operations that can be done to
them (such as rotating, flipping, etc.). For more information on
Shapepoints refer to the Shapepoint chapter (link).
Sub-menu for Model Based Sub-menu For Shapepoint
objects based Objects

Selecting the 'Copy' menu item will copy the object into the
clipboard.

You can also copies from other tables loaded into the editor so if
you like what somebody else has done in their table design, you
can just select what you want, copy it and paste it into your own
table.
Pasting Objects. (Control + V or
Shift + Control + V)
Once you have an object(s) in the clipboard you can then paste
it back onto the table. Again use the Right Mouse Menu and
Select 'Paste'.

This will paste the objects which are in the clipboard onto the
table. When you copy an object, all its properties are also
copied which includes its location on the table. As you are
effectively duplicating an item, it will be created OVER the object
it was based on.
Select the object and then move it to the location you wish to
place the object at. (by holding down the mouse and dragging
the object or using the cursor keys)

Alternatively you can paste at the location of the mouse pointer.


First copy the object into the clipboard and then move the
mouse cursor where you want the object. If you right mouse
click (over an empty bit of the table), the
mouse menu will appear. Selecting Paste At (or Pressing 'Shift
+ Control + V' will paste the object at that location. This saves
having to drag the object over.

Deleting Objects.
Objects can be deleted if not needed. Just select the object you
wish to remove and press the 'Delete' key on the keyboard.
Undoing Changes.
The Future Pinball Editor also contains an undo buffer which will
remember the last 16 changes made to the Table (i.e., deleting
objects, moving objects, changing properties of an object). If you
wish to undo a mistake made, press 'Control + Z' on the
keyboard or select 'Undo' under the main Edit menu list (top of
screen).

Selection of Multiple Objects.


Of course, selecting one object at a time in the editor can be a
pain, so the editor will allow you to select multiple objects at
once as well as change common properties between those
objects. To select multiple objects at once, hold down the
'SHIFT' key when selecting objects. If you click on an already
selected object, it will become unselected.
Selecting multiple objects of the same type will allow you to
change common properties of that object (such as its colour).
When you select objects of the same type (in this case the Peg
object). The title of the properties windows will change to show
how many objects of that type are selected.

From this point on, changing any common properties will be


reflected across all the selected objects. If a property is unique,
it will be masked out and thus you will not be able to change it.
You can also copy the selected objects, drag them to a new
location or what ever action you wish to perform.

Selecting multiple objects of different types; i.e.:


will bring up the following dialog Window:

All this means is that you will not be able to change common
properties of the objects selected. But you can still copy them to
the clipboard, delete them, or perform any other action on them.

Selecting Multiple Objects with the


Mouse Selection Box
The Future Pinball Editor also allows multiple object selection by
a mouse drag box. This allows you to outline an area of the
Table Workspace and all objects within that area will be
selected. To perform this, select a blank area of the Table
Workspace and press (and hold down) the Left Mouse Button.
You can then move the mouse and a selection box will be drawn
between the initial mouse location and the current location.

Releasing the Mouse button will then select all objects within the
selection box.

Placing Objects Over Each Other


Placing various object types over each other is a must in Future
Pinball (for example, plastics over lower objects, rubber over
pegs, etc.).

Some objects (in this case the Peg) will draw a Purple Guide
Line indicating how to position other objects around it. In the
case of the Peg it shows the rubber line. i.e., where the rubber
should rest against.

Selecting a Rubber object and dragging it so its over the object


and the Rubber looks like it is following the guide line on the peg
will effectively make the rubber look like it is being wrapped (or
attached) to the Peg object even though they are 2 completely
separate objects.
If you wish to move or duplicate a Peg/Rubber combination (or
any other object combination), multi select the objects and
modify them as per normal.

Selecting Overlaying
Selected Overlaying Objects
Objects

Send to Back / Send To Front


As the Table Layout is drawn 2D in the editor, there are times
when larger objects (such a surfaces) will obscure the selection
of objects beneath them. In order to change the drawing order of
the object in the editor you can use the Right Mouse Button
Menu items, Send to Front and Send to Back.

Select the object which is in the way (in this case the plastic
surface is obscuring the selection of the items below it), press
the Right Mouse Button and Select 'Send to Back'
The Surface is then sent to the back of the Table Workspace,
and the objects that where obscured and now selectable. (in this
case we have selected the ornament hole around the slingshot
kicker hammer).
It is important to note that sending objects to the Back (or the
Front) may change how it is rendered in the game. This only
applies to objects which are either Transparent (or partially
transparent) or objects which have the Crystal flag set (if
available). If you see 'rendering' issues with objects on your
table, you will have to adjust the drawing order by sending
objects to the back so they are drawn first.

Layers.
Future Pinball supports up to 10 Editing Layers which every
object can be assigned to. This allows you group similar objects
to a specific layer. For example. Assigning all Surfaces to say
Layer 2 will then allow you to click one button (the Layer 2
Button) and toggle displaying them or not allowing instant
access to editing the objects underneath. This is also very
useful to limiting what information gets exported when a Blue
Print is created.

Future Pinball will remember which layers have been selected


(or not selected) each time you run Future Pinball.

Layers only help in the editing process and are not used for
Playing (or Rendering the table).

The Layer Buttons are on the Left hand Toolbar in the Main
Editing Window. They are numbered from 1 to 0 (with 0 being
Layer 10)

To assign an object to a Layer, use the Right Mouse Button,


Move down the 'Assign To...' line. A second popup menu will
appear giving you a selection of Layers to assign the object to.
The current layer the object is assign to will be ticked.
The following example, the Pegs are assigned to Layer 2 and
everything else Layer 1. Deselecting the Layer 1 button:

will stop the Table Editor from drawing any objects assigned to
that Layer. So instantly you can have full access to anything
underneath. If used correctly Layer can make you job of editing
tables much easier. Layers don't make any difference to the
rendering of an object and are only an Editing tool.
Snapping the Object to the nearest
mm
You can snap the Object to the nearest mm boundary. Right
mouse click on the object and select "Snap to Nearest mm".
Randomise Orientation
You can randomise the orientation of model based objects
(which is useful for making sure that screws/bolts all dont look
the same). Right mouse click on the object and select
"Randomise Orientation".

Translating an object.
Object(s) can easily be Translated (moved by precise
constraints) by the Translate Menu option.

Selecting Translate will bring up the following dialog which


allows you to enter in the measurements to translate the object
by.

Clicking will Translate the selected objects by the


measurements entered. Clicking will exit without
moving the object.

Flipping an Object on the X or Y axis.


Objected based on Shapepoints (Surfaces, Guides (Walls and
Wire), Shapeable Rubbers and Lights) can be flipped (mirrored)
on either the X or Y axis. This allows the shape to be inverted
without having to reshape it. A practical example is shaping a
Left Slingshot plastic, making a copy of it, flipping the copy and
using it as the Right Slingshot Plastic.

Select the 'Flip X' menu option to Flip the Selected Object on the
X axis.

Selecting the 'Flip Y' menu option will Flip the Selected Object
on the Y Axis.
Rotating an Object.
You can also arbitrarily rotate a Shapepoint-based object around
its center point.
Selecting the Rotate menu option will bring up the following
dialog;

The Direction Radio buttons ( ) allow you to specify rotating


the object either to the Left (Anti-Clockwise) or to the Right
(Clockwise)

You can either rotate the object by a present amount of Degrees


(90, 180 or 270) or by a Free amount of Degrees. Entering in a
negative value for the Free degrees will rotate the object in the
opposite direction.

Clicking will Rotate the selected object(s) by the


degrees entered. Clicking will exit without changing the
object.

Rotating the example Light by 45 Degrees will look like the


following illustration.

Scaling (Resizing) an Object.


You can also resize Shapepoint-based objects easily by using
the Scale function.

This will bring up the following dialog:


This Dialog allows you to enter in the percentage on how to
scale the object. 100% will not change the size of the object (as
it is already 100% or its own size). 50 will halve the object and
200 will double the size.

If the Lock Aspect Ratio checkbox is ticked, Future Pinball will


scale both the X (Horizontal) and Y (Vertical) sizes by the same
amount. If you wish to scale each axis by a different amount,
you will have to disable this checkbox and enter in your value in
the Scale Y value (which will be enabled)

Clicking will Scale the selected object(s) by the


constraints entered. Clicking will exit without changing
the object.

Scaling the example Light by 50 percent will look like the


following illustration.

Locking a Table Object.


You can "Lock" an object in place so it cannot be accidentally
moved. To lock an object press the Right Mouse Button over the
object and select the Lock menu item. The Editor will then Lock
the object. All Locked objects are drawn in a different colour
than normal (this is definable in the Editor Preferences Window)
to signify that the object is locked.

The Lock menu item is also checked. You Will have to unlock an
object before you will be allowed to move it.
Ball Spacing Guide
Holding down Control on the keyboard will draw a red circle
around the cursor. This red circle represents the true size of a
pinball. You can use this to ensure that when placing table parts
near each other that there is enough room for the ball to still
pass between them (where appropriate).

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Shape Points

This chapter of the manual provides an overview on Shapepoints.


Shapepoints are special hotspots on an object which help define the
shape of that object. Not all objects use shapepoints (those that use
3D models) but objects like Surfaces, Walls, Wire Guides, Rubbers
and Lights use shapepoints. Each object will use them slightly
differently but on the whole they work the same from object to object.

The Majority of objects which use Shapepoints must contain at least


3 Shapepoints (The editor will not allow you to delete below this
minimal amount). Objects such was Guides (Walls) and Wire Guides
must always have 2 Shapepoints.

Shapepoints help define a shape via linking each Shapepoint with


either a single line or a Spline. A Spline creates a curved surface by
splitting up the line into lots of smaller pieces and shaping it so it
curves between the Shapepoints either side. As each object works
slightly differently, it is best to experiment a little with each type.

The colour of Shapepoints is definable in the Editor Options (link).

Selection of Shapepoints.
Selecting an object which uses Shapepoints (in this case, a
Surface) will show the shapepoints for that object (unless you
have the Always Show Shapepoints option enabled in the Editor
Options (link).
You can then click on a shapepoint (which will be highlighted in
your systems Highlight Colour, defined in Microsoft's Windows
Display Properties).

Depending on the object, the editors property panel will change


over to one of the following.
Surfaces / Walls Wire Guides / Lights Shapeable Rubbers

These properties allow you to change how the Shapepoints


works and its location. The Texture Coordinate and Event ID
Fields are not covered in this chapter.

Selecting a "selected" Shapepoint and holding down the left


mouse button will allow you to drag the Shapepoint around the
Table Workspace. You will notice that the shape will real time
change to match the new layout.

Dragging a Shapepoint Shapepoint at new location

Any operation performed on a Shapepoint can be 'un-done'


using the undo system built into the editor. Either press Control-
Z or select 'Undo' from the Edit menu on the top menu bar.
Smoothing Shapepoints.
As mentioned above, Shapepoints can be smoothed to create
curves instead of straight lines (between the points). To smooth
a point you can either tick the Smooth property in the editors
property window ( ) or you can use the Right
Mouse Button Menu to smooth the point.

This will then change the shapepoints shape so it is drawn as a


circle (indicating a smooth point) and you will see the shape of
the object change as it splines out the point (between the point
before and the next point).
When a ShapePoint is smoothed, the Right Mouse Button
context Menu will show a tick next to the Smooth menu item.

Multi Selection of Shapepoints.


Shapepoints (like normal Table Objects) can also be Multi-
selected (via holding down Shift and clicking on the various
points). This allows you to move multiple points at once helping
shape objects more easily.
Snapping the Shapepoint to the
nearest mm
You can snap the Shapepoint to the nearest mm boundary.
Right mouse click on the shape point and select "Snap to
Nearest mm".

Adding New Shapepoints to an


Object
Of course when you create many of the shapeable objects in
Future Pinball you will need to modify it and add new
shapepoints to it to enhance the shape from the default. You do
this by inserting new Shapepoints into the object. To Start
inserting a new point, select a Shapepoint and press the right
mouse button.
Select "Insert new Shapepoint" and a new point will be added to
the object. Future Pinball will create the new point between the
currently selected shapepoint and the next point. In the example
provided. We first select Shapepoint '3', and Insert the new
point. A new '4' point is created between the old '4' and '3'
points. All Shapepoints after the new point are then renumbered
to account for the extra point.

You can see that the new point is now selected. you can then
edit it just as you would any other shapepoint.
If you insert a new Shapepoint using point '5' as the start, then
the new point will be created between the '1' and '5'
Shapepoints. Again as each object works slightly differently, it is
best to experiment a little with each type.

Deleting a Shapepoint
You can Delete Shapepoints from an object (providing it doesn't
reduce the minimum number of Shapepoints required for that
object). Just select the shapepoint you wish to delete and press
the "Delete" key on the keyboard.

Select the Point You wish to Press "Delete" and it's


Delete gone.

Guides (Wire and Wall)


The Wire Guide and Wall objects work slightly differently in their
use of Shapepoints as the last shapepoint doesn't link back to
the first. (Therefore the shape is Open). These objects will use
the shapepoints are a center line and wrap the object around it
(as apposed to using the Shapepoints to directly create the
shape).

Shapepoints in these objects are modified exactly the same with


the exception that you cannot insert a new Shapepoint at the
last point. If you try you will see that the Insert new Shapepoint
menu is grayed out. If you need to add more points, then select
the point before it and reshape the object.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Ramp Points

This chapter of the manual provides an overview on Ramp points. Ramp


points are special hotspots which help define the shape of the ramp object
(both Wire and Plastic/Metal Ramps). Ramp points work is a very simular to
Shapepoints so only the differences are covered in this section of the
manual.

The colour of Ramp Points is definable in the Editor Options (link).

Selection of Ramp points.


Selecting a either a Wire or Plastic/Metal Ramp object will show the
ramp points for that object (unless you have the Always Show
Shape/Ramp points option enabled in the Editor Options (link).

You may notice that the last ramp point is drawn differently than the
others. This ramp point signifies that this is the end point of the ramp or
more specifically where the ramp reached it's end height. This allow
ramps to be created which go up to a set height and then run flat from
that point onwards. Only a single ramp point can be marked as the 'end
point'.
To mark a point as being a end ramp point, right click on the point you
require and select the Mark as Ramp End Point menu option. You are
unable to make the first shape point (the start) as the end point. This
menu option will be greyed out. It you want a flat ramp then set the start /
end heights of the ramp to be the same.

When you can click on a ramp point, depending on the object, the
editors property panel will change over to one of the following.

Plastic / Metal Ramps Wire Ramps

This is much the same as shape points with the only exception being the
Ring Type option. This allows you to select (for wire ramps only) a metal
ring which will be placed at that ramp point.

Selecting a Ring type will show a preview of object in the window below.
The Editor will also show the ring choosen.

Wire Ramp (Habitrails) Special Attributes


Wire Ramps has extra special attributes which allow you to included
extra wire segments between ramp points. This allows the creation of 3,
4 and 6 wire ramps. This is setable for each ramp point allowing for
some very flexible designs. Right Clicking on any ramp point (except for
the last one) will bring up the following menu options.

This allows you to select combinations of adding a Left Guide, Left


Upper Guide, Right Guide and Right Upper Guide. If a special attribute is
enabled this it will have a tick next to it aswell as being drawn on the
editor layout screen as a cross hatch.
Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Blueprint Export

After laying out your Pinball Design you will need to start working on
graphics for it. Obviously the main graphic on a pinball is the
playfield texture. In order to be able to place you graphics at the
desired place you will need to create a Blueprint of the table.

A Blueprint is a simplified render of the table which can then be


imported into any graphic package and used as the basis to design
your playfield artwork.

Selecting 'Generate Blueprint...' from the File Menu will open up the
following window:

This dialog allows you to specify the sizes, colours and what is
actually rendered on the blueprint.

Render Options
The Blueprint Colour defines what colour to render the
blueprint with. It is always rendered onto a White background.
This is purely cosmetic.

Render at Playfield Apsect. With this option enabled the


blue print will use the table dimentions instead of multiple of 2
texture sizes. These can be changed (or multipled) via the With
and Height drop down selection boxs.

The Width and Height drop down selection boxes allow


you to define the dimensions of the blueprint. If the Render at
Playfield Apect is disabled then you can select the size of the
output in pixels, else you select a multiplier to use based on the
table width and height. Selecting either drop down box will allow
you to select the size you require;

Export Options
Render 3D Models

With this option enabled, any table object which uses a 3d


Model will be rendered to the Blueprint.

Only Render Currently Selected Layers

Use this if you wish to only exported the selected layers to


the Blueprint. For example if your table is set up correctly
with objects assigned to different layers (i.e., all Lights are
set to Layer 5), then you can limit only layer 5 to the
blueprint which would give you a map of all the Lights.

Included Ornamental Objects


Also include Ornamental Objects to the Blueprint.
Ornamental objects (such are screws, acorn caps, target
holes, etc.) are classified as non-essential to game play and
are purely eye candy to the overall Table. If you are using
Ornamental objects (for example a hole around a bank of 3
drop targets), you may wish to also include the hole in the
blueprint so you can draw around it in your paint package.
Render 3D Models must also be enabled for this option to
work as ornamental objects generally use 3D Models.

Clicking will then ask you for a Filename and where to save
the file to. The resulting Blueprint will be saved to the filename
specified (as a Microsoft Windows Bitmap .BMP). The following is
the Blueprint output from the Future Pinball demo table Sci-Fi
Classic: (much smaller than the real output)
Clicking will exit and return you back to the Table Editor.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Command Line Options

Future Pinball supports the Following Command Line options which


can be used by Front Ends to load and play Future Pinball Tables.

/Open "<table filename>"


This command line switch will load the specified table (which
must be quoted). The full path and file name must be given.

example..

/open "C:\Program Files\Future Pinball\NewTable.fpt"

/Play
The Play command will play the opened table once it has
loaded. If no table is "opened" then this command will have no
effect

example..

/open "C:\Program Files\Future Pinball\NewTable.fpt" /play

/Exit
The Exit command will exit future pinball after the specified table
has been loaded and played (when the user exits from playing
the table) and return back to the calling program (either a front
end or Windows).

example..

/open "C:\Program Files\Future Pinball\NewTable.fpt" /play


/exit

/ArcadeRender
This command line switch makes the Arcade Render Mode
available in the Video Preference dialog. For more information
about setting up Arcade Render then refer to the Video
Perferences section of this manual (link).

example..

/open "C:\Program Files\Future Pinball\NewTable.fpt" /play


/exit /ArcadeRender

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Information

The Table Information allows you to set various information about your table which
is displayed on the initialisation screen when you play your table. The Table
Information dialog also allows you to set the defaults of the fpRam file which
contains the high scores and other game information. (providing the script of the
table uses the appropriate global script variables.

Clicking Table Info (in the Table Menu) will bring up the following dialog;

This will save any changes to the table.

This will Cancel any changes you have made and return back to the
Table Editor.
Table / Author Details
This Allows you to input details about yourself and the table which details
various information out your table (or a table somebody else has done). Most
of this information is displayed on the initialisation screen when a table is first
played.

Table Name

Allows you to give a more descriptive name to your table (instead of the
name property of the Table). This is displayed on the initialisation screen
when you press Play...

Version

Allows you to note the version of your table (ie version 1, beta 2, etc.).
This is also displayed on the initialisation screen.

Table Author

Allows you to note the author(s) of your table. This is also displayed on
the initialisation screen.

Release Date

Allows you to note the release date of your table.


Email

Allows you to leave you email address (if you wish) so anybody can
contact you about your table.

Clicking this button will launch your email program and open up
a blank email to allow somebody to send you comments on your table.

Web Page

Allows you to leave your home page Web page address in case anybody
is interested in visiting it.

Clicking this button will open up the specified web page in your
current web browser.

Description

Allows you to give a 1 line descriptive tag line about your table.

Rule Set

Allows up to 2048 characters (2K) of text which you can use to describe
the rule set for your table.

Loading Picture

Allows you to define a background texture for the loading screen.


Textures are imported into the Table via the Texture Manager (link). If no
texture is selected then the default image will be used.

Text Colour

Defines the colour of the all text drawn (with the exception of the Debug
text window) onto the screen. This includes the initialisation screen,
paused dialogs and high score entry windows.
Non-Volatile Ram Defaults
The values displayed in the dialog are the defaults for the various global
script variables. It does not show you the current values, only those that it will
use if the file is not found (generally the first time you run a table). This of
course also makes sense if you actually use the built-in non-volatile ram
system built into Future Pinball.

You should have an understanding of the appropriate global script


variables as detailed in the global script chapter (link) as well
as being familiar with the new table script framework.

Balls Per Game ( nvBallsPerGame )

Allows you to define how many balls your game will have. You can select
between 1 and 9 Balls per game.

Initial Jackpot ( nvJackpot )

Allows you to define the initial Jackpot of the machine. If you don't wish
to script a jackpot into your table, then you will not need to set this value.

/ High Score Defaults ( nvHighScoreName1 -


nvHighScoreName4 / nvHighScore1 - nvHighScore4 )

Future Pinball contains a Built-In High Score system to help provide High
Score Support to all tables with minimal scripting required. This keeps a
High Score Table (of 4 entries) for the current table.

Initials
Allows you to assign the default initials (a maximum of 3
alphanumeric characters) for the top 4 high scores.

Score

Allows you to assign the default scores for the top 4 high scores. You
should always ensure that the values to put into these fields are
achievable on your table.

Special Score Field


Future Pinball also allows for a special High Score entry for things like
Loop Champion, Highest Jackpot Awards, Number of times the user
kicks the machine (or whatever). The special High score is optional
depending on your requirements. Leaving the Title field blank will inform
the game engine that you don't wish to use special high score support.

Title ( nvSpecialHighScoreTitle )

The Title of the Special Score. This is displayed on the High Score
entry screen (if the player beats it) as well as on the paused screen.
As mentioned above if left blank, then the special high score will not
be used in the game engine. This field can be a maximum of 16
characters.
Initials ( nvSpecialHighScoreName )

Allows you to assign the default initials (a maximum of 3


alphanumeric characters) for the special high score.

Value ( nvSpecialHighScore )

Define the default value for the special high score.

Text ( nvSpecialHighScoreText )

Contains the text string which is intended to be a single word version


of the Special Score Title. (ie "Loop Champion" would be "Loops").
This is displayed as a post fix to the Special Score Value on the high
score table.

Clicking this button will delete the .fpRam file which essentially
restores the defaults to the global script variables. Any variable
which is also persisted (such as nvCredits, etc.) will also be reset
(usually to 0).

Object Count
This shows you the maximum number of objects the editor will allow you to
put on a table and how many of those you are using.
Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
The Texture Manager

The Texture Manager allows you to include graphics into your table which can be used for
skinning the models or drawn onto the playfield. Textures MUST be loaded into the current Table
before Future Pinball will be able to use them.

Future Pinball supports 3 graphic formats. .BMP (Windows Bitmap), .JPG and .TGA (True Vision
Targa). .TGA is extremely useful as it can contain alpha information for each pixel allowing for
some very nice transparent/translucent effects.

Textures can either be physically included into the Table file (making the file size bigger) or
Linked to a Future Pinball Resource Library. Libraries allows You (The Table Designer) to use
common resources pooled into a single external file. The benefits of this is that these resources
can be enhanced and all tables which use them will automatically use the latest version.

Libraries are created using the Library Resource Manager (link).

The Maximum Texture size for most video cards is 4096x4096. Textures of this size require huge
amounts of video ram and should be used very sparingly. Future Pinball will ensure that all
textures conform to the maximum allowed size on each machine (as the table is run).

It is important to note that ALL textures should have dimensions which are a power of
two (i.e., 64, 128, 256, 512, 1024, 2048, 4096) for both the Width and the Height of the
texture (though they don't necessary have to be the same). This is a limitation with the
video card and not Future Pinball. If the Texture you wish to add to the table is not of a
power of two, then the Future Pinball will automatically re-scale the image to its nearest
power of 2 dimension when the game is run, so it is best to ensure that all textures
follow these rules as it makes the loading of textures into the video card much faster if it
doesn't have to rescale the image first.

When the Texture Manager is opened it will open up in a new window. This lists the currently
loaded textures that the current table knows about. It also shows a preview of the currently
selected texture.
This window is split up into 4 main sections. The Texture Preview Window, The Texture List,
Adding a New Image and Image Management.

Texture Preview Window


This window shows a full colour preview of the currently selected Texture (if these is no
selected texture, then this bit will be blank). Below the preview window is a smaller
area which will display the Horizontal Texture Coordinate
when the mouse is over this area. The Texture Coordinate is a value from 0.0 to 1.0 which is
used by ShapePoints for Vertical Texture Mapping (where you need to be specific about
what part get displayed between various ShapePoints. (For more information see the
Shape Point section of this Manual)

Texture List
The Texture List shows all of the currently loaded textures this table is able to use (though
this doesn't necessary mean it will use them all but they are available to be used). This
window shows the symbolic name used to reference the Texture, if the texture was actually
used that last time it was run, whether it is linked to a library or not (which means it is loaded
from that library when the table is first loaded into the Future Pinball Editor. If the Texture is
Linked, then it will also show the Linked Details (Library File name and the Texture File
Name within that library).

The Texture list is sorted into Alphabetical order based on the Texture Name

You will first need to select a Texture First before some of the functionality of the Texture
Manager becomes available.

In order for the Used column to be populated the table must first be run. This marks the
textures image used by the table. You can use this information to remove un-needed
textures from your table which will help reduce loading times aswell as memory
requirments. Textures which have been included in Image Lists (see the Image List
Manager (link)) will automatically be marked as being used.

Add New Image


This allows you to Import a NEW texture into the current Table. The Image is
physically imported meaning it will take up space in the Table File. Once an Image has been
imported it is then available for use within the Future Pinball Editor. If you Try and Import the
same image twice, then there will be 2 entries created for it. It is best to 'ReImport' an
already existing Image. You can select multiple files to import multiple items at once.

Selecting this button will bring up a standard Windows File Requestor which will allow you to
specify which Image File to load. Only .BMP, .JPG and .TGA files will be allowed to be
loaded.

This will Import an Image stored in a Future Pinball Resource Library. As with
Import, the Image will be physically imported. Selecting this button will bring up the following
File Requestor asking which Library to load the Image from.
Selecting the Library you want to use, the Texture Manager will then display the contents of
that library (Note. It will only display contents of the same type as what you are wanting to
import (in this case Images). Although the library can contain other types (i.e. Sounds,
Models) only Images in this instance will be listed.

Use your Mouse to Select which Images to Import into your table. You can HOLD DOWN
Control to select Multiple Images to import at once.

This works exactly the same as , but it will Link to the Image
instead of Physically Importing it. When a user tries to load a table where the library can't be
found, then the following Warning Dialog is displayed. If you are Linking to any non-standard
Libraries (Libraries created by other table developers you must ensure that the users of your
table either have that library or you include that library as part of your table release.
Image Management (For these options to work, a Texture must be selected
from the Texture List)

This will Reimport an Image over the selected Texture. This is mainly for updating
one of your textures when you have changed it with an external graphics package (such as
PaintShopPro, PhotoShop or Gimp). Clicking on this button will bring up the following dialog
which will ask if you are sure you wish to Replace the current texture

Clicking yes will bring up a file requesting asking for the new file. The Texture Manager will
automatically work out if you originally imported the image from your hard drive or a
Resource Library File. You then Re-Import your new Image in the same manner as
described above.

This allows you to remove (delete) a Texture that you no longer need (or wish) to
use. This will make your Table size much smaller. Clicking on this button will bring up the
following dialog which will ask if you are sure you wish to Delete the current texture

The Texture Manager doesn't actually delete the Texture from your Hard Drive (or from a
Resource Library). It only removes it from the Table.

If you HOLD DOWN Control when clicking , then the Texture Manager will Delete
ALL Textures from the Current Table. This is useful if you wish to start again with a full set of
new textures.

This allows you to remove (delete) any Textures which where marked as being
unused the last time the table was run (The unused column will be populated). This will
make your Table size much smaller and increase loading time and memory requirements.
Clicking on this button will bring up the following dialog which will ask if you are sure you
wish to Delete All of the unused textures.
The Texture Manager doesn't actually delete the Textures from your Hard Drive (or from a
Resource Library). It only removes it from the Table.

Will allow you to rename a Textures symbolic name (which is used throughout the
Future Pinball Editor). The currently selected Texture name in the Texture List will be
highlighted and you can type in a new name. Press Enter to Finish off.

This allows you to Export (i.e. Save to Disk) a Texture. Use this when you wish the
change the graphics of an existing Image where you don't have the original image on your
hard disk.

Image Information (For this information to be displayed, a Texture must be


selected from the Texture List)

Selecting a texture in the Texture List will show you the Width and Height (in pixels) and the
amount of Video Ram (VRAM) required for this texture (once it has been converted to a
format compatable with your video card). This allows you to see at a glance the
requirements for each texture on the video card.

As Future Pinball (and computer games in general) require power of 2 textures, if the
texture is not a power of 2 then the Image Information panel will show you the sizes (in
brackets) that Future Pinball will resize your image in order to comply with the power of 2
rule. Resizing the image does slow down Future Pinball and only a quick approximate
resize algorithm is used. For best results it is recommended to use an external Image
manipulation program to resize the image appropriately.

Colour to make Transparent


If you wish to make part of the Texture Transparent when rendering during game
play, then this Button will allow you to select which colour to use. NOTE: This is only
applicable for Bitmap (.BMP) files as it requires an EXACT colour match. Jpg files tend to
alias the colour therefore an exact match isn't possible. TGA files can have a more detailed
Alpha map which gives much better control of what to make Transparent as well as how
transparent to make it (though not ALL table Objects support TGA Alpha mapping).

Clicking on the Transparent Colour Selection will bring up the Colour Selection Dialog.
Choose the Colour you would like to use.

Extra Flags

This option allows you to specify if the texture is allowed to use any hardware
ST3C compression (on your video card or the video card of the person playing your table) if
the ST3C option is enabled in the Video Preferences of Future Pinball. ST3C compression
is good for ensuring that the texture doesn't require as much video memory (for video cards
with a small amount of RAM) but it does reduce the quality of the texture. For the majority of
textures this isn't really noticeable (certainly JPG and textures used as the back of the table)
but for the Main Playfield Texture I recommend that this option be turned off as you will want
the best quality rendering for the main Image.

This option allows you to specify to specifically disable any texture filtering
applied on a per texture basis. This is extreamly important if the texture is to be used on the
DMD display object (either type). Without disabling the filtering the image may be blurred
(depending on the person playing your table video preferences)

Without (uses Filtering specified in Video


With Filter Disabled
Preferences)
This will exit the Texture Manager Dialog and return back to the Table Editor.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
The Sound and Music Managers

The Sound Manager (and Music Manager) allows you to include


sounds/music into your table which can be used to greatly enhance
the your table for the player by letting you play lots of special effect
sounds or theme music.

This Section of the Manual covers both the Sound and the Music
managers as they are essentially the same, differing only in the type
of data they allow you to include with your table. If you are familiar
with the Texture Manager, the Sound/Music managers will be very
simple to use as they work in exactly the same fashion.

Future Pinball support the .WAV (Windows Wave) and .OGG (Ogg
Vorbis) format for Sound effects and the .MP3 and .OGG formats for
Music Files. For Music I recommend that the Ogg Vorbis format be
used as it compacts better than MP3 while providing better sound
quality. It also Loops a lot better than MP3 making it more suitable
for theme music which plays repeatedly in the background. Ogg
Vorbis will also compress Sound Effects much better than the WAV
format.

Sounds and Music can either be physically included into the Table
file (making the file size bigger) or linked to a Future Pinball
Resource Library. Libraries allow You (The Table Designer) to use
common resources pooled into a single external file. The benefits of
this is that these resources can be enhanced and all tables which
use them will automatically use the latest version.

Libraries are created using the Library Resource Manager (link).


When the Sound/Music Manager is opened it will open up in a new
window. This lists the current sound / music files that the current
table knows about.

Sound /Music List


The Sound / Music List shows all of the currently loaded sounds
(or Music files) this table is able to use (though this doesn't
necessary mean it will use them all but they are available to be
used). This window shows the symbolic name used to reference
the item, whether it is linked to a library or not (which means it is
loaded from that library when the table is first loaded into the
Future Pinball Editor. If the file is Linked, then it will also show
the Linked Details (Library File name and the Sound / Music File
Name within that library).
The List is sorted into Alphabetical order.

You will first need to select a Item First before some of the
functionality of the Sound / Music Manager becomes available.

Extra Flags
There are currently no Extra Flags for Sounds / Music Files at
the moment.

Sound /Music (For these options to work, a item must


be selected from the Sound / Music List)

This will preview (i.e., play) the currently selected item.


You can alternatively double click the item with the mouse.

Will stop any sound (mainly for long Music files) being
currently played.

Add New Sound /Music


This allows you to Import a NEW Sound or Music
File into the current Table. The File is physically imported
meaning it will take up space in the Table File. Once a File has
been imported it is then available for use within the Future
Pinball Editor. If you Import the same file twice, there will be 2
entries created for it. It is best to 'ReImport' an already existing
item. You can select multiple files to import multiple items at
once.
Selecting this button will bring up a standard Windows File
Requestor which will allow you to specify which File to load. For
the Sound Manager only .WAV and .OGG files will be allowed to
be loaded. The Music Manager will only allow .MP3 and .OGG
files.

This will Import a Sound / Music File stored in a


Future Pinball Resource Library. As with Import, the file will be
physically imported. Selecting this button will bring up the
following File Requestor asking which Library to load from.

Selecting the Library you want to use, the Sound / Music


Manager will then display the contents of that library (NOTE: It
will only display contents of the same type as what you are
wanting to import).
Use your Mouse to Select which File to Import into your table.
You can HOLD DOWN Control to select Multiple items to import
at once.

This works exactly the same as by it


will Link to the Sound / Music File instead of Physically
Importing it. When a user tries to load a table where the library
can't be found, then a Warning Dialog is displayed. If you are
Linking to any non-standard Libraries (Libraries created by other
Table Developers) you must ensure that the users of your table
either have that library or you include that library as part of your
table release.

Sound Management (For these options to work, an


item must be selected from the Sound / Music List)
This will Reimport a new Sound / Music File over the
selected item. This is mainly for updating an existing item when
you have changed it with an external encoding package
package. Clicking on this button will bring up the following dialog
which will ask if you are sure you wish to Replace the Item.

Clicking yes will bring up a file requesting asking for the new file.
The Sound / Music Manager will automatically work out if you
originally imported the file from your hard drive or a Resource
Library File. You then Re-Import the new File in the same
manner as described above.

This allows you to remove (delete) a Sound/Music file


that you no longer need (or wish) to use. This will make your
Table size much smaller. Clicking on this button will bring up the
following dialog which will ask if you are sure you wish to Delete
the current item.

If you HOLD DOWN Control when clicking , then the


Sound/Music Manager will Delete ALL Sounds (or Music Files)
from the Current Table.
Will allow you to rename a Sound (or Music File)
symbolic name (which is used throughout the Future Pinball
Editor). The currently selected item name in the List will be
highlighted and you can type in a new name. Press Enter to
Finish off.

This allows you to Export (i.e. Save to Disk) a Sound


(or Music File).

This will exit the Sound/Music Manager Dialog and


return back to the Table Editor.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
The Model Manager

The Model Manager allows you to include specially designed pinball


parts (or Models) into your table. Models MUST be loaded into the
current Table before Future Pinball will be able to use them. These
Special Model files have the extension of .fpm (Future Pinball Model).
These Model Files contain all the 3D information for the model, its
collision information, Material Settings and Its Preview Image and are
a custom formation specially designed for Future Pinball.

Model can either be physically included into the Table file (making the
file size bigger) or Linked to a Future Pinball Resource Library.
Libraries allows You (The Table Designer) to use common resources
pooled into a single external file. The benefits of this is that these
resources can be enhanced and all tables which use them will
automatically use the latest version. For Models is it
RECOMMENDED that you always link to the Model Library supplied
with Future Pinball.

If you are familiar with the Texture Manager then the Model manger
will be very simple to use as it works in exactly the same fashion.

Libraries are created using the Library Resource Manager (link).

Currently Future Pinball Models can only be created by the


Development Team. Future versions of Future Pinball will allow you to
create your own models.

When the Model Manager is opened it will open up in a new window.


This lists the current models that the current table knows about.
Model List
The Model List shows all of the currently loaded Models this
table is able to use (though this doesn't necessary mean it will
use them all but they are available to be used). This window
shows the symbolic name used to reference the item, if the
model was actually used that last time it was run, whether it is
linked to a library or not (which means it is loaded from that
library when the table is first loaded into the Future Pinball Editor.
If the file is Linked then it will also show the Linked Details
(Library File name and the Model File Name within that library).

The List is sorted into Alphabetical order.

You will first need to select an Item before some of the


functionality of the Model Manager becomes available.

The Model Preview window shows a small picture of the


currently selected file. If the model doesn't have a preview
picture then this bit of the window is left blank.

In order for the Used column to be populated the table must first
be run. This marks the models used by the table. You can use
this information to remove un-needed models from your table
which will help reduce loading times aswell as memory
requirments.

Add New Model


This allows you to Import a NEW Model into the
current Table. The File is physically imported meaning it will take
up space in the Table File. Once a File has been imported it is
then available for use within the Future Pinball Editor. If you
Import the same file twice then there will be 2 entries created for
it. It is best to 'ReImport' an already existing item.

Selecting this button will bring up a standard Windows File


Requestor which will allow you to specify which File to load. The
Model Manager only allows .FPM (Future Pinball Model) files to
be loaded. You can select multiple files to import multiple items at
once.

This will Import a Model File stored in a Future


Pinball Resource Library. As with Import, the file will be physically
imported. Selecting this button will bring up the following File
Requestor asking which Library to load from.
Selecting the Library you want to use, the Model Manager will
then display the contents of that library (Note. It will only display
contents of the same type as what you are wanting to import).
Use your Mouse to Select which File to Import into your table.
You can HOLD DOWN Control to select Multiple items to import
at once.

This works exactly the same as by it


will Link to the Model File instead of Physically Importing it.
When a user tries to load a table where the library can't be found
then a Warning Dialog is displayed. If you are Linking to any non-
standard Libraries (Libraries created by other Table Developers)
you must ensure that the users of your table either have that
library or you include that library as part of your table release.

Model Management (For these options to work, an


item must be selected from the Model List)

This will Reimport a new Model File over the selected


item. Clicking on this button will bring up the following dialog
which will ask if you are sure you wish to Replace the Item.

Clicking yes will bring up a file requesting asking for the new file.
The Model Manager will automatically work out if you originally
imported the file from your hard drive or a Resource Library File.
You then Re-Import the new File in the same manner as
described above.

This allows you to remove (delete) a Model file that you


no longer need (or wish) to use. This will make your Table size
much smaller. Clicking on this button will bring up the following
dialog which will ask if you are sure you wish to Delete the
current item.
If you HOLD DOWN Control when clicking then the
Model Manager will Delete ALL Models from the Current Table.

Will allow you to rename a Models symbolic name


(which is used throughout the Future Pinball Editor). The
currently selected item name in the List will be highlighted and
you can type in a new name. Press Enter to Finish off.

This allows you to remove (delete) any Models which


where marked as being unused the last time the table was run
(The unused column will be populated). This will make your
Table size much smaller and increase loading time and memory
requirements. Clicking on this button will bring up the following
dialog which will ask if you are sure you wish to Delete All of the
unused models.

The Model Manager doesn't actually delete the Models from your
Hard Drive (or from a Resource Library). It only removes it from
the Table.

This allows you to Export (i.e. Save to Disk) a Future


Pinball Model
This will exit the Model Manager Dialog and return
back to the Table Editor.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
The Image List Manager

The Image List Manager allows you to create Animated Image Lists that
can be use for the Overlay Table object. These lists contain references
to Images that have been included into your table via the Texture
Manager. For More Information about Importing Images please see the
Texture Manager (link). It is not necessary that the dimensions of each
image being placed in the list be the same, as the objects which use the
Image List will scale the image to be correct.

Image Lists (and the Overlay or STA objects) allow you to create Page
Flipping Animations on either the Backbox (Translite) or the HUD
(Screen Overlay). For more information on this refer to the OverLay
Object (link) and/or the STA object (link).

When the Image List Manager is opened it will open up in a new


window. This lists the current Image Lists that the current table knows
about as well as a preview Animation of the selected List. It also shows
the number of Images which makes up each Image List.
This Dialog allows one to Create A New Image List, Edit an Existing
List, Rename a List and Delete a List.

Create New
Pressing the button will create a NEW Image list. A
Default Name of "ImageList1" will be given to the new list so you
may want to give it a more descriptive name. If "ImageList1"
already exists, then "ImageList2" is used and so on.

As there are no images in the new list, the Animation Preview


window is left blank.

Edit... (For this button to work, an item must be selected from


the Image List)

The Button allows you to edit the selected Image List.


This will bring up an entirely new window which then gives you
options to select which images (from the Texture Manager) you
want in the list and order of each of those Images.
This Dialog is split into 2 parts, The Master Texture Selection and
the Included Image List.

The Left Master Texture Selection List displays all the Textures
(Images) that have been loaded into the current table (via the
Texture manager). If you select an Item from this list, it will display
a small preview picture of that Texture.

Clicking on the Button will include the selected Texture


into the Image List being Edited. The Same Texture can be
included multiple times if the desired Animation requires it. Each
Texture included in the Image List doesn't have to be the same
dimensions as all the other Textures as Future Pinball will
automatically scale it (at runtime) to made the target size (the Size
of the Overlay object). If a image is currently selected in the
'included' list then the image is added at that position otherwise it
will be added to the end of the list.

The Right Included Image List displays all of the Textures that the
current Image List will use (as well as the frame index of each
Image)

Will remove the selected Texture from the Current


Image List
Will move the selected Texture (or Textures if Multiple
are selected) from the Current Image List up one Position. This is
so you can change the order of Images used in the Resulting
Animation.

Will move the selected Texture (or Textures if Multiple


are selected) from the Current Image List Down one Position. This
is so you can change the order of Images used in the Resulting
Animation.

This will exit the Image List Editor Dialog and return
back to the Image List Manager.

Rename (For this button to work, an item must be selected


from the Image List)

Will allow you to change an Image List's symbolic name


(which is used throughout the Future Pinball Editor). The currently
selected item name in the List will be highlighted and you can type
in a new name. Press Enter to Finish off.

Delete (For this button to work, an item must be selected from


the Image List)

The button allows you to remove (delete) an Image List


that you no longer need (or no longer wish) to use. Clicking on this
button will bring up the following dialog which will ask if you are
sure you wish to Delete the current item.
Ok
This will exit the Image List Manager Dialog and return
back to the Table Editor.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
The DMD Font Manager

The DMD Font Manager allows you to include specially created


DMD Font files (created by the Font Editor within Future Pinball) for
use the DMD Display Objects.

DMD Fonts can either be physically included into the Table file
(making the file size bigger) or linked to a Future Pinball Resource
Library. Libraries allow You (The Table Designer) to use common
resources pooled into a single external file. The benefits of this is
that these resources can be enhanced and all tables which use them
will automatically use the latest version.

Dmd Fonts are created using the DMD Font Editor (link) and have a
.dmdf extention.

Libraries are created using the Library Resource Manager (link).

When the DMD Font Manager is opened it will open up in a new


window. This lists the DMD Font files that the current table knows
about.
Font List
The Font List shows all of the currently loaded DMD Font this
table is able to use (though this doesn't necessary mean it will
use them all but they are available to be used). This window
shows the symbolic name used to reference the item, whether it
is linked to a library or not (which means it is loaded from that
library when the table is first loaded into the Future Pinball
Editor. If the file is Linked, then it will also show the Linked
Details (Library File name and the DMD Font File Name within
that library).

The List is sorted into Alphabetical order.

You will first need to select a Item First before some of the
functionality of the DMD Font Manager becomes available. A
Preview is shown of the currently selected DMD Font.

Add New Font


This allows you to Import a NEW DMD Font File
into the current Table. The File is physically imported meaning it
will take up space in the Table File. Once a File has been
imported it is then available for use within the Future Pinball
Editor (specifically the DMD Display objects). If you Import the
same file twice, there will be 2 entries created for it. It is best to
'ReImport' an already existing item. You can select multiple files
to import multiple items at once.

Selecting this button will bring up a standard Windows File


Requestor which will allow you to specify which File to load.
Only .DMDF files will be allowed to be loaded.

This will Import a DMD Font File stored in a Future


Pinball Resource Library. As with Import, the file will be
physically imported. Selecting this button will bring up the
following File Requestor asking which Library to load from.
Selecting the Library you want to use, the DMD Font Manager
will then display the contents of that library (NOTE: It will only
display contents of the same type as what you are wanting to
import).
Use your Mouse to Select which File to Import into your table.
You can HOLD DOWN Control to select Multiple items to import
at once.

This works exactly the same as by it


will Link to the DMD Font File instead of Physically Importing it.
When a user tries to load a table where the library can't be
found, then a Warning Dialog is displayed. If you are Linking to
any non-standard Libraries (Libraries created by other Table
Developers) you must ensure that the users of your table either
have that library or you include that library as part of your table
release.

Font Management (For these options to work, an


item must be selected from the Font List)

This will Reimport a new DMD Font File over the


selected item. This is mainly for updating an existing item when
you have changed it with an external encoding package
package. Clicking on this button will bring up the following dialog
which will ask if you are sure you wish to Replace the Item.

Clicking yes will bring up a file requesting asking for the new file.
The DMD Font Manager will automatically work out if you
originally imported the file from your hard drive or a Resource
Library File. You then Re-Import the new File in the same
manner as described above.
This allows you to remove (delete) a DMD Font file
that you no longer need (or wish) to use. This will make your
Table size much smaller. Clicking on this button will bring up the
following dialog which will ask if you are sure you wish to Delete
the current item.

If you HOLD DOWN Control when clicking , then the


Font Manager will Delete ALL DMD Fonts from the Current
Table.

Will allow you to rename a DMD Font symbolic name


(which is used throughout the Future Pinball Editor). The
currently selected item name in the List will be highlighted and
you can type in a new name. Press Enter to Finish off.

This allows you to Export (i.e. Save to Disk) a DMD


Font.

This will exit the DMD Font Manager Dialog and


return back to the Table Editor.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
The Light List Manager

The Light List Manager allows you to create the Light Lists required
by the Light Sequencer. These lists contain which Lights the Light
Sequencer should use when processing its built-in effects. The Light
Sequencer basically performs the full table Light Shows seen in
many commercial pinball games. For more information on this, refer
to the Light Sequencer Object.

All Objects which have a Bulb (Lights, Flashers, EM Reels,


Bumpers, etc.) can be included in each list.

When the Light List Manager is opened it will open up in a new


window. This lists the current Light Lists that the current table knows
about as well as the number of Lights which makes each List.

This Dialog Allows one to Create A New Image List, Edit an Existing
List, Rename a List and Delete a List.
Create New
Pressing the button will create a NEW Light list. A
Default Name of "LightList1" will be given to the new list so you
may want to give it a more descriptive name. If "LightList1"
already exists, "LightList2" is used and so on.

Edit... (For this button to work, an item must be selected from


the Light List)

The Button allows you to edit the selected Light List.


This will bring up an entirely new window which then gives you
options to select which Lights (Placed on the Table or
Backboard by you in the Table Editor) you want in the list and
order of each of those Items.
This Dialog is split into 2 parts, The Master Light List and
Included Lights.

The Left Master Light Selection List displays all the Lights (or
objects which have a bulb) that have been created on the
current table. It also shows the Location of the Light (either the
Playfield or the Backboard) and if the Light is classified as being
a G.I. (General Illumination) object. This information will make it
easier to help plan which light to include depending on the
desired effect you wish the Light Sequencer to do.

Clicking on the Button will include the selected


Light into the Light List being Edited. When a Light has been
included it will be removed from the master list as the same light
cannot be included twice.

The Right Included Light List displays all of the Lights in the
current Image List (as well as the location information as
described above)

Will remove the selected Light from the Included


List. Once the Light has been excluded it will be available to be
selected again in the Master list.

Will move the selected Light (or Lights if Multiple


are selected) from the Current List up one Position. This is so
you can specify a certain order of lights to be processed by the
Light Sequencer (as it can run a custom defined pattern based
on the order of lights)

Will move the selected Light (or Lights if Multiple


are selected) from the Current List Down one Position.

This will exit the Light List Editor Dialog and return
back to the Light List Manager.

Rename (For this button to work, an item must be selected


from the Light List)

Will allow you to rename a Light List's symbolic name


(which is used in the Light Sequencer Object). The currently
selected item name in the List will be highlighted and you can
type in a new name. Press Enter to Finish off.

Delete (For this button to work, an item must be selected


from the Image List)
The button allows you to remove (delete) a Light List
that you no longer need (or wish) to use. Clicking on this button
will bring up the following dialog which will ask if you are sure
you wish to Delete the current item.

Ok
This will exit the Light List Manager Dialog and
return back to the Table Editor.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Library Resource Manager

The Library Resource Manager allows you to create and modify Future
Pinball Libraries. Libraries allow you (the Table Designer) allow you to
use common resources pooled into a single external file. The benefit of
this is that these resources can be enhanced and all tables which use
them will automatically use the latest version.

Libraries also allow you to separate your graphics, sounds, models and
music from the main table file. Thus if used right items which don't
change much (graphics, sounds) can be stored in a library and if you
need to make any changes to the table design or the script then you will
only need to let people have the updated table file (providing they
already have the libraries for your table)

Future Pinball comes with a few libraries which you can use. These
libraries contain common textures needed by the various objects,
common sounds and all the models available to be used on your table.
It is best not to modify the default libraries which come with Future
Pinball (they start with the letters 'fp') as these will be updated with each
release of the program. Although we split our various items into
separate Libraries, you don't need to do this as libraries support mixed
item types (images, sounds, etc.)

You should have an understanding on the Texture, Sound, Model and


Font managers before reading this chapter. It is important to note that
Libraries (as mentioned above) are external files to the table files. If
your table uses Items in an external library then you will need to reload
your table for those changes to take effect. Future Pinball will only
check for links to libraries as it loads the table.

Library files (which end in a .fpl file extension) can be located either in
the Libraries sub-directory under the main Future Pinball Directory or
they can be in the same directory as the table you are trying to load.
When the Library Resource Manager is opened it will open up in a new
window.

This Section Describes the Menu options available to the Library


Resource Manager.

File

New
Will create a new library file. You will be prompted to
enter the filename of the new library.

This will create a new Library file (with the filename


you just asked to create). The contents of the File will
be empty (i.e., it doesn't have any items in it).

Open...

This will allow you to open an existing library for


editing.
Close

Will close the currently opened library file. Please


note that any changes that are made to a library are
done LIVE, that is, they take effect immediately.
Closing a file is only required if you wish to open
another library for editing.

Save As...

Allows you to save the currently opened Library


under a new filename.

Exit...

Exits the Library Resource Manager and returns you


back to the table editor.
Image Preview
This window shows a full colour preview of the currently selected
Texture/Image.

Library Contents
The Library List shows all of the items in the currently opened
Resource Library File. This window shows the symbolic name used
to reference the item, the Item type (which is either a Image,
Sound, Music or PinModel) and the original import path.

The list is sorted into Alphabetical order based on the Name

You will first need to select a Item before some of the functionality
of the Library Resource Manager becomes available.

Add New Resource


This allows you to Import a Texture into the Library.
Selecting this button will bring up a standard Windows File
Requestor which will allow you to specify which Image File to load.
Only .BMP, .JPG and .TGA files will be allowed to be loaded.

As covered in the Texture Manager (link) It is


important to note that ALL textures should have
dimensions which are a power of two (i.e., 64,
128, 256, 512, 1024, 2048, 4098) for both the
Width and the Height of the texture (though they
don't necessary have to be the same). This is a
limitation with the video card and not Future
Pinball. If the Texture you wish to add to the
Library is not of a power of two then the Future
Pinball will automatically re-scale the image to
its nearest power of 2 dimension when the game
is run. So it is best to ensure that all textures
follow these rules as it makes the loading of
textures into the video card much faster if it
doesn't have to rescale the image first.

This allows you to Import a Sound into the Library.


Selecting this button will bring up a standard Windows File
Requestor which will allow you to specify which File to load (or you
can select multiple files to import). Only .WAV and .OGG files will
be allowed to be loaded.

This allows you to Import a Music File into the


Library. Selecting this button will bring up a standard Windows File
Requestor which will allow you to specify which File to load (or you
can select multiple files to import). Only .MP3 and .OGG files will
be allowed to be loaded.

This allows you to Import a Future Pinball Model File


into the Library. Selecting this button will bring up a standard
Windows File Requestor which will allow you to specify which File
to load (or you can select multiple files to import). Only .FPM files
will be allowed to be loaded.

This allows you to Import a Future Pinball DMD Font


File into the Library. Selecting this button will bring up a standard
Windows File Requestor which will allow you to specify which File
to load (or you can select multiple files to import). Only .DMDF files
will be allowed to be loaded.
This allows you to Import a Future Pinball Visual
Basic Script File into the Library. Selecting this button will bring up
a standard Windows File Requestor which will allow you to specify
which File to load (or you can select multiple files to import). Only
.VBS files will be allowed to be loaded.

One Button Update


This button will check to see if any of the files stored
in the library have newer versions (ie a more recent time stamp) on
your hard drive. It checks for the file using the original import path
to see if the file exists and is newer; if so it will bring up the
following message window:

This will allow you to re-import the item over the one in the library.
Clicking Yes will update the library while clicking No will skip this
item. When all the items in the library have been check the
following dialog will be displayed telling you how many items where
updated.

Obviously this function will only work if you have the original source
material used to create the library in the first place, but it's a very
quick way to update the entire library at once.
Resource Management (For these options to work,
a Item must be selected from the Library Contents List)

This allows you to remove (delete) a resource that you no


longer need (or wish to use). Clicking on this button will bring up
the following dialog which will ask if you are sure you wish to
Delete the current item.

Will allow you to rename a Resource's symbolic name


(which is used throughout the Future Pinball Editor). The currently
selected resource's name in the Contents List will be highlighted
and you can type in a new name. Press Enter to Finish off.

This allows you to Export (i.e. Save to Disk) a resource.


Use this when you wish the change the resource where you don't
have the original resource on your hard disk.

This exits the Library Resource Manager and returns


you back to the table editor.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
The Font (DMD) Editor

This part of the manual provides a simple overview of the DMD Font Editor and the functionality.
Dmd Fonts are required by the Dmd Display Object.

When you first open up the Font Editor, it will open up the in a blank state (i.e., no font has been
loaded).

Loading one of the Future Pinball Font Files (File / Load) that comes with Future Pinball will activate
all of the controls and display something similar to the following picture;
The Editor is made up out of the following major components:

Top Menu Bar

This Section Describes the Menu options available to the Font Editor.

File

New

Will Create a New DMD Font (blank) for you to start working with.

Open...

Will Open up an existing Future Pinball Dmd Font. A standard windows File
Requestor will ask you for the dmd font file name to load. Future Pinball DMD
Fonts have the file extension of .dmdf

Dmd Fonts are named after their width and height and if they are proportional (p)
and include an outline or not (o).
Close

Will Close the currently active dmd font. If the font has been changed but not
saved, the editor will ask if you wish to save the font.

Save (or Control + S)

Will Save the font to disk. If you have created a new font (and thus it hasn't been
saved to disk previously), Future Pinball will ask you for a file name to save the
font to.

Save As...

This allows you to save the currently active table under a new file name.

Special

Copy All Upper to Lower

This will copy all UPPER case character (ie A - Z) to lower case a - z. As most
Pinball DMDs only use upper case characters this allows you to use lower case
letters in the script (when controlling the dmd object) without the character not
displaying. Selecting this option will bring up the following confirmation dialog;
Main Font Edit Window
This is the main window is which you use to draw the individual pixel components of the dmd
font (for the current selected character).

You use the Left Mouse Button to draw the


currently selected DMD Colour. The Right Mouse
button will erase the current cell colour (turn it
OFF).

The Proportional Slider (and the Red Guide Line)


allows you to define the current proportional Width
of the Character which allows you to place
characters closer to each other irrelevant to the
actual font width. Width and Heights are limited to
between 5 and 32 dots.

The Font Size window allows you to specify the


height and width (in dots) for the dmd font.
Although the height of the font is fixed, each
character can have a definable proportional width.

Clicking the Reset Proportional Widths button


will allow you to reset any custom widths you have
to specified (per character) back to the maximum
allowed. This will bring up a confirmation dialog;

Character Preview

The Character Preview window allows you to select which character


between 'space' (32) and '~' Tilde (126) to define the shape of in the
main edit windows (above).

A Small and Normal Sized preview is displayed of the character.

The Navigational buttons allow you to select the next/previous


character to edit. The << >> buttons move 10 characters at a time for
faster navigation.
Draw Colour

The Current draw colour is selected by the clicking on the brightness


radio button . The Future Pinball DMD has 4 lit shades (intensity), the
OFF state and a special Mask marker. This Mask shade allows you to
mark a dot permanently off. Because DMD Fonts are rendered over any
background dmd image (in the dmd object) then any OFF shades will
show any background image data. By using the Mask you can force the
Dot to be turned off which can be used to give a font an outline (this is
covered below). Mask dots are draw with a X.

Clicking on the Preview Colour Box will bring up a standard


colour selector which allows you to select the preview colour for the
DMD font. It is very important to note that you are not actually drawing
the dmd font data in that colour. You are only specifying the shade
(intensity) of each dot. The actual DMD colour is selected in the the
DMD display object.

Character Editing

Editing Buttons
Button Description

Clear Clears all the current characters dots to OFF.

Undo the last change made to the current character.


Undo
Note that there is only 1 undo level.
Copy Copy the current character into the copy buffer.
Paste the copy buffers contents to the current
Paste
selected character.
Flip X Flip the current character on the X axis.
Flip Y Flip the current character on the Y axis.
Inverts the current characters Dot intensities. ie 100%
Inverse will be swapped with OFF, 80% will become 40%.
The Mask is not changed.

Rotate
Rotates the current Characters dots in the direction clicked. Dots which
are rotated off the character will appear at the opposite side.

Test Dmd Window

The Test DMD Windows will display a preview of the


DMD font (on a 128x32 dot matrix) so you can check
how your font will look.

You can change the text which is displayed via the


Text to Display Edit box

The Image check box will put a pattern behind the


text so you can see how any masking will work when
overlapped over a background image.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
The Script Editor

The Script Editor allows the Table Script (Visual Basic Scripting
or VBS) to be Created and Modified for the Current Table. This is
the main core of the table logic and allows the Table Creator to
create the rules which govern how the pinball plays. This section
of the manual only describes the functionality of the Script Editor
and not How to Script.

When the Script Editor is opened it will open up in a new window. This
Displays the VBS Script of the currently active table. The editor colour
codes the syntax of the script to allow for more easier reading of the
script.

The Script Editor contains all the standard editing functions found in most
Text Editors which allows the text to be selected, copied to the clipboard
and pasted from the clipboard

The Script Editor also allows functions to be collapsed (or expanded).


This allows you to hide large subroutines with just a single click in the left
hand margin. Clicking a will cause the current indention level to
collapse and clicking will expand it again.
This Section Describes the Menu options available to the Script Editor

File

Save (or Control + S)


Will Save the Current Table. For more information see the
Save menu item in the Main Editor Window.

Save Script To File...

Not Implemented Yet

Undo (or Control + Z)

Will close the Script Editor window.

Script

The Compile Menu Item (or you can press F7) gives the script to
the Visual Basic Scripting Compiler built into Windows and asks
it to compile it. This allows for "SOME" errors to be found without
having to run the table. The Compile option will ONLY pick up
Language Syntax errors (ie incorrect VBS statements) and not
logical errors (how you use them)

In this example, the "THEN" is missing from the IF statement.

Compiling this script will bring up the following error message


which is displayed in the bottom status bar. The cursor is moved
to the start of the Line which caused the error.

Edit
Undo (or Control + Z)

This will undo any changes you have made (such as


accidentally deleting a line). Pressing this repeatedly will
continue to undo your changes.

Copy (or Control + C)

Will Copy the Currently Highlighted Text (by HOLDING


down Shift and using the Cursor Keys) into the clipboard (A
Temporary storage location)

Cut (or Control + X)

Will Copy the Currently Highlighted Text into the clipboard


and then delete the text. This is useful if you wish to move a
Subroutine from one part of the file to another.

Paste (or Control +V)

Will Paste the contents (if any) of the clipboard at the


current location of the cursor (caret)

Find (or Control + F)

This brings up the Find Dialog which allows you to enter


some text to search for. If there is some text already
highlighted it will use this as the initial string to search for.
will find the next occurrence of the search string.

will exit the Replace Dialog

Find Next (or F3)

If you exit the Find Dialog, then this option will use the last
known search parameters without having to bring up the
dialog again. (its a quick search)

Replace (or Control + H)

Will bring up the Replace dialog which allows you to


substitute one string for another. As with the Find Dialog,
any currently highlighted text will be used as the initial
search (find) string.

will search for the next occurrence of the search


string.

will replace the FOUND search string with the new


string.

will find and replace ALL occupancies in the script.


will exit the Replace Dialog

View

Line Numbers

Will Display Line Numbers in the Left Margin.

Expand All

Will Expand any functions and subroutines which are


currently Collapsed. Same as Clicking , but will process
the entire script

Collapse All

Will Collapse ALL functions and subroutines in the script.

Table

Play Table (or F5)

Will start playing the table

Play Table with Debug (or F9)

Will start playing the table but will also display the Debug
Window which displays any text given to it via the
AddDebubText script command. For more information see
the Global Scripting Commands Chapter

Preferences

The Script Editor in Future Pinball can be customised to suit


your own styles and tastes. This includes changing the
Automatic Indentation Tab spacing, the font (and size of the font)
used to draw the script as well as any of the script colour
formatting.

Clicking on Editor Options.. will bring up the following dialog:

Text Formatting

Will allow you to change the Tab Spacing used for any
Indentation.
Allows you to select the font used as well
as any font attributes (style, size etc) used to display the script.
Clicking on this will bring up the Font Selection Dialog which
displays the fonts currently installed in your Windows Font
directory. Select the Font you wish to use and click

Colour Formatting

Clicking on any of the Colour Selection boxes will bring


up the Colour Selection Dialog. Choose the Colour you would
like to use. The Sample Layout window will automatically update
which each colour change.
(Preset Styles) Will bring down a list of a few
preset styles built into Future Pinball.

Will Exit the Script Editor Preferences Dialog and write


any change you made to the Windows registry so they are used
next time.

Will Exit the Script Editor Preferences Dialog without


making any changes to the script editor defaults.

Help

Open Manual... (or F1)


Opens this manual.

Open Visual Basic Scripting Manual (If Available)... (or F2)

Opens this Visual Basic Scripting Manual which you can


download from the Microsoft Web site (link). You should
copy the SCRIPT56.CHM file which comes with the
Microsoft download to the Help Sub-Directory of Future
Pinball. If Future Pinball can't find this file, then selecting
this (or pressing F2) will have no effect.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Scripting Basics

This chapter is here to help you learn some of the basics when scripting a table for Future
Pinball. Table logic is scripted in Visual Basic Scripting Language (or VBS for short) via the
Microsoft Scripting Technologies built into Windows XP / 2000. Scripting is designed to be
simple but flexible enough to allow a wide vararity of Original Games to be created. Only a
limited subset of the Visual Basic Scripting Language is used as a lot of extra functionality is
provided by the game engine.

Unfortunately we can't teach you how to script. We can guide you by providing some helpful tips
as well as sample scripts. You can also look though the demo Sci-Fi Table to see how we have
scripted parts of the table as well as the new table script which provides a nice simple 4 player
frame work to use as a basis for your own game.

You can also download a Visual Basic Scripting Help file from Microsoft (link) which may help
you learn the language as well as some of the function calls which are built in to the language.
This help file is very detailed and hence may be complex to some people. It also covers a lot of
areas in the language that Future Pinball does not support, including advanced functions such
as Dictionaries, FileSystemObjects, and the Script Encoder downloadable from Microsoft's Web
Site.

Don't forget that Future Pinball is a Game Construction kit. It requires knowledge of Table
Design, Programming and Graphics. If you are unsure in some areas, then you might want to
join somebody else on the Forum and create a table together using skills that more people can
bring to the table design process.

Script Structure
The Scripting used in Future Pinball is event based. In other words, the script is only called
when something happens on the table (like when the ball hits a target) or for documented
global script events (like the user pressing a key on the keyboard). These are called
'Events'. The script has no main-line (which is normally common in most computer
programming languages) and only runs individual subroutines when an event occurs. If
multiple events happen at once, then the corresponding script subroutine will be called one
at a time. Thus you can be assured that only one part (subroutine) of your script is being run
at any one point.

Visual Basic Script puts these events into Subroutines. These events are detailed in the
Global Script Chapter (link) or in the various table component chapters. You can then
program the script to handle those events.

For Example:

' The User Has Pressed A Key on the Keyboard...


'
Sub FuturePinball_KeyPressed(ByVal KeyCode)
' The Player wants to launch the ball
If (KeyCode = GetKeyCode(PlungerKey)) Then
MyAutoPlunger.SolenoidPulse()
End If
End Sub

or:

Sub MyDropTarget1_Hit()
' do something
End Sub

As mentioned above it is best to look though the example scripts throughout this manual as
well as the sci-fi / new table scripts supplied with Future Pinball.

Variables
Variables are used to hold values or data that your program can use in the script. These
variables must be defined at the beginning of the script. The DIM script command does this.
Thankfully VBS doesn't require you to specify the type (ie number, string, boolean) of the
variable but you should ensure that if you treat a variable as a number (or whatever) you
continue to do so though the entire script.

Script Example:

Dim MyScore
Dim MyText

' The Method Is Called Immediately the Game Engine is Ready to


' Start Processing the Script.
'
Sub FuturePinball_BeginPlay()
' Initalise the MyScore variable
MyScore = 0
' and a text variable
MyText = "Future Pinball"
End Sub

There are also several predefined global variables, detailed in the Global Script Chapter
(link), which can be used in your script.
Accessing Table / Translite Components.
Most Objects that you can create on your table (or backglass) ie, Flippers, Kickers,
Plungers can be accessed in the script. You do this by using the name given to the
respective object in the Table Editor for the Name property field. This name should be
unique for the table (ie not used for any other object) and must not contain spaces.

Example name property;

Each object accessable by the script may have several properties and methods (functions)
which can be called from the script. Properties allow you to change characteristics of the
object and methods allow you to get the object to perform some sort of action. You will need
to refer to the appropriate object help chapter as every object is different but Future Pinball
does provide a common interface across all objects to help simplify what you need to
remember.

Script Example: calls the SolenoidPulse() method for the object on your table called
MyFlipper;

MyFlipper.SolenoidPulse()

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Global Script Commands and Variables

Future Pinball contains many Methods and built-in Variables in the Game Engine which you can
use to greatly simplify the scripting required for each table. This section details the Global Script
commands that you can use.

This section describes the global scripting methods (or commands) which are available for
you to use in the creation of your game.

BeginGame()
This method should be called each time the script wishes to start a new game. This will
clear the nvScore and nvSpecialScore variables (to zero) and ensure the camera is
looking at the right place. It also sets the fpGameInPlay to True. The Tilt/Nudging
mechanism will call the script while this flag is True.

EndGame()
This method should be called when a game has been finished. It sets the fpGameInPlay
to False.

LookAtPlayfield()
This method forces the camera back to its normal operational mode (where it follows the
ball on the playfield). Use this after using the LookAtBackbox() method.

LookAtBackbox()
This method changes the camera so it looks at the backbox instead of the playfield. This
is useful if you whish to show off some backglass animation or you have coded up your
own high score entry routines which use one of the built-in display types. This acts the
same as if the user had pressed TAB but it forces the camera change. You must issue a
LookAtPlayfield() command to return the camera to the playfield when you have
finished doing what you want the user to see on the backbox. Pressing TAB will not
change the camera angle. A lot of users may not like the camera being forcibly changed
on them so only use this when absolutely necessary.

LoadExternalScript( <String> Scriptname )


This allows you to load an external script from either a Future Pinball Library or from the
disk. If the script is being loaded from disk, then script can either be in the current
directory (where the table was loaded from) or the scripts / tables sub-directories in the
main Future Pinball installation directory. In order to load the script from a library then the
library name must also be given as part of the Scriptname path.

The Visual Basic Script command ExecuteGlobal must be used to actually parse and
load up the script into the Visual Basic Scripting Language. After the script has been
loaded then you can call any functions or subroutines in the script as you would
normally.

Script Example: load a script from the fpScripts.fpl library;

' Load myscript from the fpScripts library


ExecuteGlobal LoadExternalScript ("fpScripts.fpl\myscript")

or to load the same script from the disk.

' Load myscript from the disk


ExecuteGlobal LoadExternalScript ("myscript.vbs")

GetKeyCode( <Enumeration> fpKeyCode )


This function returns the KeyCode assigned to the user definable game keys (Left
Flipper, Right Flipper etc). These keys are set in the Game Key Preferences Dialog
(link). You should always use this function to get the currently assigned key so the user
can change their keyboard preferences without having to worry about the table not
working (if the table author has used hard coded keys)

fpKeyCode can be one of the following:

LeftFlipperKey Returns the Keycode used to activate the Left Flipper.


RightFlipperKeyReturns the Keycode used to activate the Right Flipper.
StartGameKey Returns the Keycode used to Start a Game.
InsertCoinKey Returns the Keycode used when the user wants to insert a coin.
InsertCoinKey2 Returns the Keycode used when the user wants to insert a coin (Slot
2).
InsertCoinKey3 Returns the Keycode used when the user wants to insert a coin (Slot
3).
PlungerKey Returns the Keycode used use the Plunger.
NudgeLeftKey Returns the Keycode used for the Left Nudge
NudgeUpKey Returns the Keycode used for the Forward Nudge
NudgeRightKey Returns the Keycode used for the Left Nudge
Special1Key Returns the Keycode used for any Special Buttons you want on your
machine (such as a magnasave).
Special2Key Returns the Keycode used for any Special Buttons you want on your
machine (such as a magnasave).
ToggleHudKey Returns the Keycode used for Toggling the HUD
LeftFlipper2Key Returns the Keycode used to activate the Second Left Flipper (If
fitted).
RightFlipper2Key Returns the Keycode used to activate the Second Right Flipper. (If
fitted).
TestKey Returns the Keycode used for Putting the machine in Test Mode
ServiceKey Returns the Keycode used for Putting the machine in Service Mode or
Free Credit.

Script Example:

PlaySound( <String> SoundName, <Float> Volume)

This method will play a sound effect which has been imported into the table via the
Sound Manager (link). It uses the symbolic name assigned by the sound manager. Spot
sounds effects greatly enhance the realism of a game. There is no limit of the number of
sounds effects which can be played at once. Once a sound has started there is no way
to stop it. The playsound command is primary designed for mechanical sound effects. If
you want better control of sounds you will need to use the PlayMusic command.

A lot of Table objects in Future Pinball contain an auto-sound properties, but there may
be cases where you decide to script the sound effect.

SoundName Symbolic Music Name of the Sound File to be played.


Volume The Volume (a value between 0.0 (totally silent) and 1.0 (default) (full
volume) of the Sound to be played. Note that the volume is scaled
depending on the master volume set by the user (via the Home and End
keys)

Script Example:

Sub DropTarget1_Hit()
PlaySound "DropTargetDropped"
End Sub

PlayMusic( <Integer> Channel, <String> MusicName,


<Boolean> Repeat, <Float> Volume, <Integer> StartDelay )

The PlayMusic method allows you to play music files which have been imported into the
table via the Music Manager (link). Future Pinball supports up to 8 individual channels
for music. Each channel can be controlled via the script. This allows for multiple music
files to played at once mainly for the purpose of cross fading between music. For
example. A Table may play some in game music but want to fade into some multiball
music which there are multiple balls on the playfield.

Parameters;

Channel Channel number to use. This must be between 1 (default) and 8. It is


recommended that you assign certain channel numbers to different music
types (i.e., 1 for the main game tune, 2 for multiball, 3 for jackpot etc.) as
this will allow you to keep better track of what music is playing at any point)
MusicName Symbolic Music Name of the Music File to be played. The music file must
of been imported into the table via the Music Manager.
Repeat Whether or not (either TRUE or FALSE (default) ) the music will repeat
when it reaches the end.
Volume The Initial Volume (a value between 0.0 (totally silent) and 1.0 (default)
(full volume)) of the Music to be played. Note that the volume is scaled
depending on the master volume set by the user. (via the Page Up and
Page Down keys)
StartDelay Time in Milliseconds (1000 = 1 second) before the Music Starts Playing
(default = 0)

If a parameter is not specified, then Future Pinball will use the default value for that
parameter.

When a Music channel has finished playing (due to the tune not repeating) then the
FuturePinball_MusicFinished() event will be called with the music channel id which
has just stopped.

Script Example:

PlayMusic 1, "MainGameMusic", TRUE

StopMusic( <Integer> Channel )


This method will stop any music playing on the specified Channel.

Channel is the channel number to stop. This must be between 1 (default) and 8.

EffectMusic( <Integer> Channel, <Enumeration>


fpMusicEffect, <Float> Volume, <Integer> Time )
The EffectMusic method allows any music playing to be effected various different ways
such as changing its volume, pausing it etc. You can use combinations of this command
to cross fade music in and out.

Channel Channel number to use. This must be between 1 and 8.


fpMusicEffect
Specifies which effect to process on the specified Channel. It can be one of
the following:

SetVolume Sets the volume as specified by the Volume parameter.


This Time parameter is not used for this effect.
FadeVolume Will Fade the Volume (either up or down) over the Time
Period to the specified Volume.If the specified Volume is
lower than the current channels volume then it will fade
down (make quieter) else it will fade up (make louder).
PlayAndFadeIn Will start playing the specified channel (if that channel is
paused it will resume it) and fade the volume to the
specified Volume.
FadeOutAndPause Will Fade out the channel and pause it when it reaches
the specified Volume. By Pausing a channel you can
resume if at a later point from the current play position.
This is mainly used by the main theme in pinballs.
FadeOutAndStop Will Fade out the channel and stop it when it reaches the
specified Volume. This is mainly used for special music
modes (such as multiball or jackpot).
Pause Will Immediately pause the channel.
ResumePlaying Will resume playing of a paused channel.
SetFrequency
Will adjust the Playback Frequency of specified channel.
This allows you to speed up or slow down any music
playing on the that channel. Many older pinballs changed
the pitch of samples being played and this command
allows you to do this.

This command uses the Time parameter as the


percentage to change the frequency by so a value of 100
will make no change. A value of 125 will increase the
frequency by 25%.

Script Example:

' Increase the frequency on channel 1


EffectMusic 1, SetFrequency, 1, 125

Volume
The Volume (a value between 0.0 (totally silent) and 1.0 (default) (full
volume) of the Music channel when the effect has finished processing. Note
that the volume is scaled depending on the master volume set by the user.
(via the Page Up and Page Down keys)

Time Time in Milliseconds (1000 = 1 second) to take to process this effect. (default
= 0).

If a parameter is not specified, then Future Pinball will use the default.

Script Example:

' Fade out the Main Music and Fade in the Multiball tune
PlayMusic 2, "MultiballMusic", TRUE, 0
EffectMusic 1, FadeOutAndPause, 0, 3000
EffectMusic 2, PlayAndFadeIn, 1, 3000

This script example starts playing the "MultiBallMusic" on channel 2 (at an initial Volume
of 0). It will then Fade Out any music playing on channel 1 and Fade in the Multiball
Music on channel 2 over a period of 3 seconds (3000 milliseconds)

EnterHighScore( <Integer> CurrentPlayer )


Future Pinball Contain a Built-In High Score system to help provide High Score Support
to all tables with minimal scripting required. This keeps a High Score Table (of 4 entries)
for the current table. Future Pinball also allows for a special High Score entry for things
like Loop Champion, Highest Jackpot Awards, Number of times the user kicks the
machine or whatever else is desired. The special High score is optional depending on
your requirements. This information (as well as the default high scores are defined the
the Table Information dialog (link).

For this functionality to work you must be using the nvScore and nvSpecialScore
variables.

CurrentPlayer is the current players score which should be used as consideration for a
high score. This must be between 1 (default) and 4.

Issuing this command will check to see if the specified CurrentPlayer score (either
normal score or the special score (if applicable) earns an entry in the high score table. If
so, Future Pinball will bring up one of the following displays which allows the player to
enter in their initials. The text used for the Special High Score is defined in the Game
Information dialog.
The Player has gotten a High Score as well as beaten the current Special High Score (if
Applicable)

The Player has gotten a High Score (but hasn't beaten the
The Player has beaten the Special High Score.
Special High Score or special high scores are not required)

While the user is entering their Initials Future Pinball will only report Flipper Button
Presses to the FuturePinball_KeyPressed() and FuturePinball_KeyReleased() global
script events. This will allow you to flip the flippers as the user selects their initials (which
is normal pinball behavior).

When the user has finished entering in there initials (or the current players score wasn't
high enough to make a highscore) then the FuturePinball_NameEntryComplete()
event will be called.

Please note that while the user is entering in their Initials then the table script
still runs in the background
(i.e., Timers expire, Music finishes)

SortHighScores()
This will sort the Current High Scores (The nvHighScore variables). Usually this is
handled automatically if you use the EnterHighScore() functionality built into Future
Pinball but if you are manually modifying the nvHighScore variables then you will need
to use this command.

AddDebugText( <String> DebugText )


This allows you to display the contents of variables or any other information you wish
onto a debug output window when the Game is running. This window is only active if you
are playing in Debug Mode (for more information see Running a Game). This window
displays the last 20 strings given by this method. These strings can also be logged to
disk via the LogDebugTextToDisk() command.

DebugText is a string passed in from the VBS script.

Script Example:

Will display the KeyCode passed into the FuturePinball_KeyPressed() onto the Debug
Output Window.

If the Table is not being played in debug mode then this command will have no effect and
will be ignored.

LogDebugTextToDisk()
This command logs the Debug Text Trace History to Disk. This is saved to a file called
"fpDebugTextLog.txt" which is same directory as the currently loaded table. Use this
command if you wish to save large amounts of debug data as the debug window only
displays the last 20 lines issued. The contents of this log file is destroyed (cleared) each
time you issue this command. The Game must be in Debug Mode for logging to occur.
These script events are called from the Game Engine whenever something the script should
be aware off happens (such as the user pressing a key on the keyboard).

FuturePinball_BeginPlay()
This event is called in the Script when the table is just about to be run (after the user
presses the Play button). You should initialise any of your variables needed for your
game script here as well as set up any initial items you want to run as the table is first
turned on (such as Initial Display values, Attract modes, Light displays, etc.)

FuturePinball_EndPlay()
This event is called in the Script whenever the user want to exit the game player (they
have pressed ESC).

FuturePinball_KeyPressed( byVal KeyCode )


This event is called each time the user presses a key on the keyboard.

KeyCode contains the keycode of the Key which has been pressed by the user. For
more information on keycode see the Script Keycode Section (link).

Script Example:

In this script example, the script is checking to see if any of the flipper buttons (or the
plunger) buttons have been pressed. If so then it will activate those table objects.

FuturePinball_KeyReleased( byVal KeyCode )


This event is called each time the user releases a key on the keyboard.

KeyCode contains the keycode of the Key which has been released by the user. For
more information on keycode see the Script Keycode Section (link).

Script Example:
In this script example, the script is checking to see if any of the flipper buttons (or the
plunger) buttons have been released so it can then deactivate them.

FuturePinball_Paused()
This event is called in the Script whenever the user Pauses the game. What you do in
this event is up to you but you may want to fade out any music playing.

FuturePinball_UnPaused()
This event is called in the Script whenever the user un-pauses (resumes) the game.

FuturePinball_TiltWarnings( byVal Warning )


This event is called when the table has nudge the table and it has gone over its
sentistivty setting (a table property). Generally at this point you should play a sound
effect and put a message on a display.

Warning contains the the current warning number (1, 2, 3 etc).

FuturePinball_Tilted( byVal Warning )


This event is called when the table has been tilted (by giving too many warnings).
Generally at this point you should turn off all the lights on a Pinball and let the ball roll
back down into the drain.

The fpTilted global script variable is set (= TRUE) at this point and will remain set until
you clear it when you have finished handling the tilt.

FuturePinball_MusicFinished( byVal Channel )


This event is called when the one of the Music Channels has finished playing (due to the
song finishing of natural causes and not via an Effect command to stop the channel)

Channel contains the channel index (a number between 1 and 8) which has finished
playing. The script can then either repeat the tune or start playing another tune (or move
into another game mode if the tune in question was a special fixed length for some sort
of table animation).
FuturePinball_NameEntryComplete( byVal Position, byVal
Special )
This event is called after the EnterHighScore() has finished. (Either by the player
entering in their initials or the score not making it into the high score table). This allows
the script to continue with the game flow once the high score stuff has completed. It also
allows the script to award bonuss (like an extra ball, free game) based on the type of
high score achieved.

Position The High Score Table Entry Position that the score (based on
CurrentPlayer passed into the EnterHighScore() method) made. This
value is between 1 (for the top high score) and 4 (for the last entry). If this
value is 0 then the player didn't make the High Score Table.
Special If 1 then the CurrentPlayer used for the HighScoreEntry() beat the Special
High Score (if applicable). If 0 then the user didn't beat the Special High
score or the special score isn't required

These Variables are global to the script and can be used in your Table Script.

<Integer> fpEventID (READ ONLY)


This Variable is set by some table components (Shapeable Rubbers, Drop Targets, Toys)
to inform the scripter which part of the object was collided with. For more information see
the relevant object as the use of this variable is different depending on the table object
which sets it.

<Boolean> fpGameInPlay (READ ONLY)


This variable (or flag) is set via the BeginGame() script method. This should be done
when the player wishes start a game. The flag can be used thoughout the script to
correctly handle machine states depending on weither of not there is somebody playing.
The Tilt/Nudging mechanism will call the script while this flag is True. To Clear this flag
called the EndGame() script method.

<Integer> fpTiltWarnings (READ ONLY)


This Variable contains the number of tilt warnings that have been given to the script. (via
the FuturePinball_TiltWarnings() event). It is incremented each time the user nuges
the table too hard.

<Integer> fpInitialJackpot (READ ONLY)


This Variable contains the value set in the Table Information dialog (link) for the Jackpot
field. You can use this variable to reset the nvJackpot variable to the initial value
everytime the use collects a jackpot in your game.

Script Example:
' The player has won the jackpot
AddPoints(nvJackpot)
' reset the jacpot value to the default
nvJackpot = fpInitialJackpot

<Boolean> fpTilted
This variable (or flag) is set (ie = TRUE) when the user has tilted the table (by nudging
the table too hard). You may need to look at the state of this flag when processing some
script statements. (i.e., you may not want to allow the flippers to be flipped if the table
has been tilted). You will need to Clear this flag when your script has handled the Tilt
(however it sees fit). Clearing this flag will also set fpTiltWarnings to 0.

While this flag is set, objects such as Bumpers and Slingshots (which are automated
objects) will not work (ie the ball will bounce naturally off them). You should test the state
of this flag when handing any object events given to the script to ensure that the table
reacts accordingly to the state of the flag.

Future Pinball saves the contents of the following variables to disk so they are
persistant from game to game. Each table has a unique set of these variables.
This file is called the fpRam file and its file name is based on the table name (as
defined in the editor). This initial state of some of these variables is defined by
the Table information dialog (link).

<Integer> fpBallID (READ ONLY)


This Variable is set by the Future Pinball engine when a ball hits an object and the
_HIT() event is called in the script. The value used will be the same as that specified in
the CreateBall function (For more information refer to the Kicker object (link). This
allows the scripter to know which ball (out of many) hits the object in question. Gates,
Spinners and Vari-Targets do not set this value

<Integer> nvBallsPerGame
The variable contains the number of balls per game which the script should use. This
value is set in the Table Information Dialog (link).

Only values between 1 and 9 are accepted.

<Integer> nvCredits
The variable contains the number of credits the machine has. The script should
increment this everytime a coin is inserted and decremented each time a game is
started.
Only values between 1 and 99 are accepted.

<Integer> nvScore1 - nvScore4


These variables contains the current scores for Player 1 though to Player 4. (as pinballs
generally support up to 4 players)

<Integer> nvScore( <Integer> CurrentPlayer )


This variable contains the players current score (basically uses nvScore1 to nvScore4
based on the specified index)

CurrentPlayer is the index of the players score (1 - 4) which you wish to use.

<Integer> nvSpecialScore1 - nvSpecialScore4


These variables contains the current special scores for Player 1 though to Player 4. (as
pinballs generally support up to 4 players). If your table design doesn't require a special
score then you can ignore these variable.

<Integer> nvSpecialScore( <Integer> CurrentPlayer )


This variable contains the players special score (basically uses nvSpecialScore1 to
nvSpecialScore4 based on the specified index)

CurrentPlayer is the index of the players score (1 - 4) which you wish to use.

<Integer> nvHighScore1 - nvHighScore4


These variables contains the score which make up the High Score Table.

<String> nvHighScore1Name - nvHighScore4Name


These variables contains the names (or initials) which make up the High Score Table.
These names can only be 3 letters in length. If you try to set these variables to a blank
string (or a string which has a length less than 3) then they will padded out with a '.'
(period) character.

<Integer> nvHighScore( <Integer> Index )


This variable allow you to retrieve the high score value for the specified index. This value
should be between 1 and 10.

<String> nvHighScoreName( <Integer> Index)

This variable allow you to retrieve the high score name for the specified index. This
value should be between 1 and 10.
<Integer> nvSpecialHighScore
These contains the Special high Score value.

<String> nvSpecialHighScoreName
This contains the name (initial) which make up the Special High Score. This name can
only be 3 letters in length. If you try to set this to a blank string (or a string which has a
length less than 3) then they will padded out with a '.' (period) character.

<String> nvSpecialHighScoreTitle (READ ONLY)


Contains the Title String defined in the Special Score Title Field in the Table Information
Dialog.

This can be used for any displays which you want to display the Special High Score.

<String> nvSpecialHighScoreText (READ ONLY)


Contains the text string defined in the Special Score Text Field in the Table Information
Dialog. This is intended to be a single word version of the Special Score Title. (ie "Loop
Champion" would be "Loops")

This can be used for any displays which you want to display the Special High Score.

Script Example:

<Integer> nvJackpot
Contains the current value of the Jackpot. If there is no nvRam file for the current table
then is value is initialised to the value set in the Table Information dialog (link).

<Integer> nvTotalGamesPlayed
Contains the total number of games played (providing you increment it when a new
game is started). If there is no nvRam file for the current table then is value is initialised
to zero.

<Integer> nvTiltWarnings

Allows you to change the number of tilt warnings given to the script before the machine
tilts. Valid values are 0 to 9.
<Integer> nvR1 - nvR16
16 General Purpose Registers which can be used to store any numerical value you wish.
These can be used if you wish to save (between plays) special elements of your table.
(for instance, Awards which build between games). If there is no exiting nvRam file for
the current table these registers are set to 0.

<String> nvS1 - nvS16


16 General Purpose Registers which can be used to store any string you wish (upto 32
characters). These can be used if you wish to save (between plays) special elements of
your table. (for instance, Extra High Scores, Bonus Names). If there is no exiting nvRam
file for the current table these registers are set to empty strings.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Script Keycode Tables

This section give the key codes that the script is able to read in the
FuturePinball_KeyPressed( byVal KeyCode ) and FuturePinball_KeyReleased(
byVal KeyCode ) global script methods.

Not all keys are available to use used in the Script. Any Keys which have fixed
functionality (i.e., Function Keys, Tab, etc.) as described in the Game Key Preferences
Section (link) of this manual are not reported to the script. The Exception to this is the
Function keys, they can be used in the script providing SHIFT is held down first. Keys
assigned to the Table Nudge are also not available.

Alphabet Keys
Key Code Key Code Key Code Key Code Key Code
A 30 B 48 C 46 D 32 E 18
F 33 G 34 H 35 I 23 J 36
K 37 L 38 M 50 N 49 O 24
P 25 Q 16 R 19 S 31 T 20
U 22 V 47 W 17 X 45 Y 21
Z 44

Numerical Keys
Key Code Key Code Key Code Key Code Key Code
1 2 2 3 3 4 4 5 5 6
6 7 7 8 8 9 9 10 0 11

Special Keys
Key Code Key Code Key Code Key Code
UP 200 LEFT 203 RIGHT 205 DOWN 208
INSERT 210 DELETE 211

Function Keys
In order for function keys to be passed into the script (as they are generally used to
change the game camera), the SHIFT key must be held down first (ie SHIFT + F1)
will pass in both SHIFT and F1 into the KeyPressed and KeyReleased script
methods.
Key Code Key Code Key Code Key Code Key Code
F1 59 F2 60 F3 61 F4 62 F5 63
F6 64 F7 65 F8 66 F9 67 F10 68
F11 87 F2 88

Other General Keys


Key Code Key Code Key Code Key Code Key Code

LEFT RIGHT LEFT RIGHT


SPACE 57 42 54 208 157
SHIFT SHIFT CONTROL CONTROL

LEFT RIGHT CAPS


ENTER 28 56 184 58 BACKSPACE 14
ALT ALT LOCK
` 41 - 12 = 13 [ 26 ] 27
\ 45 ; 39 ' 40 , 51 . 52
LEFT RIGHT RIGHT
/ 53 219 220 221
WINDOW WINDOW MENU

Keypad Keys
Key Code Key Code Key Code Key Code Key Code
1 79 2 80 3 81 4 75 5 76
6 77 7 71 8 72 9 73 0 82
NUM LOCK 69 / 181 * 55 - 74 7 6
+ 78 ENTER 156 . 83

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Ascii Table

This section defines the Ascii Character set which can be used for
reference when scripting.

ASCII Character Table (0 - 127)


Num Char Num Char Num Char Num Char
0 NUL 32 SP 64 @ 96 `
1 SOH 33 ! 65 A 97 a
2 STX 34 � 66 B 98 b
3 ETX 35 # 67 C 99 c
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 ' 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 . 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DC1 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 ETB 55 7 87 W 119 w
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 W 121 w
26 SUB 58 : 90 Z 122 z
27 ESC 59 ; 91 [ 123 {
28 FS 60 < 92 \ 124 |
29 GS 61 = 93 ] 125 }
30 RS 62 > 94 ^ 126 ~
31 US 63 ? 95 _ 127 DEL

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Special Graphic Processing

This chapter of the manual explains some of the more detailed types of
graphics processing that Future Pinball can perform as well as how
colours are used within the program. This section of the manual can get
slightly technical but I will try to explain it as simply as possible (even
though some of the principles do involve advance graphics
programming knowledge).

The sections covered in the chapter are;

Texture Mapping (link)


Colours in Future Pinball (link)
Sphere Mapping (link)
Crystal Rendering (link)
Enamel Mapping (link)

Texture Mapping
Texture Mapping is a process where a 2 Dimensional (2D) Image is
mapped (or wrapped around) a 3 Dimensional (3D) Model. All the
components you can place on your table in Future Pinball are
based on 3D models. Some have been designed by us and some
are generated by the program based of shapes you have laid out
using Shapepoints (link). 3D models are just that, Data that defines
a shape of an object in 3 Dimensional Space which has a X (left-
right), Y(up-down), and Z (near-far) axis. Models themselves don't
look like much until they have been texture-mapped (or skinned).

Take the following "Naked" Flipper (in all these examples, the
playfield reflections have been set to MAX to help illustrate various
items):
It doesn't look very good until you wrap a specially designed image
(or Texture) around the model;

These textures have been specially designed so certain parts of the


texture get mapped to bits of the Model. It is not the scope of this
part of the manual to detail how the texture map is broken up as it
is different for every component in Future Pinball. We provide a
wide range or texture maps (with variations) with Future Pinball but
it is very easy to create your own.

After applying the texture to the flipper model, you will come up with
the following which is much nicer looking and starts to look like a
real pinball part.
Not all components in Future Pinball need to be Texture Mapped.
Objects like Lane Guides and Plastic Pegs look good as is, but of
course, you can apply a texture map to them if you wish.

Colours in Future Pinball


Future Pinball (like the Windows Operating System it runs on) uses
the RGB colour model. In this model a colour is made up out of a
Red, a Green and a Blue Component. Using different values and
combinations of the values allows for millions of different colour
shade to be generated. In computer graphics, there is also a 4th
component called the Alpha which defines how transparent a colour
is but, for now, you need not worry about that.

The following illustration shows the 3 RGB components and how


they can be blended together to make up the various primary
colours.
The Majority of Table Components in Future Pinball contain at least
1 colour property i.e., which you can use to choose the
colour you wish to use for that object. This will bring up the
following standard Windows™ colour picker:

Each colour component (ie R, G and B) is made up of a numerical


value between 0 and 255. With 255 begin Full Strength and 0 being
no colour at all. Values in between will change the level of each
component. Clicking on the various colour you will see the Red,
Green and Blue values change defining how the colour is made up.
Pick the colour you want to use and press .

Colours in openGL
As Future Pinball uses openGL as its Graphic Rendering
Engine it is very important that you understand how openGL
uses colours as it is different depending on if you are texturing
a model or you are not.

Colours in openGL Texturing

openGL works by scaling the colour of each pixel in the


texture by the level of R, G, B components you are asking
to render the object in. i.e., It will not take the texture as is
but will modify it by the current value of the colour register.
As R, G, B components are numerical values between 255
(full strength) and 0 (no colour). You can brighten or
darken a texture by using different Colour values. In the
case of texturing you will want to use gray scale values
(where each R, G, B component is the same value).

Using Grayscale values may seem confusing at first


(seeing as the above flipper renders in a lovely yellow/red)
but that is how computer graphics work and this must be
appreciated in order to understand how to effect how your
table is drawn.
When you fist create an object on the Table Workspace in
*most* cases is will given the default colour of
(which is 192, 192, 192). This will draw the object slightly
darker than the source texture. This is due to how the real-
time Lighting system works in Future Pinball (and
openGL). The real time lighting system will shade the
model depending on how the object is viewed from the
camera (ie you) using various lighting components
(specular, diffuse, emissive, etc.) which will darken (or
brighten) each polygon in the 3d Model. This allows for
shading highlights to be placed on the model enhancing
the look of it.

Setting the Colour to full White (i.e., uses the


texture "as is") will cause most objects to bleach out when
viewed from certain angles (though the flipper is one of the
few objects that can get away with it; experimenting with
other objects will soon show how it can effect the overall
look of a table)

Setting the colour to a medium gray (128, 128,


128) will obviously render the object at half colour (thus
making the object look a lot darker).
It is very important to remember that Black isn't really a
colour in computer graphics. Setting the colour of an
object to Black (0, 0, 0) will scale down the texture
so there are no colours on the object.

As each Component is used to scale the source texture it


can be used to achieve some interesting effects. In the
following examples we use Red, Green and Blue colours
to draw the Yellow/Red flipper with totally different results;
Drawing the object in (255, 0, 0) will look like it's
"tinting" the object red. This is because a Yellow and Red
source texture contains a Red component.

Drawing the object in (0, 255, 0) will draw the


flipper body -- which is yellow, and yellow does contain a
green component, but as red does not, the parts of the
object which use red (the rubber) will be drawn in black.
Drawing the object in (0, 0, 255) is almost the
same as drawing the object in Black as there are no
colours in the source texture that use a Blue component.
The Specular (object highlight) part of the real-time lighting
does use the colour though so that is why the flipper looks
to have a blue highlight even though there is no texture
drawn.

If the source texture is in a gray scale format (ie black and


white), then you use the colour property to "tint" the
texture as each pixel of the texture contains a red, green
and blue value. If you are completly confused at the
moment, don't worry. It is only really important that you
understand how gray scale values affect how the object
(with a texture is rendered).

Colours in openGL for objects that DONT require


Texturing

Some components in Future Pinball look very nice without


texturing as the Real-Time Lighting system shades the
object in such a fashion that texturing is not required.
Object that generally don't require texturing are Pegs,
Lane Guides and some Ornaments.
If an object doesn't have a texture specified, it will be
drawn in the colour you want. so unlike texturing, it will
draw the object in that colour and not affect the object as
much when colours are used.
Again as with Texturing, Full Strength colours should not
be used as it bleaches out the object when the real-time
lighting system is applied. As with normal texturing
rendering an object Black doesn't give openGL much to
work with. If you would like a Black object, use a very dark
gray (64, 64, 64) which has some colour
component to it.

Sphere Mapping
Sphere Mapping is a computer type of rendering which real time
wraps a texture around an object using the camera as a reference
point. That means that if the camera moves, the resulting texture
will also move along with it. It was initially designed as a simple (but
very quick) form of environmental mapping where you can make an
object look like it's reflecting the surrounding environment (which is
horrifically expensive on the video card to render real time). Such
methods have been replaced with Box mapping which gives much
better results but Future Pinball does use it to one great advantage.
It can render extremely nice looking metal objects with the right
texture.

A sphere map is a distorted 2D texture based on a mathematical


formula but in simple form it looks like a very close up picture of a
pinball;
Future Pinball contains a variarity of Sphere maps which can be
used when rendering object to make them look like real metal.

The following Wire guides are rendered with a metal looking


texture. As Wire Guides are complex objects with many
faces/edges it can dull the effect of the texture as not much of it
gets shown of each polygon face.

By 'Sphere Mapping' on one of the special Sphere Maps, the wire


guides can instantly look much more like real pinball chrome and
has the advantage of when the camera moves (to follow the ball),
the highlights of the chrome will also move so the shading of the
wire looks almost real.
Experimenting with various sphere maps will make the object look
like it is made out of various different type of materials.

Crystal Rendering
Some Objects (Pegs, Lane Guides, Bumper Caps, Flashers, etc.)
have a Crystal Flag. What this does is render the object semi-
transparent so it can be seen though. A lot of modern day plastic
pegs are semi-transparent as well as a lot of Bumper Caps.

The Following example shows how Crystal mapping effects a Lane


Guide when used in a typical pinball setup.
Without Crystal Mapping

With Crystal Mapping.

Obviously Crystal mapping allows you to see though the object


(you can see the pegs, rubbers and the light bulb) but it is slower to
render and the end results can vary depending on whether or not
the Super Nice Crystal Mapping flag is set in the Video Preferences
(link). Of course you may not want to use this type of rendering on
object depending on the style of pinball you wish to create.

Enamel Mapping
Enamel Mapping allows for a special secondary texture to be
blended in when drawing the object. This texture (called an Enamel
Map) gives the impression of the object reflecting the environment
around it and can be used to great effect on the plastic surfaces in
a pinball as it can reflect the backglass (or distortions) into the
plastic itself. This changes as the player moves around the pinball
machine.

Enamel Maps can be made (in this case we will be reflecing the
trasnlite texture) by flipping the texture upside down and reducing
the colour strength. Note that enamel maps are blended in by
adding the colours together so you will want a very dark enamel
map else it will dominate the colours on the source texture.
Base Texture Enamel Map Texture

For a different effect like heat distortions of the plastic, then a splot
texture can be used (like the following example).

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Rendering Issues

This chapter of the manual explains some of the rendering issues


(anomalies) that can happen with Future Pinball (and in 3d games in
General) due to the fact the screen rendered to the display is drawn
real time in 3 dimensional space (and converted into 2 dimensional
space by the graphics card so it can be viewed on your monitor).

As Future Pinball gives you quite a flexible design system, you will
come across some of these issues from time to time. All of these
rendering issues can be fixed with clever ordering of components on
the playfield using the Send to Back and Send to Front functionality
of the editor as covered in the Editor Functionality Chapter (link).

You should be familiar with the Special Graphic Processing chapter


(link) before continuing.

Objects which Cut into the Playfield


(such as ornamental holes)
If you look at the above picture you will notice that the left
target's stem looks like its been cut short while the one on the
right goes into the ornamental hole. This is because of the way
hole objects are rendered and the order in which they are
rendered. Hole objects need to cut into the playfield (both into
the graphic and the z-buffer which is a hardware buffer which
your video card uses for depth sorting). If (in the case of the left
target) the hole is drawn "After" the target (or whichever object) it
will cut off the bottom of the stem. it is very important that when
using ornamental holes for you table that you right mouse click
on them and select "Send To Back". This will ensure that the
game rendering engine will process them before any other
objects.

Transparency Ordering Issues (with


Transparent Surfaces and/or Crystal
Objects)
Objects which are marked as being Transparent (either with the
transparency slider of the object or if the object has the Crystal
Flag enabled) are drawn in a separate rendering pass to "solid"
objects. This is so the transparent object can be drawn over any
solid objects underneath it. (Underneath is a wide ranging term
as technically it depends on the camera and the viewing angle).

The order that 'transparent' objects are placed into the separate
rendering phase is very important and to achieve transparency.
The object is blended over any existing graphics; thus, the
correct ordering is required for multiple transparent objects
which need to be drawn over each other.

The following example shows two slingshot assemblies. The left


one has incorrect ordering on the pegs as they are drawn over
the plastic. In the first picture the rear peg is drawn first, then the
plastic followed by the 2 front pegs. By Selecting the Plastic and
sending it to the front, one ensures that the plastic gets drawn
last and this it correctly blends over ALL of the pegs (and any
other transparent object which is seen to be beneath it).
Incorrect - Crystal Pegs Showing Correct - No Rendering Issues
Though

Of course if the Pegs are do not have the crystal flag set then
the ordering won't matter as the rendering engine only has to
render the one semi-transparent object (the plastic).
Pegs are Solid - No Issues

Of course some camera views may show a more low view of the
table. In the following example in the first picture, the far peg is
drawn last thus it draws over the front peg. Sending that peg to
the Back (so it is drawn first) fixes this rendering issue. This
issue is more rare but it is best to test your table at all the
available camera angles to ensure that no transparency ordering
issues exist.
Incorrect Correct

Please note that the ordering is only important for transparent


objects which overlap. For opaque (solid) objects it doesn't
matter.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Editor Preferences

The Editor Preferences allow you to tweak what information the


editor gives you when you click on object. It also allows you to define
the colours used to render the table in the editor to suit your own
preferences.

Clicking Editor Preferences (in the Preferences Menu) will bring up


the following dialog:
This will write your new preferences to the Windows
Registry and return back to the Table Editor. Any Changes made will
immediately take effect.

This will Cancel any changes you have made and return
back to the Table Editor.

General Options
Always Draw Shape / Ramp Points

This option toggles if Shape (or Ramp) Points (used to


define the custom shape of some objects) are always
drawn or not. The default is to only draw the Shape Points
when the object has been selected.

Shape Points Not Drawn (Default)


Shape Points Always Drawn
Unless Object is Selected

Number Shape / Ramp Points (For selected objects only)

This option enables Numbering of Shape / Ramp Points


(Default). Certain Objects (such as Shapeable Rubbers)
require you to know which Shape Point ID for Script
Processing (in the event that the Rubber has multiple leaf
triggers assigned to it)
Show Polygon Information (For selected objects only)

This option enables the polygon display for objects (which


use Shape Points). What this does is to show you how the
convex shape is split up into triangles (polygons) for
rendering. This is extremely useful if we are wanting to
keep the total polygon count down as sometimes you can
reduce the number of polygons an object has just by
moving a few Shape Points a little bit.

Load Images into Table Editor

This option allows to to enable (or disable) loading images


so they can be viewed in the Table Editor. If you only wish
to play games on Future Pinball then you may wish to
disable this option as it will result in tables loading faster.
General Options
Backup Table when Saving

If enabled (Ticked ), then a backup of the current table will


be made when it is saved to disk. This created a .bak file in
the same directory as the table. You can use this as a
precaution just incase something happen while saving the
main table file and it somehow becomes corrupt. If you do
need to restore from a backup you will have to remove the
.bak extension first.

Colour Formatting
The coloring used for the various objects drawn in the Table
Editor can be changed to suit your own preferences. Clicking on
any of the selection boxes will bring up the Colour
Selection Dialog. Choose the Colour you would like to use.

Will reset the Table Editor colours to the Defaults


Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Game Keys and Controls

The Game Key (and Controls) Preferences allow you to redefine what
keys are used to control the game when the table is played, as well
as to define how an attached Joypad can be used to play a table.
Joypads must conform to Microsoft HID (Human Interface Device)
standards as Direct Input™ is used to read in the joypad. All Modern
day Joypads will already conform to this standard. Please refer to
your joypad manual for setting up and calibration under Microsoft
Windows™.

This section of the Manual doesn't cover How to use the Definable
Keys in the Table Script or the General Game Controls. Please refer
to the Global Script Commands section (link) of this manual.

Clicking Game Keys and Controls (in the Preferences Menu) will
bring up the following dialog;
Game Keys
Pressing (or any other Game Key) will allow you to
change the Key used for that function. When clicked the button
will change to . At that point press the new key you wish
to use. The button will then display the new Key name. It is not
possible to use one of the Fixed Game Keys which are reserved
by Future Pinball (These Keys are Escape, All of the Function
Keys, Pause/Break, Tab, Page Up, Page Down and the Home
and End Keys.

This will write your new key preferences to the


Windows Registry and return back to the Table Editor. Any
Changes made will immediately take effect.

This will Cancel any changes you have made and


return back to the Table Editor.

JoyPad Controller
The joypad (or joystick) interface in Future Pinball will allow you
to control the various game keys via the joypad as well as the
Analog Plunger functionality built into the game engine. This
allows for very fine tuning of how far the plunger is pulled back
and thus how hard it hits the ball when released. As Future
Pinball joystick interface is aimed at Joypads (for a true console
experience) it relies on a spring centered thumb stick. Pulling
back on the thumb stick (towards yourself) will pull back the
plunger. You can adjust the Plunger by subtle movements of the
thumbstick. When you wish to release the plunger, then just
release the thumbstick (which will be spring centered) and any
ball in the plunger lane will be launched onto the playfield.

Pressing a button on the keypad is exactly the same as pressing


the corresponding key on the keyboard, so no script changes are
required to support keypads.

Enable Joypad Support

If Enabled (Ticked ) then Future Pinball will use any


Joypad connected to your computer. If multiple Joypads are
connected, then you can select the joystick to use from the
selection box to the right of the Enable checkbox.

Depending on the state of this flag, the following items will


either be disabled or enabled.
Deadzone

This allows you to specify how much Dead zone (Dead zone
is the amount of sway the joystick can have before it starts
registering movement). Not all Joypads center correctly and
this will allow you to tweak the amount of movement
required for your joypad. Most modern day Joypads auto
calibrate so generally the dead zone will not need to be
adjusted. The Dead Zone value (between 0.00 and 1.00) is
displayed next to the slider.

Left Flipper

Defines the Joypad Button number to use for the Left


Flipper. This is equivalent to the Left Flipper keyboard key.
Selecting this dropdown box will display a list of the
available buttons which can be assigned to this function.

Right Flipper

Defines the Joypad Button number to use for the Right


Flipper. This is equivalent to the Right Flipper keyboard
key. Selecting this dropdown box will display a list of the
available buttons which can be assigned to this function.

Insert Coin 1

Defines the Joypad Button number to use for Insert Coin.


This is equivalent to the Insert Coin keyboard key. Selecting
this dropdown box will display a list of the available buttons
which can be assigned to this function.

Start Game

Defines the Joypad Button number to use to start a game.


This is equivalent to the Start Game keyboard key.
Selecting this dropdown box will display a list of the
available buttons which can be assigned to this function.
Special 1

Defines the Joypad Button number to use for the table


defined (if any) Special 1 Function Key (such as a
magnasave). This is equivalent to the Special 1 keyboard
key. Selecting this dropdown box will display a list of the
available buttons which can be assigned to this function.

Special 2

Defines the Joypad Button number to use for the table


defined (if any) Special 2 Function Key (such as a
magnasave). This is equivalent to the Special 2 keyboard
key. Selecting this dropdown box will display a list of the
available buttons which can be assigned to this function.

Exit Table

Defines the Joypad Button number to use to exit the current


game and return to the editor. This is equivalent to the ESC
keyboard key. Selecting this dropdown box will display a list
of the available buttons which can be assigned to this
function.

Digital Plunger

Defines the Joypad Button number to use for the Digital


Plunger. This is equivalent to the Pull Plunger keyboard
key. Selecting this dropdown box will display a list of the
available buttons which can be assigned to this function.

Pause Game

Defines the Joypad Button number to use to pause the


game. This is equivalent to the Pause keyboard key.
Selecting this dropdown box will display a list of the
available buttons which can be assigned to this function.
Toggle Hud

Defines the Joypad Button number to use to toggle any Hud


overlays the table designer has placed on the screen. The
table designer ofcourse must support this key for this option
to work. This is equivalent to the Toggle Hud keyboard key.
Selecting this dropdown box will display a list of the
available buttons which can be assigned to this function.

Change Camera

Defines the Joypad Button number to use to change the to


next camera. Cameras are changed sequentially between
Full Table 1 - Full Table 2 - Scrolling 1 - Scrolling 2 - Low
Angle 1 - Low Angle 2 - Fixed View. Selecting this dropdown
box will display a list of the available buttons which can be
assigned to this function.

Look at Backbox

Defines the Joypad Button number to look at the Backbox


(so you can see your score). Selecting this dropdown box
will display a list of the available buttons which can be
assigned to this function.

Analog Plunger

Defines the Joypad Axis to use for the Analog Plunger. The
difference between the Digital and Analog Plunger depends
on the table which is being played. If the table being played
has a traditional pull type plunger then the Analog Plunger
will allow you to pull back the plunger to suit your own
needs. If the table as an auto-plunger then the analog
plunger will have little effect as it is a solenoid that hits the
ball and not your adjustment of the plunger. Selecting this
dropdown box will display a list of the available Analog Axis
(usually X, Y and Z) which can be assigned to this function.
Pressing this button will save the current settings as the
defaults.

Pressing this button will reset the controller setting back to


the defaults used when the Set as Defaults button was
pressed. This allows you to play with the settings and revert
back if needed. When this button is pressed it will change to
which will hard reset the controller settings to the
internal defaults as set by Future Pinball.

TrackIR Controller
The Track IR ( by Natural Point ) interface in Future Pinball will
allows you to control the in game camera via subtle movements
of your head when wearing the Track IR headset. This allows
you to look around the playfield and up at the backbox without
having to press keys on your keyboard and provides a more true
to life pinball playing experience by giving the feeling of standing
in front of the machine. You may wish to adjust the Future Pinball
TrackIR profile to suit your own preferences aswell as disable the
Pause/Precision keyboard controls so they don't interfear with
Future Pinball.
Enable Track IR Support

If Enabled (Ticked ) then Future Pinball will use the Track


IR device connected to your computer to control the
Camera. If You do not have the TrackIR Software client
running or it is incorrectly installed then this option will be
disabled.

When you run a table and you have the Track IR enabled,
then the default camera will be the Track IR camera which
will track your head movement. You can still change to one
of the pre-defined camera via pressing F1 - F8. Pressing
F11 we change back to the Track IR camera.

Pressing F12 any time while playing a Future Pinball Table


will re-center the Track IR device.

Player Height

This allows you to specify how tall the virtual player is when
standing in Front of the Machine. Adjusting this will allow to
change the default height of the Track IR camera is from the
playfield.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Video and Rendering Options

The Video and Rendering Options Dialog allows you to specify the screen
options used to render the Table (in the Game Player) and what sort of
level of detail to put into that render.

Clicking Video and Rendering Options (in the Preferences Menu) will bring
up the following dialog:

This will write your new preferences to the Windows Registry and
return back to the Table Editor. Any Changes made will immediately take
effect.
This will Cancel any changes you have made and return back to
the Table Editor.

Screen Resolution
This Allows you to selected the video resolution to play at. The
minimum screen width is 640x480 pixels. The Resolution selection
widow will change depending on whether or not Full Screen has been
checked as your video card will support different modes in this mode.

Use Second Monitor for Backbox (You must have multiple


monitors connected for this option to be enabled)

If Ticked, then Future Pinball will open up a secondary window


which will show the backbox of the pinball. The backbox is still
drawn on the main window and will also be displayed if the
camera looks at it.
Please note that opening up a second window and rendering
the backbox will impact on performance.

The secondary display will need to be manually adjusted to suit


the type of setup/resolution you have (usually the backbox will
appear too far away as shown in the following picture)
Pressing Scroll-Lock will allow you to adjust (scroll and resize)
the display so you can fill it with the backbox. This will bring up a
adjustment menu (as pictured below) which allows you to adjust
the position of the graphical display, You do this with with the
keypad keys 4/6 (scroll left/right), 8/2 (scroll up and down) . The
currently adjustable setting is highlighted in RED. You can
change between the adjustments by using Page Up and Page
Down.

When you have the backbox displaying how you would like then
you will have to save the table (when returned to the editor) for
the settings to be saved so they can be used the next time you
run this table. Pressing Scroll-Lock again will exit the adjustment
mode. When in adjustment mode the translate and scale
positions are displayed on the second monitor.

Playfield / Backbox

This allows you to select which window (only if multiple monitors


is selected) the settings will apply to. Changing it will also change
the monitor and resolution settings.

Monitor
Allows you to choose which monitor (if multiple are availble) the
selected window (either Playfield or Backbox) is displayed on.

Resolution

Allows you to choose the resolution for the selected window


(either Playfield or Backbox).

Full Screen

If Ticked, then Future Pinball will play the Table (at the resolution
specified) at Full Screen (which generally runs faster than in
windowed mode). If not Ticked, then a Window on your Desktop
will be used.

Arcade Mode

If Ticked, then Future Pinball will render the table in Arcade Mode
(Designed for Homebrew cabinets) which draws the table in a
way which fills up the entire screen with a slight perspective
angle.
The monitor position will have to be adjusted (as described in
Use Second Monitor for Backbox above) to scale and streach the
view to fit your monitor/resolution (remember to save the table
after adjusting the settings). NOTE: This mode is more effective if
the rotation is set to 90 or 270 degrees. When Arcade Mode is
enabled extra options are available in the Monitor Adjust mode.

Note this option is only available if /ArcadeRender is passed into


Future Pinball via the command line. For more information about
setting up Arcade Render then refer to the Command Line
section of this manual (link).

4:3 Aspect / Widescreen

Defines the Apsect Ratio to render. Selecting either radio button


will change the available screen resolutions available. Note that
16:10 (which is common for computer monitors) is also supported
if 16:9 is selected. (Widescreen can only be selected for the
Playfield display)
Rotation

Allows you to rotate the display to the specified 90 degrees


rotation. This is primary for people who wish to put Future Pinball
into a home

16bpp / 32bpp

Defines the number of Bits Per Pixel at which to render the Game
graphics The more bits the better it will look. This is ONLY valid in
Full Screen mode. 32bpp is a bit slower than 16bpp but much
nicer looking. This applies to both windows if you are using
multiple screens.

Vertical Sync

Enabled (If Ticked) Vertical Sync which synchronises the render


output with the video output of your monitor. The end result is that
the game will run at the same video refresh rate of your monitor
and any tearing artifacts (sometimes seen on fast moving games)
are reduced. This applies to both windows if you are using
multiple screens.

Rendering Options
All of these options allow for scalability of the rendered Table to suit
the horse power of the video card. As you upgrade you video card
Future Pinball will allow you to enhance each table without having to
get a better version of the table. Thus Tables will only look better as
your system specs increase.

Render the Game Room

Renders the Game Room which the Pinball Machine sits in. You
may wish to disable this feature if you wish to reduce the total
number of polygons the game engine has to process (and thus
helping it run faster).

Render Ornaments
Some Playfield Objects in Future Pinball can be marked as being
Ornamental (which means they are not essential to game play
but only provide eye candy). With this option enabled objects
marked as being ornaments will be drawn. If it is disabled (not
ticked), then Ornaments will not be drawn hence reducing the
total number of polygons the game engine has to process (and
thus helping it run faster)

Cabinet (Playfield/Translite) Glass

Renders a Glass Overlay over the playfield which give the


impression of the Real Glass on a Pinball aswell as the Glass
shine over the Translite. Some people may find it distracting.

Back Board Reflection (on Glass)

Renders the Backboard reflection (of the translite) onto the Glass
(The Glass overlay option must be also enabled). This gives a
more true to life look but again some people may find it
distracting.

Playfield Reflections (Components)

Renders the reflection for Playfield Objects. This provides very


realistic looking tables but at a heavy cost as it can almost double
the total polygon count the video card has to render.

Mirror Playfield into Ball

Renders a reflection of the main playfield 'texture' onto the Ball.


This provides very realistic looking balls but at very heavy cost as
due to the rendering processes required for this effect. This effect
requires the use of Hardware Pixel Buffers (Via the Frame Buffer
Extention) which only semi-recent video cards support. If you
have a Nvidia Geforce 4 (or below) or a non ATI Radeon, then
you will not be able to get this effect. You will also need the
current drivers for your video card.

Super Nice Crystal Rendering


Changes the way objects which support the 'Crystal' property are
rendered. If this option is enabled, then the object is rendered
over 2 passes (Increases the total number of polygons needed to
be drawn) which gives a much better looking render as the object
will truly look to be made of transparent crystal. If the option is
disabled, then a single pass method is used which can result in
polygon artifacts (not that you really notice while playing a game).

High Quality Pinball Models

Changes the model used to render the actual pinball on the table.
If Enabled (the Default) a very detailed pinball is used otherwise a
low quality version is used. This can reduce the total polygon
count significantly (almost a 1000 polygons per ball) for tables
with multiple pinball's on the screen at once.

Ball Marks

If enabled, then the ball will have very subtil markings on it which
help show off how the ball is rolling on the table.

Enable Non Power of 2 Textures

This enables (providing you video card support it) non power of 2
texture support. This is a new feature of video cards which allows
the hardware to use a texture which is not a multiple of 2 (for
more information refer to the Texture Manager chapter). If your
video card supports this feature and the table has textures which
are non power of 2, then they can be used nativly and don't have
to be scaled by the software to the correct size. This reduces the
amount of memory required by the game aswell as texture
bandwidth which means it can be processed faster. Note that
some older video cards say that they support this option but don't
support it 100%. If you get rendering issues with this option
turned on then obviously turn it off.

Disable GLSL Shaders

This will disable GLSL Shader support in Future Pinball (if your
video card supports it). Future Pinball uses customer GPU
programs (called shaders) to perform some rendering (such as
the DMD) aswell as to gain speed advantages. You can disable
shader support if you wish via this option. Please note that some
functionality in Future Pinball will either be reduced or not
available with Shaders turned off.

Facets on Round Lights

Defines how ROUND a round light looks. The higher the number
the better it will look but it will also require more polygons to be
drawn. You can select from 16, 24, 32 (Default) and 64.

Facets on Round Rubbers

As with Round Lights, this defines how round a rubber looks. You
can select from 8, 16 (Default), 24, 32 and 64. 8 Will make the
rubber appear slightly hexagonal while 64 will look very nice
indeed. Of course the higher the number the more polygons and
as rubbers are very common on Pinballs it can have a great
effect on the run-time speed. This render shape of a rubber
doesn't affect the collision shape of it (which is perfectly round)

Sides on Rubbers

Defines how smooth a rubber is on each Facet. As with Rubber


Facets this field can greatly affect how many polygons need to be
rendered (affecting speed). You can select from 6, 8, 12 (Default),
16 and 20.

Sides on Wire Guides

Defines how round a Wire Guide is. You can select from 6, 8, 12
(Default), 16 and 20. Again this increases the total amount of
Polygons needed to be processed.

Model Quality

Future Pinball supports the concept of Low Level of Detail Models


(LOD) which allows it to use a lower polygon version of a model
when it is far from the camera (of course the model has to have a
LOD equalivilent within its data). This help saves on the total
polygon count the table has to render and thus making it run
better.

There are 3 modes you can select from;

Quality Description
Always use the LOD (Low Polygon Model) at all
Low
times. (if a LOD model exists)

Use LOD models (if available) when they are distant


Medium
to the camera and the Normal model all other times.

High Always render the Primary model.

/ /

These 3 buttons allow you to quickly preset all the above values
to either their Minimum, Medium (Defaults) or Maximum values.

Rendering Quality
High Quality Textures

If this option is set (Checked), then Future Pinball will use the
Textures in the current table to their best detail. If the Flag is not
checked the Future Pinball will scale each texture in Half to
reduce the Texture memory required in the video card (this
reduces by 4 the memory required for each texture). This allows
for more textures to be stored on low spec systems without
swapping between the System Ram and the Video Ram.

Use Texture Compression (S3TC)

This option allows you to specify if the textures in the current


table are compressed. ST3C compression is good for ensuring
that the texture doesn't require as much video memory (for video
cards with a small amount of RAM) but it does reduce the quality
of the texture. Only Textures which have been specified as allows
S3TC compression (in the Texture Manager) will be compressed.

Texture Filtering

Defines the Filtering Method used to render textures to the


screen. Valid options are;

Filtering Description
The Texture is drawn as is. If it drawn larger than the
None source texture, then it is pixel expanded which may
look blocky.
Bilinear interpolation is a process that enhances
textures that would normally be larger on-screen
than in texture memory, i.e. a single texel is used for
Bilinear
more than one screen pixel. Regular texture
(Default)
mapping would appear to be 'blocky' in this case.
Bilinear interpolation reduces the blockyness by
interpolating between pixels.
Like Bilinear Filtering, this is used to smooth flat
surfaces by averaging the colors of adjacent pixels,
which blurs them and removes blockiness when
Trilinear
examined closely. Trilinear also takes into count the
distance of the texture from the camera and blurs it
more if it is far away.

Z-Buffer Depth

Defines the Resolution used by the Video Cards Hardware Z


Buffer (used to sort pixels from their distance from the Camera so
only the closest Pixel is Drawn). Valid depths are 24 bits / 32
bits. For the Majority of Systems 32 Bits (the Default) is
recommended.

Anisotropic Filtering

Anisotropic filtering (AF) is a feature of some video cards that


sharpens the details of the fading-away part of a 3D object that
recedes into the distance. Think of the text in the titles at the
beginning of the Star Wars movies that is presented in large
letters and then scrolls back into the distance. As it scrolls off, it
becomes fuzzy and hard to read. In a 3D image, you may want a
comparable effect to retain the sharpness of an object as it
recedes; Anisotropic Filtering does this.

Since Anisotropic Filtering requires intense processing as image


frames are presented to the display, it may affect performance.
You may want to weigh the perceived improvement in visual
quality against the effect on performance.

Antialiasing

Full Screen Anti Aliasing (or FSAA), Is done by videocard to


remove the jagged edges in lines. The resulting image is much
smoother on the eyes, however FSAA has usually a 50%
performance reduction when enabled.

Valid aliasing options are None, 2X Sample, 4X Sample and 6X


Sample. If you select an Antialiasing Level which is greater than
your video card can do, then Future Pinball will use the best one
available.

Both nVidia and ATI now support this type of filtering in hardware,
but each approaches the problem somewhat differently, and this
has repercussions both in overall performance and in rendered
scene quality.

Rendering Options
Hardware Lights To Use

Defines how many Hardware Lights (A hardware circuit on your


Video Card) to use in the Rendering Engine. Hardware lights are
used for Flasher objects to add more lighting effects to the table
by Lighting up the entire table with an extra light source (the
same colour as the Flasher). This will add much more realism to
the Table but as a heavy cost of a lot of extra lighting calculations.

You can select how many Hardware Lights to use (the default
being 2). 0 Means no Hardware Lights. Future Pinball will use up
to a maximum of 7.
Preference is always given to the closest Lit Flashers (to the
camera) when allocating Hardware Lights (this is done real time)

Flares on Flashers

If this option is enabled, then Future Pinball will draw a Halo Flare
(an extra Alpha Blended graphic) over a Lit Flasher greatly
enhancing the look of the flasher when lit. Off course it provides a
little more work for the video card and you may wish to disable
this option if your video card is struggling to render fast enough.

Flares on Playfield Lights

As with above but for Playfield Lights (Both Shapeable and


Round) and Bulbs.

Camera System
Default Camera

Allows you to specify which of the 8 Built-In Camera Angles you


prefer to be the initial one each time the table is played. The
Camera can still be changed while playing the Table by pressing
F1 to F8.

Valid Selections are;

Camera Description
Full Shows 80% of the Table and will pan up and down to
Table 1 follow the closest ball at the Top of the Playfield.
Full As with Full Table 1, but the camera is positioned
Table 2 Higher off the Playfield.
The Camera will closely follow the ball only showing
Scrolling
about a 2/3 of the Playfield. The Playfield will appear to
1
scroll up and down.
As with Scrolling 1, but the camera is positioned Higher
Scrolling
off the Playfield and will show slightly more of the
2
Playfield.
Low The Camera is positioned just behind the lower Flippers
Angle 1 and will pan up and down following the Closest Ball.
Low As with Low Angle 1, but the Camera will move along
Angle 2 the Glass following the ball as it Traverses the playfield.
Fixed The Camera shows the Entire table and is fixed in
View place.

Camera Follows the Ball

If Enabled (The default) then the camera will pan up and down to
follow the ball. If Disabled then the camera will remain static.

Processor Affinity
Set Threading to Single Processor (only applicable to multicore
processors)

If this option is set (Checked), then Future Pinball will only use a
single processor when playing a game (the Editor will still be
multi-threaded). This * MAY * improve performance on your
machine though this is highly subjective due to constantly
changing games and display drivers which are moving to multi-
core setups.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Table / Playfield

The Table (or Playfield) is what the ball rolls on. It is usually
brightly textured with graphics and provides the base for all
other objects in a pinball machine to bolt to.

You can alternately select between the table view and the
translite (backglass) view by pressing the Translite button on
the left tool bar. Depending on the view selected the bottom
object palette toolbar will enable or disable certain objects as
some objects can only be placed on certain views.
The Table (or Main Playfield) is automatically created for you (and
there is no way to delete it). The Table view in Future Pinball also
shows the cabinet thickness as well as the lock down bar.

Selecting a blank area on the playfield (where there is not other


object) will select the table and bring up the following property sheet:

Name

Sets the name of the Table which is used in


the top title bar. The name may not contain
any spaces. You should give a descriptive
name to your table. This name is also used
as the filename for the .fpRam file which
saves the high scores and other
information for this table. The contents of
this file can be set in the Table Information
dialog (link).

Display Grid in Editor

If Enabled (Ticked ), a grid will be drawn


over the playfield which can help with
aligning any objects that you put onto your
table.

Grid Size

Allows you to change the size (or the


spacing) of the grid. Valid values range
from 5 to 50 millimeters.

Playfield Colour

Defines the colour of the Playfield. If the


table is rendered with a texture, the texture
will be tinted with this colour. If the playfield
has no texture, it will be rendered in this
colour. It is best never to use Full Strength
colours (i.e., where either the Red, Green
or Blue components are at their Limits) as
this will adversely effect how the object is
Shaded by the Lighting system. For more
information on the use of Colour refer to the
Special Graphic Processing chapter (link).

Playfield Image

Allows you to assign a texture to the


Playfield. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Display Playfield Image in Editor

If Enabled (Ticked ), the texture specified


by the Playfield Image property will be
drawn onto the playfield helping you align
objects on the table to the texture image.
Drawing the Image will slow down the
editor slightly.

Cabinet Wood Colour

Defines the colour of the wood used for the


inner walls of the cabinet as well as the
wood for the backbox. Most modern day
pinballs use Black wood (though you
should never set it to black as a colour only
a very dark grey) but older pinballs where
more creative in colours (whites, yellows,
oranges, etc.). It is best never to use Full
Strength colours (i.e., where either the Red,
Green or Blue components are at their
Limits) as this will adversely effect how the
object is Shaded by the Lighting system.
For more information on the use of Colour
refer to the Special Graphic Processing
chapter (link).

Width

Defines the Width of the Playfield. Valid


values range between 400 to 680
millimeters.
Length

Defines the Length of the Playfield. Valid


values range between 534 to 1335
millimeters.

Front Glass Height

This field allows you to define the height of


the glass from the playfield at the front of
the cabinet. Valid values range from 40 to
300 millimeters. You will not be able to set
the front glass height to a value greater
than the rear glass height. If you do the
rear height will also be adjusted. Generally
in older pinballs the glass is near flat when
in modern day games it slopes
considerably.

Rear Glass Height

This field allows you to define the height of


the glass from the playfield at the rear of
the cabinet. Valid values range from 40 to
300 millimeters. You will not be able to set
the rear glass height to a value less than
the front glass height. If you do the rear
height will also be adjusted to match the
front height.

Table Slope

Defines the angle (or slope) of the


Playfield. This effects how the ball rolls
back towards the flippers. The steeper the
slope the harder it is to flip the ball upwards
and the faster it will fall back to the flippers.
Valid values range between 1.0 and 10.0
degrees.

Glossiness

This slider allows you to set the Glossiness


of the playfield in regards to reflecting
objects off it. Moving the Slide to the left will
lessen the reflection strength while moving
it to the right will increase it. Note that the
reflections in Future Pinball are dynamic
and they will change depending on the
viewing angle to the playfield. If the slider is
all the way to the left, there will be no
reflections. Most modern day pinballs have
a special "diamond coat" ™ plating which
make them highly reflective at low angle.
Older Pinballs used a clear plastic which is
less reflective and very old pinballs only
could reflect of the paint. You should adjust
the reflection strength to suit the style to
wish.

Machine Type

This field allows you the set the machine


type will will change the external cabinet
You can select one of the following
Machine types:

Machine Type Description


SolidState A Modern Day machine
with metal side rails
and lock down bar. Has
a black coin door. The
Backbox is 160mm
wider than the Width of
the machine.
Slightly older Machine
which has metal side
rails and lock down bar.
ElectroMechanical Has a silver coin door
as well as the backbox
width is the same as
the table width.
Much the same as the
ElectroMechanical
pinball except the top of
the backbox is wider
WedgeHead than the bottom thus it
is 'Wedge' in shape.
The Translite is
displayed in the middle
of the wedge.
Much older pinball
which had wooden front
and side rails. Has a
silver coin door as well
as the backbox width is
the same as the table
WoodRail
width. It also has
wooden legs and
wooden side rails. The
lockdown bar (also
wood) is also much
thinner.
BallyHoo Original pinball cabinet
which had wooden front
lockdown bar, back and
side rails. BallyHoo
Cabinets didn;t have a
backbox / translite
either. Although you
can still place objects
onto the
backbox/Translite they
won't be rendered.
HUD objects will
ofcourse still be
rendered.

Changing the Machine Type will override


any custom values you may of put into the
Translite Width and Height fields via the
Translite Properties (link).

Warnings Before Tilt

Allows you to change the number of tilt


warnings a machine will give before it will
Tilt. When a user nudges a machine Future
Pinball will call the
FuturePinball_TiltWarnings() global script
event. When that has been called n times
(as defined by this value) the and
FuturePinball_Tilted() global script event
is called and the machine is tilted. For more
information on these events refer to the
Global Script chapter (link).

The Table Centre Line.


This slider sits below the lock down rail of the table view and
should be adjusted so that the marker line sits in between the
flippers (or the lowest flippers if your table has multiple flipper).
This marker is used by the camera system as some of the
automated views are based on a flipper center line and not the
middle of the table.

Select the Table Centre Line Slider;


And Slide it along until the marker line is between your flippers.

The Table Flipper Line.


This slider sits at the side of the machine. It should be adjusted
so that the marker line sits in just behind the bottom of the lowest
set of flippers. This marker is used by the camera system as
some of the automated views are based on the position of the
flippers.

Select the Flipper Line Slider;


And Slide it along until the marker line is just below flippers.

The Table doesn't provide any scripting abilities of its own.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Translite / Backglass

The Translite (or Backglass) is the the glass within the front of the
backbox, with ink artwork silk-screened onto the back of it. Since it is the
most visible part of the game and has to attract players, the artwork is
often spectacular.

You can alternately select between the table view and the translite
(backglass) view by pressing the Translite button on the left tool bar.
Depending on the view selected, the bottom object palette toolbar will
enable or disable certain objects as some objects can only be placed on
certain views.

The Translite view also allows you to place objects (such as score
displays) onto the backbox as well as onto the back board within the
cabinet as some game place flashers (or other objects) there.
The Translite view in Future Pinball also shows the backbox cabinet thickness as
well as the back board which sits underneath the playfield glass (and inside the
cabinet).

Selecting a blank area on the translite (where there is not other object) will select
the translite and bring up the following property sheet:

Display Grid in Editor


If Enabled (Ticked ), then a grid will be drawn over the
Translite which can help with aligning any objects that you
put onto your backglass.

Grid Size

Allows you to change the size (or the spacing) of the grid.
Valid values range from 5 to 50 millimeters.

Translite Width

Defines the Width of the Translite. Valid values range


between 300 to 680 millimeters. Changing the Machine
Type (via the table properies (link)) will override any custom
value you may of put into this field.

Translite Height

Defines the Height of the Translite. Valid values range


between 300 to 680 millimeters. Changing the Machine
Type (via the table properies (link)) will override any custom
value you may of put into this field.

Translite Colour

Defines the colour of the Translite. If the table is rendered


with a texture, then the texture will be tinted with this colour.
If the playfield has no texture, then it will be rendered in this
colour. It is best never to use Full Strength colours (i.e.,
where either the Red, Green or Blue components are at
their Limits) as this will adversely affect how the object is
Shaded by the Lighting system. For more information on the
use of Colour refer to the Special Graphic Processing
chapter (link).
Translite Image

Allows you to assign a texture to the Translite (Backglass).


Textures are imported into the Table via the Texture
Manager (link). Selecting a Texture will also show a small
preview picture of the texture.

It is important to note that the Translite Image fully supports


TGA Alpha Mapping to make areas of the backglass
transparent allowing objects underneath (or behind the
glass) to be seen. The STA (Sub Translite Animation) object
is used to place animations behind the glass which was
common on many earlier Electro Mechanical and Solid State
Machines. Behind the Backglass sits a white piece of wood.
In Future Pinball, this is Drawn first, then any STA objects
followed lastly by the Translite Image. If you need for a STA
to be show n through the backglass, then you will need to
ensure that you create a TGA texture (or BMP with the
appropriate transparent colour set in the Texture Manager).
TGA Alpha mapping will always look much nicer than BMP
Colour Matching. For more information refer to the Texture
Manager chapter (link) and/or the STA object (link).

Display Translite Image in Editor

If Enabled (Ticked ), then the texture specified by the


Translite Image property will be drawn onto the backglass
helping you align objects on the backglass to the translite
image. Drawing the Image will slow down the editor slightly.

Button Colour

Defines the colour of the Flipper and Start Buttons (on the
cabinet). It is best never to use Full Strength colours (i.e.,
where either the Red, Green or Blue components are at
their Limits) as this will adversely affect how the object is
Shaded by the Lighting system. For more information on the
use of Colour refer to the Special Graphic Processing
chapter (link).

Cabinet Image

Allows you to assign a custom cabinet texture to the


external faces of the pinball machine. These faces include
the Left, Right and Front sides of the Cabinet and the Left
and Right sides of the Backbox. If no texture is specified,
then Future Pinball will use a default "Future Pinball" design.
Textures are imported into the Table via the Texture
Manager (link). Selecting a Texture will also show a small
preview picture of the texture.

The Cabinet Texture is split up into the following sections


which are mapped to the appropriate face as shown in the
following Template. (though these pictures are much smaller
than their originals)

The Template The Sci-Fi Cabinet Design

Poster Image

Allows you to assign a texture to the poster which hang up


to the right of the pinball in the game room. If no texture is
specified, then the poster will not be drawn. It is not possible
to change the dimensions of the poster or any other detail
within the game room. Textures are imported into the Table
via the Texture Manager (link). Selecting a Texture will also
show a small preview picture of the texture.
The Virtual Hud (Heads Up Display).

The Translite view also shows the Virtual Screen (or HUD) which allows you to
position objects when are drawn onto the screen in a fixed position which
doesn't move when the camera does. An example of this is the overlay object
(link) which can allow you to place a little logo on the screen when is always
drawn over everything else.

The virtual screen is drawn in the Purple Guide Lines and is mapped to
whatever screen resolution the user decides to play your table in.

Note it is not possible to remove the Future Pinball icon drawn in the Bottom
Right hand of the HUD. The Newton Graphic will however fade out after 10
seconds of playing a table.

The Translite doesn't provide any scripting abilities of its own.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Surfaces

Surfaces in Future Pinball allow you to create areas for the Ball to Roll
on (such as secondary playfields) or to shape playfield plastics which
cover various parts of the table.

Surfaces are the fundamental building block when designing your table as they
allow you to create height on your table. As other playfield objects can only be
attached to surfaces, then you will need to create Surfaces / Plastics for them to
sit on.

When you create a Surface on your table, a simple four cornered surface will be
created onto the table workspace. As surfaces are shapepoint based, you will
need to be familiar with shapepoints (link) before continuing.
Selecting the surface will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the


object via the Editor. The name must be unique for the
table and may not contain any spaces. As other game
objects (pegs, bumpers, flipper etc.) are attached to
surfaces, you should give a descriptive name to your
surface, such as LeftSlingshotSurface or
LeftSlingshotPlastic.

Display Top Image in the Editor

If Enabled (Ticked ), then any texture specified in the Top


Texture Field will be drawn onto the object on the Table
Workspace. This is useful for ensuring that your object
lines up with the texture if you are cookie cutting from a
global texture. (more about this in the Cookie Cut option
below). Drawing the Image will slow down the editor
slightly.

Top Colour

Defines the colour of the Top of the Surface. If the object


is to be rendered with a texture, then the texture will be
tinted with this colour. If the object has no texture, then it
will be rendered in this colour. It is best never to use Full
Strength colours (i.e., where either the Red, Green or Blue
components are at their Limits) as this will adversely affect
how the object is Shaded by the Lighting system. For
more information on the use of Colour refer to the Special
Graphic Processing chapter (link).

Top Texture

Allows you to assign a texture to the top bit of the surface.


Textures are imported into the Table via the Texture
Manager (link). Selecting a Texture will also show a small
preview picture of the texture.

Cookie Cut from Global Texture

If Enabled (Ticked ), then the Shape of the top of the


surface is cookie cut (i.e., stamped out) of a much larger
texture. That is the texture is assumed to map to the entire
size of the playfield. The surface will then only use the
texture data when it shares the same position. This is very
useful to share a common texture with other surfaces on
the table. Generally in a Pinball you will have the main
playfield graphic and then all the plastics. This allows you
to create a plastic layer (on a single texture) and map it to
surfaces drawn in the same location.

If this option is Disabled (not Ticked), then it will use a the


specified top texture 'as is'. The Texture boundaries are
drawn in a Purple Guide Line (or whatever colour you set
it to in the Editor Preferences dialog (link)) which show
you how a texture is to be mapped to the shape of the
surface.

Using a Local mapped texture can some times be harder


to get the image to align up with the shape of the surface
but it does allow you to move the surface around the table
and the texture will follow (where if you use cookie cutting
and move the surface, it will use a different part of a
texture).

It is best to experiment with this option by assign it to a


large texture and moving it around the playfield to see
how it gets affected as this topic is hard to explain but
simple to understand when you see it working.

Sphere Map the Top

If Enabled (Ticked ), then any texture is Sphere Mapped


onto the top of the surface. For more information on
Sphere Mapping refer to the Special Graphic Processing
chapter (link). Useful if you wish to have a nice shiny
piece of metal as your surface.

Side Colour

Defines the Side colour of the Object. If the object is to be


rendered with a texture, then the texture will be tinted with
this colour. If the object has no texture, then it will be
rendered in this colour. It is best never to use Full Strength
colours (i.e., where either the Red, Green or Blue
components are at their Limits) as this will adversely affect
how the object is Shaded by the Lighting system. For
more information on the use of Colour refer to the Special
Graphic Processing chapter (link).

Side Texture

Allows you to wrap a texture around the side on the


surface. Textures are imported into the Table via the
Texture Manager (link). Selecting a Texture will also show
a small preview picture of the texture. The Texture is
Mapped around the surfaces starting from Shapepoint 1
moving to shapepoint 2 and through all the other
shapepoints finishing back as shapepoint 1 again. Its like
wrapping a piece of paper around a can of soda.

There are 2 special properties of Shapepoints which are


specific to Surfaces (and Walls); Clicking on a shape point
will bring up the following property panel:

While the Smooth and Position


fields are described in the
Shapepoint chapter (link), the
Texture Coordinate fields are
specific to this object.

Automatic Texture
Coordinate

If Enabled (Ticked ), then the


texture is automatically wrapped
around the circumference of the
surface.

If not Enabled (not ticked), then


the object will used the Texture
coordinate specified in the
Texture Coordinate field.

Texture Coordinate

This field allows you to manually


set the texture coordinate used at
this shapepoint when rendering
this object. this allows you to
specifically wrap a texture around
the surface anyway you wish.

Texture Coordinates in Future


Pinball are numbers between 0.0
and 1,0. Where 0.0 is the left
edge of the texture and 1.0 is the
right edge. The Texture Manager
contains a tool to allow you to get
the texture coordinate of a
texture by moving the mouse
over a special coordinate window
(for more information on this see
the Texture Manager (link).
You can enter in that number into
this field to draw that position of
the texture at this position of the
surface.

If the Number is greater that 1.0


then the texture will repeat. This
will allow you to repeat a texture
multiple times between
shapepoints.

Flat Shading (Face Normals)

If Enabled (Ticked ), then this option changes the way


the shading is performed on the sides of the surface. Flat
shading is an old computer graphics term where the entire
surface is shaded the same colour. This is useful if you
don't like the way the surface is being shaded. If you have
surfaces which are square in shape or has sharp edges,
then you might find this option will make the surface look a
lot nicer.

The following pictures shows the same shape without and


with Flat shading applied.
Transparency

The Transparency slider allows you to make the Surface


transparent (to simulate translucent plastics). With the
slider all the way over to the right (max), then the surface
is fully opaque. Moving the slider to the left will make the
surface more transparent. When a surface is transparent
any objects which are below it will also show through.
Objects which are transparent (or semi-transparent) are
drawn in a second rendering phase of the game engine.
This is so it can draw objects underneath them as well as
tint them to the colour of the surface.

You will also notice that the reflection of the surface


changes depending if it is transparent or not. If the surface
is opaque, then it will reflection the bottom of the
surface/plastic which is generally screen printed white in
pinballs). If the object is semi-transparent, then it will
reflect the same colour of the surface but a lot weaker.
There is a special case to the Transparency slider. If it is
all the way to the left (at its minimum value) then the
object will be drawn in the second rendering pass but the
object will NOT be transparent. This is so you can render
textures on the surface which either have a colour marked
as being transparent (in the case of BMP textures via the
Texture Manager (link)) or you are using a TGA file with
an alpha channel.

Render object

If Enabled (Ticked ) then the object will be initially be


drawn on the table when the table first starts. If disabled
then the object will not be drawn but depending on if it is
Collidable or not may affect the ball. (This property is
ignored if the surface has been marked as being a
Playfield).

Top Height

Defines the height of the top of the surface (based in


millimeters from the main playfield). Must be greater than
the Bottom Height

Bottom Height

Defines the height of the top of the surface (based in


millimeters from the main playfield). Must be less than the
Top Height. The Top Height minus the Bottom Height
defines the thickness of the surface. If you wish for the
ball to roll underneath the surface, the Bottom Height must
be at least 28mm.

Dropped

If Enabled (Ticked ) then the object will start off at it it's


bottom height (ie it will be lower and the sides will not be
drawn). This allows for surfaces to drop into the playfield
and provides similar functionality to drop targets. (This
property is ignored if the surface has been marked as
being a Playfield).
Collidable (Affects the Ball)

If Enabled (Ticked ) then the object will afftect the ball (ie
the ball will bounce off it). If disabled then the ball will roll
though the object even if it is being drawn (see the
Render Object property above)

Generate Hit Event

If Enabled (Ticked ) then the object will generate a


_HIT() event if the ball hits it. This allows you detect if the
ball hits the object in the script. (This property is ignored if
the surface has been marked as being a Playfield).

Material Type

Defines the Material Type of the Object. Valid options are


Plastic, Wood, Metal and Rubber. Each different material
type affects how the material acts when a ball hits it as
well as how any real time lighting affects the object. For
example. Rubber will affect the ball much more than wood
but has much lower specular (highlight) lighting. Metal will
affect the ball most when hit as it absorbs most the
momentum of the ball but provides the highest amount of
specular highlighting.

Surface is a Playfield

If Enabled (Ticked ), then this surface can reflect the


reflections of objects placed on it. This option should be
used sparingly as it consumes a lot of processor time on
the video card. Objects can only reflect off surfaces which
have this flag set. It is also important to note that some
objects (such as kickers) can only be attached to
"playfield" surfaces. Generally you should set this property
for surfaces which the ball will roll on in normal game play.

Reflects off Playfield


If Enabled (Ticked ), then the object will also reflect off
the Playfield Surface specified by the Playfield property. If
you don't want the object to reflect off the playfield
(providing the user has that video option enabled), then
uncheck this option. If the object isn't generally visible you
may with to disable reflections for this object to save on
the rendering processing.

Surfaces which reflect off lower surfaces will reflect in


white (as it is reflecting the bottom of the surface/plastic
which is generally screen printed white in pinballs) unless
the Reflect Texture option is enabled.

Reflect Texture (not white)

If Enabled (Ticked ), then the top texture will be drawn as


the reflection instead of white (which is generally the
screen printing backing that pinballs use for their plastics).
This option is useful if you have metal or wooden surface.

Playfield

Defines which playfield the surface will reflect off. Only


surfaces which have the 'Surface is a Playfield' flag set
will be listed.

Enamel Map

Allows you to assign a texture to use for the Enamel


Mapping. Enamel Mapping is a process blends in a
second reflective texture which gives the impression of the
surface reflecting an environment. For more information
on Enamel Mapping refer to the Special Graphic
Processing chapter (link). Textures are imported into the
Table via the Texture Manager (link). Selecting a Texture
will also show a small preview picture of the texture.
This Section describes the object and how it can be accessed and
controlled via the script at run-time. Note that you access the object via the
name given in the Name property field

<Boolean> .Render

This property is only available to Surfaces which are NOT


marked as being playfields.

This allows you to turn On (or Off) the render state of the object
(making the object vanish if set to FALSE). If the .Collidable
property is enabled (set to TRUE) then the ball will still interact with
the surface even if the object is not rendered.

Script Example:

' stop drawing this object


MySurface.Render = FALSE

<Boolean> .Dropped
This allows the object to drop to its Bottom Height (The top of the
surface is still drawn). When a object is dropped the Collidable
state is set to FALSE (aswell as enabled when you set the
.Dropped property to FALSE).

Script Example:

' drop the object into the playfield


MySurface.Dropped = TRUE
<Boolean> .Collidable
If this property is TRUE then the ball will be affected if it hits this
surface (aswell as generating a _HIT() event). If set to FALSE then
the ball will ignore this surface and roll though it.

Script Example:

' allow the ball to pass through the object


MySurface.Collidable = FALSE

The Surface object doesn't have any Methods than can be called via
the script.

_Hit()
This event is signaled to the script whenever the Ball Hits a the
surface (providing the Generate Hit Event property is set)

Script Example:

Sub MySurface_Hit()
PlaySound "HitSound"
AddPoints(250)
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Walls (or Guides)

Walls provide a mechanism for you to create boundaries to help guide


the ball around components on the table. Although technically you can
make Walls using the Surface object, Walls provide a much better
mechanism to ensure that they are a constant thickness.

When you create a Wall on your table, a simple straight Wall is created on the
table workspace. As Walls are shapepoint based, you will need to be familiar
with shapepoints (link) before continuing. You can add more shapepoints to
the Wall and shape it as you wish.
Selecting the Wall will bring up the following property sheet:

Name

Sets the name of the object which is used to reference


when you attach an object to a Surface (or a Wall). The
name must be unique for the table and may not contain
any spaces. As other game objects (pegs, bumpers,
flippers, etc.) are attached to Surfaces and Walls, you
should give a descriptive name to your Wall, such as
PlunderLaneWall.

Display Top Image in the Editor

If Enabled (Ticked ), then any texture specified in the


Top Texture Field will be drawn onto the object on the
Table Workspace. This is useful for ensuring that your
object lines up with the texture if you are cookie cutting
from a global texture. (more about this in the Cookie Cut
option below)

Top Colour
Defines the colour of the Top of the Wall. If the object is
to be rendered with a texture, then the texture will be
tinted with this colour. If the object has no texture, then it
will be rendered in this colour. It is best never to use Full
Strength colours (i.e., where either the Red, Green or
Blue components are at their Limits) as this will
adversely affect how the object is Shaded by the
Lighting system. For more information on the use of
Colour refer to the Special Graphic Processing chapter
(link).

Top Texture

Allows you to assign a texture to the top bit of the Wall.


Textures are imported into the Table via the Texture
Manager (link). Selecting a Texture will also show a
small preview picture of the texture.

Cookie Cut from Global Texture

If Enabled (Ticked ), then the Shape of the top of the


Wall is cookie cut (i.e., stamped out) of a much larger
texture. That is the texture is assumed to map to the
entire size of the playfield. The Wall will then only use
the texture data when it shares the same position. This
is very useful to share a common texture with other Wall
on the table. Generally in a Pinball you will have the
main playfield graphic and then all the plastics. This
allows you to create a plastic layer (on a single texture)
and map it to Walls drawn in the same location.

If this option is Disabled (not Ticked), then it will use a


the specified top texture 'as is'. The Texture boundaries
are drawn in a Purple Wall Line (or whatever colour you
set it to in the Editor Preferences dialog (link)) which
show you how a texture is to be mapped to the shape of
the Wall.

Using a Local mapped texture can some times be harder


to get the image to align up with the shape of the Wall
but it does allow you to move the Wall around the table
and the texture will follow (where if you use cookie
cutting and move the Wall, it will use a different part of a
texture).

It is best to experiment with this option by assign it to a


large texture and moving it around the playfield to see
how it gets affected as this topic is hard to explain but
simple to understand when you see it working.

Sphere Map the Top

If Enabled (Ticked ), then any texture is Sphere


Mapped onto the top of the Wall. For more information
on Sphere Mapping refer to the Special Graphic
Processing chapter (link). Useful if you wish to have a
nice shiny piece of metal as your Wall.

Side Colour

Defines the Side colour of the Object. If the object is to


be rendered with a texture, then the texture will be tinted
with this colour. If the object has no texture, then it will
be rendered in this colour. It is best never to use Full
Strength colours (i.e., where either the Red, Green or
Blue components are at their Limits) as this will
adversely affect how the object is Shaded by the
Lighting system. For more information on the use of
Colour refer to the Special Graphic Processing chapter
(link).

Side Texture

Allows you to wrap a texture around the side on the


Wall. Textures are imported into the Table via the Texture
Manager (link). Selecting a Texture will also show a
small preview picture of the texture. The Texture is
Mapped around the Wall starting from Shapepoint 1
moving to shapepoint 2 and through all the other
shapepoints finishing back as shapepoint 1 again. Its
like wrapping a piece of paper around a can of soda.

There are 2 special properties of Shapepoints which are


specific to Wall (and Surfaces); Clicking on a shape
point will bring up the following property panel:
While the Smooth and Position
fields are described in the
Shapepoint chapter (link), the
Texture Coordinate fields are
specific to this object.

Automatic Texture
Coordinate

If Enabled (Ticked ), then the


texture is automatically wrapped
around the circumference of the
Wall.

If not Enabled (not ticked), then


the object will used the Texture
coordinate specified in the
Texture Coordinate field.

Texture Coordinate

This field allows you to manually


set the texture coordinate used at
this shapepoint when rendering
this object. this allows you to
specifically wrap a texture around
the Wall anyway you wish.

Texture Coordinates in Future


Pinball are numbers between 0.0
and 1,0. Where 0.0 is the left
edge of the texture and 1.0 is the
right edge. The Texture Manager
contains a tool to allow you to get
the texture coordinate of a
texture by moving the mouse
over a special coordinate window
(for more information on this see
the Texture Manager (link).
You can enter in that number into
this field to draw that position of
the texture at this position of the
Wall.

Flat Shading (Face Normals)

If Enabled (Ticked ), then this option changes the way


the shading is performed on the sides of the Wall. Flat
shading is an old computer graphics term where the
entire Wall is shaded the same colour. This is useful if
you don't like the way the Wall is being shaded. If you
have a Wall with only 2 shape points (ie it's a
rectangle/square), then you might find this option will
make the Wall look a lot nicer.

The following pictures shows the same shape without


and with Flat shading applied.
Transparency

The Transparency slider allows you to make the Wall


transparent (to simulate translucent plastics). With the
slider all the way over to the right (max) the Wall is fully
opaque. Moving the slider to the left will make the Wall
more transparent. When a Wall is transparent any
objects which are behind it will also show through.
Objects which are transparent (or semi-transparent) are
drawn in a second rendering phase of the game engine.
This is so it can draw objects behind them as well as tint
them to the colour of the Wall.

There is a special case to the Transparency slider. If it is


all the way to the left (at its minimum value) then the
object will be drawn in the second rendering pass but
the object will NOT be transparent. This is so you can
render textures on the Wall which either have a colour
marked as being transparent (in the case of BMP
textures via the Texture Manager (link)) or you are using
a TGA file with an alpha channel.

Render object

If Enabled (Ticked ) then the object will be initially be


drawn on the table when the table first starts. If disabled
then the object will not be drawn but depending on if it is
Collidable or not may affect the ball.

Surface

Defines what Surface (or Wall) the object is attached to.


If no Surface is specified, then the Wall is assumed to be
attached to the Main Playfield. For more information on
this refer to the Surface Object (link)

Height

Defines the height of the Wall (in millimeters).

Width

Defines the Width (Thickness) in millimeters of the Wall.


It must at be least 1mm wide.

Dropped

If Enabled (Ticked ) then the object be drawn as if it


has dropped into the surface that it is attached to. The
top of the Wall will still be drawn (unless the Render
property is set to FALSE).

Collidable (Affects the Ball)

If Enabled (Ticked ) then the object will afftect the ball


(ie the ball will bounce off it). If disabled then the ball will
roll though the object even if it is being drawn (see the
Render Object property above)

Generate Hit Event

If Enabled (Ticked ) then the object will generate a


_HIT() event if the ball hits it. This allows you detect if
the ball hits the object in the script.

Material Type

Defines the Material Type of the Object. Valid options


are Plastic, Wood, Metal and Rubber. Each different
material type affects how the material acts when a ball
hits it as well as how any real time lighting affects the
object. For example. Rubber will affect the ball much
more than wood but has much lower specular (highlight)
lighting. Metal will affect the ball most when hit as it
absorbs most the momentum of the ball but provides the
highest amount of specular highlighting.

Reflects off Playfield

If Enabled (Ticked ), then the object will also reflect off


the Surface it is attached to (providing that surface is
marked as being a 'Playfield'). If you don't want the
object to reflect off the playfield (providing the user has
that video option enabled), then uncheck this option. If
the object isn't generally visible you may with to disable
reflections for this object to save on the rendering
processing.

This Section describes the object and how it can be accessed and
controlled via the script at run-time. Note that you access the object via the
name given in the Name property field
<Boolean> .Render
This allows you to turn On (or Off) the render state of the object
(making the object vanish if set to FALSE). If the .Collidable
property is enabled (set to TRUE) then the ball will still interact
with the surface even if the object is not rendered.

Script Example:

' stop drawing this object


MyWall.Render = FALSE

<Boolean> .Dropped
This allows the object to drop into the surface that it is attached to
(The top of the wall is still drawn). When a object is dropped the
Collidable state is set to FALSE (aswell as enabled when you set
the .Dropped property to FALSE).

Script Example:

' drop the object into the playfield


MyWall.Dropped = TRUE

<Boolean> .Collidable
If this property is TRUE then the ball will be affected if it hits this
wall (aswell as generating a _HIT() event). If set to FALSE then
the ball will ignore this wall and roll though it.

Script Example:
' allow the ball to pass through the object
MyWall.Collidable = FALSE

The Wall object doesn't have any Methods than can be called via the
script.

_Hit()
This event is signaled to the script whenever the Ball Hits a the
Wall (providing the Generate Hit Event property is set)

Script Example:

Sub MyWall_Hit()
PlaySound "HitSound"
AddPoints(250)
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Wire Guides

Wire Guides provide a narrow wall to help guide the ball


around components on the table. Wire Guides (generally
made up out of chrome) are bent at the edges and attach to
the playfield. The guides shape is fully definable. If you
make a guide high enough it is possible for the Ball to roll
underneath it.

(All available types and colour combinations may not be


shown)

When you create a Wire Guide on your table, a simple straight guide
is created on the table workspace. As Wire Guides are shapepoint
based, you will need to be familiar with shapepoints (link) before
continuing. You can add more shapepoints to the guide and shape it
as you wish.

Selecting this object will bring up the following property sheet;

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture,
then the texture will be tinted with this
colour. If the object has no texture, then it
will be rendered in this colour. It is best
never to use Full Strength colours (i.e.,
where either the Red, Green or Blue
components are at their Limits) as this will
adversely affect how the object is Shaded
by the Lighting system. For more
information on the use of Colour refer to
the Special Graphic Processing chapter
(link).

Texture
Allows you to wrap a texture around the
object. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture. In the case
of the Wire Guide object, you will only
need to texture it if you want a Metal Look.

Sphere Mapping

If Enabled (Ticked ), then any texture is


Sphere Mapped onto the object. For more
information on Sphere Mapping refer to
the Special Graphic Processing chapter
(link). Obviously Wire Guides look the
best when this option is enabled and the
appropriate sphere map texture is
assigned.

Mark As Ornamental

If the Wire Guide is non essential to game


play (i.e., it's being used as a Apron Rail)
and is purely eye candy for your table to
look good, you may wish to enable this
flag so people with lower spec machines
can turn off ornament rendering to ease
the load on their machines. It is important
to note that ornamental objects will not be
collidable with the ball.

Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified,
then the Wire Guide is assumed to be
attached to the Main Playfield. For more
information on this refer to the Surface
Object (link)

Height

Defines the height (in millimeters) from the


attached Surface the Wire Guide is. This
height is from the surface to the bottom of
the Wire Guides wire. For Guides types
that do sit on a sit on the surface (i.e., the
metal rails that are usually behind the
flipper), then you will need to set this value
to 0. Valid values range from 0 to 30
millimeters.

Width

Defines the Width (i.e., Diameter) in


millimeters of the Wire Guide. Valid values
range from 1 to 5 millimeters.

Reflects off Playfield

If Enabled (Ticked ), then the object will


also reflect off the Surface it is attached to
(providing that surface is marked as being
a 'Playfield'). If you don't want the object to
reflect off the playfield (providing the user
has that video option enabled), then
uncheck this option. If the object isn't
generally visible you may with to disable
reflections for this object to save on the
rendering processing.
The Wire Guide object doesn't provide any scripting abilities of
its own.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Lane Guides

Lane Guides, when placed parallel to each other, make


narrow lanes for the ball to flow though and, usually, to hit a
switch. Lane Guides are generally attached to the top of
plastic pegs though some older types screw down to the
actual playfield.

(All available types and colour combinations may not be


shown)

Future Pinball contains a variety of Lane Guides to suit the various


styles of pinballs from the crystal types used in modern day pinballs,
to the opaque guides on older Electro-Mechanical pinballs. Lane
Guides can be coloured any colour you wish and can be customised
in a various of ways.

When you create a Lane Guide on your table, the Lane Guide model
will be drawn onto the table workspace.
Selecting this model will bring up the following property sheet:

Model

This field shows the list of available models


which have been loaded into your table.
Future Pinball contains a large collection of
models in the libraries supplied. You can
import more models into your table by using
the Model Manager (link). Only models
which have the same object type of the
current object are listed. Selecting a model
will also show a small preview picture of the
selected Model.

Texture

Allows you to wrap a texture around the


object. Textures are imported into the Table
via the Texture Manager (link). Selecting a
Texture will also show a small preview
picture of the texture. In the case of the
Lane Guide object, you will only need to
texture it if you want a Metal Look.
Crystal

If enabled (Ticked ), the object is rendered


as being translucent (ie semi-transparent).
A lot of Modern Day pinball Lane Guides
are Translucent and if you wish to achieve
this effect then you will need to enable this
flag. As this requires more processing than
a normal to render you might wish to
consider setting this property on Lane
Guides close to the front of the table only.
For more information on Crystal Rendering
refer to the Special Graphic Processing
chapter (link).

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture then
the texture will be tinted with this colour. If
the object has no texture then it will be
rendered in this colour. It is best never to
use Full Strength colours (i.e., where either
the Red, Green or Blue components are at
their Limits) as this will adversely affect how
the object is Shaded by the Lighting
system. For more information on the use of
Colour refer to the Special Graphic
Processing chapter (link).

Defines the X location (based in millimeters


from the top left hand corner of the
playfield) of the object on the Table.
Y

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at a


different rotation on the Table. Valid values
range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object is


attached to. If no Surface is specified then
the Lane Guide is assumed to be attached
to the Main Playfield. For more information
on this refer to the Surface Object (link)

Offset

Defines the offset (in millimeters) from the


attached Surface to draw the Lane Guide
at. As Lane Guides generally sit on top of
pegs but can only be attached to Surfaces
then this value will allow to slightly change
the height of the Guide. For Guides Types
that do sit on a sit on a surface then you will
need to set this value to 0. Valid values
range from 0 to 50 millimeters.

Reflects off Playfield


If Enabled (Ticked ) the object will also
reflect off the Surface it is attached to
(providing that surface is marked as being a
'Playfield'). If you don't want the object to
reflect off the playfield (providing the user
has that video option enabled) then
uncheck this option. If the object isn't
generally visible you may with to disable
reflections for this object to save on the
rendering processing.

The Lane Guide object doesn't provide any scripting abilities of


its own.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Pegs

Pegs are one of the most common components on a pinball


and are designed to hold Rubbers in place so the ball can
interact with them.

(All available types and colour combinations may not be


shown)

Future Pinball contains a variety of pegs to suit the various styles of


pinballs, from the crystal clear pegs used in modern day pinballs to
the opaque plastic pegs on older Electro-Mechanical pinballs, as well
as a collection of metal pegs. Pegs can be coloured any colour you
wish and can be customised in a various of ways.

When you create a peg on your table, the peg model will be drawn
onto the table workspace. As covered in the Main Editor Functionality
chapter of this manual (link) the purple guide line is there to let you
know where to wrap a rubber around the object.
Selecting this model will bring up the following property sheet:

Model

This field shows the list of available models


which have been loaded into your table.
Future Pinball contains a large collection of
models in the libraries supplied. You can
import more models into your table by using
the Model Manager (link). Only models
which have the same object type of the
current object are listed. Selecting a model
will also show a small preview picture of the
selected Model.

Texture

Allows you to wrap a texture around the


object. Textures are imported into the Table
via the Texture Manager (link). Selecting a
Texture will also show a small preview
picture of the texture. In the case of the Peg
object only the Metal pegs really need to be
textures as the flat plastic shading of the
peg look good on its own.
Sphere Mapping

If Enabled (Ticked ), then any texture is


Sphere Mapped onto the object. For more
information on Sphere Mapping refer to the
Special Graphic Processing chapter (link).

Crystal

If enabled (Ticked ), then the object is


rendered as being translucent (ie semi-
transparent). A lot of Modern Day pinball
Pegs are Translucent, and if you wish to
achieve this effect then you will need to
enable this flag. As this requires more
processing than a normal Peg to render
you might wish to consider setting this
property on Pegs close to the front of the
table only. For more information on Crystal
Rendering refer to the Special Graphic
Processing chapter (link).

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture then
the texture will be tinted with this colour. If
the object has no texture then it will be
rendered in this colour. It is best never to
use Full Strength colours (i.e., where either
the Red, Green or Blue components are at
their Limits) as this will adversely affect how
the object is Shaded by the Lighting
system. For more information on the use of
Colour refer to the Special Graphic
Processing chapter (link).

Mark As Ornamental
If the Peg is non essential to game play (ie
it's not holding up a critical rubber) and is
purely eye candy for your table to look
good, you may wish to enable this flag so
people with lower spec machines can turn
off ornament rendering to ease the load on
their machines. If the Peg is hidden by a lot
of other objects and rarely seen during
game play you may also wish to enable this
flag. It is important to note that ornamental
objects will not be collidable with the ball.

Defines the X location (based in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at a


different rotation on the Table. Valid values
range from 0 to 359 degrees. In the Case of
the Peg object then you can use this field to
render each peg at a different angle so
when the table is viewed as a whole all the
pegs don't look like they are perfect copies
of each other. By selecting this to some
random degree you will break up the
uniformity of a table.
Surface

Defines what Surface (or Wall) the object is


attached to. If no Surface is specified then
the Peg is assumed to be attached to the
Main Playfield. For more information on this
refer to the Surface Object (link)

When Hit

This field allows you to specify a sound


effect to play if the ball hits the peg. This
can be used older Flipperless Pinballs
where the ball would hit a nails. Not all peg
types will report the collision back to Future
Pinball. If the Peg also has a rubber around
it then it (obviously) not hit the peg. Sounds
are imported into the Table via the Sound
Manager (link).

Reflects off Playfield

If Enabled (Ticked ) then the object will


also reflect off the Surface it is attached to
(providing that surface is marked as being a
'Playfield'). If you don't want the object to
reflect off the playfield (providing the user
has that video option enabled) then
uncheck this option. If the object isn't
generally visible you may with to disable
reflections for this object to save on the
rendering processing.
The Peg object doesn't provide any scripting abilities of its own.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Ornaments

Ornamental objects serve no real purpose in Future Pinball


except to help your table look good -- they are purely eye
candy. The main types of ornamental objects are screws,
bolts, nuts, acorn caps, gate / spinner brackets and a variety
of playfield holes for slingshots, targets, bulbs, switches, etc.

(All available types and colour combinations may not be


shown)

When you place an ornament on your table, the selected model will
be drawn onto the table workspace.
Notice that ornaments are drawn in a different colour to usual
objects. This is so you can tell at a glance what objects are marked
as being ornamental (ie non essential to game play) and those
objects that are essential (ie Flippers, Pegs, etc.). The colour used to
draw ornamental objects is defined via the Editor Preferences (link).
Selecting this model will bring up the following property sheet:

Model

This field shows the list of available


models which have been loaded into your
table. Future Pinball contains a large
collection of models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Only models which have the same
object type of the current object are listed.
Selecting a model will also show a small
preview picture of the selected Model.

Texture

Allows you to wrap a texture around the


object. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.
Sphere Mapping

If Enabled (Ticked ), then any texture is


Sphere Mapped onto the object. For more
information on Sphere Mapping refer to
the Special Graphic Processing chapter
(link). Useful if you wish to have nice
shiny metal nuts, bolts and screws.

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture then
the texture will be tinted with this colour. If
the object has no texture then it will be
rendered in this colour. It is best never to
use Full Strength colours (i.e., where
either the Red, Green or Blue components
are at their Limits) as this will adversely
affect how the object is Shaded by the
Lighting system. For more information on
the use of Colour refer to the Special
Graphic Processing chapter (link).

Mark As Ornamental

If the object is non essential to game play


(i.e., it's purely eye candy for your table to
look good), you may wish to enable this
flag so people with lower spec machines
can turn off ornament rendering to ease
the load on their machines. It is important
to note that ornamental objects will not be
collidable with the ball.
X

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at


a different rotation on the Table. Valid
values range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified
then the Ornament is assumed to be
attached to the Main Playfield. For more
information on this refer to the Surface
Object (link)

Offset

Defines the offset (in millimeters) from the


attached Surface to draw the Ornament at.
Valid values range from 0 to 50
millimeters. If the ornament is one of the
holes then this field is ignored as holes go
into the attached surface.
Reflects off Playfield

If Enabled (Ticked ) then the object will


also reflect off the Playfield Surface
specified by the Playfield property. If you
don't want the object to reflect off the
playfield (providing the user has that video
option enabled) then uncheck this option.
If the object isn't generally visible you may
with to disable reflections for this object to
save on the rendering processing.

Playfield

Defines which playfield the surface will


reflect off. Only surfaces which have the
'Surface is a Playfield' flag set will be
listed.
If you look at the above picture you will notice that the left
target's stem looks like its been cut short while the one on the
right goes into the ornamental hole. This is because of the way
hole objects are rendered and the order in which they are
rendered. Hole objects need to cut into the playfield (both into
the graphic and the z-buffer which is a hardware buffer which
you video card uses for depth sorting objects). If (in the case of
the left target) the hole is drawn "After" the target (or whichever
other object) it will cut off the bottom of the stem. it is very
important that when using ornamental holes for you table that
you right mouse click on them and select "Send To Back". This
will ensure that the game rendering engine will process them
before any other objects.

The Ornament object doesn't provide any scripting abilities of its


own.
Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: AutoPlunger / Kickback

Auto-Plungers are used to launch a ball onto the playfield. They are a
modern day alternative to a manually controlled plunger. This sort of
object is also commonly used for the kickback mechanism which
returns the ball to the main playfield if it is lost down an outlane.

(All available types and colour combinations may not be shown)

When you create a Auto-Plunger on your table, the object will be drawn onto
the table workspace.

It is extremely important that the Auto-Plunger tip (the rubber) is not


blocked by
other objects (walls, surfaces, etc.) on the table otherwise it will not be
able to
move or it will stick. This is due to the true physics engine used in
Future Pinball.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to


reference the object via Script events. The name
must be unique for the table and may not contain
any spaces. As with all Object Names, you should
give a descriptive name to your object.

Texture

Allows you to wrap a texture around the object.


Textures are imported into the Table via the Texture
Manager (link). Selecting a Texture will also show a
small preview picture of the texture.

Colour

Defines the colour of the Object. If the object is to


be rendered with a texture, the texture will be tinted
with this colour. If the object has no texture, it will be
rendered in this colour. It is best never to use Full
Strength colours (i.e., where either the Red, Green
or Blue components are at their limits) as this will
adversely affect how the object is shaded by the
Lighting system. For more information on the use of
Colour refer to the Special Graphic Processing
chapter (link).

Defines the X location (based in millimeters from


the top left hand corner of the playfield) of the
object on the Table.

Y
Defines the Y location (again in millimeters from the
top left hand corner of the playfield) of the object on
the Table.

Rotation

This field allows you to draw the object at a different


rotation on the Table. Valid values range from 0 to
359 degrees.

Playfield

Defines which surface the Auto-Plunger object is


attached to. Only surfaces which have the 'Surface
is a Playfield' flag set will be listed. If no Surface is
specified, the object is assumed to be attached to
the Main Playfield. For more information on this
refer to the Surface Object (link).

Strength

This field allows you the set how strong the the
Auto-Plunger is (i.e., how hard it hits the ball). A
Slider Position to the Left of the Middle is weaker
and Stronger if it is towards the Right.

Include Plunger Lane V-Cutout

If Enabled (Ticked ), a V-cutout will be drawn


below the Auto-Plunger. This V-cutout allows the
ball to be guided up the plunger lane in a controlled
manner as the ball rolls in the V. It also lowers the
ball slightly, changing the impact point on the ball.
This V-cutout can be positioned vertically to best
suit the auto-plungers. Note that the V-cutout is only
designed for the plunger lane and will not rotate if a
non 0 value is given for this objects rotation.
The V-Cutout is drawn onto the table view in the
editor.
(this picture has been rotated 90° to save
space)

The V-Cutout also contains a hole for the Plunger


lane switch.

Length

Defines the Length of the V-Cutout. It can be one of


the following:

Alignment Description
Short The V-Cutout is 220mm in Length.
Regular The V-Cutout is 305mm in Length.
Long The V-Cutout is 390mm in Length.

Texture

Allows you to wrap a texture around the object.


Textures are imported into the Table via the Texture
Manager (link).

Colour

Defines the colour of the V-Cutout object. If the


object is to be rendered with a texture, the texture
will be tinted with this colour. If the object has no
texture, it will be rendered in this colour. It is best
never to use Full Strength colours (i.e., where either
the Red, Green or Blue components are at their
Limits) as this will adversely affect how the object is
Shaded by the Lighting system. For more
information on the use of Colour refer to the Special
Graphic Processing chapter (link).

Reflects off Playfield


If Enabled (Ticked ), the object will also reflect off
the Main Playfield Surface. If you don't want the
object to reflect off the playfield (providing the user
has that video option enabled), uncheck this option.
If the object isn't generally visible you may with to
disable reflections for this object to save on the
rendering processing.

Solenoid

This field allows you to automate playing of a sound


effect when the solenoid is energised (and thus
flicking the Em-Kicker). Sounds are imported into
the Table via the Sound Manager (link). This
functionality removes the need for a PlaySound
(link) script command.

This Section describes the object and how it can be accessed and controlled
via the script at run-time. Note that you access the object via the name given
in the Name property field

The Auto-Plunger object doesn't have any properties which can be


modified via the script.

The Methods available to the Auto-Plunger;

.SolenoidOn()
This Method will turn ON the Solenoid for the Auto-Plunger. This
will cause the Auto-Plunger rod to move forward which if it
makes contact with a ball, will help push the ball in the direction
of the auto-plunger. It is not possible to permanently turn on the
solenoid for a Auto-Plunger as this method will call the
SolenoidPulse() method.
If the Auto-Plunger object is being used for a kickback
type mechanism, obviously
(like a real pinball) careful timing is needed between a ball
hitting an outlane switch
and the solenoid being fired (and thus hopefully hitting
the ball).

Script Example:

' in a function somewhere


MyAutoPlunger.SolenoidOn()

.SolenoidOff()
This Method will turns OFF the Solenoid for the Auto-Plunger.

Script Example:

MyAutoPlunger.SolenoidOff()

.SolenoidPulse ( <Integer> PulseTime )


The SolenoidPulse method, will pulse the Solenoid On for an
amount of time and when the time expires will turn the Solenoid
Off again. This will cause the Auto-Plunger rod to move forward
which if it makes contact with a ball, will help push the ball in the
direction of the auto-plunger.

PulseTime is a positive number and is the time in milliseconds


to hold the Solenoid on for. If no value is specified, a pulse of
100ms will be used.

Script Example:
' The User Has Pressed A Key on the Keyboard.
'
Sub FuturePinball_KeyPressed(ByVal KeyCode)
' The Player wants to launch the ball
If (KeyCode = GetKeyCode(PlungerKey)) Then
MyAutoPlunger.SolenoidPulse()
End If
End Sub

or;

MyAutoPlunger.SolenoidPulse(500)

The Auto-Plunger object doesn't have any Events which it can call
via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Bumpers

Bumpers are round, mushroom-shaped objects set into the playfield of most pinball
machines. They fall into two categories: active and passive. Both types register a hit when
the a ball collides with them. Active bumpers, the most common, are round mushroom-
shaped targets set into the playfield which forcefully kick the ball away when struck.
Passive bumpers look similar to active bumpers, but do not kick the ball when hit. Active
bumpers are sometimes called Jet, Thumper or Pop Bumpers. Bumpers also contain a
bulb within them which lights up the Bumper Cap either when the bumper is hit or for
specific game rules.

As with all Objects which contain a Light Bulb (Lights, Bumpers, Flashers), Future Pinball
can draw a Halo around the bulb when it is illuminated. This effect is commonly used in
video games and greatly enhances the visual quality of the light as well as the surrounding
areas.

(All available types and colour combinations may not be shown)

When you create a Bumper on your table, the object will be drawn on to the table workspace. The
Purple Guide line shows the position of the Trigger Skirt (if the Bumper has one).
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the object via
Script events. The name must be unique for the table and may not
contain any spaces. As with all Object Names, you should give a
descriptive name to your object.

Cap Model

This field shows the list of available models which have been loaded into
your table. Future Pinball contains a large collection of models in the
libraries supplied. You can import more models into your table by using
the Model Manager (link). Only models which have the same object type
of the current object are listed. Selecting a model will also show a small
preview picture of the selected Model.

Cap Texture

Allows you to wrap a texture over the Cap. Textures are imported into
the Table via the Texture Manager (link). Selecting a Texture will also
show a small preview picture of the texture. For Crystal caps you won't
need to specify a texture.

Crystal

If enabled (Ticked ), the Bumper Cap is rendered as being translucent


(i.e., semi-transparent). A lot of Modern Day Pinball Bumper Caps are
Translucent and if you wish to achieve this effect, you will need to enable
this flag. For more information on Crystal Rendering refer to the Special
Graphic Processing chapter (link).

Lit Colour

Defines the colour of the Cap when the Bulb within the Bumper has
been turned ON (more of this below). If the object is to be rendered with
a texture, the texture will be tinted with this colour. If the object has no
texture, it will be rendered in this colour. It is best never to use Full
Strength colours (i.e., where either the Red, Green or Blue components
are at their Limits) as this will adversely affect how the object is Shaded
by the Lighting system. For more information on the use of Colour refer
to the Special Graphic Processing chapter (link).

Auto Set Unlit Colour to 33%

If enabled (Ticked ), Future Pinball will automatically set the Unlit


colour to 33% brightness of the Lit colour when ever the Lit colour is
changed. On older electro-mechanical games the light change is usually
less dramatic so you may wish to disable this option and set the Unlit
colour so it shows less colour change from the Lit colour.

Unlit Colour

Defines the colour of the Cap when the Bulb within the Bumper has
been turned OFF (more of this below). The same colour guidelines
should be followed as described by the Lit Colour.

Ordered Halo Glow

If enabled (Ticked ), any halo associated with this bumper is drawn at


the same time as the object is drawn. Usually Halos are drawn in a
separate rendering pass as it's quicker for the rendering engine that
way; however, that method does have some drawbacks as the halo will
be drawn over any graphics around it. For more information refer to the
Bulb object (link).

Base Model

This field shows the list of available models which have been loaded into
your table. Future Pinball contains a large collection of models in the
libraries supplied. You can import more models into your table by using
the Model Manager (link). Only models which have the same object type
of the current object are listed. Selecting a model will also show a small
preview picture of the selected Model.

Base Colour

Defines the colour of the Base. It is best never to use Full Strength
colours (i.e., where either the Red, Green or Blue components are at
their Limits) as this will adversely affect how the object is Shaded by the
Lighting system. For more information on the use of Colour refer to the
Special Graphic Processing chapter (link).

Passive (No Bumper Ring)

If enabled (Ticked ), the Bumper Base will not include a Metal ring
which when triggered (via the Trigger Skirt) will forcibly kick the ball
away from the Bumper.

Trigger Skirt
If enabled (Ticked ), the Bumper Base will also include a Trigger Skirt
which allows you to be Notified that the ball has hit the bumper (more
specifically the skirt). If the Bumper is Active (it not Passive), the ball will
also be forcibly kicked away. (This behavior can be overridden in the
script)

Skirt Colour

Defines the colour of the Skirt. It is best never to use Full Strength
colours (i.e., where either the Red, Green or Blue components are at
their Limits) as this will adversely affect how the object is Shaded by the
Lighting system. For more information on the use of Colour refer to the
Special Graphic Processing chapter (link).

Defines the X location (based in millimeters from the top left hand corner
of the playfield) of the object on the Table.

Defines the Y location (again in millimeters from the top left hand corner
of the playfield) of the object on the Table.

Rotation

This field allows you to draw the object at a different rotation on the
Table. Valid values range from 0 to 359 degrees. The rotation affects all
of the various components of the Bumper (Cap, Base, Ring and Skirt).

Surface

Defines what Surface (or Wall) the object is attached to. If no Surface is
specified, the Bumper is assumed to be attached to the Main Playfield.
For more information on this refer to the Surface Object (link).

Reflects off Playfield

If Enabled (Ticked ), the object will also reflect off the Surface it is
attached to (providing that surface is marked as being a 'Playfield'). If
you don't want the object to reflect off the playfield (providing the user
has that video option enabled), uncheck this option. If the object isn't
generally visible you may, with to disable reflections for this object to
save on the rendering processing.

Flash When Hit

If Enabled (Ticked ), and the Bumper has a Trigger Skirt, the Bumper
Bulb will Momentary invert its current state (if it is On, it will turn Off, etc.)
for a fraction of a second. This allows simple flashing of the bulb each
time the bumper is hit by a ball (which is a common effect in pinball
machines).
State

This field allows you to set the Bumpers Bulb State. Each Bumper has a
bulb built into it which when used will illuminate the Bumper Cap with the
Lit / Unlit colours (depending on the state). The Bulb (like a real pinball)
takes around 30 milliseconds to go to full brightness and thus the Cap
will gradually Brighten or Dim. If the Halo option has been enabled by
the Player, a Halo is also drawn over the Bulb which greatly enhances
the visual quality of the lighting effect.

You can select it to one of the following states:

Rubber Size Metric (Millimeters)


Turns Off the Bulb in the Bumper. The Bumper Cap
BulbOff
will be drawn in the UnLit colour.
Turns On the Bulb in the Bumper. The Bumper Cap
BulbOn
will be drawn in the Lit colour.
The Bulb will follow 'pattern' defined by the Blink
BulbBlink
Pattern field.

Blink Pattern

Defines a special Blink Pattern the Bulb will follow when the State has
been set to BulbBlink. This pattern is defined out of a string made up
out of 0s (turn bulb Off) and 1s (turn bulb On). At least 2 pattern states
must be given (i.e., 10, 01, 11 or 00) with a maximum of 32 individual
states. Blink Patterns allow for some very creative light changes to be
made especially which using in conjunction if other objects which contain
a light bulb (Lights, Flashers, Bumpers, etc.)

Blink Interval

Defines the Period (in milliseconds) Future Pinball takes to process each
state within a Blink Pattern. When the Blink Pattern has been fully
processed it will begin again from the start and keep on repeating while
ever the State is BulbBlink. The Interval must be at least 25
milliseconds.

Strength

If the Bumper is 'Active' and has a Trigger Skirt assigned to it, this field
allows you the set how strong the Bumper Solenoid is (i.e., how hard it
hits the ball away). A Slider Position to the Left of the Middle is weaker
and Stronger if it is towards the Right.

Please note that there will always be a slight variance in power applied
due to the fact that a pinball solenoid doesn't charge up at constant rate
each time it is turned on.

Solenoid
This field allows you to automate playing of a sound effect when the ball
hits the Bumper Skirt (if it has one) and the Solenoid Ring fires. Sounds
are imported into the Table via the Sound Manager (link). This
functionality removes the need for a PlaySound (link) script command.

This Section describes the object and how it can be accessed and controlled via the script at
run-time. Note that you access the object via the name given in the Name property field.

<Enumeration> .State = { BulbOff | BulbOn | BulbBlink }


This field allows you to set the Bumpers Bulb State. Valid values are BulbOff,
BulbOn or BulbBlink. If the .State has been set to BulbBlink, the bulb will
immediately start following the Pattern defined via the .BlinkPattern property.

If the Light Sequencer is currently running on this object, changing the State
will not take effect until the Light Sequencer has finished running. When the
Sequencer has finished the Bulb will have the last State set via the script. For
more information see the Light Sequencer Object (link)

Script Example:

MyBumper.State = BulbOn

You can also use the State to help in game play decisions; i.e.,.

' If the Bumper Bulb is on (or blinking) then do something..


If (MyBumper.State <> BulbOff) Then
' add some points
AddPoints(5)
End If

<String> .BlinkPattern = { "<Blink Pattern>" }


Defines a special Blink Pattern the Bulb will follow when the State has been set to
BulbBlink. This pattern is defined out of a string made up out of 0s (turn bulb Off)
and 1s (turn bulb On). At least 2 pattern states must be given (i.e., "10", "01", "11" or
"00") with a maximum of 32 individual states. If the Bulb is currently following another
Blink Pattern, setting this will immediately change the blink pattern over to the new
one.
Script Example:

MyBumper.BlinkPattern = "10"

or:

MyBumper.BlinkPattern = "1101110"

<Integer> .BlinkInterval = { Period in Milliseconds }


Allows you to set the Period (in milliseconds) Future Pinball takes to process each
state within a Blink Pattern. When the Blink Pattern has been fully processed it will
begin again from the start and keep on repeating while ever .State is set to
BulbBlink. The Interval must be at least 25 milliseconds. If the Bulb is currently
Blinking, setting this will reset the current Blink timer to the new value specified.

Script Example:

MyBumper.BlinkInterval = 100

or to make a bulb flash on and off every 150 milliseconds;

MyBumper.State = BulbBlink
MyBumper.BlinkPattern = "10"
MyBumper.BlinkInterval = 150

<Boolean> .Lit (READ ONLY)


This variable (or flag) is set when the bulb is actually lit either by it being permanently
turned ON or the Blink Pattern has turned ON the light for the current interval. This
allows you to test if the bulb is physically ON even if it's following a Blink Pattern.

Script Example:

If (MyBumper.Lit = TRUE) Then


' .. Do Something ..
End If
.Set ( <Enumeration> State, <String> BlinkPattern, <Integer>
BlinkInterval )
This method allows you to set the .State, .BlinkPattern and .BlinkInterval
properties with a single command.

State sets the lit state of the bulb. Valid values are BulbOff, BulbOn or BulbBlink.

BlinkPattern allows you to define a special Blink Pattern the Bulb will follow when
the State has been set to BulbBlink. This pattern is defined out of a string made up
out of 0s (turn bulb Off) and 1s (turn bulb On). At least 2 pattern states must be given
(i.e., "10", "01", "11" or "00") with a maximum of 32 individual states. If the Bulb is
currently following another Blink Pattern, setting this will immediately change the
blink pattern over to the new one. If no string is specified, the current pattern in the
.BlinkPattern property is not changed.

BlinkInterval is a positive number and is the time it takes to process each state
within the Blink Pattern. The Interval must be at least 25 milliseconds and if no value
is specified, the current value in the .BlinkInterval property is not changed.

Script Example:

MyBumper.Set BulbBlink, "10", 150

.FlashForMs ( <Integer> TotalPeriod, <Integer> BlinkInterval,


<Enumeration> EndBulbState )

This method allows you to flash (turn the Bulb On and then Off again) the Bulb for a
number of milliseconds and then set the Bulb state to a defined value when that time
has elapsed. This effect is commonly used in Pinball when enabling a Bulb due to the
player completing a sequence on the table via following the game rules (though in
the case of the bumper object this isn't likely) as it is more noticeable than just
turning on a bulb.

TotalTime is a positive number and is the time in milliseconds to flash to the bulb for.
Ideally it should be divisible by the BlinkInterval parameter for a totally smooth
transition to the EndBulbState parameter.

BlinkInterval is a positive number and is the time to hold each Flash state for. The
Interval must be at least 25 milliseconds and if no value is specified, 75 is used.

EndBulbState defines the state of the bulb after the TotalPeriod has expired. If the
Bulb's .State is read which the bulb is flashing for the desired interval, it will return
the EndBulbState.

This command destroys the contents of the .BlinkInterval and .BlinkPattern


properties.
Script Example:

' flash the bulb for a second and turn it on


MyBumper.FlashForMs 1000, 100, BulbOn

Or to flash the Bulb and return it to its original state;

MyBumper.FlashForMs 1500, , MyBumper.State

The following Solenoid based methods available to the Bumper are for Active Bumpers
only (and they contain a Bumper Ring). If the Bumper is Passive, these commands will
have no effect.

The Bumper kicking the ball is basically automatic. i.e., When the Trigger Skirt is hit by
the ball, the Bumper Ring will automatically trigger providing that the Solenoid is not
currently on or the global script variable fpTilted is not set (for more information on this
refer to the Global Script chapter (link)). It is possible to override this behavior in the
_Hit() event.

.SolenoidOn()
This Method will turn ON the Solenoid for the Bumper. This will move the Bumper
Ring downwards.

Script Example:

' in a function somewhere


MyBumper.SolenoidOn()

.SolenoidOff()
This Method will turns OFF the Solenoid for the Bumper Ring. If the Solenoid is
currently ON, it will return the Bumper Ring to its default position.

Script Example:

MyBumper.SolenoidOff()

.SolenoidPulse ( <Integer> PulseTime )


The SolenoidPulse method, will pulse the Solenoid On for an amount of time and
when the time expires will turn the Solenoid Off again. This is general use of a
solenoid on a pinball otherwise they tend to burn out.
PulseTime is a positive number and is the time in milliseconds to hold the Solenoid
On for. If no value is specified, a pulse of 100ms is used.

Script Example:

MyBumper.SolenoidPulse()

or;

MyBumper.SolenoidPulse(500)

_Hit()

Please note that only the Trigger Skirt will get Hit() events via the script.

If the Ball has hit the Trigger Skirt of a Bumper, this event is ONLY called if the
Solenoid is OFF and the table is not tilted (the global script variable fpTilted is not
set). If the Solenoid is On, the ring is already down and it would be impossible for it
hit the Trigger Skirt (thus triggering the hit). If the Table is Tilted, the game engine will
not trigger automatic events (in this case, the solenoid firing and the ball being hit
back out into the playfield at force). For more information on the fpTilted variable
refer to the Global Script chapter (link).

Script Example:

Sub MyBumper_Hit()
PlaySound "BumperSound"
AddPoints(100)
End Sub

Even though the Slingshot Hammer mechanism is automatically controlled by the


game engine it is possible to override this behavior by issuing a SolenoidOff()
command in the hit event. When the _Hit() event is called, the game engine has
issued a SolenoidPulse() command but it won't take effect until the _Hit() script
event has finished. Thus issuing a SolenoidOn|Off|Pulse command in this event will
override the game engine.

The same is also true if the 'Flash When Hit' property is enabled. The Bulb is primed
to flash when the _Hit() event is called. If you some reason you wish to override this
behavior in the script, issuing a MyBumper.State = MyBumper.State script
command with stop this from happening.
Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Diverters

Diverters swing to divert the ball onto one of several paths.


Diverters are commonly used on lanes to allow the ball to
divert to a special target or lock during certain phases of the
game.

(All available types and colour combinations may not be


shown)

When you create a Diverter on your table, the object will be drawn
on to the table workspace. A second version of the model will also
be drawn. This shows you how the Diverter will swing based on its
properties.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table
and may not contain any spaces. As with
all Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available


models which have been loaded into your
table. Future Pinball contains a large
collection of models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Only models which have the same
object type of the current object are listed.
Selecting a model will also show a small
preview picture of the selected Model.

Texture

Allows you to wrap a texture over the


Diverter. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Sphere Mapping

If Enabled (Ticked ), any texture is


Sphere Mapped onto the object. For more
information on Sphere Mapping refer to
the Special Graphic Processing chapter
(link). Useful if you wish to have a nice
shiny diverter.

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture, the
texture will be tinted with this colour. If the
object has no texture, it will be rendered in
this colour. It is best never to use Full
Strength colours (i.e., where either the
Red, Green or Blue components are at
their Limits) as this will adversely affect
how the object is Shaded by the Lighting
system. For more information on the use
of Colour refer to the Special Graphic
Processing chapter (link).

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Start Angle

Defines the start angle of the Diverter


(when the Solenoid is OFF). Valid values
range from 0 to 359 degrees.
Swing

Defines the Swing of the Diverter when the


Solenoid is turned ON. Depending if you
want a Left or Right rotating Diverter you
may need to enter in a negative value.
Valid values range from -359 to 359
degrees.

Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified,
the Diverter is assumed to be attached to
the Main Playfield. For more information
on this refer to the Surface Object (link).

Reflects off Playfield

If Enabled (Ticked ), the object will also


reflect off the Surface it is attached to
(providing that surface is marked as being
a 'Playfield'). If you don't want the object to
reflect off the playfield (providing the user
has that video option enabled), uncheck
this option. If the object isn't generally
visible you may with to disable reflections
for this object to save on the rendering
processing.

Solenoid

This field allows you to automate playing


of a sound effect when the Divert is
activated. Sounds are imported into the
Table via the Sound Manager (link). This
functionality removes the need for a
PlaySound (link) script command.

This Section describes the object and how it can be accessed


and controlled via the script at run-time. Note that you access
the object via the name given in the Name property field.

The Diverter object doesn't have any properties which can


be modified via the script.

.SolenoidOn()
This Method will turn ON the Solenoid for the Diverter.
This will move the Diverter around to reach the end of
its swing.

Script Example:

' in a function somewhere


MyDiverter.SolenoidOn()

.SolenoidOff()
This Method will turns OFF the Solenoid for the
Diverter. If the Solenoid is currently ON, the Diverter
will return to its start angle.

Script Example:

MyDiverter.SolenoidOff()

.SolenoidPulse ( <Integer> PulseTime )


The SolenoidPulse method, will pulse the Solenoid On
for an amount of time and when the time expires will
turn the Solenoid Off again.

PulseTime is a positive number and is the time in


milliseconds to hold the Solenoid On for. If no value is
specified, a pulse of 100ms will be used.

Script Example:

MyDiverter.SolenoidPulse

or;

MyDiverter.SolenoidPulse(500)

The Diverter object doesn't have any Events which it can


call via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: EM Kicker

Em-Kickers are generally used to kick ball out onto the playfield from
either the Plunger lane or from a locking mechanism on the playfield.

(All available types and colour combinations may not be shown)


(The hole around the Em Kicker is an Ornament object)

When you create a Em-Kicker on your table, the object will be drawn onto the
table workspace.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to


reference the object via Script events. The name
must be unique for the table and may not contain
any spaces. As with all Object Names, you should
give a descriptive name to your object.

Texture

Allows you to wrap a texture around the object.


Textures are imported into the Table via the Texture
Manager (link). Selecting a Texture will also show a
small preview picture of the texture.

Colour

Defines the colour of the Object. If the object is to


be rendered with a texture, the texture will be tinted
with this colour. If the object has no texture, it will be
rendered in this colour. It is best never to use Full
Strength colours (i.e., where either the Red, Green
or Blue components are at their limits) as this will
adversely affect how the object is shaded by the
Lighting system. For more information on the use of
Colour refer to the Special Graphic Processing
chapter (link).

Defines the X location (based in millimeters from


the top left hand corner of the playfield) of the
object on the Table.

Defines the Y location (again in millimeters from the


top left hand corner of the playfield) of the object on
the Table.

Rotation

This field allows you to draw the object at a different


rotation on the Table. Valid values range from 0 to
359 degrees.

Playfield

Defines which surface the Em-Kicker object is


attached to. Only surfaces which have the 'Surface
is a Playfield' flag set will be listed. If no Surface is
specified, the object is assumed to be attached to
the Main Playfield. For more information on this
refer to the Surface Object (link).

Strength

This field allows you the set how strong the the Em-
Kicker is (i.e., how hard it hits the ball). A Slider
Position to the Left of the Middle is weaker and
Stronger if it is towards the Right.

Include Plunger Lane V-Cutout

If Enabled (Ticked ), a V-cutout will be drawn


below the Em-Kicker. This V-cutout allows the ball
to be guided up the plunger lane in a controlled
manner as the ball rolls in the V. It also lowers the
ball slightly, changing the impact point on the ball.
This V-cutout can be positioned vertically to best
suit the kickers position. Note that the V-cutout is
only designed for the plunger lane and will not
rotate if a non 0 value is given for this objects
rotation.
The V-Cutout is drawn onto the table view in the
editor.
(this picture has been rotated 90° to save
space)

The V-Cutout also contains a hole for the Plunger


lane switch.

Length

Defines the Length of the V-Cutout. It can be one of


the following:

Alignment Description
Short The V-Cutout is 220mm in Length.
Regular The V-Cutout is 305mm in Length.
Long The V-Cutout is 390mm in Length.

Texture

Allows you to wrap a texture around the object.


Textures are imported into the Table via the Texture
Manager (link).

Colour

Defines the colour of the V-Cutout object. If the


object is to be rendered with a texture, the texture
will be tinted with this colour. If the object has no
texture, it will be rendered in this colour. It is best
never to use Full Strength colours (i.e., where either
the Red, Green or Blue components are at their
Limits) as this will adversely affect how the object is
Shaded by the Lighting system. For more
information on the use of Colour refer to the Special
Graphic Processing chapter (link).

Reflects off Playfield


If Enabled (Ticked ), the object will also reflect off
the Main Playfield Surface. If you don't want the
object to reflect off the playfield (providing the user
has that video option enabled), uncheck this option.
If the object isn't generally visible you may with to
disable reflections for this object to save on the
rendering processing.

Solenoid

This field allows you to automate playing of a sound


effect when the solenoid is energised. Sounds are
imported into the Table via the Sound Manager
(link). This functionality removes the need for a
PlaySound (link) script command.

This Section describes the object and how it can be accessed and controlled
via the script at run-time. Note that you access the object via the name given
in the Name property field

The Em-Kicker object doesn't have any properties which can be


modified via the script.

The Methods available to the Em-Kicker;

.SolenoidOn()
This Method will turn ON the Solenoid for the Em-Kicker. This
will cause the Em-Kicker to swing on its axis which if it makes
contact with a ball, will help push the ball in the direction of the
Em-Kicker. It is not possible to permanently turn on the solenoid
for a Em-Kicker as this method will call the SolenoidPulse()
method.
If the Em-Kicker object is being used for a kickback type
mechanism, obviously
(like a real pinball) careful timing is needed between a ball
hitting an outlane switch
and the solenoid being fired (and thus hopefully hitting
the ball).

Script Example:

' in a function somewhere


MyEmKicker.SolenoidOn()

.SolenoidOff()
This Method will turns OFF the Solenoid for the Em-Kicker.

Script Example:

MyEmKicker.SolenoidOff()

.SolenoidPulse ( <Integer> PulseTime )


The SolenoidPulse method, will pulse the Solenoid On for an
amount of time and when the time expires will turn the Solenoid
Off again. This will cause the Em-Kicker to swing on its axis
which if it makes contact with a ball, will help push the ball in the
direction of the Em-Kicker.

PulseTime is a positive number and is the time in milliseconds


to hold the Solenoid on for. If no value is specified, a pulse of
100ms will be used.

Script Example:

' The User Has Pressed A Key on the Keyboard.


'
Sub FuturePinball_KeyPressed(ByVal KeyCode)
' The Player wants to launch the ball
If (KeyCode = GetKeyCode(PlungerKey)) Then
MyEmKicker.SolenoidPulse()
End If
End Sub

or;

MyEmKicker.SolenoidPulse(500)

The Em-Kicker object doesn't have any Events which it can call via
the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Flippers

Flippers are what make Pinball what it is today (though many


very early pinball tables didn't have flippers). They are used
by the player to flick the ball around allowing the game to be
played.

(All available types and colour combinations may not be


shown)

When you create a Flipper on your table, the object will be drawn onto
the table workspace. A second version of the model will also be
drawn. This shows you how the Flipper will swing based on its
properties.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table and
may not contain any spaces. As with all
Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available models


which have been loaded into your table.
Future Pinball contains a large collection of
models in the libraries supplied. You can
import more models into your table by using
the Model Manager (link). Only models
which have the same object type of the
current object are listed. Selecting a model
will also show a small preview picture of the
selected Model. The Flipper object has
specific Left and Right handed models.
Texture

Allows you to wrap a texture over the


Flipper. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture, the
texture will be tinted with this colour. If the
object has no texture, it will be rendered in
this colour. It is best never to use Full
Strength colours (i.e., where either the Red,
Green or Blue components are at their
Limits) as this will adversely affect how the
object is Shaded by the Lighting system.
For more information on the use of Colour
refer to the Special Graphic Processing
chapter (link).

Defines the X location (based in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Start Angle
Defines the start angle of the flipper (when
the Solenoid is OFF). Valid values range
from 0 to 359 degrees.

Swing

Defines the Swing of the Flipper when the


Solenoid is turned ON. Depending if you
want a Left or Right facing flipper you may
need to enter in a negative value. Valid
values range from -359 to 359 degrees.

Surface

Defines what Surface (or Wall) the object is


attached to. If no Surface is specified, the
Flipper is assumed to be attached to the
Main Playfield. For more information on this
refer to the Surface Object (link).

Strength

This field allows you the set how strong the


Flipper Solenoid is (i.e., how hard it hits the
ball away). A Slider Position to the Left of
the Middle is weaker and Stronger if it is
towards the Right.

Please note that there will always be a


slight variance in power applied due to the
fact that a pinball solenoid doesn't charge
up at constant rate each time it is turned
on.

Elasticity

Defines how much rebound the object puts


into the ball when the ball hits it and
bounces off

Speed Description
The Rubber is quiet Hard
Hard (Default) will have less impact on
the Ball
Intermediate Somewhere in between

The Rubber is quiet Soft


Soft and will rebound the ball
much further

Reflects off Playfield

If Enabled (Ticked ), the object will also


reflect off the Surface it is attached to
(providing that surface is marked as being a
'Playfield'). If you don't want the object to
reflect off the playfield (providing the user
has that video option enabled), uncheck
this option. If the object isn't generally
visible you may with to disable reflections
for this object to save on the rendering
processing.

Flipper Up

This field allows you to automate playing of


a sound effect when the Solenoid turns ON
and flips the Flipper up. Sounds are
imported into the Table via the Sound
Manager (link). This functionality removes
the need for a PlaySound (link) script
command.

Flipper Down
This field allows you to automate playing of
a sound effect when the Solenoid is turned
OFF (after being turned OFF). Sounds are
imported into the Table via the Sound
Manager (link). This functionality removes
the need for a PlaySound (link) script
command.

This Section describes the object and how it can be accessed


and controlled via the script at run-time. Note that you access the
object via the name given in the Name property field.

The Flipper object doesn't have any properties which can be


modified via the script.

.SolenoidOn()
This Method will turn ON the Solenoid for the Flipper.
This will move the Flipper Up to reach the end of its
swing.

Script Example:

' in a function somewhere


MyFlipper.SolenoidOn()
.SolenoidOff()
This Method will turns OFF the Solenoid for the Flipper.
If the Solenoid is currently ON, the Flipper will return to
its start angle.

Script Example:

MyFlipper.SolenoidOff()

.SolenoidPulse ( <Integer> PulseTime )


The SolenoidPulse method, will pulse the Solenoid On
for an amount of time and when the time expires will
turn the Solenoid Off again.

PulseTime is a positive number and is the time in


milliseconds to hold the Solenoid On for. If no value is
specified, a pulse of 100ms will be used.

Script Example:

MyFlipper.SolenoidPulse()

or;

MyFlipper.SolenoidPulse(500)
The Flipper object doesn't have any Events which it can call
via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Kickers / Gobble Holes

Kickers / Gobble Holes are holes in the playfield in which the


Ball may fall into. Kickers are also unique in Future Pinball in
being able to create Balls on the playfield (or removing
them) as kickers are used also for the drain and plunger
release mechanism. There are 3 types of Kickers available
in Future Pinball, Directional Kickers, Gobble Holes and
Vertical Up Kickers.

(All available types and colour combinations may not be


shown)

When you create a Kicker on your table, the object will be drawn on
to the table workspace.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table
and may not contain any spaces. As with
all Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available


models which have been loaded into your
table. Future Pinball contains a large
collection of models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Only models which have the same
object type of the current object are listed.
Selecting a model will also show a small
preview picture of the selected Model.

Render Model

If enabled (Ticked ), then model selected


will be rendered. While this is the default
and is needed for Kickers placed on the
playfield there may be cases (such as a
captive ball) where you may wish to create
a ball on the playfield in a location without
a physical kicker model being drawn. If a
ball is created (via the .CreateBall or
.CreateCaptiveBall commands) on an
invisible kicker then the ball be created at
that location but on the specified playfield.
The ball will immediately be affected by
gravity or any other objects in the vicinity.
It is impossible for a ball to interact (ie fall
in) with an invisible kicker.

Texture

Allows you to wrap a texture over the


Kicker. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture then
the texture will be tinted with this colour. If
the object has no texture then it will be
rendered in this colour. It is best never to
use Full Strength colours (i.e., where
either the Red, Green or Blue components
are at their Limits) as this will adversely
affect how the object is Shaded by the
Lighting system. For more information on
the use of Colour refer to the Special
Graphic Processing chapter (link).

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Y
Defines the Y location (again in millimeters
from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at


a different rotation on the Table. For
Directional Kickers this also specifies the
direction the ball will be kicked out of the
kicker. Valid values range from 0 to 359
degrees.

Playfield

Defines which surface the kicker object is


attached to. Only surfaces which have the
'Surface is a Playfield' flag set will be
listed. If no Surface is specified then the
object is assumed to be attached to the
Main Playfield. For more information on
this refer to the Surface Object (link).

Type

This field allows you the set how the


Kicker behaves when the Ball is released
from the Kicker / Gobble Hole via a

Type Description
The Ball is kicked out of
Directional the Kicker based on the
Rotation of the Kicker.
GobbleHole The Solenoid
commands have no
effect. It is only possible
to destroy a ball in this
type of kicker.
The Ball is kicked out of
the Kicker upwards. The
rotation property will
VerticalUpKicker
only affect how the
model is rendered on
the playfield.

Strength

This field allows you the set how strong


the Kicker Solenoid is (i.e., how hard it hits
the ball). A Slider Position to the Left of the
Middle is weaker and Stronger if it is
towards the Right. The Lowest Setting
shouldn't really be used for kickers which
kick the ball upwards (towards the back of
the playfield) as this more for dribbling the
ball back out of the kicker towards the
flippers.

Please note that there will always be a


slight variance in power applied due to the
fact that a pinball solenoid doesn't charge
up at constant rate each time it is turned
on.

Solenoid

This field allows you to automate playing


of a sound effect when the ball is released
(kicked out) of the Kicker. Sounds are
imported into the Table via the Sound
Manager (link). This functionality removes
the need for a PlaySound (link) script
command.

This Section describes the object and how it can be accessed


and controlled via the script at run-time. Note that you access
the object via the name given in the Name property field.

The Kicker object doesn't have any properties which can be


modified via the script.

.CreateBall( <Integer> Red, <Integer>


Green, <Integer> Blue, <Integer> BallID )
This Method will create a Ball in the Kicker. Kickers are
the only object in Future Pinball that will allow you to
create ball which are obviously needed for pinball.
Once a ball has been created, you will need to issue a
SolenoidPulse() command to eject the ball out of the
Kicker.

Red is a positive number between 0 and 255 which


equates to a colour value (for the RED channel). If no
value is specifed then 192 will be used.

Green is a positive number between 0 and 255 which


equates to a colour value (for the GREEN channel). If
no value is specifed then 192 will be used.
Blue is a positive number between 0 and 255 which
equates to a colour value (for the BLUE channel). If no
value is specifed then 192 will be used.

BallID is a positive number which you can use via the


fpBallID during a script _HIT() event to identify which
ball hit the object in question. For more information on
thefpBallIDvariable refer to the Global Script chapter
(link).

If there is a ball in the Kicker already then this


command has no effect.

Script Example:

' in a function somewhere


MyKicker.CreateBall()

or to create a Red pinball:

MyKicker.CreateBall 255,0,0

.CreateCaptiveBall( <Integer> Red,


<Integer> Green, <Integer> Blue, <Integer>
BallID )
This Method will also create a Ball in the Kicker but
creating a captive ball will tell the dynamic camera
system not to track this ball. Most camera modes track
the lowest ball on the playfield and this allows you to
create a ball on the playfield without conffusing the
camera system into tracking a non important ball.

Red is a positive number between 0 and 255 which


equates to a colour value (for the RED channel). If no
value is specifed then 192 will be used.

Green is a positive number between 0 and 255 which


equates to a colour value (for the GREEN channel). If
no value is specifed then 192 will be used.

Blue is a positive number between 0 and 255 which


equates to a colour value (for the BLUE channel). If no
value is specifed then 192 will be used.

BallID is a positive number which you can use via the


fpBallID during a script _HIT() event to identify which
ball hit the object in question. For more information on
thefpBallIDvariable refer to the Global Script chapter
(link).

Script Example:

MyKicker.CreateCaptiveBall()

or to create a Green pinball:

MyKicker.CreateCaptiveBall 0,255,0
.DestroyBall()
This Method will Destroy (remove from the playfield)
any Ball in the kicker. If there is no Ball in the kicker
then this command has no effect.

Script Example:

' in a function somewhere


MyKicker.DestoryBall()

.SolenoidOn()
This Method will turn ON the Solenoid for the Kicker. If
there is a ball in the kicker (and depending on the Type
property), then it will be kicked out. It is not possible to
permanently turn on the solenoid for a kicker as this
method will call the SolenoidPulse() method

Script Example:

' in a function somewhere


MyKicker.SolenoidOn()

.SolenoidOff()
This Method will turns OFF the Solenoid for the Kicker.

Script Example:
MyKicker.SolenoidOff()

.SolenoidPulse ( <Integer> PulseTime )


The SolenoidPulse method will pulse the Solenoid On
for an amount of time and, when the time expires, will
turn the Solenoid Off again. If there is a ball in the
Kicker (and depending on the Type property), then it
will be kicked out.

PulseTime is a positive number and is the time in


milliseconds to hold the Solenoid On for. If no value is
specified then a pulse of 100ms will be used.

Script Example:

MyKicker.SolenoidPulse()

or;

MyKicker.SolenoidPulse(500)

_Hit()
This event is called whenever a Ball rolls into the
Kicker. The event is still called even if the table is Tilted
(the global script variable fpTilted is set). For more
information on the fpTilted variable refer to the Global
Script chapter (link).
Script Example:

Sub MyKicker_Hit()
PlaySound "Drain"
AddPoints(100)
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Plungers

Plungers are used to launch a ball onto the playfield. They are manually
controlled by the player who pulls it back and then releases it at the desired
point thus hitting the ball and putting it into play.

(All available types and colour combinations may not be shown)

When you create a Plunger on your table, the object will be drawn onto the table
workspace. Only 1 plunger is allowed to be created on the table.

Electro-Mechanical,
WoodRail Machine
Solidstate or
WedgeHead Machine

It is extremely important that the plunger tip (the rubber) is not blocked by other
objects (walls, surfaces, etc.) on the table otherwise it will not be able to move
or it will stick. This is due to the true physics engine used in Future Pinball.

The Plunger can only be created on the Main Playfield and only at the front of the
machine. The Face plate (which is drawn on the outside of the cabinet) will
automatically follow the position of the Plunger as you move it Left or Right in the editor.
It is not possible to change the texture of the Face Plate.

Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the


object via Script events. The name must be unique for the
table and may not contain any spaces. As with all Object
Names, you should give a descriptive name to your object.

Model

This field shows the list of available models which have been
loaded into your table. Future Pinball contains a large
collection of models in the libraries supplied. You can import
more models into your table by using the Model Manager
(link). Only models which have the same object type of the
current object are listed. Selecting a model will also show a
small preview picture of the selected Model.

Texture

Allows you to wrap a texture around the object. Textures are


imported into the Table via the Texture Manager (link).
Selecting a Texture will also show a small preview picture of
the texture.

Plunger Colour

Defines the colour of the Object. If the object is to be


rendered with a texture then the texture will be tinted with this
colour. If the object has no texture then it will be rendered in
this colour. It is best never to use Full Strength colours (i.e.,
where either the Red, Green or Blue components are at their
Limits) as this will adversely affect how the object is Shaded
by the Lighting system. For more information on the use of
Colour refer to the Special Graphic Processing chapter (link).

Face Plate Colour

Defines the colour of the Pluger Face plate which is on the


outside of the Cabinet. While most pinballs used a silver
coloured face plate, many older woodrail games user more
colourful colours as the plate was a stepped circle.

Defines the X location (based in millimeters from the top left


hand corner of the playfield) of the object on the Table.

Defines the Y location (again in millimeters from the top left


hand corner of the playfield) of the object on the Table.

Strength

This field allows you the set how strong the the Plunger is
(i.e., how hard it hits the ball). A Slider Position to the Left of
the Middle is weaker and Stronger if it is towards the Right.

Include Plunger Lane V-Cutout

If Enabled (Ticked ) then a v-cutout will be drawn above the


plunger. This v-cutout allows the ball to be guided up the
plunder lane in a controlled manor as the ball rolls in the V. It
also lowers the ball slightly changing the impact point on the
ball. This v-cutout can be positioned vertically to best suit the
plunger position.

The V-Cutout is drawn onto the table view in the editor.


(this picture has been rotated 90° to save space)

The V-Cutout also contains a hole for the Plunger lane switch.
Length

Defines the Length of the V-Cutout. It can be one of the


following;

Alignment Description
Short The V-Cutout is 220mm in Length.
Regular The V-Cutout is 305mm in Length.
Long The V-Cutout is 390mm in Length.

Texture

Allows you to wrap a texture around the object. Textures are


imported into the Table via the Texture Manager (link).

Colour

Defines the colour of the V-Cutout object. If the object is to be


rendered with a texture then the texture will be tinted with this
colour. If the object has no texture then it will be rendered in
this colour. It is best never to use Full Strength colours (i.e.,
where either the Red, Green or Blue components are at their
Limits) as this will adversely affect how the object is Shaded
by the Lighting system. For more information on the use of
Colour refer to the Special Graphic Processing chapter (link).

Reflects off Playfield

If Enabled (Ticked ) then the object will also reflect off the
Main Playfield Surface. If you don't want the object to reflect
off the playfield (providing the user has that video option
enabled) then uncheck this option. If the object isn't generally
visible you may with to disable reflections for this object to
save on the rendering processing.

This Section describes the object and how it can be accessed and controlled via the
script at run-time. Note that you access the object via the name given in the Name
property field

The Plunger object doesn't have any properties which can be modified via the
script.
The Methods available to the Plungers

.Pull( <Integer> Percentage )


This Method once called will slowly pull back the Plunger until it reaches
the percentage specified of the maximum extent (70 millimeters) or until
the LetGo() method is called. This method is generally called from within
the FuturePinball_KeyPressed() event. For more information on this
event refer to the Global Script chapter (link). If no Percentage value is
specified then the plunger is pulled out to its 100% maximum extent. The
Percentage value allows for fine script control of the plunger (if needed).

Script Example:

' The User Has Pressed A Key on the Keyboard.


'
Sub FuturePinball_KeyPressed(ByVal KeyCode)
' The Player is Pulling back the Plunger
If (KeyCode = GetKeyCode(PlungerKey)) Then
MyPlunger.Pull()
End If
End Sub

If the player is using a joypad to control the Analog Plunger


functionality built into Future Pinball then the Pull method is
called directly by the core engine and not via any scripting
interface you may have in your table (in response to the
Plunger Key being pressed). You (via the Plunger Key) will not
know that the user is pulling back the plunger via a joypad so
you should ensure that there is no critical game logic which
occurs at this point. If the player releases the Analog Plunger
then you will get the usual KeyReleased() global script event as
if the user was using the keyboard.

.LetGo()
This Method will release the plunger and if it has been pulled back (via the
Pull() method) then the plunger rod will quickly return back to its normal
position. If the Plunger Tip (the rubber) hits a Ball then it will be forced
upwards. This method is generally called from within the
FuturePinball_KeyReleased() event. For more information on this event
refer to the Global Script chapter (link).

Script Example:

' The User Has Released A Key on the Keyboard.


'
Sub FuturePinball_KeyReleased(ByVal KeyCode)
' The Player has released the Plunger, Let it go...
If (KeyCode = GetKeyCode(PlungerKey)) Then
MyPlunger.LetGo()
PlaySound "PlungerRelease"
End If
End Sub

The Plunger object doesn't have any Events which it can call via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Popups

Popups are objects which raise out of the playfield via a


solenoid. The most common popup is the Play-More Post,
which is a hockey-puck-like object which usually sits
between the flippers, stopping the ball from draining.
Popups are initially down (level with the playfield) when the
table is run.

(All available types and colour combinations may not be


shown)
(The hole around the popup is an Ornament object)

When you create a Popup on your table, the object will be drawn
onto the table workspace.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table
and may not contain any spaces. As with
all Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available


models which have been loaded into your
table. Future Pinball contains a large
collection of models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Only models which have the same
object type of the current object are listed.
Selecting a model will also show a small
preview picture of the selected Model.

Texture

Allows you to wrap a texture around the


object. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Sphere Mapping

If Enabled (Ticked ), then any texture is


Sphere Mapped onto the object. For more
information on Sphere Mapping refer to
the Special Graphic Processing chapter
(link).

Crystal

If enabled (Ticked ), then the object is


rendered as being translucent (ie semi-
transparent). As this requires more
processing than a normal Popup to render
you might wish to consider setting this
property on Popups close to the front of
the table only. For more information on
Crystal Rendering refer to the Special
Graphic Processing chapter (link).

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture, the
texture will be tinted with this colour. If the
object has no texture, it will be rendered in
this colour. It is best never to use Full
Strength colours (i.e., where either the
Red, Green or Blue components are at
their Limits) as this will adversely affect
how the object is Shaded by the Lighting
system. For more information on the use
of Colour refer to the Special Graphic
Processing chapter (link).
X

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at


a different rotation on the Table. Valid
values range from 0 to 359 degrees. This
field is ignored if the Carousel property
has been ticked .

Playfield

Defines which surface the Popup object is


attached to. Only surfaces which have the
'Surface is a Playfield' flag set will be
listed. If no Surface is specified, the object
is assumed to be attached to the Main
Playfield. For more information on this
refer to the Surface Object (link).

Reflects off Playfield


If Enabled (Ticked ), the object will also
reflect off the main playfield. If you don't
want the object to reflect off the playfield
(providing the user has that video option
enabled), uncheck this option. If the object
isn't generally visible you may with to
disable reflections for this object to save
on the rendering processing.

Solenoid

This field allows you to automate playing


of a sound effect when the Solenoid is first
engerised causing the popup to raise out
of the playfield. Sounds are imported into
the Table via the Sound Manager (link).
This functionality removes the need for a
PlaySound (link) script command.

This Section describes the object and how it can be accessed and
controlled via the script at run-time. Note that you access the object
via the name given in the Name property field

The Popup object doesn't have any properties which can be


modified via the script.

The Methods available to the Drop Targets

.SolenoidOn()
This Method will turn ON the Solenoid for the Popup. If
the Popup is Down, this command will raise the object
so it is above the playfield. Only when the object is
above the playfield will it interact with the ball.

Script Example:

' in a function somewhere


MyPopup.SolenoidOn()

.SolenoidOff()
This Method will turns OFF the Solenoid for the Popup.
If the object is above the playfield, it will drop back
down into the playfield and will not interact with the ball
anymore.

Script Example:

MyPopup.SolenoidOff()

.SolenoidPulse ( <Integer> PulseTime )


The SolenoidPulse method, will pulse the Solenoid On
for an amount of time and when the time expires will
turn the Solenoid Off again.

PulseTime is a positive number and is the time in


milliseconds to hold the Solenoid On for. If no value is
specified, a pulse of 100ms will be used.

Script Example:
MyPopup.SolenoidPulse()

or;

MyPopup.SolenoidPulse(500)

The Popup object doesn't have any Events which it can call
via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Round Rubbers

Round Rubbers are designed to sit around the various Pegs


in Future Pinball. A Rubber has much more elasticity than
other objects and affects the ball the most when hit. This is
also a rubber which suits being placed around Passive
Bumpers.

(All available types and colour combinations may not be


shown)

When you create a Round Rubber on your table, the object will be
drawn onto the table workspace.

As covered in the Main Editor Functionality chapter of this manual


(link), round rubbers are designed to be placed around the peg
object;

Selecting this object will bring up the following property sheet:

Rubber Type

This field allows you to select the rubber


ring type to use. Future Pinball supports 4
of the most common types used on
pinballs. You can select one of the
following rubber types; if you need a larger
rubber, then you will need to use the
shapeable rubber object and shape your
own.

Metric Imperial
Rubber Size
(Millimeters) (Inches)
Tiny
9.525 3/8
(Default)
MiniPost 11.112 7/16
Post 19.05 3/4
Passive
44.45 1 3/4
Bumper
Colour

Defines the colour of the Object. It is best


never to use Full Strength colours (i.e.,
where either the Red, Green or Blue
components are at their Limits) as this will
adversely affect how the object is Shaded
by the Lighting system. For more
information on the use of Colour refer to
the Special Graphic Processing chapter
(link).

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified,
then the Rubber is assumed to be
attached to the Main Playfield. For more
information on this refer to the Surface
Object (link)

Offset

Defines the offset (in millimeters) from the


attached Surface to draw the Round
Rubber at. As Rubbers generally sit
around Pegs this allows you to set where
the rubber sits when drawn around a peg.
The majority of pegs have their rubber
indent 14mm from the base of the object.
Valid values range from 0 to 50
millimeters.

Elasticity

Defines how much rebound the object puts


into the ball when the ball hits it and
bounces off

Speed Description
The Rubber is quiet Hard will
Hard
have less impact on the Ball
Intermediate
Somewhere in between
(Default)
The Rubber is quiet Soft and
Soft will rebound the ball much
further

Reflects off Playfield

If Enabled (Ticked ), then the object will


also reflect off the Surface it is attached to
(providing that surface is marked as being
a 'Playfield'). If you don't want the object to
reflect off the playfield (providing the user
has that video option enabled), then
uncheck this option. If the object isn't
generally visible you may with to disable
reflections for this object to save on the
rendering processing.
The Round Rubber object doesn't provide any scripting abilities
of its own.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Shapeable Rubbers

Shapeable Rubbers are also designed to sit around the various Pegs in Future
Pinball. A Rubber has much more elasticity than other objects and affects the
ball the most when hit. Shapeable rubber also include special properties to
allow them to become Slingshots or to have Leaf Triggers.

(All available types and colour combinations may not be shown)


(The holes around the Slingshots and Leaf Triggers are Ornament objects)

When you create a Shapeable Rubber on your table, the object will be drawn onto the
table workspace. As Shapeable Rubbers are shapepoint based, you will need to be
familiar with shapepoints (link) before continuing. You can add or delete shapepoints to
the rubber and shape it as you wish.
As covered in the Main Editor Functionality chapter of this manual (link), Shapeable
rubbers are designed to be placed around the peg object and the peg object provides a
guide on how to place the rubber around the object.

Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the


object via Script events. The name must be unique for the
table and may not contain any spaces. As with all Object
Names, you should give a descriptive name to your object,
such as LeftSlingshotRubber.

Colour

Defines the colour of the Object. It is best never to use Full


Strength colours (i.e., where either the Red, Green or Blue
components are at their Limits) as this will adversely affect
how the object is Shaded by the Lighting system. For more
information on the use of Colour refer to the Special Graphic
Processing chapter (link).
Surface

Defines what Surface (or Wall) the object is attached to. If no


Surface is specified, the Rubber is assumed to be attached to
the Main Playfield. For more information on this refer to the
Surface Object (link)

Offset

Defines the offset (in millimeters) from the attached Surface to


draw the Round Rubber at. As Rubbers generally sit around
Pegs this allows you to set where the rubber sits when drawn
around a peg. The majority of pegs have their rubber indent
14mm from the base of the object. Valid values range from 0
to 50 millimeters.

Reflects off Playfield

If Enabled (Ticked ), the object will also reflect off the


Surface it is attached to (providing that surface is marked as
being a 'Playfield'). If you don't want the object to reflect off
the playfield (providing the user has that video option
enabled), uncheck this option. If the object isn't generally
visible you may with to disable reflections for this object to
save on the rendering processing.

Slingshot Strength

If the Rubber has a Slingshot assigned to it (more of this


below), this field allows you the set how strong the slingshot
solenoid is (ie how hard it hits the ball and thus how much the
ball is affected by it). A Slider Position to the Left of the Middle
is weaker and Stronger if it is towards the Right.

Please note that there will always be a slight variance in


power applied due to the fact that a pinball solenoid doesn't
charge up at constant rate each time it is turned on.

Elasticity

Defines how much rebound the object puts into the ball when
the ball hits it and bounces off

Speed Description
The Rubber is quiet Hard will have less
Hard
impact on the Ball
Intermediate Somewhere in between
(Default)
The Rubber is quiet Soft and will rebound
Soft
the ball much further

Slingshot

If the Rubber has a Slingshot assigned to it (more of this


below), you can automate playing of a sound effect when the
ball hits the rubber. Sounds are imported into the Table via the
Sound Manager (link). This functionality removes the need
for a PlaySound (link) script command.

Creating Leaf Switches (Triggers) and


Slingshots.
Shapeable rubbers are special in the way that they can also include Single Leaf
Switches and Slingshot Hammers (A Hammer also includes the 2 side leaf switchs
uses in the mechanism). This allows you to duplicate real pinball mechanisms used
in conjunction with pinball rubbers. Future Pinball allows you to assign Leaf
Switches (similar to a Trigger object) and/or a Slingshot Hammer to the Shapeable
Rubber object.

Please note that only Shapeable Rubbers which have either


a Leaf Switch and/or a Slingshot will get _Hit() events via the
script.

To create either a Leaf Switch or Slingshot you will have to select a shapepoint on
the rubber. Right clicking the shapepoint will bring up the following menu.
Moving your mouse cursor over the Special Attributes sub-menu item will bring up
an other sub-menu. This gives you the option of making a Leaf Trigger (Single
Leaf) or Slingshot. Selecting either of these will create the specified object at that
location. (in the following example we have selected to create a Slingshot)

The editor will draw the corresponding Single Leaf or Slingshot model at that
location. The right mouse button context menu will also draw a check mark on the
selected property. This model will also be drawn when the game is played.
Obviously it is important that you design the shape of the rubber to accommodate
the shape of the attached Slingshot Hammer or Leaf trigger.

Single Leaf as also simply selected via the right mouse button context menu.
Future Pinball only supports one Slingshot Hammer per shapeable rubber. If you try
to assign another shapepoint to a slingshot, the editor will bring up the following
dialog. This allows you to either move the Slingshot to the new location or cancel
out of the change.

You are allowed up to 8 Leaf Switches per Shapeable Rubber (though most pinball
designs would only use 1 to 3 leaves). It is possible to know which leaf of a
shapeable rubber has been triggered (by the rubber being hit by a ball).

Contact Zone for Leaf Switches (Triggers) and


Slingshots.
The contact zone for script Hit events (letting you know the ball has hit a Leaf
Trigger or Slingshot Hammer) is from the shapepoint which has the slingshot or leaf
attribute and the shapepoints either side of it. The editor will also draw the extent of
the slingshot hammer when it stretches the rubber.

The Contact zone in order to activate the


Guide showing the Slingshot slingshot
extent (the shapepoints either side of the hammer (or
leaf)
Rules to Follow for Leaf Switches and
Slingshots.
There are a few rules in Future Pinball when placing either Slingshots or Leaf
Switches on a Rubber. They must have a blank shapepoint (a shapepoint which
doesn't have a special attribute set to it) either side of the Slingshot or Leaf Switch.

Setting the Shapepoint to the immediate Left of the this Leaf Trigger will move the
Leaf Trigger over to that shapepoint. As there must be at least one blank
shapepoint between shapepoints which have special attributes

You can set a second Leaf Trigger (Shapeable Rubbers support a maximum of 8)
to the object providing there is a blank shapepoint in-between. You can create extra
shapepoints to overcome this but remember that this may reduce the contact zone
of the leaf trigger (as described above)

Setting a blank shapepoint to either a Slingshot or a Leaf will automatically clear the
special attributes of the shapepoints either side of the shapepoint.

Leaf Switches Event ID.


As as shapeable rubber can contain multiple Leaf Switches (maximum of 8) it is
possible to tell the script (via the Hit() event) which leaf which was triggered by the
ball hitting the rubber. Selecting the Shapepoint of the Leaf Trigger will bring up the
following Property panel (while the Smooth and Position fields are described in the
Shapepoint chapter (link), the Event ID field is specific to this object):

Setting the Event ID field for this shapepoint will allow you to input a number
(unique to this shapepoint/rubber) which can be used in your script (via the
Rubbers Hit() event) to know which leaf of the rubber was hit. (more of this is
covered below)

This Section describes the object and how it can be accessed and controlled via
the script at run-time. Note that you access the object via the name given in the
Name property field.

The Shapeable Rubber object doesn't have any properties which can be
modified via the script.

The Methods available to the Shapeable rubber are for rubbers which contain
a SlingShot Hammer element. If the rubber doesn't have a slingshot, these
commands will have no effect.

The Slingshot hammer is basically automatic. i.e., When the rubber is hit by the
ball, the slingshot hammer will automatically trigger providing that the Solenoid
is not currently on or the global script variable fpTilted is not set (for more
information on this refer to the Global Script chapter (link)). It is possible to
override this behavior in the _Hit() event.

.SolenoidOn()
This Method will turn ON the Solenoid for the Slingshot Hammer. This will
move the Hammer outwards thus bending the Rubber outwards as well.

Script Example:

' in a function somewhere


MyRubber.SolenoidOn()

.SolenoidOff()
This Method will turns OFF the Solenoid for the Slingshot Hammer. If the
Solenoid is currently ON, it will return the Hammer back to its default
position and thus relaxing the rubber.

Script Example:

MyRubber.SolenoidOff()

.SolenoidPulse ( <Integer> PulseTime )


The SolenoidPulse method, will pulse the Solenoid On for an amount of
time and when the time expires will turn the Solenoid Off again. This is
general use of a solenoid on a pinball otherwise they tend to burn out.

PulseTime is a positive number and is the time in milliseconds to hold the


Solenoid On for. If no value is specified, a pulse of 100ms will be used.

Script Example:

MyRubber.SolenoidPulse()

or;

MyRubber.SolenoidPulse(500)
_Hit()

Please note that only Shapeable Rubbers which have


either a Leaf Switch and/or a Slingshot will get Hit()
events via the script.

This event is signaled to the script whenever the Ball Hits a Rubber which
has either has a Leaf Switch and/or a Slingshot Hammer. The event will
ONLY be generated when it hits the contact zone for a Leaf or Slingshot
Hammer.

If the Ball has hit the contact Zone of a Slingshot, this event is ONLY
called if the Solenoid is Off and the table is not tilted (the global script
variable fpTilted is not set). If the Solenoid is On, the rubber is stretched
and it would be impossible for the ball to hit the rubber and thus triggering
the leaves either side of the hammer. If the Table is Tilted, the game
engine will not trigger automatic events (in this case, the solenoid firing
and the ball being hit back out into the playfield at force). For more
information on the fpTilted variable refer to the Global Script chapter
(link).

Script Example:

Sub MyRubber_Hit()
PlaySound "SlingshotSound"
AddPoints(50)
' Flash the lights around the slingshot
LeftSlingshotBulb1.FlashForMs 100, 50, BulbOff
LeftSlingshotBulb2.FlashForMs 100, 50, BulbOff
End Sub

Even though the Slingshot Hammer mechanism is automatically controlled


by the game engine, it is possible to override this behavior by issuing a
SolenoidOff() command in the hit event. When the _Hit() event is called,
the game engine has issued a SolenoidPulse() command but it won't
take effect until the _Hit() script event has finished. Thus issuing a
SolenoidOn|Off|Pulse command in this event will override the game
engine.

If the Ball has hit the contact Zone of a Leaf Trigger, the event is also
called. Any value entered into the Event ID shapepoint property (for the
Leaf Switch) will be able to be read in the script through the global script
variable fpEventID. For more information on this variable refer to the
Global Script chapter (link). This allows you to tell which Leaf Switch the
ball has hit if the Shapeable Rubber contains multiple Leaves. If the
Rubber only contains one Leaf, you can ignore this value.

For example, the following rubber has the Event ID set to 10 for the left
Leaf Trigger and 20 for the Right Trigger;

Script Example:

Sub MyRubber_Hit()
' Has the Ball hit the Left or Right Leaf Trigger ?
If fpEventID = 10 Then ' Left Leaf
PlaySound "SoundA"
' add some points
AddPoints(5)
Else ' Right Leaf
PlaySound "SoundB"
AddPoints(5)
End If
End Sub

As Rubbers can contain a combination of Leaf Switches and a Singshot


Hammer (though in the real world this would be very rare) you will have to
ensure you set a value for the Event ID on the Leaf Switch and test for that
first in the Hit Event.

i.e.,.

Script Example: (the Left Leaf Trigger has an event ID of 10)


Sub MyRubber_Hit()
' Has the Ball hit the Left Leaf Trigger or the
' Slingshot hammer ?
If fpEventID = 10 Then ' Left Leaf
PlaySound "SoundA"
' add some points
AddPoints(5)
Else ' Slingshot
PlaySound "Slingshot"
AddPoints(10)
End If
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Model Rubbers

Model Rubbers are more specialist rubber objects such us


standup rubbers and the rubber wheel used on older
Electro-Mechanical Pinballs.

(All available types and colour combinations may not be


shown)

When you create a Model Rubber on your table, the object will be
drawn on to the table workspace.
Selecting this object will bring up the following property sheet:

Model

This field shows the list of available


models which have been loaded into your
table. Future Pinball contains a large
collection of models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Only models which have the same
object type of the current object are listed.
Selecting a model will also show a small
preview picture of the selected Model.

Texture

Allows you to wrap a texture around the


object. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture, the
texture will be tinted with this colour. If the
object has no texture, it will be rendered in
this colour. It is best never to use Full
Strength colours (i.e., where either the
Red, Green or Blue components are at
their Limits) as this will adversely affect
how the object is Shaded by the Lighting
system. For more information on the use
of Colour refer to the Special Graphic
Processing chapter (link).

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at


a different rotation on the Table. Valid
values range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified,
the Rubber is assumed to be attached to
the Main Playfield. For more information
on this refer to the Surface Object (link).

Offset
Defines the offset (in millimeters) from the
attached Surface to draw the Rubber at.
Valid values range from 0 to 150
millimeters.

Elasticity

Defines how much rebound the object puts


into the ball when the ball hits it and
bounces off

Speed Description
The Rubber is quiet Hard will
Hard
have less impact on the Ball
Intermediate
Somewhere in between
(Default)
The Rubber is quiet Soft and
Soft will rebound the ball much
further

Reflects off Playfield

If Enabled (Ticked ), the object will also


reflect off the Playfield Surface specified
by the Playfield property. If you don't want
the object to reflect off the playfield
(providing the user has that video option
enabled), uncheck this option. If the object
isn't generally visible you may with to
disable reflections for this object to save
on the rendering processing.

Playfield
Defines which playfield the Rubber will
reflect off. Only surfaces which have the
'Surface is a Playfield' flag set will be
listed.

The Model Rubber object doesn't provide any scripting abilities


of its own.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Leaf Targets

Leaf Targets are used to enhance game play by giving the


player something to aim for to advance the game. Leaf
Targets in Future Pinball will animate when hit by the ball as
the ball will cause the Target to bend the leaf spring pushing
it backwards slightly.

(All available types and colour combinations may not be


shown)
(The holes around the Targets are Ornament objects)

When you create a Leaf Target on your table, the object will be
drawn onto the table workspace.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table
and may not contain any spaces. As with
all Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available


models which have been loaded into your
table. Future Pinball contains a large
collection of models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Only models which have the same
object type of the current object are listed.
Selecting a model will also show a small
preview picture of the selected Model.

Texture

Allows you to wrap a texture around the


object. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture,
then the texture will be tinted with this
colour. If the object has no texture, then it
will be rendered in this colour. It is best
never to use Full Strength colours (i.e.,
where either the Red, Green or Blue
components are at their Limits) as this will
adversely affect how the object is Shaded
by the Lighting system. For more
information on the use of Colour refer to
the Special Graphic Processing chapter
(link).

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at


a different rotation on the Table. Valid
values range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified,
then the Target is assumed to be attached
to the Main Playfield. For more information
on this refer to the Surface Object (link).
Reflects off Playfield

If Enabled (Ticked ), then the object will


also reflect off the Surface it is attached to
(providing that surface is marked as being
a 'Playfield'). If you don't want the object to
reflect off the playfield (providing the user
has that video option enabled), then
uncheck this option. If the object isn't
generally visible you may with to disable
reflections for this object to save on the
rendering processing.

When Hit

This field allows you to automate playing


of a sound effect when the ball hits the
Target. Sounds are imported into the Table
via the Sound Manager (link). This
functionality removes the need for a
PlaySound (link) script command.

This Section describes the object and how it can be accessed


and controlled via the script at run-time. Note that you access
the object via the name given in the Name property field

The Leaf Target object doesn't have any properties which


can be modified via the script.
The Leaf Target object doesn't have any Methods than can
be called via the script.

_Hit()
This event is signaled to the script whenever the Ball
Hits a Leaf Target.

Script Example:

Sub MyTarget_Hit()
PlaySound "TargetHitSound"
AddPoints(100)
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Drop Targets

Drop Targets are used to enhance game play by giving the player something to aim for to
advance the game. Drop Targets in Future Pinball will drop into the Playfield when hit by the
Ball. They can be either Single or created in Banks of up to 10.

(All available types and colour combinations may not be shown)


(The holes around the Targets are Ornament objects)

When you create a Drop Target on your table, the object will be drawn onto the table workspace.

Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to your
object.

Model

This field shows the list of available models which have been loaded into your
table. Future Pinball contains a large collection of models in the libraries
supplied. You can import more models into your table by using the Model
Manager (link). Only models which have the same object type of the current
object are listed. Selecting a model will also show a small preview picture of
the selected Model.

Texture

Allows you to wrap a texture around the object. Textures are imported into the
Table via the Texture Manager (link). Selecting a Texture will also show a
small preview picture of the texture.
Colour

Defines the colour of the Object. If the object is to be rendered with a texture,
then the texture will be tinted with this colour. If the object has no texture, then
it will be rendered in this colour. It is best never to use Full Strength colours
(i.e., where either the Red, Green or Blue components are at their Limits) as
this will adversely affect how the object is Shaded by the Lighting system. For
more information on the use of Colour refer to the Special Graphic Processing
chapter (link).

Defines the X location (based in millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at a different rotation on the Table.
Valid values range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object is attached to. If no Surface is
specified, then the Target is assumed to be attached to the Main Playfield. For
more information on this refer to the Surface Object (link).

Bank Count

This field allows you specify how many individual drop targets will make up
this bank. Valid values range from 1 to 10. When a Drop Target object has a
Bank count greater than 1, then the editor will number each Drop Target. This
number is passed into the HIT() event via the global fpEventID variable. For
more information refer to the HIT() event below.

Bank Spacing

This field allows you to adjust the spacing (in millimeters) between multiple
drop targets (if the Bank Count is greater than 1). Valid values range from 1
and 32 millimeters.

Reflects off Playfield


If Enabled (Ticked ), then the object will also reflect off the Surface it is
attached to (providing that surface is marked as being a 'Playfield'). If you
don't want the object to reflect off the playfield (providing the user has that
video option enabled), then uncheck this option. If the object isn't generally
visible you may with to disable reflections for this object to save on the
rendering processing.

When Hit

This field allows you to automate playing of a sound effect when the Ball hits a
Target (causing it to Drop). Sounds are imported into the Table via the Sound
Manager (link). This functionality removes the need for a PlaySound (link)
script command.

When Reset

This field allows you to automate playing of a sound effect when the Drop
Target bank is reset (pops back up) via the SolenoidPulse() script method.
Sounds are imported into the Table via the Sound Manager (link). This
functionality removes the need for a PlaySound (link) script command.

This Section describes the object and how it can be accessed and controlled via the script at run-
time. Note that you access the object via the name given in the Name property field

<Boolean> .Dropped (READ ONLY)


This variable (or flag) is set when the Ball has hit the Drop Target causing it to 'Drop' into
the playfield. You can use this flag to see if the target is Up (can be hit by the ball) or Down
(Dropped). For Drop Targets that have a bank count greater than 1, then this value will
only return TRUE when ALL of the invidual targets are down.

If the variable is equal to TRUE, then the target(s) is/are down.

Script Example:

' Are Both Drop Targets Down ?


If (MyDropTarget1.Dropped = TRUE) And (MyDropTarget2.Dropped = T
' .. Do Something ..
End If

Or:

' Are All The Targets down in my Drop Target Bank ?


If (MyDropTarget1.Dropped = TRUE)Then
' .. Do Something ..
End If
The Methods available to the Drop Target obejct;

.SolenoidOn()
This Method will turn ON the Solenoid for the Drop Target. If the Drop Target is Down
(Dropped), then this command will pop the target back up. It is not possible for the Ball to
drop a Target if the Solenoid is ON. If the Drop Target has a Bank Count Greater than 1,
then ALL of the individual targets are reset.

Script Example:

' in a function somewhere


MyDropTarget1.SolenoidOn()

.SolenoidOff()
This Method will turns OFF the Solenoid for the Drop Target.

Script Example:

MyDropTarget1.SolenoidOff()

.SolenoidPulse ( <Integer> PulseTime )


The SolenoidPulse method, will pulse the Solenoid On for an amount of time and when the
time expires will turn the Solenoid Off again This is general use of a solenoid on a pinball
otherwise they tend to burn out. This command should be used to reset the Drop Target
when required.

PulseTime is a positive number and is the time in milliseconds to hold the Solenoid On for.
If no value is specified, then a pulse of 100ms will be used.

Script Example:

MyDropTarget1.SolenoidPulse()

or;

MyDropTarget1.SolenoidPulse(500)

.PopDown ( <Integer> TargetNumber )


The PopDown method allows you to manually drop a target without having to have a ball
hit the Target. The Hit() event is not called.

TargetNumber is a positive number between 1 and the number of Targets in the Bank. If
no value is specified then ALL Targets will popdown.

Script Example:

MyDropTarget1.PopDown()

or;

MyDropTarget1.PopDown(1)

_Hit()
This event is signaled to the script whenever the Ball Hits a Drop Target. If the Solenoid is
ON when the ball hit the target, it is impossible for the Target to drop (and hitting the
switch), thus you will not get this event.

If the Drop Target has a Bank Count greater than 1, then you will be able to check which of
the individual drop targets has been hit. this is done via though the global script variable
fpEventID. This is set (for the duration of the HIT() event) to the number (as drawn in the
editor) of the drop target).

If the Drop Target has a Bank Count equal to 1, then you can ignore this value (though it
will be set to 1) as it's obvious which target was hit.

For more information on this variable refer to the Global Script chapter (link).

Script Example:

' single drop target (or I don't care which one is hit)
Sub MyDropTarget1_Hit()
PlaySound "TargetHitSound"
AddPoints(250)
End Sub

or:

' do something depending on which drop target was hit within the
Sub MyDropTarget1_Hit()
PlaySound "TargetHitSound"
AddPoints(250)
Select Case (fpEventID)
Case 1: ' do something
Case 2: ' do something
Case 3: ' do something
' etc.
End Select
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Roto Targets

Roto Targets were quite popular on older Mechanical Pinballs. They were complex wheel
objects which had multiple targets on them. These wheels rotated (thus changing the targets
the player could hit) as the game play progressed. Two types where available: A vertical type
which went into the playfield, and a carousel type which was horizontal to the playfield. Both
types spun around a central axis. Both types of mechanisms usually had a lot of table
components around them, limiting which targets could be hit by the ball.

(All available types and colour combinations may not be shown)


(The holes around the Targets are Ornament objects)

When you create a Roto Target on your table, the object will be drawn onto the table workspace. Roto
Targets can only be created on the Main playfield.

The first 3 targets on the wheel will be numbered so you can see the direction they are ordered (which is
always clockwise).

Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to your
object.
Model

This field shows the list of available models which have been loaded into your
table. Future Pinball contains a large collection of models in the libraries
supplied. You can import more models into your table by using the Model
Manager (link). Only models which have the same object type of the current
object are listed. Selecting a model will also show a small preview picture of
the selected Model.

Image List

Defines the Image List for the Roto Target to use. The Image list allows you to
specify individual textures to each of the targets on the wheel. Starting from
the first target and moving to the last. If you specify less images in the image
list than there are targets on the wheel, then the list will repeat until all targets
have been textured. Image Lists are created by the Image List manager
(link).

Colour

Defines the colour of the Object. If the object is to be rendered with a texture,
then the texture will be tinted with this colour. If the object has no texture, then
it will be rendered in this colour. It is best never to use Full Strength colours
(i.e., where either the Red, Green or Blue components are at their Limits) as
this will adversely affect how the object is Shaded by the Lighting system. For
more information on the use of Colour refer to the Special Graphic Processing
chapter (link).

Carousel Roto Target

If Enabled (Ticked ), then the Roto Target will be a Carousel. These


obviously take up a lot more table space than a normal vertical type.

Defines the X location (based in millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters from the top left hand corner of the
playfield) of the object on the Table.
Rotation

This field allows you to draw the object at a different rotation on the Table.
Valid values range from 0 to 359 degrees. This field is ignored if the Carousel
property has been ticked .

Offset

This field allows you to draw the object at a different offset from the playfield
surface. This allows you to "fit" the wheel depending on how it is to fit into any
surrounding components and how many targets (spokes) you want visible
above the playfield. Valid values range from 0 to 40 millimeters. This field is
ignored if the Carousel property has been ticked .

Target Count

This field allows you specify how spokes (ie targets) the wheel will have. The
circumerence of the wheel will automatically be adjust to ensure that each
target will fit. Valid values range from 8 and 16.

Radius

This field allows you to adjust the calculated radius of the Roto Target is you
wish to make it slightly smaller or larger. Change this target count will reclac
this value. Future Pinball will only allow you to adjust the radius of the roto
target by upto 25% of the calculated radius.

First Target Centered

If Enabled (Ticked ), then the first Target (and the entire wheel) will be
centered (either vertically or horizontally). If Disabled, then the entire wheel is
rotated half a step. This allows you to adjust wheel to suit the requirements
you have about which targets are visible/hittable.

Step Delay

This field allows you specify how long the delay (in milliseconds) the roto
target will pause between steps. Valid values range from 0 and 250
milliseconds.

Reflects off Playfield

If Enabled (Ticked ), then the object will also reflect off the main playfield. If
you don't want the object to reflect off the playfield (providing the user has that
video option enabled), then uncheck this option. If the object isn't generally
visible you may with to disable reflections for this object to save on the
rendering processing.

When Hit

This field allows you to automate playing of a sound effect when the Ball hits
any of the Targets. Sounds are imported into the Table via the Sound
Manager (link). This functionality removes the need for a PlaySound (link)
script command.

Motor Whir

This field allows you to automate playing of a sound effect when the Roto
Target rotates (moves to the next target) via the StepForward() or
StepBackwards() script methods. Sounds are imported into the Table via the
Sound Manager (link). This functionality removes the need for a PlaySound
(link) script command.

This Section describes the object and how it can be accessed and controlled via the script at run-time.
Note that you access the object via the name given in the Name property field

<Integer> .CurrentAngle (READ ONLY)


Will return the current rotational angle of the Roto Target. This will be a value between 0
and the 359 degrees.

Script Example:

If (MyRotoTarget.CurrentAngle > 180) Then


' Do something..
End If

The Methods available to the Roto Targets

.StepForward( <Integer> PulseCount )


This Method will rotate the Roto Target clockwise. The number of steps the roto target will
rotate is specified via the PulseCount parameter. If no value is specified, then the wheel
will rotate 1 step (i.e., 1 target). Roto Targets rotate a single step at a time with a slight
pause in between each step. So if you .StepForward multiple steps, it will rotate, pause,
rotate, pause, etc.

PulseCount must be 1 or greater.

Script Example:

' in a function somewhere


MyRotoTarget.StepForward()

or;
MyRotoTarget.StepForward(8)

.StepBackward( <Integer> PulseCount )


This Method will rotate the Roto Target anti-clockwise. The number of steps the roto target
will rotate is specified via the PulseCount parameter. If no value is specified, then the
wheel will rotate 1 step (i.e., 1 target). Roto Targets rotate a single step at a time with a
slight pause in between each step. So if you .StepBackward multiple steps, it will rotate,
pause, rotate, pause, etc.

PulseCount must be 1 or greater.

Script Example:

MyRotoTarget.StepBackward()

or;

MyRotoTarget.StepBackward(8)

_Hit()
This event is signaled to the script whenever the Ball Hits one of the targets on the roto
wheel.

The global script variable fpEventID will be set to the ID (number) of the target hit. This is
set (for the duration of the HIT() event) to the number (as drawn in the editor) of the target.

If you only wish to know that a target was hit (but not which one), then you can ignore this
value.

For more information on this variable refer to the Global Script chapter (link).

Script Example:

' target hit (I don't care which one was hit)


Sub MyRotoTarget_Hit()
PlaySound "TargetHitSound"
AddPoints(250)
End Sub
or:

' do something depending on which target was hit on the roto


Sub MyRotoTarget_Hit()
PlaySound "TargetHitSound"
AddPoints(250)
Select Case (fpEventID)
Case 1: ' do something
Case 2: ' do something
Case 3: ' do something
' etc.
End Select
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Swinging Targets

Swinging Targets are a basically the same as Leaf Targets


except that they can swing from side to side in a pendulum
motion. The Motor which causes the swinging action can be
turned on and off during game play. Swinging Targets in
Future Pinball will animate when hit by the ball as the ball
will cause the Target to bend the leaf spring pushing it
backwards slightly.

(All available types and colour combinations may not be


shown)
(The hole around the Target is an Ornament object)

When you create a Swinging Target on your table, the object will be
drawn onto the table workspace.

Selecting this object will bring up the following property sheet:


Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table
and may not contain any spaces. As with
all Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available


models which have been loaded into your
table. Future Pinball contains a large
collection of models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Only models which have the same
object type of the current object are listed.
Selecting a model will also show a small
preview picture of the selected Model.

Texture

Allows you to wrap a texture around the


object. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture,
then the texture will be tinted with this
colour. If the object has no texture, then it
will be rendered in this colour. It is best
never to use Full Strength colours (i.e.,
where either the Red, Green or Blue
components are at their Limits) as this will
adversely affect how the object is Shaded
by the Lighting system. For more
information on the use of Colour refer to
the Special Graphic Processing chapter
(link).

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at


a different rotation on the Table. Valid
values range from 0 to 359 degrees.

Reflects off Playfield


If Enabled (Ticked ), then the object will
also reflect off the Main Playfield. If you
don't want the object to reflect off the
playfield (providing the user has that video
option enabled), then uncheck this option.
If the object isn't generally visible you may
with to disable reflections for this object to
save on the rendering processing.

When Hit

This field allows you to automate playing


of a sound effect when the ball hits the
Target. Sounds are imported into the Table
via the Sound Manager (link). This
functionality removes the need for a
PlaySound (link) script command.

This Section describes the object and how it can be accessed


and controlled via the script at run-time. Note that you access
the object via the name given in the Name property field

The Swing Target object doesn't have any properties which


can be modified via the script.

The Methods available to the Swinging Targets

.SolenoidOn()
This Method will turn ON the Solenoid/Motor for the
Swing Target. This will cause the Target to start
swinging again. Script Example:

' in a function somewhere


MySwingTarget.SolenoidOn()

.SolenoidOff()
This Method will turns OFF the Solenoid/Motor for the
Swing Target. If the Solenoid/Motor is currently on then
the Swinging Target will slowly slow down and stop.

Script Example:

MySwingTarget.SolenoidOff()

.SolenoidPulse ( <Integer> PulseTime


)
The SolenoidPulse method, will pulse the
Solenoid/Motor On for an amount of time and when the
time expires will turn the Solenoid/Motor Off again.

PulseTime is a positive number and is the time in


milliseconds to hold the Solenoid/Motor On for. If no
value is specified, then a pulse of 100ms will be used.

Script Example:
MySwingTarget.SolenoidPulse()

or;

MySwingTarget.SolenoidPulse(500)

_Hit()
This event is signaled to the script whenever the Ball
Hits a Swinging Target. (Whether it's moving or not)

Script Example:

Sub MySwingTarget_Hit()
PlaySound "TargetHitSound"
AddPoints(100)
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Vari-Targets

Vari Targets were used in older Mechanical Pinballs. They moved backwards when the ball hit
them and depending on how hard the ball hit them, the more they would move until they
reached the extent of their movement. A solenoid would then release the Vari-Target and it
would moved back to it's original (home) position. A number of switch positions can be given
between the extents of movement so a game could tell the position of the Vari-Target.

(All available types and colour combinations may not be shown)


(The hole around the Vari-Target is an Ornament object)

When you create a Vari-Target on your table, the object will be drawn onto the table workspace. Vari-
Targets can only be created on the Main playfield. To get the best alignment of the Vari-Target object
and the Vari-Target ornament hole its reconmended to set both objects to have the same X/Y
coordinates. You should then set the rotation property to the required angle. The editor view will show
the extents of the Vari-Target movement to help you get the alignment right

Selecting this object will bring up the following property sheet:


Name

Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to your
object.

Model

This field shows the list of available models which have been loaded into your
table. Future Pinball contains a large collection of models in the libraries
supplied. You can import more models into your table by using the Model
Manager (link). Only models which have the same object type of the current
object are listed. Selecting a model will also show a small preview picture of
the selected Model.

Image List

Defines the Image List for the Roto Target to use. The Image list allows you to
specify individual textures to each of the targets on the wheel. Starting from
the first target and moving to the last. If you specify less images in the image
list than there are targets on the wheel, then the list will repeat until all targets
have been textured. Image Lists are created by the Image List manager
(link).

Sphere Mapping

If Enabled (Ticked ), then any texture is Sphere Mapped onto the object. For
more information on Sphere Mapping refer to the Special Graphic Processing
chapter (link).

Colour

Defines the colour of the Object. If the object is to be rendered with a texture,
then the texture will be tinted with this colour. If the object has no texture, then
it will be rendered in this colour. It is best never to use Full Strength colours
(i.e., where either the Red, Green or Blue components are at their Limits) as
this will adversely affect how the object is Shaded by the Lighting system. For
more information on the use of Colour refer to the Special Graphic Processing
chapter (link).

Defines the X location (based in millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at a different rotation on the Table.
Valid values range from 0 to 359 degrees. This field is ignored if the Carousel
property has been ticked .
Switch Count

This field allows you specify how intermediate switches that Vari-Target has
between the extents of the target movement. Valid values are between 3 and
10.

Reflects off Playfield

If Enabled (Ticked ), then the object will also reflect off the main playfield. If
you don't want the object to reflect off the playfield (providing the user has that
video option enabled), then uncheck this option. If the object isn't generally
visible you may with to disable reflections for this object to save on the
rendering processing.

Tension

This field allows you the set how strong the Spring Tension on (which effects
how easy or hard it is to move the Vari-Target with each hit of the ball). A
Slider Position to the Left of the Middle is weaker and Stronger if it is towards
the Right.

This Section describes the object and how it can be accessed and controlled via the script at run-time.
Note that you access the object via the name given in the Name property field

This object doesn't have any properties which can be modified via the script.

The Methods available to the Vari-Target obejct;

.SolenoidOn()
This Method will turn ON the Solenoid for the Vari-Target. This will allow the Target to
return to its original (home) position. If the ball hits the Vari-Target while the solenoid is
ON, then it will move backwards with the hit but will not lock into place as it will resume
returning to it's home position.

It is important to note that the script will get HIT() events as the Vari-Target moves back to
its home position as the target will move over the switch contacts.

Script Example:

' in a function somewhere


MyVariTarget.SolenoidOn()

.SolenoidOff()
This Method will turns OFF the Solenoid for the Varti-Target.

Script Example:

MyVariTarget.SolenoidOff()

.SolenoidPulse ( <Integer> PulseTime )


The SolenoidPulse method, will pulse the Solenoid On for an amount of time and when the
time expires will turn the Solenoid Off again This is general use of a solenoid on a pinball
otherwise they tend to burn out. As the Vari-Target is returned to its home position via
Spring Tension a short period of pulse will not return the Target back to its home position.
A PulseTime of 1000ms will be required to ensure that the target resets properly.

PulseTime is a positive number and is the time in milliseconds to hold the Solenoid On for.
If no value is specified, then a pulse of 100ms will be used.

Script Example:

MyVariTarget.SolenoidPulse()

or;

MyVariTarget.SolenoidPulse(1000)

_Hit()
This event is signaled to the script whenever the Ball Hits the Vari-Target and it moves
backwards enough to hit one of the intermediate switch positions. The maximum value of
this will be the Switch Count property (as set in the editor). If the value is 0 then the Vari-
Target has returned back to it's home position.

The global script variable fpEventID will be set to the ID (number) of the target hit. This is
set (for the duration of the HIT() event).

If you only wish to know that a Vari-Target was hit (and moved but now how far), then you
can ignore this value.

For more information on this variable refer to the Global Script chapter (link).

Script Example:

' target hit (I don't care how far it moved)


Sub MyVariTarget_Hit()
PlaySound "TargetHitSound"
AddPoints(250)
End Sub

or:

' do something depending on which switch contact is active on


Sub MyVariTarget_Hit()
PlaySound "TargetHitSound"
AddPoints(250)
Select Case (fpEventID)
Case 1: ' do something
Case 2: ' do something
Case 3: ' do something
' etc.
End Select
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Bulbs

Bulbs are commonly used in pinballs to add atmosphere and general lighting (called
General Illumination). Bulbs can either be On, Off or be following a special Blink
Pattern. The Star Trigger surround is also classified as a playfield Bulb.

As with all Objects which contain a Light Bulb (Lights, Bumpers, Flashers), Future
Pinball can draw a Halo around the bulb when it is illuminated. This effect is
commonly used in video games and greatly enhances the visual quality of the light
as well as the surrounding areas.

(All available types and colour combinations may not be shown)


(The holes around the Bulbs are Ornament objects)

When you create a Bulb on your table, the object will be drawn onto the current workspace.
Bulbs can be placed on both the table workspace and the Translite workspace

When a Bulb is selected, the Purple Guide line shows the radius of the light glow the bulb
emits.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the object via
Script events. The name must be unique for the table and may not
contain any spaces. As with all Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available models which have been loaded
into your table. Future Pinball contains a large collection of models in
the libraries supplied. You can import more models into your table by
using the Model Manager (link). Only models which have the same
object type of the current object are listed. Selecting a model will also
show a small preview picture of the selected Model.

Render Model

If enabled (Ticked ), the model selected will be rendered. While this


is the default and is needed for Bulbs placed on the playfield, Bulbs
placed on the Translite are generally behind the glass. Unselecting
this option will still draw the bulb halo but not the actual Bulb. This will
allow you to do some nice translite lighting effects where the translite
is lit from behind.

Lens

Allows you to wrap a Lens texture over the Bulb. Textures are
imported into the Table via the Texture Manager (link). Selecting a
Texture will also show a small preview picture of the texture. If you are
using a Wedge Bulb, you will not need to use a lens texture.

Crystal

If enabled (Ticked ), the Bumper Cap is rendered as being


translucent (i.e., semi-transparent). A lot of Modern Day Pinball
Bumper Caps are Translucent and if you wish to achieve this effect,
you will need to enable this flag. For more information on Crystal
Rendering refer to the Special Graphic Processing chapter (link).

Lit Colour

Defines the colour of the Bulb when it has been turned ON (more of
this below). If the object is to be rendered with a texture, the texture
will be tinted with this colour. If the object has no texture, it will be
rendered in this colour. It is best never to use Full Strength colours
(i.e., where either the Red, Green or Blue components are at their
Limits) as this will adversely affect how the object is Shaded by the
Lighting system. For more information on the use of Colour refer to the
Special Graphic Processing chapter (link).

Auto Set Unlit Colour to 33%

If enabled (Ticked ), Future Pinball will automatically set the Unlit


colour to 33% brightness of the Lit colour when ever the Lit colour is
changed. On older electro-mechanical games the light change is
usually less dramatic so you may wish to disable this option and set
the Unlit colour so it shows less colour change from the Lit colour.

Unlit Colour

Defines the colour of the Bulb when it is turned OFF (more of this
below). The same colour guidelines should be followed as described
by the Lit Colour.

Ordered Halo Glow

If enabled (Ticked ), any halo associated with this bulb is drawn at


the same time as the Bulb object is drawn. Usually Halos are drawn in
a separate rendering pass as it's quicker for the rendering engine that
way; however, that method does have some drawbacks as the halo
will be drawn over any graphics around it. (For flat playfield lights this
is actually ideal).

In the following example you can see 2 lights. The Left bulb's halo is
drawn as normal but the Right bulb's halo is drawn as an Ordered
Halo. This allows the rendering engine in Future Pinball to make
objects (such as the example metal surface) totally Opaque, though in
some cases you will want the halo to come though the graphic such as
plastics which illuminate with the light the bulbs underneath generate.
This option relies on the Ordering of the object within the editor. You
much ensure that the Bulb is drawn before the surface. You can
achieve this by selecting the Bulb, clicking the right mouse button and
sending it to the back via the popup mouse menu.

Glow Radius

Defines the Radius (based in millimeters) of the Halo (if one is drawn).
This allows you to set how brightly a bulb affects the area around it.
For Slingshots you may wish to set this to a larger value so it brightens
up more of the area. Valid values range from 20 to 200.

Defines the X location (based in millimeters from the top left hand
corner of the playfield) of the object on the Table.

Defines the Y location (again in millimeters from the top left hand
corner of the playfield) of the object on the Table.

Rotation

This field allows you to draw the object at a different rotation on the
Table. Valid values range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object is attached to. If no Surface
is specified, the object is assumed to be attached to the Main
Playfield. For more information on this refer to the Surface Object
(link). If the Bulb has been placed onto the Translite, this field is
ignored.
Reflects off Playfield

If Enabled (Ticked ), the object will also reflect off the Surface it is
attached to (providing that surface is marked as being a 'Playfield'). If
you don't want the object to reflect off the playfield (providing the user
has that video option enabled), uncheck this option. If the object isn't
generally visible, you may with to disable reflections for this object to
save on the rendering processing.

State

This field allows you to set the Bulb State. The Bulb (like a real pinball)
takes around 30 milliseconds to go to full brightness and thus the light
will gradually Brighten or Dim. If the Halo option has been enabled by
the Player, a Halo is also drawn over the Bulb which greatly enhances
the visual quality of the lighting effect.

You can select it to one of the following states:

State Description
BulbOff Turns Off the Bulb.
BulbOn Turns On the Bulb.
The Bulb will follow 'pattern' defined by the Blink
BulbBlink
Pattern field.

Blink Pattern

Defines a special Blink Pattern the Bulb will follow when the State has
been set to BulbBlink. This pattern is defined out of a string made up
out of 0s (turn bulb Off) and 1s (turn bulb On). At least 2 pattern states
must be given (i.e., 10, 01, 11 or 00) with a maximum of 32 individual
states. Blink Patterns allow for some very creative light changes to be
made especially which using in conjunction if other objects which
contain a light bulb (Lights, Flashers, Bumpers, etc.)

Blink Interval

Defines the Period (in milliseconds) Future Pinball takes to process


each state within a Blink Pattern. When the Blink Pattern has been
fully processed it will begin again from the start and keep on repeating
while ever the State is BulbBlink. The Interval must be at least 25
milliseconds.
This Section describes the object and how it can be accessed and controlled via the
script at run-time. Note that you access the object via the name given in the Name
property field.

<Enumeration> .State = { BulbOff | BulbOn | BulbBlink }


This field allows you to set the Bulb State. Valid values are BulbOff, BulbOn or
BulbBlink. If the .State has been set to BulbBlink, the bulb will immediately
start following the Pattern defined via the .Blink Pattern property.

If the Light Sequencer is currently running on this object, changing the


State will not take effect until the Light Sequencer has finished running.
When the Sequencer has finished the Bulb will have the last State set
via the script. For more information see the Light Sequencer Object
(link)

Script Example:

MyBulb.State = BulbOn

You can also use the State to help in game play decisions; i.e.,

' If the Bulb is on (or blinking) then ..do something..


If (MyBulb.State <> BulbOff) Then
' add some points
AddPoints(5)
End If

<String> .BlinkPattern = { "<Blink Pattern>" }


Defines a special Blink Pattern the Bulb will follow when the State has been set
to BulbBlink. This pattern is defined out of a string made up out of 0s (turn
bulb Off) and 1s (turn bulb On). At least 2 pattern states must be given (i.e.,
"10", "01", "11" or "00") with a maximum of 32 individual states. If the Bulb is
currently following another Blink Pattern, setting this will immediately change
the blink pattern over to the new one.

Script Example:

MyBulb.BlinkPattern = "10"

or:

MyBulb.BlinkPattern = "1101110"

<Integer> .BlinkInterval = { Period in Milliseconds }


Allows you to set the Period (in milliseconds) Future Pinball takes to process
each state within a Blink Pattern. When the Blink Pattern has been fully
processed it will begin again from the start and keep on repeating while ever
.State is set to BulbBlink. The Interval must be at least 25 milliseconds. If the
Bulb is currently Blinking, setting this will reset the current Blink timer to the
new value specified.

Script Example:

MyBulb.BlinkInterval = 100

or to make a bulb flash on and off every 150 milliseconds;

MyBulb.State = BulbBlink
MyBulb.BlinkPattern = "10"
MyBulb.BlinkInterval = 150

<Boolean> .Lit (READ ONLY)


This variable (or flag) is set when the bulb is actually lit either by it being
permanently turned ON or the Blink Pattern has turned ON the light for the
current interval. This allows you to test if the bulb is physically ON even if it's
following a Blink Pattern.
Script Example:

If (MyBulb.Lit = TRUE) Then


' .. Do Something ..
End If

.Set ( <Enumeration> State, <String> BlinkPattern, <Integer>


BlinkInterval )
This method allows you to set the .State, .BlinkPattern and .BlinkInterval
properties with a single command.

State sets the lit state of the bulb. Valid values are BulbOff, BulbOn or
BulbBlink.

BlinkPattern allows you to define a special Blink Pattern the Bulb will follow
when the State has been set to BulbBlink. This pattern is defined out of a
string made up out of 0s (turn bulb Off) and 1s (turn bulb On). At least 2 pattern
states must be given (i.e., "10", "01", "11" or "00") with a maximum of 32
individual states. If the Bulb is currently following another Blink Pattern, setting
this will immediately change the blink pattern over to the new one. If no string is
specified, the current pattern in the .BlinkPattern property is not changed.

BlinkInterval is a positive number and is the time it takes to process each state
within the Blink Pattern. The Interval must be at least 25 milliseconds and if no
value is specified, the current value in the .BlinkInterval property is not
changed.

Script Example:

MyBulb.Set BulbBlink, "10", 150

.FlashForMs ( <Integer> TotalPeriod, <Integer>


BlinkInterval, <Enumeration> EndBulbState )
This method allows you to flash (turn the Bulb On and then Off again) the Bulb
for a number of milliseconds and then set the Bulb state to a defined value
when that time has elapsed. This effect is commonly used in Pinball when
enabling a Bulb due to the player completing a sequence on the table via
following the game rules as it is more noticeable than just turning on a bulb.

TotalTime is a positive number and is the time in milliseconds to flash to the


bulb for. Ideally, it should be divisable by the BlinkInterval parameter for a
totally smooth transition to the EndBulbState parameter.

BlinkInterval is a positive number and is the time to hold each Flash state for.
The Interval must be at least 25 milliseconds and if no value is specified, 75 is
used.

EndBulbState defines the state of the bulb after the TotalPeriod has expired.
If the Bulbs .State is read which the bulb is flashing for the desired interval, the
it will return the EndBulbState.

This command destroys the contents of the .BlinkInterval and


.BlinkPattern properties.

Script Example:

' flash the bulb for a second and turn it on


MyBulb.FlashForMs 1000, 100, BulbOn

Or to flash the Bulb and return it to its original state;

MyBulb.FlashForMs 1500, , MyBulb.State

The Bulb object doesn't have any Events which it can call via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Round Lights

Lights are one of the most common pinball parts which are used to add
atmosphere as well as give the play indication of game play and progress

As with all Objects which contain a Light Bulb (Lights, Bumpers, Flashers),
Future Pinball can draw a Halo around the bulb when it is illuminated. This
effect is commonly used in video games and greatly enhances the visual quality
of the light as well as the surrounding areas.

(All available types and colour combinations may not be shown)

When you create a Round Light on your table, the object will be drawn on to the current
workspace. Lights can be placed on both the Table and Translite workspaces. The Light
will be drawn in the colours specified in the properties.

Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the


object via Script events. The name must be unique for the
table and may not contain any spaces. As with all Object
Names, you should give a descriptive name to your object.

Lens

Allows you to put a Lens texture over the Light. Textures are
imported into the Table via the Texture Manager (link).
Selecting a Texture will also show a small preview picture of
the texture. Unlike most objects in Future Pinball, if no Lens is
specified, the following default texture is used:

TIP: If you wish to have older style lights (as those found on
electro mechanical pinballs), you should use a simple plain
white texture

Cookie Cut from Global Texture

If Enabled (Ticked ), the Lens will be cookie cut (i.e.,


stamped out) of a much larger texture. That is the texture is
assumed to map to the entire size of the playfield. The light
will only use the texture data when it shares the same
position. This is very useful if you wish to use lens graphics
from a common playfield texture. This property is only valid if
the light has been placed on the playfield (and not the
backbox).

Diameter

Defines the Diameter of the Round Light (in Millimeters). Valid


values range from 5 to 100.

Lit Colour

Defines the colour of the Light when it has been turned ON


(more of this below). If the object is to be rendered with a
texture, the texture will be tinted with this colour. If the object
has no texture, it will be rendered in this colour. It is best
never to use Full Strength colours (i.e., where either the Red,
Green or Blue components are at their Limits) as this will
adversely affect how the object is Shaded by the Lighting
system. For more information on the use of Colour refer to the
Special Graphic Processing chapter (link).
Auto Set Unlit Colour to 33%

If enabled (Ticked ), Future Pinball will automatically set the


Unlit colour to 33% brightness of the Lit colour when ever the
Lit colour is changed. On older electro-mechanical games the
light change is usually less dramatic so you may wish to
disable this option and set the Unlit colour so it shows less
colour change from the Lit colour.

Unlit Colour

Defines the colour of the Light when it is turned OFF (more of


this below). The same colour guidelines should be followed
as described by the Lit Colour.

Border Width

Defines the whether or not the Light has a border around it


and if so how thick it is. Borders allows you to help break up
the light from the playfield graphic and are extremely common
on pinballs. Valid values range from 0 to 5 millimeters.

TIP: Borders double the number of polygons which need to


be rendered per light (and usually pinball have lot of lights). In
order to cut down the number of polygons on your table (and
thus make if more playable on lower spec machines), ideally
you should draw a border around the light on your playfield
graphic.

Border Colour

Defines the colour of the Border around the Light (if it has
one). The same colour guidelines should be followed as
described by the Lit Colour.

Defines the X location (based in millimeters from the top left


hand corner of the playfield) of the object on the Table.

Y
Defines the Y location (again in millimeters from the top left
hand corner of the playfield) of the object on the Table.

Surface

Defines what Surface (or Wall) the object is attached to. If no


Surface is specified, the object is assumed to be attached to
the Main Playfield. For more information on this refer to the
Surface Object (link). If the Light has been placed onto the
Translite, this field is not available to be set.

State

This field allows you to set the Light State. The Light (like a
real pinball) takes around 30 milliseconds to go to full
brightness and thus the light will gradually Brighten or Dim. If
the Halo option has been enabled by the Player, a Halo is
also drawn over the Light which greatly enhances the visual
quality of the lighting effect.

You can select it to one of the following states:

State Description
BulbOff Turns Off the Bulb.
BulbOn Turns On the Bulb.
The Bulb will follow 'pattern' defined by the
BulbBlink
Blink Pattern field.

Blink Pattern

Defines a special Blink Pattern the Light will follow when the
State has been set to BulbBlink. This pattern is defined out
of a string made up out of 0s (turn Light Off) and 1s (turn
Light On). At least 2 pattern states must be given (i.e., 10, 01,
11 or 00) with a maximum of 32 individual states. Blink
Patterns allow for some very creative light changes to be
made especially which using in conjunction if other objects
which contain a light bulb (Lights, Flashers, Bumpers, etc.)

Blink Interval

Defines the Period (in milliseconds) Future Pinball takes to


process each state within a Blink Pattern. When the Blink
Pattern has been fully processed it will begin again from the
start and keep on repeating while ever the State is
BulbBlink. The Interval must be at least 25 milliseconds.
Halo Marker
Selecting the Halo Crosshair (which is shaped with a cross and 2 inner circles)
will allow you to change how the Halo is drawn over the object and thus the
position of the bulb underneath the Lens.

This Section describes the object and how it can be accessed and controlled via
the script at run-time. Note that you access the object via the name given in the
Name property field.

<Enumeration> .State = { BulbOff | BulbOn | BulbBlink


}
This field allows you to set the Light State. Valid values are BulbOff,
BulbOn or BulbBlink. If the .State has been set to BulbBlink, the Light
will immediately start following the Pattern defined via the .Blink Pattern
property.

If the Light Sequencer is currently running on this object, changing


the State will not take effect until the Light Sequencer has finished
running. When the Sequencer has finished the Bulb will have the
last State set via the script. For more information see the Light
Sequencer Object (link)

Script Example:

MyLight.State = BulbOn

You can also use the State to help in game play decisions; i.e.,.

' If the Bulb is on (or blinking) then do something..


If (MyLight.State <> BulbOff) Then
' add some points
AddPoints(5)
End If

<String> .BlinkPattern = { "<Blink Pattern>" }


Defines a special Blink Pattern the Light will follow when the State has
been set to BulbBlink. This pattern is defined out of a string made up out
of 0s (turn bulb Off) and 1s (turn bulb On). At least 2 pattern states must
be given (i.e., "10", "01", "11" or "00") with a maximum of 32 individual
states. If the Light is currently following another Blink Pattern, setting this
will immediately change the blink pattern over to the new one.

Script Example:

MyLight.BlinkPattern = "10"

or:
MyLight.BlinkPattern = "1101110"

<Integer> .BlinkInterval = { Period in Milliseconds }


Allows you to set the Period (in milliseconds) Future Pinball takes to
process each state within a Blink Pattern. When the Blink Pattern has
been fully processed it will begin again from the start and keep on
repeating while ever .State is set to BulbBlink. The Interval must be at
least 25 milliseconds. If the Light is currently Blinking, setting this will reset
the current Blink timer to the new value specified.

Script Example:

MyLight.BlinkInterval = 100

or to make a Light flash on and off every 150 milliseconds;

MyLight.State = BulbBlink
MyLight.BlinkPattern = "10"
MyLight.BlinkInterval = 150

<Boolean> .Lit (READ ONLY)


This variable (or flag) is set when the bulb is actually lit either by it being
permanently turned ON or the Blink Pattern has turned ON the light for the
current interval. This allows you to test if the bulb is physically ON even if
it's following a Blink Pattern.

Script Example:

If (MyLight.Lit = TRUE) Then


' .. Do Something ..
End If
.Set ( <Enumeration> State, <String> BlinkPattern, <Integer>
BlinkInterval )
This method allows you to set the .State, .BlinkPattern and
.BlinkInterval properties with a single command.

State sets the lit state of the bulb. Valid values are BulbOff, BulbOn or
BulbBlink.

BlinkPattern allows you to define a special Blink Pattern the Bulb will
follow when the State has been set to BulbBlink. This pattern is defined
out of a string made up out of 0s (turn bulb Off) and 1s (turn bulb On). At
least 2 pattern states must be given (i.e., "10", "01", "11" or "00") with a
maximum of 32 individual states. If the Bulb is currently following another
Blink Pattern, setting this will immediately change the blink pattern over to
the new one. If no string is specified, the current pattern in the
.BlinkPattern property is not changed.

BlinkInterval is a positive number and is the time it takes to process each


state within the Blink Pattern. The Interval must be at least 25 milliseconds
and if no value is specified, the current value in the .BlinkInterval property
is not changed.

Script Example:

MyLight.Set BulbBlink, "10", 150

.FlashForMs ( <Integer> TotalPeriod, <Integer>


BlinkInterval, <Enumeration> EndBulbState )
This method allows you to flash (turn the Bulb On and then Off again) the
Light for a number of milliseconds and then set the Light state to a defined
value when that time has elapsed. This effect is commonly used in Pinball
when enabling a Light due to the player completing a sequence on the
table via following the game rules as it is more noticeable than just turning
on a bulb.

TotalTime is a positive number and is the time in milliseconds to flash to


the bulb for. Ideally it should be divisible by the BlinkInterval parameter
for a totally smooth transition to the EndBulbState parameter.

BlinkInterval is a positive number and is the time to hold each Flash state
for. The Interval must be at least 25 milliseconds and if no value is
specified, 75 is used.
EndBulbState defines the state of the Light after the TotalPeriod has
expired. If the Bulbs .State is read which the bulb is flashing for the
desired interval, the it will return the EndBulbState.

This command destroys the contents of the .BlinkInterval and


.BlinkPattern properties.

Script Example:

' flash the bulb for a second and turn it on


MyLight.FlashForMs 1000, 100, BulbOn

Or to flash the Light and return it to its original state;

MyLight.FlashForMs 1500, , MyLight.State

The Round Light object doesn't have any Events which it can call via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Shapeable Lights

Lights are one of the most common pinball parts which are used to add
atmosphere as well as give the play indication of game play and progress

As with all Objects which contain a Light Bulb (Lights, Bumpers, Flashers),
Future Pinball can draw a Halo around the bulb when it is illuminated. This
effect is commonly used in video games and greatly enhances the visual quality
of the light as well as the surrounding areas.

(All available types and colour combinations may not be shown)

When you create a Shapeable Light on your table, the object will be drawn on to the
current workspace. Lights can be placed on both the Table and Translite workspaces.
As Shapeable Lights are shapepoint-based, you will need to be familiar with
shapepoints (link) before continuing. The Light will be drawn in the colours specified in
the properties.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the


object via Script events. The name must be unique for the
table and may not contain any spaces. As with all Object
Names, you should give a descriptive name to your object.

Lens

Allows you to put a Lens texture over the Light. Textures are
imported into the Table via the Texture Manager (link).
Selecting a Texture will also show a small preview picture of
the texture. Unlike most objects in Future Pinball, if no Lens is
specified, the following default texture is used;

TIP: If you wish to have older style lights (as those found on
electro mechanical pinballs), you should use a simple plain
white texture

Cookie Cut from Global Texture

If Enabled (Ticked ), the Lens will be cookie cut (i.e.,


stamped out) of a much larger texture. That is the texture is
assumed to map to the entire size of the playfield. The light
will then only use the texture data when it shares the same
position. This is very useful if you wish to use lens graphics
from a common playfield texture. This property is only valid if
the light has been placed on the playfield (and not the
backbox).

Lit Colour

Defines the colour of the Light when it has been turned ON


(more of this below). If the object is to be rendered with a
texture, the texture will be tinted with this colour. If the object
has no texture, it will be rendered in this colour. It is best
never to use Full Strength colours (i.e., where either the Red,
Green or Blue components are at their Limits) as this will
adversely affect how the object is Shaded by the Lighting
system. For more information on the use of Colour refer to the
Special Graphic Processing chapter (link).

Auto Set Unlit Colour to 33%

If enabled (Ticked ), Future Pinball will automatically set the


Unlit colour to 33% brightness of the Lit colour when ever the
Lit colour is changed. On older electro-mechanical games the
light change is usually less dramatic so you may wish to
disable this option and set the Unlit colour so it shows less
colour change from the Lit colour.

Unlit Colour

Defines the colour of the Light when it is turned OFF (more of


this below). The same colour guidelines should be followed
as described by the Lit Colour.

Border Width

Defines the whether or not the Light has a border around it


and if so how thick it is. Borders allows you to help break up
the light from the playfield graphic and are extremely common
on pinballs. Valid values range from 0 to 5 millimeters.

TIP: Borders double the number of polygons which need to


be rendered per light (and usually pinball have lot of lights). In
order to cut down the number of polygons on your table (and
thus make if more playable on lower spec machines), ideally
you should draw a border around the light on your playfield
graphic.

Border Colour

Defines the colour of the Border around the Light (if it has
one). The same colour guidelines should be followed as
described by the Lit Colour.
Glow Radius

Defines the Radius (based in millimeters) of the Halo (if one is


drawn). This allows you to set how brightly a bulb affects the
area around it. Valid values range from 20 to 200.

Surface

Defines what Surface (or Wall) the object is attached to. If no


Surface is specified, the object is assumed to be attached to
the Main Playfield. For more information on this refer to the
Surface Object (link). If the Light has been placed onto the
Translite, this field is not available to be set.

State

This field allows you to set the Light State. The Light (like a
real pinball) takes around 30 milliseconds to go to full
brightness and thus the light will gradually Brighten or Dim. If
the Halo option has been enabled by the Player, a Halo is
also drawn over the Light which greatly enhances the visual
quality of the lighting effect.

You can select it to one of the following states:

State Description
BulbOff Turns Off the Bulb.
BulbOn Turns On the Bulb.
The Bulb will follow 'pattern' defined by the
BulbBlink
Blink Pattern field.

Blink Pattern

Defines a special Blink Pattern the Light will follow when the
State has been set to BulbBlink. This pattern is defined out
of a string made up out of 0s (turn Light Off) and 1s (turn
Light On). At least 2 pattern states must be given (i.e., 10, 01,
11 or 00) with a maximum of 32 individual states. Blink
Patterns allow for some very creative light changes to be
made especially which using in conjunction if other objects
which contain a light bulb (Lights, Flashers, Bumpers, etc.)

Blink Interval

Defines the Period (in milliseconds) Future Pinball takes to


process each state within a Blink Pattern. When the Blink
Pattern has been fully processed it will begin again from the
start and keep on repeating while ever the State is
BulbBlink. The Interval must be at least 25 milliseconds.

The Shapeable Light object also includes 2 crosshair elements which can be
shifted to achieve different rendering properties.

These crosshairs are called the Halo Marker and the Texture (or Lens) Focal Point.
Selecting either of the crosshairs will highlight it and display the name of the cross
hair.

Light Lens (Texture) Focal Point


Selecting the Texture Crosshair (which is shaped like a plus symbol with a
circle around it) will allow you to change how the Light Lens (Texture) is
mapped to the Light.

This can be used to change the appearance of the Lens on the Light;
The Default Position

Shifting the Texture Focal Point up will change how the same texture is rendered.

It is best to experiment with the Texture Focal point with your own Lights
and Lens Texture.

Halo Marker
Selecting the Halo Crosshair (which is shaped with a cross and 2 inner circles)
will allow you to change how the Halo is drawn over the object and thus the
position of the bulb underneath the Lens.
This Section describes the object and how it can be accessed and controlled via
the script at run-time. Note that you access the object via the name given in the
Name property field.

<Enumeration> .State = { BulbOff | BulbOn | BulbBlink


}
This field allows you to set the Light State. Valid values are BulbOff,
BulbOn or BulbBlink. If the .State has been set to BulbBlink the Light
will immediately start following the Pattern defined via the .Blink Pattern
property.

If the Light Sequencer is currently running on this object, changing


the State will not take effect until the Light Sequencer has finished
running. When the Sequencer has finished the Bulb will have the
last State set via the script. For more information see the Light
Sequencer Object (link)

Script Example:
MyLight.State = BulbOn

You can also use the State to help in game play decisions; i.e.,.

' If the Bulb is on (or blinking) then do something..


If (MyLight.State <> BulbOff) Then
' add some points
AddPoints(5)
End If

<String> .BlinkPattern = { "<Blink Pattern>" }


Defines a special Blink Pattern the Light will follow when the State has
been set to BulbBlink. This pattern is defined out of a string made up out
of 0s (turn bulb Off) and 1s (turn bulb On). At least 2 pattern states must
be given (i.e., "10", "01", "11" or "00") with a maximum of 32 individual
states. If the Light is currently following another Blink Pattern, setting this
will immediately change the blink pattern over to the new one.

Script Example:

MyLight.BlinkPattern = "10"

or:

MyLight.BlinkPattern = "1101110"

<Integer> .BlinkInterval = { Period in Milliseconds }


Allows you to set the Period (in milliseconds) Future Pinball takes to
process each state within a Blink Pattern. When the Blink Pattern has
been fully processed it will begin again from the start and keep on
repeating while ever .State is set to BulbBlink. The Interval must be at
least 25 milliseconds. If the Light is currently Blinking, setting this will reset
the current Blink timer to the new value specified.

Script Example:
MyLight.BlinkInterval = 100

or to make a Light flash on and off every 150 milliseconds;

MyLight.State = BulbBlink
MyLight.BlinkPattern = "10"
MyLight.BlinkInterval = 150

<Boolean> .Lit (READ ONLY)


This variable (or flag) is set when the bulb is actually lit either by it being
permanently turned ON or the Blink Pattern has turned ON the light for the
current interval. This allows you to test if the bulb is physically ON even if
it's following a Blink Pattern.

Script Example:

If (MyLight.Lit = TRUE) Then


' .. Do Something ..
End If

.Set ( <Enumeration> State, <String> BlinkPattern, <Integer>


BlinkInterval )
This method allows you to set the .State, .BlinkPattern and
.BlinkInterval properties with a single command.

State sets the lit state of the bulb. Valid values are BulbOff, BulbOn or
BulbBlink.

BlinkPattern allows you to define a special Blink Pattern the Bulb will
follow when the State has been set to BulbBlink. This pattern is defined
out of a string made up out of 0s (turn bulb Off) and 1s (turn bulb On). At
least 2 pattern states must be given (i.e., "10", "01", "11" or "00") with a
maximum of 32 individual states. If the Bulb is currently following another
Blink Pattern, setting this will immediately change the blink pattern over to
the new one. If no string is specified, the current pattern in the
.BlinkPattern property is not changed.

BlinkInterval is a positive number and is the time it takes to process each


state within the Blink Pattern. The Interval must be at least 25 milliseconds
and if no value is specified, the current value in the .BlinkInterval property
is not changed.

Script Example:

MyLight.Set BulbBlink, "10", 150

.FlashForMs ( <Integer> TotalPeriod, <Integer>


BlinkInterval, <Enumeration> EndBulbState )
This method allows you to flash (turn the Bulb On and then Off again) the
Light for a number of milliseconds and then set the Light state to a defined
value when that time has elapsed. This effect is commonly used in Pinball
when enabling a Light due to the player completing a sequence on the
table via following the game rules as it is more noticeable than just turning
on a bulb.

TotalTime is a positive number and is the time in milliseconds to flash to


the bulb for. Ideally it should be divisible by the BlinkInterval parameter
for a totally smooth transition to the EndBulbState parameter.

BlinkInterval is a positive number and is the time to hold each Flash state
for. The Interval must be at least 25 milliseconds and if no value is
specified, 75 is used.

EndBulbState defines the state of the Light after the TotalPeriod has
expired. If the Bulbs .State is read which the bulb is flashing for the
desired interval, the it will return the EndBulbState.

This command destroys the contents of the .BlinkInterval and


.BlinkPattern properties.

Script Example:

' flash the bulb for a second and turn it on


MyLight.FlashForMs 1000, 100, BulbOn
Or to flash the Light and return it to its original state;

MyLight.FlashForMs 1500, , MyLight.State

The Shapeable Light object doesn't have any Events which it can call via the
script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Light Images

Light Images work in the same way as all the over Light/Bulb objects in Future Pinball but
they use a texture animation to animate the Off to On States (with any number of animation
frames). This allows for much more complex light designs.

As with all Objects which contain a Light Bulb (Lights, Bumpers, Flashers), Future Pinball can
draw a Light Images around the bulb when it is illuminated. This effect is commonly used in
video games and greatly enhances the visual quality of the light as well as the surrounding
areas.

(All available types and colour combinations may not be shown)

When you create a Light Image on your table, the object will be drawn onto the current workspace.
Light Image can be placed on both the table workspace and the Translite workspace

When a Light Image is selected, the Purple Guide line shows the radius of the light halo glow the bulb
emits. If the object has been told not to render the halo glow then the guide line will not be drawn.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to
your object.

Image List

Defines the Image List for the Light Image to use. The Light Image uses
Image Animation to change between the OFF and ON states with the First
frame being the OFF state and the Last frame being the ON state. There is
no limit to the number of frames between those 2 states. Image Lists are
created by the Image List manager (link). A Preview of the first frame of the
Image List is also displayed.

Colour

Defines the colour of any drawn image (from the Image List). It is best
never to use Full Strength colours (i.e., where either the Red, Green or Blue
components are at their Limits) as this will adversely affect how the object
is Shaded by the Lighting system. For more information on the use of
Colour refer to the Special Graphic Processing chapter (link).

Render Halo Glow

If enabled (Ticked ), any halo associated with this Light Image also is
drawn.

Halo Colour

Defines the colour of any the Halo (if it is drawn). It is best never to use Full
Strength colours (i.e., where either the Red, Green or Blue components are
at their Limits) as this will adversely affect how the object is Shaded by the
Lighting system. For more information on the use of Colour refer to the
Special Graphic Processing chapter (link).

Glow Radius

Defines the Radius (based in millimeters) of the Halo (if one is drawn). This
allows you to set how brightly a bulb affects the area around it. Valid values
range from 20 to 200.

Defines the X location (based in millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters from the top left hand corner of
the playfield) of the object on the Table.

Width

Defines the Width of the Light Image in millimeters. Must be greater than 5
millimeters.

Height

Defines the Height of the Light Image in millimeters. Must be greater than 5
millimeters.

Rotation

This field allows you to draw the object at a different rotation on the Table.
Valid values range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object is attached to. If no Surface is
specified, the object is assumed to be attached to the Main Playfield. For
more information on this refer to the Surface Object (link). If the Light
Image has been placed onto the Translite, this field is ignored and won't be
displayed.

Update Interval

Defines the update interval (in Milliseconds) of the Light Image when it is
animating individual images from the Image List when changing state
between OFF-ON-OFF. The Lower the value, the faster the Animation will
will work. The value must be at least 25 milliseconds.

Generally you will not need to change this value unless you wish to change
how fast any page flipping animations work.

State

This field allows you to set the Light Image State. The Light Image uses
Image Animation to change between the OFF and ON states. If the Halo
option has been enabled by the Player, a Halo is also drawn over the Bulb
which greatly enhances the visual quality of the lighting effect.

You can select it to one of the following states:


State Description
BulbOff Turns Off the Bulb.
BulbOn Turns On the Bulb.
The Bulb will follow 'pattern' defined by the Blink Pattern
BulbBlink
field.

Blink Pattern

Defines a special Blink Pattern the Light Image will follow when the State
has been set to BulbBlink. This pattern is defined out of a string made up
out of 0s (turn bulb Off) and 1s (turn bulb On). At least 2 pattern states
must be given (i.e., 10, 01, 11 or 00) with a maximum of 32 individual
states. Blink Patterns allow for some very creative light changes to be made
especially which using in conjunction if other objects which contain a light
bulb (Lights, Flashers, Bumpers, etc.)

Blink Interval

Defines the Period (in milliseconds) Future Pinball takes to process each
state within a Blink Pattern. When the Blink Pattern has been fully
processed it will begin again from the start and keep on repeating while
ever the State is BulbBlink. The Interval must be at least 25 milliseconds.
If this period is less than the total time if takes the Light Image to change
from one state to the other (ie OFF to ON) (which is the number of Frames
in the Image List * The Animation Update Interval) then not all frames of the
animation will be shown.

Halo Marker
Selecting the Halo Crosshair (which is shaped with a cross and 2 inner circles) will allow you
to change how the Halo is drawn over the object and thus the position of the bulb
underneath the Lens.

\
This Section describes the object and how it can be accessed and controlled via the script at run-
time. Note that you access the object via the name given in the Name property field.

<Enumeration> .State = { BulbOff | BulbOn | BulbBlink }


This field allows you to set the Light Image State. Valid values are BulbOff, BulbOn or
BulbBlink. If the .State has been set to BulbBlink, the bulb will immediately start
following the Pattern defined via the .Blink Pattern property.

If the Light Sequencer is currently running on this object, changing the State will
not take effect until the Light Sequencer has finished running. When the
Sequencer has finished the Bulb will have the last State set via the script. For
more information see the Light Sequencer Object (link)

Script Example:

MyLightImage.State = BulbOn

You can also use the State to help in game play decisions; i.e.,

' If the Light Image is on (or blinking) then ..do something..


If (MyLightImage.State <> BulbOff) Then
' add some points
AddPoints(5)
End If

<String> .BlinkPattern = { "<Blink Pattern>" }


Defines a special Blink Pattern the Light Image will follow when the State has been set
to BulbBlink. This pattern is defined out of a string made up out of 0s (turn bulb Off)
and 1s (turn bulb On). At least 2 pattern states must be given (i.e., "10", "01", "11" or
"00") with a maximum of 32 individual states. If the Bulb is currently following another
Blink Pattern, setting this will immediately change the blink pattern over to the new one.

Script Example:

MyLightImage.BlinkPattern = "10"

or:

MyLightImage.BlinkPattern = "1101110"

<Integer> .BlinkInterval = { Period in Milliseconds }


Allows you to set the Period (in milliseconds) Future Pinball takes to process each state
within a Blink Pattern. When the Blink Pattern has been fully processed it will begin
again from the start and keep on repeating while ever .State is set to BulbBlink. The
Interval must be at least 25 milliseconds. If the Bulb is currently Blinking, setting this will
reset the current Blink timer to the new value specified.

Script Example:

MyLightImage.BlinkInterval = 100

or to make a Light Image animate on and off every 150 milliseconds;

MyLightImage.State = BulbBlink
MyLightImage.BlinkPattern = "10"
MyLightImage.BlinkInterval = 150

<Boolean> .Lit (READ ONLY)


This variable (or flag) is set when the Light Image is actually lit either by it being
permanently turned ON or the Blink Pattern has turned ON the light for the current
interval. This allows you to test if the bulb is physically ON even if it's following a Blink
Pattern.

Script Example:
If (MyLightImage.Lit = TRUE) Then
' .. Do Something ..
End If

.Set ( <Enumeration> State, <String> BlinkPattern, <Integer>


BlinkInterval )
This method allows you to set the .State, .BlinkPattern and .BlinkInterval properties
with a single command.

State sets the lit state of the bulb. Valid values are BulbOff, BulbOn or BulbBlink.

BlinkPattern allows you to define a special Blink Pattern the Light Image will follow
when the State has been set to BulbBlink. This pattern is defined out of a string made
up out of 0s (turn bulb Off) and 1s (turn bulb On). At least 2 pattern states must be
given (i.e., "10", "01", "11" or "00") with a maximum of 32 individual states. If the Bulb is
currently following another Blink Pattern, setting this will immediately change the blink
pattern over to the new one. If no string is specified, the current pattern in the
.BlinkPattern property is not changed.

BlinkInterval is a positive number and is the time it takes to process each state within
the Blink Pattern. The Interval must be at least 25 milliseconds and if no value is
specified, the current value in the .BlinkInterval property is not changed.

Script Example:

MyLightImage.Set BulbBlink, "10", 150

.FlashForMs ( <Integer> TotalPeriod, <Integer> BlinkInterval,


<Enumeration> EndBulbState )

This method allows you to flash (turn the Light Image On and then Off again) for a
number of milliseconds and then set the Bulb state to a defined value when that time
has elapsed. This effect is commonly used in Pinball when enabling a Bulb due to the
player completing a sequence on the table via following the game rules as it is more
noticeable than just turning on a bulb.

TotalTime is a positive number and is the time in milliseconds to flash to the Light
Image for. Ideally, it should be divisable by the BlinkInterval parameter for a totally
smooth transition to the EndBulbState parameter.

BlinkInterval is a positive number and is the time to hold each Flash state for. The
Interval must be at least 25 milliseconds and if no value is specified, 75 is used.

EndBulbState defines the state of the bulb after the TotalPeriod has expired. If the
Bulbs .State is read which the bulb is flashing for the desired interval, the it will return
the EndBulbState.
This command destroys the contents of the .BlinkInterval and .BlinkPattern
properties.

Script Example:

' flash the bulb for a second and turn it on


MyLightImage.FlashForMs 1000, 100, BulbOn

Or to flash the Bulb and return it to its original state;

MyLightImage.FlashForMs 1500, , MyBulb.State

The Light Image object doesn't have any Events which it can call via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: HUD Light Images

Light Images work in the same way as all the over Light/Bulb objects in Future Pinball but
they use a texture animation to animate the Off to On States (with any number of animation
frames). This allows for much more complex light designs.

As with all Objects which contain a Light Bulb (Lights, Bumpers, Flashers), Future Pinball can
draw a Light Images around the bulb when it is illuminated. This effect is commonly used in
video games and greatly enhances the visual quality of the light as well as the surrounding
areas.

The HUD Light Image works exactly the same as the normal Light Imagel but is drawn on the
HUD instead of the Playfield/Translite.

(All available types and colour combinations may not be shown)

When you create a Light Image on your table, the object will be drawn onto the current workspace.
Light Image can be placed on both the table workspace and the Translite workspace

When a Light Image is selected, the Purple Guide line shows the radius of the light halo glow the bulb
emits. If the object has been told not to render the halo glow then the guide line will not be drawn.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to
your object.

Image List

Defines the Image List for the Light Image to use. The Light Image uses
Image Animation to change between the OFF and ON states with the First
frame being the OFF state and the Last frame being the ON state. There is
no limit to the number of frames between those 2 states. Image Lists are
created by the Image List manager (link). A Preview of the first frame of the
Image List is also displayed.

Colour

Defines the colour of any drawn image (from the Image List). It is best
never to use Full Strength colours (i.e., where either the Red, Green or Blue
components are at their Limits) as this will adversely affect how the object
is Shaded by the Lighting system. For more information on the use of
Colour refer to the Special Graphic Processing chapter (link).

Render Halo Glow

If enabled (Ticked ), any halo associated with this Light Image also is
drawn.

Halo Colour

Defines the colour of any the Halo (if it is drawn). It is best never to use Full
Strength colours (i.e., where either the Red, Green or Blue components are
at their Limits) as this will adversely affect how the object is Shaded by the
Lighting system. For more information on the use of Colour refer to the
Special Graphic Processing chapter (link).

Glow Radius

Defines the Radius (based in millimeters) of the Halo (if one is drawn). This
allows you to set how brightly a bulb affects the area around it. Valid values
range from 20 to 200.

Defines the X location (based in millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters from the top left hand corner of
the playfield) of the object on the Table.

Width

Defines the Width of the Light Image in millimeters. Must be greater than 5
millimeters.

Height

Defines the Height of the Light Image in millimeters. Must be greater than 5
millimeters.

Rotation

This field allows you to draw the object at a different rotation on the Table.
Valid values range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object is attached to. If no Surface is
specified, the object is assumed to be attached to the Main Playfield. For
more information on this refer to the Surface Object (link). If the Light
Image has been placed onto the Translite, this field is ignored and won't be
displayed.

Update Interval

Defines the update interval (in Milliseconds) of the Light Image when it is
animating individual images from the Image List when changing state
between OFF-ON-OFF. The Lower the value, the faster the Animation will
will work. The value must be at least 25 milliseconds.

Generally you will not need to change this value unless you wish to change
how fast any page flipping animations work.

State

This field allows you to set the Light Image State. The Light Image uses
Image Animation to change between the OFF and ON states. If the Halo
option has been enabled by the Player, a Halo is also drawn over the Bulb
which greatly enhances the visual quality of the lighting effect.

You can select it to one of the following states:


State Description
BulbOff Turns Off the Bulb.
BulbOn Turns On the Bulb.
The Bulb will follow 'pattern' defined by the Blink Pattern
BulbBlink
field.

Blink Pattern

Defines a special Blink Pattern the Light Image will follow when the State
has been set to BulbBlink. This pattern is defined out of a string made up
out of 0s (turn bulb Off) and 1s (turn bulb On). At least 2 pattern states
must be given (i.e., 10, 01, 11 or 00) with a maximum of 32 individual
states. Blink Patterns allow for some very creative light changes to be made
especially which using in conjunction if other objects which contain a light
bulb (Lights, Flashers, Bumpers, etc.)

Blink Interval

Defines the Period (in milliseconds) Future Pinball takes to process each
state within a Blink Pattern. When the Blink Pattern has been fully
processed it will begin again from the start and keep on repeating while
ever the State is BulbBlink. The Interval must be at least 25 milliseconds.
If this period is less than the total time if takes the Light Image to change
from one state to the other (ie OFF to ON) (which is the number of Frames
in the Image List * The Animation Update Interval) then not all frames of the
animation will be shown.

Halo Marker
Selecting the Halo Crosshair (which is shaped with a cross and 2 inner circles) will allow you
to change how the Halo is drawn over the object and thus the position of the bulb
underneath the Lens.

\
This Section describes the object and how it can be accessed and controlled via the script at run-
time. Note that you access the object via the name given in the Name property field.

<Enumeration> .State = { BulbOff | BulbOn | BulbBlink }


This field allows you to set the Light Image State. Valid values are BulbOff, BulbOn or
BulbBlink. If the .State has been set to BulbBlink, the bulb will immediately start
following the Pattern defined via the .Blink Pattern property.

If the Light Sequencer is currently running on this object, changing the State will
not take effect until the Light Sequencer has finished running. When the
Sequencer has finished the Bulb will have the last State set via the script. For
more information see the Light Sequencer Object (link)

Script Example:

MyLightImage.State = BulbOn

You can also use the State to help in game play decisions; i.e.,

' If the Light Image is on (or blinking) then ..do something..


If (MyLightImage.State <> BulbOff) Then
' add some points
AddPoints(5)
End If

<String> .BlinkPattern = { "<Blink Pattern>" }


Defines a special Blink Pattern the Light Image will follow when the State has been set
to BulbBlink. This pattern is defined out of a string made up out of 0s (turn bulb Off)
and 1s (turn bulb On). At least 2 pattern states must be given (i.e., "10", "01", "11" or
"00") with a maximum of 32 individual states. If the Bulb is currently following another
Blink Pattern, setting this will immediately change the blink pattern over to the new one.

Script Example:

MyLightImage.BlinkPattern = "10"

or:

MyLightImage.BlinkPattern = "1101110"

<Integer> .BlinkInterval = { Period in Milliseconds }


Allows you to set the Period (in milliseconds) Future Pinball takes to process each state
within a Blink Pattern. When the Blink Pattern has been fully processed it will begin
again from the start and keep on repeating while ever .State is set to BulbBlink. The
Interval must be at least 25 milliseconds. If the Bulb is currently Blinking, setting this will
reset the current Blink timer to the new value specified.

Script Example:

MyLightImage.BlinkInterval = 100

or to make a Light Image animate on and off every 150 milliseconds;

MyLightImage.State = BulbBlink
MyLightImage.BlinkPattern = "10"
MyLightImage.BlinkInterval = 150

<Boolean> .Lit (READ ONLY)


This variable (or flag) is set when the Light Image is actually lit either by it being
permanently turned ON or the Blink Pattern has turned ON the light for the current
interval. This allows you to test if the bulb is physically ON even if it's following a Blink
Pattern.

Script Example:
If (MyLightImage.Lit = TRUE) Then
' .. Do Something ..
End If

.Set ( <Enumeration> State, <String> BlinkPattern, <Integer>


BlinkInterval )
This method allows you to set the .State, .BlinkPattern and .BlinkInterval properties
with a single command.

State sets the lit state of the bulb. Valid values are BulbOff, BulbOn or BulbBlink.

BlinkPattern allows you to define a special Blink Pattern the Light Image will follow
when the State has been set to BulbBlink. This pattern is defined out of a string made
up out of 0s (turn bulb Off) and 1s (turn bulb On). At least 2 pattern states must be
given (i.e., "10", "01", "11" or "00") with a maximum of 32 individual states. If the Bulb is
currently following another Blink Pattern, setting this will immediately change the blink
pattern over to the new one. If no string is specified, the current pattern in the
.BlinkPattern property is not changed.

BlinkInterval is a positive number and is the time it takes to process each state within
the Blink Pattern. The Interval must be at least 25 milliseconds and if no value is
specified, the current value in the .BlinkInterval property is not changed.

Script Example:

MyLightImage.Set BulbBlink, "10", 150

.FlashForMs ( <Integer> TotalPeriod, <Integer> BlinkInterval,


<Enumeration> EndBulbState )

This method allows you to flash (turn the Light Image On and then Off again) for a
number of milliseconds and then set the Bulb state to a defined value when that time
has elapsed. This effect is commonly used in Pinball when enabling a Bulb due to the
player completing a sequence on the table via following the game rules as it is more
noticeable than just turning on a bulb.

TotalTime is a positive number and is the time in milliseconds to flash to the Light
Image for. Ideally, it should be divisable by the BlinkInterval parameter for a totally
smooth transition to the EndBulbState parameter.

BlinkInterval is a positive number and is the time to hold each Flash state for. The
Interval must be at least 25 milliseconds and if no value is specified, 75 is used.

EndBulbState defines the state of the bulb after the TotalPeriod has expired. If the
Bulbs .State is read which the bulb is flashing for the desired interval, the it will return
the EndBulbState.
This command destroys the contents of the .BlinkInterval and .BlinkPattern
properties.

Script Example:

' flash the bulb for a second and turn it on


MyLightImage.FlashForMs 1000, 100, BulbOn

Or to flash the Bulb and return it to its original state;

MyLightImage.FlashForMs 1500, , MyBulb.State

The Light Image object doesn't have any Events which it can call via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Flashers

Flashers are a more modern day pinball object used in special effects. Flasher
are much brighter than normal Pinball Lights (both Playfield and General
Illumination) and are only designed to Flash and not be permanently turned on.
Flashers also (if enabled) affects the lighting on the table by Lighting up the
entire table with an extra light source (the same colour as the Flasher). This
add much more realism to the Table but at a heavy cost of a lot of extra lighting
calculations. For more information refer to the Video Preferences chapter (link).

(All available types and colour combinations may not be shown)

When you create a Flasher on your table, the object will be drawn onto the current
workspace. Flashers can be placed on both the table workspace and the Translite
workspace.

Selecting this object will bring up the following property sheet:


Name

Sets the name of the object which is used to reference the


object via Script events. The name must be unique for the
table and may not contain any spaces. As with all Object
Names, you should give a descriptive name to your object.

Model

This field shows the list of available models which have been
loaded into your table. Future Pinball contains a large
collection of models in the libraries supplied. You can import
more models into your table by using the Model Manager
(link). Only models which have the same object type of the
current object are listed. Selecting a model will also show a
small preview picture of the selected Model.

Lit Colour

Defines the colour of the Flasher when it has been turned ON


(more of this below). It is best never to use Full Strength
colours (i.e., where either the Red, Green or Blue
components are at their Limits) as this will adversely affect
how the object is Shaded by the Lighting system. For more
information on the use of Colour refer to the Special Graphic
Processing chapter (link).

Auto Set Unlit Colour to 33%

If enabled (Ticked ), Future Pinball will automatically set the


Unlit colour to 33% brightness of the Lit colour when ever the
Lit colour is changed. On older electro-mechanical games the
light change is usually less dramatic so you may wish to
disable this option and set the Unlit colour so it shows less
colour change from the Lit colour.

Unlit Colour

Defines the colour of the Flasher when it is turned OFF (more


of this below). The same colour guidelines should be followed
as described by the Lit Colour.

Ordered Halo Glow

If enabled (Ticked ), any halo associated with this flasher is


drawn at the same time as the object is drawn. Usually Halos
are drawn in a separate rendering pass as it's quicker for the
rendering engine that way; however, that method does have
some drawbacks as the halo will be drawn over any graphics
around it. For more information refer to the Bulb object (link).

Defines the X location (based in millimeters from the top left


hand corner of the playfield) of the object on the Table.

Defines the Y location (again in millimeters from the top left


hand corner of the playfield) of the object on the Table.

Rotation

This field allows you to draw the object at a different rotation


on the Table. Valid values range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object is attached to. If no


Surface is specified, the object is assumed to be attached to
the Main Playfield. For more information on this refer to the
Surface Object (link). If the Flasher has been placed onto the
Translite, this field is ignored.

Reflects off Playfield

If Enabled (Ticked ) then the object will also reflect off the
Playfield Surface specified by the Playfield property. If you
don't want the object to reflect off the playfield (providing the
user has that video option enabled) then uncheck this option.
If the object isn't generally visible you may with to disable
reflections for this object to save on the rendering processing.

Playfield

Defines which playfield the surface will reflect off. Only


surfaces which have the 'Surface is a Playfield' flag set will be
listed.

State

This field allows you to set the Flasher State. The Flashers
are high energy lights and brighten much more and quicker
than a standard pinball light. If the Halo option has been
enabled by the Player, a Halo is also drawn over the Flasher
which greatly enhances the visual quality of the lighting effect.

You can select it to one of the following states:

State Description
BulbOff Turns Off the Bulb.
BulbOn Turns On the Bulb.
The Bulb will follow 'pattern' defined by the
BulbBlink
Blink Pattern field.

Blink Pattern

Defines a special Blink Pattern the Flasher will follow when


the State has been set to BulbBlink. This pattern is defined
out of a string made up out of 0s (turn Flasher Off) and 1s
(turn Flasher On). At least 2 pattern states must be given
(i.e., 10, 01, 11 or 00) with a maximum of 32 individual states.
Blink Patterns allow for some very creative light changes to
be made especially which using in conjunction if other objects
which contain a light bulb (Lights, Flashers, Bumpers, etc.)

Blink Interval

Defines the Period (in milliseconds) Future Pinball takes to


process each state within a Blink Pattern. When the Blink
Pattern has been fully processed it will begin again from the
start and keep on repeating while ever the State is
BulbBlink. The Interval must be at least 25 milliseconds.

This Section describes the object and how it can be accessed and controlled via
the script at run-time. Note that you access the object via the name given in the
Name property field.

<Enumeration> .State = { BulbOff | BulbOn | BulbBlink


}
This field allows you to set the Flasher State. Valid values are BulbOff,
BulbOn or BulbBlink. If the .State has been set to BulbBlink, the
Flasher will immediately start following the Pattern defined via the .Blink
Pattern property.
If the Light Sequencer is currently running on this object, changing
the State will not take effect until the Light Sequencer has finished
running. When the Sequencer has finished the Flasher will have the
last State set via the script. For more information see the Light
Sequencer Object (link)

Script Example:

MyFlasher.State = BulbOn

You can also use the State to help in game play decisions; i.e.,.

' If the Bulb is on (or blinking) then do something..


If (MyFlasher.State <> BulbOff) Then
' add some points
AddPoints(5)
End If

<String> .BlinkPattern = { "<Blink Pattern>" }


Defines a special Blink Pattern the Flasher will follow when the State has
been set to BulbBlink. This pattern is defined out of a string made up out
of 0s (turn Flasher Off) and 1s (turn Flasher On). At least 2 pattern states
must be given (i.e., "10", "01", "11" or "00") with a maximum of 32
individual states. If the Flasher is currently following another Blink Pattern,
setting this will immediately change the blink pattern over to the new one.

Script Example:

MyFlasher.BlinkPattern = "10"

or:

MyFlasher.BlinkPattern = "1101110"
<Integer> .BlinkInterval = { Period in Milliseconds }
Allows you to set the Period (in milliseconds) Future Pinball takes to
process each state within a Blink Pattern. When the Blink Pattern has
been fully processed it will begin again from the start and keep on
repeating while ever .State is set to BulbBlink. The Interval must be at
least 25 milliseconds. If the Flasher is currently Blinking, setting this will
reset the current Blink timer to the new value specified.

Script Example:

MyFlasher.BlinkInterval = 100

or to make a Flasher flash on and off every 150 milliseconds;

MyFlasher.State = BulbBlink
MyFlasher.BlinkPattern = "10"
MyFlasher.BlinkInterval = 150

<Boolean> .Lit (READ ONLY)


This variable (or flag) is set when the bulb is actually lit either by it being
permanently turned ON or the Blink Pattern has turned ON the light for the
current interval. This allows you to test if the bulb is physically ON even if
it's following a Blink Pattern.

Script Example:

If (MyFlasher.Lit = TRUE) Then


' .. Do Something ..
End If

.Set ( <Enumeration> State, <String> BlinkPattern, <Integer>


BlinkInterval )
This method allows you to set the .State, .BlinkPattern and
.BlinkInterval properties with a single command.
State sets the lit state of the bulb. Valid values are BulbOff, BulbOn or
BulbBlink.

BlinkPattern allows you to define a special Blink Pattern the Bulb will
follow when the State has been set to BulbBlink. This pattern is defined
out of a string made up out of 0s (turn bulb Off) and 1s (turn bulb On). At
least 2 pattern states must be given (i.e., "10", "01", "11" or "00") with a
maximum of 32 individual states. If the Bulb is currently following another
Blink Pattern, setting this will immediately change the blink pattern over to
the new one. If no string is specified, the current pattern in the
.BlinkPattern property is not changed.

BlinkInterval is a positive number and is the time it takes to process each


state within the Blink Pattern. The Interval must be at least 25 milliseconds
and if no value is specified, the current value in the .BlinkInterval property
is not changed.

Script Example:

MyFlasher.Set BulbBlink, "10", 150

.FlashForMs ( <Integer> TotalPeriod, <Integer>


BlinkInterval, <Enumeration> EndBulbState )
This method allows you to flash (turn the Flasher On and then Off again)
the Flasher for a number of milliseconds and then set the Flasher state to
a defined value when that time has elapsed.

TotalTime is a positive number and is the time in milliseconds to flash to


the Flasher for. Ideally it should be divisible by the BlinkInterval
parameter for a totally smooth transition to the EndBulbState parameter.

BlinkInterval is a positive number and is the time to hold each Flash state
for. The Interval must be at least 25 milliseconds and if no value is
specified then 75 ms is used.

EndBulbState defines the state of the Flasher after the TotalPeriod has
expired. If the Bulbs .State is read which the bulb is flashing for the
desired interval, the it will return the EndBulbState.

This command destroys the contents of the .BlinkInterval and


.BlinkPattern properties.
Script Example:

' flash the flasher for a second and turn it off


MyFlasher.FlashForMs 1000, 100, BulbOff

Or to flash the Flasher and return it to its original state;

MyFlasher.FlashForMs 1500, , MyFlasher.State

The Flasher object doesn't have any Events which it can call via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: The Light Sequencer

Future Pinball contains a device called the 'Light Sequencer' (or LS for short). What this
basically does is take a Light List created by the Light List Manager (link) and runs full table
special lighting effects that you would see on a commercial pinball game. This saves you having
to manually coding hundreds if not thousands of script lines.

The Light Sequencer, when running, takes control of the lights you specify for it to use. It does
this by overlaying the effect over the lights without affecting the true state of the light. As many
scripts use lights for game conditionals (i.e., If MyLight.State = BulbOn then award bonus and
turn light off) the Light Sequencer ensures that your script does not need to worry about
whether or not the Sequencer is currently running. It is totally transparent to your table.
Changing the value of a light while a sequence is running will not actually turn a light on or off
(or even to blinking), but it will remember what the current state is so when the Sequencer is
finished, the light will be restored to the last set state.

Multiple Light Sequencers can be placed on the table allowing for different sections of the table
to have its own effects if needed (such as split playfields) or effects which have use a different
centre point (more of this in a bit). Each Light Sequencer can have its own Light List so you can
use different Sequencers to control different parts of the table. A light can also exist in multiple
lists so there is no limitations about which lights can be where.

Please note that when the Light Sequencer mentions a 'Light', it isn't just referencing the Light
objects but also Bumpers, Flashers, Em Reels and Bulbs.

As the Light Sequencer requires the use of a Light List, you will need to be familiar with the Light List
Manager (link) before continuing.

When you create a Light Sequencer on your table, the object will be drawn onto the current workspace.
Light Sequencers can be placed on both the Table and Translite workspaces.

It is important to note that the light sequencer will only process lights in the view in which it has been
created. For example. If you create a Light Sequencer in the Translite workspace view then it will only
process lights (as specified in the Light List) which have also been placed on the Translite. There is an
option for a Light Sequencer created in the Table Work space to also include any Translite lights allows
for full machine lighting effects.

Selecting this object will bring up the following property sheet:


Name

Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to your
object.

Virtual X and Y Centre

The centre reference point which the Light Sequencer uses to base all its
effects from (based in millimeters from the top left hand corner of the table). If
an effect rotates around (or uses the centre) point then you can move it to
change where the effect starts from (or uses as its centre).

A secondary icon is drawn onto the current view which graphically shows the
Virtual Centre.

The Centre point of When Selected it shows the Name


the Light Sequencer of the Sequencer it belongs to

Click on the centre point icon and you can move it around the table.

When you first create a light sequencer, the centre point will be set to the
centre of the table.

Include Translite Lights

Instructs the Light Sequencer to also use lights in the specified Light List if
they are on the translite (backbox). This allows effects to run over the full
machine and not just being limited to either the Playfield or the Backbox. This
option is only available if the Light Sequencer has been created onto the
Table workspace view.

Include
Description
Translite Lights
The Lighting Effect will also include any Translite Lights
Yes
included in the Light List
The Effect will only use Lights in the Light List which are on
No
the Playfield

Light List

Defines the Light List for the Sequencer to use. Light Lists are created by the
Light List manager (link).

Update Interval

Defines the update interval (in Milliseconds) of the light sequencer. The Lower
the value, the faster the effects will run. This value must be at least 5
Milliseconds.
Flashers Blink

If Enabled (Ticked ) then instead of turning Flashers ON when an effect is


running, it will Blink (Flash) the Flasher. This gives a much nicer effect more in
turn with modern day pinballs.

Blink Interval

Defines the Period (in milliseconds) the Flashers will blink if the Flashers
Blink option is enabled. The Interval must be at least 25 milliseconds.

Things to be Careful of
The Light Sequencer works by subdividing the table into 15x15 millimeter cells. Only 1 light is allowed
per cell so if a single cell contains 2 lights then only one of them will be processed. In order to test the
positioning of the lights on your table you can turn on and set the editor grid to 15 millimeters.

All Light Objects will have a center marker (a cross with a circle) which you can use to ensure that there
are no 2 lights within the same cell. For the Shapeable Light object you should use the Halo cursor. For
more information refer to the shapeable light object (link).

The following picture shows invalid placement of 2 bulbs.

In General though, this isn't an issue on pinball table as they generally don't place bulbs that close to
each other.

The Effects and How they Work


The Light Sequencer basically only follows fixed pattern effects which it has been programmed with but
each one can be tweaked slightly by specifying how fast it runs, any pauses between effects and
repeating the effect.

These effects are processed as 'Head' effects. The 'Head' effect is the main effect. For example if you
are turning all the lights on from the bottom of the playfield and moving upwards. The point at which the
light turns on is where the 'head' of the effect is. The head will change from frame to frame as it moves
up the playfield.

Each 'Head' effect can have a 'Tail' effect which follows the 'Head' effect and inverts the state to which
the 'Head' sets a light. For example. If as above you are turning on lights moving up, then the 'Tail' will
turn them off. If the 'Head' turns them off, the 'Tail' will turn them on.

The Distance at which the 'Tail' follows the 'Head' is completely up to you, or you may decide not to have
a tail. The 'Tail' will always run at the same speed as the 'Head' and the effect is not classified as
finished until both the 'Head'' & ''Tail' have both finished.

This Section describes the object and how it can be accessed and controlled via the script at run-
time. Note that you access the object via the name given in the Name property field.

<Integer> .UpdateInterval = { Period in Milliseconds }


This property allows you to change the speed at which the Light Sequencer will process
the light effect. The smaller the value, the faster the effect will run. When the this time
period expires then the Light Sequencer will move to the next frame of the current effect it
is processing. The value must be at least 5 milliseconds.

Script Example:

MyLightSeq.UpdateInterval = 10

The .UpdateInterval property will not actively change the speed of any currently running
effects. It is there to specify the speed of the next effect queued by the .Play() command.
This each effect in the queue can run at different speeds, allowing you to mix fast effects
with slow effects.

Script Example:

' scroll up, turning all the lights on with a tail turning them
MyLightSeq.UpdateInterval = 10
MyLightSeq.Play SeqUpOn, 75, 2
' as about but with a shorter tail (and quicker)
MyLightSeq.UpdateInterval = 5
MyLightSeq.Play SeqUpOn, 25, 2

.Play ( <Enumeration> Effect, <Integer> TailLength, <Integer> Repeat,


<Integer> Pause, <String> SoundEffect )

When you issue a play command. It basically puts it into a Queue, thus you can load up
the Sequencer with a heap of effects and it will process all of them. When the queue is
empty it will let you know (by the _Empty() Event) so you can either 'refill' the Sequencer
or perform any other action your table requires. The size of the queue is 100 effects.

When you issue a Play command to the Light Sequencer, it puts each light in its collection
into a special state where it will remember its current lit state (either on, off or blinking) but
won't actually change state if you actively change it in the script. At this point only the Light
Sequencer can physically change the state of the light but any changes made by you to
the light in the script are remembered, just not carried out. When the Light Sequencer has
finished all the effects that is has in its queue (or you tell it to stop with the .StopPlay()
method) then it will give control of the lights back to you and restore them to their current
real state as set by you in the script. Even while an effect is running you can (in the script)
get the real value of the light and not what the Light Sequencer has set it to. This
effectively means that you don't have to worry about what the Sequencer is doing to your
lights if you use (like many people including myself) light states to control the control logic
of your code.

The Play command has 5 parameters. Only the first one is required (mandatory). The
others don't have to be specified and/or can be skipped if required. If you don't specify
them then they will use their default value. The parameters are as follows:

Although the descriptions of these effects are based on lights on the playfield, if you are
animating Translite bulbs instead then the rear of the playfield will mean the top of the
backbox and the front of the playfield can be substituted for the bottom of the backbox
(closest to the glass).

Example layout of the effect description illustration.

On the Left you see a little graphical representation on how the lights change
on the playfield. The Darker lights are the 'head' whilst the lighter lights (gray)
represent the 'Tail'. The arrows show the direction the head moves (in this
case it is towards the centre reference point).

The light gray lines represent the centre reference point which doesn't
actually have to be in the centre of the table. Not all effects use the reference
point and some only use 1 axis of it.

Effect
The type of effect used to display the screen (or text) onto the display. This field mus

Effect
Descrip

SeqUpOn / This effect turns On (or Off) all the lights in the light list
SeqUpOff towards the rear.

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqUpOn,


SeqDownOn / This effect turns On (or Off) all the lights in the light list
SeqDownOff towards the front.

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqDownO

SeqRightOn / This effect turns On (or Off) all the lights in the light list
SeqRightOff towards the right.

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqRight

SeqLeftOn / This effect turns On (or Off) all the lights in the light list
SeqLeftOff towards the left.

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqLeft

SeqDiagUpRightOn / This effect turns On (or Off) all the lights in the light list
SeqDiagUpRightOff moving upwards diagonally towards the top right corne

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqDiag

SeqDiagUpLeftOn / This effect turns On (or Off) all the lights in the light list
SeqDiagUpLeftOff moving upwards diagonally towards the top left corner.

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqDiag


SeqDiagDownRightOn / This effect turns On (or Off) all the lights in the light list
SeqDiagDownRightOff moving downwards diagonally towards the bottom right

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqDiag

SeqDiagDownLeftOn / This effect turns On (or Off) all the lights in the light list
SeqDiagDownLeftOff moving downwards diagonally towards the bottom left c

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqDiag

SeqMiddleOutHorizOn / This effect turns On (or Off) all the lights in the light list
SeqMiddleOutHorizOff moving out towards the side edges of the playfield.

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqMidd

SeqMiddleInHorizOn / This effect turns On (or Off) all the lights in the light list
SeqMiddleInHorizOff the horizontal centre reference point of the playfield

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqMidd

SeqMiddleOutVertOn / This effect turns On (or Off) all the lights in the light list
SeqMiddleOutVertOff moving out towards the top and bottom edges of the pla

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use


Script Example: MyLightSeq.Play SeqMidd

SeqMiddleInVertOn / This effect turns On (or Off) all the lights in the light list
SeqMiddleInVertOff inwards to the vertical centre reference point of the play

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqMidd

SeqStripe1HorizOn / This effect turns On (or Off) all the lights in the light list
SeqStripe1HorizOff right edge of the playfield for the top half of the playfield
the playfield. The vertical centre reference point is used

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqMidd

SeqStripe2HorizOn / This effect turns On (or Off) all the lights in the light list
SeqStripe2HorizOff the left edge of the playfield for the top half of the playfi
half of the playfield. The vertical centre reference point

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqMidd

SeqStripe1VertOn / This effect turns On (or Off) all the lights in the light list
SeqStripe1VertOff towards the top edge of the playfield for the left half of t
for the right half of the playfield. The horizontal centre r

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqMidd

SeqStripe2VertOn / This effect turns On (or Off) all the lights in the light list
SeqStripe2VertOn the bottom edge of the playfield for the left half of the p
half of the playfield. The horizontal centre reference po
TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqMidd

SeqHatch1HorizOn / This effect turns On (or Off) all the lights in the light list
SeqHatch1HorizOff moving from the left edge towards the right edge of the
from the right to the left edge of the playfield.

The overall effect will greatly depend on how lights are


good no matter what.

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqMidd

SeqHatch2HorizOn / This effect turns On (or Off) all the lights in the light list
SeqHatch2HorizOff and moving from the right edge towards the left edge o
moving from the left to the right edge of the playfield.

The overall effect will greatly depend on how lights are


good no matter what.

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqMidd

SeqHatch1VertOn / This effect turns On (or Off) all the lights in the light list
SeqHatch1VertOff and moving from the top edge towards the bottom edge
positions moving from the bottom to the top edge of the

The overall effect will greatly depend on how lights are


look good no matter what.

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqMidd

SeqHatch2VertOn / This effect turns On (or Off) all the lights in the light list
SeqHatch2VertOff and moving from the top edge towards the bottom edge
moving from the bottom to the top edge of the playfield

The overall effect will greatly depend on how lights are


good no matter what.

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqMidd

SeqCircleOutOn / This effect turns On (or Off) all the lights in the light list
SeqCircleOutOff Sequencer and moving outwards towards the edges.

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqCirc

SeqCircleInOn / This effect turns On (or Off) all the lights in the light list
SeqCircleInOn inwards towards the centre reference point of the Sequ

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqCirc

SeqClockRightOn / This effect turns On (or Off) all the lights in the light list
SeqClockRightOff rotating clockwise (much like a clock hand) until it reach

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqCloc

SeqClockLeftOn / This effect turns On (or Off) all the lights in the light list
SeqClockLeftOff rotating anti-clockwise (much like a clock hand in rever

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'
Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqCloc

SeqRadarRightOn / This effect turns On (or Off) all the lights in the light list
SeqRadarRightOff reference point and sweeping clockwise (much like a ra
of the playfield. The entire playfield is covered by the sw

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqRada

SeqRadarLeftOn / This effect turns On (or Off) all the lights in the light list
SeqRadarLeftOff reference point and sweeping anti-clockwise (much like
side of the playfield. The entire playfield is covered by t

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqRada

SeqWiperRightOn / This effect turns On (or Off) all the lights in the light list
SeqWiperRightOff reference point and sweeping anti-clockwise until it rea
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqWipe

SeqWiperLeftOn / This effect turns On (or Off) all the lights in the light list
SeqWiperLeftOff reference point and sweeping clockwise until it reaches
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use


Pause: Normal Use

Script Example: MyLightSeq.Play SeqWipe

SeqFanLeftUpOn / This effect turns On (or Off) all the lights in the light list
SeqFanLeftUpOff reference point and sweeping anti-clockwise until it rea
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqFanL

SeqFanLeftDownOn / This effect turns On (or Off) all the lights in the light list
SeqFanLeftDownOff reference point and sweeping clockwise until it reaches
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqFanL

SeqFanRightUpOn / This effect turns On (or Off) all the lights in the light list
SeqFanRightUpOff reference point and sweeping anti-clockwise until it rea
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


head effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqFanR

SeqFanRightDownOn / This effect turns On (or Off) all the lights in the light list
SeqFanRightDownOff reference point and sweeping clockwise until it reaches
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use


Script Example: MyLightSeq.Play SeqFanR

SeqArcBottomLeftUpOn / This effect turns On (or Off) all the lights in the light list
SeqArcBottomLeftUpOff and sweeping anti-clockwise until it reaches the other e
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqArcB

SeqArcBottomLeftDownOn / This effect turns On (or Off) all the lights in the light list
SeqArcBottomLeftDownOff and sweeping clockwise until it reaches the other edge
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqArcB

SeqArcBottomRightUpOn / This effect turns On (or Off) all the lights in the light list
SeqArcBottomRightUpOff and sweeping clockwise until it reaches the other edge
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqArcB

SeqArcBottomRightDownOn This effect turns On (or Off) all the lights in the light list
/ and sweeping anti-clockwise until it reaches the other e
SeqArcBottomRightDownOff The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqArcB


SeqArcTopLeftUpOn / This effect turns On (or Off) all the lights in the light list
SeqArcTopLeftUpOff and sweeping anti-clockwise until it reaches the other e
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqArcT

SeqArcTopLeftDownOn / This effect turns On (or Off) all the lights in the light list
SeqArcTopLeftDownOff and sweeping clockwise until it reaches the other edge
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqArcB

SeqArcTopRightUpOn / This effect turns On (or Off) all the lights in the light list
SeqArcTopRightUpOff and sweeping clockwise until it reaches the other edge
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqArcT

SeqArcTopRightDownOn / This effect turns On (or Off) all the lights in the light list
SeqArcTopRightDownOff and sweeping anti-clockwise until it reaches the other e
The entire playfield is covered by the sweep.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqArcT

SeqScrewRightOn / This effect turns On (or Off) all the lights in the light list
SeqScrewRightOff playfield and screwing clockwise.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqScre

SeqScrewLeftOn / This effect turns On (or Off) all the lights in the light list
SeqScrewLeftOff playfield and screwing anti-clockwise.

TailLength: This is specified in degrees; i.e., a value of


effect. 0 (or not specified) means no 'Tail'

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqScre

Special Effects

SeqAllOff This effect will turn Off all the lights in the light list. This
states of the lights. It is treated as an open ended effec
call the .StopPlay() method to restore the lights to their

This is very useful for Tilt mechanisms where you can t


only restore them when you are ready to start a new ba
the lights on your table in your script but they won't take

TailLength: Not Used

Repeat: Not Used

Pause: Not Used

Script Example: MyLightSeq.Play SeqAllOf

SeqAllOn This effect will turn On all the lights in the light list. This
of the lights. It is treated as an open ended effect which
call the .StopPlay() method to restore the lights to their

TailLength: Not Used

Repeat: Not Used

Pause: Not Used

Script Example: MyLightSeq.Play SeqAllOf

SeqBlinking This effect will blink (turn on, pause, turn off, pause) ea
TailLength: Not Used

Repeat: The number of times to turn the Lights On and

Pause: The time (in milliseconds) to pause between ch

Script Example: MyLightSeq.Play SeqRando

SeqRandom This effect randomly turns On and Off lights in the light

TailLength: The number of Lights to change per frame.


your light list and you set this to 40. Then 40 lights will c

Repeat: Not Used

Pause: The total time to run the effect for.

Script Example: MyLightSeq.Play SeqRando

SeqDoNothing This effect will not perform any action apart from delayi
to put delays between effects (if needed) if the effect in
Pause parameter.

TailLength: Not Used

Repeat: Not Used

Pause: The total time to run the effect for (time to wait)

Script Example: MyLightSeq.Play SeqDoNot

SeqListOrder This effect turns On all the lights in the light list using th
This allows for custom effects to be created if you take

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqListO

SeqRandomEffect This effect will pick a random effect from one of the effe
SeqScrewLeftOff). This allows a different effect to be p

TailLength: Normal Use

Repeat: Normal Use

Pause: Normal Use

Script Example: MyLightSeq.Play SeqRando

TailLength
As mentioned above each effect has a tail which basically follows behind inverting th
will turn them off. The value is specified in number of frames (update intervals) after t
specified then it will default to 0. Play with it.

Repeat This specifies how many times to process this effect. This allows you to run the same
multiple play commands. If no value is specified then it will default to 1.
Pause Specifies the time to pause (in milliseconds) before moving onto the next effect in the
effect again if it has to be repeated. If no value is specified then it will default to 0.
SoundEffect The Sound file to play when this effect is first processed. This allows corresponding s
display. Sounds are imported into the Table via the Sound Manager (link). If this valu
Repeat is set to a value greater than 1 then the sound will also repeat.

For more Script examples, refer to the Light Sequencer example table included with Future
Pinball.

.StopPlay ()
This command will flush the Queue and restore the lights to their correct state as set by
you in the table script. It is processed immediately and the_Empty() event is not given to
the script.

Script Example:

MyLightSeq.Stoplay()

_Empty ()
This event is called when the Light Sequencer Device has finished processing its effect
queue.

During normal game play this event is not very useful but it is useful in any attract mode
you may program into your game. Attract modes generally cycle fixed patterns over groups
of lights but after a 30 seconds or so perform a few full table lighting effects. You can use
this event to return back to cycling lights after the Light Sequencer has finished.

Script Example:

' The Light Sequencer has finished,


Sub MyLightSeq_Empty()
' set any lights for the attract mode
SetAllLightsForAttractMode()
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Gates

Gates are Metal Plates or Bent Wires which generally allow


the pinball to go through in one direction but not the other.

(All available types and colour combinations may not be


shown)
(The Gate Frame is an Ornament object)

When you create a Gate on your table, the object will be drawn on to
the table workspace. If the Gate has been marked as being One
Way, a Purple Guide line will show the direction the ball is allowed to
go though the Gate.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table and
may not contain any spaces. As with all
Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available models


which have been loaded into your table.
Future Pinball contains a large collection of
models in the libraries supplied. You can
import more models into your table by using
the Model Manager (link). Only models
which have the same object type of the
current object are listed. Selecting a model
will also show a small preview picture of the
selected Model.

Texture

Allows you to wrap a texture around the


object. Textures are imported into the Table
via the Texture Manager (link). Selecting a
Texture will also show a small preview
picture of the texture.

Sphere Mapping

If Enabled (Ticked ), then any texture is


Sphere Mapped onto the object. For more
information on Sphere Mapping refer to the
Special Graphic Processing chapter (link).

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture, the
texture will be tinted with this colour. If the
object has no texture, it will be rendered in
this colour. It is best never to use Full
Strength colours (i.e., where either the Red,
Green or Blue components are at their
Limits) as this will adversely affect how the
object is Shaded by the Lighting system.
For more information on the use of Colour
refer to the Special Graphic Processing
chapter (link).

Defines the X location (based in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.
Rotation

This field allows you to draw the object at a


different rotation on the Table. Valid values
range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object is


attached to. If no Surface is specified, the
Gate is assumed to be attached to the Main
Playfield (which is not a good thing). It is
important to note that the Gate object
needs to sit on a surface which is at least
28mm in height from the playfield. If it
doesn't, then the Gate may sink into the
playfield. For more information on this refer
to the Surface Object (link)

One Way

This field allows you set the gate to only


allow the ball to travel though it in one
direction. (Based on the rotation of the
object). A Arrow is drawn to show you the
direction the ball will be allowed to go.

Reflects off Playfield


If Enabled (Ticked ), the object will also
reflect off the Playfield Surface specified by
the Playfield property. If you don't want the
object to reflect off the playfield (providing
the user has that video option enabled),
uncheck this option. If the object isn't
generally visible you may with to disable
reflections for this object to save on the
rendering processing.

Playfield

Defines which playfield the Gate will reflect


off. Only surfaces which have the 'Surface
is a Playfield' flag set will be listed.

This Section describes the object and how it can be accessed


and controlled via the script at run-time. Note that you access the
object via the name given in the Name property field

The Gate object doesn't have any properties which can be


modified via the script.

The Gate object doesn't have any Methods than can be


called via the script.
_Hit()
This event is signaled to the script whenever the Ball
Hits a the Gate and it causes it to lift up past 100
degrees of swing (either direction if not One Way).

Script Example:

Sub MyGate_Hit()
AddPoints(100)
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Spinners

A Spinner is a metal plate which spins about its center along


a horizontal axis. The ball passes underneath striking the
lower half of the spinner, causing it to spin several
revolutions and thus clocking up some points. Spinners are
counterbalanced to reset so the front is always facing the
same direction.

(All available types and colour combinations may not be


shown)
(The Spinner Frame is an Ornament object)

When you create a Spinner on your table, the object will be drawn on
to the table workspace.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table
and may not contain any spaces. As with
all Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available


models which have been loaded into your
table. Future Pinball contains a large
collection of models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Only models which have the same
object type of the current object are listed.
Selecting a model will also show a small
preview picture of the selected Model.

Texture

Allows you to wrap a texture around the


object. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture,
then the texture will be tinted with this
colour. If the object has no texture, then it
will be rendered in this colour. It is best
never to use Full Strength colours (i.e.,
where either the Red, Green or Blue
components are at their Limits) as this will
adversely affect how the object is Shaded
by the Lighting system. For more
information on the use of Colour refer to
the Special Graphic Processing chapter
(link).

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at


a different rotation on the Table. Valid
values range from 0 to 359 degrees.
Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified,
then the Spinner is assumed to be
attached to the Main Playfield (which is not
a good thing). It is important to note that
the Spinner object needs to sit on a
surface which is at least 28mm in height
from the playfield. If it doesn't, then the
Spinner may sink into the playfield. For
more information on this refer to the
Surface Object (link)

Damping

This field allows you the set the friction


damping on the spinner. This will change
how many rotations the spinner will spin
(depending on how hard it is hit).

Reflects off Playfield


If Enabled (Ticked ), then the object will
also reflect off the Playfield Surface
specified by the Playfield property. If you
don't want the object to reflect off the
playfield (providing the user has that video
option enabled), then uncheck this option.
If the object isn't generally visible you may
with to disable reflections for this object to
save on the rendering processing.

Playfield

Defines which playfield the Spinner will


reflect off. Only surfaces which have the
'Surface is a Playfield' flag set will be
listed.

This Section describes the object and how it can be accessed


and controlled via the script at run-time. Note that you access
the object via the name given in the Name property field

The Spinner object doesn't have any properties which can


be modified via the script.

The Spinner object doesn't have any Methods than can be


called via the script.

_Hit()
This event is signaled to the script whenever the Ball
Hits a the spinner and it causes it to Spin past 135
degrees of swing (either direction).

Script Example:

Sub MySpinner_Hit()
PlaySound "SpinnerSound"
AddPoints(100)
End Sub

_UnHit()
This event is signaled to the script after the _Hit()
event has been signaled and the Spinner is not
between the triggering angles. Older EM games would
increment the score once the spinner had either done a
complete loop or reset itself after being triggered.

Script Example:

Sub MySpinner_UnHit()
AddPoints(100)
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Triggers

Triggers are placed over Pinball Tables so the software


knows where a ball is. As the Ball roles over a trigger it will
press it into the playfield and the script will be notified. A
Form of Trigger is also a part generally called a Mushroom
Bumper.

(All available types and colour combinations may not be


shown)
(The holes around the Wire Trigger are Ornament objects)
(The Lens around the Star Trigger is a Bulb object)

When you create a Trigger on your table, the object will be drawn
onto the table workspace.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table
and may not contain any spaces. As with
all Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available


models which have been loaded into your
table. Future Pinball contains a large
collection of models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Only models which have the same
object type of the current object are listed.
Selecting a model will also show a small
preview picture of the selected Model.
Render Model

If enabled (Ticked ), the model selected


will be rendered.

Texture

Allows you to wrap a texture around the


object. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Sphere Mapping

If Enabled (Ticked ), then any texture is


Sphere Mapped onto the object. For more
information on Sphere Mapping refer to
the Special Graphic Processing chapter
(link). Useful if you wish to have nice
shiny metal wire triggers.

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture,
then the texture will be tinted with this
colour. If the object has no texture, then it
will be rendered in this colour. It is best
never to use Full Strength colours (i.e.,
where either the Red, Green or Blue
components are at their Limits) as this will
adversely affect how the object is Shaded
by the Lighting system. For more
information on the use of Colour refer to
the Special Graphic Processing chapter
(link).
X

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at


a different rotation on the Table. Valid
values range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified,
then the Trigger is assumed to be attached
to the Main Playfield. For more information
on this refer to the Surface Object (link).

Sits on Playfield

If Enabled (Ticked ), the object sits on


the playfield instead of sitting under the
playfield. Triggers are special objects
where the game engine will put them 'in'
the playfield. If you are using the
mushroom trigger then you will need to
enable this option otherwise the object
won't render correctly.
Reflects off Playfield

If Enabled (Ticked ) then the object will


also reflect off the Playfield Surface
specified by the Playfield property. If you
don't want the object to reflect off the
playfield (providing the user has that video
option enabled) then uncheck this option.
If the object isn't generally visible you may
with to disable reflections for this object to
save on the rendering processing.

Playfield

Defines which playfield the surface will


reflect off. Only surfaces which have the
'Surface is a Playfield' flag set will be
listed.

When Hit

This field allows you to automate playing


of a sound effect when the ball hits (rolls
over) the Trigger. Sounds are imported
into the Table via the Sound Manager
(link). This functionality removes the need
for a PlaySound (link) script command.

This Section describes the object and how it can be accessed


and controlled via the script at run-time. Note that you access
the object via the name given in the Name property field
The Trigger object doesn't have any properties which can
be modified via the script.

The Trigger object doesn't have any Methods than can be


called via the script.

_Hit()
This event is signaled to the script whenever the Ball
Hits (Rolls Over) a Trigger.

Script Example:

Sub MyTrigger_Hit()
AddPoints(100)
End Sub

_UnHit()
This event is signaled to the script after the _Hit()
event has been signaled and the Trigger switch (which
has been pushed down by the ball hitting the Trigger)
has stopped making contact.

Script Example:

Sub MyTrigger_UnHit()
' Do Something..
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Triggers (Optocouplers)

Optocoupler Triggers are a more modern day Trigger which


uses an inferred been between an emitter and a collector to
detect if the ball has gone though the beam.

(All available types and colour combinations may not be


shown)

When you create a TriggerOpto on your table, the object will be


drawn onto the table workspace.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table
and may not contain any spaces. As with
all Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available


models which have been loaded into your
table. Future Pinball contains a large
collection of models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Only models which have the same
object type of the current object are listed.
Selecting a model will also show a small
preview picture of the selected Model. The
same model is used for both the Emitter
and Collector.

Texture (Collector)

Allows you to wrap a texture around the


Collector. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture. Emitters
and Collectors are generally a different
colour though you can use the same
texture for both.

Texture (Emitter)

Allows you to wrap a texture around the


Emitter. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture. Emitters
and Collectors are generally a different
colour though you can use the same
texture for both.

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture,
then the texture will be tinted with this
colour. If the object has no texture, then it
will be rendered in this colour. It is best
never to use Full Strength colours (i.e.,
where either the Red, Green or Blue
components are at their Limits) as this will
adversely affect how the object is Shaded
by the Lighting system. For more
information on the use of Colour refer to
the Special Graphic Processing chapter
(link).

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at


a different rotation on the Table. Valid
values range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified,
then the TriggerOpto is assumed to be
attached to the Main Playfield. For more
information on this refer to the Surface
Object (link).

Invert (Hangs upside down)

If Enabled (Ticked ), the object will be


inverted when rendered. This is
specifically for ramps as on some tables
the opto's are mounted this way.
Beam Width

Defines the spacing between the Collector


and the Emitter. Must be atleast 30mm to
allow the ball to pass though the beem.

Reflects off Playfield

If Enabled (Ticked ) then the object will


also reflect off the Playfield Surface
specified by the Playfield property. If you
don't want the object to reflect off the
playfield (providing the user has that video
option enabled) then uncheck this option.
If the object isn't generally visible you may
with to disable reflections for this object to
save on the rendering processing.

Playfield

Defines which playfield the surface will


reflect off. Only surfaces which have the
'Surface is a Playfield' flag set will be
listed.

When Hit

This field allows you to automate playing


of a sound effect when the ball rolls though
the beam. Sounds are imported into the
Table via the Sound Manager (link). This
functionality removes the need for a
PlaySound (link) script command.
This Section describes the object and how it can be accessed
and controlled via the script at run-time. Note that you access
the object via the name given in the Name property field

The TriggerOpto object doesn't have any properties which


can be modified via the script.

The TriggerOpto object doesn't have any Methods than can


be called via the script.

_Hit()
This event is signaled to the script whenever the Ball
rolls though the beam between the Collector and
Emitter hence blocking the beam.

Script Example:

Sub MyTriggerOpto_Hit()
AddPoints(100)
End Sub

_UnHit()
This event is signaled to the script after the _Hit()
event has been signaled and the Trigger Collector is
detecting the beam from the Emitter.

Script Example:

Sub MyTriggerOpto_UnHit()
' Do Something..
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Ramps (Plastic / Metal)

Ramps allow the passage of the ball from one playfield to


another (generally at different heights). There are generally
made Metal or Plastic and (according to some) provide a
more thrilling game of pinball.

(All available types and colour combinations may not be


shown)

When you create a Ramp on your table, the object will be drawn on
to the table workspace.
Selecting this object will bring up the following property sheet:

Profile

This field shows you to select the profile of


the ramp. This profile is adjusted to suit
the width / height of the ramp.

You can select on of the following

State Description
Plastic Ramp with rolled
Ramp_T1 edges (Thickness of
ramp is 2mm)
Metal Ramp (Thickness
Ramp_T2
of ramp is 1mm)

Texture

Allows you to wrap a texture around the


object. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Colour
Defines the colour of the Object. If the
object is to be rendered with a texture, the
texture will be tinted with this colour. If the
object has no texture, it will be rendered in
this colour. It is best never to use Full
Strength colours (i.e., where either the
Red, Green or Blue components are at
their Limits) as this will adversely affect
how the object is Shaded by the Lighting
system. For more information on the use
of Colour refer to the Special Graphic
Processing chapter (link).

Sphere Mapping

If Enabled (Ticked ), then any texture is


Sphere Mapped onto the object. For more
information on Sphere Mapping refer to
the Special Graphic Processing chapter
(link).

Transparency

The Transparency slider allows you to


make the Ramp transparent (to simulate
translucent plastics). With the slider all the
way over to the right (max), then the ramp
is fully opaque. Moving the slider to the left
will make the ramp more transparent.
When a ramp is transparent any objects
which are below it will also show through.
Objects which are transparent (or semi-
transparent) are drawn in a second
rendering phase of the game engine. This
is so it can draw objects underneath them
as well as tint them to the colour of the
surface.
There is a special case to the
Transparency slider. If it is all the way to
the left (at its minimum value) then the
object will be drawn in the second
rendering pass but the object will NOT be
transparent. This is so you can render
textures on the surface which either have
a colour marked as being transparent (in
the case of BMP textures via the Texture
Manager (link)) or you are using a TGA
file with an alpha channel.

Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified,
the Ramp is assumed to be attached to
the Main Playfield. For more information
on this refer to the Surface Object (link).

Start Height

Defines the Start height (in millimeters)


from the attached Surface the ramps starts
at. By changing the Start and End heights
you can make the ramp slope up (or
down). Valid values range from 0 to 150
millimeters.

Start Width

Defines the initial Width of the Ramp (in


millimeters). Valid values range from 30 to
150 millimeters.
End Height

Defines the End height (in millimeters)


from the attached Surface the ramps starts
at. By changing the Start and End heights
you can make the ramp slope up (or
down). If the Ramp has a Ramp Point
marked as the End Point then the ramp
will reach the End Height at that point and
continue at the End Height until the end of
the ramp. For more information refer to the
ramp point chapter (link). Valid values
range from 0 to 150 millimeters.

End Width

Defines the end Width of the Ramp (in


millimeters). Valid values range from 30 to
150 millimeters.

Left Side Height

This field allows you to define the height of


the left wall of the ramp. Valid values
range from 0 to 60 millimeters. Setting this
to a value of 0 will create a ramp without a
left side.

Right Side Height

This field allows you to define the height of


the right wall of the ramp. Valid values
range from 0 to 60 millimeters. Setting this
to a value of 0 will create a ramp without a
right side.

Reflects off Playfield


If Enabled (Ticked ), the object will also
reflect off the Playfield Surface specified
by the Playfield property. If you don't want
the object to reflect off the playfield
(providing the user has that video option
enabled), uncheck this option. If the object
isn't generally visible you may with to
disable reflections for this object to save
on the rendering processing.

Playfield

Defines which playfield the Ramp will


reflect off. Only surfaces which have the
'Surface is a Playfield' flag set will be
listed.

It is extreamly important to note that on some ramp configurations


(very short, steep ramps), a fast moving ball will gain upwards
momentum as it goes up the ramp. This can cause a bit of "air time"
as the ball will still continue to go up as it ramp levels out. Most
pinballs place plastic covers over the ramp to contain the ball. In
Future Pinball you may also have to do this.
The Ramp object doesn't provide any scripting abilities of its
own.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Wire Ramps (Habitrails)

Wire Ramps (or habitrails as they are called) allow the


passage of the ball from one playfield to another (generally
at different heights). There are generally made Metal or
Plastic and (according to some) provide a more thrilling
game of pinball. Wire Ramps also provide support for VUK
(vertical up kickers) which allow vertical action of the ball.

(All available types and colour combinations may not be


shown)
When you create a Wire Ramp on your table, the object will be
drawn on to the table workspace. As Wire Ramps are Ramp Point
based, you will need to be familiar with ramppoints (link) before
continuing as ramp points will allow you to add a selection or ramp
rings which will be attached to your ramp.

Selecting this object will bring up the following property sheet:

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture, the
texture will be tinted with this colour. If the
object has no texture, it will be rendered in
this colour. It is best never to use Full
Strength colours (i.e., where either the
Red, Green or Blue components are at
their Limits) as this will adversely affect
how the object is Shaded by the Lighting
system. For more information on the use
of Colour refer to the Special Graphic
Processing chapter (link).

Texture

Allows you to wrap a texture around the


object. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified,
the Ramp is assumed to be attached to
the Main Playfield. For more information
on this refer to the Surface Object (link).

Start Height

Defines the Start height (in millimeters)


from the attached Surface the ramps starts
at. By changing the Start and End heights
you can make the ramp slope up (or
down). Valid values range from 0 to 150
millimeters.

End Height

Defines the End height (in millimeters)


from the attached Surface the ramps starts
at. By changing the Start and End heights
you can make the ramp slope up (or
down). If the Ramp has a Ramp Point
marked as the End Point then the ramp
will reach the End Height at that point and
continue at the End Height until the end of
the ramp. For more information refer to the
ramp point chapter (link). Valid values
range from 0 to 150 millimeters.

Start Model

This allows you to select the type of object


you want to be appended to the Start of
your ramp (such as a VUK tube etc..).
Future Pinball contains a large collection
of ramp specific models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Selecting a model will also show a
small preview picture of the selected
Model.

End Model

This allows you to select the type of object


you want to be appended to the End of
your ramp (such as a VUK tube, Rubber
stop etc..). Future Pinball contains a large
collection of ramp specific models in the
libraries supplied. You can import more
models into your table by using the Model
Manager (link). Selecting a model will also
show a small preview picture of the
selected Model.

Reflects off Playfield


If Enabled (Ticked ), the object will also
reflect off the Playfield Surface specified
by the Playfield property. If you don't want
the object to reflect off the playfield
(providing the user has that video option
enabled), uncheck this option. If the object
isn't generally visible you may with to
disable reflections for this object to save
on the rendering processing.

Playfield

Defines which playfield the Ramp will


reflect off. Only surfaces which have the
'Surface is a Playfield' flag set will be
listed.

The Wire Ramp object doesn't provide any scripting abilities of


its own.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Ramps (Models)

Ramp Models provide custom support items for the other


ramp objects. They allow much more complex ramp types.
Ramp Models are generally designed to be used with
existing ramps to expand their functionality.

(All available types and colour combinations may not be


shown)

When you create a Ramp Model on your table, the object will be
drawn onto the current workspace.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table
and may not contain any spaces. As with
all Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available


models which have been loaded into your
table. Future Pinball contains a large
collection of models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Only models which have the same
object type of the current object are listed.
Selecting a model will also show a small
preview picture of the selected Model.
Colour

Defines the colour of the Object. If the


object is to be rendered with a texture then
the texture will be tinted with this colour. If
the object has no texture then it will be
rendered in this colour. It is best never to
use Full Strength colours (i.e., where
either the Red, Green or Blue components
are at their Limits) as this will adversely
affect how the object is Shaded by the
Lighting system. For more information on
the use of Colour refer to the Special
Graphic Processing chapter (link).

Sphere Mapping

If Enabled (Ticked ), then any texture is


Sphere Mapped onto the object. For more
information on Sphere Mapping refer to
the Special Graphic Processing chapter
(link).

Transparency

The Transparency slider allows you to


make the Ramp transparent (to simulate
translucent plastics). With the slider all the
way over to the right (max), then the ramp
is fully opaque. Moving the slider to the left
will make the ramp more transparent.
When a ramp is transparent any objects
which are below it will also show through.
Objects which are transparent (or semi-
transparent) are drawn in a second
rendering phase of the game engine. This
is so it can draw objects underneath them
as well as tint them to the colour of the
surface.

There is a special case to the


Transparency slider. If it is all the way to
the left (at its minimum value) then the
object will be drawn in the second
rendering pass but the object will NOT be
transparent. This is so you can render
textures on the surface which either have
a colour marked as being transparent (in
the case of BMP textures via the Texture
Manager (link)) or you are using a TGA
file with an alpha channel.

Disable Culling (non transparent


ramps only)

If Enabled (Ticked ), then any back


surface culling is disabled when rendering
the model (this only apply's if there is no
transparency for the ramp). Some Ramp
models may have portions of them
disappear when being drawn. Enabling
this flag will force those polygons to be
drawn. (For example the ramp pool
object). This increases the rendering time
for the object and as such should only be
used when required.

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Y
Defines the Y location (again in millimeters
from the top left hand corner of the
playfield) of the object on the Table.

Rotation

This field allows you to draw the object at


a different rotation on the Table. Valid
values range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified,
the object is assumed to be attached to
the Main Playfield. For more information
on this refer to the Surface Object (link).

Offset

Defines the offset (in millimeters) from the


attached Surface to draw the Ramp Model
at. Valid values range from 0 to 150
millimeters.

Reflects off Playfield

If Enabled (Ticked ) then the object will


also reflect off the Playfield Surface
specified by the Playfield property. If you
don't want the object to reflect off the
playfield (providing the user has that video
option enabled) then uncheck this option.
If the object isn't generally visible you may
with to disable reflections for this object to
save on the rendering processing.
Playfield

Defines which playfield the surface will


reflect off. Only surfaces which have the
'Surface is a Playfield' flag set will be
listed.

The Ramp Model object doesn't provide any scripting abilities of


its own.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Spinning Disks

Spinning Disks provide a bit of Randomness to the flow of the


ball (when activated) making the game a little more
challenging and unpredictable.

(All available types and colour combinations may not be


shown)

When you create a Spinning Disk on your table, the object will be
drawn on to the table workspace.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table
and may not contain any spaces. As with
all Object Names, you should give a
descriptive name to your object.

Model

This field shows the list of available


models which have been loaded into your
table. Future Pinball contains a large
collection of models in the libraries
supplied. You can import more models into
your table by using the Model Manager
(link). Only models which have the same
object type of the current object are listed.
Selecting a model will also show a small
preview picture of the selected Model.

Texture
Allows you to wrap a texture over the
Spinning DIsk. Textures are imported into
the Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture, the
texture will be tinted with this colour. If the
object has no texture, it will be rendered in
this colour. It is best never to use Full
Strength colours (i.e., where either the
Red, Green or Blue components are at
their Limits) as this will adversely affect
how the object is Shaded by the Lighting
system. For more information on the use
of Colour refer to the Special Graphic
Processing chapter (link).

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Playfield

Defines which surface the spin disk object


is attached to. Only surfaces which have
the 'Surface is a Playfield' flag set will be
listed. If no Surface is specified then the
object is assumed to be attached to the
Main Playfield. For more information on
this refer to the Surface Object (link).

Motor Power

Defines the strength of the motor which


spins the object. Allows you to change
how fast the object spins and thus how it
effects the ball.

Damping

This field allows you the set the damping


on the spinner. This will change how fast
(or slow) the spin disk will slow down when
power is turned of from its motor.

This Section describes the object and how it can be accessed


and controlled via the script at run-time. Note that you access
the object via the name given in the Name property field.

<Boolean> .AntiClockwise

This Method will reverse the spin direction of the motor.


If TRUE then the disk will rotate anticlockwise else it
will rotate clockwise (the default)

Script Example:

' in a function somewhere


MySpiningDisk.AntiClockwise = TRUE

.SolenoidOn()
This Method will turn ON the Motor for the Spinning
Disk. This will cause the motor to start spinning the
Disk.

Script Example:

' in a function somewhere


MySpiningDisk.SolenoidOn()

.SolenoidOff()
This Method will turns OFF the Motor for the Spinning
Disk.. If the Solenoid/Motor is currently on then the
Disk will slowly slow down and stop.

Script Example:

MySpiningDisk.SolenoidOff()
.SolenoidPulse ( <Integer> PulseTime )
The SolenoidPulse method, will pulse the Solenoid On
for an amount of time and when the time expires will
turn the Solenoid Off again.

PulseTime is a positive number and is the time in


milliseconds to hold the Solenoid On for. If no value is
specified, a pulse of 100ms will be used.

Script Example:

MySpiningDisk.SolenoidPulse

or;

MySpiningDisk.SolenoidPulse(500)

The Spinning Disk object doesn't have any Events which it


can call via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Hologram

The Hologram object recreates the overhead image projection that was pioneered for the
Pinball 2000 Platform by Williams Industries. This hologram system allows for full colour
images and animation to be projected though the glass and over the the table components
underneath. This allows for really nice video integration with the ball as video sequences can
be played when the ball hits targets, switches etc.

Future Pinball also allows for a Dot Matrix Display to also be projected over the hologram
allowing for the score and text to be displayed independently to image animation. For more
information on how the DMD displays work refer to the Dot Matrix Display section of this
manual (link) as this part of the manual will only be talking about the interface changes.

(Featured Table is Dark Quest by Steve Paradis)

When you create a Hologram on your table, the object will be drawn onto the current workspace.
Hologram can only be placed on the Playfield workspace.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to your
object.

Image List

Defines the Image List for the Hologram to use. Image Lists are created by
the Image List manager (link).

Colour

Defines the colour of any drawn image (from the Image List). It is best to used
a similar colour to the Translite colour if you are going to use the overlay on
the translite.

Defines the X location (based in millimeters from the top left hand corner of
the translite) of the object on the Table.

Defines the Y location (again in millimeters from the top left hand corner of the
translite) of the object on the Table.

Width

Defines the width of the Hologram projection in mm. Width must have a
minimum of 5mm.

Height
Defines the Height of the Hologram projection in mm. Height must have a
minimum of 5mm.

Rotation

Allows you to change the rotation of the hologram projection on the XZ axis.
Valid values range from 0 to 359 degrees.

Tilt

Allows you to change the tilt of the hologram projection on the YZ axis. Valid
values range from 0 to 90 degrees.

Offset

Defines the offset (in millimeters) from the Playfield to draw the Hologram at.
This value allows to to raise (or lower) the projection.. Valid values range from
0 to 100 millimeters

Update Interval

Defines the update interval (in Milliseconds) of the Hologram when it is


animating individual images from the Image List via the Frame() script method
for this object. The Lower the value, the faster the Frame() method will work.
The value must be at least 25 milliseconds.

Generally you will not need to change this value unless you wish to change
how fast any page flipping animations work.

Matrix Colour

As mentioned above, A dmd can also drawn over the hologram projection
allowing for the score to be displayed and other text animations.

Matrix colour defines the colour of the Dots when they are Lit. Unlike the DMD
Display object unlit dots will not be drawn.

Render as Dmd Matrix

If enabled (Ticked ), the DMD will be displayed as individuals Dots (just like
a normal dmd) otherwise the display will be drawn as blocky text (how blocky
depends on the dot count values defined). Please note that this affect requires
shader support on the players computer. If shaders are not supported then the
text will be drawn in block mode irrelevant to this setting (Every video can
produced in the last 4 years is capable of running shaders).
X Dot Count

Defines the dot count along the Horizontal axis for the DMD. This value must
be a multiple of 2 and between 8 and 256. (ie 8, 16, 32, 64, 128, 256).

Height

Defines the dot count along the Vertical axis for the DMD. This value must be
a multiple of 2 and between 8 and 256. (ie 8, 16, 32, 64, 128, 256). The more
dots the better the display will look but you might be after a more display
display which less dots will achieve.

Alignment

Allows you to define how text and numbers are aligned on the display. You
can select one of the following:

Alignment Description
AlignLeft Any Text / Numbers displayed will be Left aligned.
AlignCenter Any Text / Numbers displayed will be Center aligned.
AlignRight (Default) Any Text / Numbers displayed will be Right aligned.

Update Interval

Defines the update interval (in Milliseconds) of the DMD device. The Lower
the value, the more the display device will be updated. this has the effect to
making any scrolling effects look smoother as the scroll will be faster (with a
lower value). In general you will not have to play with this value. The value
must be at least 5 milliseconds. Setting this value may also effect (and adjust)
the Slow and Fast Blink Speeds if you set it to a value larger than either of
those values.

Generally you will not need to change this value unless you wish to slow down
the display effects.

Slow Blink Speed

Defines the speed on which text marked as Blinking (slowly) will blink at. This
value must be at least double that of the Update Interval and is specified in
Milliseconds

Fast Blink Speed

Defines the speed on which text marked as Blinking (fast) will blink at. This
value must be at least that of the Update Interval and is specified in
Milliseconds.

This Section describes the object and how it can be accessed and controlled via the script at run-
time. Note that you access the object via the name given in the Name property field.

It is recommended that you are fully familiar on how the Dot Matrix display works as this
section
of the will only include the interface changes. Please Note that the Hologram/DMD does not
support
background images within the DMD portion of the display. Hence the [IL], [AS], [NA], [SF],
[EF] and [RF]
embedded commands are not supported.

<Integer> .UpdateInterval = { Period in Milliseconds }


This property allows you to change the speed at which the Hologram will change image
frame (from the specified Image List) when using the Frame() script method. The smaller
the value the faster the animation will run. The value must be at least 25 milliseconds.

This value is independent to the .DmdUpdateInterval property below and only affects the
speed of the Hologram refresh.

Script Example:

MyHologram.UpdateInterval = 100

<Integer> .CurrentFrame (READ ONLY)


Will return the current frame from the Image List being displayed. This will be a value
between 1 and the maximum number of frames in the Image List.

Script Example:

If (MyHologram.CurrentFrame = 1) Then
' Do something..
End If

<Integer> .Value (READ ONLY) ** SIMPLE METHOD **


This property allows you to read in the current value displayed on the Hologram/DMD
object. This command will only work if you use the .ResetToZero, .AddValue and
.SetValue methods which help simulate a simple DMD display without having to queue up
displays.

Script Example:

Dim MyScore
MyScore = MyHologram.Value
The DMD will have an internal value of 0 when the table is first played though this is not
automatically displayed. If you wish to use the Hologram/DMD Display object in the
Simpler Number only way, you will need to issue a .SetValue command at startup to
initialise the display.

<String> .Text = { "String to Display" } ** SIMPLE METHOD **


This property allows you to display a string of text (which can also contain numbers) onto
the Hologram Display. If there is any screens queued up via the .QueueText() method, the
queue is flushed and will no longer be processed. Embedded DMD commands are
processed for both the .Text and .QueueText() methods.

Script Example:

MyHologram.Text = "SCORE " & FormatNumber(nvScore1, 0, -1, 0, -

<Integer> .DmdUpdateInterval = { Period in Milliseconds }


This property allows you to change how fast the display is updated. The Lower the value,
the more the display device will be updated. this has the effect to making any scrolling
effects look smoother as the scroll will be faster (with a lower value). In general you will not
have to play with this value. The value must be at least 5 milliseconds. Setting this value
may also effect (and adjust) the Slow and Fast Blink Speeds if you set it to a value larger
than either of those values.

This value is independent to the .UpdateInterval property above and only affects the
speed of the DMD refresh.

Script Example:

MyHologram.DmdUpdateInterval = 10

<Integer> .SlowBlinkSpeed = { Period in Milliseconds }


This property allows you to change how fast (or slow) text will blink (flash) on the display
when using the [b] comment token. The value specified (in milliseconds) must be at least
double the .DmdUpdateInterval value and preferably a multiple of it. Setting this to a
value less than double the update interval will set it to be double the update interval.

Script Example:

MyHologram.SlowBlinkSpeed = 100
<Integer> .FastBlinkSpeed = { Period in Milliseconds }
This property allows you to change how fast (or slow) text will blink (flash) on the display
when using the [bf] comment token. The value specified (in milliseconds) must be at least
the .DmdUpdateInterval value and preferably a multiple of it. Setting this to a value less
than the update interval will set it to be the update interval.

Script Example:

MyHologram.FastBlinkSpeed = 50

<Boolean> .IsEmpty (READ ONLY)


Will return TRUE or FALSE depending if the Display Queue is empty (refer to the
.QueueText method for more information).

Script Example..

' If the display queue is empty


If (MyHologram.IsEmpty = True) Then
' .. do something ..
End If

These methods animate the image being display on the Hologram. As an Image List can
contain lots of individual frames, these methods allows you to toggle which frame to display
from the Image List.

.Frame ( <Integer> StartFrame, <Integer> EndFrame,


<Integer> RepeatFrame )
This method allows you to either set the current image to display (from the Image List).
This method also allows you to animate the Hologram by getting it to animate by
displaying different frames every .UpdateInterval.

StartFrame
The initial frame to display. This should be an integer number between 1
and the maximum number of images in the Image List. A value of 1 will
display the first frame. If this value is out of range then this command will
have no effect.

EndFrame
If you wish the Overlay to animate between several images within the
Image List (in a sequential order) then this field will allow you to set the end
frame. Each frame (between the StartFrame and the EndFrame will be
displayed in turn (at the rate defined by .UpdateInterval). You can animate
both Forwards and Backwards. If not value is specified then no animation
will take effect. If this value is out of range then the command will have no
effect.

RepeatFrame
This field allows you to specify a frame index to start (or repeat) an
animate once it has progressed from the StartFrame to the the
EndFrame. If no value is specified then the any animation will only play
once.

Script Examples:

Display the first frame in the Image List;

MyHologram.Frame 1

Animate between Frame 1 and 5;

MyHologram.Frame 1, 5

Animate between Frame 1 and 5 and restart the animation from frame 3 (playing again to
frame 5 and repeating again and again);

MyHologram.Frame 1, 5, 3

Stop any animation at the current frame;

MyHologram.Frame MyHologram.CurrentFrame

.StepForward()
This method will advance the Image Frame being displayed (display the next image in the
list). If it exceeds the number of frames in the Image List then it will begin again from the
first frame. If the Image List only has a single frame then this method will have no effect.

Script Example:

MyHologram.StepForward()

.StepBackward()
This method will retard the Image Frame being displayed (display the previous image in
the list). If it goes back before the first frame then it will start again from the last frame in
the Image List. If the Image List only has a single frame then this method will have no
effect.

Script Example:

MyHologram.StepBackward()

.FadeOut()
This method will fade out the Hologram (and any DMD text) until it is not visible anymore.
If the Hologram has already been faded out then this command will have no effect.

Script Example:

MyHologram.FadeOut()

.FadeIn()
This method will fade in the Hologram until it is fully visible. If the Hologram is already
visible then this command will have no effect.

Script Example:

MyHologram.FadeIn()

.ResetToZero () ** SIMPLE METHOD **


This method will set the Hologram/DMD Display so it displays '0'. This Method should be
called when ever the player starts a new game and you need to reset the display. This also
sets the Value property to 0.

Script Example:

MyHologram.ResetToZero()

.AddValue ( <Integer> Value ) ** SIMPLE METHOD **


This Command will add (or subtract) the specified value from the Hologram/DMD Display.
This value can be either positive or negative. This also adjusts the Value property by the
value specified.

Script Example:
MyHologram.AddValue(100)

.SetValue ( <Integer> Value ) ** SIMPLE METHOD **


This method allows you to set the value of the Display to the specified value instantly. This
useful so you can set the Display to the last known players score which is saved when the
player exits the table. For more information on script variables which are persisted refer to
the Global Script Commands and Variables Chapter (link). Value must be positive. This
also sets the Value property to the value specified.

Script Example:

Sub FuturePinball_BeginPlay()
' initalise the player displays to the last known player score
MyDmd.SetValue(nvScore1)
' ..Etc..
End Sub

.QueueText ( <String> Text, <Enumeration> Effect, <Integer>


TimeOn, <Boolean> FlushQueue, <String> SoundEffect )
This method allows multiple text lines (called screens) to be queued up and displayed in
turn. This is where the flexibility of the Hologram/DMD Display device really shows off as
you can add in several screens to let the player know he has done something without
actually having to keep track when each screen has finished.

Text
Specifies the Text to Display. Embedded DMD commands are processed if
they are included in the text.

Effect
The type of effect used to display the screen (or text) onto the display. This
field must be one of the following:

Generally the Scroll Effects will scroll any existing data off the screen, while
the Wipe effects replace the old screen with the new one.

Effect
Description

deNone (Default)
The text is instantly displayed.

deScrollLeft The text is scrolled onto the display starting from the
right most position and moving towards the left. Any
existing text is scrolled as well so effectively the old text
scrolls off while the new text scrolls on.
deScrollLeftOver The Text is scrolled onto the display starting from the
right most position and moving towards the left. It will
appear to scroll over any existing text.
deScrollRight The Text is scrolled onto the display starting from the
left most position and moving towards the right. Any
existing text is scrolled as well so effectively the old text
scrolls off while the new text scrolls on.
deScrollRightOver The Text is scrolled onto the display starting from the
left most position and moving towards the right. It will
appear to scroll over any existing text.
deScrollUp The text is scrolled upwards onto the display starting
from the bottom and moving upwards. Any existing text
is scrolled as well so effectively the old text scrolls off
while the new text scrolls on.
deScrollUpOver The Text is scrolled onto the display starting from the
bottom and moving upwards. It will appear to scroll over
any existing text.
deScrollDown The text is scrolled downwards onto the display starting
from the top and moving downwards. Any existing text
is scrolled as well so effectively the old text scrolls off
while the new text scrolls on.
deScrollDownOver The Text is scrolled onto the display starting from the
top and moving downwards. It will appear to scroll over
any existing text.
deScrollOut The Text will appear to scroll outwards (both left and
right) from the middle of the display.
deScrollIn The Text will scroll inwards from both the left and right
most edges of the display towards the middle.
deScrollOutVert The Text will appear to scroll outwards (both top and
bottom) from the middle of the display.
deScrollInVert The Text will scroll inwards from both the top and
bottom edges of the display towards the middle.
deWipeLeft Each DMD column will be replaced one at a time with
the new text (replacing any existing old text) starting
from the right and moving towards the left.
deWipeRight Each DMD column will be replaced one at a time with
the new text (replacing any existing old text) starting
from the left and moving towards the right.
deWipeUp Each DMD row will be replaced one at a time with the
new text (replacing any existing old text) starting from
the bottom and moving upwards.
deWipeDown Each DMD row will be replaced one at a time with the
new text (replacing any existing old text) starting from
the top and moving downwards.
deWipeOut
The new text will wipe out from the middle of the display
to the left and right edges.

deWipeIn
The new text will wipe in from the left the right edges
towards the middle.
deWipeOutVert
The new text will wipe out from the middle of the display
to the top and bottom edges.

deWipeInVert
The new text will wipe in from the top the bottom edges
towards the middle.

deFlip The Entire screen will flip over (vertical) and the next
screen will flip on.
deRandomEffect The Transition effect will be random selected from one
of the above effects.
TimeOn
Defines the time in milliseconds this screen is held for before moving to the
next display in the queue. This time also included the time to process the
Effect. For Best Results this should be a multiple of the .UpdateInterval
property. If no value is specified, the text will immediately be displayed and
the next (if any) display in the queue will be processed.

FlushQueue
Instructs the display driver to flush the queue if this is the LAST display in
the queue. Valid values are TRUE or FALSE. Generally during a game you
will always specify TRUE as you will want to display to revert back to the
default score screen when your effect screen has finished. During the
Attract mode though you will want it to be FALSE as you will want the attract
mode displays to automatically restart when they have finished. this allows
you to only put the displays in once and not have to worry about the driver
running out of things to do. If no value is specified, it is assumed to be
TRUE.

If this display is the last one in the queue (when it is processed, not when
you put it into the queue), it will call the _Empty() script event. You can use
this event to put back any default screens onto the display (such as
displaying the score)

Sound The Sound file to play when this screen is first processed. This allows
Effect corresponding sounds to be sync'd up with the appropriate display (i.e., a
bonus sound or something). Sounds are imported into the Table via the
Sound Manager (link). If this value is not specified, no sound effect will play.

Script Example:

MyHologram.QueueText "SCROLL LEFT", deScrollLeft, 750, True


MyHologram.QueueText "SCROLL LEFT OVER", deScrollLeftOver, 750,

For more Script examples, refer to the DMD Display example table which is included with
Future Pinball.

.FlushQueue ()
This method will flush (empty) the text queue (if any) so any screens that are still to be
processed are ignored. Note that this will not call the _Empty() script event as you are
manually emptying the queue so it's not finishing due to all the screens being processed.
Script Example:

MyHologram.FlushQueue()

.AddFont ( <Integer> Slot, <Boolean> FontName )


This method will adds an existing DMD font ( these are created with the DMD Font Editor
and included into your table via the Font Manager ) to the DMD. Fonts must be added for
any text to display. Fonts and selected via the [f#] embedded command.

Slot
A slot number to assign the font to. This as to be between 1 and 32
(inclusive). If an existing font already exists in this slot then it will be
overwritten.

FontName
The name of the font as imported into the table via the via the Font
Manager.

Script Example:

MyHologram.AddFont 1, "dmd05x05p"
MyHologram.AddFont 2, "dmd06x07p"

_Empty ()
This event is called when the Hologram/DMD Display Device has finished processing the
text queue and the last entry in the queue told the driver to finish up (by setting the
FlushQueue parameter to True in the .QueueText method)

You can use this to revert back to a default screen such has displaying the players score
when any screens you queue up finish being processed.

Script Example:

' The Hologram/DMD text queue has finished,


Sub MyHologram_Empty()
' revert back to displaying the score
MyHologram.Text = "SCORE " & FormatNumber(nvScore1, 0, -1, 0, -1
End Sub
Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Toy

The Toy object allows for custom 3D models to be controlled via the script and made to animate, move
and rotate. This object is very advanced and requires a minor understanding of 3D movement/rotation
principles. Toy objects are generally 'one off' special objects on pinball tables which are specific to that
game and are used to add a bit of uniqueness to the table. Toy models can only be crafted by the Future
Pinball development team.

(All available types and colour combinations may not be shown)


The ferris wheel is from Cyclone © Williams Electronic Ganes 1988
Vampire Coffin designed by Ruckage

When you create a Toy on your table, the object will be drawn onto the current workspace.

Selecting this object will bring up the following property sheet:


Name
Sets the name of the object which is used to reference the object via Script events.
The name must be unique for the table and may not contain any spaces. As with all
Object Names, you should give a descriptive name to your object.
Model
This field shows the list of available models which have been loaded into your
table. Future Pinball contains a large collection of models in the libraries supplied.
You can import more models into your table by using the Model Manager ( link).
Only models which have the same object type of the current object are listed.
Selecting a model will also show a small preview picture of the selected Model.
Texture
Allows you to wrap a texture around the object. Textures are imported into the
Table via the Texture Manager (link). Selecting a Texture will also show a small
preview picture of the texture.
Colour
Defines the colour of the Object. If the object is to be rendered with a texture then
the texture will be tinted with this colour. If the object has no texture then it will be
rendered in this colour. It is best never to use Full Strength colours (i.e., where
either the Red, Green or Blue components are at their Limits) as this will adversely
affect how the object is Shaded by the Lighting system. For more information on
the use of Colour refer to the Special Graphic Processing chapter ( link).
Sphere Mapping
If Enabled (Ticked ), then any texture is Sphere Mapped onto the object. For
more information on Sphere Mapping refer to the Special Graphic Processing
chapter (link).
Transparency
The Transparency slider allows you to make the Toy transparent (to simulate
translucent plastics). With the slider all the way over to the right (max), then the
ramp is fully opaque. Moving the slider to the left will make the object more
transparent. When a object is transparent any objects which are behind it (or below
it) will also show through. Objects which are transparent (or semi-transparent) are
drawn in a second rendering phase of the game engine. This is so it can draw
objects underneath them as well as tint them to the colour of the surface.
There is a special case to the Transparency slider. If it is all the way to the left (at
its minimum value) then the object will be drawn in the second rendering pass but
the object will NOT be transparent. This is so you can render textures on the
surface which either have a colour marked as being transparent (in the case of
BMP textures via the Texture Manager (link)) or you are using a TGA file with an
alpha channel.
X
Defines the X location (based in millimeters from the top left hand corner of the
playfield) of the object on the Table.
Y
Defines the Y location (again in millimeters from the top left hand corner of the
playfield) of the object on the Table.
Rotation
This field allows you to draw the object at a different rotation on the Table. Valid
values range from 0 to 359 degrees.
Surface
Defines what Surface (or Wall) the object is attached to. If no Surface is specified,
the object is assumed to be attached to the Main Playfield. For more information on
this refer to the Surface Object (link).
Offset
Defines the offset (in millimeters) from the attached Surface to draw the Ramp
Model at.This value can also be negative allowing the object to placed under or in
the playfield.

Reflects off Playfield


If Enabled (Ticked ) then the object will also reflect off the Playfield Surface
specified by the Playfield property. If you don't want the object to reflect off the
playfield (providing the user has that video option enabled) then uncheck this
option. If the object isn't generally visible you may with to disable reflections for this
object to save on the rendering processing.
Playfield
Defines which playfield the surface will reflect off. Only surfaces which have the
'Surface is a Playfield' flag set will be listed.

Update Interval
Defines the update interval (in Milliseconds) of the Toy when it is animating
individual from from the 3D model via the Frame() script method for this object. The
Lower the value, the faster the Frame() method will work. The value must be at
least 25 milliseconds.

This Section describes the object and how it can be accessed and controlled via the script at run-
time. Note that you access the object via the name given in the Name property field.

<Integer> .UpdateInterval = { Period in Milliseconds }

This property allows you to change the animation speed of the object
when it is Animating (changing key frames in the 3d model. The smaller
the value the faster the animation will run. The value must be at least
25 milliseconds.

Script Example:
myToy.UpdateInterval = 100

<Integer> .CurrentFrame (READ ONLY)

Will return the current key frame from the 3D model. This will be a
value between 1 and the maximum number of key frames in the
model.

Script Example:

If (myToy.CurrentFrame = 1) Then
' Do something..
End If

<floating point> .Tx = { Position }

This property allows you to get or set the X coordinate of the object
on the playfield. If you set this value then this will stop any current
MoveTo() action currently being performed. Future Pinball does not limit
the value of this property so you must be careful not to set it to a position
outside of the playfield.

This diagram will help explain the different axis's in 3D. +Z is towards
the front of the playfield (-Z is towards the backbox). +Y is above the
playfeild. 0, 0, 0 is the exact center of the playfield and on its surface so
the majority of object will have a +Y position.

Script Example:

myToy.Tx = 100

<floating point> .Ty = { Position }


This property allows you to get or set the Y coordinate of the object on
the playfield. If you set this value then this will stop any current
MoveTo() action currently being performed. Future Pinball does not limit
the value of this property so you must be careful not to set it to a position
outside of the playfield.

For more information refer to the .Tx property.

<floating point> .Tz = { Position }

This property allows you to get or set the Z coordinate of the object on
the playfield. If you set this value then this will stop any current
MoveTo() action currently being performed. Future Pinball does not limit
the value of this property so you must be careful not to set it to a position
outside of the playfield.

For more information refer to the .Tx property.

<floating point> .AngleXZ = { Angle in Degrees }

This property allows you get or specify the rotation angle of the
object on the XZ axis. If you set this value then this will stop any
current RotateXZ() command which may be currently being processed.
Values will be between 0.00 and 359.99 degrees.

This diagram will help explain the different rotation axis's and how the
effect the Toy object.

Script Example:
' set the angle to 22.0 degrees
myToy.AngleXZ = 22.0

<floating point> .AngleXY = { Angle in Degrees }

This property allows you get or specify the rotation angle of the
object on the XY axis. If you set this value then this will stop any
current RotateXY() command which may be currently being processed.
Values will be between 0.00 and 359.99 degrees. For more information
refer to the .AngleXY property.

<floating point> .AngleYZ ={ Angle in Degrees }

This property allows you get or specify the rotation angle of the
object on the YZ axis. If you set this value then this will stop any
current RotateXZ() command which may be currently being processed.
Values will be between 0.00 and 359.99 degrees. For more information
refer to the .AngleXY property.

.Frame ( <Integer> StartFrame, <Integer> EndFrame, <Integer>


RepeatFrame )

This method also allows you to animate the object by getting it to


animate by changing between different key frames embedded in
the 3d model every .UpdateInterval.
StartFrame The initial key frame to display. This should be an
integer number between 1 and the maximum number of
key frames in the model. A value of 1 will display the
first key frame. If this value is out of range then this
command will have no effect.

EndFrame If you wish the Toy to animate between several key


frames within the model (in a sequential order) then this
field will allow you to set the end frame. Each frame
(between the StartFrame and the EndFrame will be
displayed in turn (at the rate defined by
.UpdateInterval). You can animate both Forwards and
Backwards. If not value is specified then no animation
will take effect. If this value is out of range then the
command will have no effect.

RepeatFrame This field allows you to specify a key frame index to


start (or repeat) an animate once it has progressed from
the StartFrame to the the EndFrame. If no value is
specified then the any animation will only play once.
Script Examples:

Display the first key frame in the model List;


myToy.Frame 1

Animate between key frames 1 and 5;


myToy.Frame 1, 5

Animate between key frames 1 and 5 and restart the animation


from key frame 3 (playing again to key frame 5 and repeating
again and again);
myToy.Frame 1, 5, 3

Stop any animation at the current frame;


myToy.Frame myToy.CurrentFrame

.StepForward()

This method will advance the Key Frame being displayed (display
the next key frame in the model). If it exceeds the number of key
frames in the model then it will begin again from the first key frame.
If the the model has only has a single key frame then this method
will have no effect.

Script Example:
myToy.StepForward()

.StepBackward()

This method will retard the Key Frame being displayed (display the
previous key frame in the model). If it goes back before the first
key frame then it will start again from the last key frame in the
model. If the model only has a single key frame then this method
will have no effect.

Script Example:
myToy.StepBackward()

.MovelTo ( <floaing point> X, <floaing point> Y, <floaing point> Z, <floaing


point> Speed )

This method also allows you to move the Toy object to any location
in the Future Pinball 3D world. Future Pinball does not limit the values
of this method so you must be careful not to move it to a position outside
of the playfield (unless ofcourse you want to).
X The X coordinate to move the object to.

Y The Y coordinate to move the object to.

Z The Z coordinate to move the object to.

Speed The Speed at which the object will move. Future Pinball uses
logarithms to control the speed of the object so the object will
ramp up to speed which reflects the time it takes for a pinball
motor to wind up to full speed. The speed must be positive.
Specifying a negative speed will have no affect.
For more information on 3d coordinates refer to the .Tx property.

Script Example:

' lower the object into the playfield (draw bridge in bk2k)
myToy.MoveTo myToy.Tx, myToy.Ty-42, myToy.Tz

.RotateXZ ( <floaing point> Speed, <Integer> StopAtAngle )

This method also allows you to rotate the object on the XZ axis at
the specified speed. The rotation will stop when the XZ angle
reaches the StopAtAngle (if specified) else the object will continue
to rotate forever.

Speed The speed of the Rotation. If Positive then


the object will move clockwise else if
negative the rotation will be counter-
clockwise.

StopAtAngle If specified then the object will stop rotating


(optional) on this axis when it reaches the speficied
angle. Valid ranges are between 0 and 369
degrees.
For more information on 3d rotation axis's refer to the .AngleXZ
property.

Script Example:

' spin clockwise (forever)


myToy.RotateXZ 50

Rotate anti-clockwise until we reach the stop angle of 90 degrees;

myToy.RotateXZ -50, 90

.RotateXY ( <floaing point> Speed, <Integer> StopAtAngle )


This method also allows you to rotate the object on the XY axis at
the specified speed. The rotation will stop when the XY angle
reaches the StopAtAngle (if specified) else the object will continue
to rotate forever.

Speed The speed of the Rotation. If Positive then


the object will move clockwise else if
negative the rotation will be counter-
clockwise.

StopAtAngle If specified then the object will stop rotating


(optional) on this axis when it reaches the speficied
angle. Valid ranges are between 0 and 369
degrees.
For more information on 3d rotation axis's refer to the .AngleXZ
property.

.RotateYZ ( <floaing point> Speed, <Integer> StopAtAngle )

This method also allows you to rotate the object on the YZ axis at
the specified speed. The rotation will stop when the YZ angle
reaches the StopAtAngle (if specified) else the object will continue
to rotate forever.

Speed The speed of the Rotation. If Positive then


the object will move clockwise else if
negative the rotation will be counter-
clockwise.

StopAtAngle If specified then the object will stop rotating


(optional) on this axis when it reaches the speficied
angle. Valid ranges are between 0 and 369
degrees.
For more information on 3d rotation axis's refer to the .AngleXZ
property.

_Hit()

This event is signaled to the script whenever the Ball Hits one of
the object hot spots as defined by the Future Pinball Model editor
(not available to the general public). The global script variable
fpEventID will be set to the ID (number) as specified in the Collision
information for the object. If you only wish to know that this object was
hit, then you can ignore this value.
For more information on this variable refer to the Global Script chapter
(link).

Script Example:

' target hit (I don't care which one was hit)


Sub myToy_Hit()
PlaySound "..."
AddPoints(250)
End Sub

or:

' do something depending on which thing was hit on the object


' (ie the draw bridge on BK2K which has 3 individual targets)
Sub myToy_Hit()
PlaySound "..."
AddPoints(250)
Select Case (fpEventID)
Case 1: ' do something
Case 2: ' do something
Case 3: ' do something
' etc.
End Select
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Electro-Mechanical Scoring Reels

Electro-Mechanical Scoring Reels (or EM Reel for short) were the primary scoring display
device for Electro-Mechanical Pinballs. They work very similar to a car odometer where each
individual reel rotates around incrementing its value and when it needs to reset from 9 to 0
again, it will increment the next reel (and so on).

Scoring Reels were also backlit to allow the machine to light the current players score. Because
of this the EM Reel device is lit in the same fashion as Bulbs, Bumpers, Flashers, etc.

(All available types and colour combinations may not be shown)

When you create a EM Reel on your table, the object will be drawn onto the current workspace. Reels
can be only be placed on both the Playfield and Translite workspaces.

Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to your
object.

Number Style

Allows you to define the style of numbering used on the reels. You may select
one of the following types:
ReelStyle1 ReelStyle2 ReelStyle3

Render Face Plate

If enabled (Ticked ), then the face plate of the EM Reel device is rendered.
This will give a nice clean edge to the Reel but there may be cases (such as
trying to match Existing Scoring Graphics) where this is not required.

Face Colour

Defines the colour of the Face Plate (if it is rendered). It is best never to use
Full Strength colours (i.e., where either the Red, Green or Blue components
are at their Limits) as this will adversely affect how the object is Shaded by the
Lighting system. For more information on the use of Colour refer to the
Special Graphic Processing chapter (link).

Lit Colour

Defines the colour of the Reels when the Bulbs within the EM Reel
Mechanism have been turned ON (more of this below). It is best never to use
Full Strength colours (i.e., where either the Red, Green or Blue components
are at their Limits) as this will adversely affect how the object is Shaded by the
Lighting system. For more information on the use of Colour refer to the
Special Graphic Processing chapter (link).

Auto Set Unlit Colour to 33%

If enabled (Ticked ), then Future Pinball will automatically set the Unlit colour
to 33% brightness of the Lit colour when ever the Lit colour is changed. On
older electro-mechanical games the light change is usually less dramatic so
you may wish to disable this option and set the Unlit colour so it shows less
colour change from the Lit colour.

Unlit Colour

Defines the colour of the Reels when the Bulbs within the EM Reel
Mechanism has been turned OFF (more of this below). The same colour
guidelines should be followed as described by the Lit Colour.

Defines the X location (based in millimeters from the top left hand corner of
the translite) of the object on the Table.

Defines the Y location (again in millimeters from the top left hand corner of the
translite) of the object on the Table.

Surface
Defines what Surface (or Wall) the object is attached to if the EM Reel is
placed onto the Playfield. If no Surface is specified, the object is assumed to
be attached to the Main Playfield. For more information on this refer to the
Surface Object (link). If the EM Reel has been placed onto the Translite, this
field is not displayed.

Reels

This field allows you to nominate how many individual reel digits will make up
the reel display. Valid values range from 1 to 7 reels.

Reel Width

Defines the Width of each individual Reel in millimeters. Valid values range
from 10 to 128 millimeters.

Reel Height

Defines the Height of each individual Reel in millimeters. Valid values range
from 10 to 128 millimeters.

Reel Spacing

Defines the width of the gap between Reels. If there is only 1 Reel, this field is
ignored. Valid values range from 1 to 40 millimeters.

Face Spacing

Defines the width of the Face Plate which sits around all of the reels. Valid
values range from 1 to 40 millimeters.

Spin Speed

Defines how fast each Reel will Spin (to the next number). You can select
from one of the following speeds:

Speed Description
Slowest
Slow
Medium (Default)
Fast
Fastest
Instant The Reel will instantly click over to the next number.

State

This field allows you to set the Backlit Bulb State. Each EM Reel has several
bulbs built into it which when used will illuminate the Numbers the Lit / Unlit
colours (depending on the state). The Bulbs (like a real pinball) takes around
30 milliseconds to go to full brightness and thus the Numbers will gradually
Brighten or Dim.

You can select it to one of the following states:

Rubber Size Metric (Millimeters)


Turns Off the Bulb in the EM Reel. The Reel Digits will be
BulbOff
drawn in the UnLit colour.
Turns On the Bulb in the EM Reel. The Reel Digits will be
BulbOn
drawn in the Lit colour.
The Bulb will follow 'pattern' defined by the Blink Pattern
BulbBlink
field.

Blink Pattern

Defines a special Blink Pattern the Bulb will follow when the State has been
set to BulbBlink. This pattern is defined out of a string made up out of 0s
(turn bulb Off) and 1s (turn bulb On). At least 2 pattern states must be given
(i.e., 10, 01, 11 or 00) with a maximum of 32 individual states. Blink Patterns
allow for some very creative light changes to be made especially which using
in conjunction if other objects which contain a light bulb (Lights, Flashers,
Bumpers, etc.)

Blink Interval

Defines the Period (in milliseconds) Future Pinball takes to process each state
within a Blink Pattern. When the Blink Pattern has been fully processed it will
begin again from the start and keep on repeating while ever the State is
BulbBlink. The Interval must be at least 25 milliseconds.

Spin Sound

This field allows you to automate playing of a sound effect when a reel spins
around to the next number. Sounds are imported into the Table via the Sound
Manager (link). This functionality removes the need for a PlaySound (link)
script command.

This Section describes the object and how it can be accessed and controlled via the script at run-
time. Note that you access the object via the name given in the Name property field.

<Integer> .Value (READ ONLY)


This property allows you to read in the current value displayed on the EM Reel object.

Script Example:

Dim MyScore
MyScore = MyEmReel.Value

The Reel will have a value of 0 when the table is first played.

<Enumeration> .State = { BulbOff | BulbOn | BulbBlink }


This field allows you to set the Reel's Bulb State. Valid values are BulbOff, BulbOn or
BulbBlink. If the .State has been set to BulbBlink, the bulb will immediately start
following the Pattern defined via the .BlinkPattern property.

If the Light Sequencer is currently running on this object, changing the State will
not take effect until the Light Sequencer has finished running. When the
Sequencer has finished the Bulb will have the last State set via the script. For
more information see the Light Sequencer Object (link)

Script Example:

MyEmReel.State = BulbOn

<String> .BlinkPattern = { "<Blink Pattern>" }


Defines a special Blink Pattern the Bulb will follow when the State has been set to
BulbBlink. This pattern is defined out of a string made up out of 0s (turn bulb Off) and 1s
(turn bulb On). At least 2 pattern states must be given (i.e., "10", "01", "11" or "00") with a
maximum of 32 individual states. If the Bulb is currently following another Blink Pattern,
setting this will immediately change the blink pattern over to the new one.

Script Example:

MyEmReel.BlinkPattern = "10"

or:

MyEmReel.BlinkPattern = "1101110"

<Integer> .BlinkInterval = { Period in Milliseconds }


Allows you to set the Period (in milliseconds) Future Pinball takes to process each state
within a Blink Pattern. When the Blink Pattern has been fully processed it will begin again
from the start and keep on repeating while ever .State is set to BulbBlink. The Interval
must be at least 25 milliseconds. If the Bulb is currently Blinking, setting this will reset the
current Blink timer to the new value specified.

Script Example:

MyEmReel.BlinkInterval = 100

or to make a bulb flash on and off every 150 milliseconds;


MyEmReel.State = BulbBlink
MyEmReel.BlinkPattern = "10"
MyEmReel.BlinkInterval = 150

<Boolean> .Lit (READ ONLY)


This variable (or flag) is set when the bulb is actually lit either by it being permanently
turned ON or the Blink Pattern has turned ON the light for the current interval. This allows
you to test if the bulb is physically ON even if it's following a Blink Pattern.

Script Example:

If (MyEmReel.Lit = TRUE) Then


' .. Do Something ..
End If

.ResetToZero ()
This method will reset the EM Reel device so all the digit reels display '0'. This is done in
an animated fashion when all the numbers will increment (and roll over) back to 0. This
Method should be called when ever the player starts a new game and you need to reset
the Reel. This also sets the Value property to 0.

Script Example:

MyEmReel.ResetToZero()

.AddValue ( <Integer> Value )


This Command will add (or subtract) the specified value from the EM Reel. As the value
changes, the individual reels will spin around so the score display will match the adjusted
value. If the Value is Negative, the reel(s) will spin backwards. It is best not to have
positive and negative adjustments on the same reel as this is not true pinball behavior.
Older games did have reels that counted backwards hence the reason this functionality
has been put into Future Pinball. This also adjusts the Value property by the value
specified.

Script Example:

MyEmReel.AddValue(100)

.SetValue ( <Integer> Value )


This method allows you to set the value of the EM Reel to the specified value instantly.
This will not animate the reel only change over the numbers. This useful so you can set
the Reel to the last known players score which is saved when the player exits the table.
For more information on script variables which are persisted refer to the Global Script
Commands and Variables Chapter (link). Value must be positive. This also sets the Value
property to the value specified.

Script Example:

Sub FuturePinball_BeginPlay()
' initalise the player displays to the last known player score
MyEmReel.SetValue(nvScore1)
' ..Etc..
End Sub

.Set ( <Enumeration> State, <String> BlinkPattern, <Integer>


BlinkInterval )
This method allows you to set the .State, .BlinkPattern and .BlinkInterval properties with
a single command.

State sets the lit state of the bulb. Valid values are BulbOff, BulbOn or BulbBlink.

BlinkPattern allows you to define a special Blink Pattern the Bulb will follow when the
State has been set to BulbBlink. This pattern is defined out of a string made up out of 0s
(turn bulb Off) and 1s (turn bulb On). At least 2 pattern states must be given (i.e., "10",
"01", "11" or "00") with a maximum of 32 individual states. If the Bulb is currently following
another Blink Pattern, setting this will immediately change the blink pattern over to the new
one. If no string is specified, the current pattern in the .BlinkPattern property is not
changed.

BlinkInterval is a positive number and is the time it takes to process each state within the
Blink Pattern. The Interval must be at least 25 milliseconds and if no value is specified, the
current value in the .BlinkInterval property is not changed.

Script Example:

MyEmReel.Set BulbBlink, "10", 150

.FlashForMs ( <Integer> TotalPeriod, <Integer> BlinkInterval,


<Enumeration> EndBulbState )

This method allows you to flash (turn the Bulb On and then Off again) the Bulb for a
number of milliseconds and then set the Bulb state to a defined value when that time has
elapsed. This effect is commonly used in Pinball when enabling a Bulb due to the player
completing a sequence on the table via following the game rules (though in the case of the
bumper object this isn't likely) as it is more noticeable than just turning on a bulb.

TotalTime is a positive number and is the time in milliseconds to flash to the bulb for.
Ideally it should be divisible by the BlinkInterval parameter for a totally smooth transition
to the EndBulbState parameter.

BlinkInterval is a positive number and is the time to hold each Flash state for. The Interval
must be at least 25 milliseconds and if no value is specified, 75 ms is used.

EndBulbState defines the state of the bulb after the TotalPeriod has expired. If the Bulbs
.State is read which the bulb is flashing for the desired interval, the it will return the
EndBulbState.

This command destroys the contents of the .BlinkInterval and .BlinkPattern


properties.

Script Example:

' flash the bulb for a second and turn it on


MyEmReel.FlashForMs 1000, 100, BulbOn

Or to flash the Bulb and return it to its original state:

MyEmReel.FlashForMs 1500, , MyEmReel.State

The EM Reel object doesn't have any Events which it can call via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: HUD Electro-Mechanical Scoring Reel

Electro-Mechanical Scoring Reels (or EM Reel for short) were the primary scoring display
device for Electro-Mechanical Pinballs. They work very similar to a car odometer where each
individual reel rotates around incrementing its value and when it needs to reset from 9 to 0
again, it will increment the next reel (and so on).

Scoring Reels were also backlit to allow the machine to light the current players score. Because
of this the EM Reel device is lit in the same fashion as Bulbs, Bumpers, Flashers, etc.

The HUD Em Reel works exactly the same as the normal Em Reel but is drawn on the HUD
instead of the Translite.

(All available types and colour combinations may not be shown)

When you create a EM Reel on your table, the object will be drawn onto the current workspace. Reels
can be only be placed on the Translite workspace.

Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to your
object.

Number Style
Allows you to define the style of numbering used on the reels. You may select
one of the following types:

ReelStyle1 ReelStyle2 ReelStyle3

Render Face Plate

If enabled (Ticked ), then the face plate of the EM Reel device is rendered.
This will give a nice clean edge to the Reel but there may be cases (such as
trying to match Existing Scoring Graphics) where this is not required.

Face Colour

Defines the colour of the Face Plate (if it is rendered). It is best never to use
Full Strength colours (i.e., where either the Red, Green or Blue components
are at their Limits) as this will adversely affect how the object is Shaded by the
Lighting system. For more information on the use of Colour refer to the
Special Graphic Processing chapter (link).

Lit Colour

Defines the colour of the Reels when the Bulbs within the EM Reel
Mechanism have been turned ON (more of this below). It is best never to use
Full Strength colours (i.e., where either the Red, Green or Blue components
are at their Limits) as this will adversely affect how the object is Shaded by the
Lighting system. For more information on the use of Colour refer to the
Special Graphic Processing chapter (link).

Auto Set Unlit Colour to 33%

If enabled (Ticked ), then Future Pinball will automatically set the Unlit colour
to 33% brightness of the Lit colour when ever the Lit colour is changed. On
older electro-mechanical games the light change is usually less dramatic so
you may wish to disable this option and set the Unlit colour so it shows less
colour change from the Lit colour.

Unlit Colour

Defines the colour of the Reels when the Bulbs within the EM Reel
Mechanism has been turned OFF (more of this below). The same colour
guidelines should be followed as described by the Lit Colour.

Defines the X location (based in pixels from the top left hand corner of the
HUD Screen) of the object on the Table.

Y
Defines the Y location (based in pixels from the top left hand corner of the
HUD Screen) of the object on the Table.

Reels

This field allows you to nominate how many individual reel digits will make up
the reel display. Valid values range from 1 to 7 reels.

Reel Width

Defines the Width of each individual Reel in pixels. Valid values range from 10
to 128 millimeters.

Reel Height

Defines the Height of each individual Reel in pixels. Valid values range from
10 to 128 millimeters.

Reel Spacing

Defines the width of the gap between Reels. If there is only 1 Reel, this field is
ignored. Valid values range from 1 to 40 pixels.

Face Spacing

Defines the width of the Face Plate which sits around all of the reels. Valid
values range from 1 to 40 pixels.

Spin Speed

Defines how fast each Reel will Spin (to the next number). You can select
from one of the following speeds:

Speed Description
Slowest
Slow
Medium (Default)
Fast
Fastest
Instant The Reel will instantly click over to the next number.

State

This field allows you to set the Backlit Bulb State. Each EM Reel has several
bulbs built into it which when used will illuminate the Numbers the Lit / Unlit
colours (depending on the state). The Bulbs (like a real pinball) takes around
30 milliseconds to go to full brightness and thus the Numbers will gradually
Brighten or Dim.

You can select it to one of the following states:

Rubber Size Metric (Millimeters)


Turns Off the Bulb in the EM Reel. The Reel Digits will be
BulbOff
drawn in the UnLit colour.
BulbOn Turns On the Bulb in the EM Reel. The Reel Digits will be
drawn in the Lit colour.
The Bulb will follow 'pattern' defined by the Blink Pattern
BulbBlink
field.

Blink Pattern

Defines a special Blink Pattern the Bulb will follow when the State has been
set to BulbBlink. This pattern is defined out of a string made up out of 0s
(turn bulb Off) and 1s (turn bulb On). At least 2 pattern states must be given
(i.e., 10, 01, 11 or 00) with a maximum of 32 individual states. Blink Patterns
allow for some very creative light changes to be made especially which using
in conjunction if other objects which contain a light bulb (Lights, Flashers,
Bumpers, etc.)

Blink Interval

Defines the Period (in milliseconds) Future Pinball takes to process each state
within a Blink Pattern. When the Blink Pattern has been fully processed it will
begin again from the start and keep on repeating while ever the State is
BulbBlink. The Interval must be at least 25 milliseconds.

Spin Sound

This field allows you to automate playing of a sound effect when a reel spins
around to the next number. Sounds are imported into the Table via the Sound
Manager (link). This functionality removes the need for a PlaySound (link)
script command.

This Section describes the object and how it can be accessed and controlled via the script at run-
time. Note that you access the object via the name given in the Name property field.

<Integer> .Value (READ ONLY)


This property allows you to read in the current value displayed on the EM Reel object.

Script Example:

Dim MyScore
MyScore = MyHudReel.Value

The Reel will have a value of 0 when the table is first played.

<Enumeration> .State = { BulbOff | BulbOn | BulbBlink }


This field allows you to set the Reel's Bulb State. Valid values are BulbOff, BulbOn or
BulbBlink. If the .State has been set to BulbBlink, the bulb will immediately start
following the Pattern defined via the .BlinkPattern property.
If the Light Sequencer is currently running on this object, changing the State will
not take effect until the Light Sequencer has finished running. When the
Sequencer has finished the Bulb will have the last State set via the script. For
more information see the Light Sequencer Object (link)

Script Example:

MyHudReel.State = BulbOn

<String> .BlinkPattern = { "<Blink Pattern>" }


Defines a special Blink Pattern the Bulb will follow when the State has been set to
BulbBlink. This pattern is defined out of a string made up out of 0s (turn bulb Off) and 1s
(turn bulb On). At least 2 pattern states must be given (i.e., "10", "01", "11" or "00") with a
maximum of 32 individual states. If the Bulb is currently following another Blink Pattern,
setting this will immediately change the blink pattern over to the new one.

Script Example:

MyHudReel.BlinkPattern = "10"

or:

MyHudReel.BlinkPattern = "1101110"

<Integer> .BlinkInterval = { Period in Milliseconds }


Allows you to set the Period (in milliseconds) Future Pinball takes to process each state
within a Blink Pattern. When the Blink Pattern has been fully processed it will begin again
from the start and keep on repeating while ever .State is set to BulbBlink. The Interval
must be at least 25 milliseconds. If the Bulb is currently Blinking, setting this will reset the
current Blink timer to the new value specified.

Script Example:

MyHudReel.BlinkInterval = 100

or to make a bulb flash on and off every 150 milliseconds;

MyHudReel.State = BulbBlink
MyHudReel.BlinkPattern = "10"
MyHudReel.BlinkInterval = 150
<Boolean> .Lit (READ ONLY)
This variable (or flag) is set when the bulb is actually lit either by it being permanently
turned ON or the Blink Pattern has turned ON the light for the current interval. This allows
you to test if the bulb is physically ON even if it's following a Blink Pattern.

Script Example:

If (MyHudReel.Lit = TRUE) Then


' .. Do Something ..
End If

.ResetToZero ()
This method will reset the EM Reel device so all the digit reels display '0'. This is done in
an animated fashion when all the numbers will increment (and roll over) back to 0. This
Method should be called when ever the player starts a new game and you need to reset
the Reel. This also sets the Value property to 0.

Script Example:

MyHudReel.ResetToZero()

.AddValue ( <Integer> Value )


This Command will add (or subtract) the specified value from the EM Reel. As the value
changes, the individual reels will spin around so the score display will match the adjusted
value. If the Value is Negative, the reel(s) will spin backwards. It is best not to have
positive and negative adjustments on the same reel as this is not true pinball behavior.
Older games did have reels that counted backwards hence the reason this functionality
has been put into Future Pinball. This also adjusts the Value property by the value
specified.

Script Example:

MyHudReel.AddValue(100)

.SetValue ( <Integer> Value )


This method allows you to set the value of the EM Reel to the specified value instantly.
This will not animate the reel only change over the numbers. This useful so you can set
the Reel to the last known players score which is saved when the player exits the table.
For more information on script variables which are persisted refer to the Global Script
Commands and Variables Chapter (link). Value must be positive. This also sets the Value
property to the value specified.

Script Example:

Sub FuturePinball_BeginPlay()
' initalise the player displays to the last known player score
MyHudReel.SetValue(nvScore1)
' ..Etc..
End Sub

.Set ( <Enumeration> State, <String> BlinkPattern, <Integer>


BlinkInterval )
This method allows you to set the .State, .BlinkPattern and .BlinkInterval properties with
a single command.

State sets the lit state of the bulb. Valid values are BulbOff, BulbOn or BulbBlink.

BlinkPattern allows you to define a special Blink Pattern the Bulb will follow when the
State has been set to BulbBlink. This pattern is defined out of a string made up out of 0s
(turn bulb Off) and 1s (turn bulb On). At least 2 pattern states must be given (i.e., "10",
"01", "11" or "00") with a maximum of 32 individual states. If the Bulb is currently following
another Blink Pattern, setting this will immediately change the blink pattern over to the new
one. If no string is specified, the current pattern in the .BlinkPattern property is not
changed.

BlinkInterval is a positive number and is the time it takes to process each state within the
Blink Pattern. The Interval must be at least 25 milliseconds and if no value is specified, the
current value in the .BlinkInterval property is not changed.

Script Example:

MyHudReel.Set BulbBlink, "10", 150

.FlashForMs ( <Integer> TotalPeriod, <Integer> BlinkInterval,


<Enumeration> EndBulbState )

This method allows you to flash (turn the Bulb On and then Off again) the Bulb for a
number of milliseconds and then set the Bulb state to a defined value when that time has
elapsed. This effect is commonly used in Pinball when enabling a Bulb due to the player
completing a sequence on the table via following the game rules (though in the case of the
bumper object this isn't likely) as it is more noticeable than just turning on a bulb.

TotalTime is a positive number and is the time in milliseconds to flash to the bulb for.
Ideally it should be divisible by the BlinkInterval parameter for a totally smooth transition
to the EndBulbState parameter.

BlinkInterval is a positive number and is the time to hold each Flash state for. The Interval
must be at least 25 milliseconds and if no value is specified, 75 ms is used.
EndBulbState defines the state of the bulb after the TotalPeriod has expired. If the Bulbs
.State is read which the bulb is flashing for the desired interval, the it will return the
EndBulbState.

This command destroys the contents of the .BlinkInterval and .BlinkPattern


properties.

Script Example:

' flash the bulb for a second and turn it on


MyHudReel.FlashForMs 1000, 100, BulbOn

Or to flash the Bulb and return it to its original state:

MyHudReel.FlashForMs 1500, , MyHudReel.State

.FadeOut()
This method will fade out the Em Reel until it is not visible anymore. If the Hud Em Reel
has already been faded out then this command will have no effect.

Script Example:

MyHudReel.FadeOut()

.FadeIn()
This method will fade in the Em Reel until it is fully visible. If the Em Reel is already visible
then this command will have no effect.

Script Example:

MyHudReel.FadeIn()

The EM Reel object doesn't have any Events which it can call via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Gas Discharge Segment Displays

Gas Discharge Segment Displays where used on Many Pinballs and replaced the older Electro-
Mechanical Scoring Reels. These displays generally showed the players score, credits, balls
remaining, etc. Segments changed over the years the last used displays allowed to animation
of any Text/Numbers on the display.

Segment Displays in Future Pinball are very powerful and thus more complex to control though
they can work in a more simpler mode much like how the Electro-Mechanical Scoring Reels
work (well exactly). Lot of different types of effects (scrolling, fades, blinking text) can be
achieved. This Display also allows for custom character shapes to be created allowing you
even more control on what is displayed and how.

The Segment Display device also allows you to queue up screens to display with a transitional
effect to put the screen on the display.

(All available types and colour combinations may not be shown)

When you create a Segment Display on your table, the object will be drawn onto the current workspace.
Segments can be only be placed on both the Playfield and Translite workspaces.

Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to your
object.

Segment Style

Allows you to define the style of segments (and how they are lit) used for the
display. You may select one of the following types;
Style Description

Alpha Numeric Displays are built up out of 16 individual


AlphaNumeric segments
which allows for very good Letters and Numbers to be
displayed.

This style of display has separate '.' (period) and ','


(comma) segments.

A style used in a lot of Gottlieb ® and Hankin ® Pinball


Games. Also
Gottlieb displays Letters but with less detail than the Alphanumeric
Style.

This style of display has only a single ';' (semicolon)


segment which
is lit for '.' (period), ',' (comma) and ';' (semicolon)
characters

Clock style for Numbers only.


Clock
This style of display has only a single ',' (comma) segment
which
is lit for '.' (period), ',' (comma) and ';' (semicolon)
characters

Lit Colour

Defines the colour of the Segments when they are Lit. Though the colour will
brighten as more elements are lit around it.

Defines the X location (based in millimeters from the top left hand corner of
the translite) of the object on the Table.

Defines the Y location (again in millimeters from the top left hand corner of the
translite) of the object on the Table.
Surface

Defines what Surface (or Wall) the object is attached to if the Segment
Display is placed onto the Playfield. If no Surface is specified, the object is
assumed to be attached to the Main Playfield. For more information on this
refer to the Surface Object (link). If the Segment Display has been placed
onto the Translite, this field is not displayed.

Digits

This field allows you to designate how many individual segments will make up
the segment display. Valid values range from 1 to 32.

Size (Width)

Defines the Width of each individual segment in millimeters. Valid values


range from 10 to 128 millimeters. The Height of the Segment is calculated
from the width to ensure the correct aspect ratio.

Spacing

Defines the width of the gap between Segments. If there is only 1 Segment,
this field is ignored. Valid values range from 1 to 40 millimeters.

Face Spacing

Defines the width of the Face Plate which sits around all of the Segments.
Valid values range from 1 to 40 millimeters. The Face Plate (as well as the
spacing between the segments) is always Black in colour.

Alignment

Allows you to define how text and numbers are aligned on the display. You
can select one of the following:

Alignment Description
AlignLeft Any Text / Numbers displayed will be Left aligned.
AlignCenter Any Text / Numbers displayed will be Center aligned.
AlignRight (Default) Any Text / Numbers displayed will be Right aligned.

Update Interval

Defines the update interval (in Milliseconds) of the segment device. The
Lower the value, the more the display device will be updated. this has the
effect to making any scrolling effects look smoother as the scroll will be faster
(with a lower value). In general you will not have to play with this value. The
value must be at least 5 milliseconds. Setting this value may also effect (and
adjust) the Slow and Fast Blink Speeds if you set it to a value larger than
either of those values.

Generally you will not need to change this value unless you wish to slow down
the display effects.

Slow Blink Speed


Defines the speed on which text marked as Blinking (slowly) will blink at. This
value must be at least double that of the Update Interval and is specified in
Milliseconds

Fast Blink Speed

Defines the speed on which text marked as Blinking (fast) will blink at. This
value must be at least that of the Update Interval and is specified in
Milliseconds.

Boredom Delay

Defines the Number of Milliseconds which must pass on an idle display before
Future Pinball will cycle a boredom effect over the display. These boredom
effects will animate the display without actually changing the contents of
what's being displayed. The type of effects that can be performed are
described below. The Value must be positive. If the value is equal to 0, no
boredom effect will happen. The default effect is sbeCycleDown.

This Section describes the object and how it can be accessed and controlled via the script at run-
time. Note that you access the object via the name given in the Name property field.

The Segment Display device is a very complex object (if you wish to use it fully).
It is advised that you also look at the Gas Segment Display Example table
included with Future Pinball.

The Segment Display Device has 2 modes of operation (though they can be used at the same
time). A Simple Number only method which works exactly how the EM Reel device works which is
simple to use and will only display numbers (i.e., Scores, Credits, etc.) on the Display. The Second
method in controlling the Segment Display is more screen driven where you specify individual
screens (or lines of text, which are queued up) and they are displayed in turn onto the device using
one of the built in transition methods (such as scrolling, etc.)

Numbers or Text is displayed onto the segments the best way possible using the available
segments to make up the shapes of the Numbers and Letters. Obviously the more individual
segments the display has the better each character shape will look. Future Pinball also allows you
to redefine the characters to you can implement your own custom shapes.

If the Number or Text you wish to display is shorter than the number of digits the display has, it will
align what you wish to display using the .Alignment property. If what you wish to display is longer
than the number of digits on the display, it will only display what it can (n digits).

<Integer> .Value (READ ONLY) ** SIMPLE METHOD **


This property allows you to read in the current value displayed on the Segment object.
This command will only work if you use the .ResetToZero, .AddValue and .SetValue
methods which help simulate a simple segment display without having to queue up
displays.
Script Example:

Dim MyScore
MyScore = MySegment.Value

The Segment will have an internal value of 0 when the table is first played though this is
not automatically displayed. If you wish to use the Segment Display object in the Simpler
Number only way, you will need to issue a .SetValue command at startup to initialise the
display.

<String> .Text = { "String to Display" } ** SIMPLE METHOD **


This property allows you to display a string of text (which can also contain numbers) onto
the Segment Display. If there is any screens queued up via the .QueueText() method, the
queue is flushed and will no longer be processed.

Script Example:

MySegment.Text = "SCORE " & FormatNumber(nvScore1, 0, -1, 0, -1)

Future Pinball will combine '.' (period), ',' (comma) and ';' (semicolon) characters into
current segment digit. for example;

MySegment.Text = "1,234,567"

Will display

<Integer> .UpdateInterval = { Period in Milliseconds }


This property allows you to change how fast the display is updated. The Lower the value,
the more the display device will be updated. this has the effect to making any scrolling
effects look smoother as the scroll will be faster (with a lower value). In general you will not
have to play with this value. The value must be at least 5 milliseconds. Setting this value
may also effect (and adjust) the Slow and Fast Blink Speeds if you set it to a value larger
than either of those values.

Script Example:

MySegment.UpdateInterval = 10
<Integer> .SlowBlinkSpeed = { Period in Milliseconds }
This property allows you to change how fast (or slow) text will blink (flash) on the display
when using the seBlink and seBlinkMask effects (more of this below). The value
specified (in milliseconds) must be at least double the .UpdateInterval value and
preferably a multiple of it. Setting this to a value less than double the update interval will
set it to be double the update interval.

Script Example:

MySegment.SlowBlinkSpeed = 100

<Integer> .FastBlinkSpeed = { Period in Milliseconds }


This property allows you to change how fast (or slow) text will blink (flash) on the display
when using the seBlinkFast and seBlinkFastMask effects (more of this below). The
value specified (in milliseconds) must be at least the .UpdateInterval value and preferably
a multiple of it. Setting this to a value less than the update interval will set it to be the
update interval.

Script Example:

MySegment.FastBlinkSpeed = 50

<Integer> .BoredomDelay = { Period in Milliseconds }


This property allows you to change the Number of Milliseconds which must pass on an idle
display before Future Pinball will cycle a boredom effect over the display. These boredom
effects will animate the display without actually changing the contents of what's being
displayed. The type of effects that can be performed are described below. The Value must
be positive. If the value is equal to 0, no boredom effect will happen.

Script Example:

' Set the Boredom effect to happen after 3 seconds of idle activ
MySegment.BoredomDeley = 3000

<Boolean> .IsEmpty (READ ONLY)


Will return TRUE or FALSE depending if the Display Queue is empty (refer to the
.QueueText method for more information).
Script Example..

' If the display queue is empty


If (MySegment.IsEmpty = True) Then
' .. do something ..
End If

.ResetToZero () ** SIMPLE METHOD **


This method will set the Segment Display so it displays '0'. This Method should be called
when ever the player starts a new game and you need to reset the display. This also sets
the Value property to 0.

Script Example:

MySegment.ResetToZero()

.AddValue ( <Integer> Value ) ** SIMPLE METHOD **


This Command will add (or subtract) the specified value from the Segment Display. This
value can be either positive or negative. This also adjusts the Value property by the value
specified.

Script Example:

MySegment.AddValue(100)

.SetValue ( <Integer> Value ) ** SIMPLE METHOD **


This method allows you to set the value of the Display to the specified value instantly. This
useful so you can set the Display to the last known players score which is saved when the
player exits the table. For more information on script variables which are persisted refer to
the Global Script Commands and Variables Chapter (link). Value must be positive. This
also sets the Value property to the value specified.

Script Example:

Sub FuturePinball_BeginPlay()
' initalise the player displays to the last known player score
MySegment.SetValue(nvScore1)
' ..Etc..
End Sub
.QueueText ( <String> Text, <Enumeration> Effect, <Integer> TimeOn,
<Integer> StartDelay, <Boolean> FlushQueue, <String> SoundEffect )

This method allows multiple text lines (called screens) to be queued up and displayed in
turn. This is where the flexibility of the Segment Display device really shows off as you can
add in several screens to let the player know he has done something without actually
having to keep track when each screen has finished.

Text
Specifies the Text to Display.

Effect
The type of effect used to display the screen (or text) onto the display. This field must

Generally the Scroll Effects will scroll any existing data off the screen, while the Wipe
screen with the new one.

Effect
Description

seNone (Default)
The Text is instantly displayed.

seScrollLeft The Text is scrolled onto the display starting from the right most
towards the left. Any existing text is scrolled as well so effectively
while the new text scrolls on.
seScrollLeftOver The Text is scrolled onto the display starting from the right most
towards the left. It will appear to scroll over any existing text.
seScrollRight The Text is scrolled onto the display starting from the left most d
the right. Any existing text is scrolled as well so effectively the ol
the new text scrolls on.
seScrollRightOver The Text is scrolled onto the display starting from the left most d
the right. It will appear to scroll over any existing text.
seScrollUp The Text is scrolled upward though each horizontal line of the se
text is scrolled as well so effectively the old text scrolls off while t
seScrollUpOver The Text is scrolled upward though each horizontal line of the se
old text.
seScrollDown The Text is scrolled downwards though each horizontal line of th
existing text is scrolled as well so effectively the old text scrolls o
scrolls on.
seScrollDownOver The Text is scrolled downwards though each horizontal line of th
the old text.
seScrollOut The Text will appear to scroll outwards (both left and right) from t
display.
seScrollIn The Text will scroll inwards from both the left and right most digit
the middle segment digit.
seBlink
The entire Segment Display Text will blink (turn On and Off) for t
in the TimeOn parameter. The Rate at which it blinks is defined
.SlowBlinkSpeed property.
seBlinkFast The entire Segment Display Text will blink (turn On and Off) for t
in the TimeOn parameter. The Rate at which it blinks is defined
.FastBlinkSpeed property.
seBlinkMask
The Text will Blink where there is a non space character without
text where there is a space. This effect should be used after sett
into the display and then specifying which part of the text you wis
space characters). The specified text will blink for the time period
TimeOn parameter. The Rate at which it blinks is defined via the
property.

Script Example:

' Display "PLAYER ONE" on the display and


MySegment.QueueText "PLAYER O
MySegment.QueueText " ONE", seBli

seBlinkMaskFast Exactly the same as seBlinkMask but will blink the Text mask are
the .FastBlinkSpeed property.
seWipeLeft Each Segment Digit will be replaced one at a time with the new t
existing old text) starting from the rightmost digit and moving tow
seWipeRight Each Segment Digit will be replaced one at a time with the new t
existing old text) starting from the leftmost digit and moving towa
seWipeStarLeft A Star Shaped Character will scroll over the Display starting from
moving to the left drawing the Text line. On The Gottlieb and Clo
will be a Cross.
seWipeStarRight A Star Shaped Character will scroll over the Display starting from
moving to the right drawing the Text line. On The Gottlieb and C
this will be a Cross.
seWipeRadarLeft
The Text will be wiped onto the display starting from the rightmos
the left via a long cursor (which length is 1/3rd of the number of d
vertical segment lines lit.

seWipeRadarRight The Text will be wiped onto the display starting from the leftmost
right via a long cursor (which length is 1/3rd of the number of dig
vertical segment lines lit.
seWipeRndLeft The Text will be wiped onto the display starting from the rightmos
the left via a long cursor (which length is 1/3rd of the number of d
turns on and off segments, leaving the correct segments lit.
seWipeRndRight The Text will be wiped onto the display starting from the leftmost
right via a long cursor (which length is 1/3rd of the number of dig
turns on and off segments, leaving the correct segments lit.
seWipeCursorLeft
The Text will be wiped onto the display starting from the leftmost
right via a custom defined cursor. To Define a custom cursor for
.SetLeftCursor() method.

There is no initial cursor defined for the Segment Display.


seWipeCursorRight The Text will be wiped onto the display starting from the rightmos
the left via a custom defined cursor. To Define a custom cursor fo
.SetRightCursor() method.

There is no initial cursor defined for the Segment Display.

seWipeUp The Text is wiped upward though each horizontal line of the segm
seWipeDown The Text is wiped downwards though each horizontal line of the
seWipeBarUp The Text is wiped upward though each horizontal line of the segm
(where all horizontal segments are lit). As the Bar moves upward
drawn.
seWipeBarDown The Text is wiped downwards though each horizontal line of the
bar (where all horizontal segments are lit). As the Bar moves dow
be drawn.
seWipeRndUp The Text is wiped upward though each horizontal line of the segm
bar effect which randomly turns on and off segments, leaving the
As the Bar moves upwards, the text will be drawn.
seWipeRndDown The Text is wiped downwards though each horizontal line of the
random bar effect which randomly turns on and off segments, lea
segments lit. As the Bar moves downwards, the text will be draw
seWipeOut The Text will wipe out starting from the middle of the display and
towards the edges.
seWipeIn The Text will wipe in starting from both the left and right edges of
working its way in towards the middle.
seRandomEffect Will pick one of the above effects randomly as use that as the tra
not pick the seBonusTrailin effect.
seBonusTrailIn
This effect is a commonly used effect on Pinball as the machine
Bonus. It takes a string of 2 characters and draws each one at e
moving inwards. The characters will remain on the screen as it m
the effect reaches the middle of the display, the digits will be turn
outside back towards the middle) leaving only the middle 2 digits

Script Example:

' Do the Bonus Display


MySegment.QueueText "2X", seBonusTr
MySegment.QueueText "3X", seBonusTr
MySegment.QueueText "4X", seBonusTra

TimeOn
Defines the time in milliseconds this screen is held for before moving to the next disp
time also included the time to process the Effect. If the Effect is a Blink Effect (seBli
seBlinkFast, seBlinkMaskFast), this is the time the text blinks for. For Best Results
multiple of the .UpdateInterval property. If no value is specified, the text will immedia
the next (if any) display in the queue will be processed.

StartDelay Allows you to delay the processing of this Effect for the value multiplied by the .Upda
(i.e., If you specify 5 and the .UpdateInterval is 10, it will wait 50ms before starting th
very useful for syncing up effects which run over "Multiple" Segment Display Values.
(which scroll one segment digit per .UpdateInterval), this essentially delays 'n' many
value is specified, it will default to 0.
FlushQueue
Instructs the display driver to flush the queue if this is the LAST display in the queue.
or FALSE. Generally during a game you will always specify TRUE as you will want to
to the default score screen when your effect screen has finished. During the Attract m
want it to be FALSE as you will want the attract
mode displays to automatically restart when they have finished. this allows you to on
once and not have to worry about the driver running out of things to do. If no value is
to be TRUE.

If this display is the last one in the queue (when it is processed, not when you put it in
the _Empty() script event. You can use this event to put back any default screens on
displaying the score)

Sound The Sound file to play when this screen is first processed. This allows corresponding
Effect with the appropriate display (i.e., a bonus sound or something). Sounds are imported
Sound Manager (link). If this value is not specified, no sound effect will play.

Script Example:

MySegment.QueueText "GET READY", seNone, 2000


MySegment.QueueText "PLAYER ONE", seScrollUp, 2000

For more Script examples, refer to the Segment Display example table (downloadable
from the Future Pinball site).

.FlushQueue ()
This method will flush (empty) the text queue (if any) so any screens that are still to be
processed are ignored. Note that this will not call the _Empty() script event as you are
manually emptying the queue so it's not finishing due to all the screens being processed.

Script Example:

MySegment.FlushQueue()

.BoredomEffect ( <Enumeration> Effect, <Integer> EffectRate, <Integer>


CycleTime )
This method allows you to define the "boredom" effect which will animate an idle display.
An idle display is a display which hasn't been updated with for a number of milliseconds
(see the .BoredomDelay property). These animations are very quick and just add a little
interaction to the segment display. They will not change the contents of this display with
the exception of animating it.

Effect
The type of effect to animate the display. This field must be one of the
following:

Effect
Description

sbeCycleUp
Each Individual Horizontal Segment Line will momentarily
turn Off for the EffectRate starting at the bottom segment
and working upwards to the top.

sbeCycleDown Each Individual Horizontal Segment Line will momentarily


(default) turn Off for the EffectRate starting at the top segment and
working downwards to the bottom.
sbeCycleLeft Each Segment Digit will momentarily turn Off for the
EffectRate starting at the rightmost digit and working to
the left.
sbeCycleRight Each Segment Digit will momentarily turn Off for the
EffectRate starting at the leftmost digit and working to the
right.
sbeTurnOffUp Each Individual Horizontal Segment Line will be turned Off
(and remain off) starting at the bottom segment line and
working upwards to the top. When All Lines have been
turned off, the display will be restored.
sbeTurnOffDown Each Individual Horizontal Segment Line will be turned Off
(and remain off) starting at the top segment line and
working downwards to the bottom. When All Lines have
been turned off, the display will be restored.
sbeStarLeft A Star Shaped Character will scroll over the Display
starting from the rightmost digit and moving to the left. On
The Gottlieb and Clock segment styles this will be a
Cross.
sbeStarRight A Star Shaped Character will scroll over the Display
starting from the leftmost digit and moving to the right. On
The Gottlieb and Clock segment styles this will be a
Cross.
sbeReplaceLeft The Display will Blank and each Segment Digit will be
restored (at the EffectRate) starting with the rightmost
digit and working left.
sbeReplaceRight The Display will Blank and each Segment Digit will be
restored (at the EffectRate) starting with the rightmost
digit and working left.
sbeFlash The entire display will flash 10 times at the EffectRate.
sbeRandomEffect Each time the Boredom Effect runs it will pick a different
effect each time (Random).
EffectRate
Defines how fast (or slow) the boredom mode animation will run over the
display. The value specified must be at least the same as the current
.UpdateInterval. If no value is specified it will default to 50 milliseconds.

CycleTime Defines the how often the boredom mode animation repeats after the initial
.BoredomDelay period has expired. This lets you say wait 3 seconds before
the boredom mode animation starts and get it to repeat every 2 seconds after
that. If no value is specified, the animation will repeat at the rate set by the
.BoredomDelay parameter.
Script Example:

Sub FuturePinball_BeginPlay()
' initalise the segment display boredom mode, to cycle upwards
' after 3 seconds and repeat every 2 seconds after that
MySegment.BoredomDeley = 3000
MySegment.BoredomEffect sbeCycleUp, 50, 2000
' ..Etc..
End Sub

.SetCharShape ( <Integer> Character, <Integer> SegmentMask )

The SetCharShape command allows you to redefine each


character (a,b,c, etc.) that you can put onto the segment
display. This allows for custom shapes to be created to suit the
theme of your pinball or for animation effects.

Segments Digits are split up into a maximum of 16 definable


leds (it is not possible to re-define the period and comma leds
(or the semicolon led on the Gottlieb and Clock display
types).

This example uses the Alphanumeric display style but the


same led positions are also used for the other segment styles
(if they exist).

If you look at the left illustration you will see the hexadecimal
numbers which are used to create a mask which the segment
display device will use to redefine the specified character.
These numbers can be combined in any fashion to define the
shape you wish.

Character
The Ascii Character code (a number between
0 and 255) of the character you wish to define.
You can find a copy of the Ascii character set
here (link)

SegmentMask Defines the Segments which will be lit when


this character is drawn on the segment
display.

Script Example:

To set up the following example:


You will need the following script:

' redefine abc to look like a cat. with 'a


' 'b'/'c' being the tail (an
MySegment.SetCharShape 97, &H0080 or &H1000 or &H2000 or &H0004
MySegment.SetCharShape 98, &H0100 or &H8000 or &H
MySegment.SetCharShape 99, &H0100 or &H8000 or &H

' set up a little animation to wag the


MySegment.QueueText "ab", seNone,
MySegment.QueueText "ac", seNone,

There is one special character which is defined for the Tilde '~' which can be used as a
back arrow on the Alphanumeric Segment style.

.SetLeftCursor ( <Integer> Data1, <Integer> Data2, <Integer> Data3,


<Integer> Data4, <Integer> Data5, <Integer> Data6 )

This method allows you to define the Left cursor used for the seWipeCursorLeft effect.
This cursor can have a maximum length of 6 digits.

Data1 - Data6 contains the segment mask (as defined by the .SetCharShape method).
Not all values have to specified. If a value is omitted, the cursor will not use that segment
digit (thus making it shorter)

Script Example:

To set up the following example:

You will need the following script:

' set up the left cursor to look like a race car (well sort of :
MySegment.SetLeftCursor 0, &H4A38, &H0532, &H3B62, 0

.SetRightCursor ( <Integer> Data1, <Integer> Data2, <Integer> Data3,


<Integer> Data4, <Integer> Data5, <Integer> Data6 )

This method allows you to define the Right cursor used for the seWipeCursorRight effect.
This cursor can have a maximum length of 6 digits and works much the same way as the
SetLeftCursor method described above.

_Empty ()
This event is called when the Segment Display Device has finished processing the text
queue and the last entry in the queue told the driver to finish up (by setting the
FlushQueue parameter to True in the .QueueText method)

You can use this to revert back to a default screen such has displaying the players score
when any screens you queue up finish being processed.

Script Example:

' The segment queue has finished,


Sub MySegment_Empty()
' revert back to displaying the score
MySegment.Text = "SCORE " & FormatNumber(nvScore1, 0, -1, 0, -1)
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: HUD Gas Discharge Segment Display

Gas Discharge Segment Displays where used on Many Pinballs and replaced the older Electro-
Mechanical Scoring Reels. These displays generally showed the players score, credits, balls
remaining, etc. Segments changed over the years the last used displays allowed to animation
of any Text/Numbers on the display.

Segment Displays in Future Pinball are very powerful and thus more complex to control though
they can work in a more simpler mode much like how the Electro-Mechanical Scoring Reels
work (well exactly). Lot of different types of effects (scrolling, fades, blinking text) can be
achieved. This Display also allows for custom character shapes to be created allowing you
even more control on what is displayed and how.

The Segment Display device also allows you to queue up screens to display with a transitional
effect to put the screen on the display.

The HUD Segment Display works exactly the same as the normal Segment Display but is
drawn on the HUD instead of the Translite.

(All available types and colour combinations may not be shown)

When you create a Segment Display on your table, the object will be drawn onto the current workspace.
Segments can be only be placed on the Translite workspace.

Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to your
object.

Segment Style
Allows you to define the style of segments (and how they are lit) used for the
display. You may select one of the following types;

Style Description

Alpha Numeric Displays are built up out of 16 individual


AlphaNumeric segments
which allows for very good Letters and Numbers to be
displayed.

This style of display has separate '.' (period) and ','


(comma) segments.

A style used in a lot of Gottlieb ® and Hankin ® Pinball


Games. Also
Gottlieb displays Letters but with less detail than the Alphanumeric
Style.

This style of display has only a single ';' (semicolon)


segment which
is lit for '.' (period), ',' (comma) and ';' (semicolon)
characters

Clock style for Numbers only.


Clock
This style of display has only a single ',' (comma) segment
which
is lit for '.' (period), ',' (comma) and ';' (semicolon)
characters

Lit Colour

Defines the colour of the Segments when they are Lit. Though the colour will
brighten as more elements are lit around it.

Defines the X location (based in pixels from the top left hand corner of the
HUD Screen) of the object on the Table.

Y
Defines the Y location (based in pixels from the top left hand corner of the
HUD Screen) of the object on the Table.

Digits

This field allows you to designate how many individual segments will make up
the segment display. Valid values range from 1 to 32.

Size (Width)

Defines the Width of each individual segment in pixels. Valid values range
from 10 to 128 pixels. The Height of the Segment is calculated from the width
to ensure the correct aspect ratio.

Spacing

Defines the width of the gap between Segments. If there is only 1 Segment,
this field is ignored. Valid values range from 1 to 40 pixels.

Face Spacing

Defines the width of the Face Plate which sits around all of the Segments.
Valid values range from 1 to 40 pixels. The Face Plate (as well as the spacing
between the segments) is always Black in colour.

Alignment

Allows you to define how text and numbers are aligned on the display. You
can select one of the following:

Alignment Description
AlignLeft Any Text / Numbers displayed will be Left aligned.
AlignCenter Any Text / Numbers displayed will be Center aligned.
AlignRight (Default) Any Text / Numbers displayed will be Right aligned.

Update Interval

Defines the update interval (in Milliseconds) of the segment device. The
Lower the value, the more the display device will be updated. this has the
effect to making any scrolling effects look smoother as the scroll will be faster
(with a lower value). In general you will not have to play with this value. The
value must be at least 5 milliseconds. Setting this value may also effect (and
adjust) the Slow and Fast Blink Speeds if you set it to a value larger than
either of those values.

Generally you will not need to change this value unless you wish to slow down
the display effects.

Slow Blink Speed

Defines the speed on which text marked as Blinking (slowly) will blink at. This
value must be at least double that of the Update Interval and is specified in
Milliseconds

Fast Blink Speed


Defines the speed on which text marked as Blinking (fast) will blink at. This
value must be at least that of the Update Interval and is specified in
Milliseconds.

Boredom Delay

Defines the Number of Milliseconds which must pass on an idle display before
Future Pinball will cycle a boredom effect over the display. These boredom
effects will animate the display without actually changing the contents of
what's being displayed. The type of effects that can be performed are
described below. The Value must be positive. If the value is equal to 0, no
boredom effect will happen. The default effect is sbeCycleDown.

This Section describes the object and how it can be accessed and controlled via the script at run-
time. Note that you access the object via the name given in the Name property field.

The Segment Display device is a very complex object (if you wish to use it fully).
It is advised that you also look at the Gas Segment Display Example table
included with Future Pinball.

The Segment Display Device has 2 modes of operation (though they can be used at the same
time). A Simple Number only method which works exactly how the EM Reel device works which is
simple to use and will only display numbers (i.e., Scores, Credits, etc.) on the Display. The Second
method in controlling the Segment Display is more screen driven where you specify individual
screens (or lines of text, which are queued up) and they are displayed in turn onto the device using
one of the built in transition methods (such as scrolling, etc.)

Numbers or Text is displayed onto the segments the best way possible using the available
segments to make up the shapes of the Numbers and Letters. Obviously the more individual
segments the display has the better each character shape will look. Future Pinball also allows you
to redefine the characters to you can implement your own custom shapes.

If the Number or Text you wish to display is shorter than the number of digits the display has, it will
align what you wish to display using the .Alignment property. If what you wish to display is longer
than the number of digits on the display, it will only display what it can (n digits).

<Integer> .Value (READ ONLY) ** SIMPLE METHOD **


This property allows you to read in the current value displayed on the Segment object.
This command will only work if you use the .ResetToZero, .AddValue and .SetValue
methods which help simulate a simple segment display without having to queue up
displays.

Script Example:

Dim MyScore
MyScore = MyHudSeg.Value
The Segment will have an internal value of 0 when the table is first played though this is
not automatically displayed. If you wish to use the Segment Display object in the Simpler
Number only way, you will need to issue a .SetValue command at startup to initialise the
display.

<String> .Text = { "String to Display" } ** SIMPLE METHOD **


This property allows you to display a string of text (which can also contain numbers) onto
the Segment Display. If there is any screens queued up via the .QueueText() method, the
queue is flushed and will no longer be processed.

Script Example:

MyHudSeg.Text = "SCORE " & FormatNumber(nvScore1, 0, -1, 0, -1)

Future Pinball will combine '.' (period), ',' (comma) and ';' (semicolon) characters into
current segment digit. for example;

MyHudSeg.Text = "1,234,567"

Will display

<Integer> .UpdateInterval = { Period in Milliseconds }


This property allows you to change how fast the display is updated. The Lower the value,
the more the display device will be updated. this has the effect to making any scrolling
effects look smoother as the scroll will be faster (with a lower value). In general you will not
have to play with this value. The value must be at least 5 milliseconds. Setting this value
may also effect (and adjust) the Slow and Fast Blink Speeds if you set it to a value larger
than either of those values.

Script Example:

MyHudSeg.UpdateInterval = 10

<Integer> .SlowBlinkSpeed = { Period in Milliseconds }


This property allows you to change how fast (or slow) text will blink (flash) on the display
when using the seBlink and seBlinkMask effects (more of this below). The value
specified (in milliseconds) must be at least double the .UpdateInterval value and
preferably a multiple of it. Setting this to a value less than double the update interval will
set it to be double the update interval.
Script Example:

MyHudSeg.SlowBlinkSpeed = 100

<Integer> .FastBlinkSpeed = { Period in Milliseconds }


This property allows you to change how fast (or slow) text will blink (flash) on the display
when using the seBlinkFast and seBlinkFastMask effects (more of this below). The
value specified (in milliseconds) must be at least the .UpdateInterval value and preferably
a multiple of it. Setting this to a value less than the update interval will set it to be the
update interval.

Script Example:

MyHudSeg.FastBlinkSpeed = 50

<Integer> .BoredomDelay = { Period in Milliseconds }


This property allows you to change the Number of Milliseconds which must pass on an idle
display before Future Pinball will cycle a boredom effect over the display. These boredom
effects will animate the display without actually changing the contents of what's being
displayed. The type of effects that can be performed are described below. The Value must
be positive. If the value is equal to 0, no boredom effect will happen.

Script Example:

' Set the Boredom effect to happen after 3 seconds of idle activ
MyHudSeg.BoredomDeley = 3000

<Boolean> .IsEmpty (READ ONLY)


Will return TRUE or FALSE depending if the Display Queue is empty (refer to the
.QueueText method for more information).

Script Example..

' If the display queue is empty


If (MyHudSeg.IsEmpty = True) Then
' .. do something ..
End If
.ResetToZero () ** SIMPLE METHOD **
This method will set the Segment Display so it displays '0'. This Method should be called
when ever the player starts a new game and you need to reset the display. This also sets
the Value property to 0.

Script Example:

MyHudSeg.ResetToZero()

.AddValue ( <Integer> Value ) ** SIMPLE METHOD **


This Command will add (or subtract) the specified value from the Segment Display. This
value can be either positive or negative. This also adjusts the Value property by the value
specified.

Script Example:

MyHudSeg.AddValue(100)

.SetValue ( <Integer> Value ) ** SIMPLE METHOD **


This method allows you to set the value of the Display to the specified value instantly. This
useful so you can set the Display to the last known players score which is saved when the
player exits the table. For more information on script variables which are persisted refer to
the Global Script Commands and Variables Chapter (link). Value must be positive. This
also sets the Value property to the value specified.

Script Example:

Sub FuturePinball_BeginPlay()
' initalise the player displays to the last known player score
MyHudSeg.SetValue(nvScore1)
' ..Etc..
End Sub

.QueueText ( <String> Text, <Enumeration> Effect, <Integer> TimeOn,


<Integer> StartDelay, <Boolean> FlushQueue, <String> SoundEffect )
This method allows multiple text lines (called screens) to be queued up and displayed in
turn. This is where the flexibility of the Segment Display device really shows off as you can
add in several screens to let the player know he has done something without actually
having to keep track when each screen has finished.

Text
Specifies the Text to Display.

Effect
The type of effect used to display the screen (or text) onto the display. This field must

Generally the Scroll Effects will scroll any existing data off the screen, while the Wipe
screen with the new one.

Effect
Description

seNone (Default)
The Text is instantly displayed.

seScrollLeft The Text is scrolled onto the display starting from the right most
towards the left. Any existing text is scrolled as well so effectively
while the new text scrolls on.
seScrollLeftOver The Text is scrolled onto the display starting from the right most
towards the left. It will appear to scroll over any existing text.
seScrollRight The Text is scrolled onto the display starting from the left most d
the right. Any existing text is scrolled as well so effectively the ol
the new text scrolls on.
seScrollRightOver The Text is scrolled onto the display starting from the left most d
the right. It will appear to scroll over any existing text.
seScrollUp The Text is scrolled upward though each horizontal line of the se
text is scrolled as well so effectively the old text scrolls off while t
seScrollUpOver The Text is scrolled upward though each horizontal line of the se
old text.
seScrollDown The Text is scrolled downwards though each horizontal line of th
existing text is scrolled as well so effectively the old text scrolls o
scrolls on.
seScrollDownOver The Text is scrolled downwards though each horizontal line of th
the old text.
seScrollOut The Text will appear to scroll outwards (both left and right) from t
display.
seScrollIn The Text will scroll inwards from both the left and right most digit
the middle segment digit.
seBlink
The entire Segment Display Text will blink (turn On and Off) for t
in the TimeOn parameter. The Rate at which it blinks is defined
.SlowBlinkSpeed property.

seBlinkFast The entire Segment Display Text will blink (turn On and Off) for t
in the TimeOn parameter. The Rate at which it blinks is defined
.FastBlinkSpeed property.
seBlinkMask
The Text will Blink where there is a non space character without
text where there is a space. This effect should be used after sett
into the display and then specifying which part of the text you wis
space characters). The specified text will blink for the time period
TimeOn parameter. The Rate at which it blinks is defined via the
property.

Script Example:

' Display "PLAYER ONE" on the display and


MyHudSeg.QueueText "PLAYER ON
MyHudSeg.QueueText " ONE", seBli

seBlinkMaskFast Exactly the same as seBlinkMask but will blink the Text mask are
the .FastBlinkSpeed property.
seWipeLeft Each Segment Digit will be replaced one at a time with the new t
existing old text) starting from the rightmost digit and moving tow
seWipeRight Each Segment Digit will be replaced one at a time with the new t
existing old text) starting from the leftmost digit and moving towa
seWipeStarLeft A Star Shaped Character will scroll over the Display starting from
moving to the left drawing the Text line. On The Gottlieb and Clo
will be a Cross.
seWipeStarRight A Star Shaped Character will scroll over the Display starting from
moving to the right drawing the Text line. On The Gottlieb and C
this will be a Cross.
seWipeRadarLeft
The Text will be wiped onto the display starting from the rightmos
the left via a long cursor (which length is 1/3rd of the number of d
vertical segment lines lit.

seWipeRadarRight The Text will be wiped onto the display starting from the leftmost
right via a long cursor (which length is 1/3rd of the number of dig
vertical segment lines lit.
seWipeRndLeft The Text will be wiped onto the display starting from the rightmos
the left via a long cursor (which length is 1/3rd of the number of d
turns on and off segments, leaving the correct segments lit.
seWipeRndRight The Text will be wiped onto the display starting from the leftmost
right via a long cursor (which length is 1/3rd of the number of dig
turns on and off segments, leaving the correct segments lit.
seWipeCursorLeft
The Text will be wiped onto the display starting from the leftmost
right via a custom defined cursor. To Define a custom cursor for
.SetLeftCursor() method.

There is no initial cursor defined for the Segment Display.

seWipeCursorRight
The Text will be wiped onto the display starting from the rightmos
the left via a custom defined cursor. To Define a custom cursor fo
.SetRightCursor() method.

There is no initial cursor defined for the Segment Display.


seWipeUp The Text is wiped upward though each horizontal line of the segm
seWipeDown The Text is wiped downwards though each horizontal line of the
seWipeBarUp The Text is wiped upward though each horizontal line of the segm
(where all horizontal segments are lit). As the Bar moves upward
drawn.
seWipeBarDown The Text is wiped downwards though each horizontal line of the
bar (where all horizontal segments are lit). As the Bar moves dow
be drawn.
seWipeRndUp The Text is wiped upward though each horizontal line of the segm
bar effect which randomly turns on and off segments, leaving the
As the Bar moves upwards, the text will be drawn.
seWipeRndDown The Text is wiped downwards though each horizontal line of the
random bar effect which randomly turns on and off segments, lea
segments lit. As the Bar moves downwards, the text will be draw
seWipeOut The Text will wipe out starting from the middle of the display and
towards the edges.
seWipeIn The Text will wipe in starting from both the left and right edges of
working its way in towards the middle.
seRandomEffect Will pick one of the above effects randomly as use that as the tra
not pick the seBonusTrailin effect.
seBonusTrailIn
This effect is a commonly used effect on Pinball as the machine
Bonus. It takes a string of 2 characters and draws each one at e
moving inwards. The characters will remain on the screen as it m
the effect reaches the middle of the display, the digits will be turn
outside back towards the middle) leaving only the middle 2 digits

Script Example:

' Do the Bonus Display


MyHudSeg.QueueText "2X", seBonusTr
MyHudSeg.QueueText "3X", seBonusTr
MyHudSeg.QueueText "4X", seBonusTrai

TimeOn
Defines the time in milliseconds this screen is held for before moving to the next disp
time also included the time to process the Effect. If the Effect is a Blink Effect (seBli
seBlinkFast, seBlinkMaskFast), this is the time the text blinks for. For Best Results
multiple of the .UpdateInterval property. If no value is specified, the text will immedia
the next (if any) display in the queue will be processed.

StartDelay Allows you to delay the processing of this Effect for the value multiplied by the .Upda
(i.e., If you specify 5 and the .UpdateInterval is 10, it will wait 50ms before starting th
very useful for syncing up effects which run over "Multiple" Segment Display Values.
(which scroll one segment digit per .UpdateInterval), this essentially delays 'n' many
value is specified, it will default to 0.
FlushQueue
Instructs the display driver to flush the queue if this is the LAST display in the queue.
or FALSE. Generally during a game you will always specify TRUE as you will want to
to the default score screen when your effect screen has finished. During the Attract m
want it to be FALSE as you will want the attract
mode displays to automatically restart when they have finished. this allows you to on
once and not have to worry about the driver running out of things to do. If no value is
to be TRUE.

If this display is the last one in the queue (when it is processed, not when you put it in
the _Empty() script event. You can use this event to put back any default screens on
displaying the score)

Sound The Sound file to play when this screen is first processed. This allows corresponding
Effect with the appropriate display (i.e., a bonus sound or something). Sounds are imported
Sound Manager (link). If this value is not specified, no sound effect will play.

Script Example:

MyHudSeg.QueueText "GET READY", seNone, 2000


MyHudSeg.QueueText "PLAYER ONE", seScrollUp, 2000

For more Script examples, refer to the Segment Display example table (downloadable
from the Future Pinball site).

.FlushQueue ()
This method will flush (empty) the text queue (if any) so any screens that are still to be
processed are ignored. Note that this will not call the _Empty() script event as you are
manually emptying the queue so it's not finishing due to all the screens being processed.

Script Example:

MyHudSeg.FlushQueue()

.BoredomEffect ( <Enumeration> Effect, <Integer> EffectRate, <Integer>


CycleTime )
This method allows you to define the "boredom" effect which will animate an idle display.
An idle display is a display which hasn't been updated with for a number of milliseconds
(see the .BoredomDelay property). These animations are very quick and just add a little
interaction to the segment display. They will not change the contents of this display with
the exception of animating it.

Effect
The type of effect to animate the display. This field must be one of the
following:

Effect
Description

sbeCycleUp
Each Individual Horizontal Segment Line will momentarily
turn Off for the EffectRate starting at the bottom segment
and working upwards to the top.

sbeCycleDown Each Individual Horizontal Segment Line will momentarily


(default) turn Off for the EffectRate starting at the top segment and
working downwards to the bottom.
sbeCycleLeft Each Segment Digit will momentarily turn Off for the
EffectRate starting at the rightmost digit and working to
the left.
sbeCycleRight Each Segment Digit will momentarily turn Off for the
EffectRate starting at the leftmost digit and working to the
right.
sbeTurnOffUp Each Individual Horizontal Segment Line will be turned Off
(and remain off) starting at the bottom segment line and
working upwards to the top. When All Lines have been
turned off, the display will be restored.
sbeTurnOffDown Each Individual Horizontal Segment Line will be turned Off
(and remain off) starting at the top segment line and
working downwards to the bottom. When All Lines have
been turned off, the display will be restored.
sbeStarLeft A Star Shaped Character will scroll over the Display
starting from the rightmost digit and moving to the left. On
The Gottlieb and Clock segment styles this will be a
Cross.
sbeStarRight A Star Shaped Character will scroll over the Display
starting from the leftmost digit and moving to the right. On
The Gottlieb and Clock segment styles this will be a
Cross.
sbeReplaceLeft The Display will Blank and each Segment Digit will be
restored (at the EffectRate) starting with the rightmost
digit and working left.
sbeReplaceRight The Display will Blank and each Segment Digit will be
restored (at the EffectRate) starting with the rightmost
digit and working left.
sbeFlash The entire display will flash 10 times at the EffectRate.
sbeRandomEffect Each time the Boredom Effect runs it will pick a different
effect each time (Random).
EffectRate
Defines how fast (or slow) the boredom mode animation will run over the
display. The value specified must be at least the same as the current
.UpdateInterval. If no value is specified it will default to 50 milliseconds.

CycleTime Defines the how often the boredom mode animation repeats after the initial
.BoredomDelay period has expired. This lets you say wait 3 seconds before
the boredom mode animation starts and get it to repeat every 2 seconds after
that. If no value is specified, the animation will repeat at the rate set by the
.BoredomDelay parameter.

Script Example:

Sub FuturePinball_BeginPlay()
' initalise the segment display boredom mode, to cycle upwards
' after 3 seconds and repeat every 2 seconds after that
MyHudSeg.BoredomDeley = 3000
MyHudSeg.BoredomEffect sbeCycleUp, 50, 2000
' ..Etc..
End Sub

.SetCharShape ( <Integer> Character, <Integer> SegmentMask )

The SetCharShape command allows you to redefine each


character (a,b,c, etc.) that you can put onto the segment
display. This allows for custom shapes to be created to suit the
theme of your pinball or for animation effects.

Segments Digits are split up into a maximum of 16 definable


leds (it is not possible to re-define the period and comma leds
(or the semicolon led on the Gottlieb and Clock display
types).

This example uses the Alphanumeric display style but the


same led positions are also used for the other segment styles
(if they exist).

If you look at the left illustration you will see the hexadecimal
numbers which are used to create a mask which the segment
display device will use to redefine the specified character.
These numbers can be combined in any fashion to define the
shape you wish.

Character
The Ascii Character code (a number between
0 and 255) of the character you wish to define.
You can find a copy of the Ascii character set
here (link)

SegmentMask Defines the Segments which will be lit when


this character is drawn on the segment
display.

Script Example:

To set up the following example:

You will need the following script:


' redefine abc to look like a cat. with 'a'
' 'b'/'c' being the tail (ani
MyHudSeg.SetCharShape 97, &H0080 or &H1000 or &H2000 or &H0004 o
MyHudSeg.SetCharShape 98, &H0100 or &H8000 or &H0
MyHudSeg.SetCharShape 99, &H0100 or &H8000 or &H0

' set up a little animation to wag the


MyHudSeg.QueueText "ab", seNone, 2
MyHudSeg.QueueText "ac", seNone, 2

There is one special character which is defined for the Tilde '~' which can be used as a
back arrow on the Alphanumeric Segment style.

.SetLeftCursor ( <Integer> Data1, <Integer> Data2, <Integer> Data3,


<Integer> Data4, <Integer> Data5, <Integer> Data6 )

This method allows you to define the Left cursor used for the seWipeCursorLeft effect.
This cursor can have a maximum length of 6 digits.

Data1 - Data6 contains the segment mask (as defined by the .SetCharShape method).
Not all values have to specified. If a value is omitted, the cursor will not use that segment
digit (thus making it shorter)

Script Example:

To set up the following example:

You will need the following script:

' set up the left cursor to look like a race car (well sort of :
MyHudSeg.SetLeftCursor 0, &H4A38, &H0532, &H3B62, 0

.SetRightCursor ( <Integer> Data1, <Integer> Data2, <Integer> Data3,


<Integer> Data4, <Integer> Data5, <Integer> Data6 )

This method allows you to define the Right cursor used for the seWipeCursorRight effect.
This cursor can have a maximum length of 6 digits and works much the same way as the
SetLeftCursor method described above.
.FadeOut()
This method will fade out the Segment Display until it is not visible anymore. If the Hud
Segment has already been faded out then this command will have no effect.

Script Example:

MyHudSeg.FadeOut()

.FadeIn()
This method will fade in the Segment Display until it is fully visible. If the Segment Display
is already visible then this command will have no effect.

Script Example:

MyHudSeg.FadeIn()

_Empty ()
This event is called when the Segment Display Device has finished processing the text
queue and the last entry in the queue told the driver to finish up (by setting the
FlushQueue parameter to True in the .QueueText method)

You can use this to revert back to a default screen such has displaying the players score
when any screens you queue up finish being processed.

Script Example:

' The segment queue has finished,


Sub MyHudSeg_Empty()
' revert back to displaying the score
MyHudSeg.Text = "SCORE " & FormatNumber(nvScore1, 0, -1, 0, -1)
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Dot Matrix Displays

Dot Matrix Displays (a early for of Plasma displays) replaced the earlier Alphanumeric displays
by having an individually addressable dot grid rectangular array, capable of displaying graphics
and text by energizing selected dots of the display. These displays usually use Neon gas, which
glows orange when ionized by a high voltage electric current passed through the segment. The
end result was much complex displays with animation where produced.

Dot Matrix Displays (of DMD) in Future Pinball are very powerful and thus more complex to
control though they can work in a more simpler mode much like how the Electro-Mechanical
Scoring Reels work (well exactly). Lot of different types of effects (scrolling, blinking text, image
animation etc..) can be achieved. This Display also allows for custom font to be created ( via
the Font Editor ) allowing you even more control on what is displayed and how. A Custom
token system is used which allows you to render different text / fonts, images, lines, boxes and
text on the display. Each Dot is custom programmable with 5 shades of luminance (OFF, 40%,
60%, 80% and 100%).

The Dot Display device also allows you to queue up screens to display with a transitional effect
to put the screen on the display. The Dot Matrix display also allows for image frames to be
displayed behind the text for animation and more complex displays. Both the background
animation and foreground text work independently though the foreground text can contain
commands to control the background animation via the embedded token command system
which is used when processing text.

(All available types and colour combinations may not be shown)

When you create a Dot Matrix Display on your table, the object will be drawn onto the current
workspace. Dot Matrix Displays can be placed on both the Playfield and Translite workspaces.

Selecting this object will bring up the following property sheet:


Name

Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to your
object.

Type

Allows you to define the style (and size) of the dot matrix display. You may
select one of the following types;

Style Description

The most common of all Dot Matrix Displays. 128 x 32 dots.


Dmd128x32
This display measures 320 x 80mm in size.

Dmd128x16 128 x 16 dots. This display measures 320 x 40mm in size.

Dmd192x64 192 x 64 dots. This display measures 395 x 140mm in size.

Matrix Colour

Defines the colour of the Dots when they are Lit. Though the colour will
brighten as more elements are lit around it. A Darker version of this colour is
also used for any Unlit Dots.

Defines the X location (based in millimeters from the top left hand corner of
the translite) of the object on the Table.

Defines the Y location (again in millimeters from the top left hand corner of the
translite) of the object on the Table.

Surface

Defines what Surface (or Wall) the object is attached to if the DMD is placed
onto the Playfield. If no Surface is specified, the object is assumed to be
attached to the Main Playfield. For more information on this refer to the
Surface Object (link). If the DMD has been placed onto the Translite, this field
is not displayed.

Alignment

Allows you to define how text and numbers are aligned on the display. You
can select one of the following:

Alignment Description
AlignLeft Any Text / Numbers displayed will be Left aligned.
AlignCenter Any Text / Numbers displayed will be Center aligned.
AlignRight (Default) Any Text / Numbers displayed will be Right aligned.

Update Interval

Defines the update interval (in Milliseconds) of the DMD device. The Lower
the value, the more the display device will be updated. this has the effect to
making any scrolling effects look smoother as the scroll will be faster (with a
lower value). In general you will not have to play with this value. The value
must be at least 5 milliseconds. Setting this value may also effect (and adjust)
the Slow and Fast Blink Speeds if you set it to a value larger than either of
those values.

Generally you will not need to change this value unless you wish to slow down
the display effects.

Slow Blink Speed

Defines the speed on which text marked as Blinking (slowly) will blink at. This
value must be at least double that of the Update Interval and is specified in
Milliseconds

Fast Blink Speed

Defines the speed on which text marked as Blinking (fast) will blink at. This
value must be at least that of the Update Interval and is specified in
Milliseconds.

This Section describes the object and how it can be accessed and controlled via the script at run-
time. Note that you access the object via the name given in the Name property field.

The Dot Matrix Display device is a very complex object (if you wish to use it fully).
It is advised that you also look at the Dot Matrix Display Example table
included with Future Pinball.

The Dot Matrix Display Device has 2 modes of operation (though they can be used at the same
time). A Simple Number only method which works exactly how the EM Reel / Gas Segment device
works which is simple to use and will only display numbers (i.e., Scores, Credits, etc.) on the
Display. The Second method in controlling the Dot Matrix Display is more screen driven where you
specify individual screens (or lines of text, which are queued up) and they are displayed in turn onto
the device using one of the built in transition methods (such as scrolling, etc.)

Numbers or Text are displayed onto the Dot Matrix display using a Future Pinball DMD Font ( these
are created with the DMD Font Editor and included into your table via the Font Manager ). At least
one Font has to be included in your table for any text to be displayed. The Dmd will default to using
the first font in the Font Manager unless the font is actively changed via an embedded text token
(this is covered below).

The following assumes you are familiar with the Gas Segment Display (link) although the specific
methods to this object are covered below;
The Dot Matrix Display uses a special embedded Token system to provide greater control over what
and how something is displayed. Tags (much like BB code on the Future Pinball Support Forums)
are enclosed in square braces [ and ]. These are split into 4 category's. Font Plotting, Drawing
Primitives, Animation Control and Miscellaneous. The text portion of the DMD can contain the
following embedded commands (# denotes a number). Spaces should NOT be used in a tag.

Font plotting

Alignment Description
[f#]
Select between font 1 and 32. Dmd Fonts must be added to the dmd during
the BeginPlay() method of the table script via the .AddFont method. Fonts
are added to your table via the Font Manger. If there is no font at the index
specified then this command will have no effect. ** Once this value is set it
remains set for the life of the DMD or until changed again **

Script Example:

MyDmd.Text = "[f1]Hello[f2]World"

This will display "Hello" with font 1 and "World" with font 2.

[x###]
Set the plot X position for the text within the DMD. Should be less that the
total width of the DMD. 0 is the extreme left of the display.

[xc] Any text rendered will be centered on the horizontal axis.


[y###] Set the plot Y position for the text within the DMD. Should be less that the
total height of the DMD. 0 is the extreme top of the display.
[yc] Any text rendered will be centered on the vertical axis.
[b] Blink the following text (slow blink). Can also includes the Drawing
Primitives.
[b] Blink the following text (fast blink). Can also includes the Drawing Primitives.
[/b] Stop Blinking (Slow or Fast). Stops any blinking text as defined by [b] or [bf].
[/bf] All text between the [b] and [/b] (of [bf]) will blink at the blink speed as
defined.

Script Example:

MyDmd.Text = "[f4][y8]FUTURE PINBALL[f1][y25]CREDITS 0[f4]"

This will display "FUTURE PINBALL" with Font 4 on row 8 (y position) and "CREDITS 0" with
Font 1. Font 4 is then selected for any future draw commands. As there was no token to set the
X position (either [XC] or [X##]) the default alignment will be used.
The following example draws the same screen except that the entire screen will blink at the fast
blink rate.

MyDmd.Text = "[bf][f4][y8]FUTURE PINBALL[f1][y25]CREDITS 0[f4][/bf

Drawing Primitives

Drawing primitives allow you to draw lines, pixels, box's on the Dot Matrix Display. Unlike the
Font Plotting which uses the luminance setting as defined with the font, these commands
require you to specify the colour (luminance).

For the Dot Matrix Display the follow colours are defined. 0 = Off, 1 = 40%, 2 = 60%, 3 = 80%
and 4 = 100% luminance

Alignment Description
[edge#]
[edge colour]

Draw a box around the edge of the DMD with the specified colour.

Script Example:

MyDmd.Text = "[edge4]"

Will draw an edge with colour 4 (100%)

MyDmd.Text = "[edge1]"

Will draw an edge with colour 1 (40%)

[pix#,#,#]
[pix colour, x, y]

Plot a Point at a x / y with the specified colour. The X/Y position starts at 0,0
which is the top/left of the display.

Script Example:

MyDmd.Text = "[pix2,10,5]"

Will set the point (DOT) at position 10 (x) and 5 (y) to colour 2 (60%)
[line#,#,#,#,#] [line colour, x1, y1, x2, y2]

Draw a Line between x1,y1 and x2,y2 with the specified colour.

Script Example:

MyDmd.Text = "[line3,0,0,127,31]"

Will draw an line in colour 3 (80%) from 0,0 (the top left of the display) to
127,31 (the bottom right of a 128 x 32 dot matrix display)

[box#,#,#,#,#]
[box colour, x1, y1, x2, y2]

Draw a Filled Box between x1,y1 and x2,y2 with the specified colour.

Script Example:

MyDmd.Text = "[edge4][box1,1,1,126,30]"

Will draw an and edge around the display in colour 4 (100%) and then fill in
the screen with in colour 1 (40%) from 1,1 to 126,30 (the bottom right of a
128 x 32 dot matrix display)

Background image animation

The Dot Matrix Display in Future Pinball allows you to display an image animation behind the
text (as a second layer to the display). This works but drawing images which have been set up
in an image list via the image list manger (link). Future Pinball will automatically convert your
Images to the DMD display.

It is important to disable Texture Filtering for any textures which are to be used
on the DMD in the Texture Manger (link). Without disabling the filtering the image may be
blurred (depending on the person playing your table video preferences).
With Filter Disabled Without (uses Filtering specified in Video
Preferences)

By using the following commands, you can set up animations which will run behind any text
you draw on the screen.

Alignment Description
[il#]
Selects the image list back to use for the animation frames. Valid values are
between 1 and 64. Image lists must be added to the dmd during the
BeginPlay() method of the table script via the .AddImageList method. **
Once this value is set it remains set for the life of the DMD or until changed
again **

[as#]
Sets the animation speed in milliseconds. Must be greater than 5
milliseconds. The Default value is 100ms. ** Once this value is set it remains
set for the life of the DMD or until changed again **

[na]
Stops any background animation (turns it off).

[sf#]
Sets the start frame of the animation. Setting the Start frame voids any
previous animation (the end frame and repeat frame) and as thus the end
and repeat frame (if needed) should be set again. The frame number is a
sub-image within the currently selected image list bank. Frames start at 1
which is the first image in the image list. If no end frame is specified then the
DMD will display the image at this frame but no animation will occur.

[ef#]
Sets the end frame for the animation to stop at. This should be greater than
the image frame specified as the start frame. If not then the animation will
stop. When the End Frame is reached. The DMD will restart the animation at
the repeat frame (if specified). If it has not been specified then the animation
will stop.

[rf#]
Sets the repeat frame which can be anywhere in between the start and end
frames. This allows a portion of the animation to repeat allowing a animation
but has a intro and a repeat part. If you wish to display a single frame without
it turning off then set the start, end and repeat frames to the desired frame
number.

The Repeat frame along with the End frame can be set at any point without
interrupting the flow of the currently running (if any) animation. for example..
A DMD animation can be tied to a game mode where there is a intro
animation, which then repeats a small portion of it over and over again.
When the game mode terminates then setting a new end/repeat frame will let
the animation flow onto the end sequence. Thus an animation can be intro-
>repeat->exit. If you wish the animation to terminate once then new end
frame has been reached then set the repeat frame to -1. ie. "[rf-1]"

Script Example:

MyDmd.Text = "[il1][sf1][ef4][rf1][y8]FUTURE PINBALL[f1][y25]CREDI

This will select Image List 1 (as added by the .AddImageList method) and play frames 1 to 4
repeating from 1 again. The "FUTURE PINBALL" and "CREDITS 0" text will be drawn over the
top of the animation.

<Integer> .Value (READ ONLY) ** SIMPLE METHOD **


This property allows you to read in the current value displayed on the DMD object. This
command will only work if you use the .ResetToZero, .AddValue and .SetValue methods
which help simulate a simple DMD display without having to queue up displays.

Script Example:

Dim MyScore
MyScore = MyDmd.Value

The DMD will have an internal value of 0 when the table is first played though this is not
automatically displayed. If you wish to use the DMD Display object in the Simpler Number
only way, you will need to issue a .SetValue command at startup to initialise the display.

<String> .Text = { "String to Display" } ** SIMPLE METHOD **


This property allows you to display a string of text (which can also contain numbers) onto
the DMD Display. If there is any screens queued up via the .QueueText() method, the
queue is flushed and will no longer be processed. Embedded DMD commands are
processed for both the .Text and .QueueText() methods.

Script Example:

MyDmd.Text = "SCORE " & FormatNumber(nvScore1, 0, -1, 0, -1)

<Integer> .UpdateInterval = { Period in Milliseconds }


This property allows you to change how fast the display is updated. The Lower the value,
the more the display device will be updated. this has the effect to making any scrolling
effects look smoother as the scroll will be faster (with a lower value). In general you will not
have to play with this value. The value must be at least 5 milliseconds. Setting this value
may also effect (and adjust) the Slow and Fast Blink Speeds if you set it to a value larger
than either of those values.

Script Example:

MyDmd.UpdateInterval = 10

<Integer> .SlowBlinkSpeed = { Period in Milliseconds }


This property allows you to change how fast (or slow) text will blink (flash) on the display
when using the [b] comment token. The value specified (in milliseconds) must be at least
double the .UpdateInterval value and preferably a multiple of it. Setting this to a value less
than double the update interval will set it to be double the update interval.

Script Example:

MyDmd.SlowBlinkSpeed = 100

<Integer> .FastBlinkSpeed = { Period in Milliseconds }


This property allows you to change how fast (or slow) text will blink (flash) on the display
when using the [bf] comment token. The value specified (in milliseconds) must be at least
the .UpdateInterval value and preferably a multiple of it. Setting this to a value less than
the update interval will set it to be the update interval.

Script Example:

MyDmd.FastBlinkSpeed = 50

<Boolean> .IsEmpty (READ ONLY)


Will return TRUE or FALSE depending if the Display Queue is empty (refer to the
.QueueText method for more information).

Script Example..

' If the display queue is empty


If (MyDmd.IsEmpty = True) Then
' .. do something ..
End If

.ResetToZero () ** SIMPLE METHOD **


This method will set the DMD Display so it displays '0'. This Method should be called when
ever the player starts a new game and you need to reset the display. This also sets the
Value property to 0.

Script Example:

MyDmd.ResetToZero()

.AddValue ( <Integer> Value ) ** SIMPLE METHOD **


This Command will add (or subtract) the specified value from the DMD Display. This value
can be either positive or negative. This also adjusts the Value property by the value
specified.

Script Example:

MyDmd.AddValue(100)

.SetValue ( <Integer> Value ) ** SIMPLE METHOD **


This method allows you to set the value of the Display to the specified value instantly. This
useful so you can set the Display to the last known players score which is saved when the
player exits the table. For more information on script variables which are persisted refer to
the Global Script Commands and Variables Chapter (link). Value must be positive. This
also sets the Value property to the value specified.

Script Example:

Sub FuturePinball_BeginPlay()
' initalise the player displays to the last known player score
MyDmd.SetValue(nvScore1)
' ..Etc..
End Sub
.QueueText ( <String> Text, <Enumeration> Effect, <Integer> TimeOn,
<Boolean> FlushQueue, <String> SoundEffect )

This method allows multiple text lines (called screens) to be queued up and displayed in
turn. This is where the flexibility of the DMD Display device really shows off as you can
add in several screens to let the player know he has done something without actually
having to keep track when each screen has finished.

Text
Specifies the Text to Display. Embedded DMD commands are processed if
they are included in the text.

Effect
The type of effect used to display the screen (or text) onto the display. This
field must be one of the following:

Generally the Scroll Effects will scroll any existing data off the screen, while
the Wipe effects replace the old screen with the new one.

Effect
Description

deNone (Default)
The text is instantly displayed.

deScrollLeft The text is scrolled onto the display starting from the
right most position and moving towards the left. Any
existing text is scrolled as well so effectively the old text
scrolls off while the new text scrolls on.
deScrollLeftOver The Text is scrolled onto the display starting from the
right most position and moving towards the left. It will
appear to scroll over any existing text.
deScrollRight The Text is scrolled onto the display starting from the
left most position and moving towards the right. Any
existing text is scrolled as well so effectively the old text
scrolls off while the new text scrolls on.
deScrollRightOver The Text is scrolled onto the display starting from the
left most position and moving towards the right. It will
appear to scroll over any existing text.
deScrollUp The text is scrolled upwards onto the display starting
from the bottom and moving upwards. Any existing text
is scrolled as well so effectively the old text scrolls off
while the new text scrolls on.
deScrollUpOver The Text is scrolled onto the display starting from the
bottom and moving upwards. It will appear to scroll over
any existing text.
deScrollDown The text is scrolled downwards onto the display starting
from the top and moving downwards. Any existing text
is scrolled as well so effectively the old text scrolls off
while the new text scrolls on.
deScrollDownOver The Text is scrolled onto the display starting from the
top and moving downwards. It will appear to scroll over
any existing text.
deScrollOut The Text will appear to scroll outwards (both left and
right) from the middle of the display.
deScrollIn The Text will scroll inwards from both the left and right
most edges of the display towards the middle.
deScrollOutVert The Text will appear to scroll outwards (both top and
bottom) from the middle of the display.
deScrollInVert The Text will scroll inwards from both the top and
bottom edges of the display towards the middle.
deWipeLeft Each DMD column will be replaced one at a time with
the new text (replacing any existing old text) starting
from the right and moving towards the left.
deWipeRight Each DMD column will be replaced one at a time with
the new text (replacing any existing old text) starting
from the left and moving towards the right.
deWipeUp Each DMD row will be replaced one at a time with the
new text (replacing any existing old text) starting from
the bottom and moving upwards.
deWipeDown Each DMD row will be replaced one at a time with the
new text (replacing any existing old text) starting from
the top and moving downwards.
deWipeOut
The new text will wipe out from the middle of the display
to the left and right edges.

deWipeIn
The new text will wipe in from the left the right edges
towards the middle.

deWipeOutVert
The new text will wipe out from the middle of the display
to the top and bottom edges.

deWipeInVert
The new text will wipe in from the top the bottom edges
towards the middle.

deFlip The Entire screen will flip over (vertical) and the next
screen will flip on.
deRandomEffect The Transition effect will be random selected from one
of the above effects.
TimeOn
Defines the time in milliseconds this screen is held for before moving to the
next display in the queue. This time also included the time to process the
Effect. For Best Results this should be a multiple of the .UpdateInterval
property. If no value is specified, the text will immediately be displayed and
the next (if any) display in the queue will be processed.

FlushQueue
Instructs the display driver to flush the queue if this is the LAST display in
the queue. Valid values are TRUE or FALSE. Generally during a game you
will always specify TRUE as you will want to display to revert back to the
default score screen when your effect screen has finished. During the
Attract mode though you will want it to be FALSE as you will want the attract
mode displays to automatically restart when they have finished. this allows
you to only put the displays in once and not have to worry about the driver
running out of things to do. If no value is specified, it is assumed to be
TRUE.

If this display is the last one in the queue (when it is processed, not when
you put it into the queue), it will call the _Empty() script event. You can use
this event to put back any default screens onto the display (such as
displaying the score)

Sound The Sound file to play when this screen is first processed. This allows
Effect corresponding sounds to be sync'd up with the appropriate display (i.e., a
bonus sound or something). Sounds are imported into the Table via the
Sound Manager (link). If this value is not specified, no sound effect will play.

Script Example:

MyDmd.QueueText "[edge2]SCROLL LEFT", deScrollLeft, 750, Tru


MyDmd.QueueText "[edge4]SCROLL LEFT OVER", deScrollLeftOver, 750

For more Script examples, refer to the DMD Display example table which is included with
Future Pinball.

.FlushQueue ()
This method will flush (empty) the text queue (if any) so any screens that are still to be
processed are ignored. Note that this will not call the _Empty() script event as you are
manually emptying the queue so it's not finishing due to all the screens being processed.
You must also call .FlushAnimation() if you wish to stop any currently running
background animation.

Script Example:

MyDmd.FlushQueue()

.FlushAnimation ()
This method will flush (stop) any currently running background animations on the DMD.

Script Example:

MyDmd.FlushAnimation()

.AddFont ( <Integer> Slot, <Boolean> FontName )


This method will adds an existing DMD font ( these are created with the DMD Font Editor
and included into your table via the Font Manager ) to the DMD. Fonts must be added for
any text to display. Fonts and selected via the [f#] embedded command.

Slot
A slot number to assign the font to. This as to be between 1 and 32
(inclusive). If an existing font already exists in this slot then it will be
overwritten.

FontName
The name of the font as imported into the table via the via the Font
Manager.

Script Example:

MyDmd.AddFont 1, "dmd05x05p"
MyDmd.AddFont 2, "dmd06x07p"

.AddImageList ( <Integer> Slot, <Boolean> ImageListName )


This method will adds an existing Image List ( created in the Image List Manager ) to the
DMD. Image Lists must be added for any background animation to be displayed. Fonts
and selected via the [il#] embedded command.

Slot
A slot number to assign the Image List to. This as to be between 1 and
64 (inclusive). If an existing Image List already exists in this slot then it
will be overwritten.

ImageListName
The name of the image list created in the Image List Manager.

Script Example:

MyDmd.AddImageList 1, "blackcat"
_Empty ()
This event is called when the DMD Display Device has finished processing the text queue
and the last entry in the queue told the driver to finish up (by setting the FlushQueue
parameter to True in the .QueueText method)

You can use this to revert back to a default screen such has displaying the players score
when any screens you queue up finish being processed.

Script Example:

' The DMD queue has finished,


Sub MyDmd_Empty()
' revert back to displaying the score
MyDmd.Text = "SCORE " & FormatNumber(nvScore1, 0, -1, 0, -1)
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: HUD Dot Matrix Displays

Dot Matrix Displays (a early for of Plasma displays) replaced the earlier Alphanumeric displays
by having an individually addressable dot grid rectangular array, capable of displaying graphics
and text by energizing selected dots of the display. These displays usually use Neon gas, which
glows orange when ionized by a high voltage electric current passed through the segment. The
end result was much complex displays with animation where produced.

Dot Matrix Displays (of DMD) in Future Pinball are very powerful and thus more complex to
control though they can work in a more simpler mode much like how the Electro-Mechanical
Scoring Reels work (well exactly). Lot of different types of effects (scrolling, blinking text, image
animation etc..) can be achieved. This Display also allows for custom font to be created ( via
the Font Editor ) allowing you even more control on what is displayed and how. A Custom
token system is used which allows you to render different text / fonts, images, lines, boxes and
text on the display. Each Dot is custom programmable with 5 shades of luminance (OFF, 40%,
60%, 80% and 100%).

The Dot Display device also allows you to queue up screens to display with a transitional effect
to put the screen on the display. The Dot Matrix display also allows for image frames to be
displayed behind the text for animation and more complex displays. Both the background
animation and foreground text work independently though the foreground text can contain
commands to control the background animation via the embedded token command system
which is used when processing text.

The HUD DMD Display works exactly the same as the normal DMD Display but is drawn on the
HUD instead of the Translite.

(All available types and colour combinations may not be shown)

When you create a Dot Matrix Display on your table, the object will be drawn onto the current
workspace. Dot Matrix Displays can be only be placed on the Translite workspace.

Selecting this object will bring up the following property sheet:

Name
Sets the name of the object which is used to reference the object via Script
events. The name must be unique for the table and may not contain any
spaces. As with all Object Names, you should give a descriptive name to your
object.

Type

Allows you to define the style (and size) of the dot matrix display. You may
select one of the following types;

Style Description

The most common of all Dot Matrix Displays. 128 x 32 dots.


Dmd128x32
This display measures 320 x 80mm in size.

Dmd128x16 128 x 16 dots. This display measures 320 x 40mm in size.

Dmd192x64 192 x 64 dots. This display measures 395 x 140mm in size.

Matrix Colour

Defines the colour of the Dots when they are Lit. Though the colour will
brighten as more elements are lit around it. A Darker version of this colour is
also

Defines the X location (based in pixels from the top left hand corner of the
HUD Screen) of the object on the Table.

Defines the Y location (based in pixels from the top left hand corner of the
HUD Screen) of the object on the Table.

Scale

Allows you to specify the scale between 50% and 100% of the DMD.

Alignment

Allows you to define how text and numbers are aligned on the display. You
can select one of the following:

Alignment Description
AlignLeft Any Text / Numbers displayed will be Left aligned.
AlignCenter Any Text / Numbers displayed will be Center aligned.
AlignRight (Default) Any Text / Numbers displayed will be Right aligned.

Update Interval
Defines the update interval (in Milliseconds) of the DMD device. The Lower
the value, the more the display device will be updated. this has the effect to
making any scrolling effects look smoother as the scroll will be faster (with a
lower value). In general you will not have to play with this value. The value
must be at least 5 milliseconds. Setting this value may also effect (and adjust)
the Slow and Fast Blink Speeds if you set it to a value larger than either of
those values.

Generally you will not need to change this value unless you wish to slow down
the display effects.

Slow Blink Speed

Defines the speed on which text marked as Blinking (slowly) will blink at. This
value must be at least double that of the Update Interval and is specified in
Milliseconds

Fast Blink Speed

Defines the speed on which text marked as Blinking (fast) will blink at. This
value must be at least that of the Update Interval and is specified in
Milliseconds.

This Section describes the object and how it can be accessed and controlled via the script at run-
time. Note that you access the object via the name given in the Name property field.

The Dot Matrix Display device is a very complex object (if you wish to use it fully).
It is advised that you also look at the Dot Matrix Display Example table
included with Future Pinball.

The Dot Matrix Display Device has 2 modes of operation (though they can be used at the same
time). A Simple Number only method which works exactly how the EM Reel / Gas Segment device
works which is simple to use and will only display numbers (i.e., Scores, Credits, etc.) on the
Display. The Second method in controlling the Dot Matrix Display is more screen driven where you
specify individual screens (or lines of text, which are queued up) and they are displayed in turn onto
the device using one of the built in transition methods (such as scrolling, etc.)

Numbers or Text are displayed onto the Dot Matrix display using a Future Pinball DMD Font ( these
are created with the DMD Font Editor and included into your table via the Font Manager ). At least
one Font has to be included in your table for any text to be displayed. The Dmd will default to using
the first font in the Font Manager unless the font is actively changed via an embedded text token
(this is covered below).

The following assumes you are familiar with the Gas Segment Display (link) although the specific
methods to this object are covered below;

The Dot Matrix Display uses a special embedded Token system to provide greater control over what
and how something is displayed. Tags (much like BB code on the Future Pinball Support Forums)
are enclosed in square braces [ and ]. These are split into 4 category's. Font Plotting, Drawing
Primitives, Animation Control and Miscellaneous. The text portion of the DMD can contain the
following embedded commands (# denotes a number). Spaces should NOT be used in a tag.
Font plotting

Alignment Description
[f#]
Select between font 1 and 32. Dmd Fonts must be added to the dmd during
the BeginPlay() method of the table script via the .AddFont method. Fonts
are added to your table via the Font Manger. If there is no font at the index
specified then this command will have no effect. ** Once this value is set it
remains set for the life of the DMD or until changed again **

Script Example:

MyDmd.Text = "[f1]Hello[f2]World"

This will display "Hello" with font 1 and "World" with font 2.

[x###]
Set the plot X position for the text within the DMD. Should be less that the
total width of the DMD. 0 is the extreme left of the display.

[xc] Any text rendered will be centered on the horizontal axis.


[y###] Set the plot Y position for the text within the DMD. Should be less that the
total height of the DMD. 0 is the extreme top of the display.
[yc] Any text rendered will be centered on the vertical axis.
[b] Blink the following text (slow blink). Can also includes the Drawing
Primitives.
[b] Blink the following text (fast blink). Can also includes the Drawing Primitives.
[/b] Stop Blinking (Slow or Fast). Stops any blinking text as defined by [b] or [bf].
[/bf] All text between the [b] and [/b] (of [bf]) will blink at the blink speed as
defined.

Script Example:

MyDmd.Text = "[f4][y8]FUTURE PINBALL[f1][y25]CREDITS 0[f4]"

This will display "FUTURE PINBALL" with Font 4 on row 8 (y position) and "CREDITS 0" with
Font 1. Font 4 is then selected for any future draw commands. As there was no token to set the
X position (either [XC] or [X##]) the default alignment will be used.

The following example draws the same screen except that the entire screen will blink at the fast
blink rate.

MyDmd.Text = "[bf][f4][y8]FUTURE PINBALL[f1][y25]CREDITS 0[f4][/bf


Drawing Primitives

Drawing primitives allow you to draw lines, pixels, box's on the Dot Matrix Display. Unlike the
Font Plotting which uses the luminance setting as defined with the font, these commands
require you to specify the colour (luminance).

For the Dot Matrix Display the follow colours are defined. 0 = Off, 1 = 40%, 2 = 60%, 3 = 80%
and 4 = 100% luminance

Alignment Description
[edge#]
[edge colour]

Draw a box around the edge of the DMD with the specified colour.

Script Example:

MyDmd.Text = "[edge4]"

Will draw an edge with colour 4 (100%)

MyDmd.Text = "[edge1]"

Will draw an edge with colour 1 (40%)

[pix#,#,#]
[pix colour, x, y]

Plot a Point at a x / y with the specified colour. The X/Y position starts at 0,0
which is the top/left of the display.

Script Example:

MyDmd.Text = "[pix2,10,5]"

Will set the point (DOT) at position 10 (x) and 5 (y) to colour 2 (60%)

[line#,#,#,#,#]
[line colour, x1, y1, x2, y2]

Draw a Line between x1,y1 and x2,y2 with the specified colour.

Script Example:
MyDmd.Text = "[line3,0,0,127,31]"

Will draw an line in colour 3 (80%) from 0,0 (the top left of the display) to
127,31 (the bottom right of a 128 x 32 dot matrix display)

[box#,#,#,#,#]
[box colour, x1, y1, x2, y2]

Draw a Filled Box between x1,y1 and x2,y2 with the specified colour.

Script Example:

MyDmd.Text = "[edge4][box1,1,1,126,30]"

Will draw an and edge around the display in colour 4 (100%) and then fill in
the screen with in colour 1 (40%) from 1,1 to 126,30 (the bottom right of a
128 x 32 dot matrix display)

Background image animation

The Dot Matrix Display in Future Pinball allows you to display an image animation behind the
text (as a second layer to the display). This works but drawing images which have been set up
in an image list via the image list manger (link). Future Pinball will automatically convert your
Images to the DMD display.

It is important to disable Texture Filtering for any textures which are to be used
on the DMD in the Texture Manger (link). Without disabling the filtering the image may be
blurred (depending on the person playing your table video preferences).

Without (uses Filtering specified in Video


With Filter Disabled
Preferences)

By using the following commands, you can set up animations which will run behind any text
you draw on the screen.

Alignment Description
[il#]
Selects the image list back to use for the animation frames. Valid values are
between 1 and 64. Image lists must be added to the dmd during the
BeginPlay() method of the table script via the .AddImageList method. **
Once this value is set it remains set for the life of the DMD or until changed
again **

[as#]
Sets the animation speed in milliseconds. Must be greater than 5
milliseconds. The Default value is 100ms. ** Once this value is set it remains
set for the life of the DMD or until changed again **

[na]
Stops any background animation (turns it off).

[sf#]
Sets the start frame of the animation. Setting the Start frame voids any
previous animation (the end frame and repeat frame) and as thus the end
and repeat frame (if needed) should be set again. The frame number is a
sub-image within the currently selected image list bank. Frames start at 1
which is the first image in the image list. If no end frame is specified then the
DMD will display the image at this frame but no animation will occur.

[ef#]
Sets the end frame for the animation to stop at. This should be greater than
the image frame specified as the start frame. If not then the animation will
stop. When the End Frame is reached. The DMD will restart the animation at
the repeat frame (if specified). If it has not been specified then the animation
will stop.

[rf#]
Sets the repeat frame which can be anywhere in between the start and end
frames. This allows a portion of the animation to repeat allowing a animation
but has a intro and a repeat part. If you wish to display a single frame without
it turning off then set the start, end and repeat frames to the desired frame
number.

The Repeat frame along with the End frame can be set at any point without
interrupting the flow of the currently running (if any) animation. for example..
A DMD animation can be tied to a game mode where there is a intro
animation, which then repeats a small portion of it over and over again.
When the game mode terminates then setting a new end/repeat frame will let
the animation flow onto the end sequence. Thus an animation can be intro-
>repeat->exit. If you wish the animation to terminate once then new end
frame has been reached then set the repeat frame to -1. ie. "[rf-1]"

Script Example:
MyDmd.Text = "[il1][sf1][ef4][rf1][y8]FUTURE PINBALL[f1][y25]CREDI

This will select Image List 1 (as added by the .AddImageList method) and play frames 1 to 4
repeating from 1 again. The "FUTURE PINBALL" and "CREDITS 0" text will be drawn over the
top of the animation.

<Integer> .Value (READ ONLY) ** SIMPLE METHOD **


This property allows you to read in the current value displayed on the DMD object. This
command will only work if you use the .ResetToZero, .AddValue and .SetValue methods
which help simulate a simple DMD display without having to queue up displays.

Script Example:

Dim MyScore
MyScore = MyDmd.Value

The DMD will have an internal value of 0 when the table is first played though this is not
automatically displayed. If you wish to use the DMD Display object in the Simpler Number
only way, you will need to issue a .SetValue command at startup to initialise the display.

<String> .Text = { "String to Display" } ** SIMPLE METHOD **


This property allows you to display a string of text (which can also contain numbers) onto
the DMD Display. If there is any screens queued up via the .QueueText() method, the
queue is flushed and will no longer be processed. Embedded DMD commands are
processed for both the .Text and .QueueText() methods.

Script Example:

MyDmd.Text = "SCORE " & FormatNumber(nvScore1, 0, -1, 0, -1)

<Integer> .UpdateInterval = { Period in Milliseconds }


This property allows you to change how fast the display is updated. The Lower the value,
the more the display device will be updated. this has the effect to making any scrolling
effects look smoother as the scroll will be faster (with a lower value). In general you will not
have to play with this value. The value must be at least 5 milliseconds. Setting this value
may also effect (and adjust) the Slow and Fast Blink Speeds if you set it to a value larger
than either of those values.

Script Example:
MyDmd.UpdateInterval = 10

<Integer> .SlowBlinkSpeed = { Period in Milliseconds }


This property allows you to change how fast (or slow) text will blink (flash) on the display
when using the [b] comment token. The value specified (in milliseconds) must be at least
double the .UpdateInterval value and preferably a multiple of it. Setting this to a value less
than double the update interval will set it to be double the update interval.

Script Example:

MyDmd.SlowBlinkSpeed = 100

<Integer> .FastBlinkSpeed = { Period in Milliseconds }


This property allows you to change how fast (or slow) text will blink (flash) on the display
when using the [bf] comment token. The value specified (in milliseconds) must be at least
the .UpdateInterval value and preferably a multiple of it. Setting this to a value less than
the update interval will set it to be the update interval.

Script Example:

MyDmd.FastBlinkSpeed = 50

<Boolean> .IsEmpty (READ ONLY)


Will return TRUE or FALSE depending if the Display Queue is empty (refer to the
.QueueText method for more information).

Script Example..

' If the display queue is empty


If (MyDmd.IsEmpty = True) Then
' .. do something ..
End If

.ResetToZero () ** SIMPLE METHOD **


This method will set the DMD Display so it displays '0'. This Method should be called when
ever the player starts a new game and you need to reset the display. This also sets the
Value property to 0.

Script Example:

MyDmd.ResetToZero()

.AddValue ( <Integer> Value ) ** SIMPLE METHOD **


This Command will add (or subtract) the specified value from the DMD Display. This value
can be either positive or negative. This also adjusts the Value property by the value
specified.

Script Example:

MyDmd.AddValue(100)

.SetValue ( <Integer> Value ) ** SIMPLE METHOD **


This method allows you to set the value of the Display to the specified value instantly. This
useful so you can set the Display to the last known players score which is saved when the
player exits the table. For more information on script variables which are persisted refer to
the Global Script Commands and Variables Chapter (link). Value must be positive. This
also sets the Value property to the value specified.

Script Example:

Sub FuturePinball_BeginPlay()
' initalise the player displays to the last known player score
MyDmd.SetValue(nvScore1)
' ..Etc..
End Sub

.QueueText ( <String> Text, <Enumeration> Effect, <Integer> TimeOn,


<Boolean> FlushQueue, <String> SoundEffect )

This method allows multiple text lines (called screens) to be queued up and displayed in
turn. This is where the flexibility of the DMD Display device really shows off as you can
add in several screens to let the player know he has done something without actually
having to keep track when each screen has finished.
Text Specifies the Text to Display. Embedded DMD commands are processed if
they are included in the text.

Effect
The type of effect used to display the screen (or text) onto the display. This
field must be one of the following:

Generally the Scroll Effects will scroll any existing data off the screen, while
the Wipe effects replace the old screen with the new one.

Effect
Description

deNone (Default)
The text is instantly displayed.

deScrollLeft The text is scrolled onto the display starting from the
right most position and moving towards the left. Any
existing text is scrolled as well so effectively the old text
scrolls off while the new text scrolls on.
deScrollLeftOver The Text is scrolled onto the display starting from the
right most position and moving towards the left. It will
appear to scroll over any existing text.
deScrollRight The Text is scrolled onto the display starting from the
left most position and moving towards the right. Any
existing text is scrolled as well so effectively the old text
scrolls off while the new text scrolls on.
deScrollRightOver The Text is scrolled onto the display starting from the
left most position and moving towards the right. It will
appear to scroll over any existing text.
deScrollUp The text is scrolled upwards onto the display starting
from the bottom and moving upwards. Any existing text
is scrolled as well so effectively the old text scrolls off
while the new text scrolls on.
deScrollUpOver The Text is scrolled onto the display starting from the
bottom and moving upwards. It will appear to scroll over
any existing text.
deScrollDown The text is scrolled downwards onto the display starting
from the top and moving downwards. Any existing text
is scrolled as well so effectively the old text scrolls off
while the new text scrolls on.
deScrollDownOver The Text is scrolled onto the display starting from the
top and moving downwards. It will appear to scroll over
any existing text.
deScrollOut The Text will appear to scroll outwards (both left and
right) from the middle of the display.
deScrollIn The Text will scroll inwards from both the left and right
most edges of the display towards the middle.
deScrollOutVert The Text will appear to scroll outwards (both top and
bottom) from the middle of the display.
deScrollInVert The Text will scroll inwards from both the top and
bottom edges of the display towards the middle.
deWipeLeft Each DMD column will be replaced one at a time with
the new text (replacing any existing old text) starting
from the right and moving towards the left.
deWipeRight Each DMD column will be replaced one at a time with
the new text (replacing any existing old text) starting
from the left and moving towards the right.
deWipeUp Each DMD row will be replaced one at a time with the
new text (replacing any existing old text) starting from
the bottom and moving upwards.
deWipeDown Each DMD row will be replaced one at a time with the
new text (replacing any existing old text) starting from
the top and moving downwards.
deWipeOut
The new text will wipe out from the middle of the display
to the left and right edges.

deWipeIn
The new text will wipe in from the left the right edges
towards the middle.

deWipeOutVert
The new text will wipe out from the middle of the display
to the top and bottom edges.

deWipeInVert
The new text will wipe in from the top the bottom edges
towards the middle.

deFlip The Entire screen will flip over (vertical) and the next
screen will flip on.
deRandomEffect The Transition effect will be random selected from one
of the above effects.
TimeOn
Defines the time in milliseconds this screen is held for before moving to the
next display in the queue. This time also included the time to process the
Effect. For Best Results this should be a multiple of the .UpdateInterval
property. If no value is specified, the text will immediately be displayed and
the next (if any) display in the queue will be processed.

FlushQueue
Instructs the display driver to flush the queue if this is the LAST display in
the queue. Valid values are TRUE or FALSE. Generally during a game you
will always specify TRUE as you will want to display to revert back to the
default score screen when your effect screen has finished. During the
Attract mode though you will want it to be FALSE as you will want the attract
mode displays to automatically restart when they have finished. this allows
you to only put the displays in once and not have to worry about the driver
running out of things to do. If no value is specified, it is assumed to be
TRUE.

If this display is the last one in the queue (when it is processed, not when
you put it into the queue), it will call the _Empty() script event. You can use
this event to put back any default screens onto the display (such as
displaying the score)

Sound The Sound file to play when this screen is first processed. This allows
Effect corresponding sounds to be sync'd up with the appropriate display (i.e., a
bonus sound or something). Sounds are imported into the Table via the
Sound Manager (link). If this value is not specified, no sound effect will play.

Script Example:

MyDmd.QueueText "[edge2]SCROLL LEFT", deScrollLeft, 750, Tru


MyDmd.QueueText "[edge4]SCROLL LEFT OVER", deScrollLeftOver, 750

For more Script examples, refer to the DMD Display example table which is included with
Future Pinball.

.FlushQueue ()
This method will flush (empty) the text queue (if any) so any screens that are still to be
processed are ignored. Note that this will not call the _Empty() script event as you are
manually emptying the queue so it's not finishing due to all the screens being processed.
You must also call .FlushAnimation() if you wish to stop any currently running
background animation.

Script Example:

MyDmd.FlushQueue()

.FlushAnimation ()
This method will flush (stop) any currently running background animations on the DMD.

Script Example:

MyDmd.FlushAnimation()

.AddFont ( <Integer> Slot, <Boolean> FontName )


This method will adds an existing DMD font ( these are created with the DMD Font Editor
and included into your table via the Font Manager ) to the DMD. Fonts must be added for
any text to display. Fonts and selected via the [f#] embedded command.

Slot
A slot number to assign the font to. This as to be between 1 and 32
(inclusive). If an existing font already exists in this slot then it will be
overwritten.

FontName
The name of the font as imported into the table via the via the Font
Manager.
Script Example:

MyDmd.AddFont 1, "dmd05x05p"
MyDmd.AddFont 2, "dmd06x07p"

.AddImageList ( <Integer> Slot, <Boolean> ImageListName )


This method will adds an existing Image List ( created in the Image List Manager ) to the
DMD. Image Lists must be added for any background animation to be displayed. Fonts
and selected via the [il#] embedded command.

Slot
A slot number to assign the Image List to. This as to be between 1 and
64 (inclusive). If an existing Image List already exists in this slot then it
will be overwritten.

ImageListName
The name of the image list created in the Image List Manager.

Script Example:

MyDmd.AddImageList 1, "blackcat"

.FadeOut()
This method will fade out the DMD Display until it is not visible anymore. If the Hud DMD
has already been faded out then this command will have no effect.

Script Example:

MyDmd.FadeOut()
.FadeIn()
This method will fade in the DMD Display until it is fully visible. If the DMD Display is
already visible then this command will have no effect.

Script Example:

MyDmd.FadeIn()

_Empty ()
This event is called when the DMD Display Device has finished processing the text queue
and the last entry in the queue told the driver to finish up (by setting the FlushQueue
parameter to True in the .QueueText method)

You can use this to revert back to a default screen such has displaying the players score
when any screens you queue up finish being processed.

Script Example:

' The DMD queue has finished,


Sub MyDmd_Empty()
' revert back to displaying the score
MyDmd.Text = "SCORE " & FormatNumber(nvScore1, 0, -1, 0, -1)
End Sub

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Decals

Decals are used to provide graphic images over lights,


usually to signify what the light is used for.

(All available types and colour combinations may not be


shown)

You should ensure that Decals are drawn after the light on which it
sits on. You can do this by sending the Light object to the back via
the right mouse button context menu.

When you create a Decal on your table, the object will be drawn on
to the current workspace. Decals can be placed on both the Table
and Translite workspaces.
Selecting this object will bring up the following property sheet:

Colour

Defines the colour of the Object. If the


object is to be rendered with a texture, the
texture will be tinted with this colour. If the
object has no texture, it will be rendered in
this colour. It is best never to use Full
Strength colours (i.e., where either the
Red, Green or Blue components are at
their Limits) as this will adversely affect
how the object is Shaded by the Lighting
system. For more information on the use
of Colour refer to the Special Graphic
Processing chapter (link).

The Decal object is unique in Future


Pinball where the colour Black will
actually be flagged as a
special colour and will change how
the decal image (texture) is drawn. If
you wish for black text,
you should still use the Image format
required by the decal object as
described below.
Image

Specifies the texture to use when drawing


the Decal. Textures are imported into the
Table via the Texture Manager (link).
Selecting a Texture will also show a small
preview picture of the texture.

For simple text type decals you should


ALWAYS draw White text on a Black
background. The decal object will
automatically make the Black transparent
and will tint the white text to the colour
defined above.

For complex colour decals (such as the


Knights Head as shown above), TGA with
its full Alpha support should be used
otherwise you 'may' get pixelisation at the
edges of the decal (though this is true of
any textures in which you specify a
'transparent colour').

Transparency
The Transparency slider allows you to
make the Decal transparent (so a light
underneath will shine though). With the
slider all the way over to the right (max),
the decal is fully opaque. Moving the slider
to the left will make the decal more
transparent. If the Colour has been set to
Black (which is treated as special), the
transparency setting will have no effect.

Defines the X location (based in


millimeters from the top left hand corner of
the playfield) of the object on the Table.

Defines the Y location (again in millimeters


from the top left hand corner of the
playfield) of the object on the Table.

Width

Defines the Width of the Decal in


millimeters. Valid values range from 5 to
512 millimeters.

Height

Defines the Height of the Decal in


millimeters. Valid values range from 5 to
512 millimeters.

Rotation
This field allows you to draw the object at
a different rotation on the Table. Valid
values range from 0 to 359 degrees.

Surface

Defines what Surface (or Wall) the object


is attached to. If no Surface is specified,
the object is assumed to be attached to
the Main Playfield. For more information
on this refer to the Surface Object (link). If
the Decal has been placed onto the
Translite, this field is not available to be
set.

The Decal object doesn't provide any scripting abilities of its


own.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Overlays

Overlay objects allow for animation of graphics on either the


main playfield, the Translite graphic or the HUD.

Overlays can either be rendered onto the Playfield/Translite


(3D) or the onscreen HUD (2D). This allows you to put your
own logos on the screen, rules, etc. which is drawn over
everything else and doesn't move with the camera. (it is not
possible to blank out the Future Pinball logo though).

In the above picture, game over image is being drawn to


both the translite and the HUD

As the Overlay object requires the use of a Image List, you will need
to be familiar with the Image List List Manager (link) before
continuing.

When you create an Overlay on your table, the object will be drawn
on to the current workspace. Overlays can be placed on the Playfield
and the Translite workspace.
Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used to


reference the object via Script events. The
name must be unique for the table and may
not contain any spaces. As with all Object
Names, you should give a descriptive name to
your object.

Image List

Defines the Image List for the Overlay to use.


Image Lists are created by the Image List
manager (link).

Colour

Defines the colour of any drawn image (from


the Image List). It is best to used a similar
colour to the Translite colour if you are going
to use the overlay on the translite.

Second Stage Render (only if the overlay


is on the playfield)
If Enabled (Ticked ), then the object will be
drawn in the second rendering pass (after the
ball has been drawn). This allows for the
overlay to be placed on the playfield glass and
correctly show whats underneath if the overlay
contains any alpha component.

Surface

This option is only displayed if the Overlay is


placed on the playfield. It defines what Surface
(or Wall) the object is attached to. If no
Surface is specified, the Overlay is assumed
to be attached to the Main Playfield. For more
information on this refer to the Surface Object
(link).
or when placed on
the translite; or..

Render onto Translite

This option is only displayed if the Overlay is


placed on the Translite. If Enabled (Ticked ),
then the overlay will be drawn onto the
Translite Graphic (or the back glass in 3
Dimensional Space). If Un ticked then the
object will be drawn onto the Virtual HUD (in 2
Dimensional Space). For More information on
the Virtual HUD refer to the Translite chapter
(link).

The Object will be drawn differently when


rendered to the HUD. It will used the purple
guide colour as well as display the name of the
object.
X

Defines the X location of the Overlay. If the


object is being rendered to the Translite this
value is based in millimeters from the top left
hand corner of the translite. If the Overlay is
being rendered to the HUD, then this value is
based in Pixels from the top left of the virtual
HUD screen.

Defines the Y location of the Overlay. If the


object is being rendered to the Translite this
value is based in millimeters from the top left
hand corner of the translite. If the Overlay is
being rendered to the HUD, then this value is
based in Pixels from the top left of the virtual
HUD screen.

Width

Defines the Width of the Overlay in millimeters


(if on the Translite) or in Pixels (if on the HUD).
The value must be at least 5 millimeters/pixels.

Height

Defines the Height of the Overlay in


millimeters (if on the Translite) or in Pixels (if
on the HUD). The value must be at least 5
millimeters/pixels.

Rotation

This field allows you to draw the object at a


different rotation. Valid values range from 0 to
359 degrees.

Update Interval

Defines the update interval (in Milliseconds) of


the Overlay when it is animating individual
images from the Image List via the Frame()
script method for this object. The Lower the
value, the faster the Frame() method will work.
The value must be at least 25 milliseconds.

Generally you will not need to change this


value unless you wish to change how fast any
page flipping animations work.

This Section describes the object and how it can be accessed


and controlled via the script at run-time. Note that you access the
object via the name given in the Name property field.

.UpdateInterval = { Period in
<Integer>
Milliseconds }
This property allows you to change the speed at which
the Overlay will change image frame (from the specified
Image List) when using the Frame() script method. The
smaller the value the faster the animation will run. The
value must be at least 25 milliseconds.

Script Example:

MyOverlay.UpdateInterval = 100

<Integer> .CurrentFrame (READ ONLY)


Will return the current frame from the Image List being
displayed. This will be a value between 1 and the
maximum number of frames in the Image List.

Script Example:

If (MyOverlay.CurrentFrame = 1) Then
' Do something..
End If

These methods animate the image being display on the


Overlay. As an Image List can contain lots of individual
frames, these methods allows you to toggle which frame to
display from the Image List.

.Frame ( <Integer> StartFrame, <Integer>


EndFrame, <Integer> RepeatFrame )
This method allows you to either set the current image
to display (from the Image List). This method also allows
you to animate the Overlay by getting it to animate by
displaying different frames every .UpdateInterval.

StartFrame
The initial frame to display. This should
be an integer number between 1 and the
maximum number of images in the
Image List. A value of 1 will display the
first frame. If this value is out of range
then this command will have no effect.

EndFrame
If you wish the Overlay to animate
between several images within the
Image List (in a sequential order) then
this field will allow you to set the end
frame. Each frame (between the
StartFrame and the EndFrame will be
displayed in turn (at the rate defined by
.UpdateInterval). You can animate both
Forwards and Backwards. If not value is
specified then no animation will take
effect. If this value is out of range then
the command will have no effect.

RepeatFrame
This field allows you to specify a frame
index to start (or repeat) an animate
once it has progressed from the
StartFrame to the the EndFrame. If no
value is specified then the any animation
will only play once.

Script Examples:

Display the first frame in the Image List;


MyOverlay.Frame 1

Animate between Frame 1 and 5;

MyOverlay.Frame 1, 5

Animate between Frame 1 and 5 and restart the


animation from frame 3 (playing again to frame 5 and
repeating again and again);

MyOverlay.Frame 1, 5, 3

Stop any animation at the current frame;

MyOverlay.Frame MyOverlay.CurrentFrame

.StepForward()
This method will advance the Image Frame being
displayed (display the next image in the list). If it
exceeds the number of frames in the Image List then it
will begin again from the first frame. If the Image List
only has a single frame then this method will have no
effect.

Script Example:

MyOverlay.StepForward()
.StepBackward()
This method will retard the Image Frame being
displayed (display the previous image in the list). If it
goes back before the first frame then it will start again
from the last frame in the Image List. If the Image List
only has a single frame then this method will have no
effect.

Script Example:

MyOverlay.StepBackward()

.FadeOut()
This method will fade out the overlay until it is not visible
anymore. This is useful for HUD overlays which you
want to vanish when you are playing a game (such as a
rule set graphic). If the Overlay has already been faded
out then this command will have no effect.

Script Example:

MyOverlay.FadeOut()

.FadeIn()
This method will fade in the overlay until it is fully visible.
This is useful for HUD overlays which you want to
display when a user is not playing a game (such as a
rule set or a game over/insert coin graphic). If the
Overlay is already visible then this command will have
no effect.

Script Example:

MyOverlay.FadeIn()

The Overlay object doesn't have any Events which it can call
via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Timers

The Timer object is used to help in the flow of the Table


Logic. They basically allows the script to 'delay' actions on
the table or to run code repeatedly at a definable interval
(period). Placement of the Timer on the Table doesn't matter
as it is not an object that is rendered during game play.

When you create a timer on your table, the following icon will be
drawn.

Name

Sets the name of the object which is used


to reference the object via the Script. The
name must be unique for the table and
may not contain any spaces.

Timer Enabled

If this field is checked, then the timer will


be active when the table is first run.

Timer Interval

Sets the initial Interval of the Timer. Must


be positive and greater than 10.

This Section describes the object and how it can be accessed


and controlled via the script at run-time. Note that you access
the object via the name given in the Name property field.

<Boolean> .Enabled = { TRUE | FALSE }


Enables or Disables the Timer.

Setting this value to TRUE will cause the Timer to wait for
the period defined by the Interval. When this period expires,
the Timer will generate the_Expired() event

Setting this value to FALSE will stop any existing (if any)
timer from executing.

Script Example:
MyTimer.Enabled = True

.Interval = { period in
<Integer>
milliseconds }
Sets the Interval of the Timer. The Interval must be positive
and greater than 10.

It is best to set this when the Timer is disabled. If the timer


is currently enabled, then it will reset the timers interval.

If the Timer is enabled and the interval period expires, then


the _Expired() event will be generated in the script

Script Example:

' in a function somewhere


MyTimer.Interval = 1000
MyTimer.Enabled = True

...

Sub MyTimer_Expired()
' .. do something ..
End Sub

<Variant> .UserData
This is a script only variable (of a variant type) which can
set to either a number, a b, a string or a reference to
another other object. When the table is first run, the
contents of the variable will be a Integer with the value of 0.

Script Example:

MyTimer.UserData = 10

or;

MyTimer.UserData = "Future Pinball"

and;

MyTimer.UserData = True

.Set ( <Boolean> Enabled, <Integer> Interval


)
This method allows you to set both the .Enabled and
.Interval properties with a single command.

Enabled is a b (True / False) which enables or


disables the Timer.
Interval is a positive number and is the time until the
Timer expires. The Interval must be at least 10
milliseconds and if no value is specified, then the
current value in the .Interval property is not changed.

Script Example:

MyTimer.Set True, 1000

_Expired()
This event is generated when the Timer is Enabled and the
Timer's Interval has expired.

Script Example:

' in a function somewhere


MyTimer.Set True, 1000

...

Sub MyTimer_Expired()
' disable timer
MyTimer.Set False
' .. do something ..
End Sub
It is good programming practice to disable a timer while in
the _Timer() event by setting .Enabled to False. If you want
a timer to repeat, then set it back to True before exiting the
Subroutine.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley
Table Object: Sub-Translit Animation

STAs (Sub Transit Animation) objects allow for animation of


graphics behind the translite graphic. Many older pinball
games (and some newer ones) used mechanical machinery
to move things behind the back glass which was only seen
though clear holes on the glass. This object will allow you to
duplicate that behavior. You can either Page Flip between
different frames of an animation or smooth rotate the image
(around a central axis).

In the above picture, the rocket ships rotate around the


earth
but are hidden behind the red spaceship and the moon

It is important to note that in order to see any STA object to place


onto the Translite, the Image you specify as the translite texture must
have transparent areas either by creating a TGA texture with an
alpha channel for the window (or BMP with the appropriate
transparent colour set in the Texture Manager). TGA Alpha mapping
will always look much nicer than BMP Colour Matching.
Behind the Back glass sits a white piece of wood. In Future Pinball,
this is Drawn first, then any STA objects followed lastly by the
Translite Image.

As the STA object requires the use of a Image List, you will need to
be familiar with the Image List List Manager (link) before continuing.

When you create a STA on your table, the object will be drawn on to
the current workspace. They can only be placed on the Translite
workspace.

Selecting this object will bring up the following property sheet:

Name

Sets the name of the object which is used


to reference the object via Script events.
The name must be unique for the table
and may not contain any spaces. As with
all Object Names, you should give a
descriptive name to your object.

Image List
Defines the Image List for the STA to use.
Image Lists are created by the Image List
manager (link). A Preview of the first
frame of the Image List is also displayed.

Colour

Defines the colour of any drawn image


(from the Image List). It is best never to
use Full Strength colours (i.e., where
either the Red, Green or Blue components
are at their Limits) as this will adversely
affect how the object is Shaded by the
Lighting system. For more information on
the use of Colour refer to the Special
Graphic Processing chapter (link).

Defines the X location (based in


millimeters from the top left hand corner of
the translite) of the object on the
Backglass.

Defines the Y location (again in millimeters


from the top left hand corner of the
translite) of the object on the Backglass.

Width

Defines the Width of the STA in


millimeters. The value must be at least 5
millimeters.

Height
Defines the Height of the STA in
millimeters. The value must be at least 5
millimeters.

Update Interval

Defines the update interval (in


Milliseconds) of the STA when it is
animating individual images from the
Image List via the Frame() script method
for this object. The Lower the value, the
faster the Frame() method will work. The
value must be at least 25 milliseconds.

Generally you will not need to change this


value unless you wish to change how fast
any page flipping animations work.

This Section describes the object and how it can be accessed


and controlled via the script at run-time. Note that you access
the object via the name given in the Name property field.

.UpdateInterval = { Period in
<Integer>
Milliseconds }
This property allows you to change the speed at which
the STA will change image frame (from the specified
Image List) when using the Frame() script method. The
smaller the value the faster the animation will run. The
value must be at least 25 milliseconds.
Script Example:

MySta.UpdateInterval = 100

<Integer> .CurrentFrame (READ ONLY)


Will return the current frame from the Image List being
displayed. This will be a value between 1 and the
maximum number of frames in the Image List.

Script Example:

If (MySta.CurrentFrame = 1) Then
' Do something..
End If

<Integer> .CurrentAngle (READ ONLY)


Will return the current rotational angle of the STA. This
will be a value between 0 and the 359 degrees.

Script Example:

If (MySta.CurrentAngle > 180) Then


' Do something..
End If
These methods animate the image being display on the
STA. As an Image List can contain lots of individual frames,
these methods allows you to toggle which frame to display
from the Image List.

.Frame ( <Integer> StartFrame, <Integer>


EndFrame, <Integer> RepeatFrame )
This method allows you to either set the current image
to display (from the Image List). This method also
allows you to animate the STA by getting it to animate
by displaying different frames every .UpdateInterval.

StartFrame
The initial frame to display. This should
be an integer number between 1 and
the maximum number of images in the
Image List. A value of 1 will display the
first frame. If this value is out of range,
then this command will have no effect.

EndFrame
If you wish the STA to animate between
several images within the Image List (in
a sequential order), then this field will
allow you to set the end frame. Each
frame (between the StartFrame and
the EndFrame will be displayed in turn
(at the rate defined by
.UpdateInterval). You can animate
both Forwards and Backwards. If not
value is specified, then no animation
will take effect. If this value is out of
range, then the command will have no
effect.

RepeatFrame
This field allows you to specify a frame
index to start (or repeat) an animate
once it has progressed from the
StartFrame to the the EndFrame. If no
value is specified, then the any
animation will only play once.

Script Examples:

Display the first frame in the Image List:

MySta.Frame 1

Animate between Frame 1 and 5:

MySta.Frame 1, 5

Animate between Frame 1 and 5 and restart the


animation from frame 3 (playing again to frame 5 and
repeating again and again):

MySta.Frame 1, 5, 3

Stop any animation at the current frame:

MySta.Frame MySta.CurrentFrame
.StepForward()
This method will advance the Image Frame being
displayed (display the next image in the list). If it
exceeds the number of frames in the Image List, then it
will begin again from the first frame. If the Image List
only has a single frame, then this method will have no
effect.

Script Example:

MySta.StepForward()

.StepBackward()
This method will retard the Image Frame being
displayed (display the previous image in the list). If it
goes back before the first frame, then it will start again
from the last frame in the Image List. If the Image List
only has a single frame, then this method will have no
effect.

Script Example:

MySta.StepBackward()

.MotorRotateTo ( <Integer> Angle, <Integer>


TimeToTake, <Boolean> AntiClockwise )
This method will rotate the currently displayed frame on
the STA around its central axis. Many older EM
machines would rotate a wheel around in the backbox
to enhance game play. The initial Motor Anlge of a STA
is always 0 degrees.

Angle
The Angle to Rotate the STA to. This
should be an angle between 0 and
359 degrees. If the STA is currently
not at the specified angle it will start
rotating until it reaches that angle.

TimeToTake
Specifies the time to take (in
milliseconds) to rotate the STA from its
current angle to the newly specified
angle. Must be at least 1 millisecond
(which would be an instant rotation). if
no value is specified, then the motor
will instantly (step) to the new angle

AntiClockwise
If TRUE, then the motor will rotate
anti-clockwise otherwise the motor
rotates clockwise. If no value is
specified, then the motor will rotate
clockwise.

Script Example:

Rotate the STA to 90 degrees over 1 second;

MySta.MotorRotateTo 90, 1000


Rotate the STA back to 0 degrees over 1 second
(rotate it anti-clockwise)

MySta.MotorRotateTo 90, 1000, True

The STA object doesn't have any Events which it can call
via the script.

Future Pinball © 2007 BSP Software Design Solutions - Designed and Developed by Chris Leathley

You might also like