Jokerz! (Williams 1988)¶
System 11 build (2021-2024) with apophis79, sixtoe, tomate80, iaakki, borgdog, flupper1, and bord1947. Notable for its raising ramp mechanism (one-way motor on a cantilever), flasher dome fade-up code for incandescent realism, GI-aware flasher opacity balancing, and the discovery that VPX saves table state on exit -- a corruption risk affecting all tables.
Build Story¶
Jokerz presented unique challenges as a System 11 table with a modified sound board supporting stereo audio (the YM2151 FM chip). It is the only Williams System 11 game with stereo audio -- Williams never used stereo again until Revenge from Mars. VPinMAME emulates this in mono only. The build also pioneered the hardtop overlay scanning technique and established the reference implementation for ON/OFF fading that other tables followed.
Table-Specific Details¶
Mechanisms & Hardware¶
Raising ramp mechanism: The center ramp uses a one-way motor on a cantilever (like a piston), not a reversible motor. Switch 52 = "RAMP RAISE", Solenoid 15 = motor, Switch 15 = "RAMP IS UP", Switch 16 = "RAMP IS DOWN". Previous implementations tracked direction state manually, causing "confused ramp" bugs during tilt/slamtilt. apophis79's fix: model the motor as continuously running when the solenoid is enabled, with the ramp cycling through positions until the appropriate up/down switch is reached.
Animated ramp collision: Sequential collidable primitives become collidable in sequence as the ramp moves. All ramps are made collidable cumulatively during raising (do not disable lower ones immediately), then all except the top are disabled after a 2-second delay once fully raised. A "narnia rescue" kicker under the ramp teleports balls to a kicker lane.
System 11 stereo audio: Jokerz uses a unique modified System 11 sound board with the YM2151 FM sound chip with native stereo support. The modification was considered unreliable and was abandoned by Williams. Data East's early games (Laser War, etc.) successfully used the same chip for stereo.
Art & Visuals¶
Flasher dome fade-up: Real flasher domes (especially on System 11 era games) do not reach full intensity instantly -- they ramp up slowly. When flickered rapidly by the ROM, they never reach maximum brightness. iaakki reworked the dome code to include fade speed, with slight per-flasher speed differences to prevent all domes banging to max simultaneously.
GI-aware flasher opacity: When GI is on, flashers appear less dramatic because the scene is brighter. iaakki's compensation: FlasherLL_L.opacity = (100 - 30*gilvl) * ObjLevel(nr). When GI is ON, max flasher opacity is 70; when OFF, max is 100.
Flasher dome lit/unlit dual-primitive: Two identical overlapping primitives -- a base (always visible) and a lit version on top with higher depth bias. flupper1's key detail: ensure the base prim uses the "off" texture, not the "lit" texture, or the lit version bleeds through when the flasher should be dark.
Physics & Gameplay¶
Collidable ramp slope sensitivity: A barely perceptible "speed bump" in a collidable ramp primitive profile made one ramp noticeably harder to complete. sixtoe found and smoothed a long, slight hump in the right ramp. The fix was "absolutely fractional" but made the ramp feel consistent -- illustrating why collidable primitives require precise mesh work.
Post pass geometry calibration: clarkkent9917's technique: create a dummy wall shape matching the return lane/sling boundary, copy-paste-flip X, and position using cursor keys to ensure perfect horizontal symmetry. VPX is "very very very sensitive" to asymmetries for flipper tricks -- even sub-pixel differences can make post passes work on one side but not the other.
Known Issues¶
VPX saves table state on exit: If the table tilts and then crashes or is force-closed, bumper and slingshot threshold values can be permanently set to 100 (disabled). The table appears permanently broken. Prevention: set all thresholds at table init.
Physics materials zeroing on import: Imported physics materials (zCol_ prefixed) can have their values silently zeroed out during certain VPX operations. Detection: use the dotted ball (F11) and watch for abnormal inlane spin. If the ball reverses direction touching the flipper, re-import all physics materials.
Cabinet Mode checkbox: The "Cabinet Mode" checkbox in VPinMAME ROM settings (F1) must be enabled even on desktop. Despite its misleading name, it suppresses splash screens and prevents sticky flipper bugs when using B2S in non-exe mode.
Techniques Developed Here¶
- Raising/lowering ramp mechanism scripting pattern
- Flasher dome fade-up for incandescent realism was developed here
- GI-aware flasher opacity balancing technique
- VPX table state persistence bug was discovered here
- Physics material zeroing bug detection method
- Hardtop overlay scanning technique documented from this build
- Collidable primitive normals direction -- backface pass-through documented here
- Blender render neutral, grade in VPX best practice stated by flupper1 here
See Also¶
- Monster Bash -- Flupper flasher dome integration
- Hook -- Data East flasher dome techniques
- Iron Maiden -- ON/OFF fading referenced Jokerz as the implementation