{
  "commit": "d38cd580364b2c788e633b9e51c15e1668f726c0",
  "count": 1,
  "generated_at": "2026-11-03T13:36:34Z",
  "items": [
    {
      "id": "nxengine",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "1.0.0.6",
        "cores": [
          "nxengine",
          "nx"
        ],
        "display_name": "Cave Story (NXEngine)",
        "emulator": "NXEngine",
        "files": [
          {
            "category": "game_data",
            "description": "Cave Story freeware executable (data source for music, sfx, bitmaps, wavetable)",
            "installed_on": [
              "lakka",
              "retrobat",
              "retrodeck"
            ],
            "md5": "38695d3d69d7a0ada8178072dad4c58b",
            "name": "Doukutsu.exe",
            "note": "Placed in system/nxengine/. The core extracts ORG music, PXT sounds, stage tile attributes, BMP graphics, and wavetable from this binary at each launch.",
            "path": "nxengine/Doukutsu.exe",
            "required": true,
            "sha1": "bb2d0441e073da9c584f23c2ad8c7ab8aac293bf",
            "size": 1478656,
            "source_ref": "source nxengine/main.cpp:77-78 (opened for extraction), source nxengine/libretro/libretro.cpp:278 (existence check)",
            "system": "cave-story"
          },
          {
            "category": "game_data",
            "description": "Full game asset directory tree (399 files: sprites, NPC sheets, stage maps, scripts, backgrounds)",
            "installed_on": [
              "lakka",
              "retrobat",
              "retrodeck"
            ],
            "name": "data/",
            "note": "Must contain root assets (Arms.pbm, MyChar.pbm, etc.), Npc/ (36 sprite sheets), and Stage/ (333 map/script/tileset files). All files from the original freeware release.",
            "path": "nxengine/data/",
            "required": true,
            "source_ref": "source nxengine/extract-auto/cachefiles.c:38-439 (filenames[] array loaded at init)",
            "system": "cave-story",
            "type": "directory"
          },
          {
            "category": "game_data",
            "description": "NPC attribute table (entity behavior flags, HP, damage, display rect offsets)",
            "installed_on": [
              "lakka",
              "retrobat",
              "retrodeck"
            ],
            "name": "data/npc.tbl",
            "note": "Located in system/nxengine/data/. Used to validate data directory presence and to load NPC behavior attributes.",
            "path": "nxengine/data/npc.tbl",
            "required": true,
            "source_ref": "source nxengine/main.cpp:47-53 (existence check for data/ directory), source nxengine/ai/ai.cpp:56-59 (loaded for NPC properties)",
            "system": "cave-story"
          },
          {
            "category": "game_data",
            "description": "Sprite information file (sprite positions, sizes, animation data)",
            "hle_fallback": true,
            "name": "data/sprites.sif",
            "note": "Not shipped in the freeware distribution. If missing, the core uses a compiled-in copy (sprites_sif.h).",
            "path": "nxengine/data/sprites.sif",
            "required": false,
            "source_ref": "source nxengine/extract-auto/cachefiles.c:101 (in filenames[]), source nxengine/extract-auto/cachefiles.c:515-521 (compiled-in fallback from sprites_sif.h)",
            "system": "cave-story"
          },
          {
            "category": "game_data",
            "description": "Tile attribute lookup table (maps tile codes to collision/behavior attributes)",
            "hle_fallback": true,
            "name": "tilekey.dat",
            "note": "Not part of the freeware distribution. Generated by the standalone NXEngine extraction tool. The libretro core has hardcoded defaults in nxengine/map.cpp:30.",
            "path": "nxengine/tilekey.dat",
            "required": false,
            "source_ref": "source nxengine/map.cpp:290-303 (loaded at init, hardcoded default if missing)",
            "system": "cave-story"
          }
        ],
        "notes": "NXEngine is an open-source reimplementation of the Cave Story (Doukutsu\nMonogatari) engine by Studio Pixel, authored by Caitlin Shaw. It is not\nan emulator but a source port that loads the original freeware game data.\n\nThe core requires the freeware Cave Story distribution placed in\n{system_dir}/nxengine/. When launched without content, it looks for\nDoukutsu.exe there (nxengine/libretro/libretro.cpp:289-294). When launched with a .exe\ncontent file, it uses the parent directory of that file (nxengine/libretro/libretro.cpp:272).\n\nAt startup (nxengine/main.cpp:75-90), the core opens Doukutsu.exe and extracts:\nORG music (extractorg.c), PXT sound effects (extractpxt.c), stage tile\nattributes (extractstages.c), 18 credit BMPs + pixel.bmp (endpic/),\nand the wavetable (nxengine/extract-auto/cachefiles.c:464-485). All kept in memory.\n\nThe data/ directory (399 files from the freeware release) is loaded into\nan in-memory cache at init (nxengine/extract-auto/cachefiles.c:38-439, 497-540). All subsequent\nfile access goes through this cache. The core verifies data/ by checking\nfor data/npc.tbl (nxengine/main.cpp:47-58).\n\nThe font is compiled-in (bitmap_font.h). The upstream standalone version\nuses font.ttf via SDL_ttf.\n\nValid content extension: .exe (nxengine/libretro/libretro.cpp:142).\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/nxengine-libretro",
        "source_commit": "fd1c0686f8b4c0aea9b5addbc077e3ad7da23bb7",
        "systems": [
          "cave-story"
        ],
        "type": "libretro",
        "upstream": "https://github.com/Rox64/NXEngine",
        "version_basis": {
          "kind": "file",
          "path": "nxengine/libretro/libretro.cpp",
          "pattern": "info->library_version\\s+=\\s+\"([^\"]+)"
        }
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
