nFozzy Physics How-To (Part 2)

In part 2 of the “nFozzy Physics How-To” I’ll cover the steps needed to implement nFozzy’s physics extensions for rubber posts, rubber pegs, and rubber sleeves.  nFozzy felt the elasticity and elasticity fall-off settings were somewhat limited in simulating the correct behaviors for these objects.  From what I can recall, he determined this by directly comparing VPX behavior to real world behavior through a series of controlled tests.  Using the results, he developed scripting that gave him better control over the elasticity fall-off curve.  Similar to his flipper solution, it allows the author to create a profile of elasticities over a range of velocities.  Given the amount of science behind nFozzy’s work, I recommend authors leverage the profile he created as part of his solution.

The first step is to create the physical objects in the editor.  nFozzy was a fan of using simple primitive objects (boxes and cylinders) as the collidable objects for rubbers, posts, pegs, and sleeves.  I didn’t initially understand his preference, but over time I’ve become a big fan of this method.  It allows for easier/better control over the differences in physics between posts and bands.  The one exception to this is using a wall object instead of a primitive box for slings.  Below is an example of using simple primitives and a wall object to replace rubbers as the collidable objects.

I recommend using physics materials for controlling the physics settings for your collidable rubbers.  I will cover that more in Part 3.  For now, I recommend you use the following settings for your rubber posts, rubber pegs, rubber sleeves, and rubber bands.

Elasticity Elasticity Fall-off Friction Scatter Angle
Rubber Bands 0.85 0.13 0.3 0
Rubber Posts 0.9 0.1 0.3 1
Rubber Pegs 0.9 0.1 0.3 1
Rubber Sleeves 0.765 0.1 0.3 1

The second step will be to create two new collections.  Name them “dPosts” and “dSleeves”.  Edit the collections and make sure “Fire Events for this collection” is checked.

The third step is to add all rubber posts and rubber pegs to the “dPosts” collection and all of the rubber sleeves to the “dSleeves” collection.  Make sure “Has hit Event” is checked for all objects in these collections and set the hit threshold to “0.5”.

The fourth step will be to add the rubber elasticity (dampener) scripts to your table.  This includes hit events for the “dPosts” and “dSleeves” collections and initialization of the elasticity curves.

Rubber Functions

You’ll also need a function called CorTracker.  This tracks the velocities of the balls and allows the script to appropriately adjust the velocity of ball.  CorTracker is also used by Fleep’s sound package on the drop target tutorial.  You’ll need to add a new timer in the editor called “RDampen”.  Enable it with an interval of “10”.


Some of the supporting functions are included in the Flipper Functions script.  If you haven’t already completed Part 1 of the tutorial on your table, make sure to also include the Flipper Functions script in your table.

Flipper Correction Functions

I’ve included an example table that includes both Part 1 and Part 2 of the tutorial.

Example Table



  1. randr 5 years ago

    Thank you for part 2! Excellent write up roth.

  2. BorgDog 5 years ago

    Part of the reason for the primitives instead of walls is that walls do not have elasticity falloff.

    on the edge of my seat for part 3, may give this a shot on my current wip.. maybe

  3. bord 5 years ago

    Thanks! Considering releasing an A/B version of an upcoming project with and without these settings to help illustrate the difference.

  4. Thalamus 5 years ago

    Again. Thanks for this detailed info.

  5. Tom 5 years ago

    Stupid question, what are the rubber sleeves for?

  6. Author
    rothbauerw 5 years ago

    I PM’d you some examples

  7. dcbenji 4 years ago

    This is awesome! Using ‘Genesis’ table as a playground to try this out. Got the flippers working great, moving on to rubber dampening. Not sure about the difference between Rubber ‘posts’ ‘sleeves’ ‘bands’ and ‘pegs’ especially since some resources call some rubbers ‘post sleeves’…

  8. dcbenji 4 years ago

    Well the flipper portion of the tutorial works great, makes me want to do it on every table!. Part 2 (dampening) I haven’t been able to get to work. I add all the rubber posts to a ‘dPosts’ collection but the table freezes whenever a ball hits a post. This tells me the right hit event is being processed, but the error I get on the dampening code is ‘not divisible by zero’ or something similar to that. Same error on multiple tables, so I’m stuck. Wondering if since this tutorial is 11 months old if 10.6 breaks the dampening code?

    • tomate 4 years ago

      Hi! is there any chance that you send me a link to download any of the tables that you modified to learn how to do that, thanks!

  9. bord 4 years ago

    Still works fine with 10.6. I add it to tables every week.

    Must be something else going on.

  10. Author
    rothbauerw 4 years ago

    Sounds like maybe you haven’t added cor.update to an actively running timer.

    • dcbenji 4 years ago

      That was the problem thanks a bunch @rothbauerw. I dunno, not reading through all the instructions has worked well for me thus far ;).

      Wondering what the difference between rubber ‘post’ and rubber ‘sleeve’ is. I thought the vernacular was something like ‘There is a metal peg covered with a rubber sleeve and the whole thing is called a ‘rubber post” haha. For example, on Indiana Jones there are twelve ‘posts’ in a collection called ‘Posts’ which i renamed ‘dPosts’. But visually, some of the posts in front of a ramp, for example, look more like pegs with rubber sleeves. Anyway if you could help clarify that would be great.

  11. Author
    rothbauerw 4 years ago

    Rubber posts are posts with either rubber rings or are corners of rubber stretched around multiple posts, like slings. Pegs are similar, but are usually metal posts with much smaller rubber rings. Examples of pegs include the rubber objects often found between the inlane and the outlane or the rubber post sometime found between the flippers to prevent a lost ball straight down the middle. Sleeves or typically metal posts, but the rubbers typically extend all the way from the playfield all the way to the top of the post, like a sleeve. These are usually found on either side of ramp entrances.

    • dcbenji 4 years ago

      Cool, that makes a lot of sense. Looks like tables that properly name/organize their assests are few and far between haha. I also notice that many tables are setup with a ball mass of 1.5 and size of 55, but if I screw with the ball size it really messes with the proportion of the ball to the table. Wondering if there are any offsets I should add to the flippers for a ball mass of 1.5 (vs 1)?

    • dcbenji 4 years ago

      How do I get nFuzzy physics to work on an EM table like ‘Lucky Luke’? For example, This Sub routine:
      Sub SolLFlipper(Enabled)
      isn’t recognized by the compiler. I I tried to add the corresponding Sol Callback that I found on another table, but I think it has to do with the diffrence in libraries (or whatever) between EM and SS. Anyway just wondering what I can replace it with or what I else I need to change to get this working with EM tables. Thanks in advance!

  12. batch 4 years ago

    Thanks for this topic and the example table

    I have a perhaps strange question, why don’t you use a round primitive (a post RotX 90) for the rubbers,

    the ball would hit a cylinder (like a real rubber), instead of a flat surface ?

    (I wanted to add a snapshot to my reply, but it seems not to be possible)

  13. Author
    rothbauerw 4 years ago

    You certainly could do that. I don’t think it would make a significant difference in game play though. If you try it and see something of note, please let me know!

  14. batch 4 years ago

    Thanks for your reply, I’ll try it !

  15. bord 4 years ago

    Potentially lots of additional physics geometry by doing it that way. I would test it heavily before trying to implement.

  16. batch 4 years ago

    In your table template “example”, top height and bottom height values for slingshot are 29,5

    Shouldn’t it be 25, half the size of the ball ?

    • Wiesshund 4 years ago

      If you set it to hit at 30, then the ball will visually appear to roll into the slingshot
      before it fires, which is what they do in real life, they push in far enough to trigger the solenoid, then it goes POW

  17. Author
    rothbauerw 4 years ago

    I typically actually use 0 for bottom and 50 for top.

  18. batch 4 years ago

    Ok, thanks, I’ll use these settings

  19. randr 4 years ago


Leave a reply


Log in with your credentials

Forgot your details?