hikari's blog

A little story about technology, games, me, and… ridiculous passion projects (touchHLE announcement)

The following is a lightly-edited copy of the (equivalent) Twitter and fediverse threads I posted late on 2023-02-02. I was in a bit of rush to get those written and posted, because they were the final step of the release process, so they contained a number of small errors that have been fixed in this version. Also, in the time since they were posted, I had the incredible fortune (thanks a ton, Bob!) to speak to one of the developers of the demo and game mentioned below, so I'm now able to correct the history of it.

Let me tell you a little story about technology, games, me, and… ridiculous passion projects.

Early in 2008, Apple were about to release the long-awaited iPhone SDK. For the first time, Apple would give third-party developers the tools to write native apps for the iPhone. Prior to the launch event, Apple gave a few third-party devs early access to the SDK, to see what they could make in a few weeks. One of those devs was SEGA (or more precisely Other Ocean Interactive, contracted by SEGA), who had decided to port Super Monkey Ball from the Nintendo DS:

Amazing demo, right? Despite being based on code from the DS game, it was on a completely different planet on every technical level. A few weeks later, they'd made a finished game:

It was a launch title for the iPhone App Store!

Sometime in late 2008, I saw that game (…and other Apple marketing…), and became convinced that iPhone OS apps were the future of gaming. The difference from the DS was just… night and day. I wanted to play games like that, with smooth high-res graphics and tilt controls! I was 12 or 13 when all this was happening. In early 2009 I was lucky enough to be able to buy an iPod touch (2nd generation), and of course, Super Monkey Ball was one of the first things I downloaded. It was fantastic! The music on the first levels stuck with me especially.

Eventually, of course, the iPhone would prove that it was not the future of gaming. Over a period of several years, the marketplace evolved into a swamp of cynical cash-grabs… but I remembered those gems. Gems like Super Monkey Ball! Many years later, I got a brand-new iPhone and could re-download it.

But then in 2017, Apple released iOS 11: the first iOS version not to support 32-bit apps. All those ancient games became unplayable on modern hardware. Nobody could buy them any more, either. Locked away with DRM, they might die with the devices that could still run them.

Anyway, fast forward to sometime last year in 2021 (oops), when I happened to see a trailer for a new Super Monkey Ball game. It had a timeline of all the games in it! Except… oh, the only Super Monkey Ball game I’d played… wasn’t there. That made me upset. Weird mobile game or not, it was what “Super Monkey Ball” meant to me.

Anyway, I wanted to play it again. But of course, I couldn’t, not without an ancient device, which I didn’t have. And I thought, oh no, I love this game, but nobody coming after me will have the chance to.

…So uh, people familiar with this kind of game preservation problem may be familiar with emulation. But, to my knowledge, there was no way to emulate old iOS games.

…I wondered, well, how hard could it be?

…I opened Ghidra and imported the Super Monkey Ball binary………

…and it looked… doable… if at some point in the future I would have a lot of free time, and energy, and Determination.

oh, and my friend happened to have written a dynamic recompiler for ARM binaries which had a super simple API…
…but surely I wouldn’t do this, right.

well. i’ve recently had a lot more free time than usual (become unemployed), and…
… I should have taken more breaks and paced myself, but …


Super Monkey Ball © and ® SEGA. iPhone OS may be a trademark of Apple Inc in the United States and other countries. This project is not affiliated with or endorsed by SEGA or Apple Inc in any way. Only use touchHLE to emulate software you legally own.

yeah. enjoy! also, a huge thanks to my friends cassie, erin, puck and mary for help at various points. [there's further thanks to various people on the website.]

The following paragraphs weren't in the original thread.

The response to this release has been amazing, I'm very grateful. Seeing everyone's responses has brought tremendous joy to me, and I share everyone's excitement for the future. I'm especially glad to see so many Super Monkey Ball fans (of the series or of that game) being excited at this title finally getting dragged out of obscurity!

Also, honestly, I still can't quite believe that the first public release of the emulator ended up working so well: it's perfectly stable even during an eight-hour Twitch stream, and runs the game near-flawlessly so far as anyone can tell. Nobody's gotten it to crash within supported conditions. I actually hadn't played through the entire game at the point of release, so I was scared someone else would have the misfortune of finding out it's broken on the later levels. That this didn't happen is surely mostly luck, but I think it also shows how Rust makes it easy to write robust software, even for something as terrifyingly complex as an emulator! Without having done it, I wouldn't believe it, but I think I only hit a true segfault once during development, and that was a null-pointer dereference in unsafe code.

For the moment, I really need to take a break for a while, at least for a few days. I'm definitely going to try to get more games working after that, though! With that said, please be patient and don't expect too much. This is only the beginning of a long and hard journey, and I'm a single person who does have a life beyond this project. Of course, contributions are welcome!

Oh, and yes, the website is made with period-appropriate technology. Actually a bit too period-appropriate, considering it's apparently broken in Chrome-based browsers on Android… (Sorry, I am trying to fix it!) In any case, I think creating it by fiddling around in an OS X Mountain Lion VM for the best part of a day was definitely worth it. Sometimes things are worth doing because they are cute, not because they're practical. ^^