Police Force (Williams 1989)¶
One of the richest VPW build channels, documenting a complete System 11 table from real-machine teardown through full VLM toolkit conversion. Contains foundational knowledge on flasher naming conventions, VPX performance optimization, refraction probes, and alphanumeric display implementation. Built by benji084, apophis79, gtxjoe, and sixtoe.
Build Story¶
Police Force was built from a real table teardown, using benji084's crosshair reference frame photography technique. The build evolved from a pre-toolkit Sys11 implementation (using Bad Cats as a template) through a full VLM toolkit conversion, establishing many standards along the way. Niwak's top 3 performance recommendations for toolkit tables were articulated during this build.
Table-Specific Details¶
Mechanisms & Hardware¶
- System 11 table with a "GI Blink" solenoid that works inversely to normal flashers -- it dims GI when activated rather than lighting something. Uses a TIP102 transistor on real hardware.
- Alphanumeric display uses mixed segment types: top row is 16-segment, bottom row is 8-segment, jackpot display mixes 7-segment and 8-segment (8-segment where commas appear).
Digits(0)is anomalous -- shows random numbers during attract mode but nothing during gameplay. Workaround: skipDigits(0)by offsetting all digit indices by +1.
Art & Visuals¶
- Transparent ramp edge splitting technique developed here: bake ramp material with minimal diffuse and thin white strips along edges using fake RGB splitting. Material settings: Edge Opacity 0.5, Transparency Thickness 1, Refraction Thickness 10, Refraction Roughness 2.
- Bumper cap transparency uses a two-mesh approach (inner dome + outer dome), each with its own refraction probe. Flupper1's prototype demonstrated this technique.
- Playfield depth bias of -500 fixes z-fighting between playfield surface and objects sitting on it.
- Sideblade reflections: "Static & Unsynced Dynamic" mode eliminates ball stuttering while keeping lightmap transitions visually in sync.
Physics & Gameplay¶
- System 11 flipper strength: 2300-2600 vs WPC default of 3300. Starting from Bad Cats template at 3300, shots felt "like Future Pinball" -- dropping to 2300 eliminated balls flying off ramps while maintaining all shots as makeable.
- Quantitative ramp timing established: real table measured at 1.50-1.88 seconds flipper-to-inlane. VPX shot tester at vel=55 averaged 1.66s, matching closely.
- Ramp exit hole technique: convert ramp end to primitive mesh, cut beveled hole, add thin cube as rubber "stop" in
dSleevescollection.
Known Issues¶
playfield_meshnaming collision: toolkit generates a collidable mesh on import that can conflict with existing physics mesh. Ensure only ONE playfield mesh is collidable.- VBScript variable names cannot start with numbers -- toolkit-exported objects with numeric prefixes (like
9_Rails_BM_Room) cause runtime errors. - Standalone player: variable named
Offsetclashed withConst Offsetin shufflearray functions. Wine VBScript engine is stricter than Microsoft's. Fix: rename toDigitOffset.
Techniques Developed Here¶
- Flasher naming convention standardized here (f + 1 + solenoid callback number)
- Performance optimization top 3 articulated by niwak during this build
- Lightmap property for automatic flasher/lamp control documented here
- Refraction probes setup methodology established
- Crosshair photography technique for real table reference
- Transparent ramp edge splitting technique developed here
- "Hide parts behind" rule for transparent parts documented
See Also¶
- GI and Flashers -- System 11 GI Blink solenoid, lightmap property
- Best Practices -- naming conventions, performance standards