Skip to content

Monster Bash (Williams 1998)

VPW mod of Skitso's original desktop build (2020-2024), integrating VPW physics and VR support. Key contributors: iaakki (inserts/flashers/physics), sixtoe (VR), rothbauerw (physics), o0skitso0o (original build/lighting), bord1947 (playfield mesh), flupper1 (flasher domes), tomate80, benji084, djrobx, passion4pins, and wylte. Notable for the Flupper flasher dome integration workflow, sling threshold tuning via PAPA video timestamps, VR transparency/swimming fix, and the definitive physics feedback protocol.

Build Story

Monster Bash demonstrated the VPW mod workflow -- taking an existing well-built desktop table and systematically adding VPW physics (nFozzy rubbers, TargetBouncer), Fleep sounds, VR support, and Flupper flasher domes. The post-release sling tuning discussion between rothbauerw and astronasty established the gold standard for physics feedback -- specific PAPA video timestamps showing expected behavior, not subjective descriptions.

Table-Specific Details

Mechanisms & Hardware

Dracula coffin mechanism: The mech position variable (mechpos) could return values outside expected array bounds, causing "subscript out of range" errors. Fix: bounds clamping (If mechpos < 5 Then mechpos = 5, If mechpos > 85 Then mechpos = 85). VPX version-dependent -- updating VPX also resolved it for some users, but the bounds check should remain as a safeguard.

Dracula not working -- NVRAM fix: Corrupted NVRAM data causes the coffin to come out and immediately go back in. Fix: delete the NVRAM file. Also check: B2S server version (2.1.2 is the "new magical number"), the "start backglass" button in B2S properties was pressed (it "tends to reset itself"), and B2S running with the table (ball stutter when flashers fire was traced to B2S being off).

Art & Visuals

Flupper flasher dome integration: The dome uses multiple materials swapped at runtime via UpdateMaterial (requires VPX 10.6.1+). Core brightness: objlit(nr).BlendDisableLighting = 10 * ObjLevel(nr)^2. Dome opacity: f23c.opacity = 9000 * ObjLevel(nr)^2.5. All flasher primitives must be set to non-visible by default or they appear on table boot. Dome color comes from textures, not the script's RGB setting.

FadeDisableLighting for insert trays: The FadeDisableLighting sub adjusts a primitive's UserValue (0-1 range) on fade-in/fade-out, then applies: a.BlendDisableLighting = alvl * a.UserValue. Fade-down decrements by 0.25 per step, fade-up by 0.5 -- asymmetric to match incandescent physics.

Blue bulb BDL -- primitives must be non-static: Bulb primitives must be set to non-static in the VPX editor for blenddisablelighting changes in script to take effect. Static primitives ignore runtime material changes.

VR light swimming fix: Lights "swim" on objects that are both transparent/semi-opaque AND set to static rendering. Fix: set affected objects to "active" (untick static). For playfields with under-playfield effects, use a playfield cutout and set opacity to 1.0 instead of transparency. djrobx confirmed: static rendering "happens before the script runs" and cannot be changed via script.

Bride flasher for VR: POV-specific flasher images do not work in VR because viewing angle is dynamic. Fix: disable the POV flasher in VR and use blenddisablelighting on the 3D model: Bride.blenddisablelighting = 0.3 * step/8.

Physics & Gameplay

Sling threshold tuning from PAPA video: rothbauerw tuned sling sensitivity by comparing VPX behavior against PAPA tutorial video timestamps. Threshold of 1 was too sensitive (fired on light touches), 2 was too high (legitimate hits missed), 1.5 was the sweet spot. Both sling threshold AND hit threshold must match -- otherwise animation/sounds trigger without physics or vice versa.

Physics feedback protocol: "I need enough detail and examples to be able to fix it properly and not break something else" -- rothbauerw. The gold standard: PAPA or competition video timestamps showing expected behavior. Tables are tuned as "new or well-maintained machines" -- they play faster than worn arcade machines. Without video evidence, feedback becomes endless back-and-forth tweaking.

Shooter lane ramp height: Should be approximately 30 VPX units for WPC tables. The original had it at 50 units, affecting ball launch behavior.

Known Issues

Frankenstein texture opacity bug in VPX 10.8: Primitives relied on a long-standing VPX bug where texture transparency was ignored if material opacity was 1 (the old 0.9999 workaround). niwak's normal mapping fix revealed the bug. Fix: disable "lighting from behind" for Frankenstein primitives, or make textures fully opaque. niwak later pushed an automatic fix into VPX that handles this on table load.

Top lane GI wash: Pop bumper area GI was too bright, making rollover lane inserts hard to read. Two-level fix: adjust GI light falloff power (4 to 10) and falloff range (150 to 50), then add light reflection primitives to metal ball guide walls for improved insert readability.

Techniques Developed Here

See Also