Il developer Luciano Ciccariello ha dato il via ad una prima decompilazione di Castlevania: Symphony of the Night per console PSX.

La decompilazione potrebbe portare al cross-port di mappe AOS, DOS, POR e OOE, aggiungere il supporto 16:9, aggiungere mappe della versione Saturn e quant’altro.
I am proud to announce I am working on a Castlevania Symphony of the Night decompilation: https://t.co/qf199guf7R
It aims to help various side projects that emerged in the last few years (eg. SOTN on the Megadrive, SOTN Hacked, speed runners, etc.)
— Luciano Ciccariello (@xeeynamo) February 5, 2022
Di certo la più interessante sembrerebbe la realizzazione di porting nativi per altre piattaforme (ad esempio su console Nintendo Switch e GCW Zero) o anche solo creare editor adeguati per la realizzazione di nuove mod.
Attualmente il codice ricompilabile permette di creare binari 1:1 per il videogioco commerciale Castlevania: Symphony of the Night per PlayStation 1. La repository mira comunque a creare una decompilazione completa in C.
Revisione del gioco
Tutti i file si riferiscono alla versione SLUS-00067 del gioco.
| SHA-1 checksum | Nome file | Progresso |
| 54828d4e44ea9575f2a0917ff63def42a304abff | main.exe | N/A |
| 2eac5f7162e77416166c2511c787995488f01c37 | DRA.BIN | |
| adb3303e1ea707c63dfa978511a88cab4f61970a | ST/MAD.BIN | |
| 5d06216b895ab5ff892c88b0d9eff67ff16e2bd1 | ST/NO3.BIN | |
| 7c78a2bec6a26acfb62456e7f517915fe0c0e3f5 | ST/NP3.BIN |
Build
- Hai bisogno di
gcc-mipsel-linux-gnuche puoi facilmente installare su qualsiasi distribuzione Linux basata su Debian. Su Windows si consiglia vivamente di utilizzare solo Ubuntu con WSL. - Posizionare il file
main.exedal fileSLUS_000.67,DRA.BINe la cartellaSTnella directory principale della repository. - Eseguire
make extractper generare i file assembly. - Eseguire
make allper compilare i binari nella directorybuild/.
Verificare la corrispondenza delle funzioni
Grazie ad asm-differ puoi verificare se una funzione scritta in C corrisponde alla sua controparte assembly.
- Assicurati di risolvere il sottomodulo con
git submodule update --init. - Assicurati di creare un binario corrispondente con
make clean && make extract && make all && mkdir expected && cp -r build expected/. - Scegliere una funzione da abbinare (es.
func_8018E964), un overlay (es.st/mad) e quindi invocarepython3 ./tools/asm-differ/diff.py -mwo --overlay st/mad func_8018E964.
Costruzione non corrispondente
Alcune funzioni non corrispondenti sono presenti nel codice sorgente disabilitate dalla macro NON_MATCHING. Puoi ancora compilare i binari del gioco eseguendo CPP_FLAGS=-DNON_MATCHING make.
In teoria potrebbero essere logicamente equivalenti nel gioco, ma non posso prometterlo. Pochi di loro potrebbero corrispondere ottimizzando o modificando il compilatore.
Dettagli tecnici
Il gioco è diviso in tre moduli:
mainè il vero motore del gioco. Contiene tutta la logica necessaria per interagire con il gamepad, il CD, la memory card, la SPU e per renderizzare gli sprite sullo schermo. Sembra non contenere alcuna logica di gioco di per sé.DRAè il gioco stesso. Contiene il gameloop e l’API necessaria per disegnare mappe, entità, livelli di carico, gestire entità, animazioni e collisioni. Contiene anche alcuni dati comuni come gli sprite di Alucard, gli sprite delle candele e il layout delle sale comuni (salvataggio, caricamento, teletrasporto).ST/sono le sovrapposizioni per ciascuna area. Un’area (ad es. l’ingresso del castello, il laboratorio di alchimia, ecc..) contiene tutta la logica unica per gestire eventi specifici della mappa, filmati, IA dei nemici, collisioni e altro ancora. Contiene anche il layout delle stanze e delle entità.
Note
- Sospetto che GCC 2.7.2/PSY-Q 3.6 sia stato originariamente utilizzato per compilare
DRA.BIN. main.exeutilizza librerie PS-X che potrebbero essere state create con un compilatore diverso e con-O1anziché-O2.
Prossimamente
Il progetto è molto scarno al momento e c’è un enorme margine di miglioramento, principalmente nell’infrastruttura:
- Non tutti gli overlay di zona (
ST/{ZONE}/{ZONE}.BIN) sono smontati. - Non esiste una pipeline CI/CD per verificare la correttezza del codice compilato.
Download: Source code sotn-decomp
Fonte: twitter.com
![[Scena PS5] Rilasciato PS5 Lua Web-Menu v0.2: La webApp per gestire facilmente payload e homebrew](https://www.biteyourconsole.net/wp-content/uploads/LuaMenu-238x178.webp)
![[Scena PS5] Rilasciato PS5 Y2JB Autoloader v0.2.1: Nuova gestione degli update e miglioramenti ai payload](https://www.biteyourconsole.net/wp-content/uploads/Y2JB-238x178.webp)
![[Scena PS5] Rilasciato Y2JB Updater v1.1: il nuovo strumento di itsPLK semplifica gli update dell’exploit PS5](https://www.biteyourconsole.net/wp-content/uploads/Y2JBUpdater-238x178.webp)
![[Scena PS5] Rilasciato PS5 Lua Web-Menu v0.2: La webApp per gestire facilmente payload e homebrew](https://www.biteyourconsole.net/wp-content/uploads/LuaMenu-100x75.webp)
![[Scena PS5] Rilasciato PS5 Y2JB Autoloader v0.2.1: Nuova gestione degli update e miglioramenti ai payload](https://www.biteyourconsole.net/wp-content/uploads/Y2JB-100x75.webp)
![[Scena PS5] Rilasciato Y2JB Updater v1.1: il nuovo strumento di itsPLK semplifica gli update dell’exploit PS5](https://www.biteyourconsole.net/wp-content/uploads/Y2JBUpdater-100x75.webp)

![[Scena PS5] Rilasciato PS5 Payload Web Server v0.26](https://www.biteyourconsole.net/wp-content/uploads/PS5Payload-100x75.webp)
