Skip to content
PORTSNATIVE.
HomeCatalog
Web GamesEmulatorsToolsNews
PORTSNATIVE.

A catalog for discovering ports and related projects. We link to official sources and do not host original game files.

ExploreCatalogMy list
InformationAbout usSuggest a portSupportDonationsLegal notice
© 2026 PortsNative
Back to catalog
Pokemon Colosseum
PORTSNATIVE

Pokemon Colosseum

NATIVE PORTSPORTSWINDOWSLINUXMACOSALPHA

Pokemon Colosseum

TechnologyNative C/C++ port (engine reimplementation)

Available forWindows, Linux, macOS

View official project

About 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

Author's original READMEOpen on GitHub ↗

Pokémon Colosseum Decompilation (GC6E01)

Progress

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.

MetricValue
Fuzzy match100.00%
Function match100.00% (8,677 / 8,677 functions)
Code match100.00% (2,504,940 / 2,504,940 matched code bytes)
Data match100.00% (3,565,996 / 3,565,996 matched data bytes)
Source-linked2,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.

Progress over time

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

  • Count-Sheep
  • wastelandgunner
  • metaisfacil
  • pixelpush-io

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.

Read official guide
CALIFICACIÓN
—
Loading votes…
Advertisement

PROJECT FILE

Project type
NATIVE PORT
Genre
Sports
Status
alpha
Original platform
—
Technology
Native C/C++ port (engine reimplementation)
Version
—
Updated
—

Target platforms 3

Windows
Linux
macOS
View on GitHub
Advertisement