Skip to content

World Cup Soccer (Bally 1994)

Full scratch-rebuild of the Knorr WCS94 table (which was built at wrong VP unit scale). Notable for the spinning soccer ball animation technique (matte ball + glass dome), motion blur via texture swapping, goalie mech non-linear position arrays, systematic trigger hit-height testing, and playfield rollover button physics for the arcade-button-style rollovers.

Build Story

The original Knorr WCS94 table was built at 1 VPX unit = 1mm (metric), but VPX defines 1 VP unit = 0.53975mm. This made the table ~1:1.852 scale, appearing as "mini pinball" in VR and breaking all nFozzy physics. The VPW team decided a scratch rebuild was easier than converting, led by apophis79, sixtoe, tomate80, mcarter78, flupper1, and astronasty. Uses Williams part 20-9250-5 flippers (same as STTNG, Medieval Madness, Monster Bash, and many other WPC tables).

Table-Specific Details

Mechanisms & Hardware

  • Soccer ball animation: Separate matte-textured primitive (spins with motor, in movable collection) plus transparent glass sphere overlay (stays static, preserves reflections, in parts collection). The ball has 5-fold rotational symmetry repeating every 72 degrees. Only 3 rendered positions needed (0, 24, 48 degrees). Solenoids 23/24 control clockwise/counterclockwise direction; solenoid 22 is the ball flasher, not the motor.
  • Soccer ball motion blur: Swap between sharp and blurred texture versions based on rotation speed. Two blur stages (medium and full). The UV mapping must be tightly cropped -- the original used a huge mostly-empty image expanding to 246MB in VPX RAM because VPX decompresses all images to RAM. Real machine reference: at full speed, white top half, grey bottom half, solid black equatorial line.
  • Goalie mech non-linear position array: For mechs needing non-linear motion (pausing at extremes), use a manually-defined position array stepped by timer ticks rather than linear interpolation. From Flupper's TWD bicycle girl ramp technique. The goalie walls array must match the step count exactly.
  • Playfield rollover buttons: Arcade-button-style rollovers (not flat) that affect ball trajectory. Final approach: beveled dome collidable primitives lowered to just above playfield level, permanently collidable. Real machine reference: the button lip never goes fully flat, effect most noticeable on slow-moving balls.
  • Bumper cap tinting: Transparent colored caps need both a refraction probe in Blender and a tinted VPX material. Clone VLM.Bake.Active, rename, adjust tint color. Caps must be in their own layer so tint only applies to them.

Art & Visuals

  • VPX images expand in RAM: All textures decompress fully into RAM at runtime. A 300KB compressed WebP/PNG can expand to 246MB. The VPX image manager shows in-memory size, not compressed file size. Always check this value when optimizing.
  • GI light collection splitting: Lights with the same VPX light name in "split" mode are grouped into a single lightmap. Only split lights needing individual shadow control; group the rest by shared name to minimize file size.
  • VLM Blender 4.2 rendering bug: Slingshot plastics rendered without lightmaps. Blender 4.1 is the recommended version for VLM work.

Physics & Gameplay

  • VPX trigger hit height behavior: Systematic testing revealed: playfield-level trigger activates when ball is within 21 VP units above (not 25). Hit height defines a solid column above the trigger. The logic appears reversed from intuition. For ramp switches falsely triggered by playfield balls: reduce trigger size, raise surface height, set hit height to 10, add exit switch to unhit all switches when ball leaves ramp area.
  • Playfield mesh ball sticking: Balls balance on mesh seam lines where two triangles meet. Even 0.0004 vs -0.0001 Z differences matter. Keep meshes flat and simple. See playfield mesh loop cuts.
  • VP unit scale verification: Always verify the VPX dimension manager is current. WCS94 is WPC standard: 20.25" x 45.75". See dimension verification.

Known Issues

  • VLM batch crashes: Empty mesh objects crash the render (push by Niwak now reports offending object name). Never save after a failed batch -- temporary VLM.Temp.xxx scenes persist and corrupt subsequent runs. Shared layer separators across multiple objects also cause crashes -- join objects or duplicate separators. UV maps named "UVW" instead of "UVMap" (from Cinema4D FBX imports) crash the export stage.
  • VLM GPU denoising VRAM: Black lightmaps can result from GPU denoising running out of VRAM. Uncheck "Use GPU to denoise" in toolkit settings.

Techniques Developed Here

  • Spinning soccer ball with glass dome overlay animation technique
  • Motion blur via UV-remapped texture swapping with RAM optimization
  • Non-linear position arrays for mech animation
  • Systematic VPX trigger hit-height behavior documentation
  • Playfield rollover button physics implementation

See Also