Skip to content

Road Show

Red and Ted's Road Show (Williams 1994) is a VPW table with exceptionally detailed physics tuning, made possible by ClarKKent9917 -- a real machine owner who provided continuous A/B comparisons throughout development. The build lifecycle from 2022-2025 produced rich knowledge on lock mechanisms, flasher engineering, sound integration, and VPX engine quirks. Key contributors: sixtoe (core mechanics/integration), apophis79 (complex scripting), Skitso (GI overhaul), fluffhead35 (sound), ClarKKent (physics validation).

Build Notes

Stripping a Legacy Table for Overhaul

When overhauling a legacy table: strip all attributes, clear out the script, rearrange layers, build real physical trough to replace DestroyBall kickers, and build real physical subways. The original Road Show used destroyball kickers which were replaced with physical devices.

Physical Ball Lock Mech

Ball drops in activating sw52/sw53, a solenoid-controlled wall drops to release, and kicker sw54 fires ball back. Key findings:

  • Switches 52 and 53 were initially in wrong positions and needed swapping
  • Lock pin logic needed to be inverted (normally locked, not normally unlocked)
  • cvpmBallStack destroys balls and sometimes fails -- replace with direct switch/kicker management

Lock Mech Rebuild

VPX kickers have a "sticky rim" problem. Multiple rebuild iterations were needed:

  1. Kicker must be at or below the physical surface
  2. Add a physical wall over the kicker (1 VP unit above) to prevent sticky behavior
  3. Use sharp ramp drop-off at the gate point so ball MUST fall into kicker
  4. Set kicker hit accuracy to 1 for immediate grab
  5. Narrow the ramp end to funnel ball to center

Final solution: converting sw54 from kicker to switch-based VUK proved more reliable.

Sound Wiring

When a table has custom-recorded sounds (ClarKKent's real machine), don't replace them with Fleep sounds. Wire Fleep for generic mechanical sounds but keep table-specific recordings. When replacing DestroyBall kickers with physical devices, all associated sound triggers need re-hooking.

Fleep Shaker Motor Sound

Fleep added shaker motor support via a "cartridge" system. Configuration: intensity levels (Low/Normal/High) and volume (0-1). Key: VPX 10.7 does not play back 32-bit floating-point audio files -- use standard format.

Wire Ramp Sound Volume

Wire ramp sounds were too quiet because they were combined with VolumeDial. Fix: make BallRollVolume and RampRollVolume independent constants (0.8 each).

Reinforcing Table Walls

Original table used ramps for metal wall curves (easier to create smooth curves). Sixtoe exported walls to Blender, made them a single primitive, reimported to VPX, then matched new VPX walls to the Blender reference.

Playfield Scans

ClarKKent provided a Photoshop file with separate shadow layers, completely redrawn inserts in separate layers, and a text-only layer. Insert cutouts need hard (non-anti-aliased) edges -- smooth edges cause jaggies with the VPX flasher method.

Timer Interval Optimization

Changed timer intervals from 1ms to 20ms with code adjustments. Most visual effects and game logic work correctly at 10-20ms intervals.

Staged Flipper Support

Added in v1.3.5. A subtle bug in the upper flipper sub was found months later that only impacted staged flipping. Flipper-related subs need careful verification when merging script changes.

Moving Options to Tweak Menu

In-script constants were migrated to VPX's Tweak menu for user-friendliness. Options migrated: playfield reflections, flasher brightness, VR room, shaker motor, alternative sounds.

Scripting

Wig-Wag Alternating Lamp Effect

Road Show's "Bridge Out" signs use wig-wag lamps controlled by a dedicated circuit board. Implementation uses Lampz callbacks with separate timers for each lamp pair:

Lampz.Callback(84) = "AlternateLeftLamps"

Virtual lamp indices (96-99) assigned to alternating sub-lamps. Interval ~400ms. Each side has its own board and can come out of sync -- this is authentic behavior.

Flipper Bounce on Ball Impact

When the ball doesn't feel like it has weight hitting the flipper, add flipper bounce code: the flipper bounces slightly when hit in the down position. Code provided by rothbauerw.

Randomized Kicker Strength

sw78.KickZ 1, 45+rnd*10, 80, 5

rnd returns 0-1, so 45+rnd*10 gives 45-55. Cannot randomize via cvpmBallStack.InitSaucer (runs once at init). Must manage kicker directly.

KickZ arguments: KickZ(angle, speed, inclination, heightz) -- angle is X-Y direction, speed is kick velocity, inclination is angle above X-Y plane (90 = straight up).

Trough Ball Count (tnob)

The tnob constant must be set to one MORE than the actual number of balls. Road Show uses 4 balls but tnob=5. Setting tnob=4 causes the game to malfunction on first drain.

PWM Modulated Flasher Code

Flashers need modulated intensity levels, not binary state. Key: bloom intensity should be reduced (0.4 works well) to prevent stacked flashers from blowing out the scene.

3D & Art

Cinema4D to Blender Import Pipeline

ClarKKent's original was built in Cinema4D. FBX import to Blender lost texture assignments. Workaround: import directly from VPX using the Vousquet addon.

GI Overhaul (Skitso Method)

Takes ~10+ hours per table: build GI from scratch, tweak each element individually (texture, material, light-passing properties), step back for overall adjustments, repeat for 4-5 passes.

Playfield Insert Anti-Aliasing

When cutting insert holes, edges must NOT have anti-aliasing or you get jaggies with the flasher method. Insert cutouts must have hard/aliased edges.

Scoop Geometry

A flat 45-degree tilted surface virtually eliminated ball rebounds on entry but blocked ejection. The compromise: reshape the curve to approximate 45 degrees at the impact zone.

Troubleshooting

"Narnia" Ball Recovery

Balls can fall through ramp objects below the playfield. Detection timer at 300ms checks all balls:

Sub Narnia_Timer
    For b = 0 to UBound(gBOT)
        if gBOT(b).z < -200 Then
            gBOT(b).x = [lock_x] : gBOT(b).y = [lock_y] : gBOT(b).z = [lock_z]
        end if
    next
end sub

Critical

Do NOT return Narnia balls to the drain -- this confuses the ROM into thinking an extra ball is in the trough. Return the ball to its logical position (e.g., back into the lock mechanism).

Double Ball in Plunger Lane

Caused by Narnia recovery placing balls in drain. Fix chain: fix recovery to place ball in lock, rebuild lock subway geometry, ensure kicker is above ramp surface.

VPX Trigger Shape "None" Fires Only Once

Workarounds: change to "Star" shape, or keep "None" but increase hit height to 150.

Bumper/Flasher Initialization Conflict

VPX chokes when bumpers and flashers initialize simultaneously. Fix: stage initialization with a 100ms gap -- bumpers first, then flashers.

Sound Distortion from Dual Trigger Activation

Ball entering Blast Zone from the right triggers both left and right sound triggers simultaneously. Use a single trigger with random sound selection from all samples.

Collidable Posts Breaking Flipper Tricks

Wall/post combinations replacing slingshot rubbers can break flipper tricks if not matched perfectly to rubber positions.

Z-Fighting on Playfield Primitives

Fix: raise the primitive 1-5 VP units above the playfield. 1 unit is sufficient in most cases.

Ball Climbing Over Blockerwall Plastics

Make MetalWallP non-collidable, make all plastics collidable. Check for thin triangles in playfield mesh -- balls get stuck on very thin triangles.

gBOT vs GetBalls for Standalone Player

The Standalone Player crashes sporadically with gBOT in Cor.Update. Fix: replace gBOT with GetBalls specifically in Cor.Update.

POV Files Contain More Than Camera Position

POV files also store time-of-day slider and other parameters. Check contents in a text editor before importing.

VPX Version Compatibility (10.7.0 vs 10.7.2)

Functionally compatible but with visual differences: bumper initialization failures more common in 10.7.0 32-bit, texture errors on some primitives in 10.7.2, phantom lights under objects.

Game Knowledge

Physics Tuning with Real Machine

ClarKKent's feedback: friction 0.2 with gravity 1 feels closer to real. Flipper settings: strength 2800, elasticity 0.92, friction 0.99, return 0.55. Table slope should be 6.5 degrees. Ball rolls too fast down return lanes on all VPX tables vs real machines.

Flipper Coil Hierarchy (Weakest to Strongest)

FL-11753 (yellow) < FL-11722 (green) < FL-11630 (red) < FL-15411 (orange) < FL-11629 (blue)

Road Show: L1 (upper left) = yellow, L3 (small middle) = green, L4/R4 (main) = orange. Each flipper should have different VPX strength/return values.

Insert Text Visibility When Lit

Black lettering on inserts becomes hard to read when lit -- a common VPX problem. Remains an open challenge.

Ball Held Between Flippers

In VPX, a second ball rolling into a held ball tosses the held ball off. On real machines, the held ball stops the incoming ball. This is a fundamental VPX physics limitation with no known workaround -- "the most disturbing thing on all VPX tables."

Best Practices

Real Machine Owner as Validator

Having ClarKKent as a continuous validator was transformative. He compared VPX behavior to his real table constantly, providing specific feedback on all aspects. This pattern should be replicated for all premium tables.

Shaker Motor Configuration

ShakerMotor options: 0=disabled, 1=SSF only, 2=DOF only, 3=DOF+SSF. Use option 3 (most general), then let users configure their hardware in VPX preferences.

Post-Release Maintenance

Road Show saw 2+ years of post-release refinement (v1.0 to v1.5.5). "Finished" tables are never truly finished -- community play (especially VPW weekly competition) reveals edge cases.

Resources

  • Knorr's SFX library (via Benji's Dropbox) -- professional recordings of ball drops and mechanical sounds
  • ClarKKent's real machine sound recordings (wire ramp, lock mechanism, head movements)
  • Physical saucer reliability: switch-based VUKs are more reliable than kicker objects for hidden mechanisms