Skip to content

Helping Out

reassembler edited this page Mar 24, 2021 · 28 revisions

Contacting Me

I would be delighted to help and support you with attempts to port Cannonball to another platform.
Please feel free to use the Discussions area to post anything on-topic.

Git Branches

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.

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 grueling 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 extendable (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)
  • 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.

Coding Standards

  • 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. It is also my intention to remove the DirectX haptic code at some point. This dates from before SDL supported haptics.