{
  "commit": "fbe5ba4e3e790ab07eddc5b57e0f45a02cbcd60e",
  "count": 1,
  "generated_at": "2026-10-24T00:06:47Z",
  "items": [
    {
      "id": "ghostship",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "3.0.0",
        "cores": [
          "ghostship"
        ],
        "display_name": "Super Mario 64 (Ghostship)",
        "emulator": "Ghostship",
        "files": [
          {
            "category": "game_data",
            "description": "Super Mario 64 (USA) ROM in big-endian .z64 order",
            "name": "baserom.us.z64",
            "note": "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.",
            "required": true,
            "sha1": "9bef1128717f958171a4afac3ed78ee2bb4e86ce",
            "source_ref": "src/port/GameExtractor.cpp:37-40, 114, 122-129, config.yml:42-48",
            "system": "ghostship",
            "unsourceable": "retail ROM the collection does not hold, and a same-named dump of another game must not stand in",
            "validation": [
              "sha1"
            ]
          },
          {
            "category": "game_data",
            "description": "Super Mario 64 (Japan) ROM in big-endian .z64 order",
            "name": "baserom.jp.z64",
            "note": "Accepted in place of the US ROM and extracted to the same sm64.o2r. The file name is whatever the user picks.",
            "required": false,
            "sha1": "8a20a5c83d6ceb0f0506cfc9fa20d8f438cafe51",
            "source_ref": "src/port/GameExtractor.cpp:37-40, config.yml:4-10",
            "system": "ghostship",
            "unsourceable": "retail ROM the collection does not hold, and a same-named dump of another game must not stand in",
            "validation": [
              "sha1"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Port archive packed from port/: Direct3D, OpenGL, Vulkan and Metal shaders and the menu textures",
            "md5": "ad8f2494ce4bb346485f03903b611464",
            "name": "ghostship.o2r",
            "note": "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.",
            "path": "ghostship/ghostship.o2r",
            "required": true,
            "sha1": "95300becccd0660d606c71dab5b457d52098dbe7",
            "size": 384109,
            "source_ref": "src/port/Engine.cpp:229-230, 250-255, libultraship src/fast/backends/gfx_direct3d11.cpp:1586-1598",
            "system": "ghostship",
            "unsourceable": "ships inside the Ghostship release, and the collection does not hold it"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Torch extraction table: accepted ROM hashes, their asset tree under assets/ymls/ and the output archive",
            "md5": "a196a1b5beb1ac9e0ef5fc9047a8f789",
            "name": "config.yml",
            "note": "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.",
            "path": "ghostship/config.yml",
            "required": true,
            "sha1": "29a8661b29923bc329459ff2ec9ea43e6e0c6bdb",
            "size": 1396,
            "source_ref": "src/port/GameExtractor.cpp:295-299, Torch src/Companion.cpp:1350-1354",
            "system": "ghostship",
            "unsourceable": "ships inside the Ghostship release, and a same-named file of another port must not stand in"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "SDL game controller mapping database",
            "md5": "2cccea5a3f80fbcbe7e8fb6d29e22a03",
            "name": "gamecontrollerdb.txt",
            "note": "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.",
            "path": "ghostship/gamecontrollerdb.txt",
            "required": false,
            "sha1": "48e5b33c476ad7a93d41e33b9d2ffcb82009dad2",
            "size": 607874,
            "source_ref": "libultraship src/libultraship/libultra/os.cpp:21-27, CMakeLists.txt:998-999",
            "system": "ghostship",
            "unsourceable": "ships inside the Ghostship release, and other revisions under the same name must not stand in"
          }
        ],
        "notes": "PC port of Super Mario 64 built on the decompilation, by HarbourMasters.\nThe game runs from assets extracted out of the user's N64 ROM into\nsm64.o2r, plus the port's own archive ghostship.o2r, on the libultraship\nruntime. Torch (submodule Torch) performs the extraction inside the\nexecutable.\n\nRetroBat installs the 3.0.0 release: its ghostship.7z carries the\nGhostship.exe, ghostship.o2r, config.yml, gamecontrollerdb.txt and\nassets/ymls tree of Nautilus-Alfa-Win64.zip byte for byte, so the profile\nis pinned to the 3.0.0 tag. Its launcher passes the ROM on the command line\nwhen sm64.o2r is absent (only a .z64 file), and deletes sm64.o2r first\nwhen the portVersion inside it names another major.minor than the\nexecutable, so the archive is regenerated from the ROM.\n\nStartup:\n  1. ghostship.o2r is located in the application directories and handed to\n     the resource manager (src/port/Engine.cpp:229-230, 250-255).\n  2. RunExtract checks sm64.o2r. It is regenerated when its portVersion\n     differs from the build in major or minor, or when its version file\n     holds neither ROM revision (src/port/Engine.cpp:673-682, 170-192).\n  3. Without sm64.o2r a ROM given on the command line is extracted.\n     Otherwise .z64 files next to the executable are offered, then a file\n     dialog filtered on *.z64. A file whose SHA-1 is not in mGameList is\n     refused, and with no sm64.o2r at the end the port shows an error and\n     exits (src/port/GameExtractor.cpp:37-40, 114, src/port/Engine.cpp:1056-1088).\n  4. LoadResourceFiles adds sm64.o2r, then every .otr, .o2r and .zip under\n     mods/ and every directory there (src/port/Engine.cpp:488-518).\n\nThe ROM SHA-1 is computed by Torch over the whole file with no byte order\nconversion, so only big-endian .z64 dumps match\n(Torch src/n64/Cartridge.cpp:21, Torch src/Companion.cpp:2491-2493). Torch then\nreads config.yml from the application bundle path, which maps each\naccepted hash to an asset tree under assets/ymls/ and to sm64.o2r. Without\nconfig.yml Torch logs \"No config file found\" and writes nothing\n(src/port/GameExtractor.cpp:295-299, Torch src/Companion.cpp:1350-1354).\nconfig.yml and the 842 assets/ymls files ship with the release.\n\nThe renderer loads its shader from the archives and aborts when it is\nmissing (libultraship src/fast/backends/gfx_direct3d11.cpp:1586-1598).\nThe shaders are only in ghostship.o2r, packed from port/ by \"torch pack port\nghostship.o2r o2r\" (CMakeLists.txt:990-996).\n\ntcc.dll and the .tcc tree serve the script mod compiler, and\nshaderc_shared.dll the Vulkan shader compiler. Both are program components\nof the release.\n\nTorch and libultraship are submodules of the repository, pinned at 3.0.0\nto 106621f0f0f9731b8739bec95227c2c5887492df and\n6b861a64d29d9fe95d100be228eb6d190231cc0d. Their citations above are at\nthose revisions.\n",
        "profiled_date": "2026-10-20",
        "source": "https://github.com/HarbourMasters/Ghostship",
        "source_commit": "deb091c29caff57dd986398087b058f16b11911e",
        "systems": [
          "ghostship"
        ],
        "type": "standalone",
        "upstream": "https://github.com/HarbourMasters/Ghostship"
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
