# Visual Pinball

Visual Pinball ("VP") is a freeware and source available video game engine for pinball tables and similar games such as pachinko machines. It includes a table editor as well as the simulator itself, and runs on Microsoft Windows. It can be used with Visual PinMAME, an emulator for ROM images from real pinball machines.
A huge variety of user-created VP tables are available on the internet. Players can choose between faithful recreations of existing pinball machines, with or without ROM emulation, and original pinball simulations based on licensed or completely original themes. VP's scripting capabilities can also be used to create pinball-like games such as pitch-and-bat baseball, pinball bingo, bowling, cue sports, and pachinko.
VP can be used with common desktop PCs and monitors, but also supports "virtual pinball" cabinets, with various monitors and TVs used to display the playfield and backbox, similar to a real pinball machine. 3D televisions are supported; and recent versions support touch controls for playing on tablet computers and smartphones.
In February 2010, VP's source code was released under a license allowing free non-commercial use.

## Design

Every Visual Pinball table includes two main parts: the "physical" playfield design, and the script that determines table gameplay, establishing the "wiring" of the emulation (through Visual PinMAME) to the table components such as lamps, switches and flippers. The editor uses Microsoft VBScript for user programming. VP itself is written in C++ with the Active Template Library for making ActiveX controls. VP is based on DirectX, so it can run on any Windows version from Windows 98 on, but most recent VP versions require at least Windows XP due to modern Microsoft compilers abandoning older versions of the OS.

## History

Visual Pinball was released to the public on December 19, 2000 by programmer Randy Davis.
In 2005, David R. Foley purchased rights from Davis for modification of the suite for a full-sized pinball cabinet based on the Visual Pinball software. Chicago Gaming purchased rights for licensed tables from Williams Electronics. The Visual PinMAME team and the Visual Pinball development community also joined in the effort to produce improvements to the suite product and a few tables. This project, known as UltraPin, was acquired by Global VR following the acquisition of certain assets UltraCade, and was discontinued in 2008.
In 2008, NanoTech Entertainment acquired VP rights from Davis to use and distribute the engine with its Pinball Wizard PC Controller. They released version 9 of the engine back to the community, with many updates developed between 2005–2008. Version 9 includes major improvements, but incomplete backward compatibility, so some older tables still need VP version 8 to run properly.
In 2010, the source code of Visual Pinball 9.0.7 was released under a license allowing free non-commercial use, similar to the original MAME license. Davis and NanoTech are no longer involved in development as of (at least) version 9.0.8. Since then, development has been done by various open-source contributors.
Visual Pinball X ("VPX") was released on December 24, 2015, again breaking backward compatibility with version 9; previously created tables can be loaded with it, but not played without changes. VPX brings significant improvements to graphics and the program's physics engine.
In 2025, the re-integration of the VPVR fork into Visual Pinball 10.8.0 was finalized, which adds support for dynamic virtual camera movement, including Virtual reality headsets, and adding OpenGL as an alternative graphics API option. Due to the latter, Visual Pinball 10.8.1 (still in development) added support for operating systems other than Windows, including macOS, iOS, tvOS, Linux (incl. the Batocera distribution and the Raspberry Pi platform) and Android. These versions for now omit (most of) the user interface for creating tables, and focus on simulating/playing existing tables.

## Visual PinMAME

The simulation of most modern pinball machines (especially those made after 1992, using large portions of DMD animations and digital sound samples) requires the Visual PinMAME program (sometimes referred to as VPinMAME or VPM) to emulate physical machines as closely as possible. VPM increases Visual Pinball's system requirements and, like other emulators, uses image files of actual ROMs from physical pinball machines, executing them as simulations of the embedded CPUs, sound chips and displays from the original machines. Since its 3.6 release, it also allows to physically simulate light bulb, LED and alphanumeric segment display behaviors to match the analogue circuits more closely. On top, flicker fusion is simulated to match human perception on real hardware.
VPM is a program (a COM class) designed to work in combination with Visual Pinball (or nowadays, any other program that can use the COM class, e.g. Unit3D Pinball) to allow 3D renderings of actual pinball table designs. It is responsible for emulating CPUs and the connected ROMs used in modern pinball tables, as opposed to tables with electro-mechanical mechanisms that contain no ROMs or advanced ICs. VPM displays the LEDs or DMD of the machines in a separate window, and emulates integrated sound chips. To work properly with a rendered table, it requires that specific table's ROM images.
VPM was written by a programming team including Steve Ellenoff, Tom Haukap, Martin Adrian and Gerrit Volkenborn, and was released on March 30, 2001 with version 0.99 beta. The underlying PinMAME core—which drives all emulation components, and is responsible for emulating LED displays, the DMD and playback of the emulated sound and music—was already started in April 1999. VPM is named after the original MAME program for emulating arcade games and is based on some parts of the MAME core .7X. The VPM project started as WPCMAMECOM (and its underlying core as WPCMAME, based on the WPC and MAME acronyms). VPM is written in the C++ programming language, whereas PinMAME is still based on C.
On August 1, 2008, the full source code of PinMAME 2.0 was made available to the public. Since then, development continues with the help of open-source contributors.
In 2017, the effort of making the PinMAME core interact with other programs through other APIs than the Windows exclusive COM was started (initially called PinMAMEdll). Over the years, this was further extended to result in a platform-independent library (libPinMAME) initially released in January 2021, that can be employed also on macOS, iOS, tvOS, Linux and Android, and in 32-bit and 64-bit flavors.