Haunted House (Gottlieb 1982)¶
A complete toolkit table build for Gottlieb's uniquely complex 3-playfield, 8-flipper Haunted House. Produced comprehensive toolkit workflow documentation including Blender collection organization, naming conventions, batch export settings, multi-level playfield physics, and GI light collection architecture. Key contributors: apophis79, cyberpez, sixtoe, rothbauerw, tomate80, bord1947, niwak, and benji084.
Build Story¶
Haunted House is architecturally unique -- three playfields (upper, main, lower) with 8 flippers, requiring solutions for multi-playfield physics that no other VPW table had needed. The build produced some of VPW's most important toolkit documentation, establishing patterns used on every subsequent toolkit table.
Table-Specific Details¶
Mechanisms & Hardware¶
- Three-playfield architecture: Main playfield at Z=0 (VPX 10.8 resolved older limitations). Lower playfield at 11 degrees relative to main -- cyberpez's estimate confirmed by arcade measurement offer from iaakki.
- Angled flipper setup: Flippers on the lower playfield need two-axis rotation. Set up local axes normally, then rotate globally for the 11-degree slope. Don't check "Use Obj Pos" for flippers. Control RotZ for flipper movement with a fixed RotX offset.
- Drop target fix for angled playfields: Drop target animation code resets RotX to zero, breaking targets on the lower playfield. Fix: add the playfield angle offset (11 degrees) to RotX in the animate sub, using a z-height check to identify which targets are affected.
- Kicking standup targets (Gottlieb leaf switch targets): Act as normal standups on grazing hits but kick back like slingshots on solid hits. Implementation uses modified drop target code with configurable kick strength and displacement threshold.
- Playfield window between main and lower PF provided an opportunity for backglass reflections, but sixtoe warned "fake reflections look bloody awful in VR, always." Better approach: dust/dirt flasher layer with opacity ~200-250 to sell the glass material.
Art & Visuals¶
- Blender collection organization: Standard structure established here -- VLM.Bake (static objects, Parts sub-collection, underPF), VLM.Lights (Inserts as Split, GI per string as Grouped with shadow-casting in separate Split, Flashers as Split, Room as Solid), VLM.Movables (targets, flippers, gates, spinners).
- 31-character naming budget:
LM_+ light collection +_+ light name +_+ part collection +_+ part name must total 31 or fewer. Keep all names at most 6 characters. - Batch export settings: Nestmap size must be 8192 (not 256). At least one light collection needs "Solid" bake mode or only lightmaps generate (no bakemaps). Render ratio 25% for quick 1K tests. Delete render results directory before re-running. Use "Hide" not "Remove All" export mode.
- Insert dual-bulb setup: Each insert requires two Blender lights (inside insert + above playfield) but only one VPX light. Insert cups (tray shapes) prevent the flat/deep appearance especially noticeable in VR.
- GI color mod system: All GI rendered as pure white in Blender, with color applied in VPX script. Enables unlimited user presets, per-group independent coloring, and adjustable room brightness.
Physics & Gameplay¶
- DIP switch initialization: ROM DIP switches lack VPX-side defaults. Two approaches:
SetDefaultDipsfunction (requires restart) or shipping a pre-configured.nvfile (works immediately). Haunted House set to "Replay" mode for match feature. - Slingshot rubber animation: Three methods compared -- old-fashioned swap (simplest, compatible with lightmaps), PlayAnim/Blendshape (higher quality but lightmap blending issues), and toolkit built-in sling setup.
Known Issues¶
- First batch export produced only lightmaps, no bakemaps because no light collection had "Solid" render mode selected.
- Timer intervals causing stutters fixed in v2.1.1 -- same class of bug as other VPW tables with too-fast timer intervals.
Techniques Developed Here¶
- Blender collection organization standard for all toolkit tables
- Toolkit naming convention and 31-character budget
- Batch export settings (nestmap 8192, Solid requirement, render ratios)
- Multi-playfield architecture with angled flipper setup and drop target fix
- GI color mod system (render white, color in script)
- Toolkit light collection organization -- Split vs Grouped, per-string shadow control
- Insert cup/tray requirement for VR depth
- DIP switch initialization approaches -- script-based vs included .nv file
See Also¶
- Build Workflow -- multi-playfield, batch export, spinners
- 3D Art Pipeline -- collection organization, naming
- GI and Flashers -- GI color mod, light collections
- Insert Lighting -- dual-bulb setup, insert cups