Pokémon Moon
TechnologyNative C/C++ port (engine reimplementation)
Available forWindows, Linux, macOS
View official projectAbout the project
Pokémon Moon es un videojuego de acción y aventura publicado por The Pokémon Company en 2016.
Official project information
Pokemon Moon decompilation
This repository reconstructs the European base release of Pokemon Moon from its Nintendo 3DS ARM executable. It contains source code, build tooling, symbol metadata, and reverse engineering notes. It does not contain retail game binaries or assets.
Target
- Region: Europe
- Title ID:
0004000000175E00 - Product code:
CTR-P-BNEA - Revision: base v1.0, title version 0
- Main program:
static.crs, ARMv7 little-endian, image base0x00100000 - Retail
code.binSHA-256:fbe0ce6da21542542f49645fff78ba1b7e5e7cc172ce4daceeb5c26ab54adba1 - Retail
static.crsSHA-256:e18db06b0609739e8e62cd4786c6b2da838d20347050e4c2ac822bf35c016957
config/target.json and docs/TARGET.md contain the complete identity and
layout record.
Current state
The canonical manifest currently records 2,984 source-backed functions out of 18,945 inventoried internal functions (15.75%):
| Status | Count |
|---|---|
| Exact ARM match | 298 |
| Near match | 1 |
| Semantic verified, nonmatching | 2,682 |
| Semantic unverified | 3 |
| Runtime-ready | 53 |
Local game input
You must provide files extracted from your own legally obtained copy of the game. The build expects these ignored local paths:
extracted/exefs/code.bin
extracted/metadata/exheader.bin
extracted/cxi/main.fully-decrypted.cxi
Building
Requirements include Python 3, GNU Make, arm-none-eabi-g++ 16.2.0, ARM GNU
binutils 2.47, and 3DS Decomp Pipeline commit
621bbce909ad2f9c551563c7443ed80c0123fe77 under
tools/3DS-Decomp-Pipeline. Local path overrides belong in ignored
config.mk; start from config.mk.example.
Useful commands:
make check
make MODE=semantic check
make progress
make status
make verify
make verify builds the exact profile and performs the full replacement proof.
Semantic runtime images use only explicitly runtime-ready functions. See
docs/BUILD.md for the complete build workflow.
Portable PC runtime
The repository also provides an independent CMake target for the native PC
runtime. It uses SDL2/OpenGL for host input and rendering while sharing portable
reconstructed game logic. This target does not participate in the Nintendo 3DS
Makefile build and does not replace any 3DS rendering code.
Linux requirements are CMake 3.20 or newer, a C++17 compiler, SDL2, OpenGL, and Ninja. SDL2_ttf is required only when the optional fresh-profile language selector is enabled.
cmake --preset linux-debug
cmake --build --preset linux-debug
ctest --preset linux-debug
Enable the startup language selector with a separate build directory:
cmake -S . -B build/linux-language -G Ninja \
-DCMAKE_BUILD_TYPE=Debug -DPC_STARTUP_LANGUAGE=ON
cmake --build build/linux-language
ctest --test-dir build/linux-language --output-on-failure
Run build/linux-debug/pokemoon-pc with --headless for a session without a
window. Use --data-root <path>, POKEMOON_DATA_DIR, or
POKEMOON_DATA_ROOT to select external data. Retail resources remain external
and use ID-preserving paths such as romfs/arc/AAAA/DDDD.bin under the selected
data root.
Repository layout
src/,include/: reconstructed source and declarationspc/: portable host runtime, platform adapters, and testsconfig/reconstructed_functions.csv: authoritative function manifestsymbols/: recovered symbols and compatibility statusanalysis/: function catalogs, queues, and compact progress reportsscripts/: build, verification, Ghidra export, and queue toolingdocs/: target, runtime, subsystem, and research notes
