Tutorial BAM BAM Feature How-To Guides

Gimli

Pinball Master
Joined
Feb 6, 2020
Messages
1,341
Reaction score
882
Points
120
Favorite Pinball Machine
Monster Bash
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
TABLE OF CONTENTS
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
The following are now part of this thread:
1.Intro and Preamble

2.xBAM texture swapping for texture swapping of table and room objects, playfield textures, translite and cabinet textures , object enamal map textures

3.xBAM.MagneticField for creating magnets and magnetic fields

4.xBAM.GameRoom for toggling on/off FP default game room for room swapping

5.xBAM.BallManager for scripting of many custom ball features. Updated March 3, 2021 for setting ball position , velocity and spin

6.Animation Sequencer for changing room angles for attract mode and game play
See XBAM.custom cameras below as it has supplanted this feature

7. XBAM.MiniPlayfield For Miniplayfield and object scaling,moving and animating. And attaching objects to balls

8. XBAM.PhysicsTweaks
The unexplored GEM of BAM.

9. XBAM.CustomCamera ***NEW TUTORIAL ADDED MAY 2020"****
This is enables coding of Custom Camera Views for Desktop users and camera animations for both Desktop and Cabinet Users
There are no camera views or sequence coding options for VR users at this time.

10. Normal "Bump" Maps. Follow this simple procedure to add "Bump" maps to existing FP tables.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
BAM How-To Guides, tips and tricks
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
On this thread, please enter any tutorials re: HOW-TO use BAM features
Please also include the location of the original discussion of each feature and
any examples that have been provided or that you can offer.
Don't worry that your summary is not exhaustive or accurate, we can refine it as we go
:D
This thread can be like Wikkipedia "BAMipedia" :lol:
BAM is and always has been a creative tool that you discover as you jump into the Rabbit Hole and try it.

This will be linked to :
1. The more technical and Succinct BAM Functions-Commands page that is under developement
viewtopic.php?nomobile=0f=86&t=6569p85357
2. The companion thread for Discussion of BAM Functions-Commands here:
viewtopic.php?nomobile=f=86&t=6583&p=85559#p85559

''''''''''''''''''''''''''''''''''''''''''''''''''''''
Preamble:
'''''''''''''''''''''''''''''''''''''''''''''''''''''

BAM was first released in May 2013 by Ravarcade and has grown in a gradual and organic way since, based on Ravarcade's great ideas and suggestions from all of us in the peanut gallery.

With each version of BAM or addition of a new feature, Ravarcade has given explanations as well as demo table examples.

However, many of these discussions are now buried in the many pages of BAM threads and many previously unmentioned nuances have emerged along the way and there is now a need to cull all that BAM has become into a more organized approach.

BAM has many features that are internal and are only accessed through the BAM menu. These tend to allow instant real time adjustment of many features such as Camera Angles, Lighting,
Table Size, Magnetic Fields, Miniplayfields, Gravity setting, Physics tweaks, Ball Swapping, 3d and head tracking modes.

BAM also has many features that are only external and consist of special scripting of an array of features such as highscore fixes, Gameroom swapping, object texture swapping, custom ball features (mass, radius, transparency, texture, location tracking)

In some cases the internal BAM menu will automatically create some of the external code
for you (xml physics creation and adjustment, miniplayfield set up and adjusting, magnet set up and adjusting and gravity refinement for playfields).
This thread while not exhaustive hopefully will give us users a pooled location for some of our tricks and usages of BAM.

Hopefully, this will generate an understanding, appreciation and overall global acceptance of BAM as an essential part Future Pinball use.
 
Last edited:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
xBAM.SetTexture For TEXTURE SWAPPING
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
This feature is awesome! You can "reskin" your table graphics during a game, have rotating colours on lights, create cartoon strips/movies on table objects, make elaborate VR Rooms etc...etc..
viewtopic.php?nomobile=1&f=86&t=3249&p=84086&hilit=Texture#p84086
July 9 and July 17 ,2017

The code is simple and is as follows:

Code:
Code:
xBAM.SetTexture "fpObjectName", "TextureName", "ObjectFace"

1.fpObjectName refers to the name of the table object you want to swap textures on.

Textures can be swapped on the following object types:
Surface
Toy
Bulb,Light
Gate
Spinner
Trigger
TriggerOpto
SpinningDisk
AutoPlunger
Bumper
Diverter
EmKicker
Popup
Flipper
Target
DropTarget
SwingTarget
TargetVari

2.TextureName refers to the name of the texture you want to use.

**TIP in order to be accessible textures must BOTH be imported into texture manager AND assigned to a surface on the table editor (each surface has 2 slots)
3.ObjectFace (0,1,2) refers to objects with more that one side (front, top, side )

Example>
1.use photoshop to make jpg,tga,bmp textures ( ie. SexyTarget.bmp, PlainTarget.bmp, CoolTarget.bmp)

**TIP objects use texture maps, so consider exporting existing object textures from FP texture manager in the table editor of your desired table. You can then use that texture as a template for editing, to create a new texture..

2.import textures using texture manager( ie. SexyTarget.bmp, PlainTarget.bmp, CoolTarget.bmp)See Image below
3.create new surface of any shape or size using table editor and assign your textures
to surface (2 spots "Top Texture" and"Side Texture" in no particular order, it doesn't matter....)See Image 3 below "Create a Surface"


*Note in was previously thought that you could assign textures to a 3rd location "Enamel Map" however this causes graphical glitches in Arcade Mode for some people, so do not assign texture swap to Enamel Map


4.Add table object using table editor in this case add a droptarget. Give it a name "NewTarget" or whatever. choose a default texture as per usual. See Image Below
5. now you can simply use code above to swap textures.
Code will look like this:

Code:
Code:
xBAM.SetTexture "NewTarget", "SexyTarget", "0"

You can create code to swap between textures as follows


Code:
Code:
Dim TargetTexture



Sub CheckTargetTexture

If TargetTexture = 1 then xBAM.SetTexture "NewTarget", "SexyTarget", "0"

If TargetTexture = 2 then xBAM.SetTexture "NewTarget", "PlainTarget", "0"

If TargetTexture = 3 then xBAM.SetTexture "NewTarget", "CoolTarget", "0"

End Sub

Then anywhere in code where you want a switch you simply put the following.
Let's say we want Texture = 2
Code:
Code:
TargetTexture = 2:CheckTargetTexture

*UPDATE November 2019
You can swap textures now on playfield, translite, cabinet, arcade wall poster, object enamel maps. Playfield texture swapping is very useful as lighting and shadow maps are maintained when you swap textures. This is a great feature to create lighting ambiance by swapping textures with various brightness throughout game. The process for importing textures is the same as described above but with the following codes:

Code:
xBAM.SetPlayfieldTexture textureName
Code:
Code:
xBAM.SetPlayfieldTexture "texturename"

xBAM.SetTransliteTexture textureName
Code:
Code:
xBAM.SetCabinetTexture textureName
Code:
Code:
xBAM.SetCabinetTexture "texturename"

xBAM.SetPosterTexture textureName
Code:
Code:
xBAM.SetPosterTexture "texturename"

xBAM.SetEnamelTexture FPObjectName, textureName
 

Attachments

  • settextures.jpg
    settextures.jpg
    129.1 KB · Views: 171
Last edited:
Here is Ravarcade's "SetTextureDemo" table:
With keys X,C,V you can change between 3 colors: red, blue, white. On table are all object-types capable to change texture. except "TOYS" which are also texture swappable
:D

http:\\www.ravarcade.pl/beta/SetTextureDemo.fpt
ravarcade wrote:

Image



Video Below: All room walls, floor, doors, art, pinball tables swap textures



Tables at Pinsimdb using xBAM.SetTexture
Creature From the Black Lagoon (For Room Swapping)
http://www.pinsimdb.org/pinball/table-2 ... ack_lagoon

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End of xBAM.SetTexture Tutorial
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Back to TABLE OF CONTENTS
 

Attachments

  • SetTextureDemo.fpt
    238 KB · Views: 146
Last edited:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
xBAM.CreateMagneticField
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Another very cool tool, you can easily create magnets to capture the ball, or
use magnetic fields to push or pull the pinball in any direction !

Original Discussion Here:
viewtopic.php?nomobile=f=86&t=6356

How to create magnet/magnetic field
1.Choose location of Magnet from table editor (with mouse pointer or select object). x,y coordinates
are at the bottom centre of table editor screen
2.Load Table
3.Press Q to bring up BAM menu
4.Select DEV Options
5.Select Magnetic Fields
6.Enter x,y coordinates
7.Press control-c (BAM will copy magnet code to clipboard)
8.Exit table (pres escape)
9.Load script editor
10.At top of script (under "Option Explicit") press Control-V to paste magnet code to script. It will look like this
Code:
Code:
Dim MagneticField_0   '                      X           Y    Z  Range Strength

Set MagneticField_0 = xBAM.CreateMagneticField(1442, 871, 0, 500, 1 )

11.Load table , start game and then go into BAM magnet menu again and play with Range and Strength settings on the fly (When you like it press Control-C and paste overtop of original code in script)
12. ***TIP Step 11 On the fly tweaking can only be done if you keep the original names
MagneticField_0, MagneticField_1, MagneticField_2 etc...)
 
Last edited:
Similar to the Texture Swapping Code above, you can create varying magnet features
based on game events.

For instance
Code:
Code:
Dim MagnetIntensity



Sub CheckMagnet

If MagnetIntensity = 1 then MagneticField_0.Strength = 1

If MagnetIntensity= 2 then MagneticField_0.Strength = 2

If MagnetIntensity = 3 then MagneticField_0.Strength = 3

End Sub

So, if a game event calls for lets say MagnetIntensity = 3
Code:
Code:
MagnetIntensity = 3:CheckMagnet

***TIP positive strength values pull and negative strength values push the ball
Rav also has a code for lifting a ball with the magnet off of the table...
Use "U" to lift ball in this demo table
http://www.ravarcade.pl/beta/magneticfield_demo.fpt

Here's a video showing the process of setting up a magnetic field/magnet in BAM:


Attachments:
magnets1.jpg
 

Attachments

  • magneticfield_demo.fpt
    300.5 KB · Views: 141
Last edited:
Tables at Pinsimdb using xBAM.MagneticField
Dragon's Keep (For Magnet)
http://www.pinsimdb.org/pinball/table-2 ... eep_(maxis)


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End of Magnetic Field Tutorial
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Back to TABLE OF CONTENTS


Attachments:
magnets2.jpg
magnets2.jpg [ 161.02 KiB | Viewed 552 times ]
 
Last edited:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
xBAM.GameRoom
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Simple but very useful! This will switch the Standard FP Arcade Room on and off.
Allows you to Switch between FP Arcade Room and any Alternative Rooms you have made.
Previously it was one or the other only.

***TIP in order for this funtion to work you must enable "Render Game Room" under
Future Pinball Video Settings.


Attachments:
ArcadeRoom.jpg
ArcadeRoom.jpg [ 262.5 KiB | Viewed 522 times ]
 
This Function is used in the following settings:
1.When table has an alternate Game Room and you don't want the Default Game Room
to interfere
2.When you want to give player options to switch between several different rooms
based on player preference, speed of CPU, mode of play (Desktop, Arcade, VR)

I will use Dragon's Keep as an example. At the top of script Franzleo/Wild already had:
Code:
Code:
Const BAM_VERSION = 0

If BAM_VERSION > 157 Then

xBAM.GameRoom = false

End If

End If

This code has the fail safe code in it "if BAM_VERSION > 157 Then" (Version 157 was the first with this feature) See BAM Functions-Commands viewtopic.php?nomobile=f=86&t=6569&p=85656#p85656

"xBAM.GameRoom = false " Will make sure the Standard room does not interfere with
the Excellent castle room

This is all that is required for option 1 above
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
For option2 above (Give players option to select between different rooms),

I tweaked the code as folllows:
Code:
Code:
Dim RoomNumber

If BAM_VERSION > 157 Then

xBAM.GameRoom = false

RoomNumber = 1

End If

End If


Added Variable "Dim RoomNumber"
And I set RoomNumber = 1
Then I added a cheatcode to switch between rooms

Code:
Code:
If keycode = 48 then 'B on keyboard

If BAM_VERSION > 157 Then

RoomNumber = RoomNumber + 1

If RoomNumber > 2 then RoomNumber = 1

If RoomNumber = 2 then xBAM.GameRoom = True:Call MiniPlayField_0.MoveTo( 258, 534, -950, 0, 0, 0, 0, 0):Exit Sub:End if

If RoomNumber = 1 then xBAM.GameRoom = False:Call MiniPlayField_0.MoveTo( 258, 534, -950, 0, 0, 0, 50, 0):Exit Sub:End if

End if

End if


To hide the New Game Room, I took the existing miniplayfield code (that was used to grab the beautiful game room):
Code:
Code:
Call MiniPlayField_0.MoveTo( 258,   534, -950,       0,       0,       0,    50,       0)

and changed the Scale (the second last number) from 50 to 0 to make it disappear.
Code:
Code:
'                              DstX     DstY     DstZ     RotX  RotY  RotZ  Scale  Time

Call MiniPlayField_0.MoveTo( 258,   534, -950,       0,       0,       0,    0,       0)


Prior to the Ability to move game room models with xBAM.Miniplayfield, table developers
assigned Room Models as Toys and used FP "moveto" scripting. So switching between
those type of rooms is more difficult.....you have to first capture them in a xBAM.miniplayfield box


 
Last edited:
Some players like to have no games room just black space around table.
This is easy to add as RoomNumber = 3 as follows:
Code:
Code:
If keycode = 48 then 'B on keyboard

If BAM_VERSION > 157 Then

RoomNumber = RoomNumber + 1

If RoomNumber > 3 then RoomNumber = 1

If RoomNumber = 3 then xBAM.GameRoom = False:Call MiniPlayField_0.MoveTo( 258, 534, -950, 0, 0, 0, 0, 0):Exit Sub:End if

If RoomNumber = 2 then xBAM.GameRoom = True:Call MiniPlayField_0.MoveTo( 258, 534, -950, 0, 0, 0, 0, 0):Exit Sub:End if

If RoomNumber = 1 then xBAM.GameRoom = False:Call MiniPlayField_0.MoveTo( 258, 534, -950, 0, 0, 0, 50, 0):Exit Sub:End if

End if

End if


In RoomNumber= 3 above, I simpy set "xBAM.GameRoom=False" and the Scale of your
room to 0 at the same time



Here is another example of Room Swapping (uses xBAM.GameRoom , Simple Wall and Floor "Overlays Scaled and positioned using xBAM.Miniplayfield)




Tables at Pinsimdb using xBAM.GameRoom
Creature From the Black Lagoon (For Room Swapping)
http://www.pinsimdb.org/pinball/table-2 ... ack_lagoon

Dragon's Keep (For VR Castle Room)
http://www.pinsimdb.org/pinball/table-2 ... eep_(maxis)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End of xBAM.GameRoom Tutorial
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Back to TABLE OF CONTENTS
 
Last edited:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
BAM Animation Sequencer
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
This Tool is a well kept secret. In fact I think I am the only one who has ever used it
:lol:


Original Discussion Here:
viewtopic.php?nomobile=f=86&t=3249&p=70680&hilit=sequencer#p70680

****TIP
To use this feature you MUST do the following:
1. Select Desktop in Future Pinball Video Settings (NOT ARCADE)
2.Be in the Advanced BAM Menu
3.Select "Static Cam" in BAM Menu
4.Select "Forced Arcade Mode" under "AddOns" in BAM menu

See Video Below demonstrating how to access this function

Usages:
1. Create "Room Camera Sequences" as an attract mode type feature to view the Arcade Room and Table
2. Create new camera angles from which to play the table. This is accomplished by setting the transition time to next angle to 100000000 ms (27 hours !)
In other words it won't go to the next transition and remain at your desired location
:lol:


This is a little known BAM Function accessed only through BAM menu.
"Animation Sequencer" is a confusing term.

This function essentially changes the Room Camera angle and creates a sequence of 1 - 10 camera settings per "Animation Sequence".

When in Animation Sequencer Menu
Use the following keys:
1. INSERT to add new line
2.DELETE to remove a line
3. ARROW Keys to move between parameters
4. Select SaveTable.seq
To save

These are the Parameters that can be set and adjusted on the fly:
1. Camera Image Location Tx, Ty, Tz
2. Camera Image Stretch Sx, Sy, Sz
3. Camera Image Rotation Rx, Ry, Rz
4. Time to move the image to parameters set in 1-3 above

You can create 3 independent Sequences per table and they are saved in BAM/CFG directory

The sequences will be played smoothly using F1, F2, F3.


Currently there is a bug and the save feature is creating spacing problems in the tablename.seq file that is generated and saved in your BAM/CFG directory.

This Beta.dll will fix the issue (Released Feb 17,2018. copy this into your BAM directory
after you have renamed the original file of the same name)
http://www.ravarcade.pl/beta/BAM.dll

***Note: Although this function works in all 3 BAM usages (Desktop, Arcade and VR),
The camera angles do vary between them and so the sequences don't translate perfectly.

Examples:
https://www.dropbox.com/s/b03qv1whgl0dz ... s.rar?dl=0
The above zip has example sequence files.
copy the default.seq file into your BAM directory.
It also contains suggested seq files (Desktop.seq for destop users, Arcade.seq for arcade users, the Wild.seq files are suggested for NES table to allow zooming of backglass in that table). Simply substitute the name of your table on the file wish to try and save it
either in the BAM/CFG directory or the FuturePinball/tables directory.
In these demo files, I have set:
1.Animation Sequence1 activated with F1. Will pan around Arcade Room
2.Animation Sequence2 activated with F2 . Goes to Full table view to play table from
3.Animation Sequence3 activated with F3. Zooms to backglass for games with Vertical Playfields



""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
END OF BAM Animation Sequencer Tutorial
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Back to TABLE OF CONTENTS
 
Last edited:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
xBAM.BallManager Tutorial
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
This is another crazy tool with huge creative potential !

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
xBAM.BallManager Tutorial Updated Features - March 3, 2021 as of Beta Version 328 See Below
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Code:
    Dim ball
       Set ball = xBAM.BallCloseTo(0,0)
    ball.SetVelocity x,y,z
    ball SetOmega x,y,z
    ball.SetPosition x,y,z

1. ball.SetVelocity x,y,z This code will make the ball go in any direction along x , y and z axes and everything in between
So to make the ball roll lets say at a 90 degree angle to the right with a x-velocity of 2000 here is the code:
Code:
    Dim ball
       Set ball = xBAM.BallCloseTo(0,0)
    ball.SetVelocity 2000,0,0

2. ball SetOmega x,y,z This code will make the ball spin in any direction along x , y and z axes and everything in between
So to make the ball spinl lets say at a 90 degree angle to the left with a side spin of 15:
Code:
    Dim ball
       Set ball = xBAM.BallCloseTo(0,0)
    ball.SetOmega -15,0,0

3. ball SetPosition x,y,z This code will place the ball anywhere you wish on the table
So to place the ball lets say in the middle of table at x = 250 and y = 500 z = 10
Code:
    Dim ball
       Set ball = xBAM.BallCloseTo(0,0)
    ball.SetPositon 250,500,10

Advanced Coding
Now to get even fancier we can use trigonometry to have velocity or spin assigned to a specific angle of our choosing.

Example one :Velocity So lets say our angle of firing is 45 to the right at a composite velocity of 2000

1. The math work in Radians and not degrees so we have to convert by multiplying our number by the conversion factor.
Code:
  Const DegToRad = 0.01745329251994329576923690768489

2. now we apply the following trigonometry equation (Thanks Ravarcade)
Code:
Dim ball
Set ball = xBAM.BallCloseTo(0,0)
Dim v
Dim a
ball.SetVelocity v*sin(a),- v*cos(a), 0

Where "v" is for velocity and "a" is for angle in Radians (these letters I just made up...)
So now using our disired composite velocity 2000 and angle of 45 degrees the code looks like this:
Code:
Dim ballSet ball = xBAM.BallCloseTo(0,0)
Dim v
Dim a
a = 45 * DegToRad
v = 2000
ball.SetVelocity v*sin(a),- v*cos(a), 0

lets say you want to test by creating a cheat code in futture pinball when you press the "B" key on you keyboard:
Place code under "Sub FuturePinball_KeyPressed(ByVal KeyCode)"
Code:
Dim ball
Set ball = xBAM.BallCloseTo(0,0)
if keycode = 48 then  'B on keyboard
Dim v
Dim a
a = 45 * DegToRad
v = 2000
ball.SetVelocity v*sin(a),- v*cos(a), 0
End if

Example two: Spin So lets say our spin angle is 225 (which towards the bottom left corner of table) at spin intensity of 300

1. Again , the math works in Radians and not degrees so we have to convert by multiplying our angle number by the conversion factor.
Code:
  Const DegToRad = 0.01745329251994329576923690768489

2. now we apply the following trigonometry equation (Thanks Ravarcade)
Code:
Dim ball
Set ball = xBAM.BallCloseTo(0,0)
Dim s
Dim a
ball.SetOmega -s*cos(a),- s*sin(a), 0

Where "s" is for spin and "a" is for angle in Radians (these letters I just made up...)
So now using our desired composite spin intensity of 300 and angle of 225 degrees the code looks like this:
Code:
Dim ball
Set ball = xBAM.BallCloseTo(0,0)
Dim s
Dim a
a = 225 * DegToRad
s = 300
ball.SetOmega -s*cos(a),- s*sin(a), 0

lets say you want to test by creating a cheat code in future pinball when you press the "V" key on you keyboard:
Place code under "Sub FuturePinball_KeyPressed(ByVal KeyCode)"
Code:
if keycode = 47 then  'V on keyboard
Dim ball
Set ball = xBAM.BallCloseTo(0,0)
Dim s
Dim a
a = 225 * DegToRad
s = 300
ball.SetOmega -s*cos(a),- s*sin(a), 0
End if

Have Fun
There are some demo tables below:
Note you require the BAM.dll version in the BAM.zip version 328 or later. copy this into your BAM directory
JPRBamBalls start game and simply keep pressing "v" "b" or "m" on keyboard
BamBalls press plunger key to choose modes then use Arrow keys on keyboad and "b" on keyboard as directed by the HUD DMD on screen

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
End of xBAM.BallManager Update
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

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


***Tip***
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:
viewtopic.php?nomobile=0f=86&t=5583&p=80019#p80019

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

Code:
Code:
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.
viewtopic.php?nomobile=1&f=86&t=5583

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")

****TIP****
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"

Code:
Code:
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()
Code:
Code:
Sub CreateNewBall()



call CreateCustomBall(PlungerKicker, BeachBall, 13.0, 20, 1)

' create a ball in the plunger lane kicker.

'PlungerKicker.CreateBall



' There is a (or another) ball on the playfield

BallsOnPlayfield = BallsOnPlayfield + 1



' kick it out..

PlungerKicker.SolenoidPulse

End Sub

***TIP:
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:

Code:
Code:
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)

Code:
Code:
Sub LeftSlingshotRubber_Hit()

' add some points

AddScore(5)

' flash the lights around the slingshot

LeftSlingshotBulb1.FlashForMs 100, 50, BulbOff

LeftSlingshotBulb2.FlashForMs 100, 50, BulbOff

BallTransformations.UpdateBall(fpBallID)

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

Code:
Code:
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...)
Code:
Code:
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:


Code:
Code:
Sub LeftSlingshotRubber_Hit()

' add some points

AddScore(5)

' flash the lights around the slingshot

Sub LeftSlingshotBulb1.FlashForMs 100, 50, BulbOff

LeftSlingshotBulb2.FlashForMs 100, 50, BulbOff

BallTransformations.UpdateBall(fpBallID)

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:
https://www.dropbox.com/s/lzmf9zmh8uknv ... 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")
http://www.pinsimdb.org/pinball/table-2 ... _adventure

Genesis Plus MOD (for Psychodelic custom balls)
http://www.pinsimdb.org/pinball/table-2 ... nesis_plus



""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
End of xBAM.BallManager Tutorial
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Back to TABLE OF CONTENTS
 

Attachments

  • CustomBallsAdvanced.fpt
    2.6 MB · Views: 148
  • JPRBamBalls.fpt
    224 KB · Views: 95
  • BamBalls.fpt
    3.2 MB · Views: 98
  • BAM.zip
    1.9 MB · Views: 112
Last edited:
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
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:
viewtopic.php?nomobile=0f=86&t=6214
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.

Usages:
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:
Code:
Code:
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:
Code:
Code:
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 non-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.
***TIP
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:
Code:
Code:
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.

Code:
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

Code:
Code:
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:
Code:
Code:
MiniPlayField_0.TrackedBallStop()

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)
:lol:



:shock:

If you want to try this demo table here it is:
https://www.dropbox.com/s/1uc1whmxrmaen ... g.fpt?dl=0

Tables at Pinsimdb using xBAM.miniplayfield
Krull (for Miniplafield)
http://www.pinsimdb.org/pinball/table-23242-krull

Indiana Jones Path of Adventure (for POA miniplayfield)
http://www.pinsimdb.org/pinball/table-2 ... _adventure

Genesis Plus MOD (For Rising Sarcophagus Miniplayfield)
http://www.pinsimdb.org/pinball/table-2 ... nesis_plus

Creature From the Black Lagoon (For Room Swapping)
http://www.pinsimdb.org/pinball/table-2 ... ack_lagoon

Dragon's Keep (For VR Castle Room)
http://www.pinsimdb.org/pinball/table-2 ... eep_(maxis)

Relevant comments from Discussion Thread:

1. Miniplayfield Shortcut Codes
viewtopic.php?nomobile=0f=86&t=6583&p=85830#p85830
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
End of xBAM.Miniplayfield Tutorial
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Back to TABLE OF CONTENTS
 

Attachments

  • FancyBallTracking.fpt
    3.5 MB · Views: 159
Last edited:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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
viewtopic.php?nomobile=f=86&t=6276&hilit=tweaks

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.
viewtopic.php?nomobile=0f=86&t=5544

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:
viewtopic.php?nomobile=0f=86&t=6173

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....
Back to TABLE OF CONTENTS
 
Last edited:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
xBAM.Custom Camera Views
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Ok it has been a couple of years since all the preceding features were explained and since then there are many new Features.
Custom Camera Views and Camera Animations are an amazing new BAM feature . SLAMT1LT uses Custom Camera Views in his Ultimate Pro tables
during Multiball and for enhanced views of the Backbox during Videos and Celebrations .


Original Thread


With this Feature you can do the following:
1. Code Camera Views in Desktop Mode
2. Code Camera Animation Sequences in Desktop Mode
3. Code Camera Animation Sequences in Cabinet Mode
4. The BAM Menu now allows you to create camera views for all tables , accessed by pressing "C"

**NOTE*** Camera Views and Animation Sequences do not apply to VR Mode at this time

Preliminary Concepts:
1. xBAM.Camera.Mode

BAM will automatically know what type of mode you are playing in be it Desktop Mode, Cabinet Mode or VR Mode.

You can thereby code unique features for each mode.
Code:
xBAM.Camera.Mode =0,1,2

xBAM_Camera_Desktop = 0
xBAM_Camera_Cabinet = 1
xBAM_Camera_VR = 2

***NOTE*** There actually are no camera views or sequences for VR MODE. But you can use the flag in the code if you wish to have code that is specific to VR Mode only.


So For instance if you want to code separate camera animations ( or whatever) for Desktop vs Cab due their unique perspectives, you can code like this:

Code:
If xBAM.Camera.Mode = xBAM_Camera_Desktop then
bla bla bla
End Sub

If xBAM.Camera.Mode = xBAM_Camera_Cabinet  Then
bla bla bla
End Sub

If xBAM.Camera.Mode = xBAM_Camera_VR  Then
Turn on light, Play a sound , change colors, jump up and down or whatever
bla, bla
End Sub

2. Desktop Mode: Camera Views.

camera-request.png

Permission screen for Camera Control

This is the annoying screen that displays asking users for permission to use camera controls.
This is Ravarcades explanation:
"I think, that user will be confused if something starts to happen with game camera without warning. So, i believe script has to ASK user for permission to do anything with camera. "

***NOTE***
TO USE CUSTOM DESKTOP CAMERA VIEWS YOU MUST HAVE THIS CODE AT TOP OF SCRIPT
YOU DON'T NEED IT HOWEVER FOR CAMERA ANIMATION SEQUENCES


Code:
If xBAM.Camera.ScriptControl = FALSE Then
   xBAM.Camera.RequestForControl
End If

Understanding the parameters for the Desktop Mode Camera views is a little confusing and take some practice:
Code:
xBAM.Camera.DesktopSet eyeX, eyeY, eyeZ, atX, atY, atZ, FOV, delay
The key concept to understand is that you are coding a camera view from where you are standing ("eye" x,y,z) to where you are looking ("at" x,y,z)

"FOV" (Field of View ) refers to the magnification or zoom value

and "delay" is the time BAM will take to transition to that Camera View

So for instance here is a camera view that I used on the Labyrinth table below:
Code:
xBAM.Camera.DesktopSet          250,  1185.4,   700,   250,   500,       -200,      50,    500

The best way to get the numbers is in the FP table editor. For the "eye" values put the mouse where you will be "standing" and it will give an x and y value at the bottom left of the screen. Write down those numbers. Fot the "at" values place the mouse where you want to look and again read the x and y values and write them down.

The "z" values you have to play with . Since you will be looking down at the table from above the "eye"z number will be larger than the "at"z number.

***TIP*** if you are looking straight ahead the "eye"x and "at"x values will be the same.

For the Labyrinth Demo Table below, I code an option to switch between several camera views as follows:
Code:
Dim Location

Sub CameraSwap()
    Location = Location + 1
        If Location = 5 then Location = 1
        AddDebugText "Location = " &Location
        Select Case Location
             Case 1: xBAM.Camera.DesktopSet          250,  1185.4,   700,   250,   500,       -200,      50,    500
             Case 2: xBAM.Camera.DesktopSet          250,  1185.4,   691.7,   250,   597.5,      - 200,      40,    500
             Case 3: xBAM.Camera.DesktopSet          250,  1185.4,   800,   250,   597.5,       -200,      40,    500
             Case 4: xBAM.Camera.DesktopSet          250,  1185.4,   1000,   250,   597.5,       -200,      40,    500
        End Select
End Sub

3. Desktop Mode:Look at Back Box Camera Angle

As you likely know pressing the "TAB" key during a desktop mode game will display the Back Box
Also in the Code you can use :
Code:
LookAtBackBox()

And then the code to return to playfield view is:
Code:
LookAtPlayfield()

Now with BAM we can set both the Playfield View( "xBAM.Camera.DesktopSet") and the BackBox View ("xBAM.Camera.DesktopLookAtSet") to ANYTHING we want
The Code for the Back Box can be easily derived from the Desktop view you have coded above. It is just a matter of changing the "z" values.
Instead of looking down , you are looking up. So the "eye"z value should be less than the "at"z' value.

***NOTE***: you must always put the DesktopSet Value before the DesktopLookAtSet value as follows:

Code:
 xBAM.Camera.DesktopSet          250,  1185.4,   700,   250,   500,       -200,      50,    500
xBAM.Camera.DesktopLookAtSet    250,  1185.4,   300,   250,   500,       400,      50,    500

Notice the only values changed are the "Z" values. You can of course tweak these numbers how you wish.

Now whenever you press the TAB key and release it will use your new values for looking at the BACK BOX and Playfield
And now whenever you code "LookAtBackBox" or "LookAtPlayfield" it will also use these settings.

Very Cool !

4. Desktop Mode: Camera Animation Sequence:
Again you do NOT have to use the Camera Permission code for this feature

In some ways this feature is the easiest to configure.
If you access the manual camera after you load a table by pressing F11 , you can then move anywhere around table using the "A,S,W,D" keys. If you go into the BAM Advanced menu/ Dev Options/Desktop Camera Animation and then press "insert" for each position you go to then it will create a list of positions in the room to animate transitions between. Or press 'shift-insert'.

Keyboard shortcuts:
- SHIFT+ENTER - will copy settings of current camera (that what you see now on screen). You can use Manual Camera (F11). I did it on video above
- SHIFT+INSERT -will add new camera settings to list just before line of current select line. So, you can add now position in list not only at end, but also in middle or at begin of list
- SHIFT+DELETE - will remove current postion from list
- CTRL-C - will copy whole camera animation to clipbord in form ready to paste in script

For Desktop Users the Camera Animation Code will look like this:

Code:
    xBAM.Camera.DesktopSequenceBegin 1
    xBAM.Camera.DesktopSequenceAddEntry    -725,    1869,   928.6,   690.1,   -22.6,   110.6,      50,    7000
    xBAM.Camera.DesktopSequenceAddEntry    1275,    1869,   916.7,   220.3,  -114.6,       0,      50,    7000
    xBAM.Camera.DesktopSequenceAddEntry   344.8,    1869,  1068.6,   297.9,  -371.1,       0,      50,    7000
    xBAM.Camera.DesktopSequenceAddEntry   372.8,  1800.8,   948.8,   352.8,  -102.1,       0,      50,    7000
    xBAM.Camera.DesktopSequenceAddEntry   199.4,  1116.7,   434.8,   192.6,   558.3,       0,      50,    8000
    xBAM.Camera.DesktopSequenceAddEntry   199.4,  1116.7,   434.8,   183.7,   617.2,   449.6,      50,    10000
     xBAM.Camera.DesktopSequenceAddEntry   199.4,  1116.7,   434.8,   183.7,   617.2,   449.6,      50,    3000
     xBAM.Camera.DesktopSequenceAddEntry     275,  1421.5,     450,     275,     434,       0,      50,    3000
    xBAM.Camera.DesktopSequenceEnd

You can paste this code anywhere in the script outside of a "Sub Whatever.......End Sub" routine
Then activate the sequence use this code:
Code:
xBAM.Camera.DesktopSequencePlay 1
Try the above code in any table and you should see a panning camera routine that zooms around the fp Games Room and Table.
If you want the Animation to begin immediately just put the "play" code at the very top of this code

You can create many such Camera Animations , just simply change the number for the next sequence
xBAM.Camera.DesktopSequenceBegin "Number" and "xBAM.Camera.DesktopSequencePlay "Number"

The code to stop a running sequence early is :

Code:
xBAM.Camera.DesktopRelease

4. Cabinet Mode: Camera Animation Sequence:
Again you do NOT have to use the Camera Permission code for this feature
You create the Cabinet Animation sequence in the same BAM menu locaton as for desktop and you use the same Short Cut keys to Insert and Delete Choice and for copying the code. The difference is the Manual Camera with F11 DOES NOT WORK in Cabinet Mode so you have to guess which numbers to use and test it as you go.

This is an example of Room Panning Camera Sequence for Cabinet users:
Code:
     Camera.CabinetSequencePlay 2
     xBAM.Camera.CabinetSequenceBegin 2
    xBAM.Camera.CabinetSequenceAddEntry       0,       0,       0,       1,       1,       1,       0,       0,       0,    5000
    xBAM.Camera.CabinetSequenceAddEntry       0,    1200,    -500,       2,       2,     1.1,      20,      -0,       0,   10000
    xBAM.Camera.CabinetSequenceAddEntry   -1700,     800,    -600,       2,       2,     1.1,      20,       0,     -70,   10000
    xBAM.Camera.CabinetSequenceAddEntry    1700,     800,    -600,       2,       2,     1.1,      20,      -0,      70,   10000
  xBAM.Camera.CabinetSequenceEnd

Note: I chose "2" as the sequence number
Note: I put the Sequence Play code at top...but you can put it anywhere in script

The code to stop a running sequence early is :

Code:
xBAM.Camera.CabinetRelease

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
End of xBAM.Custom Camera Views Tutorial
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Back to TABLE OF CONTENTS
 

Attachments

  • Labyrinth3.fpt
    1.9 MB · Views: 133
  • LabyrinthHard4.fpt
    1.6 MB · Views: 136
Last edited:
Hi Gimli,
Mate thanks for all the info and demo tables. The demo tables realy make it so much easier to understand.
Outstanding effort as always!! :)

Been messing around using gifs as movie players. Wow!! what a difference, added 400mb of movie clips for
a test and it didn't miss a beat. Loading times are a little out there but then again I won't be using 400mb on any table?
Thanks to Rav and this post what would of taken me weeks before to achieve now takes minutes.
Excellent!!!!
 
Hi Gimli,
Mate thanks for all the info and demo tables. The demo tables realy make it so much easier to understand.
Outstanding effort as always!! :)

Been messing around using gifs as movie players. Wow!! what a difference, added 400mb of movie clips for
a test and it didn't miss a beat. Loading times are a little out there but then again I won't be using 400mb on any table?
Thanks to Rav and this post what would of taken me weeks before to achieve now takes minutes.
Excellent!!!!
WOW !! Thats great to hear Nitro !
 
@Gimli

OK.... so in some ways... I think we overthought how the BAM Camera menu can be used for a static custom camera view in Desktop mode.

Many people who play in desktop mode, don't like FP's built-in camera views F1-F8, as the view may not fit the way they want... or they don't like the camera following the ball, etc.

No change to table code or Camera Control Prompt is needed for a Custom Static Camera View (for Desktop)!

You can set 3 global presets that can be used for all tables. You can also set 3 Table specific ones.

The thing is.... you can set your prefered BAM custom camera view in Desktop mode "once" and never again...while still having the option to switch back to that mode.

You can just set your camera view in the BAM Camera menu....SAVE (important step)....exit the menu.... then switch to it using the BAM Camera key....

DONE!

The next time you load the table... your new BAM Camera view will automatically be used! No need to press any buttons....or add any code to the table. If you ever need to switch back to your camera view for any reason...press the BAM Camera key until your table / global view appears.

BAM saves the BAM Camera settings and your last selected BAM Camera option to the table config!

So super simple... it hurts!

1599780455168.png

How to do it:

- load your table
- press F2 for a good view to start with, that isn't distorted or has a fish eye effect, etc
- press F11, then position the camera view to where you want it (using mouse and WSAD)
- bring up BAM menu
- goto the CAMERA menu
- set the key you want for BAM Camera (if you haven't yet)
- goto the preset (global or table) where you want this new Camera view to be saved
- press SHIFT+ENTER
- now you can see *SAVE* appear in the menu
- goto *SAVE* and press ENTER
- do the same for any other presets you want to save this new Camera view to
- exit menu
- press BAM Camera key to cycle to the Global / Table view you want to use

Setting the Camera view you want to 3 different Global Presets should be enough for 95% of the tables out there. (one will work for most tables). I set my 3 global views for:

- table playfield fit perfectly with no apron
- table fit perfectly with apron
- table fit perfectly with apron and lockdown bar (for those tables that have a FIRE / ACTION button on the lockdown bar.

Now the next time you load the table it will use your last selected BAM Camera view! No need for Camera Control Request prompt, etc.

Default CFG:

After making these changes, you can also goto the BAM Menu and "Save as Default", so that your new preferred BAM Camera settings are used. This way, each table loaded for the first time will use these settings, and your new preferred camera view by default!
 
Last edited:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Adding Animated 3d Models
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

I will develop this thread further but for starters here is an excellent summary by Terry Red of the Process.

"
Key to success I have found for getting many characters with animation to work with BAM Model Importer:

- unip the model(s) and textures into a folder
- remove all other model formats except for the Object and mtl file. If there is only an FBX model, we'll try using that.
- you "may" need to import Object model into Milkshape (make any changes you want) and then resave as an Object again
- if you only had an FBX, then import into Milkshape (make any changes you want), then save as a Object
- you MUST edit the mtl file and remove the "paths" for each texture so you only have the texture names being pointed to
- zip up object, mtl, and textures,etc into a single zip file (no folders). No FBX files!
- upload that zip to Mixamo
- you usually know it worked "correctly" because you can see the textures appear on the model (not always the correct brightness, but its fine)
- add your rigging points to the model so it can be setup for animation
- pick your animation
- download as FBX, 30fps, with skin, no feyframe reduction
- import the new FBX model (with the new animation) into Model Importer

Choose each Material layer and add the correct texture:

- you may need to play with this to figure out what textures you need
- you can use milkshape to highlight "groups" for comparison. (Superman model had groups (same as material layers) for arms, legs, head, etc)
- many models come with multiple texture files, some may only come with one
- usually you will choose a coloured texture for each layer's "Diffuse" texture
- once you have all textures looking correctly for all layers, I'd recommend saving to a TGA at this point
- if the model saved to a TGA without causing problems or crashing, then carry on the rest
- now you can try adding any normal / bump map textures for the "Normal" textures
- if that works without Model Importer crashing, then save to TGA again
- if you can't get the model to save to a TGA after adding textures, you may need to go without additional Normal/Bump maps, or may need to reduce the resolution of the textures being used, etc
- you can make changes to each layer's colour, and other settings. Sometimes changing the colour to white makes the model look normal, brighter, etc.

Add additional animations:

- once you have a proven working BAM Custom Model, you can now add additional animations to the same model
- use mixamo to choose another animation with the same model you've been using
- download, and unzip the new FBX model
- with your BAM Custom model still open in Model Importer, now you can "Import Animation" of the new FBX animated model
- this will now be an additional animation added as noted on the bottom of the Window and assigned a new letter
- you can repeat this process to add many more animations
- once you are done, you can save to TGA.

Add Custom Model to Table:

- now add the TGA file to your table in texture Manager, and SAVE the table before adding any code!
- Custom Models need to be saved to the table file before the table is run...otherwise BAM won't see the model when the table starts!
- now you MUST add the required BAM commands to script to add the model (refer to earlier replies in this thread)
- run the table, and use "BAM - Custom Models" menu to position / size the model to where you want it to be
- best to keep height at 0!
- CTRL+C while in this menu, when you are done
- exit table, and in the table script, replace the previous code (to add the Custom Model) with the new code with CTRL+V
- save the table
- add any animation commands you want (read previous posts and look at other examples)
- you may want to add "draw custom models last" command to keep light flares behind the Custom Model . Note: this can cause the Custom Model to appear in front of holograms, and HUDs. You can use additional command parameters to control this more.


Run the table, and enjoy your new animated custom model!

You can now also use a mini playfield to move around the custom model!

Enjoy"
 
Forum activity
Help Users
You can interact with the ChatGPT Bot in any Chat Room and there is a dedicated room. The command is /ai followed by a space and then your ? or inquiry.
ie: /ai What is a EM Pinball Machine?
  • No one is chatting at the moment.
      Chat Bot Mibs Chat Bot Mibs: Beers is our newest member. Welcome!
      Back
      Top