2022-01-24 20:41:45 +00:00
2022-01-20 22:21:40 +00:00
2022-01-02 13:35:44 +00:00
2022-01-02 13:35:44 +00:00
2022-01-24 00:19:58 +00:00
2022-01-24 00:19:58 +00:00
2022-01-24 00:19:58 +00:00
2022-01-20 22:21:40 +00:00
2022-01-02 13:35:44 +00:00
2022-01-24 20:41:45 +00:00
2022-01-20 22:21:40 +00:00
2022-01-24 20:41:45 +00:00
2022-01-20 22:21:40 +00:00

Castlevania: Symphony of the Night disassembly

Recompilable code that creates 1:1 binaries for the commercial videogame Castlevania: Symphony of the Night for the PlayStation 1. This repository aims to create a full decompilation in C.

Game revision

SHA-1 checksum File name Version Progress
54828d4e44ea9575f2a0917ff63def42a304abff main.exe SLUS-00067 N/A
2eac5f7162e77416166c2511c787995488f01c37 DRA.BIN SLUS-00067 progress DRA.BIN
adb3303e1ea707c63dfa978511a88cab4f61970a ST/MAD.BIN SLUS-00067 progress MAD.BIN
5d06216b895ab5ff892c88b0d9eff67ff16e2bd1 ST/NO3.BIN SLUS-00067 progress NO3.BIN

Build

  1. You need gcc-mipsel-linux-gnu that you can easily install on any Debian-based Linux distribution. On Windows it is highly recommended to just use Ubuntu with WSL
  2. Place your main.exe from the file SLUS_000.67 and DRA.BIN in the root directory
  3. Run make extract to generate the assembly files
  4. Run make all to compile the binaries into the build/ directory

Check for function matching

Thanks to asm-differ you can check if a funtion written in C matches its assembly counterpart.

  1. Be sure to resolve the submodule with git submodule update --init
  2. Ensure to create a matching binary with make clean && make extract && make all && mkdir expected && cp -r build expected/
  3. Choose a function to match (eg. func_8018E964), an overlay (eg. st/mad) and then invoke python3 ./tools/asm-differ/diff.py -mwo --overlay st/mad func_8018E964

Non-matching build

Some of the functions that do not fully match the original game can be compiled by defining #define NON_MATCHING on a header file or by passing `-DNON_MATCHING to the compiler. In theory they might be logically equivalent in-game, but I cannot promise that. Few of them could match by tuning or changing the compiler.

Notes

  • I suspect that GCC 2.7.2 / PSY-Q 3.6 have been used to originally compile DRA.BIN
  • main.exe uses PS-X libraries that might've been created with a different compiler and with -O1 rather than -O2

To do

The project is very barebone at the moment and there is a massive room of improvement, mostly in the infrastructure:

  • The zone overlays (ST/{ZONE}/{ZONE}.BIN) are not yet disassembled
  • There is no CI/CD pipeline to test the correctness of the compiled code
Description
Decompilation of Castlevania: Symphony of the Night (PSX+Saturn)
Readme AGPL-3.0 72 MiB
Languages
C 89%
Python 3.1%
C++ 2.8%
Go 2.8%
Rust 1.2%
Other 1.1%