Back To Projects Coney Island Screenshots

Open Pinball!

an open pinball simulator

(Previously named oops)
Original Author and coordinator: Johan S (email: oopsmail at
The goal of this project is to create a fully portable pinball simulator.
You must have allegro 4.0 installed.
Oops is a pinball simulator. The main process oops takes care of interpreting the .table files and controls the ball movements according to physichal laws. Oops then communicates the ball's coordinates to another process, called renderer which renders the table, taken from the same .table file and renderer the ball as it moves around. Oops must also communicate status for objects it hits so that renderer can produce sounds and count scoring. I want that renderer.c shall always be a 2D renderer and that when you do a 3D renderer, call it render3D. Theese two shall always be available with oops. Custom games can then use theese two as a base.
3D rendering is not as hard to do as you might think, it is mostly the same as a 2D in perspective, only the ball and flippers must be handled....

12-Feb-2002: Source Released. Please fix issues and send patches.

25-Jan-2002: Version 0.0.6 Added a parser for table description files.

6-Jan-2002: Version 0.0.5 Changed to a more proportional demo table.

3-Jan-2002: Version 0.0.4 Has preliminary flippers.

2-Jan-2002: The Linux version of OOPS has interprocess communication to a rendering process, which currently only prints the information it gets from oops. It can be used to do a 3D rendering, by someone interested... Mail for info if interested. (I will move the 2D test rendering to this soon.)

30 Dec-01: First very early release.
Current Status
currently compiles and runs in Linux and Dos. Main Development in Linux. IPC only possible in linux version.

  • Walls (passive elements with a reflection coefficient) can be drawn, and the ball reflects (unfortunately a bit inaccurate at the moment).

  • Bumpers

  • Gravity. The ball falls to bottom.

  • Flippers.

  • Linux version has IPC protocol for communication with a rendering process. (How can this be made generic for all platforms?)

    - No targets, potholes, spinners or drop targets.
    ToDo: (In order of importance)
    ISSUE1: Fix ball bouncing bug

    ISSUE2: Fix flippers, this will not do.

    ISSUE3: All objects have numerical codes, just numbered from 10 and upwards. This will not do. This should be shanged so that each object has a code 0xZZYYXX, where yy is object type and xx is object number of that type, zz is for future use.

    ISSUE4: Add Drop-targets, which need a structure so that information of UP/Down can be saved per targert.

    ISSUE5: Add non-drop targets, and potholes, one way "walls" and spinners. (This is easy).

    ISSUE6: Dont write the internal BITMAP, used for modelling the pinball directly to screen, instead use a BITMAP and then blit it to screen. Use 1 pixel per millimeter for the internal bitmap.

    ISSUE7: move all table on screen rendering to renderer.c.

    ISSUE8: More IPC signals, currently only ball position is communicated.

    ISSUE9: Add a sound entry to the .table file, which can be used in renderer.c to give sounds.

    * Create a table construction set that uses oops as an engine and renderer or render3D as graphical engine.
    * Create a pinmame ( interface to renderer or render3D for interaction with electronics emulation.
    Screenshot OOPSScreenshot OOPS
    Full size jpg Full size png | Full size jpg

    DOS/Windows version. (0.0.6 Binary only)
    Linux version (Source Only)
    (You need allegro4.0 libs (I think)).