|
Digimon World 3 decomp
The European version, SLES_039.36
|
| Version | Code | Data | Functions |
|---|---|---|---|
πͺπΊ Europe (SLES_039.36) | |||
πΊπΈ USA (SLUS_014.36) | |||
π―π΅ Japan (SLPS_034.46) |
   
A work in progress matching decompilation of Digimon World 3 for the PlayStation: C source that compiles back into byte-identical copies of the game's executable, its overlays and its stages. The European release, Digimon World 2003 (SLES_039.36), the most complete one, is the main version: the build's default and the one decomp.dev shows first. The USA release, Digimon World 3 (SLUS_014.36), builds from the same C and matches byte for byte too. The Japanese release, Digimon World 3: Aratanaru Bouken no Tobira (SLPS_034.46), builds from the same C and matches byte for byte as well.
This repository does not contain any game data. You need your own copy of the game to build it.
Each rectangle is a unit, sized by its code; green means it matches. Click it for the details on decomp.dev.
Measured with make report on each version, and written by tools/status_tables.py; the badges above are always current:
| Part | Version | Functions in C | Code | Data |
|---|---|---|---|---|
| Executable, game code | Europe | 346 / 346 | 100.00 % | 100.00 % |
| USA | 346 / 346 | 100.00 % | 100.00 % | |
| Japan | 346 / 346 | 100.00 % | 100.00 % | |
| The 21 overlays | Europe | 1,670 / 1,670 | 100.00 % | 100.00 % |
| USA | 1,665 / 1,665 | 100.00 % | 100.00 % | |
| Japan | 1,670 / 1,670 | 100.00 % | 100.00 % | |
| The stages (293, 238 and 293) | Europe | 1,590 / 1,590 | 100.00 % | 100.00 % |
| USA | 1,369 / 1,369 | 100.00 % | 100.00 % | |
| Japan | 1,590 / 1,590 | 100.00 % | 100.00 % | |
| Total | Europe | 3,606 / 3,606 | 100.00 % | 100.00 % |
| USA | 3,380 / 3,380 | 100.00 % | 100.00 % | |
| Japan | 3,606 / 3,606 | 100.00 % | 100.00 % |
On Debian or Ubuntu (the CI uses Ubuntu 24.04 and Python 3.12), install:
Or build in Docker instead (below).
Clone with the submodules (maspsx, m2c, decomp-permuter and the PsyQ headers), create the Python environment, which must be active whenever you run make or the scripts in tools/, and download the prebuilt tools (GCC 2.8.1 for the PSX, objdiff-cli and mkpsxiso) into bin/, checked against tools/deps.sha256:
Each disc goes in its own disks/<version>/. Extract it with tools/extract_disc.py, which also reaches the AAA/ directories, and check the executable:
Only disks/<version>/<executable> and disks/<version>/AAA/PRO/ are needed, and only for the versions you build. config/<version>/ holds the SHA-1 of every original binary, which make compare checks the build against: <executable>.sha1, overlays.sha1 and stages.sha1.
The same steps build each version, with VERSION set to eu, us or jp (eu when it is left out):
make compare prints one OK per binary, and a change only counts once every line still says OK: 261 lines for us (the executable, 21 overlays and 239 stages, WSTAG260 among them), 316 for eu and for jp (the executable, 21 overlays and 294 stages):
The CI builds and compares every version on every push.
make VERSION=<version> regenerate deletes asm/<version>/, build/<version>/, expected/<version>/ and assets/<version>/, and splits the binaries again. Run it after changing a config/<version>/*.yaml, a symbol file or stages.txt, so that no stale files stay behind in asm/<version>/.
tools/docker.sh builds the CI's build environment from the Dockerfile (Ubuntu 24.04, the MIPS binutils, Python and the prebuilt tools, no game data) and runs a command in it, as your own user; without a command it opens a shell. No bin/ or .venv is needed on the host. With the submodules and the disc files in disks/ as above:
docs/toolchain.md has the details.
The CI runs these on every push; run them before opening a pull request:
docs/shifting.md explains shiftcheck and padcheck, docs/toolchain.md lint, and docs/status.md the report.
make docs builds it locally).make docs), the repository's layout and its tools.shiftcheck, padcheck, inputcheck).Read CONTRIBUTING.md before opening a pull request. In short: every function starts as an INCLUDE_ASM line in src/. To decompile one, get a first draft from m2c, make it match with tools/try_match.py, objdiff and, for a near miss, the permuter, then replace the INCLUDE_ASM with it and check that make compare still says OK for every binary of every version.
The PsyQ functions were named from the PsyQ 4.7 signatures.