Skip to content

Defender (Williams 1982)

Early 80s Williams SS table build and maintenance with important debugging sessions around playfield mesh conflicts, reflection probes, standalone VPX compatibility, and FlexDMD VR integration. Primary developer: apophis79 with support from sixtoe, niwak, and jsm174.

Build Story

Development ran from February 2022 through January 2024 including post-release maintenance. The table exposed several VPX engine issues including the ON_Prims collection breaking VPX 10.8 playfield rendering, multiple playfield_mesh primitives killing reflections, and the gBOT segfault in standalone VPX. It also served as a testbed for VPM version enforcement via LoadVPM.

Table-Specific Details

Mechanisms & Hardware

  • Staged flipper solenoid conflict: Williams Defender ROM repurposed the secondary upper flipper solenoid output for a drop target. Adding staged flipper support overwrote the drop target callback, preventing it from raising. Fix: do not assign staged flipper callbacks for solenoid outputs the ROM uses for other purposes.
  • Roth drop target ball pop-up: The drop target script intentionally kicks the ball upward when a target resets while the ball is resting on it -- recreates real machine behavior. Considered correct behavior despite occasional ball escapes.
  • VPM version enforcement: The LoadVPM first argument specifies a minimum VPM version string (e.g., "03060000" for 3.6+), forcing users to upgrade before playing tables requiring new features.

Art & Visuals

  • Playfield mesh in ON_Prims: Placing playfield_mesh in the ON_Prims collection caused black playfield in VPX 10.8. VPX 10.8 split between visible and physics playfield meshes.
  • Multiple playfield_mesh primitives: Having old and new playfield_mesh primitives caused ball and playfield reflections to disappear entirely. Fix: ensure only ONE primitive named playfield_mesh exists. This issue affected multiple VPW tables (Iron Maiden, Judge Dredd, Lethal Weapon 3, Star Wars DE, Starship Troopers, TFTC, Jokerz).
  • Apron negative depth bias fixes ball trail rendering artifacts.
  • Blender render offload workflow: send .blend file to someone with more powerful PC for rendering.

Physics & Gameplay

  • Playfield color saturation debates should reference real machine photos or in-person experience rather than videos (which compress/desaturate colors).
  • Competition exploit: activating a bomb as ball enters outlane causes diverter gate to stay open permanently (ROM confusion from unexpected timing).

Known Issues

  • Standalone VPX segfault: gBOT in CorTracker causes 95% of "ball hits flipper then crash" issues in standalone. Fix: replace gBOT with GetBalls in Cor.Update.
  • VR playfield reflection flashing with non-zero roughness on reflection probes.

Techniques Developed Here

See Also