Short version: Here’s an MIT-licensed open source C++ game framework that lets you write your game once and immediately have it run on Mac, Windows, Linux, iPhone, WebOS and Android 2.3. It packages together all the basic libraries you need to get started with writing a game, and makes mobile porting easy by abstracting away the incompatibilities between OpenGL, OpenGL ES 1.0, and OpenGL ES 2.0.
The project is hosted on Bitbucket, so you can download the source yourself by doing one of the following:
- hg clone https://bitbucket.org/runhello/jumpcore
- svn co https://bitbucket.org/runhello/jumpcore/trunk
- Visit the Bitbucket page and click “get source” in the upper right corner.
Here’s a little physics demo that comes with Jumpcore, shown running on PC, iPhone, and Android:
Long version: When I first started writing C++ games a few years ago, I quickly discovered that there was a lot of stuff that you really need in order to write a game but which SDL+OpenGL don’t provide out of the box– things like text display, or build scripts for a crossplatform binary. So once I’d actually finished my game, I decided to package up the basic skeleton of my game into the thing I wished had existed when I started coding games– a package to serve as a bridge between “there exist cross-platform game libraries in the world” and “I can actually sit down and create a game in C++”. Once I’d put this package together, I found it useful myself for rapidly prototyping new game ideas. I released this a year or so ago as “Jumpcore”, with support for Mac, Windows and Linux; what I can announce today is a new version that adds support for mobile platforms (iPhone and Android). I’ve also set up a project on BitBucket; what I would like is if this could grow into something like a free and open-source version of Airplay SDK, or a stripped-down Unity.
Jumpcore is minimal; it tries to set things up for you and then get out of the way, allowing you to develop your own “engine” as you see fit. Most of the functionality is provided by a selection of open source libraries I’ve bundled in. Jumpcore comes with:
- SDL and GLee for event and window handling (on desktop platforms)
- Chipmunk version 5.3.4 (2D physics engine)
- A modified FTGL ES (freetype text display library) with OpenGL ES 2.0 support
- LodePNG, and a simple texture loader based on LodePNG
- A generator and loader for texture atlases based on a script by Retro Affect
- Pthreads for win32
Included code unique to Jumpcore includes:
- A simple GUI interface library (based on Chipmunk spatial hashes)
- Event wrappers unifying SDL mouse events with iPhone and Android touch events
- Wrappers for getting the paths of “internal” files
- A set of OpenGL wrappers that abstract away the differences between OpenGL, OpenGL ES 1.0, and OpenGL ES 2.0, meaning you can write your OpenGL code on mobile platforms the same way you write it on desktop platforms.
Developing with Jumpcore basically just means implementing a few simple callbacks. You can find quick instructions and links documenting all the functions in the included libraries at the Getting Started page on the BitBucket wiki.
Jumpcore uses GCC on all platforms, however you will need a different version of GCC (XCode, mingw, etc) to compile each of the different targets. You can compile all five targets on one machine as long as that one machine is a Macintosh (Linux and Windows users may need to find a mac before they can compile for Mac and iPhone). You can find detailed build instructions at the How to Build page on the BitBucket wiki.
Caveats and future development
Jumpcore is a work in progress; as I mentioned this is the base I use for starting new projects, so I should be improving it as my main projects continue. For a list of known gotchas and things yet to be done, please see the TODO page, again on the BitBucket wiki. Note: Some of the limitations in this initial release of Jumpcore 2 are quite serious, particularly on the Android version, so you should probably read this page.
If you have problems compiling this or getting it to work, please do let me know. Thanks!