Decompilation of Castlevania: Symphony of the Night (PSX+Saturn)
Go to file
Luciano Ciccariello 9532b90fc5 Queue CI actions by branch
This avoids the problem of merging multiple pull requests in a short
span. Usually what happens is the generate-duplicate-report is slow
and since it updates a branch in the repo there are occasiosn where
multiple actions would update the same branch concurrently. This will
always result in an execution failure. By disabling the concurrency it
is possible to fix this behaviour. Actions are queued by branch, job
name and event name refs-head-master-build-and-test-pull_request_target
which will still allow multiple PR jobs to run by their own and isolated
2023-04-29 08:23:10 +01:00
.github/workflows Queue CI actions by branch 2023-04-29 08:23:10 +01:00
.vscode Remove shared VSCode settings 2023-03-16 12:31:37 +00:00
asm/us/main/psxsdk Change assembly location from asm/ to asm/us/ 2023-02-21 19:12:52 +00:00
bin Update compiler to use little endian 2023-04-05 19:19:14 +01:00
config NZ0 EntitySkeleton (#201) 2023-04-29 07:56:42 +01:00
disks Change how game assets are managed 2023-02-21 23:25:31 +00:00
docs SEL + DRE + WRP functions + docs (#138) 2023-03-07 19:04:21 +00:00
include NZ0 EntitySkeleton (#201) 2023-04-29 07:56:42 +01:00
src NZ0 EntitySkeleton (#201) 2023-04-29 07:56:42 +01:00
tools RIC extract spritesheet (#199) 2023-04-22 21:03:55 +01:00
.clang-format Revert "Update clang-format" 2023-01-10 21:05:14 +00:00
.gitignore Update compiler to use little endian 2023-04-05 19:19:14 +01:00
.gitmodules Decompile code with make 2022-10-15 11:45:20 +01:00
CNAME Create CNAME 2022-10-18 23:52:54 +01:00
diff_settings.py Fix diff 2023-02-21 22:03:18 +00:00
go.work Add tool to extract the game image 2022-12-26 20:37:34 +00:00
Makefile RIC extract spritesheet (#199) 2023-04-22 21:03:55 +01:00
README.md Update README and wiki 2023-03-28 22:08:41 +01:00

Castlevania: Symphony of the Night Decompilation

A work-in-progress decompilation of Castlevania Symphony of the Night for PlayStation 1. It aims to recreate the source code from the existing binaries using static and/or dynamic analysis. The code compiles byte-for-byte to the same binaries of the game, effectively being a matching decompilation. Currently it only supports the US version of the game SLUS-00067.

This repo does not include any assets or assembly code necessary for compiling the binaries. A prior copy of the game is required to extract the required assets.

Bins decomp progress

File name Code coverage Decomp functions Description
SLUS_000.67 N/A N/A Shared libraries
DRA.BIN code coverage DRA.BIN decompiled functions Game engine
BIN/RIC.BIN code coverage RIC.BIN decompiled functions Playable Richter
ST/CEN/CEN.BIN code coverage CEN.BIN decompiled functions Center
ST/DRE/DRE.BIN code coverage DRE.BIN decompiled functions Nightmare
ST/MAD/MAD.BIN code coverage MAD.BIN decompiled functions Debug Room
ST/NO3/NO3.BIN code coverage NO3.BIN decompiled functions Entrance (first visit)
ST/NP3/NP3.BIN code coverage NP3.BIN decompiled functions Entrance
ST/NZ0/NZ0.BIN code coverage NZ0.BIN decompiled functions Alchemy Laboratory
ST/SEL/SEL.BIN code coverage SEL.BIN decompiled functions Title screen
ST/ST0/ST0.BIN code coverage ST0.BIN decompiled functions Final Stage: Bloodlines
ST/WRP/WRP.BIN code coverage WRP.BIN decompiled functions Warp Room
ST/RWRP/RWRP.BIN code coverage RWRP.BIN decompiled functions Warp Room (reverse)
SERVANT/TT_000.BIN code coverage TT_000.BIN decompiled functions Bat Familiar

Code coverage means how many bytes of code have been successfully converted from assembly into C code, while decomp function is how many functions have been succesfully decompiled.

Decompiling a game is a mastodontic task. If you have computer science knowledge, please join us in this journey. Any contribution will be very appreciated!

Special thanks

This project is possible thanks to the hard work of tools provided by the Decompilation community:

  • mips2c from @matt-kempster to decompile MIPS assembly into C. This proven to be more accurate than Hexrays IDA and Ghidra.
  • splat from @ethteck to disassemble code and extract data with a symbol map. This tool provides the fundamental of the SOTN decomp.
  • asm-differ from @simonlindholm to know how the decompiled code compares to the original binary.
  • decomp-permuter from @simonlindholm to pick different versions of the same code that better matches the original binary.
  • decomp.me by @ethteck, @nanaian and @mkst to provide a collaborative decompilation site to share and contribute to work-in-progress decompiled functions.
  • frogress by @ethteck to store and retrieve progression data.
  • esa-new by @mkst as an inspiration on how to set-up a PS1 decompilation project.
  • oot as an inspiration of what it is possible to achieve with a complete decompiled video game.