A Windows GUI tool for extracting map data from GBA Pokémon ROMs into a format compatible with the pokeemerald / pokeemerald-expansion decompilation projects. Original concept was made by hand and code is expanded on and improved with github copilot/Codex.
| Game | Code |
|---|---|
| Pokémon Ruby (English) | AXVE |
| Pokémon Sapphire (English) | AXPE |
| Pokémon FireRed (English) | BPRE |
| Pokémon LeafGreen (English) | BPGE |
| Pokémon Emerald (English) | BPEE |
ROM hacks based on these games are supported, but the offsets in config.json (e.g. mapBankTableOffset, mapLabelsOffset, bankPointers) will likely need to be updated to match the hack's relocated data.
- Map preview — browse all maps in the ROM with a live rendered tile preview
- Tileset preview — inspect primary and secondary tile sheets and palettes
- Export Map — export a single selected map and all its associated data
- Export All — export every map in the ROM in one pass. Dumps all events and scripts.
- Export World Image — render a stitched PNG of a map and all its connected neighbours
- Export Music — (Experimental- Pretty sure this doesn't work correctly.)
- Export Trainers — export all battle trainer front sprites as PNGs with matching
.palfiles - Export Overworlds — export object-event/overworld sprite frames as PNGs with matching palettes and metadata
- Windows 10/11
- Qt 6 (tested with 6.11.0, static MSVC build)
- Visual Studio 2022 Build Tools (MSVC + CMake + Ninja)
cmake -B build/debug -DCMAKE_PREFIX_PATH=<path/to/Qt6> -DCMAKE_BUILD_TYPE=Debug -G Ninja
cmake --build build/debug
- Launch
PokeCompDumper.exe.config.jsonmust be in the same directory. - Click Load ROM and open a supported
.gbafile. - The map tree on the left will populate with all banks and maps.
- Click a map to preview its tiles, blocks, and rendered layout.
- Use one of the export buttons:
- Export Map — exports only the currently selected map.
- Export All — exports every map in the ROM (can take a while).
- Export World Image — saves a PNG of the selected map stitched together with all connected maps.
- Export Music — writes decomp-style
sound/songs/midi/*.mid,midi.cfg,song_table.inc,voice_groups.inc,sound/voicegroups/*.inc,direct_sound_data.incwith.wavdirect sound sources,programmable_wave_data.incwith 16-byte.pcmwave samples, and key split tables when referenced. - Export Trainers — writes
graphics/trainers/trainer_###.pngandtrainer_###.palfiles. - Export Overworlds — writes sheet PNGs in
graphics/object_events/pics/, individual frame PNGs ingraphics/object_events/pics/frames/, palettes, previews, andobject_event_graphics_info.json.
ROM-specific settings live in config.json next to the executable. Each entry is keyed by the 4-character game code. Relevant fields:
| Key | Description |
|---|---|
mapBankTableOffset |
ROM offset of the map bank pointer table (hex) |
mapLabelsOffset |
ROM offset of the map label index table (hex) |
mapLabelCount |
Number of map labels |
bankPointers |
Pointer for each bank (used to detect bank boundaries) |
mapsPerBank |
Number of maps in each bank |
tilesetSizes |
Metatile counts per tileset address, keyed by hex address |
songTableOffset |
ROM offset of gSongTable for music exporting (hex) |
songCount |
Number of 8-byte song table entries to dump |
trainerFrontPicTableOffset |
Optional ROM offset of the trainer front sprite table (hex). Auto-scanned if omitted |
trainerFrontPaletteTableOffset |
Optional ROM offset of the trainer front palette table (hex). Auto-scanned if omitted |
trainerSpriteCount |
Optional trainer sprite count. Required only when using explicit trainer table offsets |
overworldGraphicsInfoPointersOffset |
Optional ROM offset of gObjectEventGraphicsInfoPointers (hex). Auto-scanned if omitted |
overworldGraphicsCount |
Optional NUM_OBJ_EVENT_GFX count. Required only when using explicit overworld table offsets |
fastSmol |
"true" to emit .4bpp.fastSmol in graphics.h (expansion), "false" for .4bpp.lz (vanilla) |
- FireRed / LeafGreen: tile data is reformatted from the FR split-palette layout into the standard Emerald layout during export.
headers.h,graphics.h, andmetatiles.hare appended on each export, so you can run Export All into a fresh folder and end up with one file containing all tilesets.