Schnapple’s Adventures with id Tech

In 2018, I took a swing at fixing the source code for the iOS port of id Software’s Wolfenstein 3-D from 2009, which had stopped working once iOS 11 cut off support for apps which had not been recompiled for 64-bit. It was more challenging than I anticipated but I got it working again. After that, I took a look at the iOS port of DOOM, also from 2009 and also no longer working, and after some time and with help from some existing work done by developers I had that working again too. Along the way I found someone who had DOOM working on tvOS for Apple TV so using that as a guide I got my ports of Wolfenstein 3-D and DOOM working on tvOS as well.

After that I started looking at other id Software titles and over time I have been able to get iOS and tvOS ports going of QuakeQuake II, Quake III: ArenaReturn to Castle WolfensteinDOOM IIFinal DOOM, and DOOM 3 going as well. In almost every case I was able to incorporate the work of others, and pretty much none of the games were the same thing twice. Every game posed a unique challenge, which was part of the fun.

My goal with this page is to have a central hub of all my efforts with id Tech, which is the current and retronymed named for id Software’s game engines. I have now ported at least one example of every id Tech engine that has source code available, the latest and most recent of which is id Tech 4. Subsequent engines have not been open sourced.

LEGAL NOTICE: This website is not affiliated with id Software, the logos used are not official id Software logos, and these source ports are not official id Software products. All source code is licensed under the GPL and no copyrighted game data is included. 

Wolfenstein 3-D
source
articles:
iOS | tvOS
videos:
iOS | tvOS
 
This is the first game id released on iOS and the first game I tried to fix. Technically there’s no completely official designation of “id Tech” numbers prior to 3 but the way I count it backwards, Wolfenstein 3-D would be id Tech 0.

I did Wolfenstein 3-D and DOOM together for iOS and then later added the tvOS ports, which is why there’s two articles for this one and DOOM.


DOOM
source
articles:
iOS | tvOS
videos:
iOS | tvOS
 

DOOM II
source | article
 

Final DOOM
source | article
 
As stated above, I did DOOM alongside Wolfenstein 3-D so the articles are the same.

Initially, DOOM required a file that was unavailable outside of the app’s distribution (meaning you had to find it yourself, possibly through illicit means) so I constructed a “clean room” version with free fonts and assets. While I was at it, I added targets for DOOM II and Final DOOM, complete with icons and assets. The source code is the same for all three, it’s just through usage of “targets” that you can compile three different apps.

I didn’t do videos of DOOM II and Final DOOM because other than level content they’re not substantially different.


Quake
source | article
videos:
iOS | tvOS
 

Quake II
source | article
videos:
iOS | tvOS
 
Clustering these two together under “id Tech 2” is a judgement call, but one Wikipedia seems to agree with. Although there were substantial differences between the engines for Quake and Quake II, both in terms of code and also anecdotally, Quake II‘s engine was an evolution of Quake‘s, and not the rewrite that Quake III: Arena would entail.

In the case of Quake, I had found a source port that used Google Cardboard for a VR effect. Using that as my base I made a version that didn’t use Cardboard.

Work on Quake II‘s port started right after but I got a lead on an iOS port of Quake III: Arena so I did the id Tech 3 games first. Most of the Quake II work was done from scratch and not based on an existing port, but I did reference an Android port of the source I went with in order to get over some graphics hurdles.

In addition to the base games, I have support for the two expansion packs each game received. For technical reasons I go into detail in the articles, the expansion packs for Quake are selectable within the main game’s app, but the expansions for Quake II are separate apps entirely.


Quake III: Arena
source | article
videos:
iOS | tvOS
 

Return to Castle
Wolfenstein

source | article
videos:
iOS | tvOS
 
As stated above, I got a lead on an older Quake III: Arena port so I went down that road before finishing Quake II. Multiplayer not only works but I added a server browser as well, based off of one I found for the Mac written in Swift.

The port was based on ioquake3, so on a lark I looked up and discovered there was a separate project called iortcw which is ioquake3 but with the Return to Castle Wolfenstein changes so I made an app version of that game too. As far as I can tell this is the first time one of these games had not been ported already in some format.

In keeping with the original source’s pattern, I also ported a second version of the app for the multiplayer which, like Quake III: Arena‘s, works and also has a server browser.


DOOM 3
source | article
video: iOS
 
 
The most recent, and possibly the craziest one, DOOM 3 has also never been ported to the iPhone before, as near as I can tell, and also had a bizarrely quick turnaround due to some strategic choices and luck. I used SDL in the Quake II port and was able to re-use that as a base for DOOM 3, but the OpenGL code proved difficult to bridge until I found a port someone made for WebAssembly that had the Open GL ES rewrite I needed. The result was a game with an amazingly quick turnaround time.

I also have a separate solution for the expansion pack.

I only have video of the iOS version because the tvOS version has performance issues to work out.

The source for id Tech 4 is the last engine that got released – id Tech 5 powered Rage, id Tech 6 powered DOOM (2016), and id Tech 7 is powering the forthcoming DOOM Eternal.

Frequently Asked Questions

Unlike most FAQs, this one really has questions I frequently get asked.

Are these ports on the App Store?

No, they are not on the App Store. I don’t own the rights to any of these games and so I can’t put them on the App Store.

Technically, Wolfenstein 3-D and DOOM are still on the App Store but they don’t work on any devices that have been updated to iOS 11 (anything more recent than the iPhone 5).

What do I need to do to get these on my device?

It involves owning a Mac, a copy of Xcode, an Apple Developer account (a free one should suffice) and a copy of the game (for the data files). You clone the repository, open it in Xcode, add references to your data files, then build and push to your device.

At some point in the future I plan to make a more elaborate article and/or video explaining how to do it.

That sounds complicated/I don’t own a Mac. Can you build it and send it to me?

No, unfortunately. The iPhone (and iPad and Apple TV) have to run signed code, either from your Mac or from the App Store. If I built the app and sent it to you, you wouldn’t be able to run it because it wouldn’t be signed for your device. Plus you’d need to add the data files yourself.

Every so often people tell me they’ve discovered some way to get unsigned code to run on their iPhone but I don’t know anything about that or if it’s even true/possible and I don’t want to get into the practice of supplying unsigned versions of the code, sorry.

I usually tell people: if you don’t have a Mac, go make friends with someone who has one. Preferably a developer.

Do I need to have a jailbroken device?

A device being jailbroken doesn’t enter the equation. Jailbreaking is the practice of removing the signed code check from the iPhone, but what I’ve provided here is source code so you compile it yourself.

Will id Software ever update Wolfenstein 3-D or DOOM on the App Store?

I don’t know. Maybe ask them. The nature of open source software means they can use my updates to the code however they like. I do think it’s much more likely that they would update their existing games instead of adding new games like Quake or DOOM 3, especially since the latter of those two is incongruent with the direction they’re taking the franchise.

I got the app compiled but when I run it, it crashes as soon as I choose the difficulty or a level

The opening menus of the game are standard iOS CocoaTouch screens, in most of the ports I’ve done it doesn’t start the actual game engine part until you try and start a game. Probably 90% or more of the time it’s because the data files didn’t get copied over. Check to make sure the blue folder references are there and point to folders on your hard drive.

Also, there’s an issue with some games from GOG where they have files in all uppercase (i.e., PAK0.PAK) whereas they need to be in lowercase (i.e., pak0.pak) for the game to see them because iOS is case sensitive. I can probably address this through code but for now the quick workaround is to rename the file to use all lowercase.

Will you ever port (game X)?

Maybe. I’ve got some ideas on what I want to mess with next (one of which I’m messing with right now) but I prefer to keep things under wraps.

Note that a game has to have available source code, preferably under some open source license so that it’s clear what the rights are.

Other factors that help are whether or not there are mature source ports (there’s one game I’d like to work with but it hasn’t been brought up to speed on 64-bit yet), whether or not it uses SDL, and how difficult something like the OpenGL to OpenGL ES transformation would be.

Do you work for a game developer?

Nope. Just a mobile developer for a regular old boring business firm. This is just a hobby so far.

 

Any other questions? Just email me at tomkidd@gmail.com.

Categories: