Pokemon Colosseum
TechnologyNative C/C++ port (engine reimplementation)
Available forWindows, Linux, macOS
View official projectAbout the project
Pokémon Colosseum es un videojuego de la franquicia Pokémon del género de RPG/Aventura para Nintendo GameCube. El juego es una semi-secuela de los juegos Pokémon Stadium de Nintendo 64 y a su vez cuenta con una secuela titulada Pokémon XD: Tempestad Oscura, también para Nintendo GameCube. El juego cuenta con un modo multijugador con la posibilidad de usar los Pokémon de los juegos de Game Boy Advance de la tercera generación, pero sin duda el modo historia es el más importante, recuperando el espíritu de los juegos de Game Boy y aprovechando los gráficos en 3D.
Official project information
Pokémon Colosseum Decompilation (GC6E01)
A matching decompilation project for the GameCube game Pokémon Colosseum
(GC6E01, NTSC-U). The active project has been reset to the standard
dtk-template workflow.
Status
All 8,677 tracked functions, all 2,504,940 tracked code bytes, and all 3,565,996 tracked data bytes match and link from source (100%) across the DOL and all 25 configured REL modules. All 2,256 scoring units are complete and source-backed. The code totals include accepted assembly implementations with recorded evidence.
| Metric | Value |
|---|---|
| Fuzzy match | 100.00% |
| Function match | 100.00% (8,677 / 8,677 functions) |
| Code match | 100.00% (2,504,940 / 2,504,940 matched code bytes) |
| Data match | 100.00% (3,565,996 / 3,565,996 matched data bytes) |
| Source-linked | 2,256 / 2,256 scoring units (100.00% of code) |
Source-linked data is 3,565,996 / 3,565,996 bytes (100%). The catalogue completed the last 91,421 tracked data bytes, reconstructing 4,018 indexed messages, three retained strings and alignment in 13 existing data owners. The catalogue preserves original message text and typed formatting controls; it is reconstructed data, not newly authored dialogue or additional native program code. No tracked data bytes remain in original fallback.
The native source report at source revision
df0ecc3dd0f0dc34e090bc45d51f5dffe81c717a
records the current ownership layout. Its source/output validation compiled and linked all outputs,
passed all 26 unchanged canonical hashes and direct original/rebuilt byte
comparisons, and passed the zero-data layout, registered assembly
branch-target and complete vector-template checks. The restored libraries'
31 real state objects also retain their exact linked addresses and sizes.
An independent report audit confirms every function identity and bound and
the complete physical interval union are unchanged, with no overlapping,
added or omitted bytes. Final documentation and topology acceptance are
recorded in PR #668.
The report SHA-256 is
2779ecf834a656a461eb1febdd95a617d9b603c73e0ee1f2a6c006c8ff9bc7a0.
For subsequent builds, the authoritative report is
build/GC6E01/report.json; the root-level report.json is historical.
docs/DATA_MATCHING.md records the completed data
reconstruction, historical checkpoints and validation scope.
The final scoring unit, the 7,988-byte MetroTRK interrupt-vector template, is reconstructed symbolic assembly. It remains outside the historical tracked-code denominator and adds no tracked functions, code bytes or data bytes. All physical intervals remain unchanged and covered by the final binary comparisons. These results do not establish a pure-C percentage or runtime gameplay testing.
Scoring units are not translation units. An original source region may be
split into address-owned units with different compiler flags, compiled through
one-line #include shims. The report has 8,677 distinct module/address function
identities, with no duplicate claims. Its code denominator contains 2,495,112
DOL bytes and 9,828 REL bytes, all matched and source-linked. The catalogue
raised source-backed and complete units from 2,258 to 2,271; the vector owner
completed the original 2,272-unit inventory. The subsequent MusyX/HSD cleanup
reunites 21 former owners into five coherent library units, producing
2,256 complete scoring units while preserving every function and physical
code/data byte. The reviewed topology freeze records this ownership change.
The completed fork import and Count-Sheep's retained original history are
recorded in PR #662 and
docs/COUNT_SHEEP_INTEGRATION.md.
The library cleanup record distinguishes active
matching sources from retired candidate wrappers and tracks restoration of
whole MusyX/HSD translation units and their data ownership. Superseded library
candidates are preserved under archive/previous_campaign/library_candidates/.
The historical function worklist has no remaining rows.
docs/completed-functions.csv retains all
217 campaign entries and their evidence notes. This historical campaign queue
is separate from the report's complete function inventory.

The chart plots fuzzy matching, code matching and function matching. Every
point is an objdiff measurement. Points from 2026-07-01 onward come from CI
reports (or, for the first stretch, this table's git history); earlier points
were recovered by building historical commits. The campaign starts on
2026-06-27, when units first became matchable. Points from the PR #638 merge
onward cover the DOL plus REL modules; earlier points have DOL-only scope.
The build workflow republishes the image on every push to master in the
progress-chart
branch. Keeping generated images there avoids repeated image commits on the
protected master branch. Render one locally with:
uv run --with matplotlib tools/plot_progress.py -o /tmp/progress.png
After rebuilding the report, refresh the table with:
python3 tools/update_readme_progress.py
Use python3 tools/update_readme_progress.py --check to verify that the README
matches the current report.
The published denominator is frozen in
config/GC6E01/object_map.freeze.json. After changing splits.txt,
symbols.txt, or object declarations, rebuild the report and run:
python3 tools/check_object_map_freeze.py
The check locks total code bytes, data bytes, function count, and unit section
topology. Progress counters may rise without updating the freeze. Intentional
split/topology changes must update the freeze in the same change with
python3 tools/check_object_map_freeze.py --update and a clear reason. The
current topology still includes auto-generated units; those are visible
placeholders to retire deliberately, not hidden progress. Named extracted units
without a source path are object-map progress only; they are not counted as
decompiled source matches.
Requirements
You must provide your own legally obtained game files. Place a supported disc
image or extracted disc at orig/GC6E01/; see
docs/getting_started.md.
The build downloads pinned dtk-template tools into build/ when local paths are
not supplied.
Build
python configure.py
ninja
python configure.py progress
The build splits sys/main.dol and the 25 configured original REL modules,
substitutes only objects declared in configure.py, and verifies all 26 rebuilt
outputs against config/GC6E01/build.sha1. Original RELs belong under
orig/GC6E01/files/; complete loose modules or their FSYS archives are supported.
Worker Worktrees
Use the helper below for parallel decompilation workers. It creates or repairs a
worktree and links orig/GC6E01/sys to the local original game files so
ninja all_source build/GC6E01/report.json can validate from the worker tree.
python3 tools/setup_worker_worktree.py /tmp/pkmn-parallel-example \
--branch campaign/parallel-example \
--base origin/master
Add --validate to run the standard worker checks after setup:
python3 configure.py --no-progress
ninja all_source build/GC6E01/report.json
python3 tools/update_readme_progress.py --check
git diff --check
Layout
config/GC6E01/ dtk config, symbols, splits, SHA-1
include/ project headers
src/ active source/data candidates declared in configure.py
tools/ dtk-template helper scripts
docs/ dtk-template setup documentation
archive/previous_campaign/
old campaign tools, notes, PC-port experiments, and
unconfigured source kept for research only
Contributing
Use the dtk-template flow. Add or refine splits in config/GC6E01/splits.txt,
declare source objects in configure.py, build with ninja, and inspect the
generated objdiff.json / build/GC6E01/report.json.
Do not commit generated .inc files, extracted game assets, target objects,
compiler binaries, or asm-wrapper bodies as decompilation progress.
Contributors
License
The project's reverse-engineered code and authored tools are released under the MIT license. The readable message catalogue preserves original game text; that text is not newly authored dialogue, and this project does not claim to relicense it under MIT. Pokémon Colosseum and its original content remain owned by their respective rights holders. Original game binaries, extracted target objects, and proprietary compiler binaries are not distributed here.
