Ghostship
Ghostship emulates Super Mario 64. It reads 2 files, 1 of them required: without a required file it does not start games.
About this profile
Technical notes
PC port of Super Mario 64 built on the decompilation, by HarbourMasters. The game runs from assets extracted out of the user's N64 ROM into sm64.o2r, plus the port's own archive ghostship.o2r, on the libultraship runtime. Torch (submodule Torch) performs the extraction inside the executable.
RetroBat installs the 3.0.0 release: its ghostship.7z carries the Ghostship.exe, ghostship.o2r, config.yml, gamecontrollerdb.txt and assets/ymls tree of Nautilus-Alfa-Win64.zip byte for byte, so the profile is pinned to the 3.0.0 tag. Its launcher passes the ROM on the command line when sm64.o2r is absent (only a .z64 file), and deletes sm64.o2r first when the portVersion inside it names another major.minor than the executable, so the archive is regenerated from the ROM.
Startup:
- ghostship.o2r is located in the application directories and handed to
the resource manager (
src/port/Engine.cpp:229-230,250-255). - RunExtract checks sm64.o2r. It is regenerated when its portVersion
differs from the build in major or minor, or when its version file
holds neither ROM revision (
src/port/Engine.cpp:673-682,170-192). - Without sm64.o2r a ROM given on the command line is extracted.
Otherwise .z64 files next to the executable are offered, then a file
dialog filtered on *.z64. A file whose SHA-1 is not in mGameList is
refused, and with no sm64.o2r at the end the port shows an error and
exits (
src/, 114,port/ GameExtractor.cpp:37-40 src/port/Engine.cpp:1056-1088). - LoadResourceFiles adds sm64.o2r, then every .otr, .o2r and .zip under
mods/ and every directory there (
src/port/Engine.cpp:488-518).
The ROM SHA-1 is computed by Torch over the whole file with no byte order
conversion, so only big-endian .z64 dumps match
(Torch src/n64/Cartridge.cpp:21, Torch src/Companion.cpp:2491-2493). Torch then
reads config.yml from the application bundle path, which maps each
accepted hash to an asset tree under assets/ymls/ and to sm64.o2r. Without
config.yml Torch logs "No config file found" and writes nothing
(src/, Torch src/Companion.cpp:1350-1354).
config.yml and the 842 assets/ymls files ship with the release.
The renderer loads its shader from the archives and aborts when it is
missing (libultraship src/fast/backends/gfx_direct3d11.cpp:1586-1598).
The shaders are only in ghostship.o2r, packed from port/ by "torch pack port
ghostship.o2r o2r" (CMakeLists.txt:990-996).
tcc.dll and the .tcc tree serve the script mod compiler, and shaderc_shared.dll the Vulkan shader compiler. Both are program components of the release.
Torch and libultraship are submodules of the repository, pinned at 3.0.0 to 106621f0f0f9731b8739bec95227c2c5887492df and 6b861a64d29d9fe95d100be228eb6d190231cc0d. Their citations above are at those revisions.
2 files: 1 required, 1 optional. 3 more files come with the app.
By kind: 5 game data.
In this collection: 0 in repo, 0 missing and 2 unsourceable.
Game data
Section titled “Game data”baserom.us.z64 required unsourceable game data
Super Mario 64 (USA) ROM in big-endian .z64 order
- System: Super Mario 64
- SHA1:
9bef1128717f958171a4afac3ed78ee2bb4e86ce - Validation: sha1
- Source:
src/,port/ GameExtractor.cpp:37-40 src/port/GameExtractor.cpp:114,src/,port/ GameExtractor.cpp:122-129 config.yml:42-48
- Picked through a file dialog filtered on *.z64 or passed on the command line on Windows, Linux and macOS. Android and iOS read baserom.us.z64 from the application directory. Either ROM produces sm64.o2r, and the ROM is not read again once sm64.o2r exists.
- Not collectable: retail ROM the collection does not hold, and a same-named dump of another game must not stand in (acknowledged gaps)
baserom.jp.z64 optional unsourceable game data
Super Mario 64 (Japan) ROM in big-endian .z64 order
- System: Super Mario 64
- SHA1:
8a20a5c83d6ceb0f0506cfc9fa20d8f438cafe51 - Validation: sha1
- Source:
src/,port/ GameExtractor.cpp:37-40 config.yml:4-10
- Accepted in place of the US ROM and extracted to the same sm64.o2r. The file name is whatever the user picks.
- Not collectable: retail ROM the collection does not hold, and a same-named dump of another game must not stand in (acknowledged gaps)
Comes with the app
Section titled “Comes with the app”ghostship.o2r comes with the app game data
Port archive packed from port/: Direct3D, OpenGL, Vulkan and Metal shaders and the menu textures
- Path:
ghostship/ghostship.o2r - System: Super Mario 64
- Size: 375.1 KB
- SHA1:
95300becccd0660d606c71dab5b457d52098dbe7 - MD5:
ad8f2494ce4bb346485f03903b611464 - Source:
src/port/Engine.cpp:229-230,src/port/Engine.cpp:250-255,libultraship src/fast/ backends/ gfx_direct3d11.cpp:1586-1598
- Located across the application directories. No version check runs on it at this tag, but the renderer aborts without the shader it carries. Hash of the copy in Nautilus-Alfa-Win64.zip.
- Not collectable: ships inside the Ghostship release, and the collection does not hold it (acknowledged gaps)
config.yml comes with the app game data
Torch extraction table: accepted ROM hashes, their asset tree under assets/ymls/ and the output archive
- Path:
ghostship/config.yml - System: Super Mario 64
- Size: 1.4 KB
- SHA1:
29a8661b29923bc329459ff2ec9ea43e6e0c6bdb - MD5:
a196a1b5beb1ac9e0ef5fc9047a8f789 - Source:
src/,port/ GameExtractor.cpp:295-299 Torch src/Companion.cpp:1350-1354
- Read from the application bundle path during an extraction only, together with the assets/ymls tree. Without it no sm64.o2r is written and the port exits. Hash of the copy in Nautilus-Alfa-Win64.zip.
- Not collectable: ships inside the Ghostship release, and a same-named file of another port must not stand in (acknowledged gaps)
gamecontrollerdb.txt comes with the app game data
SDL game controller mapping database
- Path:
ghostship/gamecontrollerdb.txt - System: Super Mario 64
- Size: 593.6 KB
- SHA1:
48e5b33c476ad7a93d41e33b9d2ffcb82009dad2 - MD5:
2cccea5a3f80fbcbe7e8fb6d29e22a03 - Source:
libultraship src/,libultraship/ libultra/ os.cpp:21-27 CMakeLists.txt:998-999
- A load failure is logged and SDL keeps its built-in mappings. The build downloads it from gabomdq/SDL_GameControllerDB. Hash of the copy in Nautilus-Alfa-Win64.zip.
- Not collectable: ships inside the Ghostship release, and other revisions under the same name must not stand in (acknowledged gaps)
Next steps
Section titled “Next steps”- Get your files, for the setup you play on
- Every system, and the files each one needs
- When a game does not start