Journal ranking of not-yet-obtainable major items. The Journal ranks item hints by item category, but the rank lookup called Context::GetFinalGIEntry with checkObtainability = true. For any hinted item that isn't currently obtainable, that helper substitutes a blue rupee, so genuine major items (e.g. Anju's Lens of Truth while adult) were categorized as junk and sorted below Pieces of Heart and Gold Skulltula Tokens. Pass checkObtainability = false so hints rank by the true placed item's value regardless of current reachability. Ice-trap disguises still rank as their cover item (handled by the separate overrides path in GetFinalGIEntry), and Mysterious Shuffle still disables the ranking. Follow-up fix to the in-game Hint Tracker feature. Add found-item handling to the Hint Tracker Journal. Once every location an item hint points at has been collected, the hint is "found": it sinks to the bottom of its group, renders dimmed with a tick prefix, and can be removed entirely via a new "Hide Found Items" toggle. A "Found (collected)" colour picker sets the dim colour. Only item and item-area hints in the Journal are affected; Way of the Hero, Foolish and area hints are untouched, and the Locations view is unchanged. Found state is derived from each location's collection status (ItemLocation::HasObtained), so no new save data is introduced. Make Hint Tracker settings searchable, matching the Check Tracker. The Check Tracker registers its checkbox settings as searchable menu widgets (WidgetInfo + AddSearchWidget); the Hint Tracker only did so for its colours and window type, leaving every checkbox reachable only from the dedicated settings window. Convert the checkboxes (Enable Dragging, Only Enable While Paused, Expand/Collapse Buttons, Search Input, Hint Totals, Hide Found Items) to the same searchable widget pattern. The Font Size slider stays inline, as the Check Tracker leaves its own font slider inline too. Items group out into the seven categories. The tier collapse functions are replaced by a single label lookup in ItemCategoryRank order, and the type-priority key scaling grows from 4 to 8 slots to fit the extra groups. Category labels reuse the established translations from the hint text tables. Mysterious Shuffle still keeps the single "Items" group.
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.o2rand/oroot-mq.o2rfile. 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.o2r
├── oot.o2r
├── soh.nro
└── soh.o2r
- 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 |
|---|---|
| ESC | Toggle menu |
| F2 | Toggle capture mouse input |
| 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 .o2r 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.

