Skip to content

Goonies (VPW Original)

A complete original (non-ROM) VPW table built by oqqsan and fluffhead35, with the deepest FlexDMD integration of any VPW project. Notable for multi-player state management patterns, custom coordinate-based light sequencer, FlexDMD performance debugging, and VR geometry validation. One of the longest-lived VPW builds at 17,700+ messages.

Build Story

Development ran from June 2021 through January 2024 with extensive iteration on FlexDMD integration, mode logic, and performance optimization. Being an original table (no ROM), every game rule, scoring system, and display had to be built from scratch, producing many reusable patterns for future original tables.

Table-Specific Details

Mechanisms & Hardware

  • Wire ramp primitive had ~90K polygons, severely impacting performance. Replaced with an invisible VPX ramp (for physics) plus a simplified visual primitive (non-collidable), gaining 20+ FPS.
  • Wire ramp ended at height 147 at the slingshot -- actually going uphill toward the front. Completely unnoticeable in 2D desktop play but "hilariously wrong" in VR. This established VR as an excellent geometry validation tool.

Rules & Modes

  • Multi-player state save/restore: All per-player variables (score, mode progress, locked balls, bonus multipliers, ramp counts) explicitly saved at drain and restored at next turn. Key pitfall found: ramphitsthisball counter not reset between games in Door-or-Die mode.
  • Tilt mode reset bug: When a player tilts, normal drain logic is skipped, leaving active modes unterminated. Force-reset all modes during tilt handling. Flipper disable flags must also reset, or a slam tilt could trigger on the next ball from the previous ball's unreset flag.
  • Custom coordinate-based light sequencer: Parameters encode center coordinates, radius, speed, color, and pattern type. The system calculates which lights fall within the region and applies animation.

FlexDMD Integration

  • The FlexDMD update timer must never be disabled after the intro sequence. Disabling it breaks the DMD on subsequent games without a full table restart.
  • FlexDMD stutter from log level: FlexDMD.log.config having minlevel set to "Trace" instead of "Warn" causes random stutters from disk I/O during gameplay.
  • FlexDMD RenderLock/RenderUnlock calls cause frame drops. Fix: remove unnecessary calls, split the DMD update routine into 4 smaller parts on a 5ms timer (20ms cycle).
  • VPX 10.8 broke the PupDMD "desktop punch" feature. Workarounds: windowed mode (DX) or the "1-pixel trick" (GL mode at native resolution minus 1 pixel).

Art & Visuals

Sound

  • MP3 preloading: First-time MP3 playback causes frame drops. Fix: play all MP3s at near-zero volume during initialization to pre-cache audio data.
  • Volume dial constants for SSF: Separate constants for mechanical (0.7), music (0.4), and callout (0.5) volumes, tuned so the table sounds good on SSF cabinets without additional software.

Techniques Developed Here

See Also