Go to file
Malkierian 778f548b01
Move Game Saving to Separate Thread (#2820)
* Refactor `Vec2f`, `Vec3f`, `Vec3s` in `z64math` to avoid reserved identifiers.

* Include `z64save` in SaveManager, which requires encapsulating `#include gameplaystats.h` and `InitStatTracker` in the cpp to fix compile issues.

Adds SaveContext reference parameters to SaveFunc and existing implementations in preparation for threaded saves.

* Threaded saves fully implemented.

Platform-specific save code removed.

Thread safety added. Will wait for thread pool tasks to finish before resetting or closing.

* Converted gSaveContext copy for save threads to the heap with `new`, deleted at the end of the threaded function to prevent possible issues with the stack.

* Turns out leaving the call to `ThreadPoolWait` in a `GameInteractor::OnExitGame` hook seems to be just fine.

* Removed unnecessary references to `SaveManager::ThreadPoolWait()`, game hooks are the only places it's called now.

* Re-added WiiU/Switch performance save code.

* Added call to `SaveManager::ThreadPoolWait` in `Sram_InitSave` to prevent trying to load a newly "created" save before the save file was actually written.

---------

Co-authored-by: Christopher Leggett <chris@leggett.dev>
2023-05-05 17:20:34 -04:00
.devcontainer [Dev] Add Support for Github Codespaces (#2551) 2023-02-28 01:11:56 -05:00
.github/workflows spockalicious (#2751) 2023-04-27 19:20:41 -04:00
CMake Use shallow clone for vcpkg (#2006) 2022-11-23 13:28:51 +01:00
docs spockalicious (#2751) 2023-04-27 19:20:41 -04:00
libultraship@f9e554dc21 Lus updates (#2835) 2023-05-04 23:56:57 -04:00
OTRExporter Lus updates (#2822) 2023-05-03 20:46:26 -04:00
OTRGui clean up build info on logo screen (#2736) 2023-04-23 19:13:51 -04:00
scripts build/package/ship soh.otr (#2699) 2023-04-12 21:14:33 -04:00
soh Move Game Saving to Separate Thread (#2820) 2023-05-05 17:20:34 -04:00
ZAPDTR spockalicious (#2751) 2023-04-27 19:20:41 -04:00
.gitattributes Simplify Asset Headers (#2474) 2023-03-02 15:37:47 +01:00
.gitignore udpate mac launch script to set SHIP_HOME (#2831) 2023-05-05 02:34:07 -04:00
.gitmodules Import libultraship as a submodule (#1943) 2022-11-14 11:22:34 +01:00
CMakeLists.txt bump version (#2752) 2023-04-27 20:21:55 -04:00
copy-existing-otrs.cmake chore: copy otrs in windows into target dir (#2704) 2023-04-14 09:56:38 -04:00
Dockerfile Refactor CrowdControl Setup (#1890) 2022-11-06 11:00:34 +01:00
README.md remove tts hotkey for linux and update readme (#2833) 2023-05-05 02:38:54 -04:00

Ship of Harkinian Ship of Harkinian

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 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. Check your sha1

You can verify you have a supported copy of the game by checking the sha1 hash. There are many ways to do this, one of the simplest is using the hasher-js webapp hosted at https://www.romhacking.net/hash/.

Supported Version sha1
PAL GC 0227d7c0074f2d0ac935631990da8ec5914597b4
PAL GC (Debug) cee6bc3c2a634b41728f2af8da54d9bf8cc14099
PAL MQ (Debug) 079b855b943d6ad8bd1eb026c0ed169ecbdac7da
PAL MQ (Debug) 50bebedad9e0f10746a52b07239e47fa6c284d03

2. Download The Ship of Harkinian from Discord

The latest release is available in the most recent post in the #downloads channel.

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 to chmod +x the 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 saying OTR Successfully Generated, then the game should start.

Nintendo Switch

  • Run one of the PC releases to generate an oot.otr and/or oot-mq.otr file. After launching the game on PC, you will be able to find these files in the same directory as soh.exe or soh.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+R launcher 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)
F10 Fullscreen (OpenGL)
Tab Toggle Alternate assets
Alt+Enter Fullscreen (DirectX)
Ctrl+R Reset

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 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 retro!

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.

Powered by libultraship