Have you ever had a table that has 3 or 4 flippers and gotten the ball stuck under one of the flippers on the upper part of the table? It can happen on any flipper that has a wall behind it. It is possible to make a few adjustments that make this occur less often but you usually can't completely eliminate the problem, until now! I have found a neat solution. I have never seen anyone use approach so I decided to write a tutorial on how to do it. There are some additions to the script but they are not difficult so I think anyone can make this change, even if you don't know much about script.

As you can see in the "Before" version of the screenshot, the upper flipper is recessed into the sidewall on the table I edited,
"Jupiter Beta". This makes the ball get stuck at the arrow. On other tables, my experience is the ball still frequently gets stuck here even if the flipper is not recessed.
The fix I found is to add an invisible wall like in the "After" screenshot where the wall is collidable when the flipper is raised and not collidable when the flipper is lowered. On my first revision, I encountered a problem where the ball would sometimes hit the wall before the flipper raised completely. This is because the wall would become collidable instantly before the flipper had time to raise completely. Also, the ball could also enter the area under the flipper in the short time for the flipper to completely lower. These problems were resolved on my second revision by adding two timers. One timer delays making the wall collidable for 30 milliseconds when the flipper was raised. The other timer delays making the wall not collidable for 30 milliseconds when the flipper was lowered. After testing it, I found that the wall was collidable before I operated the flipper. This made the ball get caught by the wall above the flipper. On the third revision, I added a line of script to make the wall not collidable when the game starts. This made everything work perfectly!
The first step is to add a wall like shown in the "After" screenshot. You can make the wall curved by right clicking on one of the red "shape points" and selecting the option to add additional shape points. I suggest naming this wall "
RightFlipperWall" because it will make additions to the script easier later. Click on the wall and in the right pane, click to uncheck "Render Object (Initial Value)". The default when you add the wall is for "Collidable (Affects the Ball)" to be checked and you should leave it checked. Then add two timers named "
RightFlipperWallTimerUp" and "
RightFlipperWallTimerDown". In the right pane for the timer, change the "Timer Interval" to 30 milliseconds and leave "Timer Enabled" unchecked.
Open the script editor and find the following line:
Sub FuturePinball_BeginPlay()Make a hard return at the end of this line to add a blank line. Add the following to the blank line:
RightFlipperWall.Collidable=falseIf you are revising the "Jupiter Beta" table, find the following line script:
RightFlipperUp.SolenoidOnCreate a blank line below this and add the following to the blank line:
RightFlipperWallTimerUp.Enabled = TrueOn other tables, click on the flipper and get the name of the flipper that is listed at the top of the right pane. On the "Jupiter Beta" table, the name of the flipper is "
RightFlipperUp" but the flipper can have any name. Search for the name of the flipper and find the occurrence that is below a line that says "
GetKeyCode(RightFlipperKey)" or "
GetKeyCode(LeftFlipperKey)" and add a line below the line that says "
[flipper name].SolenoidOn". Then add the above line of code. Note that "
SolenoidOn" is the code that activates the flipper to raise it and the code you added starts the timer to activate the wall so it is collidable.
Find the following 2 lines of script:
If (KeyCode = GetKeyCode(RightFlipperKey)) Then
RightFlipperUp.SolenoidOffCreate a blank line below this and add the following to the blank line:
RightFlipperWallTimerDown.Enabled = TrueOn tables other than "Jupiter Beta", the line of code will be the same except the name of the flipper probably won't be "
RightFlipperUp". Note that "
SolenoidOff" is the code that deactivates the flipper to lower it and the code you added starts the timer that deactivates the wall so it is not collidable.
Then just below where you added the above line, look for "
End Sub". Below "
End Sub", make some space with hard returns and add all of the following:
Sub RightFlipperWallTimerUp_Expired():
RightFlipperWallTimerUp.Enabled = False
RightFlipperWall.Collidable=true
End Sub
Sub RightFlipperWallTimerDown_Expired():
RightFlipperWallTimerDown.Enabled = False
RightFlipperWall.Collidable=false
End SubEverything should work at this point. The flipper shown here has a swing of 60 degrees. Although I haven't tried this solution on other tables, it stands to reason that on other tables where the flipper has less swing you should require less time to the for the flipper to raise completely. I suggest dividing the degrees of swing by two to get the value for milliseonds for the timer. So if a flipper has a swing of 52 degrees, then I would suggest trying 26 milliseconds on the timers.