# BAM rotationSpeedChart

#### JLou5641

##### Pinball Wizard
Sorry i'm lost now.

Are we talking about live catch? Then using speed is irrelevant because it can be done at any ball speed. If done this way it'll feel very artificial.

If the above is just for the flick when flipper up then use Sub OnPrehitFlipperSettings(FlipperEXT) and the elastCoef in there

Code:
``````Const FlipperSwing = 50   ' this has to match the editor settings. Fixed value
Const EOS_Angle = 5        ' define the EOS activation angles. Fixed value

'  ^ -- set this as global not inside the Sub.

'  v -- set this inside the Sub

If abs (FlipperExt.Angle) >= (FlipperSwing - EOS_Angle) Then
'     for reference elasticCoef, softnessCoef, staticFriction, kineticFriction
FlipperEXT.SetMaterial = elasticCoef    ' where elasticCoef must be a low bounce number
End If``````

Apologies for mistakes in coding as I did not test. I'm just brain dumping ideias.
I have found the formulas don't work in a way that it appears they would. I tried substituting values in the formulas and this is what I got:

omegaCorrectionR12 = 70 - (from 0 to .25 * ((70 - 70)/1.2)) -- creates omegas from 70 to 70
omegaCorrectionR23 = 70 - (from .25 to .6 * ((70 - 70)/1.2)) -- creates omegas from 70 to 70
omegaCorrectionR34 = 70 - (from .6 to .75 * ((70 - 40)/1.2)) -- creates omegas from 55 to 51.25
omegaCorrectionR45 = 40 - (from .75 to 1.2 * ((40 - 20)/1.2)) -- creates omegas from 27.5 to 20

The bolded values are a range of contact points (just solve for the low and high number). As you can see the omegas jump immediately from 27.5 to 51.25 and then from 55 to 70.

Am I wrong or missing something?
Hi @AnonTet , Hi @GeorgeH ,

Happy you work on it with me. So i'm busy now, i will answer you this afternoon ( from France )  #### AnonTet

##### Pinball Hall of Famer
Site Supporters
Don't sweat it. Allergies are killing me these days so I can't do much.

By the way, you are far in distance but if you use time, it is just 1h difference :)

• JLou5641

#### AnonTet

##### Pinball Hall of Famer
Site Supporters
Just a note to say i've edited the post on previous page to change flipperEXT.Angle to flipperEXT.AngleDiff

#### JLou5641

##### Pinball Wizard
Sorry i'm lost now.

Are we talking about live catch? Then using speed is irrelevant because it can be done at any ball speed. If done this way it'll feel very artificial.

If the above is just for the flick when flipper up then use Sub OnPrehitFlipperSettings(FlipperEXT) and the elastCoef in there

Code:
``````Const FlipperSwing = 50   ' this has to match the editor settings. Fixed value
Const EOS_Angle = 5        ' define the EOS activation angles. Fixed value

'  ^ -- set this as global not inside the Sub.

'  v -- set this inside the Sub

If abs (FlipperExt.AngleDiff) >= (FlipperSwing - EOS_Angle) Then
'     for reference elasticCoef, softnessCoef, staticFriction, kineticFriction
FlipperEXT.SetMaterial = elasticCoef    ' where elasticCoef must be a low bounce number
End If``````

Apologies for mistakes in coding as I did not test. I'm just brain dumping ideias.

Edited because it should be FlipperExt.AngleDiff and not flipperEXT.Angle. .AngleDiff shows the flipper angle difference which is easier to use, i.e., 48, 50, 53... whatever is set. Yeah I know it's a bit misleading but also makes sense.
Hi,

@AnonTet
i don't find how to use it corrrectly.
So using speed is the good thing IMO. Because it's what to do in real or in VPX. In VPX we setup a fall off value for the EOS angle, that divide the force. So when there is a ball on the flipper bats, it's loosing speed on the last 5°.. And it change the amaing too. So it affect all the ball all the time.
But in FP, flipper bats don't have inertia.. and if you set less omega, flipper bats slow down even if there is no ball on... so we can fake this with the mass... With a lighter flipper bats, it keeps his move fast move from the omega until there is a ball on.. But when a ball touch it, it slow down... The problem when i test it, when the ball take lot of velocity and inertia, it's like a very strong mass, and the flip go down an make a full circle lol. But maybe if there is a script for the only 5°, it stop to ramp down when it came back under 43° with his original mass.

If this can't work, we could fake this by using elasticity trick.

I have found the formulas don't work in a way that it appears they would. I tried substituting values in the formulas and this is what I got:

omegaCorrectionR12 = 70 - (from 0 to .25 * ((70 - 70)/1.2)) -- creates omegas from 70 to 70
omegaCorrectionR23 = 70 - (from .25 to .6 * ((70 - 70)/1.2)) -- creates omegas from 70 to 70
omegaCorrectionR34 = 70 - (from .6 to .75 * ((70 - 40)/1.2)) -- creates omegas from 55 to 51.25
omegaCorrectionR45 = 40 - (from .75 to 1.2 * ((40 - 20)/1.2)) -- creates omegas from 27.5 to 20

The bolded values are a range of contact points (just solve for the low and high number). As you can see the omegas jump immediately from 27.5 to 51.25 and then from 55 to 70.

Am I wrong or missing something?

@GeorgeH ,

Why formulas doesn't work well according to you? Do you notice a problem when you test it?
As I understand, the orignal forumlas calculate the new value at the coordonate contact point like and linear interpolation.
In your formula, effectively the value jump. It's not we need.

However, the aiming problem in FP is also due to all creator use "icy" flipper bats, with only few more friction than PF... This is not the good way. Rubber have strong friction. Like your tire on the road, and maybe more. In VPX we have the same problem from old table that have too low friction. Try a test on a table with 1 to 4 in kinetic and static friction. It's change the aimshoot, and also, give a better movement when you control the ball, like "retro" effect. But problem, when you change value in BAM menu, it doesn't work, each time you set up new value, it work only for one "kick", and then it come back to the default value, meanwhile, if you test it on a blank new table, it work.. Make a test with a new blank table, my charts from AFM, set flipper bats friction 1 to 4 and see the difference.

So, i think we are all on the good way

Cheers,
JLou

Last edited:

#### GeorgeH

##### Flippered Out
Staff member
Site Supporters
Why formulas doesn't work well according to you?
There are huge jumps in the omegas from 27.5 to 51.25 and then from 55 to 70.
Do you notice a problem when you test it?
It seemed odd but wasn't sure what it was.
As I understand, the orignal forumlas calculate the new value at the coordonate contact point like and linear interpolation.
These are the formulas I used on Space Shuttle:

const MinOmega = 31
const MaxOmega = 47

OnPreHitFlipperSettings(RgFlipperExt)
omegaCorrectionr = MaxOmega - (RgFlipperExt.ContactPoint * ((MaxOmega - MinOmega)/1.2))
If RgFlipperExt.ContactPoint < 0.0 then RgFlipperExt.Omega = MaxOmega
If RgFlipperExt.ContactPoint > 1.2 then RgFlipperExt.Omega = MinOmega
If (RgFlipperExt.ContactPoint => 0.0) And (RgFlipperExt.ContactPoint =< 1.2) then
RgFlipperExt.Omega = omegaCorrectionr

This is what I get when I substitute the values for the constants in the formula.

 omegaCorrectionr = 47 - (from 0 to 1.2 * ((47 - 31)/1.2)) -- creates omegas from 31 to 47 which are the same as the min and max values with no huge jumps in values.

If the contact point happens to be 0.6 then
omegaCorrectionr = 47 - (0.6 * ((47 - 31)/1.2))
omegaCorrectionr = 39 (midpoint between 31 and 47)

So the code works like this:

If Contact Point < 0.0 then omega = 47
If Contact Point => 0 and =<1.2 then a range is calculated between 47 and 31
If Contact Point > 1.2 then omega =31

• JLou5641

#### AnonTet

##### Pinball Hall of Famer
Site Supporters
@JLou5641

you mean like this code from Rav?

You'll have to play with it and mix it with the speedcharts and whatever code you are tweaking now (dynamic flippers / shivaflippers /nothing but the XML)

Code:
``````Dim flippers(2) ' array for 2 flippers.... and few more array
Dim flipperAngle(2)
Dim flipperOmega(2)
Dim flipperMass(2)
Dim flipperSolenoid(2)
Dim flipperFP(2)
Dim flipperDelay(2)
Dim isInitialized : isInitialized = False
Const FlipperSwing = 52 ' value for new table in FP
Const EOS = 0.5

Set flippers(1) = LeftFlipperExt
Set flippers(2) = RightFlipperExt
Set flipperFP(1) = LeftFlipper
Set flipperFP(2) = RightFlipper
' Add here more flippers if present

Sub Initialize
' We need to delay intialization for few first frames
If xBAM.NewtonCounter < 20 Then Exit Sub

Dim i
For i = 1 To UBound(flippers)
' store few params for flippers
flipperAngle(i) = flippers(i).Angle
flipperOmega(i) = 80 ' flippers(i).Omega
flipperMass(i) = flippers(i).Mass
flipperDelay(i) = -1
AddDebugText i & " > " & flippers(i).Angle
Next
isInitialized = True
End Sub

Sub NewtonPhysicsTick
If isInitialized = False Then
Initialize()
Else
Dim i, angle
For i = 1 To UBound(flippers)
angle = Abs(flipperAngle(i) - flippers(i).Angle)
If angle > FlipperSwing - EOS Then
' Slow down
flippers(i).Mass = flipperMass(i) * 0.0005 ' 0.05%. default mass = 20000, so = 10, Ball mass = 18
Else
flippers(i).Omega = flipperOmega(i) * 1.0 ' 100%
If flippers(i).Mass < flipperMass(i) * 0.9 And flipperSolenoid(i) Then
flipperDelay(i) = 10 ' = ~39ms, Physics FPS = 256, so 10/256 = ~39ms
End If
flippers(i).Mass = flipperMass(i) * 1.0 ' 100%
End If

If flipperDelay(i) >= 0 And flipperSolenoid(i) Then
flipperDelay(i) = flipperDelay(i) - 1
If flipperDelay(i) = -1 Then
' params for on physics sim frame: 3% Omega, 1% Mass... we don't want throw away ball
flippers(i).Omega = flipperOmega(i) * 0.03 ' 3%
flippers(i).Mass = flipperMass(i) * 0.01 ' 1%
flipperFP(i).SolenoidOn()
End If
Else
flipperDelay(i) = -1
End If
Next
End If
End Sub``````

You have to adjust values and play with it.

• JLou5641

#### GeorgeH

##### Flippered Out
Staff member
Site Supporters
Interesting. Where did Rav post this code? I can't say I have ever seen it before.

#### JLou5641

##### Pinball Wizard
There are huge jumps in the omegas from 27.5 to 51.25 and then from 55 to 70.

It seemed odd but wasn't sure what it was.

These are the formulas I used on Space Shuttle:

const MinOmega = 31
const MaxOmega = 47

OnPreHitFlipperSettings(RgFlipperExt)
omegaCorrectionr = MaxOmega - (RgFlipperExt.ContactPoint * ((MaxOmega - MinOmega)/1.2))
If RgFlipperExt.ContactPoint < 0.0 then RgFlipperExt.Omega = MaxOmega
If RgFlipperExt.ContactPoint > 1.2 then RgFlipperExt.Omega = MinOmega
If (RgFlipperExt.ContactPoint => 0.0) And (RgFlipperExt.ContactPoint =< 1.2) then
RgFlipperExt.Omega = omegaCorrectionr

This is what I get when I substitute the values for the constants in the formula.

 omegaCorrectionr = 47 - (from 0 to 1.2 * ((47 - 31)/1.2)) -- creates omegas from 31 to 47 which are the same as the min and max values with no huge jumps in values.

If the contact point happens to be 0.6 then
omegaCorrectionr = 47 - (0.6 * ((47 - 31)/1.2))
omegaCorrectionr = 39 (midpoint between 31 and 47)

So the code works like this:

If Contact Point < 0.0 then omega = 47
If Contact Point => 0 and =<1.2 then a range is calculated between 47 and 31
If Contact Point > 1.2 then omega =31
Hi @GeorgeH ,

ooooh you are right, i make a mistake! Because it calculate a new omega for a zone, with coordonate that taken from the full flipper... And it's wrong because it's like each eache zone is calculate on all the flipper zone... I don't understood it when you try to explain it to me... Barrier language . So the contact point need to be recalculate with linera interpolation for each zone to make it like it begin from 0 and finish to 1 on each zone.. The formula to calculate new coordonate will be this for the second zone ( 0.25 to 0.6 )for ex:

NewContactPoint= ((( 0.6-Contactpoint)/(0.6-0.25))*0)+(((Contactpoint-0.25)/(0.6-0.25))*1)

So, this is can be simplified by: NewContactpoint=(Contactpoint-0.25)/(0.6-0.25)

Ex: The midlle of the second zone for ex is at 0.425.. so 0.425-0.25=0.175, 0.6-0.25=0.35 and then 0.175/0.35=0.5 ... so it's also the middle between 0 and 1 to calculate good new omega for the zone like the full flip with standard formula .. I will update the script later today Hi @AnonTet ,

Great!!!! As i try to uderstand, it's that :) . Did Ravarcad just did it, or it a script already exist ?
Also, with an eos, we can give more power to the bats before the EOS range, without give extra velocity to the ball when you make backhands for exemple.

Greatings,
JLou

Last edited:

#### AnonTet

##### Pinball Hall of Famer
Site Supporters
• JLou5641

#### JLou5641

##### Pinball Wizard
I update the Dynamic Flipper whit the point recalculation for each zone. Now it work like it should be.
@AnonTet , @GeorgeH , i need your opinion ( if you can and if you want ) and your "default setup" if you want to make feedback.
I added option in script to define each point for making zone you can change "on the fly" just below the omega lines. Now you can easily change in script your "charts omega" along the bats near like you can make it in BAM menu for the Omega Ramp Up and Ramp Down.
Also, I make bunch of test... tone of test.... I ask you to test my new version without looking at what I could have changed ... You will see that center shoot are natural, and ball control is more difficult.... all that with flipper bats at 48°... Ball play more themself on flipper bats. I think it's a good step and i know its more close to VPX now. For sure, it needed to be working more.

I have a problem, now it need the XML to use the physics.. I don't know why... It didn't read the physics in script

I don't put in the rav EOS script for now. See it later. Mayby you could add this.

@GeorgeH , I tested you TZ table, you don't use my last and updated charts, especilally for Coil Ramp Down.

The updates Table in on the attach files

Here the new code for Dynamic Flipper:

' 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 4 "zones". Possiblity to make flipper bats omega as "curve", "flat", "exponential" to correct the shoot aiming.
const Omega1 = 60 ' Omega at base "zone 1" of flipper. Must be < MaxOmega. Default = need to be define
const Omega2 = 65 ' Omega at base/middle "zone 1/2" of flipper. Must be < MaxOmega. Default = need to be define
const Omega3 = 65 ' Omega at middle/end "zone 2/3" of flipper. Must be < MaxOmega. Default = need to be define
const Omega4 = 40 ' Omega at middle/tip "zone 3/4"of flipper. Must be < MaxOmega. Default = need to be define
const Omega5 = 20 ' Omega at tip of flipper "zone 4". Must be > MinOmega. Default = need to be define

' Point to define "each 4 zone" along the flip, 0 for base, 1.2 for tip.
const Point1 = 0
const Point2 = 0.25
const Point3 = 0.7
const Point4 = 0.8
const Point5 = 1.2

' FOR HELP TO CALCULATE CONTACT POINT 0 TO 1 O EACH ZONE BY LINEAR INTERPOLATION

' RFContactpoint12 = ((RightFlipperExt.ContactPoint - point1) / ( Point2 - Point1 ))
' RFContactpoint23 = ((RightFlipperExt.ContactPoint - point2) / ( Point3 - Point2 ))
' RFContactpoint34 = ((RightFlipperExt.ContactPoint - point3) / ( Point4 - Point3 ))
' RFContactpoint45 = ((RightFlipperExt.ContactPoint - point4) / ( Point5 - Point4 ))

' LFContactpoint12 = ((LeftFlipperExt.ContactPoint - point1) / ( Point2 - Point1 ))
' LFContactpoint23 = ((LeftFlipperExt.ContactPoint - point2) / ( Point3 - Point2 ))
' LFContactpoint34 = ((LeftFlipperExt.ContactPoint - point3) / ( Point4 - Point3 ))
' LFContactpoint45 = ((LeftFlipperExt.ContactPoint - point4) / ( Point5 - Point4 ))

End If

Dim ball_to_flipper_angle
''''''''''''''''''''''''''''''''''''''''''''Right Flipper Prehit Code'''''''''''''''''''''''''''''''''''''''

Sub RightFlipper_prehit()

OnPreHitFlipperSettings(RightFlipperExt)
omegaCorrectionR12 = Omega1 - (((RightFlipperExt.ContactPoint - point1) / ( Point2 - Point1 )) * ((Omega1 - Omega2)/1.2))
omegaCorrectionR23 = Omega2 - (((RightFlipperExt.ContactPoint - point2) / ( Point3 - Point2 )) * ((Omega2 - Omega3)/1.2))
omegaCorrectionR34 = Omega3 - (((RightFlipperExt.ContactPoint - point3) / ( Point4 - Point3 )) * ((Omega3 - Omega4)/1.2))
omegaCorrectionR45 = Omega4 - (((RightFlipperExt.ContactPoint - point4) / ( Point5 - Point4 )) * ((Omega4 - Omega5)/1.2))
If RightFlipperExt.ContactPoint < Point1 then RightFlipperExt.Omega = Omega1
If RightFlipperExt.ContactPoint > Point5 then RightFlipperExt.Omega = Omega5
If (RightFlipperExt.ContactPoint => Point1) And (RightFlipperExt.ContactPoint =< Point2) then
RightFlipperExt.Omega = omegaCorrectionR12
Else
If (RightFlipperExt.ContactPoint => Point2) And (RightFlipperExt.ContactPoint =< Point3) then
RightFlipperExt.Omega = omegaCorrectionR23
Else
If (RightFlipperExt.ContactPoint => Point3) And (RightFlipperExt.ContactPoint =< Point4) then
RightFlipperExt.Omega = omegaCorrectionR34
Else
If (RightFlipperExt.ContactPoint => Point4) And (RightFlipperExt.ContactPoint =< Point5) then
RightFlipperExt.Omega = omegaCorrectionR45
End If
End If
End iF
End if

End Sub

'''''''''''''''''''''''''''''''''''''''''''''''Left Flipper PreHit Code'''''''''''''''''''''''''''''

Sub LeftFlipper_prehit()

OnPreHitFlipperSettings(LeftFlipperExt)
omegaCorrectionL12 = Omega1 - (((LeftFlipperExt.ContactPoint - point1) / ( Point2 - Point1 )) * ((Omega1 - Omega2)/1.2))
omegaCorrectionL23 = Omega2 - (((LeftFlipperExt.ContactPoint - point2) / ( Point3 - Point2 )) * ((Omega2 - Omega3)/1.2))
omegaCorrectionL34 = Omega3 - (((LeftFlipperExt.ContactPoint - point3) / ( Point4 - Point3 )) * ((Omega3 - Omega4)/1.2))
omegaCorrectionL45 = Omega4 - (((LeftFlipperExt.ContactPoint - point4) / ( Point5 - Point4 )) * ((Omega4 - Omega5)/1.2))
If LeftFlipperExt.ContactPoint < Point1 then LeftFlipperExt.Omega = Omega1
If LeftFlipperExt.ContactPoint > Point5 then LeftFlipperExt.Omega = Omega5
If (LeftFlipperExt.ContactPoint => Point1) And (LeftFlipperExt.ContactPoint =< Point2) then
LeftFlipperExt.Omega = omegaCorrectionL12
Else
If (LeftFlipperExt.ContactPoint => Point2) And (LeftFlipperExt.ContactPoint =< Point3) then
LeftFlipperExt.Omega = omegaCorrectionL23
Else
If (LeftFlipperExt.ContactPoint => Point3) And (LeftFlipperExt.ContactPoint =< Point4) then
LeftFlipperExt.Omega = omegaCorrectionL34
Else
If (LeftFlipperExt.ContactPoint => Point4) And (LeftFlipperExt.ContactPoint =< Point5) then
LeftFlipperExt.Omega = omegaCorrectionL45
End IF
End If
End If
End if

End Sub

#### Attachments

• Attack From Mars ULTIMATE 1.02-2 Rotational Flippers JLOU v2.zip
47.6 MB · Views: 17

#### AnonTet

##### Pinball Hall of Famer
Site Supporters
@JLou5641

Before I do anything, I noticed you have a .xml with the physics. This is a problem because you have another XML inside the script and I don't know which will take precedence. So If I play this table I'm sure i'll be giving you wrong feedback.

Here's 2 ways to solve this:

If you want us to test the table with the physics on the file, let us know so we delete the commented XML from the script.

Tips:
When working on physics, don't save the XML to file in BAM menu. Simply press CTRL+SHIFT+C and you'll get the commented physics that you can paste directly into the table script. It is supposed to be commented, don't worry about that.

So, let us know what we should use. I won't touch anything before that.

• JLou5641

#### GeorgeH

##### Flippered Out
Staff member
Site Supporters
I update the Dynamic Flipper whit the point recalculation for each zone. Now it work like it should be.
@AnonTet , @GeorgeH , i need your opinion ( if you can and if you want ) and your "default setup" if you want to make feedback.
I added option in script to define each point for making zone you can change "on the fly" just below the omega lines. Now you can easily change in script your "charts omega" along the bats near like you can make it in BAM menu for the Omega Ramp Up and Ramp Down.
Also, I make bunch of test... tone of test.... I ask you to test my new version without looking at what I could have changed ... You will see that center shoot are natural, and ball control is more difficult.... all that with flipper bats at 48°... Ball play more themself on flipper bats. I think it's a good step and i know its more close to VPX now. For sure, it needed to be working more.

I have a problem, now it need the XML to use the physics.. I don't know why... It didn't read the physics in script

I don't put in the rav EOS script for now. See it later. Mayby you could add this.

@GeorgeH , I tested you TZ table, you don't use my last and updated charts, especilally for Coil Ramp Down.

The updates Table in on the attach files

Here the new code for Dynamic Flipper:

' 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 4 "zones". Possiblity to make flipper bats omega as "curve", "flat", "exponential" to correct the shoot aiming.
const Omega1 = 60 ' Omega at base "zone 1" of flipper. Must be < MaxOmega. Default = need to be define
const Omega2 = 65 ' Omega at base/middle "zone 1/2" of flipper. Must be < MaxOmega. Default = need to be define
const Omega3 = 65 ' Omega at middle/end "zone 2/3" of flipper. Must be < MaxOmega. Default = need to be define
const Omega4 = 40 ' Omega at middle/tip "zone 3/4"of flipper. Must be < MaxOmega. Default = need to be define
const Omega5 = 20 ' Omega at tip of flipper "zone 4". Must be > MinOmega. Default = need to be define

' Point to define "each 4 zone" along the flip, 0 for base, 1.2 for tip.
const Point1 = 0
const Point2 = 0.25
const Point3 = 0.7
const Point4 = 0.8
const Point5 = 1.2

' FOR HELP TO CALCULATE CONTACT POINT 0 TO 1 O EACH ZONE BY LINEAR INTERPOLATION

' RFContactpoint12 = ((RightFlipperExt.ContactPoint - point1) / ( Point2 - Point1 ))
' RFContactpoint23 = ((RightFlipperExt.ContactPoint - point2) / ( Point3 - Point2 ))
' RFContactpoint34 = ((RightFlipperExt.ContactPoint - point3) / ( Point4 - Point3 ))
' RFContactpoint45 = ((RightFlipperExt.ContactPoint - point4) / ( Point5 - Point4 ))

' LFContactpoint12 = ((LeftFlipperExt.ContactPoint - point1) / ( Point2 - Point1 ))
' LFContactpoint23 = ((LeftFlipperExt.ContactPoint - point2) / ( Point3 - Point2 ))
' LFContactpoint34 = ((LeftFlipperExt.ContactPoint - point3) / ( Point4 - Point3 ))
' LFContactpoint45 = ((LeftFlipperExt.ContactPoint - point4) / ( Point5 - Point4 ))

End If

Dim ball_to_flipper_angle
''''''''''''''''''''''''''''''''''''''''''''Right Flipper Prehit Code'''''''''''''''''''''''''''''''''''''''

Sub RightFlipper_prehit()

OnPreHitFlipperSettings(RightFlipperExt)
omegaCorrectionR12 = Omega1 - (((RightFlipperExt.ContactPoint - point1) / ( Point2 - Point1 )) * ((Omega1 - Omega2)/1.2))
omegaCorrectionR23 = Omega2 - (((RightFlipperExt.ContactPoint - point2) / ( Point3 - Point2 )) * ((Omega2 - Omega3)/1.2))
omegaCorrectionR34 = Omega3 - (((RightFlipperExt.ContactPoint - point3) / ( Point4 - Point3 )) * ((Omega3 - Omega4)/1.2))
omegaCorrectionR45 = Omega4 - (((RightFlipperExt.ContactPoint - point4) / ( Point5 - Point4 )) * ((Omega4 - Omega5)/1.2))
If RightFlipperExt.ContactPoint < Point1 then RightFlipperExt.Omega = Omega1
If RightFlipperExt.ContactPoint > Point5 then RightFlipperExt.Omega = Omega5
If (RightFlipperExt.ContactPoint => Point1) And (RightFlipperExt.ContactPoint =< Point2) then
RightFlipperExt.Omega = omegaCorrectionR12
Else
If (RightFlipperExt.ContactPoint => Point2) And (RightFlipperExt.ContactPoint =< Point3) then
RightFlipperExt.Omega = omegaCorrectionR23
Else
If (RightFlipperExt.ContactPoint => Point3) And (RightFlipperExt.ContactPoint =< Point4) then
RightFlipperExt.Omega = omegaCorrectionR34
Else
If (RightFlipperExt.ContactPoint => Point4) And (RightFlipperExt.ContactPoint =< Point5) then
RightFlipperExt.Omega = omegaCorrectionR45
End If
End If
End iF
End if

End Sub

'''''''''''''''''''''''''''''''''''''''''''''''Left Flipper PreHit Code'''''''''''''''''''''''''''''

Sub LeftFlipper_prehit()

OnPreHitFlipperSettings(LeftFlipperExt)
omegaCorrectionL12 = Omega1 - (((LeftFlipperExt.ContactPoint - point1) / ( Point2 - Point1 )) * ((Omega1 - Omega2)/1.2))
omegaCorrectionL23 = Omega2 - (((LeftFlipperExt.ContactPoint - point2) / ( Point3 - Point2 )) * ((Omega2 - Omega3)/1.2))
omegaCorrectionL34 = Omega3 - (((LeftFlipperExt.ContactPoint - point3) / ( Point4 - Point3 )) * ((Omega3 - Omega4)/1.2))
omegaCorrectionL45 = Omega4 - (((LeftFlipperExt.ContactPoint - point4) / ( Point5 - Point4 )) * ((Omega4 - Omega5)/1.2))
If LeftFlipperExt.ContactPoint < Point1 then LeftFlipperExt.Omega = Omega1
If LeftFlipperExt.ContactPoint > Point5 then LeftFlipperExt.Omega = Omega5
If (LeftFlipperExt.ContactPoint => Point1) And (LeftFlipperExt.ContactPoint =< Point2) then
LeftFlipperExt.Omega = omegaCorrectionL12
Else
If (LeftFlipperExt.ContactPoint => Point2) And (LeftFlipperExt.ContactPoint =< Point3) then
LeftFlipperExt.Omega = omegaCorrectionL23
Else
If (LeftFlipperExt.ContactPoint => Point3) And (LeftFlipperExt.ContactPoint =< Point4) then
LeftFlipperExt.Omega = omegaCorrectionL34
Else
If (LeftFlipperExt.ContactPoint => Point4) And (LeftFlipperExt.ContactPoint =< Point5) then
LeftFlipperExt.Omega = omegaCorrectionL45
End IF
End If
End If
End if

End Sub
There are still some jumps in the omega values but they aren't as large as the previous version.

omegaCorrectionR12 = 60 - (((from 0 to 0.25 - 0) / ( 0.25 - 0 )) * ((60 - 65)/1.2))
omegaCorrectionR23 = 65 - (((from 0.25 to 0.75 - 0.25) / ( 0.7 - 0.25 )) * ((65 - 65)/1.2))
omegaCorrectionR34 = 65 - (((from 0.7 to 0.8 - 0.7) / ( 0.8 - 0.7 )) * ((65 - 40)/1.2))
omegaCorrectionR45 = 40 - (((from 0.8 to 1.2 - 0.8) / ( 1.2 - 0.8 )) * ((40 - 20)/1.2))

omegaCorrectionR12 omega starts at 60 and goes to 64.2
omegaCorrectionR23 omega starts at 65 and goes to 65
omegaCorrectionR34 omega starts at 65 and goes to 44.2
omegaCorrectionR45 omega starts at 40 and goes to 23.3

I noticed you included an XML file but there is also an XML in the script. BAM uses a priority system so it uses the XML in the script over the XML file saved with the table. So I deleted the XML in the script so it would use the XML file saved with the table.

When I played the table, the flipper omegas seemed better although the ball had way too much bounce. I noticed the bounce control values had not changed so I don't know caused so much bounce.

• JLou5641

#### JLou5641

##### Pinball Wizard
@AnonTet @GeorgeH , as i say in my post.. xml in script dont' work anymore and i don't find why. This is why a put xml file..

For bouncing, I do it on purpose.. it's a little to much but not more compare to real.
i disable the "bouncing script", it's a non sens in my opinion, it always "fake" the bounce, instead of lets the ball bouncing by real effect/consequence... And it make shoot aiming "glitch". If you want to chang ball bouncing for flipper bats, just change flipper bats rubber type

For the jump, they are insignifiant and have no real effect due to the coil ramp up charts.

One of the rules for aiming, its the radio between friction of PF and rubbers and other materials... And by default, Flipper bats have near the same friction as PF, and also Metal has less friction as pf!... wich is not true. A good wax pf is very much slippery as other materials. So I began to rework all friction according flipper charts

Greetings,
JLou

#### AnonTet

##### Pinball Hall of Famer
Site Supporters
XML in script works but FP has issues. Whenever you change something or something weird starts happening, you need to save the table, close FP. Open FP, open table, play... I know, I know but it is what it is.

• JLou5641

#### JLou5641

##### Pinball Wizard
Yep, i know too lol... It work for you?
Maybe I have an issue with my BAM installation.

#### Gimli

##### Pinball Hall of Famer
Yep, i know too lol... It work for you?
Maybe I have an issue with my BAM installation.
Is vpx physics the goal ?
Seems like creating a mirage based on a mirage

Ive never played vpx just fp , vp , pinball arcade and fx2 .

I look for consistancy within each realm I can adapt to...not a unifying physic

#### JLou5641

##### Pinball Wizard
Is vpx physics the goal ?
Seems like creating a mirage based on a mirage

Ive never played vpx just fp , vp , pinball arcade and fx2 .

I look for consistancy within each realm I can adapt to...not a unifying physic
The goal is to make more realistic physics, with real swing angle, eos, and good shot aiming and bouncing, and "close" the gap with VPX or PBFX3 ( last Williams pack ) as you say before. Vpx has better physics, but in vpx we try to reduce the GAP from FP for Lighting Render and Extra features, especialy for orignal table or modern table like those with LCD... FP do that... Meanwhile FP has a gap for physics, and as you say in one of your previous post, the goal is to reduce this GAP... Vpx is Better for physics, FP for Lighting and extra features... PBFX 3 it's a good match from both but a "closed" software.. But i'm sure we can do better physics like VPX and PBFX3, and base on FP are near from VPX. I think FP has good physics in general on the PF, and good tool, and doesn't need lot of "script hack" like today.. So i just try to use my VPX creator experience to make FP better, because it's a good game too and lot of player like "Graphics" but not "physics".

#### shiva

Staff member
Site Supporters
Agree with Gimli. You guys seem to be reinventing the wheel here, but you are also making this very complicated, and may be too much for nearly everyone to have problems understanding.

#### GeorgeH

##### Flippered Out
Staff member
Site Supporters
I have just been commenting on JLou5641's approach. Personally, I think he would be better off using a variation of Shiva flippers that I used on TZ. It has no gaps or jumps and is easier to think through it. Plus, I think he needs to use the bounce control and use higher values if desired. I would suggest just using this part of the Shiva flippers (or some variation) along with the flipper rotation charts:

shivaMinOmega = 20

If LeftFlipperExt.ContactPoint > 1.2 then LeftFlipperExt.Omega = (shivaMinOmega):End If
If LeftFlipperExt.ContactPoint <= 1.2 and LeftFlipperExt.ContactPoint > 1.175 then LeftContactPointGeneratedOmega = (shivaMinOmega+2):End If
If LeftFlipperExt.ContactPoint <= 1.175 and LeftFlipperExt.ContactPoint > 1.15 then LeftContactPointGeneratedOmega = (shivaMinOmega+4):End If
If LeftFlipperExt.ContactPoint <= 1.15 and LeftFlipperExt.ContactPoint > 1.125 then LeftContactPointGeneratedOmega = (shivaMinOmega+6):End If
If LeftFlipperExt.ContactPoint <= 1.125 and LeftFlipperExt.ContactPoint > 1.1 then LeftContactPointGeneratedOmega = (shivaMinOmega+7.75):End If
If LeftFlipperExt.ContactPoint <= 1.1 and LeftFlipperExt.ContactPoint > 1.075 then LeftContactPointGeneratedOmega = (shivaMinOmega+9.5):End If
If LeftFlipperExt.ContactPoint <= 1.075 and LeftFlipperExt.ContactPoint > 1.05 then LeftContactPointGeneratedOmega = (shivaMinOmega+10.75):End If
If LeftFlipperExt.ContactPoint <= 1.05 and LeftFlipperExt.ContactPoint > 1.025 then LeftContactPointGeneratedOmega = (shivaMinOmega+12):End If
If LeftFlipperExt.ContactPoint <= 1.025 and LeftFlipperExt.ContactPoint > 1.0 then LeftContactPointGeneratedOmega = (shivaMinOmega+13.2):End If
If LeftFlipperExt.ContactPoint <= 1.0 and LeftFlipperExt.ContactPoint > 0.95 then LeftContactPointGeneratedOmega = (shivaMinOmega+14.4):End If
If LeftFlipperExt.ContactPoint <= 0.95 and LeftFlipperExt.ContactPoint > 0.9 then LeftContactPointGeneratedOmega = (shivaMinOmega+16.2):End If
If LeftFlipperExt.ContactPoint <= 0.9 and LeftFlipperExt.ContactPoint > 0.85 then LeftContactPointGeneratedOmega = (shivaMinOmega+17.8):End If
If LeftFlipperExt.ContactPoint <= 0.85 and LeftFlipperExt.ContactPoint > 0.8 then LeftContactPointGeneratedOmega = (shivaMinOmega+19):End If
If LeftFlipperExt.ContactPoint <= 0.8 and LeftFlipperExt.ContactPoint > 0.75 then LeftContactPointGeneratedOmega = (shivaMinOmega+20):End If
If LeftFlipperExt.ContactPoint <= 0.75 and LeftFlipperExt.ContactPoint > 0.7 then LeftContactPointGeneratedOmega = (shivaMinOmega+20):End If
If LeftFlipperExt.ContactPoint <= 0.7 and LeftFlipperExt.ContactPoint > 0.65 then LeftContactPointGeneratedOmega = (shivaMinOmega+20):End If
If LeftFlipperExt.ContactPoint <= 0.65 and LeftFlipperExt.ContactPoint > 0.6 then LeftContactPointGeneratedOmega = (shivaMinOmega+20):End If
If LeftFlipperExt.ContactPoint <= 0.6 and LeftFlipperExt.ContactPoint > 0.55 then LeftContactPointGeneratedOmega = (shivaMinOmega+19):End If
If LeftFlipperExt.ContactPoint <= 0.55 and LeftFlipperExt.ContactPoint > 0.5 then LeftContactPointGeneratedOmega = (shivaMinOmega+17.8):End If
If LeftFlipperExt.ContactPoint <= 0.5 and LeftFlipperExt.ContactPoint > 0.45 then LeftContactPointGeneratedOmega = (shivaMinOmega+16.2):End If
If LeftFlipperExt.ContactPoint <= 0.45 and LeftFlipperExt.ContactPoint > 0.4 then LeftContactPointGeneratedOmega = (shivaMinOmega+14.4):End If
If LeftFlipperExt.ContactPoint <= 0.4 and LeftFlipperExt.ContactPoint > 0.35 then LeftContactPointGeneratedOmega = (shivaMinOmega+12):End If
If LeftFlipperExt.ContactPoint <= 0.35 and LeftFlipperExt.ContactPoint > 0.3 then LeftContactPointGeneratedOmega = (shivaMinOmega+9.5):End If
If LeftFlipperExt.ContactPoint <= 0.3 and LeftFlipperExt.ContactPoint > 0.25 then LeftContactPointGeneratedOmega = (shivaMinOmega+6):End If
If LeftFlipperExt.ContactPoint <= 0.25 and LeftFlipperExt.ContactPoint > 0.2 then LeftContactPointGeneratedOmega = (shivaMinOmega+2):End If
If LeftFlipperExt.ContactPoint <= 0.2 then LeftContactPointGeneratedOmega = (shivaMinOmega):End If

• JLou5641

#### shiva

Staff member
Site Supporters
Is this from JG, or the updated 3.1 version George? The updated version has smaller code, easy to adjust angles for how the ball comes off the flippers and fixes to the bounce. It also was intended to down the road have a true EOS added very easily, with expanded flipper tricks as a bonus, I believe I already told Anon about that, but I had problems with that (bad health week) so I decided some other time.

#### GeorgeH

##### Flippered Out
Staff member
Site Supporters
Is this from JG, or the updated 3.1 version George? The updated version has smaller code, easy to adjust angles for how the ball comes off the flippers and fixes to the bounce. It also was intended to down the road have a true EOS added very easily, with expanded flipper tricks as a bonus, I believe I already told Anon about that, but I had problems with that (bad health week) so I decided some other time.
It is part of the code I used on Twilight Zone. I think JLou5641 wants to be able to use the flipper rotation charts in place of all the other code you used on Jungle Girl. It does the same things for the most part. At least we should see if JLou can make it work. I think it might work. I think this dynamic flipper code would be superior to what JLou was using. His code only has 4 straight sections tied together somehow where every line of the above code is a straight section. More straight segments produces a smoother curve.

I should mention that Twilight Zone uses the T1 flippers where Jungle Girl uses the T-5 flippers. I had to change the curve because the T1 flipper has a different shape than the T5. I added shorter segments at the tip than at the base in order to get better aiming although the shape of the curve is the same. I used the attached Excel file to create the code that is graphed out in a curve. I tried several curves with it before I settled on the above code. I thought it worked pretty well on TZ.

#### Attachments

• Flipper Calc.zip
3.6 KB · Views: 11
• JLou5641

#### shiva

Staff member
Site Supporters
Okay. the 3.1 version I think you would have found easier, I thought you were using that as I greatly simplified the entire thing. With that, I removed the timers, I changed the walls so you can adjust the tip shots easier. All you have to do is move a control point slightly up or down. It's in the thread here, but here is a copy of the changes
Code:
``````'  * shivaFlippers v3.1 *
' The latest shivaFlippers has a major new update that now supports dynamic Omega by flipper swing, (variable coil) and has a couple set tricks programmed in.
' This depends on your hardware and reflexes
' Specialized code for the following
' - Variable coil strength, which varies the strength of the flipper depending on the flipper angle
'             * The amount of steps (or angles) are adjustable. Default set to 35. A lower number means stronger shots, a higher number means weaker shots
'             * If you set the number too high, the ball will drag the flipper, like the very early em games
'            * Changing  FlipperSwingAngleEnd can make flipper tap passes easier (Higher Number) or harder (Lower Number)
' - Tip/tap pass for flipper start angle and max angle
' - "loft" shots capable
' - Fake EOS to prevent high speed balls from a flick of a flipper fully up
' - Better tip speed omega, using variable coil that reduces the weak flipper effect
' - Top right flipper does not use the variable coil system.
' - Flippers have better bounce
' - Add top flipper.This has slightly different coding as a older version. No walls or triggers, not needed.
' The new system can be adjusted to suit for the following...
' - Dynamic Angle setting steps to simulate (sort of) flippers from various eras
' New 2 wall method, with 3 triggers instead of timers
' Contact Point Omega readjusted for new system. Tips and base shots adjusted for certain situations like the flick, and better aiming.``````

I noticed you guys were talking about EOS. The variable coil system in here can be used for that as well. If someone can figure it out how to do it you can set the variable coil (main variable is called LeftFlipperSwing, RightFlipperSwing) to start when the player presses the flipper button no matter where the flipper angle is, then you have EOS if the flipper is at it's upmost angle, and a quick flick of the button will do a weak transfer from one flipper to another.

One other thing. I noticed people saying it was too hard to do a light flick. I will use myself as a example, this is very much depending on your keyboard, and if you were very fast being able to press downwards as opposed to sideways (Different muscle group) I have 3 computers, 2 of which I can not do, while my new computer has a far better keyboard and only 1.7 mm of travel. Even then, it's tough to do, but I can do it despite my nearly 60 year old fingers.

I couldn't do flicks with vpx either, in fact, the vast majority of people can't do a simple flick on actual arcade games. Just not fast enough with reflex times, and the ability to lightly kiss the button within the time needed to move the flipper only 3 or 4 degree's of angle. The easy solution is to put in a simple delay timer to compensate for the various hardware and reflex times.

#### JLou5641

##### Pinball Wizard
@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

#### Attachments

• Attack From Mars ULTIMATE 1.02-2 Rotational Flippers JLOU v3.zip
47.8 MB · Views: 18
Last edited:

#### JLou5641

##### Pinball Wizard
For testing: I ported my setup to Deadpool table:

General chit-chat
Help Users
• No one is chatting at the moment.
• @ 20degree:
** ***** ***** ****** * **** ***** ***** ** **** * **** *** ***** **** ***** *** * **** **** *** *** ***** ***** ****** ** ** ****** * *********** ****** **
@ 20degree: ** ***** ***** ****** * **** ***** ***** ** **** * **** *** ***** **** ***** *** * **** **** ***...