• Many thanks to Ian Longstaff for his lovely table roundups, posted on YT. And here is... TABLE ROUND UP NINE!

    Also, here's our browser games collection, for those who are playful.
  • Google Translate to French or Other Languages Click on the link and a new tab will open with this page translated into French.
    Click on the "To:" pull down option to select a different language. Users will not be logged in on the new Google tab.

Tutorial BAM How to add BAM DF1 physics to a Future Pinball table

TerryRed

Pinball Master
How to add BAM DF1 physics to a Future Pinball table

This question comes up a lot, so I figured it was time to make a simple post to show how to add newer (simple) BAM DF1 physics to a Future Pinball table that hasn't been updated to use BAM features.

BAM allows for pretty much all aspects of FP's physics to be opened up and dynamically changed on the fly in table script!


Benefits to adding BAM DF1 physics to a Future Pinball table:

- this can help improve how well many tables will play... in particular the flippers
- flipper accuracy is improved and can be adjusted in the table script
- older BAM xml physics files are no longer required, or used (they will be ignored)
- all the new physics settings are included in the table script!
- no need for any different version of the FuturePinball.exe to change physics (only use the original FuturePinball.exe !!!)


What this guide WONT do:

- make FP tables play the same as VPX tables
- make a table play the same as using shiva flippers
- make the table play the same as the newest FizX physics
- this will make FP tables play better... but not perfect or totally realistic for everyone's preferences


Examples of some tables that will have BAM DF1 physics added already:

- TerryRed's older releases
- SLAMT1LT's Ultimate Pro tables
- table updates from GeorgeH
- table updates from Gimli
- table updates from wild


Keeping it SIMPLE

This is a basic guide that is intended to be simple and easy for most users. It is not going super in depth about the different settings for physics that you can do in the table script.


BAM is Needed!

It goes without saying that you MUST install the latest BAM from here to use these newer physics:




NOT NEEDED FOR ALL TABLES!

Note: this applies only to tables that have NOT been updated already to use BAM physics!




************* HOW IT's DONE *************


Step 1: Copy new BAM physics code into your table


Copy all the code below into your table's script under Option Explicit


Code:
xBAM.CreateAllExt        'create BAM Extension commands. This should be at the top of the script (below Option Explicit)


'###########################################################################################
'#################################### PHYSICS SETTINGS #####################################

'=============================== PHYSICS XML ===========================
'<?xml version="1.0" encoding="utf-8"?>
'<document>
'  <!—Custom Physics  -->
'  <physics fps="296" threaded="1"></physics>
'  <ball newtonDamping="0" mass="70" gravity="6000" damping="0.65"></ball>
'  <flipper releaseOmega="18" rotationSpeedChart="{0.0,100.0}[0.0,100.0]" newtonDamping="1" mass="20150" omega="43" moeMethod="0"
'           leftXoff="0" leftYoff="500" leftZoff="0"
'           rightXoff="0" rightYoff="500" rightZoff="0"></flipper>
'  <bumper impulse="90.0" impulseRandomness="0" vectorRandomness="6"></bumper>
'  <autoplunger mass="20000.0" force="60000.0"></autoplunger>
'  <diverter mass="10000.0" omega="33.0"></diverter>
'  <gate mass="5.0" gravity="2500.0" damping="0.25"></gate>
'  <kicker impulse="1200.0" vukImpulse="1400.0" impulseRandomness="2" vectorRandomness="1"></kicker>
'  <plunger mass="20000.0" force="30000.0"></plunger>
'  <slingshot impulse="650.0" impulseRandomness="15" vectorRandomness="3"></slingshot>
'  <spindisk mass="10000.0" angularDamp="0.33" linearDamp="0.25"></spindisk>
'  <spinner mass="60.0" gravity="100.0" angularDamp="0.25" angularAccel="5.25"
'           spinDampLoose="0.55" spinBackLoose="1.70"
'           spinDampNorm="0.75" spinBackNorm="1.80"
'           spinDampTight="0.95" spinBackTight="1.90"></spinner>
'  <emkicker mass="10000.0" omega="80.0"></emkicker>
'  <varitarget mass="500.0" damping="0.9" tension="3.0" return="15.0"></varitarget>
'  <magnet impulse="10.0" impulseRandomness="2"></magnet>
'  <nudge impulse="240.0" impulseRandomness="25.0" warningLevel="350" leftAngle="60" upAngle="0" rightAngle="320"
'         vectorRandomness="5" visualDistance="3" waitPeriod="300" maxBallVelocity="500.0"></nudge>
'  <defaultMat softnessCoef="0.03" elasticCoef="0.1" staticFriction="0.01" kineticFriction="0.02"></defaultMat>
'  <playfieldMat softnessCoef="0.02" elasticCoef="0.1" staticFriction="0.01" kineticFriction="0.02"></playfieldMat>
'  <metalMat softnessCoef="0.01" elasticCoef="0.15" staticFriction="0.02" kineticFriction="0.02"></metalMat>
'  <woodMat softnessCoef="0.03" elasticCoef="0.15" staticFriction="0.03" kineticFriction="0.02"></woodMat>
'  <plasticMat softnessCoef="0.02" elasticCoef="0.2" staticFriction="0.02" kineticFriction="0.01"></plasticMat>
'  <rubberHardMat softnessCoef="0.08" elasticCoef="0.50" staticFriction="0.04" kineticFriction="0.055"></rubberHardMat>
'  <rubberIntMat softnessCoef="0.1" elasticCoef="0.72" staticFriction="0.05" kineticFriction="0.065"></rubberIntMat>
'  <rubberSoftMat softnessCoef="0.12" elasticCoef="0.83" staticFriction="0.06" kineticFriction="0.075"></rubberSoftMat>
'  <gateMat softnessCoef="0.05" elasticCoef="0.65" staticFriction="0" kineticFriction="0"></gateMat>
'  <kickerMat softnessCoef="0.01" elasticCoef="0.05" staticFriction="0.8" kineticFriction="0.8"></kickerMat>
'  <rampMat softnessCoef="0.01" elasticCoef="0.01" staticFriction="0.01" kineticFriction="0.01"></rampMat>
'  <plungerMat softnessCoef="0.04" elasticCoef="0.55" staticFriction="0.02" kineticFriction="0.02"></plungerMat>
'  <spindiskMat softnessCoef="0.05" elasticCoef="0.5" staticFriction="1.5" kineticFriction="2"></spindiskMat>
'</document>
'=============================== PHYSICS XML ===========================


' === Dynamic Flipper Settings ===

Const BAM_VERSION = 0

AddDebugText "BAM Version: " & BAM_VERSION

Dim RightFlipperExt,LeftFlipperExt
Dim omegaCorrectionR
Dim omegaCorrectionL

xBAM.BallSpeedLimit = 3000

Sub OnPreHitFlipperSettings(FlipperExt)
    OnPreHitFlipperSettings_bounceControl(FlipperExt)
End Sub

const MaxOmega  = 45  ' Omega at base of flipper.  Must be > MinOmega. Default = 45
const MinOmega  = 32  ' Omega at tip of flipper. Must be < MaxOmega. Default = 32

Sub LeftFlipper_prehit()
   OnPreHitFlipperSettings(LeftFlipperExt)
      omegaCorrectionL = MaxOmega - (LeftFlipperExt.ContactPoint * ((MaxOmega - MinOmega)/1.2))
      If LeftFlipperExt.ContactPoint < 0.0 then LeftFlipperExt.Omega = MaxOmega
      If LeftFlipperExt.ContactPoint > 1.2 then LeftFlipperExt.Omega = MinOmega
      If (LeftFlipperExt.ContactPoint => 0.0) And (LeftFlipperExt.ContactPoint =< 1.2) then
         LeftFlipperExt.Omega = omegaCorrectionL
      End if
End Sub

Sub RightFlipper_prehit()
   OnPreHitFlipperSettings(RightFlipperExt)
   omegaCorrectionR = MaxOmega - (RightFlipperExt.ContactPoint * ((MaxOmega - MinOmega)/1.2))
      If RightFlipperExt.ContactPoint < 0.0 then RightFlipperExt.Omega = MaxOmega
      If RightFlipperExt.ContactPoint > 1.2 then RightFlipperExt.Omega = MinOmega
      If (RightFlipperExt.ContactPoint => 0.0) And (RightFlipperExt.ContactPoint =< 1.2) then
         RightFlipperExt.Omega = omegaCorrectionR
      End if
End Sub

Sub OnPreHitFlipperSettings_bounceControl(FlipperExt)
   ' PARAMETERS TO TWEAK
   const base_elasticCoef                        = 0.70 ' very bouncy flipper rubber
   const expected_ball_speed_after_hit           = 300  ' calc elasticCoef to get desired ball speed after ball hit flipper
   const minimum_elasticCoef_to_scale_fast_balls = 0.15 ' we will add this to calculated elastiCoef, so ball after hit will have aditional 5% of speed before hit
   const reduction_for_flipper_in_motion         = 0.15 ' if flipper is not in starting point, reduce elasticCoef by 20%

   If FlipperExt.Hit Then
      Dim elasticCoef
      Dim maxElasticCoef
      Dim ballSpeed
      ballSpeed = (FlipperExt.BallVSpeed + xBAM.Ball.Speed) * 0.5 ' averge speed of

      maxElasticCoef = base_elasticCoef
      If FlipperExt.AngleDiff > 1 Then maxElasticCoef = maxElasticCoef - reduction_for_flipper_in_motion

      elasticCoef = base_elasticCoef
      If ballSpeed > 1 Then elasticCoef = expected_ball_speed_after_hit / ballSpeed
      elasticCoef = elasticCoef + minimum_elasticCoef_to_scale_fast_balls

      If elasticCoef > maxElasticCoef Then elasticCoef = maxElasticCoef

      FlipperExt.SetMaterial elasticCoef
   End If
End Sub

' ========= End of Dynamic Flipper Settings ===========


'############################### END OF  PHYSICS SETTINGS ###################################
'############################################################################################




Step 2: Make changes to the table editor

Save the table first!

Now you will need to make changes to the table in the editor. This is important to allow the table to match the newer physics.

I'm using Star Wars (Ultimate Pro) as an example. You can use other updated tables as well for reference.

Some of these may not need adjusting... but others will need to be based on your slope settings.


Adjust the table slope:

This will help the ball feel less floaty, and give it more weight. You will want to adjust this to your liking.

1605297151705.png



Adjust the Flippers

You can adjust the Strength and Elasticity. Note, that you will want to adjust this based on any changes you make in the Dynamic Flippers section in the table script.


1605297235778.png



Adjust the Slingshots (only if needed)


1605297788043.png



Adjust the Bumpers (only if needed)


1605298541491.png



Adjust Kickers (only if needed)


1605298871254.png



Autoplunger / Plunger

These may need adjusting to compensate for changes to slope.


1605298959685.png




Dynamic Flippers Code

- this is where you can adjust BAM dynamic flippers
- you may not need to make any adjustments
- the PARAMETERS TO TWEAK section is where you would typically make any changes
- @GeorgeH and @Gimli and @ravarcade would know how this all works much better than me


1605302742588.png




XML CODE

- this is FP's basic physics settings
- BAM used to load this from an xml file, but now we include it in the table script
- you can make changes to this section
- even though it's green and commented out, BAM will still understand it

1605302978051.png




Step 3 - Fine tune everything

- only adjust things if you feel you need to
- start with the slope adjustment for ball weight / speed preference
- adjust flippers in the editor / dynamic flipper section in the script if needed
- for many tables these are the main things that need adjusting
- then follow up with the rest as desired / needed
- you can make changes to the green xml code in the Physics Section of the table script if desired



SAVE THE TABLE, CLOSE FP and RELOAD!

- reloading the table over and over again (without closing FP) may cause it to run strangely or crash
- after making changes... SAVE the table... CLOSE FP and reload the table again to test!



Keep in mind, not all tables are the same!

Some tables will have better results than others based on how the author created it.

Some tables will need additional adjustments to geometry, or need hidden surfaces added to keep the ball under control, etc... but that is for more advanced updates!



I'm not a Physics guy!

Guys like @GeorgeH, @Gimli, and @ravarcade have a much better understanding of adjusting DF1 and xml code!



Another tutorial:

What are the chances of this happening... and on the same afternoon! I started typing this in the morning due to many requests on other groups.... and just as I posted this.... I noticed @GeorgeH posted his own tutorial for adding BAM physics to a table in the same afternoon!

Guess great minds think alike!

If you want a tutorial that explains more detail about the xml code and dynamic flippers, goto George's post here. He's more knowledgeable on the topic than I am!





===============================================================



DF1 physics are NOT the newest / most realistic physics for FP:

- DF1 is a "simple" update to improve older FP tables, and it's a great "quick fix"
- however it's not even close to the same level of physics as used in Shiva Flippers or the newest FizX physics
- both of these require more advanced implementation and knowledge to add to any table

For more information about Shiva Flippers, go here:


For an example of FizX physics (formerly known as DFv2/DPv1, created by JLou), the first table publicly released that uses it can be seen here:




===============================================================
 

Attachments

  • 1605298612526.png
    1605298612526.png
    295.8 KB · Views: 117
  • 1605298750412.png
    1605298750412.png
    289.8 KB · Views: 124
Last edited:

freebird1963

Pinball Wizard
Thanks. Gave this a try on the Wiz of OZ by Granit,Akira, ghostmachine. Made it more fun to play.
Question when doing the changes to the components i.e. bumpers, slingshots etc do you have to click every bumper/slingshot and change or does a change effect them all of that category ?
Is there a way to same time test ? In other words make a change and see how it results or have to save,restart and play to check ?
Thanks again.
 

GeorgeH

Flippered Out
Staff member
Site Supporters
You guys are acting like you need to become physics experts. I actually tested 20 tables but only 2 needed additional adjustments. Terry linked to my guide where I explain some of the the changes you can make but the changes are usually the exception and not the rule. My XML is a bit different than Terry's so you might try it.
 

freebird1963

Pinball Wizard
I am a physics expert. I spent the night at the Holiday Inn Express... Not sure what makes you think that I was asking cuz I like to see the ball fly around like super speed. You say you tested 20 tables. Which ones for curiousity. Ones I want to change are older ones from like 2010 and the ball moves so slow and the bumpers barely bump. And it seems like Big Balls were the trending style back then.
SO its not physics expert its difference in game playing.
I tried yours. see post over there.
 

TerryRed

Pinball Master
Yes, you need to adjust settings for each component in the editor (each bumper, each flipper, etc) as needed, as they may vary depending on what you want.

Many older FP tables were made with the expectation that you would be using a hacked futurepinball.exe with a different set of physics settings. That's why when you try some of those tables today, they play horribly (slow... some items barely work, etc) because we don't use hacked exes anymore, and they are using the wrong physics intended for the table. That's like taking a VP8 table and expecting it to work in VPX without needing any changes.

This post is about adding in simple DF1 physics (dynamic flippers 1).

Its not about adding newer more advanced shiva flippers (read the shiva flippers topic on this site for more info)...

...nor does it cover the newest FizX physics (formerly known as DFv2 / DPv1) being worked on that is used in Cosmic Princess as an example.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • @ freebird1963:
    *** ******* ** *** **** **** ** **** ** **** *** *** **** * * ***** *** *** ***** ** ******** ***** **
    Quote
    @ freebird1963: *** ******* ** *** **** **** ** **** ** **** *** *** **** * * ***** *** *** ***** ** ********...
    Top