{
  "added_at": "2026-10-18",
  "additional_evidence_urls": [
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/Makefile",
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/LICENSE",
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/CONTRIBUTING.md",
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/.gitmodules",
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/Dockerfile",
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/disks/README",
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/tools/requirements-debian.txt",
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/tools/sotn-assets/build.go",
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/tools/sotn-assets/check.go",
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/config/check.us.sha",
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/config/check.hd.sha",
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/config/check.pspeu.sha",
    "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/config/check.saturn.sha",
    "https://github.com/Xeeynamo/sotn-decomp/wiki/Build/720bcf3b1212d130b28bb6ccbeda2b887ea96457",
    "https://github.com/Xeeynamo/sotn-decomp/wiki/PC-Port/ebe1b37979d1a1966abb68d388b753e4407cfd3c"
  ],
  "category": "reconstruction-cases",
  "description_en": "Recreates C source for Castlevania: Symphony of the Night from its PlayStation, PSP and Saturn binaries, aiming for code that compiles byte for byte to the original game files. The work-in-progress build combines decompiled code with assets and assembly extracted from a user-supplied disc image, then checks per-version SHA-1 hashes. Native PC experiments in the same tree are documented as unfinished and are not a released port.",
  "description_zh": "从《恶魔城 月下夜想曲》的 PlayStation、PSP 和 Saturn 版二进制重建 C 源码，目标是逐字节编译出与原游戏文件一致的产物。这一进行中的构建将已反编译代码与从使用者自备光盘镜像提取的素材和汇编结合，再按版本检查 SHA-1 哈希。同一仓库中的原生 PC 实验被文档说明为尚未完成，并不是已发布的移植。",
  "entry_url": "https://awesomerea.org/resources/sotn-matching-decomp-case/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/sotn-matching-decomp-case/",
  "evidence_url": "https://github.com/Xeeynamo/sotn-decomp/blob/eddaf22fe86f5189b85fd34915afe6564f19df20/README.md",
  "group": "cases",
  "id": "sotn-matching-decomp-case",
  "json_url": "https://awesomerea.org/resources/sotn-matching-decomp-case/record.json",
  "kind": "case-study",
  "markdown_url": "https://awesomerea.org/resources/sotn-matching-decomp-case/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/sotn-matching-decomp-case/index.md",
  "name": "Castlevania: Symphony of the Night: matching decompilation across PlayStation, PSP and Saturn builds",
  "name_zh": "Castlevania: Symphony of the Night：覆盖 PlayStation、PSP 与 Saturn 版本的一致性反编译",
  "reconstruction_method": "matching-decompilation",
  "record_type": "resource",
  "relationship": "independent-reconstruction",
  "requirement_facets": [
    "scope",
    "prerequisites",
    "prerequisites",
    "testing",
    "license"
  ],
  "requirements": [
    "README describes a work-in-progress matching decompilation of four builds: us (PlayStation SLUS-00067, the reference), hd (an unreleased Japanese PS1 build found in Castlevania: Dracula X Chronicles data), pspeu (the European Dracula X Chronicles release) and saturn (the externally developed Saturn port). The Build wiki notes that some non-matching functions remain behind a NON_MATCHING macro and are not guaranteed to be functionally equivalent. README links mutable progress pages on sotn.xee.dev and decomp.dev.",
    "The repository includes no game assets and none of the assembly needed to compile; README requires a prior copy of the game. The Build wiki asks for an unmodified US PlayStation disc as BIN/CUE, while the pinned Makefile reads both PSP-derived builds from a European Dracula X Chronicles ISO and the Saturn build from a Saturn BIN/CUE, each placed under disks/ with a version-specific name.",
    "The Build wiki is tested against Ubuntu 24.04 LTS in CI and also covers Windows through WSL 2 and Arch-based distributions; a Dockerfile provides an Ubuntu Noble environment. Builds need Go, Rust, Python 3.12+, MIPS and SH binutils, a MIPS GCC, ninja and submodule tools such as m2c, maspsx, asm-differ, mipsmatch and decomp-permuter. Project-hosted prebuilt archives, including cc1-psx, mwccpsp, a Cygnus 2.7 toolchain and wibo, are checked against SHA-256 files; the Saturn build also uses dosemu.",
    "Unless SKIP_CHECK is set, the pinned build code hashes its outputs against config/check.<version>.sha, which lists main.exe, DRA.BIN, RIC.BIN and stage and overlay files for us and shorter lists for hd, pspeu and saturn. The wiki still names a make check step that the pinned Makefile does not define. These checks compare file identity for the supplied version.",
    "The Makefile also accepts a pc version and src/pc holds native-port code, but the PC Port wiki page says no working end-to-end port based on the decompilation exists yet. The repository declares AGPL-3.0, while disc images, extracted assets and assembly, and the downloaded compilers keep separate rights. CONTRIBUTING allows coding-agent assistance only for changes contributors can justify and operate manually and requires commits and pull requests without autonomous tooling."
  ],
  "requirements_zh": [
    "README 将其描述为进行中的一致性反编译，涵盖四个构建：us（PlayStation 版 SLUS-00067，为参考版本）、hd（在 Castlevania: Dracula X Chronicles 数据中发现的未发售日版 PS1 构建）、pspeu（Dracula X Chronicles 欧版）和 saturn（由外部团队开发的 Saturn 移植版）。Build wiki 说明仍有部分不一致函数置于 NON_MATCHING 宏下，不保证功能等价。README 链接 sotn.xee.dev 和 decomp.dev 上会变动的进度页面。",
    "仓库不含游戏素材，也不含编译所需的汇编；README 要求事先拥有游戏副本。Build wiki 要求未经修改的美版 PlayStation 光盘的 BIN/CUE 镜像；固定版本的 Makefile 则从欧版 Dracula X Chronicles ISO 读取两个 PSP 来源的构建，并从 Saturn 的 BIN/CUE 镜像读取 Saturn 构建，这些文件均以对应版本的名称放在 disks/ 下。",
    "Build wiki 以 CI 所用的 Ubuntu 24.04 LTS 为测试环境，也涵盖通过 WSL 2 使用 Windows 以及基于 Arch 的发行版；Dockerfile 提供 Ubuntu Noble 环境。构建需要 Go、Rust、Python 3.12+、MIPS 与 SH binutils、MIPS GCC、ninja，以及 m2c、maspsx、asm-differ、mipsmatch、decomp-permuter 等子模块工具。项目托管的预编译归档（包括 cc1-psx、mwccpsp、Cygnus 2.7 工具链和 wibo）会依据 SHA-256 文件校验；Saturn 构建还需要 dosemu。",
    "除非设置 SKIP_CHECK，固定版本的构建代码会依据 config/check.<version>.sha 对产物计算哈希：us 清单列出 main.exe、DRA.BIN、RIC.BIN 及关卡和覆盖模块文件，hd、pspeu 与 saturn 的清单较短。wiki 仍提到 make check 步骤，但固定版本的 Makefile 并未定义该目标。这些检查比较所供版本的文件一致性。",
    "Makefile 也接受 pc 版本，src/pc 中有原生移植代码，但 PC Port wiki 页面说明目前尚无基于反编译、可端到端运行的移植。仓库声明采用 AGPL-3.0，光盘镜像、提取的素材和汇编以及下载的编译器各有权利约束。CONTRIBUTING 仅允许贡献者能够说明理由并可手动操作的编码代理辅助改动，并要求提交与拉取请求不得由自主工具生成。"
  ],
  "targets": [
    "game"
  ],
  "url": "https://github.com/Xeeynamo/sotn-decomp",
  "verification": "source-reviewed",
  "verified_at": "2026-10-18"
}
