Rediscover Hoenn. Two screens. A new perspective.
A native Nintendo 3DS port with a touch interface and an optional voxel overworld.
Screenshots · Features · Getting started · Documentation · Community · Support the project
Pokémon Emerald 3Ds Dual Screen 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.
A look at the adventure across both screens.
| 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. |
| Optional voxel overworld | Modelled buildings, trees, signposts and terrain relief, with adjustable camera angle and zoom. |
| Built from your own cartridge | The builder generates the game data locally from your own dump. No ROM content is distributed. |
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.
3D mode is a work in progress. Only some buildings, trees, signposts and terrain relief are modelled today. Most of the map and nearly all interiors are still shown flat. More areas will be modelled as the project moves forward.
- A Nintendo 3DS / 2DS family console with custom firmware (Luma3DS) and the Homebrew Launcher.
- A clean dump of your own Pokémon Emerald (USA, Europe) cartridge.
- Your console's SD card, connected to your computer.
Supported ROM SHA-1:
f3ae088181bf583e55daf962a92bb46f4f1d07b7
- Download
Emerald3DS-vX.Y.Z-Windows.zipfrom the latest release and extract the whole ZIP. - Run
Emerald3DS-Builder.exe, choose your ROM and your SD card, press Install. - Make sure
SD:/3ds/dspfirm.cdcis present for sound, put the SD card back in your console and launch Pokémon Emerald 3Ds Dual Screen from the Homebrew Launcher.
For the complete walkthrough, including sound setup and updates, see the installation guide.
The builder writes /3ds/emerald3ds/Emerald3DS.3dsx, Emerald3DS.smdh and
emerald3ds.pak. The ROM is only read: it is not copied, uploaded or modified,
and the builder needs no Internet connection.
Updating? Run the new release's builder again to generate a matching data pack. The game tells you if the pack does not match the release. Installing or updating does not overwrite your save.
Linux and macOS installation
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/cardSee the builder documentation for setup and additional commands.
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. |
python tools/bootstrap.py # pinned upstream + patches + port -> build/upstream
python tools/bootstrap.py --make # also builds the 3DSX thereStart with the development guide for requirements, the development loop, loose data, data packs and host tests.
| Guide | What's inside |
|---|---|
| Install and update | Installation, sound setup and updating an existing installation. |
| Development | Build requirements, workflow and tests. |
| 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. |
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.
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.
Only original Pokémon Emerald 3Ds Dual Screen 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.
Pokémon Emerald 3Ds Dual Screen 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.