From Sonic Retro

Sonicretro-round.svg This short article is in need of work. You can help Sonic Retro by adding to it.

ProSonic is an open-source Sonic the Hedgehog game engine for Windows, MS-DOS, Mac OS X, and Linux. saxman released the game in 2008, and the source code in 2010. Conan Kudo uploaded the game's code to the Google Code website in 2010. After Google's announcement of Google Code being shut down in 2015, he moved the project to BitBucket.

As of 2013: Development has stalled because the developers have moved onto other things. The game supports all the features of Sonic the Hedgehog 2 (16-bit), but includes no enemies. Back in 2009, Saxman wrote[1] about his plans for adding enemy support to the game. The latest revision of the game (see #External links below) does seem to include sprite/animation support. But it seems that there are no enemy script or art files in /Source/Engine. When the game is compiled and run, no enemies seem to be present. Saxman has committed no code since 2010, and nobody else has been committing any code lately either. The project was moved from Google Code to BitBucket in March 2015 after the announcement that Google would be shutting down Google Code Project Hosting.

The Taxman performed a brief review[2] of ProSonic's code in 2010.

The competing Open Sonic project, whose code is also GPL-licensed, has surpassed ProSonic: Open Sonic includes a number of functioning enemies.


Some of ProSonic's key features include:

  • True Sonic physics ported directly from the disassembly
  • Import level data from the original Sonic games
  • Integrated real-time level editor
  • Genesis YM2612 FM synthesis with GYM, VGM and VGZ file support
  • 16-bit hi-color for creating colorful environments not possible on Genesis
  • "Genesis Programming Interface" for interfacing Genesis code with ProSonic
  • Scripting support for writing objects and game functions

The engine is written in C with the aid of the Allegro software development library.

Genesis Programming Interface

The Genesis Programming Interface (formerly known as the BLAST Programming Interface), or GPI for short, is part of the ProSonic engine. The allows Motorola 68000 code to be interfaced with the internal ProSonic engine functions to allow Sega Genesis code to run in ProSonic. It's essentially a 68000 emulator that runs parallel with ProSonic.

Smart Mix

Smart Mix is a feature of the sound code that allows the audio to be mixed above the range of clipping. It uses a combination of a compressor and a mixer to adjust the audio so the loudness remains the same while the actual volume of the voices is reduced. This prevents harsh clipping. The purpose behind this feature is to allow the engine to handle proper mixing since most people aren't audio engineers.

Development timeline

The following dates represent existing backups of the ProSonic engine. The descriptions reflect what changes to the engine make each version unique.

Engine 1

  • 01/01/2006

This is the earliest backup available of the ProSonic engine. The engine was just over two weeks old at this point, and it ran as a DOS application. The basic Sonic player code was established. Two player split-screen was available via F10.

  • 01/02/2006

This build added error checking to the application startup, and it fixed the interlacing rendering mode for the two player split-screen which was broken in the previous build. The level wrapped vertically to ensure the player stayed in the main play area.

  • 02/12/2006

Navigating was very difficult as the wonky physics caused the player to bounce around a lot, and the F8 key was used to allow the player to float while in mid-air. With the LIMP tool in place, level importing was possible. This build featured Emerald Hill Zone.

  • 02/21/2006

This build introduces scripting functionality for objects. It's very buggy and causes the engine to become unstable and crash.

  • 02/27/2006

This was a test build created to try and determine why the player refused to fall to the ground. It turned out to be a problem involving the mismanagement of memory.

  • 03/04/2006

This was another test build.

  • 03/25/2006

Physics were taking an overhaul during this time. Moving off of ramps worked better, but sailing smoothly across the landscape was broken. It was also easier to navigate around the levels. In addition to these changes, a title card sequence was added.

  • 05/02/2006

The physics are much better at this point, but they were not yet perfect. This build was made right before the engine was reworked slightly to handle the Windows port.

  • 05/30/2006

Water had been added to the engine, including distortion filters to make the water sway from side to side. At this point, the engine had been successfully ported over to Windows, where it would remain as the preferred platform for development. Also, level data was grouped into the newly created PZF format.

  • 07/02/2006

By this point, a level switching mechanism had been worked into the engine by using the F6 key. The engine also supported different tile sizes, including 32x32, 64x64, 128x128 (Sonic 2 and 3), and 256x256 (Sonic 1.) Some Sonic 1 levels were successfully ported over and were playable.

  • 07/26/2006

The physics had changed yet again. This time, gliding across floors worked almost flawlessly, but the player's speed was wrong. Controlling the player was much more difficult.

  • 07/31/2006

Extra debug information was added in an attempt to study the physics and make them better.

  • 08/20/2006

This build is nearly identical to the 07/31/2006 build. The most significant changes were all behind the scenes, including changing some data file formats.

Engine 2

  • 12/14/2006

This was a complete rewrite of the engine. At this point, there was no player object. The arrow keys controlled the camera to view the level. The drawing code was completely different from the original engine in an attempt to make coding effects for paralax scrolling much easier. The side effect was it ran very poorly only older computers.

  • 12/15/2006

This version had with several executeables, each demonstrating a unique aspect of the drawing code to show to the public.

  • 12/25/2006

Object management and the ability to blit sprites had been added to the engine by this point. A new feature not seen in Engine 1 was translucency which used a table created by a set of algorithms to determine what the closest matching color would be to use based on the percentage of translucency used.

  • 12/27/2006

The sprite file format was changing during this period to allow sprites to have extra data for the color cycler support that was planned.

  • 12/28/2006

A level created by StephenUK was used in place of Chemical Plant Zone. Paralax scrolling abilities were enhanced and shown off in the new level. The stage switching mechanism was still being worked on and could be used using the 1, 2, and 3 keys.

  • 01/01/2007

This is a DOS build of the engine. Paralax scrolling enhancements from the previous Windows build are not present, but everything else is the same.

  • 01/10/2007

This version introduced the build-in level editor. It only had the ability to change tiles at this point. Zooming support was also added and worked by using the Page Up and Page Down keys on the keyboard.

  • 04/01/2007

Various color modes were added. In addition to the standard 8-bit color mode, 15-bit and 16-bit modes were now supported. The drawing code had to be extended to work with these new modes. This version also included a DOS build, but it was limited to 8-bit color. Also, a level switching mechanism was added which worked by using the 7, 8, and 9 keys on the keyboard. The stage switching mechanism was finally fixed to work correctly. A menu was added to the engine and could be accessed by using the M key.

  • 04/03/2007

This was a DOS build. The executeable includes some minor changes, but none that are apparent when running the program.

  • 04/25/2007

This was an attempt to add level rotation support. It never worked right, resulting in scrambled graphics. The engine was left untouched after this for nearly a year.

  • 03/09/2008

The player code from Sonic 2 was being ported to C for the engine at this point. This version had only a partial implementation of the player code. There was no collision detection of any kind. The left and right arrow keys made the player move, and the Page Up and Page Down keys changed the slope. The internal level editor was disabled.

  • 06/07/2008

Collision detection was added at this point, but this build required the spacebar to be held in order to run it.

  • 06/08/2008

Jumping and rolling abilities were added to the engine. In addition, a temporary solution to path swapping was added by using the Home and End keys.

  • 06/10/2008

Rings could be collected at this point. Path swapper objects were added to the engine, but they did not work for loop-de-loops yet. The ability to look up and down was added.

  • 06/21/2008

YM2612 and PSG emulation was added, along with GYM file support. Path swapper objects now worked with loop-de-loops. Sprite animations were no longer being controlled by internal code, but instead being controlled directly by the PSF files. Frame skip support was added and could be controlled using the Page Up and Page Down keys. Demo playback support was also added to the engine and could be used using the spacebar.

  • 06/27/2008

The player was given sprites and animations. The camera centering style was made more like that of the original Sonic games.

  • 07/26/2008

The BLAST Programming Interface was introduce in this build. Some objects from the Sonic 2 disassembly were compiled and tested with ProSonic to see how accurate the GPI was.

  • 07/31/2008

Multiple binary files could be loaded into the GPI at this point. The background was disabled in order to speed up the engine.

  • 08/04/2008

GPI support was improved enough to allow the player to walk across bridges and corkscrews.

  • 08/10/2008

The internal level editor was brought back and could be accessed using the spacebar. In addition, block map and collision editors became part of the engine. Collision editor didn't yet allow changing the collision, but it did display collision. PZF file switching was now done using the F1 key.

  • 08/20/2008

Title card card support was added. The collision editor was finished and now allowed changing the collision and slope data. The S key on the keyboard allowed the player to roam freely around the level as was possible in the original Sonic games. This version of the engine was released to the public two days later.

  • 08/30/2008

The background was enabled again. Several bugs were fixed that caused the previous builds to crash often.

  • 09/02/2008

The drawing code was completely rewritten for the play area, effectively speeding up gameplay and allowing the player to be in front or behind blocks.

  • 09/12/2008

Split-screen support was added for two player mode. The background was disabled to help speed up gameplay more.

  • 09/16/2008

Four different executeables were created for this build. Each one had a different number of players, demonstrating advanced split-screen capabilities that allowed up to four players to be used at once.

  • 01/18/2009

This build is the same as the 09/16/2008 build, except only one executeable is included, and error detection code was added for the engine's initialization routines.

  • 02/02/2009

The sound system was improved with several new features. Support for uncompressed VGM files and 16-bit stereo WAV files was added. At this point, only the ring sound played. Keys 1 and 2 on the keyboard could be used to change the music. The compressor was also implemented and could be tweaked on the menu.

  • 02/07/2009

Stereo flipping was added for WAV files to make the ring sound act as it does in the original Sonic games. Key 3, in addition to 1 and 2, could also be used to change the music at this point. The compressor was automated by the engine by this point using "smart mixing."

  • 02/15/2009

Many new sound effects were added. Mono WAV file support was added. Music no longer played automatically. The engine at this point started in demo mode with the words "press enter" flashing. This build included two executeables, one which demonstrated the ability to double the size of the screen.

  • 02/22/2009

By this point, the player was given a choice of screen stretching settings and the number of players to use. The background drawing code was rewritten based on the play area drawing code to speed the engine up. The background was enabled again. The engine supported parallax scrolling, but was not used in the levels included in this build.

See also

  • Open Sonic: another 2D Sonic engine. Like ProSonic, the code is GPL-licensed; unlike ProSonic, the game includes functioning enemies.
  • Sonic Robo Blast 2 (SRB2): a 3D Sonic engine. As with ProSonic, the SRB2 code is released under an open-source license.

External links