Skip to content

Indiana Jones: The Pinball Adventure (Williams 1993)

VPW's most extensively documented build -- 100+ WIP versions over 2.5 years (v003 to v1.12), with 22 team members contributing. Led by iaakki (scripting/build lead), benji084 (C4D Octane baking), cyberpez (testing), sixtoe (VR), rothbauerw (physics), skitso (lighting), and wrd1972 (GI/lamp architecture). The build established several VPW standards including the ON/OFF primitive fading system, modulated flasher averaging, and the strategic shadow-drop release approach.

Build Story

Indiana Jones was built through six distinct phases: Foundation (v003-v027), Core Build (v027-v060), Polish (v060-v090), Christmas Sprint (v090-v104, 30+ versions in 6 days), RC Phase (RC1-RC9, 3 days of rapid tester cycles), and Post-Release (v1.01-v1.12 including Rubberizer, code cleanup, and PWM updates). The table was shadow-dropped during a live VPW stream, deliberately releasing before Zen Studios' Indiana Jones Pinball FX3 announcement.

Table-Specific Details

Mechanisms & Hardware

Idol carousel flipper array: VPX collidable primitives cannot be moved at runtime -- their collision mesh is calculated once at table load. For the rotating idol carousel, iaakki and rothbauerw used an array of VPX flipper objects arranged in a circle to approximate the collision boundary. Flippers are natively collidable AND movable, and scripting their positions/angles to rotate together produces a collision boundary indistinguishable from a true curve at typical ball speeds.

Flipper coils (11629): Indiana Jones uses unusually strong flipper coils (part #11629), requiring flipper strength of 3250-3500 -- approximately 15-20% above typical WPC settings. Calibrated by testing specific shots requiring full flipper power (upper loop, ramp entries, cross-playfield shots).

CorTracker captive ball crash: The CorTracker calculates ball trajectory corrections, and at ROM init it processes all balls including captive balls. When the captive ball sits inside a sleeve/post assembly with zero distance to the post boundary, the tracker produces a division by zero. Fix: add a zero-distance guard in the calculation.

Art & Visuals

C4D Octane baking workflow: benji084 developed a low-res proxy workflow -- rendering at 4K with Octane's AI denoiser at aggressive settings, taking only 2-3 minutes per bake for layout debugging and UV issue verification. Final renders were exported as PNG/WEBP.

5-channel GI architecture: Indiana Jones uses 5 GI channels (0-4) through the ModLampz system. Each channel controls wire ramp and playfield primitives, with individual DL tuning per ramp (default DL 1.0 is fully static; reducing to 0.7-0.8 allows subtle GI influence; below 0.3-0.4 causes blow-out at full GI).

UseLamps bug: Setting UseLamps = 1 caused random lamp state corruption -- lamps turning on/off incorrectly, GI channels bleeding into each other. Fix: set UseLamps = 0 and route all lamp control through ModLampz exclusively. This single property change consumed weeks of debugging time.

Physics & Gameplay

Flipper nudge boundary fix: When a ball sat on a raised flipper and the table was nudged, the flipper would drop and re-raise, launching the ball unpredictably. rothbauerw added a 15-degree threshold -- the flipper must drop at least 15 degrees from its held position before the snap-back triggers. Lower values (5-10) still triggered on strong nudges; higher values (20-25) made flippers feel unresponsive.

Rubberizer: rothbauerw's Rubberizer modifies ball behavior on rubber/wall hits to simulate natural rubber grip and spin transfer. A ball with topspin hitting rubber loses less speed (rubber grips and redirects); backspin causes sharper rebounds. The modification is small (5-15% velocity adjustment) but produces noticeably more natural ball paths near slingshots.

Target bouncer energy conservation: rothbauerw's code decomposes velocity into magnitude and angle, randomizes the angle within a range, then recomposes at the original magnitude -- preserving ball speed while varying bounce direction.

Sling post misalignment: Visual sling post primitives were not aligned with VPX rubber/wall collision objects. Even 1-2 unit misalignment is noticeable during fast ball travel near slingshots. Fix: match X/Y positions precisely using VPX editor coordinate readouts.

Known Issues

VR insert z-fighting: Insert ON/OFF primitives flicker at shallow VR viewing angles that desktop's fixed camera masks. Requires adequate depth bias separation (ON=0, OFF=30 minimum).

VR cabinet bottom visibility: Through transparent insert areas, VR players can see the untextured underside of the cabinet model. Fix: add an opaque blocker primitive below the playfield.

Techniques Developed Here

See Also

  • Iron Maiden -- similar ON/OFF primitive workflow, real machine reference methodology
  • Judge Dredd -- pre-toolkit GI fading techniques, multi-state texture swapping