BAM rotationSpeedChart

I disabled my code and tried this. Well done.
George, the aiming was off as well for me, but that is not surprising, as different models/different angles/different settings will cause that.
 
yes it's just need to adjust omega per point setting.
 
Tried latest AFM version 3c.

Good news. I can, with difficulty:
  • tap pass
  • flick pass
  • post pass
How realistic is difficulty I felt, I have no idea so I rather trust people who actually play real pinball regularly on this. So... what can I say? Well done?

I do agree with GeorgeH on the physics. I would even suggest that you stop on te speedchart and bounce and look at materials. My reasoning is that flippers are working so, better look at the rest. If they stop working then something went wrong but not with the flippers.

Regarding rubber and materials, not to deviate much i'll send you a PM.
 
You're right @AnonTet . Flipper are working. The difference that every one can see is the value setting that need to be fine tune.

The next step is to integrate EOS, and then working on "general" physics.

For the trick, as I play on a real fish tales, real Popeye ( an real Stargate but it's different, i will make chart for SYS 3 after ), here my feeling:
- Tap pass: seems te be good
- Flick pass: too easy for me compare to real
- Post pass: little too easy compare to real
- Drop Catch: seems to be good

But not complicated to fine tune this as your preference.
 
yes it's just need to adjust omega per point setting.
I would know that, I've been using omega by contact point for 1 and a half years.
 
And it works GREAT shiva.
 
Very simple solution. The new changes to the variable coil system, well I really like it. When 1.41.is released, you guys will look at it and see how it affects your set up. Try and get it out soon, you will see no problems with EOS, other than my flipper bases are too weak, but easy fix. I tried it with the rotation chart, only thing is the shots lined up slightly different (still my omega code, just no walls etc.) That is the nature of the variable coils, but that was exactly what I wanted anyway, as fpx will down the road have support built in for each flipper type, and by era, as early flippers were very weak, and over the years got stronger and stronger every 10 years or so. I think you will find that rotation charts may have to be done up for the different sizes of flippers, and not all flipper models are the same either, some have different collision models.
Still very big accomplishment. The problems down the road will be because FP just doesn't have the range of physics vpx does, there are some missing physics, and other physics look to be combined as opposed to separate, which makes things very difficult.
 
Hi all,

It's time to an update. We make good advancement with @AnonTet .

- First fact: For aming, we use more and various omega power along the bats to make closer angle for aiming shoot, because like I say, more power we have, more "friction" we have like you if you jumping from higher on your bed... ( you will go deeper on your bed loool ). But we do not take into account the time it takes for Flipper bats to move due to the omega, appart for the first 30ms with the charts. So after that 30ms, today, the only way to make "acceleration" after those 30ms, is to use more Omega along the bats... But it give to much power... and more you give power, more you make the flipper bats fast.. but with no contol.

- Second fact: In real, what is the most important thing to keep " the pushing friction" when the ball is pushing? The acceleration.. Acceleration mean more friction... not the speed
Ex: You are in a powerfull car: You make a big big start.. So the acceleration make you glued to the seat, and until you stopped accelerate, you can't move... Meanwhile, even if you go at 300km/h, you can move again if you stop acceleration... It's called: ""Relative speed"" . So, by analogie, if you can move at 300km/h after stopping acceleration, it's like you have no more friction.
This is what we have for now, after 30ms, flipper bats stop his acceleration, by the way, after this, and due to flipper boucing ( this is why with low bouncing the problem is less ), the ball is "lighter", and so, you loose friction, and by the way, you loose aiming.

Conclusion:

With this reflexion, i take the problem on other side. Today, we take account omega along the flipper bats.. So we can write like this by analogy:

Aiming=Omega x Flipper bats lenght.. ..

But what we need to do is:

Aiming = Omega x Time acceleration

And BAM Rotational Charts do that! It give power along the time in opposition we give power along a distance ( flipper bats ).. So the simple thing I made, I set up the same "low" omega ( 30 for Addam's Family, 45 for BOP ) along the flipper bats ( apart for the base of flipper bats to keep post past ), I keep my 30ms curves for tricks, and then, to keep an acceleration to the end of move ( by the way a good friction ), I insert a last new point on the charts with more power at 150% at 31ms ( if no more power, mean no more acceleration ), that means, omega raise gradualy from 30 to 45 after the 30ms ( with 30 for omega setting ) along the time and top of move, instead of along the flipper bats... And yeah... It work very well! I made Addam's Family update, and also Bride Of Pinbot update.
Addam's Family, personnaly, i go where i want to go, when i want, and now, that it's important too, you need a specific flipper bats, or a specific angle to take each trajectory.. Like upper ramp, is harder with right flipper than the left.. For BOP it's the same.
For helping me, I have a friend who had lot of real pinball, and know them perfectly. he help me a lot for BOP timing and trajectory.
I begun to update other old table to test it.. It's already based on Dynamic Flipper.. For each new flipper you need to setup in first the "standard" omega along the bats to make good accuracy and power for the first half of flipper bats... then, you need to setup the last point of the charts ( at 31ms ), over 100% ( 130 to 180 seems to be best range ) to make good power and accuracy for the second half of flipper bats, and good shoot for upper playfield. Of course, "standard" omega and "last point charts" are linked. Change the first need the second to be redefined.
Also, with @AnonTet we decided to do this with real physics value.. Real ball mass ( 80 ), real Gravity ( 9800 ), real friction ( the most close as possible in function of our research ) etc etc . In our opinion, using real value is far better than before.

The last point, @AnonTet make an easy and little script for livecatch that i test and update to make it work.

EOS script from ravarcad work too, but don't permit to make live catch if it use alone. I don't put them in my update for now. But I think it will work better combinate with the Anontet little script.

Finally, it's already the "Dynamic Flipper script" with a little update, combined with a good rotational charts.. It's not harder to integrate than before, and easy to setup has you want.

Here the link for BOP and Addam's Family updated to v1c. It's already in progress.



Greeting,
JLou
 
ok, reading the whole thread for me is a huge effort, if I also put in that surely that something that I will not be able to understand, well then I prefer to ask:

was it possible to arrive at an optimal configuration of "rotationSpeedChart=" that could be used with "standard dynamic flipper" in almost any table?



this is nothing short of phenomenal.....:cool:
so not knowing what really happened in this thread i have some questions: is or was it not possible to replicate in Fp? Rav, knows about this this video? someone asked him if it is possible? or is it already a reality, and therefore I do not know
 
Last edited:
ok, reading the whole thread for me is a huge effort, if I also put in that surely that something I will not be able to understand, well then I prefer to ask:

was it possible to arrive at an optimal configuration of "rotationSpeedChart=" that could be used with "standard dynamic flipper" in almost any table?

The latest version was posted by JLou5641 in the posting directly before your post. You can use the "standard dynamic flippesr" and you will probably get better aiming but probably won't be able to do the tricks. You might try this dynamic flipper code and see if it works:

Code:
Const MinOmegaB = 16

        If RightFlipperExt.ContactPoint > 1.2 then RightFlipperExt.Omega = (MinOmegaB+13.8):End If
        If RightFlipperExt.ContactPoint <= 1.2 and RightFlipperExt.ContactPoint > 1.175 then RightFlipperExt.Omega = (MinOmegaB+14.2):End If
        If RightFlipperExt.ContactPoint <= 1.175 and RightFlipperExt.ContactPoint > 1.15 then RightFlipperExt.Omega = (MinOmegaB+14.6):End If
        If RightFlipperExt.ContactPoint <= 1.15 and RightFlipperExt.ContactPoint > 1.125 then RightFlipperExt.Omega = (MinOmegaB+15.0):End If
        If RightFlipperExt.ContactPoint <= 1.125 and RightFlipperExt.ContactPoint > 1.1 then RightFlipperExt.Omega = (MinOmegaB+15.4):End If
        If RightFlipperExt.ContactPoint <= 1.1 and RightFlipperExt.ContactPoint > 1.075 then RightFlipperExt.Omega = (MinOmegaB+15.7):End If
        If RightFlipperExt.ContactPoint <= 1.075 and RightFlipperExt.ContactPoint > 1.05 then RightFlipperExt.Omega = (MinOmegaB+15.9):End If
        If RightFlipperExt.ContactPoint <= 1.05 and RightFlipperExt.ContactPoint > 1.025 then RightFlipperExt.Omega = (MinOmegaB+16.0):End If
        If RightFlipperExt.ContactPoint <= 1.025 and RightFlipperExt.ContactPoint > 1.0 then RightFlipperExt.Omega = (MinOmegaB+16.0):End If
        If RightFlipperExt.ContactPoint <= 1.0 and RightFlipperExt.ContactPoint > 0.95 then RightFlipperExt.Omega = (MinOmegaB+16.0):End If
        If RightFlipperExt.ContactPoint <= 0.95 and RightFlipperExt.ContactPoint > 0.9 then RightFlipperExt.Omega = (MinOmegaB+16.0):End If
        If RightFlipperExt.ContactPoint <= 0.9 and RightFlipperExt.ContactPoint > 0.85 then RightFlipperExt.Omega = (MinOmegaB+15.7):End If
        If RightFlipperExt.ContactPoint <= 0.85 and RightFlipperExt.ContactPoint > 0.8 then RightFlipperExt.Omega = (MinOmegaB+15.2):End If
        If RightFlipperExt.ContactPoint <= 0.8 and RightFlipperExt.ContactPoint > 0.75 then RightFlipperExt.Omega = (MinOmegaB+14.0):End If
        If RightFlipperExt.ContactPoint <= 0.75 and RightFlipperExt.ContactPoint > 0.7 then RightFlipperExt.Omega = (MinOmegaB+12.8):End If
        If RightFlipperExt.ContactPoint <= 0.7 and RightFlipperExt.ContactPoint > 0.65 then RightFlipperExt.Omega = (MinOmegaB+11.7):End If
        If RightFlipperExt.ContactPoint <= 0.65 and RightFlipperExt.ContactPoint > 0.6 then RightFlipperExt.Omega = (MinOmegaB+10.5):End If
        If RightFlipperExt.ContactPoint <= 0.6 and RightFlipperExt.ContactPoint > 0.55 then RightFlipperExt.Omega = (MinOmegaB+9.3):End If
        If RightFlipperExt.ContactPoint <= 0.55 and RightFlipperExt.ContactPoint > 0.5 then RightFlipperExt.Omega = (MinOmegaB+8.1):End If
        If RightFlipperExt.ContactPoint <= 0.5 and RightFlipperExt.ContactPoint > 0.45 then RightFlipperExt.Omega = (MinOmegaB+6.9):End If
        If RightFlipperExt.ContactPoint <= 0.45 and RightFlipperExt.ContactPoint > 0.4 then RightFlipperExt.Omega = (MinOmegaB+5.7):End If
        If RightFlipperExt.ContactPoint <= 0.4 and RightFlipperExt.ContactPoint > 0.35 then RightFlipperExt.Omega = (MinOmegaB+4.6):End If
        If RightFlipperExt.ContactPoint <= 0.35 and RightFlipperExt.ContactPoint > 0.3 then RightFlipperExt.Omega = (MinOmegaB+3.4):End If
        If RightFlipperExt.ContactPoint <= 0.3 and RightFlipperExt.ContactPoint > 0.25 then RightFlipperExt.Omega = (MinOmegaB+2.2):End If
        If RightFlipperExt.ContactPoint <= 0.25 and RightFlipperExt.ContactPoint > 0.2 then RightFlipperExt.Omega = (MinOmegaB+1.0):End If
        If RightFlipperExt.ContactPoint <= 0.2 then RightFlipperExt.Omega = (MinOmegaB):End If

...is or was it not possible to replicate in Fp?

I think the Shiva flippers might come closest to being able to do a tap pass but I can't do it. (@shiva) I have a gaming keyboard that has a pretty fast response time and I can't press the flipper keys fast enough to make it work.
 
You can George. Next version is simplified code, and a delay timer if you need it. In fact, it's too easy for me.
I got a new keyboard yesterday, a Steelseries apex pro, which has adjustable settings per key, but haven't tried it out yet. The amount of key travel may be the problem with you, but not sure what types of keys they are or if they are mechanical, the type or cherry color.
 
The latest version was posted by JLou5641 in the posting directly before your post. You can use the "standard dynamic flippesr" and you will probably get better aiming but probably won't be able to do the tricks. You might try this dynamic flipper code and see if it works:
ok, but what code is'? only for right flipper? and left? and regarding the "rotationSpeedChart=" ?
 
ok, but what code is'? only for right flipper? and left? and regarding the "rotationSpeedChart=" ?

I adapted the code from Shiva flippers when I worked on TZ. Use this code instead of the standard dynamic flipper code. To make the left flipper code, replace text "Right" with "Left".

The rotationSpeedChart is saved in the table posted on message 108 or you can use this:

{0.0,1.0},{3.9,3.8},{9.5,9.0},{15.1,15.6},{19.8,22.0},{24.6,31.5},{26.3,39.3},{28.0,50.0},{29.1,62.0},{29.5,75.0},{30.0,100.0},{30.1,160.0}[0.0,0.0],[20.5,1.0],[55.3,14.5],[90.0,50.0],[100.0,100.0]
 
I adapted the code from Shiva flippers when I worked on TZ
Ahhh .... I understand, so also the rotationSpeedChart you suggested to me in Stardust, was a type of code that is suitable for shiva flippers?

EDIT:
ok, I rephrase the question I asked here .....here
what is this rotation Speed Chart =? what is it for? in standard dynamic flipper, could a suitable configuration be found?
in standard fp physics it is set like this,
"{0.0,100.0}[0.0,100.0]"

why do you feel the need to change this?
 
Last edited:
I've posted a 2018 video here before (check page 1 or 2 in this thread). The ideia was to up the ante regarding physics to allow more realism to how flippers work, and suddenly you get to make flipper tricks.

That's why personally, I think it's a valuable thing to have.

In any case the first couple of pages can answer your questions, i believe.
 
In any case the first couple of pages can answer your questions, i believe.
yes I took a look, but it's hard as always to understand something.

what i understood is that you were looking for a configuration of the rotation Speed Chart =, via shiva's DF ...... tto replicate that game of fins,tap-pass.

certainly the rotation Speed Chart =, for what I have been able to realize it is the parameter that controls the rotation of the fin, that is from the lowest point (in off) to the highest point (in on).

I don't know if you made it, but it seems like something difficult to do, I was interested in the fact:
if some configuration would improve, the standard DF, but not to do that tap-pass .... but to have better gameplay
I believe that for that tap-pass, you also need two buttons like in the xbox pad, configurable based on how hard you press it, I don't think a normal keyboard can do this.

I asked here on this thread, thinking someone knew how the Speed Chart = rotation works, but it's obvious we're talking about two different things. I did my own tests, changing the Speed Chart = rotation, taking examples here and there, but for me it didn't improve the gameplay
 
You can do it using a keyboard... not just all keyboards.

Gamepad buttons are not necessarily better than a keyboard. it's not the fact of using buttons that matter. The action of the button or key and it's latency especially, is way more important meaning, you usually have to spend money to actually take advantage of this. Even with shivaflippers "lag mitigation" option, you'll have trouble to be consistent on less than good keyboard or gamepad.

How it works is explained in the first page of this thread. More than that you'll have to ask Rav i guess.
 
hi @wild

Yes it's the goal. i put my rotation speed chart on different Slamt1lt table it work well. Just need to set Flipper position and force in editor, and then fine tune omega value depend each table. It's holidays time, soo, no upgrade for. now
 
{0.0,0.0} <- rest position
{10.0,2.0} <- at 10ms going up it'll apply 2% of the defined omega
{21.1,17.3} <- at 21ms it'll apply 17.3% of the omega
I honestly thought "dynamic flipper" did this without it rotationSpeedChart..... ie based on where the ball is hit by the fin

I made a guess,(I'm just speculating),meanwhile not knowing what the correct swing was for optimal gameplay, I always configured between 52/54/56/58, then I believed that the system (DF) would calculate it automatically ... if the swing is 54 .. .. it means that in off it is 0, in on it is 54 .... now if from 0 to 54 we divide the fin into 8 parts, and we say that the ball hits the third part of the fin, look at the image
Cattura8.JPG
would have used a percentage of omega suitable for that position in which the ball is hit, automatically, without the need for extraordinary mathematical calculations in rotazioneSpeedChart inside of xml.....

Yes it's the goal. i put my rotation speed chart on different Slamt1lt table it work well. Just need to set Flipper position and force in editor, and then fine tune omega value depend each table.
Hi @JLou5641

DF=dynamic flippers

If i am not misunderstood you are a pvx man? it is interesting to see a guy who is interested in fp / physics.

As for me, in terms of DF, I use the standard one, I don't use shivaflippers ... if shivaflippers is more suitable for a tap-pass, my best wishes .... I can't keep up with these codes or that are too complicated for me to understand,of abbreviated terms that I don't understand what is, like: EOS, flipper bats, coil, and other strange things for me
but I would be more interested in the standard DF, i I already have my beliefs about DF, and for a better configuration to get optimal gameplay, which is not enough just the DF to configure but there are other forces to consider, that by the way I'm talking about it
Here

I was saying for "rotationSpeedChart", there is a configuration for standard DF, for which to use and it would improve, not only the aim, but the gameplay of the table then i am happy to use, and i would thank you all infinitely.

It's holidays time, soo, no upgrade for. now
happy holidays, but i didn't ask for an update

About Gottlieb, is anyone interested to make Stargate for FP? I can give all the resource, I'm the Author of Stargate VPX Edition, and have the real one )
You have everything? I mean playfield, plastic, textures of each object, 3d models (I know they are in mesh) sounds, and above all dmd animations?
You probably don't know me, but I've made some difficult tables, it's easy for me to build a table having all the resources, like my Batman (data east).....before I embark on this project, I need to know this, and as it happened for Batman, I will need help with some math code if need be, but Stargate for FP, I always liked having, I love the stargate saga, I built an original

The rotationSpeedChart is saved in the table posted on message 108 or you can use this:

{0.0,1.0},{3.9,3.8},{9.5,9.0},{15.1,15.6},{19.8,22.0},{24.6,31.5},{26.3,39.3},{28.0,50.0},{29.1,62.0},{29.5,75.0},{30.0,100.0},{30.1,160.0}[0.0,0.0],[20.5,1.0],[55.3,14.5],[90.0,50.0],[100.0,100.0]
@GeorgeH
You designed this configuration,or JLou5641? it seems to me the same one you suggested in Stardust, right?
 
Ahhh .... I understand, so also the rotationSpeedChart you suggested to me in Stardust, was a type of code that is suitable for shiva flippers?

The rotationSpeedChart usually makes the aiming better with any flippers. You may or may not be able to do tricks depending on the flippers you use. I made the flippers on TZ switchable between Shiva and standard dynamic flippers. Tricks on TZ seemed to work better with the Shiva flippers.

in standard fp physics it is set like this,
"{0.0,100.0}[0.0,100.0]"

I'm pretty sure that "{0.0,100.0}[0.0,100.0]" is the default setting. Try deleting the rotationSpeedChart section from the XML that has been saved to the script on a table. Then play the table and then use the save table as XML function in BAM to save the XML as an external file. You will find that rotationSpeedChart="{0.0,100.0}[0.0,100.0]" will appear in the XML that you saved.
 
Ok.guys.....here is my proof, on a DF, standard ..... that it is almost not anymore,so I got it from the addams family table, which @JLou5641 configured........everything works, in the sense that I do not receive errors, the sound bounce also works, but there is something that does not convinces me, I just hope that I have not done something wrong

'------------------------------------------------------------------
' Dynamic Flipper Settings
'------------------------------------------------------------------


Const BAM_VERSION = 0
AddDebugText BAM_VERSION

If BAM_VERSION => 233 then
'Dim RightFlipperExt,LeftFlipperExt <-- can be removed
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
End if


If BAM_VERSION => 233 then
' Omega for each point to separate flippers bats in segment. ( Default value not define yet )
const Omega1 = 70
const Omega2 = 70
const Omega3 = 30
const Omega4 = 30
const Omega5 = 30
const Omega6 = 30
const Omega7 = 30
const Omega8 = 30
const Omega9 = 30
const Omega10 = 30
const Omega11 = 30
const Omega12 = 30
const Omega13 = 15
' 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 = 1 ' 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
If Bouncechoice = 1 then OnPreHitFlipperSettings_nobounceControl(FlipperExt)
If Bouncechoice = 2 then OnPreHitFlipperSettings_bounceControl(FlipperExt) 'Original Rav Bounce
const LiveCatchDifficulty = 1 ' less for harder, more for easier, dafault: 1
Dim ball
Set ball = xBAM.BallCloseTo(0,0)
If xBAM.Ball.Speed <= 200 then ' 85 is the speed of the ball from a cradled release to the tip of the flipper.
End If
If Not FlipperExt.Hit Then Exit Sub ' we don't expect hit
If FlipperExt.BallVSpeed > 100 Then ' 100 = min ball speed
Dim vol
vol = FlipperExt.BallVSpeed / 1000 ' 1000 = max ball speed
If vol > 1 Then vol = 1
PlaySound "fx-rubber", vol* 2 ' sound volume
AddDebugText "vol = " & vol & ", CP = " & FlipperExt.ContactPoint
End If
If xBAM.Ball.Speed <= 200 then Exit Sub
if flipperEXT.Hit then
Dim elasticCoef
if flipperext.angleDiff > ( 48 - LiveCatchDifficulty ) then elasticCoef = 0.05' where elastic coef shoulh be really low for live catch.
if flipperext.angleDiff < ( 48 - LiveCatchDifficulty ) Then elasticCoef = 0.45' where elastic coef shoulh be really low for live catch.
if flipperext.angleDiff = 48 Then elasticCoef = 0.45' where elastic coef shoulh be really low for live catch.
flipperExt.SetMaterial elasticCoef
end if
End Sub


Sub OnPreHitFlipperSettings_bounceControl(FlipperExt)
If BAM_VERSION < 254 then Exit Sub
' PARAMETERS TO TWEAK Group 4
const base_elasticCoef = 0.60 ' very bouncy flipper rubber
const expected_ball_speed_after_hit = 219 ' calc elasticCoef to get desired ball speed after ball hit flipper
const minimum_elasticCoef_to_scale_fast_balls = 0.04 ' we will add this to calculated elastiCoef, so ball after hit will have aditional 5% of speed before hit
const reduction_for_flipper_in_motion = 0.20 ' if flipper is not in starting point, reduce elasticCoef by 20%
If FlipperExt.Hit Then
Dim elasticCoef
Dim maxElasticCoef
Dim ballSpeed
ballSpeed = (FlipperExt.BallVSpeed + xBAM.Ball.Speed) * 0.5 ' averge speed of
maxElasticCoef = base_elasticCoef
If FlipperExt.AngleDiff > 1 Then maxElasticCoef = maxElasticCoef - reduction_for_flipper_in_motion
elasticCoef = base_elasticCoef
If ballSpeed > 1 Then elasticCoef = expected_ball_speed_after_hit / ballSpeed
elasticCoef = elasticCoef + minimum_elasticCoef_to_scale_fast_balls
If elasticCoef > maxElasticCoef Then elasticCoef = maxElasticCoef
FlipperExt.SetMaterial elasticCoef
End If
End Sub

Sub OnPreHitFlipperSettings_nobounceControl(FlipperExt) ' default 0.52, 0.12, 0.5, 0.75
RightFlipperExt.SetMaterial 0.45, 0.0, 0.75, 0.6
LeftFlipperExt.SetMaterial 0.45, 0.0, 0.75, 0.6
End Sub

'============================== PHYSICS XML ===========================
'<?xml version="1.0" encoding="utf-8"?>
'<document>
' <physics slope="5.8" fps="256" threaded="0"></physics>
' <ball newtonDamping="0.002" mass="90" gravity="6500" damping="1.0"></ball>
' <flipper rotationSpeedChart="{0.0,1.0},{3.9,3.8},{9.5,9.0},{15.1,15.6},{19.8,22.0},{24.6,31.5},{26.3,39.3},{28.0,50.0},{29.1,62.0},{29.5,75.0},{30.0,100.0},{30.1,160.0}[0.0,0.0],[20.5,1.0],[55.3,14.5],[90.0,50.0],[100.0,100.0]" newtonDamping="1" releaseOmega="35" mass="99999" omega="32" moeMethod="0"
' leftXoff="0" leftYoff="0" leftZoff="0"
' rightXoff="0" rightYoff="0" rightZoff="0"></flipper>

right now i'm trying it on my table, and ...... mmmmmm ..... the good news is i managed to put my bounce sound in, the ugly i have a lot of questions....for example where is the configuration of the MinOmega / MaxOmega....
 
Last edited:
I honestly thought "dynamic flipper" did this without it rotationSpeedChart..... ie based on where the ball is hit by the fin

I made a guess,(I'm just speculating),meanwhile not knowing what the correct swing was for optimal gameplay, I always configured between 52/54/56/58, then I believed that the system (DF) would calculate it automatically ... if the swing is 54 .. .. it means that in off it is 0, in on it is 54 .... now if from 0 to 54 we divide the fin into 8 parts, and we say that the ball hits the third part of the fin, look at the image
View attachment 21406
would have used a percentage of omega suitable for that position in which the ball is hit, automatically, without the need for extraordinary mathematical calculations in rotazioneSpeedChart inside of xml.....


Hi @JLou5641

DF=dynamic flippers

If i am not misunderstood you are a pvx man? it is interesting to see a guy who is interested in fp / physics.

As for me, in terms of DF, I use the standard one, I don't use shivaflippers ... if shivaflippers is more suitable for a tap-pass, my best wishes .... I can't keep up with these codes or that are too complicated for me to understand,of abbreviated terms that I don't understand what is, like: EOS, flipper bats, coil, and other strange things for me
but I would be more interested in the standard DF, i I already have my beliefs about DF, and for a better configuration to get optimal gameplay, which is not enough just the DF to configure but there are other forces to consider, that by the way I'm talking about it
Here

I was saying for "rotationSpeedChart", there is a configuration for standard DF, for which to use and it would improve, not only the aim, but the gameplay of the table then i am happy to use, and i would thank you all infinitely.


happy holidays, but i didn't ask for an update


You have everything? I mean playfield, plastic, textures of each object, 3d models (I know they are in mesh) sounds, and above all dmd animations?
You probably don't know me, but I've made some difficult tables, it's easy for me to build a table having all the resources, like my Batman (data east).....before I embark on this project, I need to know this, and as it happened for Batman, I will need help with some math code if need be, but Stargate for FP, I always liked having, I love the stargate saga, I built an original


@GeorgeH
You designed this configuration,or JLou5641? it seems to me the same one you suggested in Stardust, right?
It is the same. I just copied JLou5641's code. TZ used an earlier version of JLou5641's code.
 
@JLou5641 This is the code I think you requested a while back. It comes close to producing the curve you wanted some time ago.

Code:
Const MinOmegaB = 16


        If RightFlipperExt.ContactPoint > 1.2 then RightFlipperExt.Omega = (MinOmegaB):End If
        If RightFlipperExt.ContactPoint <= 1.2 and RightFlipperExt.ContactPoint > 1.175 then RightFlipperExt.Omega = (MinOmegaB+14.20):End If
        If RightFlipperExt.ContactPoint <= 1.175 and RightFlipperExt.ContactPoint > 1.15 then RightFlipperExt.Omega = (MinOmegaB+14.62):End If
        If RightFlipperExt.ContactPoint <= 1.15 and RightFlipperExt.ContactPoint > 1.125 then RightFlipperExt.Omega = (MinOmegaB+15.00):End If
        If RightFlipperExt.ContactPoint <= 1.125 and RightFlipperExt.ContactPoint > 1.1 then RightFlipperExt.Omega = (MinOmegaB+15.40):End If
        If RightFlipperExt.ContactPoint <= 1.1 and RightFlipperExt.ContactPoint > 1.075 then RightFlipperExt.Omega = (MinOmegaB+15.70):End If
        If RightFlipperExt.ContactPoint <= 1.075 and RightFlipperExt.ContactPoint > 1.05 then RightFlipperExt.Omega = (MinOmegaB+15.84):End If
        If RightFlipperExt.ContactPoint <= 1.05 and RightFlipperExt.ContactPoint > 1.025 then RightFlipperExt.Omega = (MinOmegaB+15.98):End If
        If RightFlipperExt.ContactPoint <= 1.025 and RightFlipperExt.ContactPoint > 1.0 then RightFlipperExt.Omega = (MinOmegaB+16.11):End If
        If RightFlipperExt.ContactPoint <= 1.0 and RightFlipperExt.ContactPoint > 0.95 then RightFlipperExt.Omega = (MinOmegaB+16.20):End If
        If RightFlipperExt.ContactPoint <= 0.95 and RightFlipperExt.ContactPoint > 0.9 then RightFlipperExt.Omega = (MinOmegaB+15.98):End If
        If RightFlipperExt.ContactPoint <= 0.9 and RightFlipperExt.ContactPoint > 0.85 then RightFlipperExt.Omega = (MinOmegaB+15.70):End If
        If RightFlipperExt.ContactPoint <= 0.85 and RightFlipperExt.ContactPoint > 0.8 then RightFlipperExt.Omega = (MinOmegaB+15.00):End If
        If RightFlipperExt.ContactPoint <= 0.8 and RightFlipperExt.ContactPoint > 0.75 then RightFlipperExt.Omega = (MinOmegaB+13.83):End If
        If RightFlipperExt.ContactPoint <= 0.75 and RightFlipperExt.ContactPoint > 0.7 then RightFlipperExt.Omega = (MinOmegaB+12.67):End If
        If RightFlipperExt.ContactPoint <= 0.7 and RightFlipperExt.ContactPoint > 0.65 then RightFlipperExt.Omega = (MinOmegaB+11.50):End If
        If RightFlipperExt.ContactPoint <= 0.65 and RightFlipperExt.ContactPoint > 0.6 then RightFlipperExt.Omega = (MinOmegaB+10.33):End If
        If RightFlipperExt.ContactPoint <= 0.6 and RightFlipperExt.ContactPoint > 0.55 then RightFlipperExt.Omega = (MinOmegaB+9.17):End If
        If RightFlipperExt.ContactPoint <= 0.55 and RightFlipperExt.ContactPoint > 0.5 then RightFlipperExt.Omega = (MinOmegaB+8.00):End If
        If RightFlipperExt.ContactPoint <= 0.5 and RightFlipperExt.ContactPoint > 0.45 then RightFlipperExt.Omega = (MinOmegaB+6.83):End If
        If RightFlipperExt.ContactPoint <= 0.45 and RightFlipperExt.ContactPoint > 0.4 then RightFlipperExt.Omega = (MinOmegaB+5.67):End If
        If RightFlipperExt.ContactPoint <= 0.4 and RightFlipperExt.ContactPoint > 0.35 then RightFlipperExt.Omega = (MinOmegaB+4.50):End If
        If RightFlipperExt.ContactPoint <= 0.35 and RightFlipperExt.ContactPoint > 0.3 then RightFlipperExt.Omega = (MinOmegaB+3.33):End If
        If RightFlipperExt.ContactPoint <= 0.3 and RightFlipperExt.ContactPoint > 0.25 then RightFlipperExt.Omega = (MinOmegaB+2.17):End If
        If RightFlipperExt.ContactPoint <= 0.25 and RightFlipperExt.ContactPoint > 0.2 then RightFlipperExt.Omega = (MinOmegaB+1.00):End If
        If RightFlipperExt.ContactPoint <= 0.2 then RightFlipperExt.Omega = (MinOmegaB):End If
    End if
 
the result is near the same, but less comprehensible to configure.
On my code, you just set omega for each point like here but you don't need a "minOmega". it's useless
 
I'm pretty sure that "{0.0,100.0}[0.0,100.0]" is the default setting.
Yes,I know ... but I wonder why this value he have.

It is the same. I just copied JLou5641's code. TZ used an earlier version of JLou5641's code.
ok,thanks.
 
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.
      JonPurpleHaze @ JonPurpleHaze: Ok, keep in touch!
      Back
      Top