Earth Shaker No More

Unfortunately, my Earth Shaker remakes for the Nintendo DS and Mac are no longer available. I received a nastygram from the [“balding hash”-ed] company who demanded that I take it down because it will cause them “financial damages”.

Quite why it took them 22 years to find Earth Shaker objectionable, I’m not sure. Possibly because it’s more fun to threaten indie developers now than it was to try and take on Future Publishing back in 1990 when they were still at the top of their game. If I tried to be more understanding I’d admit that the audience for retro games is vanishingly small, but then I’d have to point out to myself that, given that the audience is so small, one would expect the company to try to ingratiate itself with it rather than alienate it.


SDL Mixer Weirdness

The SDL mixer won’t play samples at 32KHz correctly. It plays them at half speed. My guess is that it can only handle sounds that are 44050Hz, 22025Hz, etc, and anything else it plays at one of those frequencies. I spotted this whilst making the OSX port of Earth Shaker but couldn’t find any reference to it online, so I thought I’d make a note for myself here.


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: