@GeorgeH , thanks for your support and open-mind to see where i want to go.
@shiva , i don't want to reinventing wheel here.
@GeorgeH is right, i search to make as simple as possible how a pinball work with good swing, angle etc, with a minimum "script hack" or fake things. So why make those things meanwhile Ravacarde make the best utility which doing all of that.. It's easy, visual, live.... Change it, see your curve, test is.. all in live.. and save. Ravarcade made the best tool IMO.
What i try to say, it's the fact I come here with my new eyes of a person don't how making table with FP, but know how lot of people criticize his flipper bats physics. Then I see your JG with your new physics and saying, whoaaa!!! Very good work and big step! and then, i discover the charts... It take me 5min to understand how it work and to make a curve meanwhile I don't understand entirely how your script work yet. And it do the same. With charts, no need scripting for all tricks and flipper bats movement. So from my point of view of "newby" in FP, I think the question can be asked to all creator and player. Today i haven't see one table with real flipper bats and swing angle, due to the lack of aiming.. All creator use "extra angle" to "fake" this lack of aiming, in consequence, ball is easy to control, and without talking about realism, it's not fun I think for those who want more real flipper bats and control.
I don't understand why it's complicated to understand, because there is nothing to understand with charts.. Just know how work a coil and make your curve, and adapt it easily according to your preferences. I didn't denigrate your work, on the contrary, i'm admirative for your work, and it's your work with JG which made me interested to FP physics. So please take no offence. I'm very respectfull to you

, and if all creator prefer your version , no problem. I just bring an outside eye and maybe help you to polish your physics.
Also, difference from keyboard don't make the difference.. Flat, mechanical etc... It's an error.. What's it's important, it's the input lag of your devices... From Keyboard to screen. Take exemple on real pinball, each pinball has is own "reaction".. Due to the wear, or the leafswitch space, of the mechanism, you can push more or less the button from one to other, but it doesn't change the diffuclty to make trick. For exemple, take Williams fliptronic with opto button, you need to push a lot the button, but take a pinball with leafswitch, with small space, button are very sensitive, but, it change nothing for making trick.
For my Dynamic Flippers formula, I update it to make correction for aiming.. But the problem is as much a problem of omega along the flip as a friction problem that everyone use... and bad use. And finaly, with my last update, I think when I put an EOS later, maybe we don't need "Dynamic Flipper anymore", or less .
So,
@GeorgeH , the
@shiva code you share from your TZ for omega, it's the same code i update for dynamic flipper, but wrote differentely and more simply. You showed me how to wrote my version of flipper dynamic more simple. Things i do.
You're right too
@GeorgeH for the "jump". It was due to the "1/2" on the end of dynamic flipper formula. It was on the original formulas. I delete it, and now, i made a full verification, and now, it's really good

. I also add point as you suggest. I have made 5 points for the exemple on previous version, so now, i made 13 points... One point each 0.1 along the bats. Now you can make your curve as you want.
One things, as i understand, you, you have jump with your shiva's script on TZ on each point. I don't see any linear interpolation formula for each points/zone. It's like stairs, no? Maybe i miss something.
I also made an option for boucing.. You can choose between the material selected in the editor ( my preference ), the Bounce control, or a specific material that you can edit at line 512.
Here the new code and the new version of table. Note that the xml in script don't work anymore and i don't find why yet.. I have test it on different PC and Pincab. So i give the external XML too.
Thanks to all and your feedback,
JLou
If BAM_VERSION => 254 then
Dim omegaCorrectionL12
Dim omegaCorrectionL23
Dim omegaCorrectionL34
Dim omegaCorrectionL45
Dim omegaCorrectionL56
Dim omegaCorrectionL67
Dim omegaCorrectionL78
Dim omegaCorrectionL89
Dim omegaCorrectionL910
Dim omegaCorrectionL1011
Dim omegaCorrectionL1112
Dim omegaCorrectionL1213
Dim omegaCorrectionR12
Dim omegaCorrectionR23
Dim omegaCorrectionR34
Dim omegaCorrectionR45
Dim omegaCorrectionR56
Dim omegaCorrectionR67
Dim omegaCorrectionR78
Dim omegaCorrectionR89
Dim omegaCorrectionR910
Dim omegaCorrectionR1011
Dim omegaCorrectionR1112
Dim omegaCorrectionR1213
Dim BounceChoice
xBAM.CreateAllExt
xBAM.BallSpeedLimit = 2500
End If
' FLIPPER OMEGA
' You may want to adjust the strength (also called omega) of the flippers when you add dynamic flippers to other tables.
' Only change the values for "MaxOmega" and "MinOmega" These settings override the flipper omega listed in the XML.
' You probably will want to adjust MaxOmega between 40 and 50 and MinOmega between 26 and 33. This is not a strict rule
' but it gives you an idea of approximate values that work for me. You need to leave the section below "MaxOmega2"
' unchanged and then go on to "BOUNCE CONTROL" below.below.
If BAM_VERSION => 254 then
' Omega for each point to separate flippers bats in segment. ( Default value not define yet )
const Omega1 = 60
const Omega2 = 60
const Omega3 = 60
const Omega4 = 65
const Omega5 = 65
const Omega6 = 65
const Omega7 = 65
const Omega8 = 65
const Omega9 = 65
const Omega10 = 50
const Omega11 = 40
const Omega12 = 20
const Omega13 = 20
' Point to define "segment charts" along the flip, 0 for base, 1.2 for tip. ( Default value not define yet )
const Point1 = 0
const Point2 = 0.1
const Point3 = 0.2
const Point4 = 0.3
const Point5 = 0.4
const Point6 = 0.5
const Point7 = 0.6
const Point8 = 0.7
const Point9 = 0.8
const Point10 = 0.9
const Point11 = 1.0
const Point12 = 1.1
const Point13 = 1.2
End If
Dim ball_to_flipper_angle
''''''''''''''''''''''''''''''''''''''''''''Right Flipper Prehit Code'''''''''''''''''''''''''''''''''''''''
Sub RightFlipper_prehit()
OnPreHitFlipperSettings(RightFlipperExt)
'OMEGA CORRECTION FOR EACH SEGMENT ( NEEDED FOR OMEGA*POINT CHART )
omegaCorrectionR12 = Omega1 - (((RightFlipperExt.ContactPoint - point1) / ( Point2 - Point1 )) * (Omega1 - Omega2))
omegaCorrectionR23 = Omega2 - (((RightFlipperExt.ContactPoint - point2) / ( Point3 - Point2 )) * (Omega2 - Omega3))
omegaCorrectionR34 = Omega3 - (((RightFlipperExt.ContactPoint - point3) / ( Point4 - Point3 )) * (Omega3 - Omega4))
omegaCorrectionR45 = Omega4 - (((RightFlipperExt.ContactPoint - point4) / ( Point5 - Point4 )) * (Omega4 - Omega5))
omegaCorrectionR56 = Omega5 - (((RightFlipperExt.ContactPoint - point5) / ( Point6 - Point5 )) * (Omega5 - Omega6))
omegaCorrectionR67 = Omega6 - (((RightFlipperExt.ContactPoint - point6) / ( Point7 - Point6 )) * (Omega6 - Omega7))
omegaCorrectionR78 = Omega7 - (((RightFlipperExt.ContactPoint - point7) / ( Point8 - Point7 )) * (Omega7 - Omega8))
omegaCorrectionR89 = Omega8 - (((RightFlipperExt.ContactPoint - point8) / ( Point9 - Point8 )) * (Omega8 - Omega9))
omegaCorrectionR910 = Omega9 - (((RightFlipperExt.ContactPoint - point9) / ( Point10 - Point9 )) * (Omega9 - Omega10))
omegaCorrectionR1011 = Omega10 - (((RightFlipperExt.ContactPoint - point10) / ( Point11 - Point10 )) * (Omega10 - Omega11))
omegaCorrectionR1112 = Omega11 - (((RightFlipperExt.ContactPoint - point11) / ( Point12 - Point11 )) * (Omega11 - Omega12))
omegaCorrectionR1213 = Omega12 - (((RightFlipperExt.ContactPoint - point12) / ( Point13 - Point12 )) * (Omega12 - Omega13))
'OMEGA*POINT CHART
If RightFlipperExt.ContactPoint < Point1 then RightFlipperExt.Omega = Omega1:End if
If RightFlipperExt.ContactPoint > Point13 then RightFlipperExt.Omega = Omega13:End if
If (RightFlipperExt.ContactPoint => Point1) And (RightFlipperExt.ContactPoint =< Point2) then RightFlipperExt.Omega = omegaCorrectionR12:End if
If (RightFlipperExt.ContactPoint => Point2) And (RightFlipperExt.ContactPoint =< Point3) then RightFlipperExt.Omega = omegaCorrectionR23:End if
If (RightFlipperExt.ContactPoint => Point3) And (RightFlipperExt.ContactPoint =< Point4) then RightFlipperExt.Omega = omegaCorrectionR34:End if
If (RightFlipperExt.ContactPoint => Point4) And (RightFlipperExt.ContactPoint =< Point5) then RightFlipperExt.Omega = omegaCorrectionR45:End if
If (RightFlipperExt.ContactPoint => Point5) And (RightFlipperExt.ContactPoint =< Point6) then RightFlipperExt.Omega = omegaCorrectionR56:End if
If (RightFlipperExt.ContactPoint => Point6) And (RightFlipperExt.ContactPoint =< Point7) then RightFlipperExt.Omega = omegaCorrectionR67:End if
If (RightFlipperExt.ContactPoint => Point7) And (RightFlipperExt.ContactPoint =< Point8) then RightFlipperExt.Omega = omegaCorrectionR78:End if
If (RightFlipperExt.ContactPoint => Point8) And (RightFlipperExt.ContactPoint =< Point9) then RightFlipperExt.Omega = omegaCorrectionR89:End if
If (RightFlipperExt.ContactPoint => Point9) And (RightFlipperExt.ContactPoint =< Point10) then RightFlipperExt.Omega = omegaCorrectionR910:End if
If (RightFlipperExt.ContactPoint => Point10) And (RightFlipperExt.ContactPoint =< Point11) then RightFlipperExt.Omega = omegaCorrectionR1011:End if
If (RightFlipperExt.ContactPoint => Point11) And (RightFlipperExt.ContactPoint =< Point12) then RightFlipperExt.Omega = omegaCorrectionR1112:End if
If (RightFlipperExt.ContactPoint => Point12) And (RightFlipperExt.ContactPoint =< Point13) then RightFlipperExt.Omega = omegaCorrectionR1213:End if
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''Left Flipper PreHit Code'''''''''''''''''''''''''''''
Sub LeftFlipper_prehit()
OnPreHitFlipperSettings(LeftFlipperExt)
'OMEGA CORRECTION FOR EACH SEGMENT ( NEEDED FOR OMEGA*POINT CHART )
omegaCorrectionL12 = Omega1 - (((LeftFlipperExt.ContactPoint - point1) / ( Point2 - Point1 )) * (Omega1 - Omega2))
omegaCorrectionL23 = Omega2 - (((LeftFlipperExt.ContactPoint - point2) / ( Point3 - Point2 )) * (Omega2 - Omega3))
omegaCorrectionL34 = Omega3 - (((LeftFlipperExt.ContactPoint - point3) / ( Point4 - Point3 )) * (Omega3 - Omega4))
omegaCorrectionL45 = Omega4 - (((LeftFlipperExt.ContactPoint - point4) / ( Point5 - Point4 )) * (Omega4 - Omega5))
omegaCorrectionL56 = Omega5 - (((LeftFlipperExt.ContactPoint - point5) / ( Point6 - Point5 )) * (Omega5 - Omega6))
omegaCorrectionL67 = Omega6 - (((LeftFlipperExt.ContactPoint - point6) / ( Point7 - Point6 )) * (Omega6 - Omega7))
omegaCorrectionL78 = Omega7 - (((LeftFlipperExt.ContactPoint - point7) / ( Point8 - Point7 )) * (Omega7 - Omega8))
omegaCorrectionL89 = Omega8 - (((LeftFlipperExt.ContactPoint - point8) / ( Point9 - Point8 )) * (Omega8 - Omega9))
omegaCorrectionL910 = Omega9 - (((LeftFlipperExt.ContactPoint - point9) / ( Point10 - Point9 )) * (Omega9 - Omega10))
omegaCorrectionL1011 = Omega10 - (((LeftFlipperExt.ContactPoint - point10) / ( Point11 - Point10 )) * (Omega10 - Omega11))
omegaCorrectionL1112 = Omega11 - (((LeftFlipperExt.ContactPoint - point11) / ( Point12 - Point11 )) * (Omega11 - Omega12))
omegaCorrectionL1213 = Omega12 - (((LeftFlipperExt.ContactPoint - point12) / ( Point13 - Point12 )) * (Omega12 - Omega13))
'OMEGA*POINT CHART
If LeftFlipperExt.ContactPoint < Point1 then LeftFlipperExt.Omega = Omega1:End if
If LeftFlipperExt.ContactPoint > Point13 then LeftFlipperExt.Omega = Omega13:End if
If (LeftFlipperExt.ContactPoint => Point1) And (LeftFlipperExt.ContactPoint =< Point2) then LeftFlipperExt.Omega = omegaCorrectionL12:End if
If (LeftFlipperExt.ContactPoint => Point2) And (LeftFlipperExt.ContactPoint =< Point3) then LeftFlipperExt.Omega = omegaCorrectionL23:End if
If (LeftFlipperExt.ContactPoint => Point3) And (LeftFlipperExt.ContactPoint =< Point4) then LeftFlipperExt.Omega = omegaCorrectionL34:End if
If (LeftFlipperExt.ContactPoint => Point4) And (LeftFlipperExt.ContactPoint =< Point5) then LeftFlipperExt.Omega = omegaCorrectionL45:End if
If (LeftFlipperExt.ContactPoint => Point5) And (LeftFlipperExt.ContactPoint =< Point6) then LeftFlipperExt.Omega = omegaCorrectionL56:End if
If (LeftFlipperExt.ContactPoint => Point6) And (LeftFlipperExt.ContactPoint =< Point7) then LeftFlipperExt.Omega = omegaCorrectionL67:End if
If (LeftFlipperExt.ContactPoint => Point7) And (LeftFlipperExt.ContactPoint =< Point8) then LeftFlipperExt.Omega = omegaCorrectionL78:End if
If (LeftFlipperExt.ContactPoint => Point8) And (LeftFlipperExt.ContactPoint =< Point9) then LeftFlipperExt.Omega = omegaCorrectionL89:End if
If (LeftFlipperExt.ContactPoint => Point9) And (LeftFlipperExt.ContactPoint =< Point10) then LeftFlipperExt.Omega = omegaCorrectionL910:End if
If (LeftFlipperExt.ContactPoint => Point10) And (LeftFlipperExt.ContactPoint =< Point11) then LeftFlipperExt.Omega = omegaCorrectionL1011:End if
If (LeftFlipperExt.ContactPoint => Point11) And (LeftFlipperExt.ContactPoint =< Point12) then LeftFlipperExt.Omega = omegaCorrectionL1112:End if
If (LeftFlipperExt.ContactPoint => Point12) And (LeftFlipperExt.ContactPoint =< Point13) then LeftFlipperExt.Omega = omegaCorrectionL1213:End if
End Sub
' BOUNCE CONTROL:
Sub OnPreHitFlipperSettings(FlipperExt)
If BAM_VERSION < 254 then Exit Sub
const BounceChoice = 0 ' 0 = using native material for rubber from FP. ( hard,medium,soft rubber depends which one is selected on editor )
' 1 = using specific material. See Line512
' 2 = using Bounce Control weath tweak