Register    Login    Forum    FAQ

Board index » Resources » Tutorials, how-to's, bug report and docs

Post new topic Reply to topic  [ 13 posts ]  Go to page Previous  1, 2
Author Message
 Post subject: Re: BAM Feature How-to Guides
 Post Posted: Wed Feb 21, 2018 12:30 pm 

Joined: Mon Jan 27, 2014 12:36 pm
Posts: 1927
Location: Ontario, Canada
xBAM.BallManager Tutorial

This is another crazy tool with huge creative potential !
You can create balls of different sizes, shapes, graphics, mass, and opacity. You can have them transform when you hit table objects and you can set your game narrative to change based on the custom ball that is currently in play

You MUST have" Ball Marks(Dirt)" enabled in Future Pinball "Video/Rendering Options"
in order to see ball textures properly

Using Script to:
1. define Custom Ball Features including:
Size, Mass, Opacity, Ball Texture
2. To enable transforming from one Ball texture to another with game events
3. To enable game events to change when linked to a specific ball

Extensive and Original Discussion Here:

1. Custom Ball Code :
Copy and Paste under "Option Explicit" at top of Script

Function CreateCustomBall ( Source, BallName, Radius, Mass, Opacity )
   xBAM.BallRadius = Radius
   xBAM.BallMass = Mass
   xBAM.BallOpacity = Opacity

   Dim bi
   Set bi = xBAM.BallManager.CreatCustomBall(BallName)
   Source.CreateBall bi.Red, bi.Green, bi.Blue, bi.BallNumber
   AddDebugText "["&xBAM.BallID&"]"
   CreateCustomBall = bi.BallNumber

End Function

2. Ball Textures:
Each ball you create will have 3 textures( 452.bmp, 334.bmp, 269.bmp)

These can be extracted from Miownkhan custom ball packs.

You must unzip these packs and rename the 3 files. For simplicity and clarity, it makes sense to choose a name like the CustomBall your are creating.
(ie "Tennis_452", "Tennis_334", "Tennis_269")

Ball Textures must be BOTH imported in Texture Manager and added to "surfaces" that you create in the FP table editor.
This part is same as adding textures described in xBAM.SetTexture feature above...

3. Define Balls ( in example below I chose names "BeachBall" , "VolleyBall" and "TennisBall"

Dim Beachball, TennisBall, VolleyBall
BeachBall = xBAM.BallManager.DefineCustomBall(192, 192, 192, "Beach_452", "Beach_334", "Beach_269")
TennisBall = xBAM.BallManager.DefineCustomBall( 222, 253,  130, "Tennis_452", "Tennis_334", "Tennis_269")
VolleyBall = xBAM.BallManager.DefineCustomBall( 255, 255, 255, "Volley_452", "Volley_334", "Volley_269")

In the code above the first 3 numbers (ie 192,192,192) are mixes of the primary colours
R,G,B that give the ball it's colour. You can get these numbers from any colour box in FP table editor.
4. Create a ball in a kicker. Typical location is under Sub Createnewball()
Sub CreateNewBall()
   call CreateCustomBall(PlungerKicker, BeachBall, 13.0, 20, 1)
   ' create a ball in the plunger lane kicker.

   ' There is a (or another) ball on the playfield
   BallsOnPlayfield = BallsOnPlayfield + 1

   ' kick it out..
End Sub

Notice the parameter order as per Custom ball code that you copy and pasted above, "Function CreateCustomBall ( Source, BallName, Radius, Mass, Opacity )"

so in above code
"call CreateCustomBall(PlungerKicker, BeachBall, 13.0, 20, 1)"
this means Source = Plungerkicker, BallName = BeachBall, Radius = 13.0, Mass =20 and
Opacity = 1.

You can play with these values. If the Radius is too large the ball won't drain, if the radius is too small the ball will roll under guides. If the Opacity is 0 the ball is invisible

5. "Transformation Code" is for Changing custom balls with either hit events or simply in code add the following in same location as above:

Dim BallTransformations
Set BallTransformations = xBAM.BallManager.CreateTransformation
call BallTransformations.AddRule(BeachBall, TennisBall)
call BallTransformations.AddRule(TennisBall, VolleyBall)
call BallTransformations.AddRule(VolleyBall, BeachBall)

Example of hit event (This will rotate between custom balls each time LeftSlingshot is hit)

Sub LeftSlingshotRubber_Hit()
   ' add some points
   ' flash the lights around the slingshot
   LeftSlingshotBulb1.FlashForMs 100, 50, BulbOff
   LeftSlingshotBulb2.FlashForMs 100, 50, BulbOff
   End Sub

Example of changing custom ball with code (this will toggle between custom balls with pressing C, V or B on keyboard)

Sub FuturePinball_KeyPressed(ByVal KeyCode)
   If keycode = 48 then call xBAM.BallManager.UpdateBall(fpBallID,BeachBall)
   If keycode = 47 then call xBAM.BallManager.UpdateBall(fpBallID,VolleyBall)
   If keycode = 46 then call xBAM.BallManager.UpdateBall(fpBallID,TennisBall)
End sub

6. You can also link game events to whatever the current ball is (For instance when
tennis ball is in play , have tennis table graphics and ball sounds etc...)
If xBAM_BallManager.GetBallName(fpBallID) = TennisBall then bla bla bla

In the above example code showing the Left Slingshot_hit code for instance, I added
lights that change and a graphic that changes based on the ball in play. See video below.
I used the texture swapping feature described previously to change the graphics :shock:

   ' add some points
   ' flash the lights around the slingshot
   LeftSlingshotBulb1.FlashForMs 100, 50, BulbOff
   LeftSlingshotBulb2.FlashForMs 100, 50, BulbOff
   If xBAM_BallManager.GetBallName(fpBallID) = BeachBall Then BeachLight.State = BulbBlink:VolleyLight.State = BulbOff:TennisLight.State = BulbOff:xBAM.SetTexture "GameImage", "beachball", 0
   If xBAM_BallManager.GetBallName(fpBallID) = VolleyBall Then BeachLight.State = BulbOff:VolleyLight.State = BulbBlink:TennisLight.State = BulbOff:xBAM.SetTexture "GameImage", "Volley", 0
   If xBAM_BallManager.GetBallName(fpBallID) = TennisBall Then BeachLight.State = BulbOff:VolleyLight.State = BulbOff:TennisLight.State = BulbBlink:xBAM.SetTexture "GameImage", "Tennis", 0
End Sub

If you want to try the demo table in video below: ... d.fpt?dl=0

If you want to get even fancier, you can attach objects to your custom balls
and make the custom ball invisitble to make "Fantasy Pinballs"
This is described in the last section of xBAM.miniplayfield tutorial below.

Tables at Pinsimdb using xBAM.BallManager

Indiana Jones Path of Adventure (for Custom Balls , "Boulder" , "Fire", "Knight") ... _adventure

Genesis Plus MOD (for Psychodelic custom balls) ... nesis_plus

End of xBAM.BallManager Tutorial


Last edited by Gimli on Mon Mar 12, 2018 10:55 am, edited 19 times in total.

 Post subject: Re: BAM Feature How-to Guides
 Post Posted: Wed Feb 21, 2018 3:30 pm 

Joined: Mon Jan 27, 2014 12:36 pm
Posts: 1927
Location: Ontario, Canada

xBAM.Miniplayfield Tutorial

This is one of the most exciting innovations of BAM that opens the door for unlimited creative possibiliies for Future Pinball! (See usages below.)
Original Thread Here:
You'll see some videos on that thread of crazy stuff, I've done.
Swinging ball for Junkyard, Hockey table inside a bubble, 2 player "joust-style" table with Mirroring playfields, Projecting Movies on Room walls, Rotating Ceilings, Table Objects that Jump out at you, VR Rooms etc..

Video Tutorial Here (Sorry for the low resolution Quality)
***NOTE: This is an old video using an older version of BAM, so the menu has changed a
little and most importantly Step 2 on video (copying a large "BAM setup segment") is no longer necessary.

1. Originally created for scaling, rotating, moving a "Miniplayfield" from beside the table
and onto the desired location on the main table playfield

2. Can actually be used on any object or group of objects (including DMD's , overlays, all table objects) can be scaled, rotated, and moved anywhere in the FP environment (both on the table and in the surrounding Games Room)

3. A Sequence of Moveto commands can be used to animate the miniplayfield or object(s) in 1. and 2. above

4. Can be used to attach any object to an invisible ball

***TIP : To understand what is going on with xBAM.Miniplayfield ,
think of the light saber dual between LUKE SKYWALKER and KYLO REN in the Last Jedi :D

Luke tricked Kylo into believing he was present when in fact he was projecting an illusion
of himself onto the BattleField. That's exactly what xBAM.miniplayfiield does! It takes object(s) or miniplayfield and projects an image of it onto the table or where ever you choose to project it....

This is important to understand because it means you can superimpose up to 16 miniplayfields onto the table or onto each other and they will not interfere with each other, because like Luke Skywalker they are merely ghost projections....
See 6:30 of above video
A .Process for Creating and Defining A "Miniplayfield"
1. Create a miniplayfield beside the Main Table in Future Pinball Table Editor (for 1. above). Same process as constructing the main table playfield and elements.

2. or Select an object or Group of Objects (for 2. and 3. Above)

3. Load Table, Enter BAM Menu : PressQ, Advanced Menu, Dev Options, Mini-Playfield

4.Starting with IDx 0 (Which is miniplayfiled_0), capture your miniplayfield or object(s) in Yellow Source Box. Press Control-C
to copy code to clipboard. Screen should display "Clipboard: Create Miniplayfield"
Starting around 10:23 of Video Above.

5.Escape to exit table, and enter FP Script Editor. Press Control-V to Paste code
under "Option Explicit"

It should look like this:
Option Explicit            ' Force explicit variable declaration
Dim MiniPlayField_0        '                             Xmin     Xmax     Ymin     Ymax     Zmin     Zmax     CenX     CenY     CenZ
Set MiniPlayField_0        = xBAM.CreateMiniPlayfield(    208,     308,     484,     584,       0,     100,     258,     534,      50)

6.Reload Table and Return to BAM Mini-Playfield Menu. Move Green Target Box
which now contains your Miniplafield or object(s) to desired size, rotation and position.
Press Control-C to copy "moveto" command to clipboard. Screen should display "Clipboard: Moveto" See Around 16:10 of video above

7.Escape to exit table, and enter FP Script Editor. Press Control-V to Paste "Moveto" code under previous entry.
The Script should now look like this:
Option Explicit            ' Force explicit variable declaration
Dim MiniPlayField_0        '                             Xmin     Xmax     Ymin     Ymax     Zmin     Zmax     CenX     CenY     CenZ
Set MiniPlayField_0        = xBAM.CreateMiniPlayfield(    208,     308,     484,     584,       0,     100,     258,     534,      50)
'                              DstX     DstY     DstZ     RotX     RotY     RotZ    Scale     Time
Call MiniPlayField_0.MoveTo(    258,     534,     150,       0,       0,       0,       1,       0)

This is all that is required for a simple miniplayfield or relocation of none moving object(s)

B. Multiple miniplayfields or object groups can each be assigned a separate "miniplayfield"
BAM allows 16. To configure just change "Idx" number in Miniplayfield Menu.
It is best to keep the names that are assigned by BAM for your miniplayfields (" MiniPlayField_0", " MiniPlayField_1", " MiniPlayField_3" etc..)and keep them in order at top of script.
So you can fine-tune your settings in Real Time from BAM miniplafield menu

C.Object Animation can be achieved by creating a timer in Table Editor
and adding a code in the script to go from one "moveto" command created above to another.
The BAM/MiniPlayfield Menu has a real-time animation player to assist you.
See around 19:16 of above video.

For example, let's create a timer in FP table editor and call it "AnimationTimer"
And let's choose to create variable called "AnimationPosition"
In the code we can have something like this:
Dim AnimationPosition
Sub AnimationTimer_Expired()
AnimationTimer.Enabled False
 AnimationPosition =  AnimationPosition + 1
If  AnimationPosition = 1 then Call MiniPlayField_0.MoveTo(   bla ,bla, bla, 2) :AnimationTimer.Enabled True, 2000
If  AnimationPosition = 2 then Call MiniPlayField_0.MoveTo(   bla ,bla, bla, 2) :AnimationTimer.Enabled True, 2000
If  AnimationPosition = 3 then Call MiniPlayField_0.MoveTo(   bla ,bla, bla, 2) :AnimationTimer.Enabled True, 2000
If  AnimationPosition = 4 then Call MiniPlayField_0.MoveTo(   bla ,bla, bla, 2) :AnimationTimer.Enabled False:AnimationPosition =0
End Sub

In the above animation, the "miniplayfield" will move from one location to the next and take 2 seconds to get there as the last number in the bam code is for "time to move to position" and AnimationTimer is set to refresh every 2 seconds (2000 ms). This synchronizes the BAM code with FP Timer for a smooth transition.
To Trigger above animation you simply require the following anywhere in the FP code.

AnimationPosition = 0
AnimationTimer.Enabled True

D. Assigning an object to a ball

1. Place your object ( A toy or whatever) next to table in FP Table Editor
2. Grab object as "miniplayfield " as described above
3.use xBAM.BallManager
To create a custom ball
4.Assign your object to the custom ball using BAM.closeto command

MiniPlayField_0.TrackedBall = xBAM.BallCloseTo(440, 917)

Where x,y Coordinates 440 and 917 are the location of the kicker from which the ball
is being released (in this case the usual "plungerkicker"

Ball tracking will automatically stop when ball hits drain or kicker and is "destroyed"
or when you use TrackedBallStop code:

The Ball that your object is attached to can be made invisible by setting ball opacity to 0
as described in the BAM.BallManager section.
The Video Below Shows the possibilities:

1. AirPlane Flying above pinball
2.Wild's Flame Hologram blazing on top of a "Fireball" Pinball
3. Hockey Puck (Attached a puck toy and made the Custom PInball invisible)
4.Cartoon Ball where I made a cartoon animated object (Used xBam.SetTexture to assign flashing textures to a stock FP droptarget object, used xBAM.Minipalyfield to grab Droptarget object, and then assigned it to an invisible custom ball ie Opacity = 0 using xBAM.BallManager)
If you want to try this demo table here it is: ... g.fpt?dl=0

Tables at Pinsimdb using xBAM.miniplayfield

Krull (for Miniplafield)

Indiana Jones Path of Adventure (for POA miniplayfield) ... _adventure

Genesis Plus MOD (For Rising Sarcophagus Miniplayfield) ... nesis_plus

Creature From the Black Lagoon (For Room Swapping) ... ack_lagoon

Dragon's Keep (For VR Castle Room) ... eep_(maxis)

Relevant comments from Discussion Thread:

1. Miniplayfield Shortcut Codes
End of xBAM.Miniplayfield Tutorial


Last edited by Gimli on Fri Mar 09, 2018 9:46 am, edited 18 times in total.

 Post subject: Re: BAM Feature How-to Guides
 Post Posted: Wed Mar 14, 2018 11:31 am 

Joined: Mon Jan 27, 2014 12:36 pm
Posts: 1927
Location: Ontario, Canada
xBAM.Physics Tweaks Tutorial

This is by far the most under rated and underused GEM of BAM.
This allows Real-time, on the fly tweaking and saving of Physics xml files

Original Thread

Under Construction......

FP Physics has mesmorized, confounded , frustrated many and it has lead, in many circles, to an unfavorable opinion of Future Pinball.
It may seem overwhelming, but with a little exploration and tweaking, most players can achieve a perfectly acceptable result.

In fact SLAMT1LT is keeping us all in suspense as he claims to have found the perfect physics parameter blend that is more realistic than living :shock:

I will link some of the threads describing xml usage and then spend most of the time
exploring the BAM.PhysicsTweaks tool and the automatic scripting that it can generate to make FP physics completely customizable

1.In his how-to-setup BAM thread,GeorgeH discusses all the versions of FuturePinball.exe and how the physics paremeters were extracted in files called "XML" files. There are numerous xml's files to try as these
are simply recipes of quantities of the various physics parameters.

2.I believe the new Versions of BAM are being released with all of the popular xml files for you to choose from.

3.Here is a link with a listing of them:

Loading XML files has been one of the cherished features of BAM almost since its inception.

The beauty of xBAM.PhysicsTweaks is that we can now adjust all of the physics parameters in Real-time and immediately see the results

And then BAM will save the new XML file to be used as before or even now has the feature of creating an xml code that we can simply paste into the script and
thereby make the xml file redundant !

XBAM.Physics tweaks also has the real time flipper adjustments with an amazing test mode where you can test shots from any angle. And once again BAM will create a flipper code that you can paste into the script.

You can set the physics of each flipper independently !
There many features pertaining to flipper testing that haven't even been tested by users yet that Ravarcade has included. See video below...I just discovered this tool!!! :shock:

xBAM.PhysicsTweaks is already an amazing tool....with huge potential as users learn how to use it.

To be continued....

Last bumped by Gimli on Wed Mar 14, 2018 11:31 am.

Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 13 posts ]  Go to page Previous  1, 2

Board index » Resources » Tutorials, how-to's, bug report and docs

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Jump to: