Απλήρης byte-identical decompilation του Resident Evil 4 για GameCube
Πρωτότυπος τίτλος: "Resident Evil 4 (GameCube) – complete byte-identical decompilation to C/C++" (από metrofun)
Ένας προγραμματιστής κατάφερε να αποκαταστήσει τον πλήρη κώδικα του debug build του Resident Evil 4 (G4BE08) σε C/C++, ώστε η μεταγλώττιση να παράγει ακριβώς τα ίδια binary files με το αρχικό disk. Το αποθετήριο περιλαμβάνει ∼555 χιλίες γραμμές πηγαίου κώδικα, χρειάζεται μόνο τα εικόνες των δίσκων για να χτίσετε και να επαληθεύσετε την ταυτότητα με SHA‑1.
Εισαγωγή
Το Resident Evil 4 για το Nintendo GameCube (debug build G4BE08, "Nov 25 2004" prototype) έχει αποκατασταθεί πλήρως σε C/C++ ώστε η μεταγλώττιση με τα αρχικά compilers να παράγει τα ακριβώς ίδια binary files με το αρχικό disk. Το έργο δεν περιλαμβάνει κανένα περιεχόμενο παιχνιδιού· απαιτεί μόνο τα δικά σας images των δίσκων.
Τεχνικές λεπτομέρειες
- Πηγαίος κώδικας: ~555 000 γραμμές C/C++ στον φάκελο
src/και ~33 000 γραμμές κεφαλίδων στοinclude/. - Compilers:
- Game code: SN Systems ProDG 3.9.3 – GCC 2.95.3 (SN BUILD v1.79) από το GPL source drop.
- CRI middleware (ADX, SFD, MPV κ.λπ.): Metrowerks CodeWarrior 2.4.7 (GC/2.7).
- Nintendo SDK (OS, GX κ.λπ.): Metrowerks CodeWarrior GC/1.2.5n, πηγές από το dolsdk2004.
- Matching: Κάθε μονάδα μεταγλωττίζεται σε τα ακριβή bytes του αρχικού. Όταν ο compiler χρειάζεται ειδική μορφή πηγαίου κώδικα για να reproducing ένα register choice, το σημείο σημειώνεται με
// COMPILER-DIFF:(644 τέτοια). Τα παραμείναντα asm blocks είναι μόνο εκείνες οι rutines που οι αρχικοί προγραμματιστές έγραψαν σε assembly γιατί ο compiler δεν μπορούσε να τις εκφράσει (π.χ. paired‑single kernels, GQR setup, κ.λπ.).
Δομή του αποθετηρίου
src/game/– ο κύριος game κώδικας (C++), με υποφάκελους για εχθρούς (em*), όπλα (wep*), παίκτες (pl*), δωμάτια (στις RELst*), debug editors, sub‑screens κ.λπ.src/lib/– SDK, CRI και runtime κώδικας (C).include/– ανα dựngμένες δομές structs και headers.config/G4BE08/– λίστες μονάδων, symbols, splits, linker scripts, per‑module REL data και τοbuild.sha1για επαλήθευση.tools/– scripts διαμόρφωσης (configure.py), γεννήτριας build (project.py), ProDG driver (ngccc.py), εργαλεία σύγκρισης (bytecmp.py,fdiff.py), καθώς και scripts για εξαγωγή κινούμενων εικόνων (glTF/BVH).docs/– οδηγίες για την αρχιτεκτονική του engines (overview.md), την διαδικασία matching (matching.md), per‑unit notes και исследовательský журнал.
Δημιουργία και επαλήθευση
- Προετοιμασία compilers – κλोनήστε το GPL source drop του SN GCC και τρέξτε
tools/sn-gcc/build.sh(χρειάζεται μόνο μία φορά). - Εικόνες δίσκων – αντιγράψτε τα debug disc images (disc 1 για το main.dol + 110 RELs, disc 2 για τα 네 island‑stage RELs) στον φάκελο
orig/G4BE08/ωςre4_debug_disc1.isoκαιre4_debug_disc2.gcm. - Κατασκευή – εκτελέστε
python3 configure.pyκαι μετάninja. Τοninjaθα εμφανίσει 100% matched και linked. Η εντολήbuild/tools/dtk shasum -c config/G4BE08/build.sha1θα τυπώσει 115OKγραμμές. - Έλεγχος μονάδας – με
python3 tools/bytecmp.py game/fooσυγκρίνετε το αντικείμενο με το αρχικό word‑by‑word, ενώpython3 tools/fdiff.py game/foo <symbol>εμφανίζει τη διαφορά μιας συνάρτησης.
Νομικά και συνεισφορές
Το ανα dựngμένο πηγαίο κώδικα είναι ιδιοκτησία των αρχικών ιδιοκτητών (Capcom, Nintendo, CRI Middleware) και διατίθεται μόνο για έρευνα και διατήρηση. Τα build scripts, τα εργαλεία και η τεκμηρίωση του έργα είναι διαδεδομένα υπό την άδεια CC0. Οι συνεισφέροντες πρέπει να ακολουθούν τους κανόνες του CONTRIBUTING.md: δεν αλλάζουν bytes, δεν εισάγουν instruction‑emitting asm, και οι προτάσεις για μετονομασία πρέπει να υποστηρίζονται από αποδείξεις.