Skip to content

# NXEngine - RetroBIOS

Type | libretro
Classification | game_engine
Source | https://github.com/libretro/nxengine-libretro
Upstream | https://github.com/Rox64/NXEngine
Version | 1.0.0.6
Profiled | 2026-03-24
Cores | nxengine
Systems | cave-story

Technical notes

NXEngine is an open-source reimplementation of the Cave Story (Doukutsu Monogatari) engine by Studio Pixel, authored by Caitlin Shaw. It is not an emulator but a source port that loads the original freeware game data.

The core requires the freeware Cave Story distribution placed in {system_dir}/nxengine/. When launched without content, it looks for Doukutsu.exe there (libretro.cpp:254-259). When launched with a .exe content file, it uses the parent directory of that file (libretro.cpp:237).

At startup (main.cpp:75-90), the core opens Doukutsu.exe and extracts: ORG music (extractorg.c), PXT sound effects (extractpxt.c), stage tile attributes (extractstages.c), 18 credit BMPs + pixel.bmp (endpic/), and the wavetable (cachefiles.c:464-485). All kept in memory.

The data/ directory (399 files from the freeware release) is loaded into an in-memory cache at init (cachefiles.c:38-439, 497-540). All subsequent file access goes through this cache. The core verifies data/ by checking for data/npc.tbl (main.cpp:47-58).

The font is compiled-in (bitmap_font.h). The upstream standalone version uses font.ttf via SDL_ttf.

Valid content extension: .exe (libretro.cpp:109).

5 files | 3 required, 2 optional | 1 in repo, 4 missing | 1 with HLE fallback Categories: 5 game data

`Doukutsu.exe` -required, game_data : Cave Story freeware executable (data source for music, sfx, bitmaps, wavetable)

- System: cave-story
- Size: 1.4 MB
- SHA1: `bb2d0441e073da9c584f23c2ad8c7ab8aac293bf`
- MD5: `38695d3d69d7a0ada8178072dad4c58b`
- Source: `main.cpp:77-78 (opened for extraction), libretro.cpp:258 (existence check)`
- Placed in system/nxengine/. The core extracts ORG music, PXT sounds, stage tile attributes, BMP graphics, and wavetable from this binary at each launch.

`data/` -required, game_data, missing from repo : Full game asset directory tree (399 files: sprites, NPC sheets, stage maps, scripts, backgrounds)

- System: cave-story
- Source: `cachefiles.c:38-439 (filenames[] array loaded at init)`
- 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.

`data/npc.tbl` -required, game_data, missing from repo : NPC attribute table (entity behavior flags, HP, damage, display rect offsets)

- System: cave-story
- Source: `main.cpp:50 (existence check for data/ directory), ai/ai.cpp:56-59 (loaded for NPC properties)`
- Located in system/nxengine/data/. Used to validate data directory presence and to load NPC behavior attributes.

`data/sprites.sif` -optional, HLE available, game_data, missing from repo : Sprite information file (sprite positions, sizes, animation data)

- System: cave-story
- Source: `cachefiles.c:101 (in filenames[]), cachefiles.c:515-521 (compiled-in fallback from sprites_sif.h)`
- Not shipped in the freeware distribution. If missing, the core uses a compiled-in copy (sprites_sif.h).

`tilekey.dat` -optional, game_data, missing from repo : Tile attribute lookup table (maps tile codes to collision/behavior attributes)

- System: cave-story
- Source: `map.cpp:290-303 (loaded at init, hardcoded default if missing)`
- Not part of the freeware distribution. Generated by the standalone NXEngine extraction tool. The libretro core has hardcoded defaults in map.cpp:30.

Generated on 2026-03-25T14:56:43Z