Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
I would be delighted to help and support you with attempts to port Cannonball to another platform.
I can be e-mailed here:
The master branch contains the latest released version of Cannonball.
Older versions are tagged, in case you want to revert to an older version of the codebase.
The develop branch contains work in progress. It may not be stable, it may not run, it may not compile.
I review all code before including it in the main codebase. You can send me code as a git patch, and I will integrate as necessary. If you have a better proposal, let's discuss.
About The Codebase
The original OutRun code has been ported from the original assembly. I spent over three years reverse engineering, commenting and finally porting the codebase. You can read the gruelling history on the blog. That codebase, like many games of its era, is not particularly clean or well structured.
I want Cannonball to be the definite version of OutRun. When creating Cannonball, my focus was on accuracy and ensuring the engine was a true representation of the original game. As such, the ported C++ code isn't particularly well structured or object orientated either. This is something I hope to resolve over time (albeit slowly).
Having said that, it is both extendible (as evidenced by the new features) and portable. And these were two of my initial goals.
So what is actually ported?
- The Master CPU Code. (68000 Assembler)
Currently missing is the service mode and some code related to coin inputs.
- The Road CPU Code. (68000 Assembler)
- The Sound CPU Code. (Z80 Assembler)
If you're simply porting Cannonball, you shouldn't need any knowledge of the original codebase in the engine subdirectory. It can hopefully act as a black box that simply works.
Video and Audio hardware is currently emulated with modified and extended code derived from MAME.
Graphics, music, samples, large lookup tables and level data are read from the original ROM files. These are not included with Cannonball and must be provided by the end user as dictated by the license.
Please ensure that any new code is formatted with 4 space characters as the indent.
Where possible, I like to avoid #ifdef SOME_PLATFORM statements in the code. This soon gets unwieldy. Instead, I would rather encapsulate platform specific code in unique classes. Hopefully, if your target platform supports SDL, the changes should be minimal.