Skip to content

SpongeBob SquarePants (VPW Original)

Complete original (non-ROM) table build with extensive toolkit integration, FlexDMD, VR room, and custom sound system. Notable for Lampz integration methodology for original tables, Flupper's remesh technique, and cross-platform compatibility patterns. Built by apophis79, gedankekojote97, mrgrynch, and .rawd.

Table-Specific Details

Mechanisms & Hardware

  • Lampz integration for original tables uses "control lights" -- invisible VPX light objects that drive lightmap state. Lampz index ranges: 0=GI, 1-50=inserts, 51-149=flashers, 150=lit room. Flasher numbers must be distinct from insert numbers.
  • GI string toolkit setup: each string needs its own Blender collection with lightmapper set to "split." All lights within a string share the same VPX light name.

Art & Visuals

  • VR room must be rotated 6 degrees away from the player to compensate for the natural table slope.
  • Flupper's remesh technique for massive toy poly reduction: Apply Solidify (prevents remesh holes), then Remesh, then Decimate. Reduces 100K+ triangle toys to ~2K triangles.
  • OBJ export with boolean-cut holes requires "Triangulate Faces" option checked. Without it, N-gon faces produce rendering artifacts in VPX.
  • Projected textures show on backside of movable meshes. Fix: bake movable textures separately with proper UV unwrapping.

Physics & Gameplay

  • High scores stored to text files instead of Windows registry for cross-platform compatibility (Linux/macOS standalone VPX). VBScript's CLng overflows on scores above ~2.4 billion -- use Int() instead.
  • PlaySound useexisting parameter (7th argument) modifies a currently playing sound without restarting it. With useexisting=1 and restart=0, volume changes on looping music mid-playback for ducking effects. Sound Manager volume acts as floor -- set to 0 for script-controlled sounds.

Sound System

  • File format guidelines: OGG for music loops and callouts (smaller with better looping), WAV for Fleep mechanical sounds (zero decode latency). Remove all unused assets.
  • LUFS normalization: -14 LUFS for backglass sounds, -18.8 LUFS for looping mode music. Set Sound Manager volumes to 0 for normalized sounds, control all volume via script.
  • Quote ducking: don't bake silence padding into audio files -- use buffer_ms variable in timer interval.

Known Issues

  • FlexDMD log level "info" causes progressive FPS degradation over extended sessions. Change flexdmd.log.config minlevel to "error".
  • B2S controller initialization must be wrapped in error handling. Also wrap Controller.Stop in If B2SOn Then.
  • Delayed table initialization (via timer callback instead of Table1_Init) breaks static rendering optimization.
  • FlexDMD in VR: set FlexDMD.Show = False when VRRoom > 0 to hide desktop window.

Techniques Developed Here

See Also