Physics/XML BAM About physics ......For a better gameplay!

Paolo

No Bam no Play
Chat Moderator
Site Supporters
Joined
Mar 16, 2013
Messages
1,337
Solutions
3
Reaction score
609
Points
131
Favorite Pinball Machine
Batman(Data East)
Hello everyone......

Okay, this is probably a topic discussed many and many times, but sometimes things happen that a person, who cannot explain certain situations.
Now, I don't know if the fact that I have not always installed every release of Bam, but only replaced, from version 290, up to the latest current version, which I installed this time.

I state that I am not a great "physics tweaks man", like @GeorgeH or someone else.I almost always left the standard FP physics in my tables, that is, not using other types of "xml" but only making my changes to the objects in the fp editor, so never in "physics tweaks" in menu bam, and only for a few years I use "dynamic flippers", then only after having tried everything, I create my own "xml"

So I ask those who somehow have had a feeling that something is different in the physics of FP ...I mean, it seems that all of a sudden, the FP gameplay, has become slow, I don't know if I can be clear, that is to have a faster gameplay I would have to make changes that I never needed to do .... maybe a another user who recently discussed this with me ... can make a speech ....

The crux of the matter is whether by chance installing the last version of Bam, the 329 .... I had this feeling of slowness,underline "feeling" because I don't know how to define this situation.


 
Last edited:
I have not noticed any change in physics with BAM version 329. I did experience a change in physics when I added your flipper bounce sound to the Twilight Zone table. AnonTet and I experimented with it and found we can add the content of your flipper sound subroutine to the Bounce Control Sub OnPreHitFlipperSettings(FlipperExt). That fixed the physics problem I was having with the physics. Apparently, the physics suffers if there are too many subroutines on the dynamic flippers.
 
I have not noticed any change in physics with BAM version 329.
just to understand better, using the 329, and without doing any kind of "physics tweaks" in the menu bam, you didn't have this feeling of slowness?

I did experience a change in physics when I added your flipper bounce sound to the Twilight Zone table.

Ahhhh......here's a fact!!!!!
what kind of change?
AnonTet and I experimented with it and found we can add the content of your flipper sound subroutine to the Bounce Control Sub OnPreHitFlipperSettings(FlipperExt).
Ahhhh, so he knows about this? but I didn't understand what you added, you don't specify it
That fixed the physics problem I was having with the physics. Apparently, the physics suffers if there are too many subroutines on the dynamic flippers.
and again ..... what you have added?it is not clear to me

ok I have always used this new feature, even before version 329, and I have not had any feeling of slowness in the gameplay, maybe now with the 329 there is this problem, I wonder?
 
Last edited:
ok this is the code.....I also opened a suitable thread for this
'--------------------------sound bounce
xBAM.CreateAllExt()

Sub LeftFlipper_preHit()
Flipper_preHit(LeftFlipperExt)
End Sub

Sub RightFlipper_preHit()
Flipper_preHit(RightFlipperExt)
End Sub

Const MinBallSpeed = 100
Const MaxBallSpeed = 1000

Sub Flipper_preHit(FlipperExt)
If Not FlipperExt.Hit Then Exit Sub ' we don't expect hit
If FlipperExt.BallVSpeed < MinBallSpeed Then Exit Sub ' ball moves too slow.. no sound

Dim vol
vol = FlipperExt.BallVSpeed / MaxBallSpeed
If vol > 1 Then vol = 1
PlaySound "fx-rubber", vol*2 ' sound volume

AddDebugText "vol = " & vol & ", CP = " & FlipperExt.ContactPoint
End Sub

and you say you noticed a change in physics, after you have added this right? ..... ok but what? and what did you do to fix it? if you tell me that you and anontet etsolved it
 
Last edited:
@wild,

The problem is not the code. It's FP being FP I think. I have no idea why somethings happen. I just think of possible logical solutions and try. I'm always updated to latest version available unless there's a know problem obviously.

Keep in mind Twilight Zone and Bally Spectrum have a complex flippers code at the moment (thanks to @shiva). I can't even say I fully understand it 100% so the problem might not be the same.

I'm sure I won't be clear enough on this but I will try to explain in steps

- I removed the Sub OnPreHitFlipperSettings(FlipperExt)

- I moved the code from Sub OnPreHitFlipperSettings_nobounceControl(FlipperExt) to
Sub OnPreHitFlipperSettings_bounceControl(FlipperExt)

- In Sub LeftFlipper_prehit() and Sub RightFlipper_prehit() I call
OnPreHitFlipperSettings_bounceControl(LeftFlipperExt) and OnPreHitFlipperSettings_bounceControl(RightFlipperExt) , respectively. Don't forget the other flippers on the table.

- Sub OnPreHitFlipperSettings_bounceControl(FlipperExt) now looks like this:

Code:
    Dim elasticCoef
    Dim maxElasticCoef
    Dim ballSpeed
    Dim ball
    Set Ball = xBAM.BallCloseTo(0,0)

    If Not FlipperExt.Hit Then Exit Sub                   ' we don't expect hit

    'Ball hit on flipper sound
    Const MinBallSpeed = 400
    Dim vol

    ballSpeed = (FlipperExt.BallVSpeed + xBAM.Ball.Speed) * 0.5
    If ballSpeed < MinBallSpeed Then 
        vol = 0   ' ball moves too slow.. no sound
    Else
        ballSpeed = (FlipperExt.BallVSpeed + xBAM.Ball.Speed) * 0.5
        vol = FlipperExt.BallVSpeed / ballSpeed
        If vol > 1 Then vol = 1
        PlaySound "fx-rubber", vol*0.5
    End If
    AddDebugText "vol = " & vol & ", CP = "  & FlipperExt.ContactPoint

' No Bounce at all. 85 is the speed of the ball from a cradled release to the tip of the flipper.
    If xBAM.Ball.Speed <= 85 then
        'OnPreHitFlipperSettings_nobounceControl(FlipperExt)
        adddebugtext "noBounce"
        LeftFlipperExt.SetMaterial       0.62,        0.12,       0.06,      0.075
        RightFlipperExt.SetMaterial      0.62,        0.12,       0.06,      0.075
        EXIT SUB
    End If

After this code is the usual stuff.

If this solves the problem, I have no idea. Like I said the code is very different in the way it works with physics.
 
just to understand better, using the 329, and without doing any kind of "physics tweaks" in the menu bam, you didn't have this feeling of slowness?
I played a table without dynamic flippers and original physics and can't tell any difference between 329 and older versions.

Ahhhh......here's a fact!!!!!
what kind of change?
The table played slower and the ball was not able to go all the way up the ramps. It felt like the damping was reduced.
Ahhhh, so he knows about this? but I didn't understand what you added, you don't specify it
I followed your tutorial exactly with calls to run your subroutine on each flipper (exactly the way you set it up in your demo table).

and again ..... what you have added?it is not clear to me
I took your code as pasted below (same as yours) and pasted it inside the subroutine for bounce control which is this one:

Sub OnPreHitFlipperSettings(FlipperExt)

Your code:

Const MinBallSpeed = 100
Const MaxBallSpeed = 1000

Dim ball
Set ball = xBAM.BallCloseTo(0,0)

If Not FlipperExt.Hit Then Exit Sub ' we don't expect hit

If FlipperExt.BallVSpeed < MinBallSpeed Then Exit Sub ' ball moves too slow.. no sound

Dim vol
vol = FlipperExt.BallVSpeed / MaxBallSpeed
If vol > 1 Then vol = 1
PlaySound "fx-rubber3", vol*2 ' sound volume

AddDebugText "vol = " & vol & ", CP = " & FlipperExt.ContactPoint

AnonTet and I made a few changes to the bounce control code that I had been using to combine several subroutines into one. It still has the same basic code we had been using.

ok I have always used this new feature, even before version 329, and I have not had any feeling of slowness in the gameplay, maybe now with the 329 there is this problem, I wonder?
I am not able to tell any difference.

This is the entire subroutine I use for bounce control now:

Sub OnPreHitFlipperSettings(FlipperExt)
If BAM_VERSION < 254 then Exit Sub
Const MinBallSpeed = 100
Const MaxBallSpeed = 1000

Dim ball
Set ball = xBAM.BallCloseTo(0,0)

If Not FlipperExt.Hit Then Exit Sub ' we don't expect hit

If FlipperExt.BallVSpeed < MinBallSpeed Then Exit Sub ' ball moves too slow.. no sound

Dim vol
vol = FlipperExt.BallVSpeed / MaxBallSpeed
If vol > 1 Then vol = 1
PlaySound "fx-rubber3", vol*2 ' sound volume

AddDebugText "vol = " & vol & ", CP = " & FlipperExt.ContactPoint


If xBAM.Ball.Speed <= 85 then
'OnPreHitFlipperSettings_nobounceControl(FlipperExt)
adddebugtext "noBounce"
LeftFlipperExt.SetMaterial 0.62, 0.12, 0.06, 0.075
RightFlipperExt.SetMaterial 0.62, 0.12, 0.06, 0.075
Flipper1Ext.SetMaterial 0.62, 0.12, 0.06, 0.075
Flipper2Ext.SetMaterial 0.62, 0.12, 0.06, 0.075
EXIT SUB
End If

base_elasticCoef = 0.55 ' very bouncy flipper rubber
expected_ball_speed_after_hit = 146 ' calc elasticCoef to get desired ball speed after ball hit flipper
minimum_elasticCoef_to_scale_fast_balls = 0.01 ' we will add this to calculated elastiCoef, so ball after hit will have aditional 5% of speed before hit
reduction_for_flipper_in_motion = 0.23 ' if flipper is not in starting point, reduce elasticCoef by 20%

' 85 is the speed of the ball from a cradled release to the tip of the flipper.
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
 
It's FP being FP I think
is you think well !!

ok, but I asked a specific question.....and @GeorgeH he replied that he noticed a change after adding the sound bounce ...... now not received a reply.after my questions.

now I can't know what kind of code he uses for the fins, or the standard one (if we can define it that way) or that of shiva ...
but I would be interested to know what kind of change he have noticed...

therefore, not knowing what change it is, I cannot say if your solution that you expose me, is the definitive solution, and in my opinion it is made on the code of shiva, which is different from the one I use .... which then it is the one that everyone uses, only the omega and these configurations(below) are available to everyone for any personal changes

const base_elasticCoef = 0.56 ' very bouncy flipper rubber
const expected_ball_speed_after_hit = 160.00 ' calc elasticCoef to get desired ball speed after ball hit flipper
const minimum_elasticCoef_to_scale_fast_balls = 0.2 ' 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.21 ' if flipper is not in starting point, reduce elasticCoef by 20%

EDIT: @GeorgeH
you answered me while I was writing, ok now I look at your answers, thanks
 
Last edited:
Paolo,

I think we posted a reply at the same time. See the post above your last one.

George
 
I played a table without dynamic flippers and original physics and can't tell any difference between 329 and older versions.
ok,thanks.
The table played slower and the ball was not able to go all the way up the ramps. It felt like the damping was reduced.
it looks the same as what I perceived, but in two different situations,so it has to be evaluated, but what is this damping?
I am not able to tell any difference.
ok,just to understand better....... one thing is ... not being able, and another, that you have not noticed any difference, in the sense that there is neither,so?
This is the entire subroutine I use for bounce control now:
ok, thanks I'll try it .... if I can be able to insert it.
both you and anontet, have proposed it differently .... but I also see it is modified by the usual code that I use and know usually for dynamic flippers ....
 
no,too complicated looking for what I to do .... ok, this (below in black) is the usual one I use .... as you can see there is also your annotation on changing the settings you see below in blue, regarding this "leftYoff equals 0 and rightYoff equals 0"
which is now solved, when you create your own "xml" bam it creates those exact values

ok,could you put me the sound bounce,please?

Sub OnPreHitFlipperSettings_bounceControl(FlipperExt)
If BAM_VERSION < 233 then Exit Sub
' Params to tweak Default = Group 4....is now Group 2
const base_elasticCoef = 0.56 ' very bouncy flipper rubber
const expected_ball_speed_after_hit = 160.00 ' calc elasticCoef to get desired ball speed after ball hit flipper
const minimum_elasticCoef_to_scale_fast_balls = 0.2 ' 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.21 ' if flipper is not in starting point, reduce elasticCoef by 20%



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


If BAM_VERSION => 233 then
Dim omegaCorrectionL
Dim omegaCorrectionR
Dim omegaCorrectionRU
Dim BounceMix
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 29 and 33.
' You need to leave the section below "MaxOmega" unchanged and then go on to "BOUNCE CCONTROL" below.
' Gimli likes to be able to change the omega at the base of each flipper so it affects aiming and the option is included here also.

If BAM_VERSION => 233 then
const MinOmega = 32 ' Omega at tip of flipper. Must be < MaxOmega.
const MaxOmegaL = 40 ' Omega at base of left flipper. Must be > MinOmega.
const MaxOmegaR = 38 ' Omega at base of right flipper. Must be > MinOmega.
const MaxOmegaRU = 36 ' Omega at base of right flipper. Must be > MinOmega.
End If

'''''''''''''''''''''''''''''''''''''''''''''''Left Flipper PreHit Code'''''''''''''''''''''''''''''
Sub LeftFlipper_prehit()
If BAM_VERSION < 233 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 ' Bounce Control On

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

''''''''''''''''''''''''''''''''''''''''''''Right Flipper Prehit Code'''''''''''''''''''''''''''''''''''''''
Sub RightFlipper_prehit()
If BAM_VERSION < 233 then Exit Sub

Dim ball
Set ball = xBAM.BallCloseTo(0,0)
If xBAM.Ball.Speed <= 200 then BounceMix = 1 ' Bounce Control Turned Off
If xBAM.Ball.Speed > 200 then BounceMIx = 2 ' Bounce Control On

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





''''''''''''''''''''''''''''''''''''''''''''RightFlipperUp Prehit Code'''''''''''''''''''''''''''''''''''''''
Sub RightFlipperUp_prehit()
If BAM_VERSION < 233 then Exit Sub

Dim ball
Set ball = xBAM.BallCloseTo(0,0)
If xBAM.Ball.Speed <= 200 then BounceMix = 1 ' Bounce Control Turned Off
If xBAM.Ball.Speed > 200 then BounceMIx = 2 ' Bounce Control On

OnPreHitFlipperSettings(RightFlipperUpExt)
omegaCorrectionRU = MaxOmegaRU - (RightFlipperUpExt.ContactPoint * ((MaxOmegaRU - MinOmega)/1.2))
If RightFlipperUpExt.ContactPoint < 0.0 then RightFlipperUpExt.Omega = MaxOmegaRU
If RightFlipperUpExt.ContactPoint > 1.2 then RightFlipperUpExt.Omega = MinOmega
If (RightFlipperUpExt.ContactPoint => 0.0) And (RightFlipperUpExt.ContactPoint =< 1.2) then
RightFlipperUpExt.Omega = omegaCorrectionRU
End if
End Sub



' BOUNCE CONTROL

Sub OnPreHitFlipperSettings(FlipperExt)
If BAM_VERSION < 233 then Exit Sub
If BounceMix = 1 then OnPreHitFlipperSettings_nobounceControl(FlipperExt) ' Bounce Control Turned Off
If BounceMix = 2 then OnPreHitFlipperSettings_bounceControl(FlipperExt) ' Bounce Control On
End Sub

' Bounce control is the amount of bounce the ball makes when it hits a stationary flipper. If you want to increase or decrease
' bounce, it can be difficult because there are 4 parameters that you have to adjust. To make it easier, I have provided the
' following list of values that can be entered into the code below. I think the changes from one group of settings to the next result
' in fairly small changes in bounce but you can use the midpoint between two sets of values also. Note that bounce control
' overrides flipper elasticity listed in the XML.

' Suggested values from low bounce on the left to high bounce on the right
' Group: 1 2 3 4 5 6 7 8 9 10 11 12
' base_elasticCoef 0.84 0.86 0.88 0.89 0.91 0.93 0.95 0.97 0.99 1.01 1.03 1.04
' expected_ball_speed_after_hit 280.00 300.00 320.00 340.00 360.00 380.00 400.00 420.00 440.00 460.00 480.00 500.00
' minimum_elasticCoef_to_scale_fast_balls 0.09 0.11 0.13 0.14 0.16 0.18 0.20 0.22 0.24 0.26 0.28 0.29
' reduction_for_flipper_in_motion 0.19 0.18 0.18 0.17 0.16 0.16 0.15 0.14 0.14 0.13 0.13 0.12



' New Values (where values in the XML for leftYoff equals 0 and rightYoff equals 0)

' Group: 1 2 3 4 5 6 7 8 9 10 11 12
' base_elasticCoef 0.55 0.57 0.59 0.60 0.62 0.64 0.66 0.68 0.70 0.71 0.73 0.75
' expected_ball_speed_after_hit 146.00 170.00 195.00 219.00 243.00 267.00 292.00 316.00 340.00 365.00 389.00 413.00
' minimum_elasticCoef_to_scale_fast_balls 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.09 0.10 0.11
' reduction_for_flipper_in_motion 0.23 0.22 0.21 0.20 0.19 0.19 0.18 0.17 0.16 0.16 0.15 0.14




Sub OnPreHitFlipperSettings_bounceControl(FlipperExt)
If BAM_VERSION < 233 then Exit Sub
' Params to tweak Default = Group 4....is now Group 2
const base_elasticCoef = 0.56 ' very bouncy flipper rubber
const expected_ball_speed_after_hit = 160.00 ' calc elasticCoef to get desired ball speed after ball hit flipper
const minimum_elasticCoef_to_scale_fast_balls = 0.2 ' 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.21 ' 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)

RightFlipperExt.SetMaterial 0.62, 0.12, 0.06, 0.075
LeftFlipperExt.SetMaterial 0.62, 0.12, 0.06, 0.075
RightFlipperUpExt.SetMaterial 0.62, 0.12, 0.06, 0.075
End Sub
 
@wild

I did more than just adding the sound code. I structured it like I have explained in my post so check agains what you have to see the differences.

If I didn't screw up, it should work.


Code:
'------------------------------------------------------------------
' Dynamic Flipper Settings
'------------------------------------------------------------------


If BAM_VERSION => 233 then
Dim omegaCorrectionL
Dim omegaCorrectionR
Dim omegaCorrectionRU
Dim BounceMix
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 29 and 33.
' You need to leave the section below "MaxOmega" unchanged and then go on to "BOUNCE CCONTROL" below.
' Gimli likes to be able to change the omega at the base of each flipper so it affects aiming and the option is included here also.

If BAM_VERSION => 233 then
const MinOmega = 32 ' Omega at tip of flipper. Must be < MaxOmega.
const MaxOmegaL = 40 ' Omega at base of left flipper. Must be > MinOmega.
const MaxOmegaR = 38 ' Omega at base of right flipper. Must be > MinOmega.
const MaxOmegaRU = 36 ' Omega at base of right flipper. Must be > MinOmega.
End If

'''''''''''''''''''''''''''''''''''''''''''''''Left Flipper PreHit Code'''''''''''''''''''''''''''''
Sub LeftFlipper_prehit()
If BAM_VERSION < 233 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 ' Bounce Control On

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

''''''''''''''''''''''''''''''''''''''''''''Right Flipper Prehit Code'''''''''''''''''''''''''''''''''''''''
Sub RightFlipper_prehit()
If BAM_VERSION < 233 then Exit Sub

Dim ball
Set ball = xBAM.BallCloseTo(0,0)
'If xBAM.Ball.Speed <= 200 then BounceMix = 1 ' Bounce Control Turned Off
'If xBAM.Ball.Speed > 200 then BounceMIx = 2 ' Bounce Control On

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





''''''''''''''''''''''''''''''''''''''''''''RightFlipperUp Prehit Code'''''''''''''''''''''''''''''''''''''''
Sub RightFlipperUp_prehit()
If BAM_VERSION < 233 then Exit Sub

Dim ball
Set ball = xBAM.BallCloseTo(0,0)
'If xBAM.Ball.Speed <= 200 then BounceMix = 1 ' Bounce Control Turned Off
'If xBAM.Ball.Speed > 200 then BounceMIx = 2 ' Bounce Control On

OnPreHitFlipperSettings(RightFlipperUpExt)
omegaCorrectionRU = MaxOmegaRU - (RightFlipperUpExt.ContactPoint * ((MaxOmegaRU - MinOmega)/1.2))
If RightFlipperUpExt.ContactPoint < 0.0 then RightFlipperUpExt.Omega = MaxOmegaRU
If RightFlipperUpExt.ContactPoint > 1.2 then RightFlipperUpExt.Omega = MinOmega
If (RightFlipperUpExt.ContactPoint => 0.0) And (RightFlipperUpExt.ContactPoint =< 1.2) then
RightFlipperUpExt.Omega = omegaCorrectionRU
End if
End Sub



' BOUNCE CONTROL

'Sub OnPreHitFlipperSettings(FlipperExt)
'If BAM_VERSION < 233 then Exit Sub
'If BounceMix = 1 then OnPreHitFlipperSettings_nobounceControl(FlipperExt) ' Bounce Control Turned Off
'If BounceMix = 2 then OnPreHitFlipperSettings_bounceControl(FlipperExt) ' Bounce Control On
'End Sub

' Bounce control is the amount of bounce the ball makes when it hits a stationary flipper. If you want to increase or decrease
' bounce, it can be difficult because there are 4 parameters that you have to adjust. To make it easier, I have provided the
' following list of values that can be entered into the code below. I think the changes from one group of settings to the next result
' in fairly small changes in bounce but you can use the midpoint between two sets of values also. Note that bounce control
' overrides flipper elasticity listed in the XML.

' Suggested values from low bounce on the left to high bounce on the right
' Group: 1 2 3 4 5 6 7 8 9 10 11 12
' base_elasticCoef 0.84 0.86 0.88 0.89 0.91 0.93 0.95 0.97 0.99 1.01 1.03 1.04
' expected_ball_speed_after_hit 280.00 300.00 320.00 340.00 360.00 380.00 400.00 420.00 440.00 460.00 480.00 500.00
' minimum_elasticCoef_to_scale_fast_balls 0.09 0.11 0.13 0.14 0.16 0.18 0.20 0.22 0.24 0.26 0.28 0.29
' reduction_for_flipper_in_motion 0.19 0.18 0.18 0.17 0.16 0.16 0.15 0.14 0.14 0.13 0.13 0.12



' New Values (where values in the XML for leftYoff equals 0 and rightYoff equals 0)

' Group: 1 2 3 4 5 6 7 8 9 10 11 12
' base_elasticCoef 0.55 0.57 0.59 0.60 0.62 0.64 0.66 0.68 0.70 0.71 0.73 0.75
' expected_ball_speed_after_hit 146.00 170.00 195.00 219.00 243.00 267.00 292.00 316.00 340.00 365.00 389.00 413.00
' minimum_elasticCoef_to_scale_fast_balls 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.09 0.10 0.11
' reduction_for_flipper_in_motion 0.23 0.22 0.21 0.20 0.19 0.19 0.18 0.17 0.16 0.16 0.15 0.14


' --- OLD OnPreHitFlipperSettings_bounceControl now is NEW OnPreHitFlipperSettings

Sub OnPreHitFlipperSettings(FlipperExt)
If BAM_VERSION < 233 then Exit Sub
' Params to tweak Default = Group 4....is now Group 2
const base_elasticCoef = 0.56 ' very bouncy flipper rubber
const expected_ball_speed_after_hit = 160.00 ' calc elasticCoef to get desired ball speed after ball hit flipper
const minimum_elasticCoef_to_scale_fast_balls = 0.2 ' 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.21 ' if flipper is not in starting point, reduce elasticCoef by 20%

Const MinBallSpeed = 100
Const MaxBallSpeed = 1000

Dim ball
Set ball = xBAM.BallCloseTo(0,0)

If Not FlipperExt.Hit Then Exit Sub ' we don't expect hit

Dim vol
Dim ballSpeed

ballSpeed = (FlipperExt.BallVSpeed + xBAM.Ball.Speed) * 0.5
If ballSpeed < MinBallSpeed Then 
vol = 0   ' ball moves too slow.. no sound
Else
vol = FlipperExt.BallVSpeed / MaxBallSpeed
If vol > 1 Then vol = 1
PlaySound "fx-rubber3", vol*2 ' sound volume
End If

AddDebugText "vol = " & vol & ", CP = " & FlipperExt.ContactPoint

If xBAM.Ball.Speed <= 200 then
If FlipperExt.Hit Then
'nobounceControl
adddebugtext "noBounce"
RightFlipperExt.SetMaterial 0.62, 0.12, 0.06, 0.075
LeftFlipperExt.SetMaterial 0.62, 0.12, 0.06, 0.075
RightFlipperUpExt.SetMaterial 0.62, 0.12, 0.06, 0.075
EXIT SUB
End If
ElseIf xBAM.Ball.Speed > 200 then
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 If
End Sub

'Sub OnPreHitFlipperSettings_nobounceControl(FlipperExt)

'RightFlipperExt.SetMaterial 0.62, 0.12, 0.06, 0.075
'LeftFlipperExt.SetMaterial 0.62, 0.12, 0.06, 0.075
'RightFlipperUpExt.SetMaterial 0.62, 0.12, 0.06, 0.075
'End Sub
 
Last edited:
@GeorgeH
@Gimli


DF= dynamic flipper

I have a question for you two,about the "left/righr_flipper",( I hope it doesn't take rav's help too) since the DF, you2 have finalized it .....

we are used to changing:
1) the omega in the code of bam
2) the strength in the editor of fp ..... ok
consequently we increase these parameters to make the ball to do:
1) get to the top of the playfield
2) take a ramp, and complete it
3) reach a certain object(drop,target,etc) positioned at the top

so by doing this, we have and get two really strong fins to push the ball farther

here is my question and thought, this is valid for the upper half of the playfield ... but consequently from the half to the inferior of the playfield, we have a ball that bounces like a top or whirligig or spinning top (trottola in italian) if it hits a rubber-post, or a plastic, or a peg ..... I don't know if I was clear

now you can look for a way to have an ecuo balance, I mean, strong for the upper of the playfied, and medium for the lower of the playfield??!!!

I don't know how to conceive such a method or code, but for sure I know what to call it, "Dynamic Flipper balanced"

tell me if it is not clear what I have proposed
 
Last edited:
Last edited:
ok...thanks T
If it works, you're welcome, if not, I wasn't me :D

Regarding questions for Gimli and GeorgeH, I'm confused.
Are you asking for different bounce settings depending on the object location (lower field vs upper field)?

I can think of a way to do that with materials because I already did it in Black Knight (still wip).
I used rubberIntMat specifically for one object. So you can use rubber Hard for upper field, rubberInt for lower field and rubbersoft for flippers...
Tthis obviously wont' work for plastics unless...

...you complicate quite a bit :)

From now on is just speculation and I can actually foresee some issues because FP is FP :)

So a possible solution in my head, because we can load physics on the fly, you'd have to put a trigger in front of the object. Then on trigger_hit() load new physics and on trigger_unhit() reload normal physics.

Here's how you load physics (keep in mind NOT all parameters can be changed. I'm assuming materials can be changed because you can change them in BAM menu)

Code:
Sub physicsChange()
    Select Case value
    Case 0
    xBAM.PhysicsXML = "" & vbcrlf &_
    "<?xml version=""1.0"" encoding=""utf-8""?>" & vbcrlf &_
    "<document>" & vbcrlf &_
    "  <physics slope=""6.8"" fps=""296"" threaded=""1""></physics>" & vbcrlf &_
    "  <ball newtonDamping=""0"" mass=""60"" gravity=""7800"" damping=""0.85""></ball>" & vbcrlf &_
    "  <flipper rotationSpeedChart=""{0.0,100.0}[0.0,100.0]"" newtonDamping=""1"" releaseOmega=""28"" mass=""20150"" omega=""56"" moeMethod=""0"" leftXoff=""0"" leftYoff=""0"" leftZoff=""0"" rightXoff=""0"" rightYoff=""0"" rightZoff=""0""></flipper>" & vbcrlf &_
    "  <bumper impulse=""90.0"" impulseRandomness=""0"" vectorRandomness=""6""></bumper>" & vbcrlf &_
    "  <autoplunger mass=""20000.0"" force=""60000.0""></autoplunger>" & vbcrlf &_
    "  <diverter mass=""10000.0"" omega=""33.0""></diverter>" & vbcrlf &_
    "  <gate mass=""0.010"" gravity=""50"" damping=""0.25""></gate>" & vbcrlf &_
    "  <kicker impulse=""500.0"" vukImpulse=""1400.0"" impulseRandomness=""2"" vectorRandomness=""0""></kicker>" & vbcrlf &_
    "  <plunger mass=""15000.0"" force=""22000.0""></plunger>" & vbcrlf &_
    "  <slingshot impulse=""700.0"" impulseRandomness=""15"" vectorRandomness=""3""></slingshot>" & vbcrlf &_
    "  <spindisk mass=""10000.0"" angularDamp=""0.33"" linearDamp=""0.25""></spindisk>" & vbcrlf &_
    "  <spinner mass=""1000.0"" gravity=""9000.0"" angularDamp=""0.50"" angularAccel=""5.25"" spinDampLoose=""0.30"" spinBackLoose=""0.90"" spinDampNorm=""0.45"" spinBackNorm=""0.65"" spinDampTight=""0.70"" spinBackTight=""0.65""></spinner>" & vbcrlf &_
    "  <emkicker mass=""7500.0"" omega=""55.0""></emkicker>" & vbcrlf &_
    "  <varitarget mass=""500.0"" damping=""0.9"" tension=""3.0"" return=""15.0""></varitarget>" & vbcrlf &_
    "  <magnet impulse=""10.0"" impulseRandomness=""2""></magnet>" & vbcrlf &_
    "  <nudge impulse=""120.0"" impulseRandomness=""25.0"" warningLevel=""250"" leftAngle=""65"" upAngle=""0.0"" rightAngle=""295"" vectorRandomness=""5"" visualDistance=""0"" waitPeriod=""300"" maxBallVelocity=""500.0""></nudge>" & vbcrlf &_
    "  <defaultMat softnessCoef=""0.02"" elasticCoef=""0.1"" staticFriction=""0.02"" kineticFriction=""0.02""></defaultMat>" & vbcrlf &_
    "  <playfieldMat softnessCoef=""0.03"" elasticCoef=""0.1"" staticFriction=""0.025"" kineticFriction=""0.015""></playfieldMat>" & vbcrlf &_
    "  <metalMat softnessCoef=""0.01"" elasticCoef=""0.1"" staticFriction=""0.01"" kineticFriction=""0.01""></metalMat>" & vbcrlf &_
    "  <woodMat softnessCoef=""0.03"" elasticCoef=""0.15"" staticFriction=""0.03"" kineticFriction=""0.02""></woodMat>" & vbcrlf &_
    "  <plasticMat softnessCoef=""0.02"" elasticCoef=""0.2"" staticFriction=""0.02"" kineticFriction=""0.01""></plasticMat>" & vbcrlf &_
    "  <rubberHardMat softnessCoef=""0.08"" elasticCoef=""0.32"" staticFriction=""0.04"" kineticFriction=""0.055""></rubberHardMat>" & vbcrlf &_
    "  <rubberIntMat softnessCoef=""0.1"" elasticCoef=""0.42"" staticFriction=""0.05"" kineticFriction=""0.065""></rubberIntMat>" & vbcrlf &_
    "  <rubberSoftMat softnessCoef=""0.12"" elasticCoef=""0.52"" staticFriction=""0.06"" kineticFriction=""0.075""></rubberSoftMat>" & vbcrlf &_
    "  <gateMat softnessCoef=""0.05"" elasticCoef=""0.05"" staticFriction=""0"" kineticFriction=""0""></gateMat>" & vbcrlf &_
    "  <kickerMat softnessCoef=""0.01"" elasticCoef=""0.05"" staticFriction=""0.8"" kineticFriction=""0.8""></kickerMat>" & vbcrlf &_
    "  <rampMat softnessCoef=""0.01"" elasticCoef=""0.01"" staticFriction=""0.01"" kineticFriction=""0.01""></rampMat>" & vbcrlf &_
    "  <plungerMat softnessCoef=""0.04"" elasticCoef=""0.55"" staticFriction=""0.02"" kineticFriction=""0.02""></plungerMat>" & vbcrlf &_
    "  <spindiskMat softnessCoef=""0.05"" elasticCoef=""0.5"" staticFriction=""1.5"" kineticFriction=""2""></spindiskMat>" & vbcrlf &_
    "</document>"
        Case 1
         (... you get the idea...)
End Sub
 
no,too complicated looking for what I to do .... ok, this (below in black) is the usual one I use .... as you can see there is also your annotation on changing the settings you see below in blue, regarding this "leftYoff equals 0 and rightYoff equals 0"
which is now solved, when you create your own "xml" bam it creates those exact values

ok,could you put me the sound bounce,please?

Sub OnPreHitFlipperSettings_bounceControl(FlipperExt)
If BAM_VERSION < 233 then Exit Sub
' Params to tweak Default = Group 4....is now Group 2
const base_elasticCoef = 0.56 ' very bouncy flipper rubber
const expected_ball_speed_after_hit = 160.00 ' calc elasticCoef to get desired ball speed after ball hit flipper
const minimum_elasticCoef_to_scale_fast_balls = 0.2 ' 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.21 ' if flipper is not in starting point, reduce elasticCoef by 20%


I am sorry I don't understand what you mean by "ok,could you put me the sound bounce,please?".

The subroutine for bounce control had been named OnPreHitFlipperSettings_bounceControl(FlipperExt) for a while. I renamed it OnPreHitFlipperSettings(FlipperExt). I posted the entire subroutine previously from beginning to end and it includes your flipper bounce sound.

The concept that Gimli and I developed was to turn the bounce control off when the ball is cradled. We did that by the speed of the ball. When the ball speed was less than 200, bounce control was turned off. When the balls speed goes above 200, the bounce control is turned back on. We felt like the flipper had better accuracy when set up this way. AnonTet changed the ball speed to 85 in the code I posted above but it still does the same thing.
 
@GeorgeH
@Gimli


DF= dynamic flipper

I have a question for you two,about the "left/righr_flipper",( I hope it doesn't take rav's help too) since the DF, you2 have finalized it .....

we are used to changing:
1) the omega in the code of bam
2) the strength in the editor of fp ..... ok
consequently we increase these parameters to make the ball to do:
1) get to the top of the playfield
2) take a ramp, and complete it
3) reach a certain object(drop,target,etc) positioned at the top

so by doing this, we have and get two really strong fins to push the ball farther

here is my question and thought, this is valid for the upper half of the playfield ... but consequently from the half to the inferior of the playfield, we have a ball that bounces like a top or whirligig or spinning top (trottola in italian) if it hits a rubber-post, or a plastic, or a peg ..... I don't know if I was clear

now you can look for a way to have an ecuo balance, I mean, strong for the upper of the playfied, and medium for the lower of the playfield??!!!

I don't know how to conceive such a method or code, but for sure I know what to call it, "Dynamic Flipper balanced"

tell me if it is not clear what I have proposed
Sorry, I don't understand.

It sounds like you want the ball to hit harder at the top of the playfield than at the bottom. I don't know of a way to do that. I always start a new table with the attached XML I set the min and max omegas of the dynamic flippers as listed below:

const MinOmega = 30
const MaxOmega = 45

This is what I start with and then make adjustments.
 

Attachments

  • George's XML.zip
    1 KB · Views: 65
AnonTet changed the ball speed to 85 in the code I posted above but it still does the same thing.
I've corrected the 85 to 200 and one other thing. Sorry about that.
I actually have 3 states in this section and I was looking at the wrong number when I posted.
 
I've corrected the 85 to 200 and one other thing. Sorry about that.
I actually have 3 states in this section and I was looking at the wrong number when I posted.
When I saw it, I decided it was OK. When the ball is cradled, the ball speed is 0 so 85 works.
 
Regarding questions for Gimli and GeorgeH, I'm confused.
Are you asking for different bounce settings depending on the object location (lower field vs upper field)?
no!
you feel confused because you did not understand what I mean .... obviously how I set up my speech is not clear enough ..... yet I thought so.

don't think about the objects on the table for now....but only to "dynamic flippers" function,and how you or "we" configure it (omega, and the other parts in blue, above) to achieve certain targets or objects to hit.....
but look at this photo
esempio.jpg


probably, it's crazy, it's impossible to do..but bam made things we thought impossible, and made them possible ..... think miniplayfield in krull, or in time-machine, or in Nes,or in hockey,or biliard by gimli,or in terry tables ..... etc etc

now what i said above is to have a balanced "dynamic flippers" .... what i mean??? you will say,...... I'll explain

in upper play,a DF, with strong omega.....in lower play, a DF, with average omega

because in the lower playfield, having a strong DF, you will see that the ball when it hits a certain object including: rubber-post, or a plastic, or a peg, to understand an object that has collisions, you will see the ball bounce in all part of table

the point of the question to understand my concept is:

If BAM_VERSION => 233 then
const MinOmega = 32 ' Omega at tip of flipper. Must be < MaxOmega.
const MaxOmegaL = 45 ' Omega at base of left flipper. Must be > MinOmega.
const MaxOmegaR = 45 ' Omega at base of right flipper. Must be > MinOmega.
End If

if you put omega at 45 (or 60) for example, it is strong, right?!! to reach the upper playfield ..... to try and take a ramp,or hit a drop-target or a kicker which is positioned further away....ok you think to ArmorKicker or GargoyleKicker......or the right-ramp
if I do not put a strong omega do not reach these objects.......but it is too strong for the FireLizard1 kicker

for the FireLizard1 kicker a omega 35 it's enough
const MaxOmegaR = 35 ' Omega at base of right flipper. Must be > MinOmega.

example......now if you hit this rubber(below), a omega 45 or 60,in your opinion, what reaction does he have on the ball? remember the fundamental rule ... every action corresponds to a reaction
Cattura5.JPG

I hope it's clear now

@AnonTet
@GeorgeH
@Gimli
 
Last edited:
obviously you have to consider, that in the Fp editor, you must have an equal setting for the two fins that is medium .... so that it does not conflict with the omega ..... in practice you have to leave all the work only omega fins
 
I am sorry I don't understand what you mean by "ok,could you put me the sound bounce,please?".
as Anontet did

...you complicate quite a bit
i'm not talking about xml
Sorry, I don't understand.
see above maybe now my concept is clearer
but maybe with a question you understand it .... what did you do, to reach and complete that particular ramp in TLZ? without using "ramp assist"?
 
see above maybe now my concept is clearer
but maybe with a question you understand it .... what did you do, to reach and complete that particular ramp in TLZ? without using "ramp assist"?
The main thing I did was move the slider to the max for the strength of the flipper. I don't know why but that improved the performance of the ramps more than just increasing the omega for the flipper in the script. Maybe the slider controls more than just the omega (just guessing).

I lowered the miniplayfield and all the ramps leading to it. The miniplayfield was much higher than it needed to be. The lower the ramp height; the better the ramp will perform.

Use the ball roller on the ramps to check for any rough spots. Watch for a sudden rise or fall of the ball where 2 ramps are joined. A sudden rise or fall of the ball will rob the ball of energy for going up the ramp. It helps to temporarily change the color of each section of the ramp so you can be sure to test each joint. On the Independence Day table, changing the ramp color revealed a peg that was sticking up through the bottom of a ramp that the ball was hitting. When the ramp was partially transparent, you couldn't see the peg. On TZ, I found a problem at the start of the ramp. The ball roller showed a sudden jump up where the ramp starts. I fixed it by adding an approach ramp that is not as steep as rest of the ramp. I did the same thing on Space Shuttle. I've noticed it is a problem with most ramps. You should try it.

I also added an invisible wall along the outside wall of the right ramp to change the shape a bit. I sometimes change the shape of a curve on a ramp that may help the performance of the ramp. I couldn't do that on TZ because there isn't enough space so I added the wall instead.

I now understand your long explanation in your reply above. You can set the omega of the dynamic flippers so high that the ball will go up the ramps but then you can have problems with the ball bouncing out of kickers on the lower playfield and hitting other objects too hard. I have found if I set the minOmega much higher than 40, I start having problems like you describe. When I have to set the minOmega higher than 40, I start looking at the physical ramp to see if I can improve the performance like I describe above.

I don't think it would be possible to implement a change for a balanced ball like you describe. In order to implement it, you would have to be able to anticipate where the ball will go when hit by the flipper which I think would be almost impossible. Real pinball tables can't do that either.
 
I now understand your long explanation in your reply above. You can set the omega of the dynamic flippers so high that the ball will go up the ramps but then you can have problems with the ball bouncing out of kickers on the lower playfield and hitting other objects too hard. I have found if I set the minOmega much higher than 40, I start having problems like you describe. When I have to set the minOmega higher than 40, I start looking at the physical ramp to see if I can improve the performance like I describe above.

I don't think it would be possible to implement a change for a balanced ball like you describe. In order to implement it, you would have to be able to anticipate where the ball will go when hit by the flipper which I think would be almost impossible. Real pinball tables can't do that either.
actually, there would be a way...
1) create 2 DF "subs" one with strong omega, the other with medium omega
2) with "xbam ball position", we can tell where the ball is
3) if the ball is in an enclosed area between A to B....called the "sub" DF omega medium
4) if the ball is in an enclosed area between B to C....called the "sub" DF omega strong
esempio.jpg

but it would take someone who could do it and say if it is possible in this way
 
Where the ball is is not enough because you always hit the ball on the flippers in lower playfield. You would need to guess where the ball goes so, it won't work, I think.

I can't help with that.
 
actually, there would be a way...
1) create 2 DF "subs" one with strong omega, the other with medium omega
2) with "xbam ball position", we can tell where the ball is
3) if the ball is in an enclosed area between A to B....called the "sub" DF omega medium
4) if the ball is in an enclosed area between B to C....called the "sub" DF omega strong
View attachment 18877

but it would take someone who could do it and say if it is possible in this way
With BAM we really have an unlimited ability to "try" to make the ball do whatever we want.

It is true that we can monitor the ball in may ways including position , and velocity and now can also change those very parameters dynamically. We can move the ball wherever we want with velocity.

With Air hockey I created the illusion of the paddle hitting the puck
but most of the time I am just moving the puck around based on the real time puck positions and velocities relative to the paddle position
using math equations and NO COLLISIONS are actually occurring.

You can code the dynamic flippers to behave differently based on whatever you want. Shva has a more expansive code for dynamic flippers that accounts for more variables. Whereas George/Gimli code is primarily based on contact point.

So it depends what you want to do Paolo?
It is not clear to me what the problem is ? The ball seems slower in Version .329 ? It can't make it up ramps in the upper playfield ?
I haven't noticed any of these issues personally (except the mouse mode can be intermittent, but that is a new feature that is being developed)
 
Forum activity
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: Damonogy48 is our newest member. Welcome!
      Back
      Top