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
CLngoverflows on scores above ~2.4 billion -- useInt()instead. PlaySounduseexistingparameter (7th argument) modifies a currently playing sound without restarting it. Withuseexisting=1andrestart=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_msvariable in timer interval.
Known Issues¶
- FlexDMD log level "info" causes progressive FPS degradation over extended sessions. Change
flexdmd.log.configminlevel to "error". - B2S controller initialization must be wrapped in error handling. Also wrap
Controller.StopinIf B2SOn Then. - Delayed table initialization (via timer callback instead of
Table1_Init) breaks static rendering optimization. - FlexDMD in VR: set
FlexDMD.Show = FalsewhenVRRoom > 0to hide desktop window.
Techniques Developed Here¶
- Lampz for original tables -- control light methodology
- VR room rotation -- 6 degree compensation for table slope
- Remesh poly reduction pipeline by Flupper
- Cross-platform high scores via text files instead of registry
See Also¶
- GI and Flashers -- original table Lampz integration
- VR Development -- VR room creation, FlexDMD in VR
- VBScript Patterns -- sound integration, score management