Medal of Honor: Rising Sun
OriginGameCube
TechnologyNative C/C++ port (engine reimplementation)
Available forWindows, Linux, macOS
View official projectAbout the project
Medal of Honor: Rising Sun es un videojuego de disparos en primera persona basado en las batallas libradas durante la Segunda Guerra Mundial en el Océano Pacífico, desde el bombardeo de Pearl Harbor hasta las calles de Singapur.
Official project information
Medal of Honor: Rising Sun
An early matching decompilation of Medal of Honor: Rising Sun for GameCube, targeting the USA release GR8E69, Disc 1, revision 0. The initial game-code target is the disc's MOH3RDVD.ELF.
See current matching progress and unfinished functions on decomp.dev. The project combines reconstructed game-specific C++ with compatible public library reconstructions, including Lua, Dolphin SDK, Newlib, GCC runtime, STLport and network helpers. Accepted source is checked against the original executable as part of a complete rebuilt analysis-image comparison. The remainder stays original binary context. AI-assisted contributions are welcome; see CONTRIBUTING.md.
Progress counts verified, nonoverlapping source-built function bytes against all bytes in the original executable sections (.init and .text). Generated data and BSS are verified separately and earn no code-progress credit; neither do stripped functions, original context or debug metadata. Exact counts and input hashes live in the verified snapshot. See how progress is verified and published and the reuse index for library provenance, evidence and next work.
Verified starting point
MOH3RDVD.ELF: 3,628,980 bytes; SHA-1dd797412be7d631e78c98f194a1bb47981174d75.- 15,507 symbol entries, including 9,883 function entries and 954 source-file entries. Entries are not necessarily unique functions or complete original source units.
- Preserved DWARF 1 information covers seven Nintendo GBA-library compilation units. It is not full game-wide type information.
- The original-object relink matches the complete 2,860,576-byte DOL derived from the ELF, including its header. Every original allocated ELF file byte, entry point, and BSS extent is checked separately.
- Accepted game and library source passes that same complete-image comparison. Code and generated data are both checked; reconstructed game code and restored library code are reported separately. The project manifest lists accepted units and fragments.
This comparison is against a derived analysis image. It does not mean the original ELF's debug/symbol tables have been reproduced, the on-disc boot DOL has been replaced, or the game has been tested in an emulator. The boot DOL is a separate 206,016-byte program containing references to the game ELFs.
Join the project — AI-assisted contributions welcome
Want to help bring Rising Sun back to readable source? Human and AI-assisted contributions are welcome: reconstruct game functions, investigate compiler behavior, improve verification tools, document evidence, or test the loading path. You do not need to use AI to contribute. AI-generated suggestions receive the same review and byte-verification requirements as other changes.
Start with the next work below and contribution guide. Open an issue to coordinate a source unit or investigation, then send a focused pull request with your evidence, verification results and any AI assistance used. Pseudonymous contributors are welcome. Preserve upstream credit and license notices.
Bring your own game copy for local verification. This repository contains source, configuration and tooling; please do not upload game images, executable binaries, assets, compiler binaries or complete debug dumps to commits, issues or PRs.
Research notes
The research notes index collects contributor investigations and their GameCube comparisons. Thanks to kyleckroeger for sharing PS2 research on FlexProp names, particle recipes, script instructions, class descriptions, gameplay data, interactive music, runtime timing and camera behavior. These notes provide leads for reconstruction; each topic separates its evidence and open questions from verified matching source.
Progress integration
Explore the live decomp.dev map to find unfinished functions. The remaining code is divided into grey boxes: named file groups where supported by symbols, unknown-file groups, shared entry points and unidentified bytes. Inferred ownership is labeled and earns no matching credit. See code-map evidence and starting points and the reuse index and ranked next work. The new direct dependency map ranks shared helpers by unfinished callers and preserves unresolved indirect calls.
The progress workflow publishes an objdiff v2
GR8E69_report artifact compatible with decomp.dev. CI validates source hashes
against a locally verified snapshot; it does not rebuild the game. Source changes
require a fresh local complete-image verification before their progress can be
published. See progress reporting and registration.
Local setup
Requires Python 3.9+ on macOS ARM64 or Linux x86-64 (including WSL2). On macOS, source compilation also uses existing Rosetta support; on Linux, wibo runs the Windows compilers natively. Tools are downloaded into ignored build/tools/ and build/compiler/ with pinned SHA-256 checksums. ProDG 3.8.1 with -O2 -G0 is the working MathFun profile; the restored Lua library adds -ffast-math and uses native unused-function stripping. The SDK units use CodeWarrior GC/1.2.5n; EXI uses -O3,p, the other SDK units use -O4,p, with -opt nopeep for the documented fragments. Newlib libc uses ProDG 3.8.1 with -O2 -G8 -fsigned-char -DMB_CAPABLE; math uses -O2 -G1024 -fno-builtin -msafe-sda and the language profiles in Newlib.md. GCC runtime helpers use -O2 -G8. The script interpreter handlers use ProDG 3.9.3; see Script.md for the compiler comparison and accepted scope. The original compiler releases remain unconfirmed.
python3 tools/import_disc.py "/path/to/Medal of Honor - Rising Sun (USA) (Disc 1).nkit.iso"
python3 tools/setup.py
python3 tools/audit.py
python3 tools/baseline.py
python3 tools/reconstruct.py
python3 -m unittest discover -s tests -v
The importer reads the standard GameCube filesystem table, including the provided uncompressed NKit v01 image. It extracts only four pinned executables into orig/GR8E69/, checks their sizes and SHA-1/SHA-256 digests, and leaves the input image untouched. This does not recover or verify a full retail-disc image. Other compressed formats and other revisions are not currently supported.
Run the scripts from any directory; all outputs remain inside this checkout. baseline.py and reconstruct.py recreate their own build directories, so keep experiments under scratch/.
Outputs
| Path | Contents |
|---|---|
config/GR8E69/target.json | Executable identities and hashes |
config/GR8E69/baseline.json | Entry point, SDA bases and comparison layout |
build/audit/summary.json | Section and symbol statistics |
build/audit/symbols.json | Complete local symbol inventory |
build/audit/dwarf.txt | Local debug-information dump |
build/audit/elf-config/ | Experimental dtk symbol/split exports |
build/baseline/report.json | Verified baseline result, with zero source credit |
build/baseline/relinked.dol | Rebuilt analysis image |
build/audit/dependencies.json | Local direct-branch dependency graph and research ranking (python3 tools/dependencies.py) |
src/matrix/, include/game/CMatrix.h, include/game/CVector3.h | Reconstructed matrix and vector functions and their shared layouts |
src/quaternion/, src/geometry/ | Reconstructed quaternion conversions, line geometry and integer-angle helpers, with scoped storage evidence |
src/camera/, include/game/Camera.h, include/game/Frustum.h | Reconstructed camera projection, view/clip updates and frustum transforms, guided by contributed runtime research |
src/sys_memory.cpp, src/memory/ | Reconstructed game allocation operators and MemStack lifecycle; original heap routines remain external |
src/stlport/ | Tree, container, sorting and heap functions using an attributed STLport 4.5.3 subset |
src/eagl/ | Reconstructed rendering state and material drawing fragments; evidence and remaining work |
src/eagl_anim/ | Reconstructed animation decoders, channels and support interfaces; reference and evidence |
src/eagl_loading/ | Reconstructed EAGL symbol pools and dynamic-loader fragments; reference and evidence |
src/particles/, src/flexprop/, src/string_crc.cpp | Reconstructed particle recipes, state, pool and clock helpers, FlexProp loading, lookup and string CRC |
src/scene/, include/game/SceneNode.h | Recovered scene-node virtual-slot order and base-class defaults |
src/script/ | Reconstructed all opcode handlers, timers, message registrations, spatial access, projectile aiming, fog and camera controls, music, ambience, objective and value built-ins, and AI behavior, player, event and stub built-ins, guided by contributed PS2 research, the Frontline GameCube reconstruction and independent GameCube analysis |
src/bpd/, src/endian/ | Reconstructed BPD/property conversion, pointer setup, cleanup and lighting-volume point test |
src/ai/, src/bpd/load_properties.cpp, src/bpd/load_bsp.cpp | Reconstructed property loaders, spline walking, locomotion and AI clock, with scoped record and allocation evidence |
src/ai/target*.cpp, include/game/AITargeting.h | Reconstructed AI target values, script-target updates, spatial queries, aim-mode choices and blind fire |
src/lighting/, include/game/Light.h | Reconstructed light-volume selection and transitions, scene-light transforms and animated-light lifecycle |
src/bullets/, include/game/Bullet.h | Reconstructed bullet defaults, accessors and collision helpers |
src/triggers/ | Reconstructed trigger initialization, property/transform queries, startup sizing, player starts and machine-gun searches |
src/sound/ | Reconstructed ambient-track and sound accessors |
src/player/ | Reconstructed camera-shake initialization, evaluation and player wrappers, plus path controls and spline evaluation |
src/objectives/ | Reconstructed objective initialization, status and visibility helpers |
src/observers/ | Reconstructed observers, weak pointers and destruction queue; evidence |
src/frontend/ | Reconstructed uppercase conversion and front-end string hash, guided by the EA reference comparison |
src/MathFun.cpp, src/mathfun/ | Reconstructed angles, rotations, pan/tilt, random helpers and clamp templates |
src/lua/ | Restored Lua 4.0.1 source units, headers and copyright notice |
src/dolphin/, include/dolphin-sdk/ | Accepted SDK source units, reference headers and attribution |
src/newlib/, include/newlib/ | Accepted Newlib units, supporting headers and attribution |
src/libgcc/ | Verified GCC 2.95.2 runtime helpers, target configuration and notices |
config/GR8E69/MathFun.json | Function ranges, external references and compiler profile |
config/GR8E69/project.json | Accepted unit list, source provenance and fixed progress denominator |
build/reconstruction/report.json | Full-image result and source/tool fingerprints |
build/reconstruction/units/ | Per-unit compiler, linker and generated-section output |
build/reconstruction/rebuilt.dol | Analysis image containing all accepted compiled source |
progress/GR8E69.snapshot.json | Verification metadata, source hashes and unfinished-code map; no original bytes |
build/progress/report.json | Generated objdiff v2 progress for decomp.dev |
The automatic dtk ELF split export emits warnings for this executable's symbol ordering. Treat it as research output; it is not accepted source ownership. The baseline uses a separate original-object split and retains every compared byte.
Next work
- Extend the animation formats using the shared delta-decoder interfaces and attributed NFS reference, and the rendering reconstruction through its remaining lighting blocks, startup registration and PCode interpreter. The reuse index ranks other candidates, including matrix, container, string and allocation helpers. Preserve the documented limits of shared storage views; establish missing types and constant ownership before adding callers that depend on them.
- Distinguish the original compiler release using larger functions. Five tested SN/ProDG versions match the accepted fragment, so its byte match alone cannot identify the original release. Nintendo libraries may use different compilers.
- Extend the network-library subset by recovering the older target's behavior and storage; the remaining TCP, UDP, PPP and Ethernet reference routines differ. Continue shared game-code reconstruction alongside library restoration. Only compiled source bytes that pass complete-image verification count toward progress.
- Inspect Disc 2 and test the game's executable-loading path before claiming complete game coverage or a runnable replacement disc.
See the initial audit for evidence and limitations.
License
Original project contributions are dedicated under CC0 1.0 Universal, to the extent contributors hold the relevant rights. Third-party source and adaptations retain their existing terms and notices; the dedication grants no rights in the original game or its assets. See licensing scope and third-party notices.
Tooling
Uses decomp-toolkit 1.8.4, gc-wii-binutils 2.42-2, and wibo 1.0.3. The project layout follows the separation of originals, source and build output documented by dtk-template; its standard CodeWarrior build configuration has not been adopted for the SN-compiled game code.