BAM rotationSpeedChart

For both tables? I did find that 50º works best on very short tests than 48º but depends on the table. And 52 is great but not so much for post pass tricks because of the higher angle so as usual, it's a case by case.

I always aim for more realism though so, 50 might be the best happy medium... in any case, thank you. it is very useful information.

by the way, what table is Williams DOT?
 
all Williams Dot have same mechanism.. Only coil change if it's a fliptronic or not, or for different force for flipper bats

Edit: You can assume that it's the same for Williams WPC with Digit
 
Last edited:
GeorgeH said:
@GeorgeH
AFM is improved, I agree. You'll have a pm soon :)


I meant that I do think there's an improvement on Attack From Mars table.

The other part of the sentence was just a redundant notification from me to him. Forget about it.
 
So, Attack from Mars featuring shivaflippers AND rotationSpeedChart in action. Look at that drop catch right at the beginning (and at the end) as well as live catch, post pass and tap pass. The flick pass is very hard to make but doable.

I'll see if I can tweak anything to make flick pass trick easier because it is useful to stop the ball rolling off the flipper too and at the moment it is not working as I expect. Well, none of this is so... practice makes perfect :)

Enjoy:

View attachment Base Profile 2021.05.24 - 17.50.05.52.mp4
 
Nice. Can you do the same thing with the Gimli/George flippers?
 
Nice @AnonTet ! Can you share it tomorow for testing?

Edit: Do you ever use script part for flick pass and coil ramp up? i think it not necessaray anymore with charts
 
Nice. Can you do the same thing with the Gimli/George flippers?
Next thing. This is still not how I want and i'm hoping this is a straight c&p... keep reading.

Nice @AnonTet ! Can you share it tomorow for testing?

Edit: Do you ever use script part for flick pass and coil ramp up? i think it not necessaray anymore with charts

Yes and no. I'm using shivaflippers code (modified). So far this is needed especially on lower swing angles and tables that need more power to get the ball higher at the top center (Bally spectrum being an extreme case of this).

It's trick to use just one system. You need to compromise something so i'm trying to combine 2 systems and see wehre this goes :)

You are right in saying code is probably not needed anymore though. I do have Bride of Pinbot table with only my custom physics doing "the same thing" but, again, no need to do high top center shots...

Note:
I'm using my own custom physics. Because of this, I can't say if this will be a simple c&p to other tables. I need a bit more time to make sure this works as intended without compromises but like I've wrote before something still isn't right.
 
@GeorgeH @AnonTet , I make and update AFM with new Dynamic Flipper and Charts. So, even with my poor level even if i'm a real player, its easy to make all tricks and good save ( apart livecatch ).

Also, i rewrote the Dynamic Flipper Code to help aiming. Now, flipper bats are divide in 4 zones with 5 Omega points ( 0 to 0.25, 0.25 to 0.5, 0.5 to 0.75 and 0.75 to 1.2 for the tips zone ). Now, instead of linear math along the flipper bats, you can set a "curves" or what you want for Omega.

Here for AFM, I set the same omega from base to middle of the bats, and it decrease after. I'm sure it can be better more, zone point can be move. I think the second zone can be move at 0.25-->0.75 and the third zone at 0.75-->0.9 for better amaing. I will make more test but the result is good i think. I fine tune the charts too and set flip bats swing as real at 48°

Tell me what you think.

EDIT: Change the third second zone 0.25-->0.5 to 0.25-->0.6 and third zone 0.5-->0.75 to 0.6-->0.75 for great center shoot ^^


Here the new code for Dynamic Flipper:



' === Dynamic Flipper Settings ===

Const BAM_VERSION = 0 ' Note that BAM 233 implemented dynamic flippers but this table uses
' "xBAM.CreateAllExt" which requires BAM 254.
AddDebugText BAM_VERSION

If BAM_VERSION => 254 then

Dim omegaCorrectionL12
Dim omegaCorrectionL23
Dim omegaCorrectionL34
Dim omegaCorrectionL45
Dim omegaCorrectionR12
Dim omegaCorrectionR23
Dim omegaCorrectionR34
Dim omegaCorrectionR45
Dim BounceMix
xBAM.CreateAllExt
'xBAM.BallSpeedLimit = 5500
End If

Sub BAM_Init
If BAM_VERSION < 254 then Exit Sub

' 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

const Omega1 = 70 ' Omega at base of flipper. Must be < MaxOmega. Default = 70
const Omega2 = 70 ' Omega at base/middle of flipper. Must be < MaxOmega. Default = 70
const Omega3 = 70 ' Omega at middle of flipper. Must be < MaxOmega. Default = 70
const Omega4 = 40 ' Omega at middle/tip of flipper. Must be < MaxOmega. Default = 40
const Omega5 = 20 ' Omega at tip of flipper. Must be > MinOmega. Default = 33

End If

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

Sub RightFlipper_prehit()
If BAM_VERSION < 254 then Exit Sub

Dim ball
Set ball = xBAM.BallCloseTo(0,0)
If xBAM.Ball.Speed <= 200 then BounceMix = 1 'Ball Speed Measures 150 rolling down left fliper from cradled ball so this should capture it
If xBAM.Ball.Speed > 200 then BounceMIx = 2


OnPreHitFlipperSettings(RightFlipperExt)
omegaCorrectionR12 = Omega1 - (RightFlipperExt.ContactPoint * ((Omega1 - Omega2)/1.2))
omegaCorrectionR23 = Omega2 - (RightFlipperExt.ContactPoint * ((Omega2 - Omega3)/1.2))
omegaCorrectionR34 = Omega3 - (RightFlipperExt.ContactPoint * ((Omega3 - Omega4)/1.2))
omegaCorrectionR45 = Omega4 - (RightFlipperExt.ContactPoint * ((Omega4 - Omega5)/1.2))
If RightFlipperExt.ContactPoint < 0.0 then RightFlipperExt.Omega = Omega1
If RightFlipperExt.ContactPoint > 1.2 then RightFlipperExt.Omega = Omega5
If (RightFlipperExt.ContactPoint => 0.0) And (RightFlipperExt.ContactPoint =< 0.25) then
RightFlipperExt.Omega = omegaCorrectionR12
Else
If (RightFlipperExt.ContactPoint => 0.25) And (RightFlipperExt.ContactPoint =< 0.6) then
RightFlipperExt.Omega = omegaCorrectionR23
Else
If (RightFlipperExt.ContactPoint => 0.6) And (RightFlipperExt.ContactPoint =< 0.75) then
RightFlipperExt.Omega = omegaCorrectionR34
Else
If (RightFlipperExt.ContactPoint => 0.75) And (RightFlipperExt.ContactPoint =< 1.2) then
RightFlipperExt.Omega = omegaCorrectionR45
End If
End If
End iF
End if

End Sub


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

Sub LeftFlipper_prehit()
If BAM_VERSION < 254 then Exit Sub
Dim ball
Set ball = xBAM.BallCloseTo(0,0)
If ball.Speed <= 200 then BounceMix = 1 'Ball Speed Measures 150 rolling down left fliper from cradled ball so this should capture it
If xBAM.Ball.Speed <= 200 then BounceMix = 1 'Ball Speed Measures 150 rolling down left fliper from cradled ball so this should capture it
If xBAM.Ball.Speed > 200 then BounceMIx = 2
If BAM_VERSION < 254 then Exit Sub


OnPreHitFlipperSettings(LeftFlipperExt)
omegaCorrectionL12 = Omega1 - (LeftFlipperExt.ContactPoint * ((Omega1 - Omega2)/1.2))
omegaCorrectionL23 = Omega2 - (LeftFlipperExt.ContactPoint * ((Omega2 - Omega3)/1.2))
omegaCorrectionL34 = Omega3 - (LeftFlipperExt.ContactPoint * ((Omega3 - Omega4)/1.2))
omegaCorrectionL45 = Omega4 - (LeftFlipperExt.ContactPoint * ((Omega4 - Omega5)/1.2))
If LeftFlipperExt.ContactPoint < 0.0 then LeftFlipperExt.Omega = Omega1
If LeftFlipperExt.ContactPoint > 1.2 then LeftFlipperExt.Omega = Omega5
If (LeftFlipperExt.ContactPoint => 0.0) And (LeftFlipperExt.ContactPoint =< 0.25) then
LeftFlipperExt.Omega = omegaCorrectionL12
Else
If (LeftFlipperExt.ContactPoint => 0.25) And (LeftFlipperExt.ContactPoint =< 0.6) then
LeftFlipperExt.Omega = omegaCorrectionL23
Else
If (LeftFlipperExt.ContactPoint => 0.6) And (LeftFlipperExt.ContactPoint =< 0.75) then
LeftFlipperExt.Omega = omegaCorrectionL34
Else
If (LeftFlipperExt.ContactPoint => 0.75) And (LeftFlipperExt.ContactPoint =< 1.2) 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.fpt
    50.4 MB · Views: 58
Last edited:
For dynamic flippers I think the Sub OnPrehitFlipperSettings can be a variable worth looking at otherwise with dynamic flippers I *think* it might be difficult to have a live catch (at least).

The reason why I'm saying this is because the bounce on the flipper is not consistent which raises the question "When to react to whatever bounce is being calculated?". Am I thinking right?

@JLou5641
I tried but it is not working for me. The flippers are too strong. My reaction times suck at the moment though but even the post pass is way too fast so the rest is impossible. I tried with an X-Arcade old controller (switch buttons) and on my keyboard.

Can you show us how it should look? (i'm on BAM v334 by the way).

PS: I'm still sick so take this with a grain of salt.
 
Hi @AnonTet , here a quick video with 2 flick pass... The first is a "bad" flick pass with a "jump", timing too early from me... near making a "stoppy ball". The second just behind really save the ball. I'm on v334 too.

 
I would call that a live catch (stoppy ball) all things considered. Even in the online video you see it's not always perfect (look for medieval madness pinball tutorial or lord of the rights the valinor strategy videos) where they do a lot of perfect live catches too (i can only imagine the hours on those tables...).
In FP though unless you find the formula to calculate both flippers and ball momentum to adjust flipper elasticity to be 0 on flipper_hit (just thinking out loud on a way to do it) it is a nigh impossible thing to do. Again, we hit the dynamic elasticity Sub OnPrehitFlipperSettings, but I digress (again). Guessing i'm thinking to much on this because I can't do much else at the moment so feel free to top me at any time :D

I know the timing for flick pass is crucial. The ball has to be there too so recreating a situation for this is tricky.

More on the problem I find though, if it was working more like intended (for my skill) the same configuration that allows for this trick should allow for this; look at 9:54 (video starts at 9.52) see how you can use the flip on flipper up to keep the ball on that flipper. With me playing the ball always go up no matter how fast I can be (probably not enough) or where the ball is (unless post pass, that works but it is very fast because of the flipper strength i think). I really would like to hear other experiences on this but I suspect your skills are too good for us to replicate this so we need easier settings.

 
Lol, I was answering you at the same time about live catch.

So for the live catch, timing is as crucial as for flick pass. Live catch is due to the EOS greatly reduces the force for flipper bats in the last few degrees of swing.... So, to make a live catch, you need to swing up the flipper bats in the same time that the ball comes into contact with it in this few degrees... The inertia of the ball then counteracts the reduced force of the pinball bats, which is resulting the ball "stuck" the flipper bats... The angle of EOS is aprox. 5° ... but you can setting up in a real pinball.

So, to make a live catch by script, maybe is it possible to create a routine that make the "bounce" equal to 0, ( and maybe omega equal to 0 or more less power ) at the last 5° when flipper bats moving and the ball touch with a minimum velocity ( that we define ) the flipper bats an a on a certain area of those bats. So the timing will be crucial...
And in real, it often happened to me i make live catch involuntarily, and then i loose the ball because i release flipper bats :bonk:


Edit: Maybe is what shiva already do.
 
My idea with an organizational chart exemple:

If ball velocity => 5
and if swing => 45°
and If 0.75<contact point<1.2
then bounce = 0 ( and omega=10 )


Edit: remember that trick are easy on Williams/bally/Stern compare to Gottlieb, and different between each brand. For the trick on video at 9.54, it depend how the eos is setup, but it also needed a very good skill
 
Last edited:
I know all of that. Then there's the difference in the hardware used by virtual pinball players.
My point is that we need to find settings that everyone can use and then adjust the difficulty from there.

For example, I have an injury in my right wrist that I know is a handicap. I also take that into consideration and it is why i'm not happy yet. If I can find a setting that can work for me, it'll be probably too easy and unrealistic for others but I need to know that it works and if it doesn't on higher difficulty settings, then it is MY fault :)
 
If it's possible to have a routine script, it's easy to setup the diffuculty. As we do for VPX, just playing with EOS angle and EOS Omega ( or maybe bounce in FP ) could make easy or impossible Live Catch. I think there is no reason that it doesn't work well for FP. In this way, if it's possible to make routine like that, we can say it's a "near real EOS"
 
Last edited:
If it's possible to have a routine script, it's easy to setup the diffuculty. As we do for VPX, just playing with EOS angle and EOS Omega ( or maybe bounce in FP ) could make easy or impossible Live Catch. I think there is no reason that it doesn't work well for FP. In this way, if it's possible to make routine like that, we can say it's a "near real EOS"
I appreciate what you guys are doing here.
It's nice having people familiar with VPX help develop similar physics in FP to bridge the gap.

I tried the version of AFM above and it seems to work very well.

Keep up the great work !

Cheers
Bob
 
Thanks @Gimli , as i say before, FP has a great rendering and extra features.. And I'm sure it could have very very better physics.. The charts is a thing I would like to have for vpx.. it's the best thing to do trick and realistic move.. the only thing missing, is a good aiming and the possibility to have an eos.. whats, wrong in FP, is that the omega is strictly dependent with the move, meanwhile, flip need to continue their move without omega due to their inertia... This is what we need to fake for making a good eos.

But i'm not a coder... I do my best for vpx by watching what do the master of the scene, but i don't have any experience in FP
 
My idea with an organizational chart exemple:

If ball velocity => 5
and if swing => 45°
and If 0.75<contact point<1.2
then bounce = 0 ( and omega=10 )


Edit: remember that trick are easy on Williams/bally/Stern compare to Gottlieb, and different between each brand. For the trick on video at 9.54, it depend how the eos is setup, but it also needed a very good skill
Another idea, maybe easier,

instead of playing with bounce and omega, just need to reduce drasticaly the mass of the flip.. so it could be for ex:

If swing =>45°
then flipper mass = 1

if the ball have greater mass than the flipper, the flipper stop his move.

Considerate when flipper is at full power, it's like a near "infinite mass", but when EOS is active, it's like a big lost of mass. That's the idea
 
Last edited:
I think it would be possible to code what you are saying in either example except for the swing. Most tables already have the swing set to >45 anyway.
 
not a problem.. it's an exemple..
To define the eos, just need to enter the différence between swing angle and the eos needed. So it could be any value
 
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.
 
Last edited:
yep, it's about eos for livecatch
 
@GeorgeH @AnonTet , I make and update AFM with new Dynamic Flipper and Charts. So, even with my poor level even if i'm a real player, its easy to make all tricks and good save ( apart livecatch ).

Also, i rewrote the Dynamic Flipper Code to help aiming. Now, flipper bats are divide in 4 zones with 5 Omega points ( 0 to 0.25, 0.25 to 0.5, 0.5 to 0.75 and 0.75 to 1.2 for the tips zone ). Now, instead of linear math along the flipper bats, you can set a "curves" or what you want for Omega.

Here for AFM, I set the same omega from base to middle of the bats, and it decrease after. I'm sure it can be better more, zone point can be move. I think the second zone can be move at 0.25-->0.75 and the third zone at 0.75-->0.9 for better amaing. I will make more test but the result is good i think. I fine tune the charts too and set flip bats swing as real at 48°

Tell me what you think.

EDIT: Change the third second zone 0.25-->0.5 to 0.25-->0.6 and third zone 0.5-->0.75 to 0.6-->0.75 for great center shoot ^^


Here the new code for Dynamic Flipper:



' === Dynamic Flipper Settings ===

Const BAM_VERSION = 0 ' Note that BAM 233 implemented dynamic flippers but this table uses
' "xBAM.CreateAllExt" which requires BAM 254.
AddDebugText BAM_VERSION

If BAM_VERSION => 254 then

Dim omegaCorrectionL12
Dim omegaCorrectionL23
Dim omegaCorrectionL34
Dim omegaCorrectionL45
Dim omegaCorrectionR12
Dim omegaCorrectionR23
Dim omegaCorrectionR34
Dim omegaCorrectionR45
Dim BounceMix
xBAM.CreateAllExt
'xBAM.BallSpeedLimit = 5500
End If

Sub BAM_Init
If BAM_VERSION < 254 then Exit Sub

' 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

const Omega1 = 70 ' Omega at base of flipper. Must be < MaxOmega. Default = 70
const Omega2 = 70 ' Omega at base/middle of flipper. Must be < MaxOmega. Default = 70
const Omega3 = 70 ' Omega at middle of flipper. Must be < MaxOmega. Default = 70
const Omega4 = 40 ' Omega at middle/tip of flipper. Must be < MaxOmega. Default = 40
const Omega5 = 20 ' Omega at tip of flipper. Must be > MinOmega. Default = 33

End If

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

Sub RightFlipper_prehit()
If BAM_VERSION < 254 then Exit Sub

Dim ball
Set ball = xBAM.BallCloseTo(0,0)
If xBAM.Ball.Speed <= 200 then BounceMix = 1 'Ball Speed Measures 150 rolling down left fliper from cradled ball so this should capture it
If xBAM.Ball.Speed > 200 then BounceMIx = 2


OnPreHitFlipperSettings(RightFlipperExt)
omegaCorrectionR12 = Omega1 - (RightFlipperExt.ContactPoint * ((Omega1 - Omega2)/1.2))
omegaCorrectionR23 = Omega2 - (RightFlipperExt.ContactPoint * ((Omega2 - Omega3)/1.2))
omegaCorrectionR34 = Omega3 - (RightFlipperExt.ContactPoint * ((Omega3 - Omega4)/1.2))
omegaCorrectionR45 = Omega4 - (RightFlipperExt.ContactPoint * ((Omega4 - Omega5)/1.2))
If RightFlipperExt.ContactPoint < 0.0 then RightFlipperExt.Omega = Omega1
If RightFlipperExt.ContactPoint > 1.2 then RightFlipperExt.Omega = Omega5
If (RightFlipperExt.ContactPoint => 0.0) And (RightFlipperExt.ContactPoint =< 0.25) then
RightFlipperExt.Omega = omegaCorrectionR12
Else
If (RightFlipperExt.ContactPoint => 0.25) And (RightFlipperExt.ContactPoint =< 0.6) then
RightFlipperExt.Omega = omegaCorrectionR23
Else
If (RightFlipperExt.ContactPoint => 0.6) And (RightFlipperExt.ContactPoint =< 0.75) then
RightFlipperExt.Omega = omegaCorrectionR34
Else
If (RightFlipperExt.ContactPoint => 0.75) And (RightFlipperExt.ContactPoint =< 1.2) then
RightFlipperExt.Omega = omegaCorrectionR45
End If
End If
End iF
End if

End Sub


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

Sub LeftFlipper_prehit()
If BAM_VERSION < 254 then Exit Sub
Dim ball
Set ball = xBAM.BallCloseTo(0,0)
If ball.Speed <= 200 then BounceMix = 1 'Ball Speed Measures 150 rolling down left fliper from cradled ball so this should capture it
If xBAM.Ball.Speed <= 200 then BounceMix = 1 'Ball Speed Measures 150 rolling down left fliper from cradled ball so this should capture it
If xBAM.Ball.Speed > 200 then BounceMIx = 2
If BAM_VERSION < 254 then Exit Sub


OnPreHitFlipperSettings(LeftFlipperExt)
omegaCorrectionL12 = Omega1 - (LeftFlipperExt.ContactPoint * ((Omega1 - Omega2)/1.2))
omegaCorrectionL23 = Omega2 - (LeftFlipperExt.ContactPoint * ((Omega2 - Omega3)/1.2))
omegaCorrectionL34 = Omega3 - (LeftFlipperExt.ContactPoint * ((Omega3 - Omega4)/1.2))
omegaCorrectionL45 = Omega4 - (LeftFlipperExt.ContactPoint * ((Omega4 - Omega5)/1.2))
If LeftFlipperExt.ContactPoint < 0.0 then LeftFlipperExt.Omega = Omega1
If LeftFlipperExt.ContactPoint > 1.2 then LeftFlipperExt.Omega = Omega5
If (LeftFlipperExt.ContactPoint => 0.0) And (LeftFlipperExt.ContactPoint =< 0.25) then
LeftFlipperExt.Omega = omegaCorrectionL12
Else
If (LeftFlipperExt.ContactPoint => 0.25) And (LeftFlipperExt.ContactPoint =< 0.6) then
LeftFlipperExt.Omega = omegaCorrectionL23
Else
If (LeftFlipperExt.ContactPoint => 0.6) And (LeftFlipperExt.ContactPoint =< 0.75) then
LeftFlipperExt.Omega = omegaCorrectionL34
Else
If (LeftFlipperExt.ContactPoint => 0.75) And (LeftFlipperExt.ContactPoint =< 1.2) then
LeftFlipperExt.Omega = omegaCorrectionL45
End IF
End If
End If
End if

End Sub
I tired your version of AFM. The benefit of the rotation speed chart was basically eliminated on your first version. When I added your new code, the center shots were a little better but still not good enough. The only way I was was able to approach getting the center shots back where they should be is to set the flipper swing to 50. I know that doesn't fit your idea of what the value should be, but in practice, the value needs to be higher.

I tried a version where I set the swing to 52 and used these values in the constants (on your original version) which I feel work better. I might try adding Omega6 thru 10 or so to see what happens.

const Omega1 = 40 ' Omega at base of flipper. Must be < MaxOmega. Default = 70
const Omega2 = 50 ' Omega at base/middle of flipper. Must be < MaxOmega. Default = 70
const Omega3 = 60 ' Omega at middle of flipper. Must be < MaxOmega. Default = 70
const Omega4 = 40 ' Omega at middle/tip of flipper. Must be < MaxOmega. Default = 40
const Omega5 = 20 ' Omega at tip of flipper. Must be > MinOmega. Default = 33
 
@GeorgeH @AnonTet , I make and update AFM with new Dynamic Flipper and Charts. So, even with my poor level even if i'm a real player, its easy to make all tricks and good save ( apart livecatch ).

Also, i rewrote the Dynamic Flipper Code to help aiming. Now, flipper bats are divide in 4 zones with 5 Omega points ( 0 to 0.25, 0.25 to 0.5, 0.5 to 0.75 and 0.75 to 1.2 for the tips zone ). Now, instead of linear math along the flipper bats, you can set a "curves" or what you want for Omega.

Here for AFM, I set the same omega from base to middle of the bats, and it decrease after. I'm sure it can be better more, zone point can be move. I think the second zone can be move at 0.25-->0.75 and the third zone at 0.75-->0.9 for better amaing. I will make more test but the result is good i think. I fine tune the charts too and set flip bats swing as real at 48°

Tell me what you think.

EDIT: Change the third second zone 0.25-->0.5 to 0.25-->0.6 and third zone 0.5-->0.75 to 0.6-->0.75 for great center shoot ^^


Here the new code for Dynamic Flipper:



' === Dynamic Flipper Settings ===

Const BAM_VERSION = 0 ' Note that BAM 233 implemented dynamic flippers but this table uses
' "xBAM.CreateAllExt" which requires BAM 254.
AddDebugText BAM_VERSION

If BAM_VERSION => 254 then

Dim omegaCorrectionL12
Dim omegaCorrectionL23
Dim omegaCorrectionL34
Dim omegaCorrectionL45
Dim omegaCorrectionR12
Dim omegaCorrectionR23
Dim omegaCorrectionR34
Dim omegaCorrectionR45
Dim BounceMix
xBAM.CreateAllExt
'xBAM.BallSpeedLimit = 5500
End If

Sub BAM_Init
If BAM_VERSION < 254 then Exit Sub

' 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

const Omega1 = 70 ' Omega at base of flipper. Must be < MaxOmega. Default = 70
const Omega2 = 70 ' Omega at base/middle of flipper. Must be < MaxOmega. Default = 70
const Omega3 = 70 ' Omega at middle of flipper. Must be < MaxOmega. Default = 70
const Omega4 = 40 ' Omega at middle/tip of flipper. Must be < MaxOmega. Default = 40
const Omega5 = 20 ' Omega at tip of flipper. Must be > MinOmega. Default = 33

End If

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

Sub RightFlipper_prehit()
If BAM_VERSION < 254 then Exit Sub

Dim ball
Set ball = xBAM.BallCloseTo(0,0)
If xBAM.Ball.Speed <= 200 then BounceMix = 1 'Ball Speed Measures 150 rolling down left fliper from cradled ball so this should capture it
If xBAM.Ball.Speed > 200 then BounceMIx = 2


OnPreHitFlipperSettings(RightFlipperExt)
omegaCorrectionR12 = Omega1 - (RightFlipperExt.ContactPoint * ((Omega1 - Omega2)/1.2))
omegaCorrectionR23 = Omega2 - (RightFlipperExt.ContactPoint * ((Omega2 - Omega3)/1.2))
omegaCorrectionR34 = Omega3 - (RightFlipperExt.ContactPoint * ((Omega3 - Omega4)/1.2))
omegaCorrectionR45 = Omega4 - (RightFlipperExt.ContactPoint * ((Omega4 - Omega5)/1.2))
If RightFlipperExt.ContactPoint < 0.0 then RightFlipperExt.Omega = Omega1
If RightFlipperExt.ContactPoint > 1.2 then RightFlipperExt.Omega = Omega5
If (RightFlipperExt.ContactPoint => 0.0) And (RightFlipperExt.ContactPoint =< 0.25) then
RightFlipperExt.Omega = omegaCorrectionR12
Else
If (RightFlipperExt.ContactPoint => 0.25) And (RightFlipperExt.ContactPoint =< 0.6) then
RightFlipperExt.Omega = omegaCorrectionR23
Else
If (RightFlipperExt.ContactPoint => 0.6) And (RightFlipperExt.ContactPoint =< 0.75) then
RightFlipperExt.Omega = omegaCorrectionR34
Else
If (RightFlipperExt.ContactPoint => 0.75) And (RightFlipperExt.ContactPoint =< 1.2) then
RightFlipperExt.Omega = omegaCorrectionR45
End If
End If
End iF
End if

End Sub


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

Sub LeftFlipper_prehit()
If BAM_VERSION < 254 then Exit Sub
Dim ball
Set ball = xBAM.BallCloseTo(0,0)
If ball.Speed <= 200 then BounceMix = 1 'Ball Speed Measures 150 rolling down left fliper from cradled ball so this should capture it
If xBAM.Ball.Speed <= 200 then BounceMix = 1 'Ball Speed Measures 150 rolling down left fliper from cradled ball so this should capture it
If xBAM.Ball.Speed > 200 then BounceMIx = 2
If BAM_VERSION < 254 then Exit Sub


OnPreHitFlipperSettings(LeftFlipperExt)
omegaCorrectionL12 = Omega1 - (LeftFlipperExt.ContactPoint * ((Omega1 - Omega2)/1.2))
omegaCorrectionL23 = Omega2 - (LeftFlipperExt.ContactPoint * ((Omega2 - Omega3)/1.2))
omegaCorrectionL34 = Omega3 - (LeftFlipperExt.ContactPoint * ((Omega3 - Omega4)/1.2))
omegaCorrectionL45 = Omega4 - (LeftFlipperExt.ContactPoint * ((Omega4 - Omega5)/1.2))
If LeftFlipperExt.ContactPoint < 0.0 then LeftFlipperExt.Omega = Omega1
If LeftFlipperExt.ContactPoint > 1.2 then LeftFlipperExt.Omega = Omega5
If (LeftFlipperExt.ContactPoint => 0.0) And (LeftFlipperExt.ContactPoint =< 0.25) then
LeftFlipperExt.Omega = omegaCorrectionL12
Else
If (LeftFlipperExt.ContactPoint => 0.25) And (LeftFlipperExt.ContactPoint =< 0.6) then
LeftFlipperExt.Omega = omegaCorrectionL23
Else
If (LeftFlipperExt.ContactPoint => 0.6) And (LeftFlipperExt.ContactPoint =< 0.75) then
LeftFlipperExt.Omega = omegaCorrectionL34
Else
If (LeftFlipperExt.ContactPoint => 0.75) And (LeftFlipperExt.ContactPoint =< 1.2) then
LeftFlipperExt.Omega = omegaCorrectionL45
End IF
End If
End If
End if

End Sub
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?
 
General chit-chat
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: jack007 has left the room.
      Back
      Top