Hold nothing. There is no button for this. The only verb is a shove, and the shove is aimed at a 135 kg cabinet rather than at anything on the playfield.
A nudge does not push the ball
There is no mechanism by which it could. The ball is a free steel sphere on waxed wood under glass and your hands are on the outside of a wooden box. What a shove does is move the playfield, and everything that happens afterwards happens because the ball’s world briefly relocated underneath it.
So both the ball and the tilt bob are simulated in the cabinet’s frame, which
is not an inertial one. In that frame the shove is a single term, -a_cab,
added to two equations of motion:
ball: r" = g·sin(slope)·ŷ − c·r' − a_cab
bob: u" = −ω₀²·u − 2ζω₀·u' − a_cab
One forcing term, two listeners, and the whole piece is in the difference between the left-hand sides. The ball’s response is first order and dissipative: it takes what it is given, bleeds it off over about a second, and has no opinion whatsoever about when it arrived. The bob is a barely damped second-order oscillator, and the arrival time is the only thing it cares about.
Same hands, same impulse, same help to the ball. Either nothing or a tilt.
The machine gives you 5.8 mm
Everything downstream is set by three numbers that a shove cannot argue with.
A firm hip check is about 1200 N for 45 ms. The floor can supply μ·m·g = 728 N of friction, so 472 N of that is left over to actually move anything, the cabinet accelerates at 3.5 m/s², and when friction has taken the momentum back the machine has travelled
| cabinet slide, one firm shove | 5.83 mm |
| bob swing it provokes | 5.45 mm |
| bob-to-ring clearance | 11.0 mm |
Read the last two rows together, because they are the design of the whole mechanic: one shove reaches 49.5% of the ring. One is always safe. Two that add are always a tilt. Nothing else in the piece needed tuning after those three numbers were in place.
There is a fourth number and it is the reason a polite nudge does literally nothing. Anything under 728 N never breaks static friction, so the machine does not move, so the ball is not helped and the bob does not stir. You have to actually hit it.
The bob has one period and it is the only clock in the building
150 mm of wire is a pendulum, so ω₀ = √(g/L) and
T = 777 ms.
That number cannot be tuned, adjusted in an operator menu, or coded around. It is a length of wire. Every timing that follows is a fraction of it.
A shove is fast compared to T, which means the bob barely gets a velocity kick at all: the cabinet slides 5.83 mm out from under a bob that stays where it was, so the bob ends up displaced by 5.83 mm and starts swinging from there. In phase space — offset horizontally, speed vertically, scaled so free motion is a circle — a shove is a purely sideways translation. Whether the second one grows the orbit or erases it is decided by nothing but where on the circle the first one has got to.
Which gives the table the piece is named for. Two identical shoves, same direction, varying only the gap between them:
| gap | swing | |
|---|---|---|
| 60 ms | 2.66× | tilt |
| 100 ms | 1.70× | |
| 250–525 ms | 1.000× | the second shove is free |
| 777 ms (= T) | 1.76× | |
| 1010 ms | 1.00× | free again |
Two things in that table are worth more than the rest of this write-up.
The free band is 275 ms wide and centred on 387.5 ms, against a T/2 of 388.5 ms — the same number to within the 5 ms step the sweep was sampled at, because that is what it is: half a period is where the bob is crossing back through the middle with its velocity pointing the wrong way for you, and a second shove lands on it exactly out of phase. Not approximately free. The peak swing of the pair is the peak swing of one, to three decimal places — the second shove leaves no trace at all.
And the 60 ms row is worse than doubling, which took me a while to believe. Two shoves that close do not overlap in force; the first push is over at 45 ms. What happens is that the second one lands on a cabinet that is already sliding, so there is no static friction to break before it moves. The floor has already been beaten. Two shoves 60 ms apart slide the cabinet 17.3 mm — three times one shove, not twice — and the bob rings the ring three times on the way down.
So the rule is the opposite of the instinct
The instinct is that shoving less often is safer. It is not. Restraint is not the variable; rhythm is.
| four shoves, spaced | swing | |
|---|---|---|
| T/2 = 389 ms | 1.000× | never touches the ring |
| T = 777 ms | 2.77× | TILT |
Four shoves at the half-period are as quiet as one. You can keep doing it. Four at the full period is pushing a child on a swing, and it kills you on the fourth. A player who nudges roughly once a second, which feels careful and looks careful, has found almost exactly the worst available metronome.
The counter-nudge inverts every one of those timings, because shoving back flips the sign of the translation. Shove straight back and the pair comes out at 0.855× — below a single shove. The second one is not free, it is a refund: you have actively damped the bob with your hands. And then, symmetrically, the half-period becomes the dangerous gap (1.87×) and the full period becomes the safe one.
Harder is not an answer
The strength dial has a cliff in it and the cliff is not where you would put it.
| shove | slide | ring | |
|---|---|---|---|
| 1.0× | 5.8 mm | 50% | |
| 1.2× | 10.6 mm | 87% | the most the machine will give you |
| 1.3× | 13.4 mm | 108% | tilt, on one shove |
| 2.0× | 30.0 mm | — | slam plate, no warnings offered |
Nothing gradual happens at 1.3×. The bob clears the ring, and because the ring is a stop as well as a switch the bob bounces off it and comes back and hits it again, three closures from a single excursion. One shove, and you have spent a tilt you were never warned about. Above 2× the plumb bob stops being the relevant sensor at all: the slam plate closes, and a slam tilt does not come with warnings.
The save, priced
The third view takes the other half of the claim seriously. One ball is released on a fixed course down the left side; left alone it dies in the left outlane at 1.70 s, at the same millisecond, every single time. Then the same ball is run 61 times with one shove fired at a different moment each run.
Ten of the sixty-one live. The window is 150–375 ms, and it is not where you would look for it: it opens early and it has shut long before the ball gets anywhere near the outlane. After 375 ms nothing works, and — this is the part the strength buttons are there for — nothing works at any strength. 1.2× saves exactly the same ten moments. 1.35× saves none, because every one of those ten moments now tilts the machine instead.
The reason is in the measured numbers under the chart. A shove hands the ball a
relocation of 5.8 mm and almost no velocity — the two runs’ speeds stay within
106 mm/s of each other, because ∫a_cab dt over a shove that starts and
ends at rest is zero. The machine does not push the ball; it steps sideways
underneath it and then stops.
5.8 mm decides nothing on its own. By the time the ball reaches the bottom the two runs are 55 mm apart — nine times the shove — and every bit of that was borrowed from a collision. The contact strip under the outcome strip is where the loan was taken out: the save window straddles the ball’s graze off the mid-field post at 135 ms and shuts before the next contact at 443 ms.
So the shove is not what saves the ball. The shove buys 6 mm of error into a bounce that is about to multiply whatever it is handed, and once the last amplifying bounce is behind you, you are just a person hitting furniture.
What is not modelled
The playfield is honest about being a diagram. 513 mm across, a 27 mm ball, a 6.5° slope, three pop bumpers, two slingshots, a shooter lane with a one-way gate at the top of its divider, and the gap between the flipper tips set to 32 mm of clear air because a real one is about one and a quarter ball widths. The bats are capsules and the drain is the gap between their surfaces — sizing it off the centrelines instead leaves a hole a 27 mm ball physically cannot fall through, which is a genuinely bewildering bug to watch.
No ball spin, so no backhands and no rubber that grips differently at different speeds. No flipper-rubber hysteresis, so no dead bounce. The cabinet’s slide is one dimension of translation with no rotation about the back legs, which is what a real front-corner shove actually does. Pop bumpers fire on presence with a refractory lockout rather than modelling a solenoid; without the lockout they fire every substep and hand the ball unbounded energy.
And the bob is the linear pendulum in everything but name. The code integrates
sin θ properly, but at 11 mm on 150 mm of wire that agrees with θ to four
digits, so the nonlinearity buys nothing. It is there so that a longer bob or a
wider ring stays honest rather than quietly wrong.
One thing I fixed rather than papered over. The first version counted a ring closure every step the bob was touching, so a single hard shove registered five warnings and the two free warnings a real machine gives you were meaningless — every excursion was instantly a tilt. Adding the debounce a real machine has (the switch must reopen past 55% of the clearance before the next closure counts) is what turned the warning system back into something you can play against, and it is why the 1.3× row above says three closures rather than eleven.
Reuse
src/nudge.mjs is framework-free and has no DOM in it. SI units throughout.
Cabinet→ the shove.nudge(dx, dy, strength)thenstep(dt); readax,ay. Everything else in the file is downstream of those two numbers.Bob→ the pendulum, the ring, the debounce, and the warning count. It carries a ring-less shadow copy of itself sodemandcan report how big a swing the shoves asked for after the ring has clipped the answer at 1.0. Measuring the clipped value is why the first version of the sweep chart was a flat line at the top.phase(axis)→ the one drawing that makes the mechanic obvious rather than surprising.Table→ the playfield: geometry, substepped collision, flippers as capsules with surface velocity, andcontact, which is the single most useful fact about a shove.bobTrial/spacingSweep/freeWindows→ the timing study.freeWindowsreturns runs rather than a min and a max, because cancellation recurs at T/2 + nT and a sweep out to 1.1 s catches two of them; taking the extremes over every free gap reports one absurd window spanning both, which is exactly how this was wrong the first time.saveTrial/saveSweep/ballResponse/shotTrial→ the ball study.
Port notes: Cabinet.step and Bob.step are about thirty lines together and
translate directly into a tick method. The whole timing result is independent
of the playfield, so if all you want is the tilt mechanic you need those two
classes and nothing else. Substep the ball on its speed, not on the frame: a
6 m/s ball crosses its own radius in 2 ms, and a missed contact near the outlane
post is the one thing this demo is about.
The harness
node scripts/screenshot-demo.mjs boots the demo in a real Chromium,
regenerates thumb.png and media/, and asserts 37 claims against the
running page, exiting non-zero if any stops being true. Every number above is
in there: the 777 ms period, the 5.83 mm slide, the 49.5% of the ring, all
three pair ratios, the free window’s edges and its centre against T/2, the
recurrence of the next free band, the ring sitting at 2.02× one shove, both
four-shove rhythms, the counter-nudge coming out under 1.0, the whole strength
ladder including which rows tilt and which slam, the save window and its
disappearance at 1.35×, both flipper shots, fourteen seconds of play without a
wedged ball, and the fact that a new ball forgives a tilted machine.




