mirror of
https://github.com/Xeeynamo/sotn-decomp.git
synced 2025-02-18 20:18:55 +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
Build
- 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 - Place your
main.exe
from the fileSLUS_000.67
andDRA.BIN
in the root directory - Run
make extract
to generate the assembly files - Run
make all
to compile the binaries into thebuild/
directory
Check for function matching
Thanks to asm-differ you can check if a funtion written in C matches its assembly counterpart.
- Be sure to resolve the submodule with
git submodule update --init
- Ensure to create a matching binary with
make clean && make extract && make all && mkdir expected && cp -r build expected/
- Choose a function to match (eg.
func_8018E964
), an overlay (eg.st/mad
) and then invokepython3 ./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
Languages
C
89%
Python
3.1%
C++
2.8%
Go
2.8%
Rust
1.2%
Other
1.1%