This project is (for now) a byte-perfect decompilation of the game engine from Professor Layton and the Curious Village (Nintendo DS, 2007, Level-5). The goal is to replace every compiled function with matching C code, verified against the original ROM binary.
The approach is the same as sm64 and pokediamond: extract the ARM9/ARM7 binaries from the ROM, disassemble everything, then work through it function by function until the rebuilt binary is identical to the original.
The scripting language the game uses to run puzzles and cutscenes is a major focus. Getting that understood is what makes the rest of the engine start making sense.
Work is ongoing. Both binaries build byte-perfect against the original ROM. Parts of ARM9 and ARM7 have been replaced with C so far, the rest stays as disassembled stubs for now. Several NitroSDK functions have been identified and labeled by matching the embedded SDK stamps against known symbol patterns.
Almost everything in the game is packed into the NitroFS filesystem inside the ROM. Most assets use Level-5’s own container formats on top of that. This table gets updated as formats are worked out.
| Extension / Magic | Format | Status |
|---|---|---|
.arc |
Level-5 archive container Wraps multiple files; used for rooms, puzzles, etc. |
todo |
.gds |
Game Design Script, the engine’s scripting language Bytecode VM that runs all puzzles, cutscenes, and events |
todo |
.dat |
Generic data container, format varies by context Dialogue, puzzle definitions, room layouts |
todo |
.nclr / .ncgr / .nscr |
NitroSDK standard graphics formats Palette / tile data / screen layout, well-documented externally |
known |
.nanr / .ncer |
NitroSDK animation and cell data Sprite animations |
known |
.mio |
Actimagine VX video stream Used for the cutscenes |
todo |