{
  "added_at": "2026-10-28",
  "additional_evidence_urls": [
    "https://github.com/doldecomp/ttyd/blob/62131fc31866f85a12e4817a8dc37f0c25eb5f8c/configure.py",
    "https://github.com/doldecomp/ttyd/blob/62131fc31866f85a12e4817a8dc37f0c25eb5f8c/config/G8MJ01/config.yml",
    "https://github.com/doldecomp/ttyd/blob/62131fc31866f85a12e4817a8dc37f0c25eb5f8c/config/G8MJ01/build.sha1",
    "https://github.com/doldecomp/ttyd/blob/62131fc31866f85a12e4817a8dc37f0c25eb5f8c/tools/project.py",
    "https://github.com/doldecomp/ttyd/blob/62131fc31866f85a12e4817a8dc37f0c25eb5f8c/src/pmario_sound.c",
    "https://github.com/doldecomp/ttyd/blob/62131fc31866f85a12e4817a8dc37f0c25eb5f8c/tools/ttydasm/src/cli.rs",
    "https://github.com/doldecomp/ttyd/blob/62131fc31866f85a12e4817a8dc37f0c25eb5f8c/.github/workflows/build.yml",
    "https://github.com/doldecomp/ttyd/blob/62131fc31866f85a12e4817a8dc37f0c25eb5f8c/LICENSE",
    "https://decomp.dev/doldecomp/ttyd"
  ],
  "category": "reconstruction-cases",
  "description_en": "A work-in-progress matching decompilation of Paper Mario: The Thousand-Year Door that targets the Japanese Rev 0 GameCube release (G8MJ01), rebuilding MarioSt.dol and 31 REL modules with the original Metrowerks compilers and checking each against a stored SHA-1. The build splits these binaries from a user-supplied disc image, and objdiff compares objects during development. decomp.dev reported 12.10% of code matched at the reviewed commit.",
  "description_zh": "《纸片马力欧 RPG》（Paper Mario: The Thousand-Year Door）的进行中一致性反编译，目标为日版 Rev 0 GameCube 版本（G8MJ01）：用原版 Metrowerks 编译器重建 MarioSt.dol 和 31 个 REL 模块，并逐一与仓库保存的 SHA-1 比对。构建从使用者自备的光盘镜像中拆分这些二进制，开发时用 objdiff 比对目标文件。decomp.dev 报告所审提交有 12.10% 的代码已匹配。",
  "entry_url": "https://awesomerea.org/resources/paper-mario-ttyd-decomp-case/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/paper-mario-ttyd-decomp-case/",
  "evidence_url": "https://github.com/doldecomp/ttyd/blob/62131fc31866f85a12e4817a8dc37f0c25eb5f8c/README.md",
  "group": "cases",
  "id": "paper-mario-ttyd-decomp-case",
  "json_url": "https://awesomerea.org/resources/paper-mario-ttyd-decomp-case/record.json",
  "kind": "case-study",
  "markdown_url": "https://awesomerea.org/resources/paper-mario-ttyd-decomp-case/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/paper-mario-ttyd-decomp-case/index.md",
  "name": "Paper Mario: The Thousand-Year Door: an early matching GameCube decompilation",
  "name_zh": "《纸片马力欧 RPG》：早期阶段的 GameCube 一致性反编译",
  "reconstruction_method": "matching-decompilation",
  "record_type": "resource",
  "relationship": "independent-reconstruction",
  "requirements": [
    "README lists one supported version, G8MJ01 (Rev 0, JP); configure.py defines no other version and CI builds only G8MJ01. README still carries template leftovers: its badges point at another project, its clone command names NWPlayer123/G8MJ01-dtk and one line calls G8MJ01 the USA version. The output is a GameCube DOL and REL set, not a PC port.",
    "Copy your own G8MJ01 disc image to orig/G8MJ01; ISO (GCM), RVZ, WIA, WBFS, CISO, NFS, GCZ and TGC images are accepted. README says the repository contains no game assets or assembly: decomp-toolkit splits main.dol and the RELs using committed symbol and split tables, and extracts the memory-card icon and banner textures from the DOL into local headers. Decompiled sources such as src/pmario_sound.c also carry game data tables reconstructed as C.",
    "Builds need Python and ninja on Windows (native tooling recommended), macOS (with wine-crossover) or Linux (an automatically downloaded wibo on x86, Wine elsewhere). configure.py pins decomp-toolkit v1.8.3, objdiff v3.7.1, binutils 2.42-2, sjiswrap v1.2.2, wibo 1.1.0 and the 20260305 compiler bundle, using Metrowerks GC/2.6 for game and REL code and GC/1.2.5n for the Dolphin SDK. tools/ttydasm is a Rust helper that decodes a named event script from the linked DOL or REL outputs in build/G8MJ01.",
    "Objects marked Matching (100 of 547 in configure.py) are compiled from source and the rest come from the split originals; the default ninja target checks the DOL and all RELs against config/G8MJ01/build.sha1 before reporting progress. CI builds G8MJ01 in a container that supplies the disc files and compilers and uploads a progress report. decomp.dev’s report for the pinned commit lists 457,800 of 3,784,980 code bytes (12.10%) and 2,029 of 9,770 functions matched, with 100 of 1,239 units complete.",
    "The repository carries the MIT License (copyright NWPlayer123), and libs/musyx has its own MIT license; neither covers Nintendo’s game, disc contents or the downloaded compilers."
  ],
  "requirements_zh": [
    "README 只列出一个支持版本 G8MJ01（Rev 0，日版）；configure.py 未定义其他版本，CI 也只构建 G8MJ01。README 仍留有模板残余：徽章指向另一个项目，克隆命令写的是 NWPlayer123/G8MJ01-dtk，另有一行把 G8MJ01 称为美版。产物是 GameCube DOL 和 REL 组，不是 PC 移植。",
    "需将自己的 G8MJ01 光盘镜像复制到 orig/G8MJ01，可接受 ISO（GCM）、RVZ、WIA、WBFS、CISO、NFS、GCZ 和 TGC 格式。README 称仓库不含任何游戏素材或汇编：decomp-toolkit 依据仓库提交的符号表和拆分表拆分 main.dol 与各 REL，并从 DOL 中把记忆卡图标和横幅纹理提取为本地头文件。src/pmario_sound.c 等反编译源文件中也包含以 C 重建的游戏数据表。",
    "构建需要 Python 与 ninja，可在 Windows（推荐原生工具）、macOS（需 wine-crossover）或 Linux（x86 上自动下载 wibo，其他架构用 Wine）上进行。configure.py 固定 decomp-toolkit v1.8.3、objdiff v3.7.1、binutils 2.42-2、sjiswrap v1.2.2、wibo 1.1.0 及 20260305 编译器包；游戏和 REL 代码使用 Metrowerks GC/2.6，Dolphin SDK 使用 GC/1.2.5n。tools/ttydasm 是一个 Rust 辅助工具，可从 build/G8MJ01 中链接好的 DOL 或 REL 产物里解码指定的事件脚本。",
    "标为 Matching 的目标文件（configure.py 中 547 个里有 100 个）由源码编译，其余取自拆分出的原始文件；默认 ninja 目标会先按 config/G8MJ01/build.sha1 校验 DOL 和全部 REL，再报告进度。CI 在提供光盘文件和编译器的容器中构建 G8MJ01，并上传进度报告。decomp.dev 针对该固定提交的报告显示，3,784,980 个代码字节中有 457,800 个（12.10%）、9,770 个函数中有 2,029 个已匹配，1,239 个单元中有 100 个已完成。",
    "仓库采用 MIT 许可证（版权归 NWPlayer123），libs/musyx 另有其 MIT 许可证；两者都不涵盖任天堂的游戏、光盘内容或下载的编译器。"
  ],
  "targets": [
    "game"
  ],
  "url": "https://github.com/doldecomp/ttyd",
  "verification": "source-reviewed",
  "verified_at": "2026-10-19"
}
