From Sonic Retro
|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 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 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 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.
The following dates represent existing backups of the ProSonic engine. The descriptions reflect what changes to the engine make each version unique.
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.
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.
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.
This build introduces scripting functionality for objects. It's very buggy and causes the engine to become unstable and crash.
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.
This was another test build.
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.
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.
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.
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.
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.
Extra debug information was added in an attempt to study the physics and make them better.
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.
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.
This version had with several executeables, each demonstrating a unique aspect of the drawing code to show to the public.
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.
The sprite file format was changing during this period to allow sprites to have extra data for the color cycler support that was planned.
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.
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.
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.
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.
This was a DOS build. The executeable includes some minor changes, but none that are apparent when running the program.
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.
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.
Collision detection was added at this point, but this build required the spacebar to be held in order to run it.
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.
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.
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.
The player was given sprites and animations. The camera centering style was made more like that of the original Sonic games.
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.
Multiple binary files could be loaded into the GPI at this point. The background was disabled in order to speed up the engine.
GPI support was improved enough to allow the player to walk across bridges and corkscrews.
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.
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.
The background was enabled again. Several bugs were fixed that caused the previous builds to crash often.
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.
Split-screen support was added for two player mode. The background was disabled to help speed up gameplay more.
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.
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.
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.
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."
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.
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.
- 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.
- saxman's weblog
- Old version of ProSonic in .zip format
- Current source code in Mercurial format