Sup gamers, Stubbsidaisy paroled me from his basement dungeon for getting enough page clicks and one affiliate link purchase (I made this up, and I have no idea how the system works.) So I am now chiming in hot from the can at ye olde office, scrolling through Facebook and noticing the sheer amount of people who DON’T know The Legend of Zelda: Ocarina (Ahk-are-ee-nah, not Ohk-are-ee-nah) of Time was decompiled and PORTED by the independent group, Ship of Harkinan. Like wtf, isnt the 2020s great?!? … Eh… Anyways, I wanted to take a second to show you guys how to get this one up and running on your Android system of choice, because helping makes me feel good. So take a break from listing your Steam Decks on marketplace and pull out your favorite Android handheld for this dive.

This one is going to get rambly, so feel free to scroll down to the bold text where the fun begins. Just remember that life will only pass you by the faster you run through it, might as well stop and read an article made by a shitposter. Let’s talk about Ship of Harkinan.

Isn’t She a Beaut?

You might be wondering through the infinite power of emulation why anyone in their right mind would want to spend the extra time setting up one of the greatest games of all time to run natively on the best handheld operating system of all time. Don’t ask me to elaborate on that last point, but feel free to blast off in the comments from your handheld OS of choice and tell me why it’s better (if your battery life can even support it). I will read it, trust me. Getting back on topic, this method is actually NOT emulation, but uses de-compilation and… re-compilation? It brings you a native port of THE GAME (you lost) free of any middleman software acting like an N64 bubkis.  This is pretty awesome because now we don’t have to worry about tweaking settings every 4 seconds whenever there’s a frame stutter due to emulation error or dealing with that butt-ugly 20 frames per second. You might even be like me and detect the near 250 milliseconds of lag added on top of the console input lag when using proper frame buffer emulation… I’ve argued with people on Reddit for this and MIGHT have gaslit one of the Mupen devs. It’s there and it sucks.

Honestly, I am not a fan of N64 emulation. It’s bad and it broke up with my sister on prom night. It’s so bad that Nintendo can’t even get it right no matter how many times they try to sell it to you (sometimes in the same console generation). So what we have here is a version of Ocarina of Time that runs natively on whatever stupid android device you’re using in whatever stupid aspect ratio your handheld comes in at pretty much whatever frame rate your console will allow it potentially, and whatever resolution you put it at, with zero added frames of input lag. Want it at GLORIOUS 4K AND 120HZ? Good. Make Nintendo wish they had the R&D talents of GitHub nerds who clearly like their IPs more than they do. ADDITIONALLY we have more enhancements painstakingly crafted like auto save, a goddamn free camera, Dpad navigation, faster text, restoration from patched copies, a randomizer, arbitrary difficulty options, and… stuff. Don’t thank God, for the people behind this project act in defiance of them. Praise be to open-source programming and all the hours labored to make your lives better and lazier. But yeah, this port really wets my wallabies.

Alright, now it’s time to get serious. Here’s my serious face.

Artists interpretation of my serious face, by Matt B., Crayon on Notebook Paper (2023)

Let’s get you on this shit.


If you skipped to this part, this is where the tutorial actually starts. Congrats, but your life is slightly worse because you didn’t read the previous paragraphs.

Thanks to SOH Dev Waterdish for condensing what was 4 or so apks to one master file that will work on just about every version of Android that’s relevant. They aren’t currently accepting donations, but here’s the main website link:

What You need: Any Android device with built in or attached controllers that is Android 9+, this guide, and a totally legal, specific ROM named ZELOOTD.z64

Step one: If you attempted this before and screwed it up, delete ALL traces of the app in the Android -> Data directory EXCEPT the rom file. This will be called com.dishii.soh or something similar.

This is important because:

Actually Step One:

  • Download the (Only) ‘Soh.apk‘ file from here: Please don’t make me explain what an .APK file is.
  • To update the app, follow this same step to redownload the newest APK and open it. There you go.
  • Maybe wait to install until everything you need is lined up, like…


Step Two: Wait did you set up your ZELOOTD.z64 rom? No? Well… You’ll need that since that’s the actual GAME (sorry). This is a specific, syntax sensitive version of the rom that SOH recognizes. It’s not just any regular Oot rom you probably stole from your Grandma’s favorite video game contraband website, or perhaps it is? (Thanks Andy for the tip!) Check this site here to see if your ROM is compatible: { }.the recommended version however is literally a dump of “Ocarina of Time Debug PAL GC” or the equivalent, but with master quest.

  • So yeah, just dump your PAL version of the GameCube port to a .z64 file and name it ” ZELOOTD.z64″ I’ll wait… … …


  • Try Reddit for advice.
  • Or use your existing ROM and name it ZELOOTD.z64

No, I won’t send you Zelda ROMs, and neither will your Grandma.

  • Put the rom file in a fancy and easy to find directory on your Android device. Remember, NO ZIP ARCHIVES.


Step Three, Return of the APK 

  • Install and open your soh.apk file and say “Yes” to to all the things: Yes to Storage permissions, YES to generating an OTR, YES to finding your ROM
  • Find your ROM. the extraction process will take a minute or two, so you’ll be sitting on black screen for a bit. This is normal. You are normal.
  • Then you’ll want to select NO when prompted to ask for another ROM. After this, THE GAME (okay last time) will start to play.
  • Since you somehow messed it up, follow this link and read the entire thing:
  • Additionally, the original GitHub has a tutorial that’s probably better but isn’t as fun:

Your Directory should look like this once everything is done

I know you’re struggling to hold back your tears as you gaze upon this forbidden but so-so sweet marvel, so take a second and appreciate its glory while I go make a snack.

… …

.. .. … Well I spilled milk everywhere and we are out of cereal.

Okay we aren’t done yet, so I’ll go over a very basic setup guide to get you rolling and stuff.
Step One, Basic Navigation
  • Your Select or (-) equivalent should by default bring up the menu. Thats it, that’s the step.
Step Two, UI Scaling Headache
  • Newer versions of this app have UI scaling options under Settings

    You should mess with this first. Just use your touch screen and do your best to select which UI size best suits you. On my Retroid Pocket 3+, I used X-LARGE.

  • Touch to Settings -> Graphics -> ImGuii Menu Scale **Note, this option kind of sucks, but it’s being worked on** please also note that UI scaling alters the size of the scroll on the right. This will be a pain so check Waterdish’s github for updates:

Do this

Step Three, There are loads of config. options here, so I’ll point you to the necessary ones needed to properly enjoy this and a few that I’d recommend using.

  • Under Settings
    • Audio, default is default
    • Controller
      • Check the default controller mapping and do your best version of making it not suck. Should be self-explanatory.
      • Additional options are hella lit. Here you have various tweaks to make the game more convenient to play, like alt ocarina controls, your free camera on the right stick, mappable dpad buttons, and even movements speeds. Pay attention so that some settings don’t f*** up your other ones.

My personal mapping

    • Graphics
      • Along with the UI scaling, feel free to mess with the internal resolution modifier and framerate. Live that glorious 60 fps life (I set mine to 30 for battery life). Other settings I would just leave as default.
  • Under Enhancements
    • There is a rabbit hole of configuration options to alter your game. Honestly, I just set the preset to “Vanilla Plus”, but “Enhanced” might be the way to go. Here you can add multiple time savers, hacks, restore cut content, mess with your tunic color, etc. It’s pretty self-explanatory if you dig, but not necessary to just pick up and play. Except:
    • IMPORTANT. In Enhancements -> Graphics, go to “Fix Vanishing Paths” and do yourself a favor and set it to “No Vanish”. I don’t know why this isn’t on by default and it’s absolutely bonkers.

I Just use Vanilla Plus

  • Under Cheats
    • It’s cheats. you know the drill.
  • Under Randomiser
  • I don’t personally use this, but settings for it are here. Have fun, I think.

Step Four,

  • Try not to get TOO lost in the sauce on the tweaking. Or do exactly that. It’s fun, but not required. Honestly after tweaking your frame rate and fixing vanishing paths, you’re pretty much good to go.

Wow that was fun. Anyways, have you tried playing some bassy, rave music over your phone speaker and into your mouth? Use your mouth hole as a sound hole? The whole hole? Rave in your mouth? Just bring it up to your lips and move your tongue to go “wah-wah”. Then idk maybe try motioning your mouth to say your name and something creepy to your partner. Idk, just do it. It’s fun. Post an unsolicited video or something.

What did you think of this article? Let us know in the comments below, and chat with us in our Discord!

This page may contain affiliate links, by purchasing something through a link, Retro Handhelds may earn a small commission on the sale at no additional cost to you.