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-gnu
che 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.exe
dal fileSLUS_000.67
,DRA.BIN
e la cartellaST
nella directory principale della repository. - Eseguire
make extract
per generare i file assembly. - Eseguire
make all
per 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.exe
utilizza librerie PS-X che potrebbero essere state create con un compilatore diverso e con-O1
anziché-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