Home Modding Una prima decompilazione di Castlevania: Symphony of the Night apre il gioco...

Una prima decompilazione di Castlevania: Symphony of the Night apre il gioco per future piattaforme

591
0

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.

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 checksumNome fileProgresso
54828d4e44ea9575f2a0917ff63def42a304abffmain.exeN/A
2eac5f7162e77416166c2511c787995488f01c37DRA.BIN
adb3303e1ea707c63dfa978511a88cab4f61970aST/MAD.BIN
5d06216b895ab5ff892c88b0d9eff67ff16e2bd1ST/NO3.BIN
7c78a2bec6a26acfb62456e7f517915fe0c0e3f5ST/NP3.BIN

Build

  1. 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.
  2. Posizionare il file main.exe dal file SLUS_000.67, DRA.BIN e la cartella ST nella directory principale della repository.
  3. Eseguire make extract per generare i file assembly.
  4. Eseguire make all per compilare i binari nella directory build/.

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 invocare python3 ./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

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.