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
LoadVPMfirst 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_meshin theON_Primscollection 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_meshexists. 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:
gBOTin CorTracker causes 95% of "ball hits flipper then crash" issues in standalone. Fix: replacegBOTwithGetBallsinCor.Update. - VR playfield reflection flashing with non-zero roughness on reflection probes.
Techniques Developed Here¶
- Standalone gBOT segfault fix -- replace
gBOTwithGetBallsin Cor.Update - Black playfield after toolkit import from ON_Prims collection
- Missing reflections from duplicate playfield_mesh primitives
- VPM version enforcement via LoadVPM first argument
- Blender render offload workflow for hardware-limited builders
- FlexDMD in VR setup requirements documented here
See Also¶
- Troubleshooting -- black playfield, missing reflections, standalone crashes
- Software Setup -- VPM version enforcement, standalone considerations
- VR Development -- FlexDMD in VR, reflection probe roughness
- Best Practices -- render offload, color reference methodology