Emerald 3DS
Rediscover Hoenn. Two screens. A new perspective.
A native Nintendo 3DS port with a touch interface and an optional voxel overworld.
Get the latest version — directly in your browser
Visit emerald-3ds.com to generate and download the latest version from your own supported ROM. No desktop builder or source code download is required.
The website includes the complete installation and update instructions, sound setup and frequently asked questions. Start there whether you are installing for the first time, updating or troubleshooting.
Need help? Please read the instructions and FAQ on emerald-3ds.com before opening an issue or asking on Discord. If your question is still unanswered, include your console or emulator, game version and the exact error message when asking for help.
Screenshots · Features · Web builder, instructions & FAQ · Documentation · Community · Support the project
Emerald 3DS brings the adventure to Nintendo 3DS as native homebrew. The game runs on the top screen, while a dedicated touch interface on the bottom screen replaces the START menu. Enable the optional voxel overworld to explore supported areas from a new angle.
Screenshots
A look at the adventure across both screens.
Features
| What to expect | |
|---|---|
| Native 3DS homebrew | Runs directly on the console's ARM11 using libctru, Citro2D and Citro3D, without an emulator. |
| Two screens, one adventure | The game on top, with a dedicated touch interface below in place of the START menu. |
| Four languages | English, Spanish, French and Italian, each built from your own cartridge of that language: texts, graphics and credits come from your ROM. |
| Optional voxel overworld | Modelled buildings, trees, signposts and terrain relief, with adjustable camera angle and zoom, and real stereoscopic 3D on a New 3DS. |
| HD battle interface | Info boxes and text box drawn at the top screen's full resolution; optional 3D battles over the voxel world. |
| Follower Pokémon | Optional: your lead Pokémon walks behind you with its HeartGold/SoulSilver overworld sprite and answers when you talk to it. |
| Optional day/night lighting | Morning, daylight, sunset and night outdoors in 2D and voxel mode, lit windows and street lamps, and a clock that can run up to 120X. |
| Local wireless play (experimental) | Union Room, trades, battles, Berry Blender, minigames and link contests between 3DS systems nearby. |
| Enhancements | All optional: physical/special split, IVs and EVs on the summary, infinite TMs, running indoors, Repel prompt, visible wild Pokémon, faster speeds and more. |
| Built from your own cartridge | The builder generates the game data locally from your own dump. No ROM content is distributed. |
A new perspective on Hoenn
The voxel overworld is off by default. Open OPTION on the bottom screen and enable VOXEL 3D, then adjust 3D ANGLE and 3D ZOOM to set your camera. On a New 3DS, raise the 3D slider for a stereoscopic world; 3D WORLD and 3D DEPTH (OPTION → SETTINGS, second page) control it.
3D mode is a work in progress. Many towns and routes now have modelled buildings and relief, but large parts of the map and most interiors are still shown flat, and the Battle Frontier is only an early start. More areas will be modelled as the project moves forward.
Day and night
In OPTION → ENHANCEMENTS, set DAY / NIGHT to AUTO to enable outdoor lighting inspired by HeartGold/SoulSilver. It is OFF by default; indoors, caves, underwater areas, menus and classic battles keep their original colours. Nights have a soft moonlit blue, and supported voxel windows and street lamps glow warm.
CLOCK SPEED selects 1X, 6X, 12X, 24X, 60X or 120X. At 1X, lighting
follows Emerald's own clock; higher speeds advance a separate clock (60X is
a day in 24 real minutes) and berries grow with it. Daily events and the
GBA save format stay original, and time with the console asleep or off runs
at 1X. Back up emerald3ds.clock and emerald3ds.clock.bak together with
emerald3ds.sav.
WILD POKEMON → TIMED changes some grass encounters by morning, day and night on routes 101–104, 110, 116–117, 119–121 and 123 (ORIGINAL, the default, keeps the original tables). SHOW CLOCK → ON adds the time to the bottom screen's map. More in the day/night guide.
Follower Pokémon and local wireless
OPTION → ENHANCEMENTS → FOLLOWER makes your lead Pokémon walk behind you. Its sprites and messages come from HeartGold/SoulSilver: the builder downloads them while it builds (the only step that needs an Internet connection; without one, the game is built without them).
Local wireless play is experimental: two to four consoles with the same version and language can meet in the Union Room and use the link features of Pokémon Centers, the Berry Blender, contests and the Battle Tower. Expect bugs, and back up your save before trying it.
Getting started
Recommended: use the website
- Open emerald-3ds.com and follow the instructions for your console or emulator.
- Select your own clean, supported Pokémon Emerald ROM in the web builder (see supported cartridges).
- Generate and download the game files, then follow the website's installation guide to place them correctly.
- Complete the sound setup described in the guide before launching the game.
Everything is generated in your browser. You do not need to download or install the Windows builder, Python or this repository. You only download the resulting game files. Your ROM is processed locally in your browser and is not uploaded.
For a physical console, you need a Nintendo 3DS / 2DS family console with custom firmware and access to its SD card. Follow the website's instructions for the available launch methods.
Supported cartridges
The game is built in the language of the cartridge you dump. Only clean, unmodified dumps are accepted:
| Language | Cartridge | Game code |
|---|---|---|
| English | Pokémon Emerald Version (USA, Europe) | BPEE |
| Spanish | Pokémon Edición Esmeralda (Spain) | BPES |
| French | Pokémon Version Émeraude (France) | BPEF |
| Italian | Pokémon Versione Smeraldo (Italy) | BPEI |
Other languages (German, Japanese) and ROM hacks are not supported.
Updating or having trouble?
Use the website's update instructions and FAQ as your first stop. Follow the steps for the version you are installing, including regenerating the data pack when required.
- No sound? Follow the sound setup instructions; the required DSP firmware file is separate from the generated game files.
- Using an emulator? Follow the emulator instructions and use its emulated SD card location.
- Missing or incompatible data pack? Check the installation and update instructions and make sure your files match the release.
- Still stuck? Check the FAQ before asking for help on Discord or opening an issue.
Alternative: desktop builder (Windows, Linux and macOS)
Windows
- Download
Emerald3DS-vX.Y.Z-Windows.zipfrom the latest GitHub release and extract the whole ZIP. - Run
Emerald3DS-Builder.exe, choose your supported ROM and your SD card, then press Install. - Follow the installation guide, including sound setup, and launch the game from the Homebrew Launcher.
The builder writes /3ds/emerald3ds/Emerald3DS.3dsx, Emerald3DS.smdh and emerald3ds.pak. Your ROM is only read, not copied, uploaded or modified. The desktop builder needs an Internet connection only to download the optional follower sprites.
Linux and macOS
Run the builder from source with Python 3.11+ and Pillow, using the payload/ folder from the matching release ZIP:
python -m emerald3ds_builder --payload /path/to/payload install --rom /path/to/rom.gba --sd /path/to/card
See the builder documentation for setup and additional commands, and the installation guide for updates.
About this repository
This repository contains no game content. It holds the port's own code, the tools that build it and the builder that turns your own cartridge dump into the game's data pack. Nothing derived from the ROM is distributed here or in the releases.
| Component | Location | Role |
|---|---|---|
| Engine | pret/pokeemerald · upstream.lock |
The Pokémon Emerald decompilation, pinned to a specific revision. |
| Port patches | patches/pokeemerald/ |
The port's changes to the upstream engine. |
| 3DS backend | 3ds_port/ |
ARM11 backend, GPU compositor, NDSP audio, touch UI and voxel overworld. |
| Data builder | builder/ |
Creates the data pack locally from the player's own supported ROM. |
Building from source
python tools/bootstrap.py # pinned upstream + patches + port -> build/upstream python tools/bootstrap.py --make # also builds the 3DSX there python tools/bootstrap.py --make --spanish-rom esmeralda.gba # Spanish build python tools/bootstrap.py --make --french-rom emeraude.gba # French build python tools/bootstrap.py --make --italian-rom smeraldo.gba # Italian build
The Spanish, French and Italian builds take their texts and graphics from your own clean Spanish (BPES), French (BPEF) or Italian (BPEI) ROM; see Pokémon Esmeralda en español, Pokémon Émeraude en français and Pokémon Smeraldo in italiano.
Start with the development guide for requirements, the development loop, loose data, data packs and host tests.
Documentation
For players: emerald-3ds.com brings together the web builder, complete instructions and FAQ. The repository guides below provide additional reference and development documentation.
| Guide | What's inside |
|---|---|
| Install and update | Installation, sound setup and updating an existing installation. |
| Development | Build requirements, workflow and tests. |
| Spanish build | Playing in Spanish with your own Pokémon Esmeralda (Spain) ROM. |
| French build | Playing in French with your own Pokémon Émeraude (France) ROM. |
| Italian build | Playing in Italian with your own Pokémon Versione Smeraldo (Italy) ROM. |
| Architecture | How the engine and the 3DS backend fit together. |
| Asset pipeline | How game data is prepared for the port. |
| Releasing | Building and packaging a release. |
| Contributing | Guidelines for contributing to the project. |
| Changelog | Changes across releases. |
Community
Before asking for installation or update help, please check the website instructions and FAQ.
Join the Discord community to talk about the project and share your adventures in Hoenn. Follow @DustZallax on X for project updates and to stay in touch.
Support the project
If you're enjoying this new way to explore Hoenn, you can buy me a coffee on Ko-fi. It's an optional way to support my work on the project, and every coffee is appreciated. Thank you for being part of the adventure!
You can also support the project by starring the repository, sharing it or contributing.
Provenance and licences
Only original Emerald 3DS code, tools and documentation are licensed by this project (LICENSE-PORT.md). The decompilation, the game and third-party components keep their own terms; see NOTICE.md and docs/PROVENANCE.md. AI-assisted tooling was used during development: AI_DISCLOSURE.md.
Emerald 3DS is an unofficial fan project, not affiliated with or endorsed by Nintendo, Game Freak, Creatures or The Pokémon Company. Pokémon and Pokémon Emerald are trademarks of their respective owners.