Haunted House¶
Gottlieb System 80 table with 3 playfields (upper, main, lower/cellar) plus under-PF visible area. 3D art-heavy development with extensive toolkit integration.
Build Notes¶
Multi-Level Playfield Architecture¶
- Main playfield should be at Z position 0 (VPX 10.8 resolved old limitations)
- Lower playfield angled at -11 degrees relative to main
- Each playfield needs own Blender collection for independent depth bias settings
- Physical collidable walls built in Blender can be more precise than VPX editor walls for angled playfields
Blender Toolkit Setup¶
For playfield setup:
- Use Principled Shader with playfield image in both base color and alpha channel
- Alpha channel knocks out insert areas automatically
- Don't use VPX materials - use Blender's Principled BSDF
- Add ambient occlusion for better depth perception
- Insert cutouts allow light to pass through to layers below
Insert Light Leaking Between Levels¶
Main playfield inserts can realistically illuminate lower playfield. Implementation: add third point light below insert cup, tied to same VPX light number. Use incandescent color (2700K) for leaking light since it doesn't pass through colored plastic insert lens.
Scripting¶
Gottlieb System 80 Lamp-Multiplexed Solenoids¶
Haunted House uses some "lights" (lamp outputs) to control solenoids/flashers - lamp multiplexing. Lower playfield flashers controlled through lamp matrix rather than dedicated solenoid outputs. Flasher behavior must be mapped from lamp callbacks rather than solenoid callbacks.
Flex Option Menu¶
In-game option menu triggered by pressing both magna buttons simultaneously. Only active when ball in plunger lane (uses InRect check). Options include: GI color mods per playfield level, flipper mode, glow ball colors, dust layer toggle, backglass reflections, info/instruction cards.
Default DIP Switch Initialization¶
Two approaches:
- Script-based: Set DIPs in script before controller loads. Requires table restart on first load
- Include .nv file: Ship NVRAM file with desired defaults pre-configured. Works immediately but only covers one ROM set
Game mode must be set to "replay" for match feature to work.
3D & Art¶
Toolkit Naming Conventions¶
VPX has 31-character limit for primitive names. Toolkit lightmap names follow pattern: LM_<light collection>_<light name>_<part collection>_<part name>. Individual names must be ~6 characters max.
Guidelines:
- "Bumper1Light" becomes "BL1"
- "Playfield_Upper" becomes "PFUp"
- Truncated names cause multiple primitives to share same name, breaking table
Movables Setup¶
Correct setup:
- Flippers: Point straight up in Blender, apply rotation, copy start/end angles from VPX. Do NOT check "Use Obj Pos"
- Gates, spinners, trap doors: Check both "Use as pivot" and "Use Obj Pos"
- Rollover switches: Need "Use Obj Pos"
- Two-position flipper rendering: Bake both up and down positions (append "U" to up-position name)
- All movables should be hidden from others to prevent baked shadows
Environment Image Rotation¶
Milky/washed-out reflections on metal parts often caused by environmental HDRI image reflecting bright spot. Fix: rotate environment image around Z axis to move bright reflection away. Turn off "transparent" in Blender render settings to see environment room in render view.
Playfield Window Dust Layer¶
Transparent playfield window (viewing lower playfield) looked like hole without visual treatment. Fix: add custom dust/dirt texture layer over window surface. Opacity around 200-250 looks natural. Made optional in F12 menu.
Physics¶
Kicking Standup Targets¶
Standup targets that function as mini-slingshots. Implementation uses modified drop target code with adjustable kick strength and displacement threshold. Target must be deflected certain amount before kick fires - grazing hit just causes target to lean back without scoring.
Lower Playfield Object Rotation¶
Drop targets on angled lower playfield (-11 degrees) need rotation compensation. Standard drop target animation code modifies RotX and resets to zero, but lower playfield targets need 11-degree offset added. Add Z-position check in drop target animate sub - if target on lower playfield, add playfield angle offset.
Troubleshooting¶
Toolkit Insert Cups and Baking Depth¶
Inserts baked without trays/cups appear too deep in VR and 3D stereo. Options:
- Add shallow insert cups/trays (0.1 depth) for realistic recessed look
- Bake inserts onto playfield surface for flatter look
- When copying inserts between tables, tray objects may not copy if source collection was hidden
Playfield Reflections with Rotated Primitives¶
Playfield reflections broke because primitives all rotated 90 degrees along X axis (from toolkit export), causing reflection plane to be rotated too. Additionally, enabling backglass reflections on main playfield creates realistic glass reflection effect on transparent window area.
Resources¶
- IPDB entry: Haunted House