2011-06-08

EarthShakerDS and EarthShakerOSX Releases

EarthShakerDS has had about half a dozen releases since the last blog post as I tried to get as much done as possible before the GBATemp Homebrew Bounty deadline. This version has a lot of changes, most of which you won’t notice:

One of the big changes is the inclusion of the “poke” functionality. This allows you to poke an adjacent block using the A, B, X and Y buttons without moving into that block. It’s essential for getting anywhere at all on level 9. Unfortunately, poking has nothing to do with pushing values into RAM via a call to the BASIC POKE function to enable cheats. Authenticity has to stop somewhere.

The other big change is the addition of a level editor. This has been a much bigger job than I’d hoped as I’ve had to write a simple GUI system - stylus-driven buttons, event handlers, etc - to build the interface. Why do that, you ask, when I’ve got a perfectly good GUI system already written? Well, it seems that the M3i Zero at least can’t cope with homebrew ROMs bigger than 3MB. EarthShakerDS includes a few large WAV files that bulk the ROM out significantly. If I include Woopsi I’d make the game unplayable on at least one popular flash cart. When your target audience is people who a) had a Spectrum, b) played EarthShaker on it, c) own a DS, d) own a flash cart, e) are nostalgic enough to want to play EarthShaker still and f) want to play a remake instead of a perfect emulation offered by any of the Spectrum emulators for a DS, you don’t want to exclude members of that tiny audience unless you absolutely have to.

At present the level editor only allows a single level to be edited, saved, reloaded and tested. Supporting multiple levels requires me to create a keyboard and file lister, and haven’t I done all of this before? Gnnk. Level data is saved to “/data/EarthShakerDS”. The folder is created automatically if it doesn’t exist.

I followed the patterns established in Woopsi when coding EarthShakerDS to ensure that it was as portable as possible. This approach allowed me to get an SDL-based build running on OSX very easily:

The OSX build requires OSX 10.6 as I’ve built it with LLVM, Clang, LLDB and Xcode 4, but it should be trivial to get it working on 10.4 simply by switching back to GCC etc. It should also be very simple to get it working under Linux, but as I don’t have a Linux install at present I’m not in a position to make one. There’s one OSX-specific API call used in the LevelIO class to determine the location of the user’s data folder that would need to be altered, but otherwise it’s all platform-independent with a few POSIX I/O calls.

Here’s a screengrab from the OSX build: