* Define VB for fairy group spawning * Add skeleton of new files for fairy shuffle * Add option to enable/disable fairy shuffle * Add field to fairy entities to hold randomizer data * Expose the current grotto id, or find it if not shuffled This is necessary since, unlike chest or scrub grottos, fairy fountains, lacking any elements that would normally differ between grottos, often have identical respawn data. This change enables fairy shuffle to correctly identify which fairy fountain was entered so it could load the right checks. * Initialise fairy groups if detected * Randomize first set of fairies * Make randomized fairies collectible * VBify fairy healing customization * Add remaining grotto fairies * Add remaining fairy group spawns * Override bean sprouts spawning fairies * Define bean sprout fairy checks * Add HasItem and CanUse entries for magic beans. * Define logic for bean sprout fairies * Enabling looking up fairies by z coordinate * Add Temple of Time Gossip Stones Logic might look a little weird. While the Gossip Stones respond to Sun's Song, the scene transition takes priority, so the fairies aren't actually obtainable. Adult does not have day and night versions and is fully capable of acquiring the fairies with Sun's Song. Song of Time is similar, but rather than being dependant on age, it's dependant on the timesaver to switch ages anywhere with Song of Time. In this case, the fairies still spawn, but the age transition deletes them before giving the chance to collect them. While I could've chosen to ignore this and simply require the player to disable the enhancement before playing if it's their only option, I instead decided to accomodate the enhancement and require one of the other songs in order for the check to be in logic. * Disable quick age change around gossip stones to simplify logic * Add remaining gossip stone fairies * Finish gossip stone fairies * Add Desert Colossus Oasis * Restrict fairy type Somehow, it was previously possible for Navi to get detected as a randomized fairy and rendered as an item. I was not able to reproduce the behavior, but this should prevent it from happening again. * Add overworld special fairy spots * Add mini-dungeon fairy song spots * Add remaining dungeons except Shadow * Add Shadow Temple fairies * Add fairy check flags to the save editor * Filter fairy checks from check tracker * Add hints for fairy checks * get fairysanity as far as I can for now * fix a few obvious issues * now builds * try to convert FairyOnVanillaBehaviorHandler to vardic args * convert RegisterFairyCustomization to REGISTER_VB_SHOULD * fix some generation issues * remove the list of fairy locations * fix up logic * more logic changes for gossip stones * try silly thing for windows * more stupid * more dumb testing * more testing * small fixes * implement inside fence storms fairy * add inside fence storms fairy to logic * remove duplicate hints (stupid conflicts) * oops * Rewrite game interfacing code of fairy shuffle * Better function names --------- Co-authored-by: Angel Bulfone <mbulfone@gmail.com> Co-authored-by: aMannus <mannusmenting@gmail.com>
Website
Official Website: https://www.shipofharkinian.com/
Discord
Official Discord: https://discord.com/invite/shipofharkinian
If you're having any trouble after reading through this README, feel free to ask for help in the Support text channels. Please keep in mind that we do not condone piracy.
Quick Start
The Ship does not include any copyrighted assets. You are required to provide a supported copy of the game.
1. Verify your ROM dump
You can verify you have dumped a supported copy of the game by using the compatibility checker at https://ship.equipment/. If you'd prefer to manually validate your ROM dump, you can cross-reference its sha1 hash with the hashes here.
2. Download The Ship of Harkinian from Releases
3. Launch the Game!
Windows
- Extract the zip
- Launch
soh.exe
Linux
- Place your supported copy of the game in the same folder as the appimage.
- Execute
soh.appimage. You may have tochmod +xthe appimage via terminal.
macOS
- Run
soh.app. When prompted, select your supported copy of the game. - You should see a notification saying
Processing OTR, then, once the process is complete, you should get a notification sayingOTR Successfully Generated, then the game should start.
Nintendo Switch
- Run one of the PC releases to generate an
oot.otrand/oroot-mq.otrfile. After launching the game on PC, you will be able to find these files in the same directory assoh.exeorsoh.appimage. On macOS, these files can be found in/Users/<username>/Library/Application Support/com.shipofharkinian.soh/ - Copy the files to your sd card
sdcard
└── switch
└── soh
├── oot-mq.otr
├── oot.otr
├── soh.nro
└── soh.otr
- Launch via Atmosphere's
Game+Rlauncher method.
4. Play!
Congratulations, you are now sailing with the Ship of Harkinian! Have fun!
Configuration
Default keyboard configuration
| N64 | A | B | Z | Start | Analog stick | C buttons | D-Pad |
|---|---|---|---|---|---|---|---|
| Keyboard | X | C | Z | Space | WASD | Arrow keys | TFGH |
Other shortcuts
| Keys | Action |
|---|---|
| F1 | Toggle menubar |
| F5 | Save state |
| F6 | Change state |
| F7 | Load state |
| F9 | Toggle Text-to-Speech (Windows and Mac only) |
| F11 | Fullscreen |
| Tab | Toggle Alternate assets |
| Ctrl+R | Reset |
Project Overview
Ship of Harkinian (SOH) is built atop a custom library dubbed libultraship (LUS). Back in the N64 days, there was an SDK distributed to developers named libultra; LUS is designed to mimic the functionality of libultra on modern hardware. In addition, we are dependant on the source code provided by the OOT decompilation project.
In order for the game to function, you will require a legally acquired ROM for Ocarina of Time. Click here to check the compatibility of your specific rom. Any copyrighted assets are extracted from the ROM and reformatted as a .otr archive file which the code uses.
Graphics Backends
Currently, there are three rendering APIs supported: DirectX11 (Windows), OpenGL (all platforms), and Metal (MacOS). You can change which API to use in the Settings menu of the menubar, which requires a restart. If you're having an issue with crashing, you can change the API in the shipofharkinian.json file by finding the line gfxbackend:"" and changing the value to sdl for OpenGL. DirectX 11 is the default on Windows.
Custom Assets
Custom assets are packed in .otr archive files. To use custom assets, place them in the mods folder.
If you're interested in creating and/or packing your own custom asset .otr files, check out the following tools:
Development
Building
If you want to manually compile SoH, please consult the building instructions.
Playtesting
If you want to playtest a continuous integration build, you can find them at the links below. Keep in mind that these are for playtesting only, and you will likely encounter bugs and possibly crashes.
Further Reading
More detailed documentation can be found in the 'docs' directory, including the aforementioned building instructions.

