VirtuaTilt Wiki › Zaccaria Pinball: Tuning the Feedback
Zaccaria Pinball has no DOF / DOFLinx support, so the Zaccaria profiles (VTConfig-USB-ZaccariaPinball and VTConfig-BT-STEAM-Zaccaria, v1.2 and later) build all of their table feedback from the game's own controller rumble. Two outputs do the work:
Every number below can be changed. In both lines R stands for max(xboxrumble(1), xboxrumble(2)): the stronger of the game's two rumble motors, on a 0–255 scale. VirtuaTilt has one shaker motor; the two rumble motors are the game's controller rumble channels.
outputs section, then the output with name: "Bumpers/Slingshots" or name: "Shaker Motor". The name is the last line of each output; its source line is at the top.The numbers you can tune are in bold.
Bumpers/Slingshots, both profiles:source: "if(offset(max(xboxrumble(1), xboxrumble(2)), -15), 240, 0)",timeLimit: 50, powerLimit: 0, coolingTime: 80,
Shaker Motor, USB profile:source: "kickstart(if(kickstart(if(max(xboxrumble(1), xboxrumble(2)) > 30, 1, 0), 200, 255, 0) == 1, clip(max(xboxrumble(1), xboxrumble(2)), 70, 255), 0), 50)",
Shaker Motor, Bluetooth profile (the same, but capped at 153 = 60%, like the other Bluetooth profiles):source: "kickstart(if(kickstart(if(max(xboxrumble(1), xboxrumble(2)) > 30, 1, 0), 200, 255, 0) == 1, clip(max(xboxrumble(1, 153), xboxrumble(2, 153)), 70, 153), 0), 50)",
The -15 in the Bumpers/Slingshots source. A burst counts as a hit once R rises above this number (as shipped: above 15 of 255).
| Change to | Effect |
|---|---|
-5 | Fires on almost any rumble. The most responsive setting, but it can also kick on faint background rumble. |
-30 | Only clear hits. Also try this if two quick hits give a single kick: with a higher threshold the rumble is more likely to drop below it between hits, which is what re-arms the kick. |
-60 | Only strong hits. Noticeably fewer kicks. |
The 240 in the Bumpers/Slingshots source: the power of the kick, 0–255. 240 is the same strength the flipper solenoids use.
| Change to | Effect |
|---|---|
255 | Full power, the hardest kick. |
200 | Softer and a little quieter. |
160 | Gentle. Check that the solenoid still moves on every hit; if it starts to miss, go back up. |
timeLimit: 50 on the Bumpers/Slingshots output: how many milliseconds each kick lasts. The power is cut after this time, even if the rumble continues.
| Change to | Effect |
|---|---|
timeLimit: 30, | A shorter, crisper tap. |
timeLimit: 70, | A heavier thump. |
timeLimit: 100, | The longest recommended value. Do not go higher. |
NOTE: Never remove timeLimit, and keep powerLimit: 0. Together they are what switch the solenoid off after each kick.
coolingTime: 80 on the Bumpers/Slingshots output. After each kick the solenoid ignores new hits for this many milliseconds. Hits that arrive in that gap are dropped, not delayed, so a long gap loses fast sequences such as a ball bouncing between the slingshots.
| Change to | Effect |
|---|---|
coolingTime: 60, | The fastest recommended setting (about 9 kicks per second at most). Do not go lower. |
coolingTime: 150, | Calmer. Very fast hits start to be skipped. |
coolingTime: 250, | About 3 kicks per second at most. Clearly misses rapid sequences. |
The max(xboxrumble(1), xboxrumble(2)) part of the Bumpers/Slingshots source. Many games use one motor for hits and the other for bigger effects. If the kicks feel random, try using one motor only:
| Change to | Effect |
|---|---|
if(offset(xboxrumble(2), -15), 240, 0) | Kick only from motor 2 (the right, high-frequency motor). |
if(offset(xboxrumble(1), -15), 240, 0) | Kick only from motor 1 (the left, low-frequency motor). |
The 200 in the Shaker Motor source. The shaker runs only once a rumble has lasted this many milliseconds, and then until it ends. Shorter rumbles get the solenoid kick only. The trade-off: for long events the shaker always starts this much late.
| Change to | Effect |
|---|---|
150 | More shaker: medium-length events start to shake too. |
500 | Less shaker: only clearly long events. |
1000 | Only very long events (at least 1 second). The maximum is 5000. |
The > 30 in the Shaker Motor source. This threshold is independent of the kick threshold in step 1.
| Change to | Effect |
|---|---|
> 120 | Only strong and long rumbles shake. |
> 150 with the window (step 6) set to 0 | Shake on every strong rumble, starting instantly with no delay. Usually the best way to keep the shaker for the big moments only. |
> 200 with the window set to 0 | Only the very strongest rumbles shake. |
70 in clip(…, 70, …), both profiles.255 in clip(…, 70, 255).153, which appears three times — in xboxrumble(1, 153), in xboxrumble(2, 153) and in clip(…, 70, 153). Change all three to the same value. Changing only the one in clip() does not raise the power: xboxrumble(n, 153) has already scaled the rumble down to 153 at most.| USB profile | Bluetooth profile (all three numbers) | Effect |
|---|---|---|
clip(…, 70, 255) | 255 | Full power (the USB default). |
clip(…, 70, 200) | 200 | About 80%: a gentler cabinet. |
clip(…, 70, 153) | 153 | 60% (the Bluetooth default). |
clip(…, 90, 255) | clip(…, 90, 153) | Raises the floor, so weak rumbles still shake noticeably. |
NOTE: Keep the lowest power at 70 or above. Below about 64 the VirtuaTilt shaker motor stalls and buzzes: it draws current and heats up without turning.
Shaker Motor source | Effect |
|---|---|
source: "0", | Shaker completely off. The solenoid kick keeps working. |
source: "kickstart(if(xboxrumble(1), clip(xboxrumble(1), 70, 255), 0), 50)", | The v1.1 behaviour (USB): the shaker follows every rumble from motor 1, together with the kick. |
source: "kickstart(if(xboxrumble(1, 153), clip(xboxrumble(1, 153), 70, 153), 0), 50)", | The v1.1 behaviour (Bluetooth). |
kickstart(if(R > 30, 1, 0), 200, 255, 0) outputs 255 for the first 200 ms of a rumble and 1 afterwards, so == 1 means "this rumble has lasted more than 200 ms". The final 0 restarts the timer on every new rumble. The outer kickstart(…, 50) is a 50 ms full-power pulse that gets the motor turning.See also Adjusting Shaker Motor Strength and Feedback Devices by Profile.
The interactive VirtuaTilt wiki adds a 3D model, a theme gallery and a built-in AI assistant — open the wiki.
Last updated: 2026-10-28
VirtuaTilt is designed and manufactured by 3DPTronics — see the Wireless VirtuaTilt controller. Diagnose your own cabinet with the free VirtuaTilt extension for Claude.