Thread with 60 posts
jump to expanded postLet 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, 3rd-party developers would be able 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 possibly a subcontractor of SEGA), who decided to port Super Monkey Ball from the Nintendo DS:
Amazing demo, right? Despite being based originally 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: https://youtube.com/watch?v=6hgnrOW5SkA
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 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. 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 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, 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, and…
… I should have taken more breaks and paced myself, but …
touchhle.org
yeah. enjoy!
also, a huge thanks to my friends cassie, erin, puck and mary for help at various points.
https://youtube.com/watch?v=Blz7qJrZ-s8 (video of gameplay — sorry, my instance doesn’t support direct video uploads yet ^^;)
ugh sorry, https://touchhle.org
I’m streaming the game on twitch right now btw! https://twitch.tv/hikari_no_yume
so uhh one of the original devs of the demo came on my stream and I just learned a ton about the history of that project??? holy shit. thank you…
anyway I’m still streaming, come watch!
still streaming! https://twitch.tv/hikari_no_yume
I collected, cleaned up and corrected the main posts in this thread, and compiled them into a blog post:
Please link to that instead of this thread from this point onwards, especially as I might lock this account for a while (I already locked my Twitter… I just need a break.)
@hikari This is incredible!
I found your project while looking for a way to play the game “Song Summoner” that was a big part of my childhood. I looked into iPod Classic emulation, then loaded the iOS 3 version up in Ghidra with the thought of maybe reimplementing the game. Then I stumbled onto touchHLE and was amazed by the technology and how quickly you got it to work! Even just seeing the first screen of Song Summoners pop up before the emulator crashed got me excited :)
Great work!
@ChH1999 thank you!!
wow, an entire RPG on an iPod Classic… that must have been a fun time.
given it’s ported from that and it’s for iOS 3, getting it running in touchHLE is probably a realistic prospect!
@hikari yeah, that was my first ever RPG and I keep looking for ways to make it run again every 6 months or so 😅
That’s really exciting! I’m truly amazed by what you’ve accomplished. Once I finish my thesis in a few months I’ll hopefully have some time to look into the code and make some contributions myself 😊
@hikari idk what I was expecting but the skin of the website made me laugh
congratulations in any case!
@0xabad1dea I made it using Apple software so ancient I had to use a VM for it :3
@hikari on my android phone (chrome), clicking the buttons on the website doesn't seem to do anything unless I render the page in desktop mode.
@curioustommy oh, it works in desktop? that’s very interesting, maybe that’s a clue about what the issue is
@hikari I'm not able to activate any of the menu links on my phone browser (Chrome on Android) 😭
@hikari I have this exact problem with my favorite game Warfare Incorporated. It's basically a simplified StarCraft. I've played it since the PalmOS days and the developer ported it to iOS but it's not available for download anymore and unplayable.
@hikari Oh wow, this is very cool!
@hikari@social.noyu.me this is so cool!! did you have to reimplement much of UIKit etc. or was there a smaller subset you could rely on?
@protosphere thank you!! the UIKit implementation is one of the most hacky and minimal ones: games like Monkey Ball (it’s hardly unique in this) basically just use a single UIView for everything (they draw everything with OpenGL), so I can get away with a ton of shortcuts. I’m kind of scared of how much work would be needed to support like, normal apps, which probably make much heavier use of UIKit
@protosphere the other frameworks are less hacky. I’ve only implementated stuff Super Monkey Ball needs, in general, but it’s not single-purpose code, I can definitely get more apps working with some effort
@hikari@social.noyu.me ah cool, that’s pretty much what I was imagining! Normal apps (or even more modern games) would definitely be a bit of a nightmare with how many system ObjC frameworks they use
@root I’m happy to know I’m not the only one!! I know tons of people must have played this game but I don’t know how many people care about it now…
@root if I manage to sleep tonight I’m going to stream myself playing through the full game tomorrow in this, at HD resolution. I’m pretty excited about it
@Worms_Armageddon @root yeah that’s a big part of what motivates me. lots of early titles were never ported to Android. incidentally, Super Monkey Ball actually was ported to another OS, but that OS was Windows Phone (no idea what preservation on that platform looks like)
@Worms_Armageddon @root @hikari Yeah, Windows Phone was incredibly niche and it seems unlikely that any kind of preservation effort was made.
Thanks for the emulated iOS version by the way, that sounds awesome! Though now I’m curious to know if the Windows Phone version has any upgrade compared to the original iOS release…
@Coroice @root @Worms_Armageddon the menu screen looks a bit different from what I recall? I’ve only seen screenshots. I should try to dig up the store page for it.
if I can get my hands on the files somehow, I could try transplanting some of the level data into the iOS version. there’s only a point in that if it actually has new levels etc though, I don’t know if it did
@hikari @root @Worms_Armageddon I should probably ask my cousin if she still has her old Nokia Lumia. Just in case.
@hikari This rules, thank you for your efforts!
@hikari thinking about how awesome it would be to go back and play each iteration of Pocket God on this. Will have to find my backups and try it out later.
@ioslife it’s extremely unlikely that game actually works right now, but eventually, maybe.
@hikari great now I can throw my MacBook out of the window instead of my phone like I did in 2008 rage quitting Monkey Ball.
@hikari wow
@hikari @stroughtonsmith I knew I kept the .ipa of Tris for a reason!
@hikari I LOVE GAME PRESERVATION
@lucy hell yeah
@hikari currently cozy under a blanket playing Mario Party 6 on my Wii U with the gamepad as a screen and controller (im a Daisy main)
@lucy sounds like a comfy time!
@hikari true
@hikari oh hell yeah, didn't think something like this would have been possible! I'm very happy that this project exists!!
@hikari mobile platforms feel so weird. games earn the majority of revenue on them, but the platform holders never seem to be interested in supporting them as works or building communities around them
@rectus it’s a sad case study in the problems with capitalism, isn’t it? encouraging making profit is beneficial up to some point, but at the extreme, it creates literal or metaphorical toxic sludge
@hikari very true, although it feels like there is more to it. seems like apple got in at right time to restart it on a clean slate, without all the culture and expectations of console and pc platforms, and managed to redefine how games are allowed to be structured.
the extremely closed down platform and limited input options have a huge impact on what kind of games are viable to make, and what kind of communities can form around them. there is no natural way of players to meet unless the individual game developers make a huge effort to build meeting spaces for a community.
@hikari While I was looking at your source code, I find it really interesting that you implemented the Objective C classes in Rust!
Do you plan on writing a high level technical breakdown on how your application works?
@curioustommy I definitely would like to, it would be fun to talk about it, but there’s so many different moving parts in it that it’s a bit difficult to know where to start. I’m sure I’ll eventually find something I feel like writing about.
In the meantime, I can recommend checking out the source code and generating the documentation (cargo doc --workspace --no-deps
). Especially in the earlier part of the project I’ve tried to make the source code easily navigable from the documentation, and almost every non-framework module has some kind of explanatory comment.
@hikari Where can people find the .ipas for apps and games they have purchased in the past but don't have on their computer?
@EricLawrence hey, last I checked (might have been a bit too long ago :<) you still could redownload those with iTunes, though you need a fairly old version because they removed that feature a long while back.
also, uhh, the IPAs from iTunes are encrypted, which makes them useless for touchHLE until they’re decrypted, which can’t be done without a real device.
I am not at liberty to talk about the illegal ways to get IPAs.