Ghostbusters (Stern 2016)¶
A VPW build of Stern's 2016 Ghostbusters using VPinSPA emulation instead of standard VPinMAME, making it one of the most technically unusual tables in the project. Notable for RGB insert lighting from ROM lamp states, frosted insert techniques, the 64-bit registry hack, and bass.dll sound corruption documentation. Key contributors: iaakki, benji084, apophis79, and .rawd.
Build Story¶
Ghostbusters uses VPinSPA (Stern Pinball Arcade emulation) because Stern's Spike platform lacks proper ROM emulation. The ROM originates from the free base game on Steam, extracted via pba-tools (latest available: v1.15; real table updated to v1.17 but SPA was never updated). Due to legal complications around the extracted ROM, the table is not officially released under the VPW name and uses an "ESD" designation. The community hopes for proper Spike emulation to eventually allow using the real ROM.
Table-Specific Details¶
VPinSPA Setup¶
VPinSPA installation requires:
- VPinSPA installer + potentially Microsoft Visual C++ 2012 x86 redistributable
- ROM files extract to C:\Visual Pinball\VPinMAME\spagb100\ containing SternGB.dll and image.bin
- DMD Extension must be installed into the VPinSPA folder specifically, not just the standard VPinMAME location
For 64-bit operation, registry entries must be added (specific reg.exe ADD commands for WOW6432Node CLSID and AppID). Warning: this removes WOW64 protections -- behavior is undefined. The 64-bit hack can cause GB to not close on exit; fix requires a Kill32BitCOMSurrogate function using taskkill /f /im dllhost.exe in Table1_Exit.
Mechanisms & Hardware¶
- RGB Insert Lighting: Ghostbusters uses RGB lamps driven directly from ROM lamp states with channels offset by 81. The code reads individual R, G, B channels and applies them to both IntensityScale and ColorFull/Color properties. For flashers, divide the intensity divisor by 2 (1000 vs 500) for lower intensity.
Art & Visuals¶
- Frosted insert technique: Use frosted texture over insert, flasher opacity at 99%. Place something behind the frosting (~10% visibility) for subtle texture showing through. Edges slightly darker than center. The "frosted" look comes from a discernible shape behind the frosting with slightly uneven glow.
- Triangle insert hotspot fix: Triangle inserts get too bright at center. Solution: DisableLighting setup with DL at bulb height -0.5, providing visible tray plus haze and ball reflections without the center hotspot.
- Jagged round insert edges: Include the blended edge in the flasher image and make the playfield cutout slightly larger so they overlap.
- Z-fighting on sideblades: Fixed by setting
DisableLightingFromBelow = 1on sideblade primitives.
Known Issues¶
- Bass.dll sound corruption (VPX 10.8): Permanently corrupts sound files -- volume fluctuations, flipper volume muting randomly. Must rebuild from a pre-corruption version.
- Flipper ball jam: Right flipper positioned slightly off after nFozzy integration. Moving it 1 pixel to the right fixed the jam. nFozzy flipper meshes may not align with original positions.
- Ramp flat spots: Ball stuck on right ramp at certain speeds due to flat spots in geometry. Adjusting TopHeight introduced other issues; nudging easily frees the ball.
- VPX 10.8.1 validation warnings first documented during this build: duplicate variables, fast timers, stereo sounds, legacy textbox DMD, legacy spherical ball mapping.
Techniques Developed Here¶
- RGB insert lighting from ROM lamp states -- direct R/G/B channel reading with offset
- Frosted insert effect technique
- Triangle insert hotspot fix using DisableLighting
- VPX 10.8.1 validation warnings catalog -- mono sounds, fast timers, legacy features
See Also¶
- Software Setup -- VPinSPA installation
- Insert Lighting -- RGB inserts, frosted effect, triangle fix
- Troubleshooting -- bass.dll, validation warnings