Skip to content

Special Force

A Bally 6803 table built with extensive real-machine measurements provided by ArmyAviation (the machine owner). The project documented the full build-through-release lifecycle from late 2021 to late 2025, producing unique knowledge on 6803 hardware quirks, solenoid multiplexing, and physical measurement-driven physics tuning. Key contributors: apophis79 (scripting/physics), flux5009 (Blender toolkit), bord1947 (3D parts), cyberpez (ramps), niwak (plastics toolkit workflow), and sixtoe (VR).

Build Notes

Playfield Photo Correction

To remove barrel distortion from playfield photos:

  1. Check file info for camera/lens information from EXIF data
  2. Apply Photoshop's Lens Correction filter with the matching camera/lens profile
  3. If no lens info, shoot a grid with the same setup, warp the grid to perfect, apply the same correction to all images

Affinity Photo ($50 one-time) has nearly the same feature.

Playfield Scanning Best Practices

Scanners have very shallow depth of field. If metal mechanisms are left on during scanning, the focal point can lock onto the top of mechanisms instead of the playfield surface. Best practice: strip the playfield completely before scanning. For photos, stand far back and use optical zoom to avoid skew and fisheye.

Playfield Aspect Ratio Verification

Overlay the manual's blueprint drawing on the stitched photo. The manual drawing was within fractions of a percent of real measurements, revealing the photo stitch was a few percent too wide. A small deformation corrected the issue.

Physics Tuning Methodology

Start with playfield slope and friction (everything depends on them):

  1. Have the real machine owner drop a ball from the top and record roll time
  2. Match this in VPX by adjusting slope and friction
  3. Tune flipper strength using ramp accessibility -- the hardest ramp should be "just barely possible" from a cradled ball
  4. Use video comparison for ball behavior

Real machine slope measured at 5 degrees using iPhone level app. Friction set to 0.15 default, tuned to 0.12 to match real machine ball speed at 6-degree VPX slope.

Bally 6803 Flipper Dimensions

1" fat end, 3/4" tip, 3-1/4" total length (with rubber). The 6803 series has overpowered/heavy flippers. EOS angle is about 10 degrees higher than typical modern tables. Classic game flippers are often left too high in VPX, making games too easy.

Physical Trough Setup

Physical trough eliminates need to destroy or create balls in script. The gBOT (global Ball On Trough) pattern replaces GetBalls calls for cleaner ball tracking.

Rubber Collision Primitives

Use cylinder primitives and walls as collidable objects rather than making rubber objects collidable. Rubber objects remain visible but non-collidable. Rubber post primitives should be at hit height 27.

Post Z-Height

All post collision primitives need Z position of 25 (not 0). The origin is at volumetric center, so Z=0 means half the post is below the playfield, causing super-bouncy collisions.

Slingshot and Bumper Activation

Do NOT use solenoid callbacks to physically activate slingshots or bumpers. The delay leads to incorrect behavior. VPX handles activation internally via hit events. To disable slings during attract mode, set threshold really high or use vpmNudge.TiltObj.

Bell Post Import Scale

When importing OBJ meshes modeled in real-world inches into VPX, use scale factor X,Y,Z = 185.0879.

VPW Version Numbering

Major.Minor for releases (1.0, 1.1, 1.2). Third number (1.0.1) used for internal development versions between official releases.

3D & Art

Blender Toolkit Plastics Workflow (Niwak Method)

  1. Import image as plane (with one or more plastics)
  2. Scale appropriately according to holes
  3. Apply scale (critical -- otherwise thickness will be wrong)
  4. Enter edit mode, knife tool (K) to cut shape
  5. Select face, duplicate (Alt+D) then separate (P)
  6. Select new object + library object with plastic setup, copy modifiers (Ctrl+L)
  7. Add clear plastic material from library as first slot
  8. Edit decal material and copy setup from library

Illustrator SVG to Blender Workflow

Draw vectors in Illustrator, bring into Blender as SVG, convert to mesh, apply modifiers/materials. Keep a bounding box mesh the same size as the texture file for UV projection.

Scale Factor

When importing from Illustrator to Blender, scale meshes exactly 1.25x to be accurate in inches.

Bumper Cap Modeling

Special Force's pyramidal bumper caps: 2-13/16" wide x 3/4" high, screw indents 5/16" wide x 3/4" long, hole-to-hole spacing 1-7/8". Caps appear translucent when lit but opaque when off -- material needs careful tuning.

Ramp Material (Translucent Colored Plastic)

Special Force's colored ramps use the same method as plastics -- decal on the bottom, white on outside/sides. Apply the same decal material and plastic material as standard plastics. Alpha around 0.5 as starting point.

Movable Object Export Axis Orientation

For movable objects (targets, gates) to export correctly:

  1. Select all targets and lightmap in object mode
  2. Press Alt+R (clear rotation)
  3. Toggle to edit mode, rotate to align
  4. Toggle to object mode, align with reference

The Y-axis (green arrow) must be perpendicular to the target face.

Bevel Modifier Naming

Modifier name MUST contain "NoExp" (e.g., "Bevel-NoExp") to prevent extra geometry from being exported to VPX. Always clear custom split normal data and apply shade auto smooth.

Layer Separator Masks

When a transparent object sits above a movable (like a drop target), add a layer mask so the movable's baked image doesn't bleed through the transparent part at runtime.

Standup Target Positioning

Position right up against the front of the playfield hole and very near the surface -- common mistake is placing too high and too far back. Two versions exist: tall back (Williams) and short back (Bally/Stern 80s).

VR Cabinet Setup

Requires correct era cabinet dimensions, animated plunger and buttons, no holes in back of cab, balanced lighting, correct backglass positioning. Desktop rails should be hidden in VR/Cab modes.

Backglass WebP Optimization

Changing backglass images from PNG to WebP halved file sizes with no visible quality loss.

Scripting

Bally 6803 Light Mapping

You cannot use lamp numbers from the manual directly. Use the Timer Interval field in VPX light object's Misc tab. Verify each light using service test mode on the real machine or VPinMAME.

Bally 6803 Solenoid Multiplexing

6803 games multiplex solenoids through a relay/expand board. Each solenoid has two functions, with a mode select relay (light L3) switching between them:

' When L3 is ON:  solenoid 6 = Bright Lights 1
' When L3 is OFF: solenoid 6 = Drop Target Reset

Solenoids 6-10 and 14-15 are multiplexed on Special Force.

ROM-Driven Bumper Activation (Machine Gun Effect)

Special Force fires pop bumpers remotely when bombs are loaded and the ball enters the helicopter funnel. The ROM rapidly fires bumper solenoids to simulate a machine gun. Add explicit solenoid callbacks for bumpers and use PlayHit for animation. Scripted with a timer at 100ms interval (~10 impulses/sec, matching real machine audio analysis).

Refraction Probe Setup

Refraction probes added to transparent ramps and plastics. Ray-traced ball shadows enabled on static GI. Exposed in Tweak menu for user control.

Troubleshooting

VPinMAME 3.5 Fixed 6803 Solenoid Issues

Fixed the machine gun pop bumper effect. However, lock saucer eject at game over still requires correct NVRAM setting (specforc.nv with "Game Over Hold Captive Balls" set correctly).

Toolkit Subdivision Triangle Bloat

Export bug caused 3934K triangles (should be ~383K). Fix: ensure subdivision modifier name contains "NoExp" to prevent it from being applied during export.

Toolkit Batch "Snowing" Artifact

Snow artifacts in bakemaps from bad environment reflection. Workaround: run each step individually instead of as a batch. The "perform group" checkbox must be ticked before running. Use the same Blender version the blend file was created in.

POV Inclination Must Match Slope

When table slope is changed for physics tuning, POV inclination must also be updated. Missing faces in fullscreen (but not desktop) mode are caused by POV mismatch.

Timer-Based Stutters

Timers at high frequency with heavy callbacks cause visible stuttering. Identified and fixed in post-release polish.

Game Knowledge

Gameplay Mechanics

  1. Hit bomb targets to load bombs, then hit the load bomb target in the middle
  2. Get ball up the helicopter ramp through 2 switches
  3. With bombs loaded, bumpers fire like a machine gun (1 bomb = left bumper, 2 = left+right, 3 = all three)
  4. Ball lock in saucer for multiball (2 or 3 balls)
  5. Magnasave buttons fire "missiles" that knock down drop targets
  6. Right ramp is the hardest shot -- rarely achievable from a cradled ball
  7. Only 4 true GI bulbs on the whole table; most "GI" labeled bulbs are ROM-controlled

6803 PWM Complexity

PWM lighting is complicated on 6803 games because bright lights share a command signal with solenoids via a relay. Requires low-level VPinMAME implementation changes.

Resources

  • Grant Warwick's Hard Surface Essentials -- 90-minute hard surface modeling tutorial for Blender, still relevant after 10+ years
  • Blender MeasureIt add-on for on-screen dimension verification
  • VPW parts library includes 3" Bally bat models and bell post meshes