Il s'agit d'une décompilation en cours de travail de Sly Cooper et Thievius Raccoonus pour la PlayStation 2. Elle construit la version NTSC-U du jeu, SCUS_971.98
(SHA1 : 57dc305d
).
Le but de ce projet est de mieux comprendre le moteur du jeu. Ce référentiel ne contient aucun élément de jeu ni code original de l'exécutable du jeu ; Il nécessite votre propre copie du jeu pour être construit et exécuté.
La documentation du code peut être trouvée sur theonlyzac.github.io/sly1. Pour en savoir plus sur les structures et mécanismes internes du jeu, visitez le wiki SlyMods.
Les nouveaux contributeurs sont les bienvenus et encouragés à faire une pull request ! Si vous souhaitez aider mais ne savez pas par où commencer, consultez CONTRIBUTING.md et n'hésitez pas à rejoindre notre serveur Discord pour obtenir des conseils.
Vous pouvez rapidement configurer le projet sous Linux (ou WSL) à l'aide du script de démarrage rapide. Suivez ces trois étapes pour commencer.
Copiez et exécutez la commande suivante. Il peut vous demander votre mot de passe pour installer des dépendances.
git clone https://github.com/theonlyzac/sly1 &&
cd sly1 &&
./scripts/quickstart.sh
Copiez le fichier SCUS_971.98
de votre disque de jeu Sly 1 vers le répertoire disc
du projet. Il faut construire.
./scripts/build.sh
Si cela fonctionne, vous verrez ceci :
[XXX/XXX] sha1sum config/checksum.sha1
out/SCUS_971.98: OK
Si vous rencontrez des problèmes ou si vous préférez configurer le projet manuellement, suivez les instructions ci-dessous. Les instructions pour exécuter le jeu sont également fournies ci-dessous.
Le projet peut être construit sous Linux (ou Windows via WSL). Suivez les instructions ci-dessous pour configurer l'environnement de construction.
Clonez le dépôt sur votre machine locale :
git clone https://github.com/TheOnlyZac/sly1
cd sly1
Pour construire le projet, vous devrez extraire le fichier ELF original de votre propre copie du jeu obtenue légalement. Montez le disque sur votre PC et copiez le fichier SCUS_971.98
de votre disque vers le répertoire disc
de ce projet.
Si vous n'avez pas Python 3.8 ou supérieur, installez-le :
sudo apt-get install python3 python3-pip
Installez ensuite les packages Python requis :
pip3 install -U -r requirements.txt
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install wine32
sudo apt-get install binutils-mips-linux-gnu
cd scripts
./setup-progd-linux.sh
Le projet construit l'exécutable SCUS_971.98
.
python3 configure.py
ninja
Si vous mettez à jour des fichiers de configuration ou ajoutez des fichiers sources, vous devrez exécuter une nouvelle reconfiguration :
python3 configure.py --clean
Pour nettoyer uniquement sans reconfigurer (c'est-à-dire supprimer les fichiers de construction), utilisez :
python3 configure.py --only-clean
L'exécution de l'exécutable nécessite PCSX2 2.0. Vous devez disposer de votre propre copie du jeu original et du BIOS de votre propre PS2. Ils ne sont pas inclus dans ce dépôt et nous ne pouvons pas vous les fournir.
Une fois que vous les avez et que vous avez construit l'exécutable, vous pouvez l'exécuter de trois manières :
Le script run.sh
dans le répertoire scripts
reconstruira automatiquement l'exécutable et l'exécutera dans l'émulateur PCSX2. Pour l'utiliser, vous devez d'abord modifier le script pour définir les variables PCSX2_PATH
et ISO_PATH
sur les chemins corrects sur votre système.
Pour démarrer l'elfe dans PCSX2 à partir de la ligne de commande, utilisez la commande suivante :
pcsx2.exe -elf " .../sly1/bin/debug/SCUS_971.98 " " /path/to/game/backup.iso "
Remplacez pcsx2.exe
par le chemin d'accès à votre exécutable PCSX2 v2.0 (pour Linux, ce sera un fichier .appimage ).
-elf
spécifie le chemin d'accès au SCUS_971.98 que vous avez créé à partir de ce projet. Remplacez ...
par le chemin d'accès à ce référentiel. L'émulateur utilisera cet ELF pour démarrer le jeu./path/to/game/backup.iso
par le chemin d'accès à une sauvegarde de votre propre disque de jeu. C'est de là que le jeu chargera les ressources. Copiez SCUS_971.98
du répertoire out
vers votre dossier PCSX2 Games et renommez-le en SCUS_971.98.elf
. Faites un clic droit sur le jeu dans PCSX2 et cliquez sur "Propriétés...". Allez dans « Chemin du disque », cliquez sur « Parcourir » et sélectionnez l'ISO de votre sauvegarde de jeu. Cliquez ensuite sur « Fermer » et démarrez le jeu normalement.
Le projet est divisé dans les répertoires suivants :
include
- Fichiers d'en-tête pour le moteur de jeu.src
- Le code source décompilé.src/P2
.src/P2/splice
.config
- Fichiers de configuration pour Splat (outil de fractionnement binaire).scripts
- Scripts utilitaires pour configurer l'environnement de construction.docs
- Documentation et instructions pour contribuer.tools
- Utilitaires pour la correspondance des fonctions.reference
- Fichiers de référence pour les fonctions et les structures de données.Lorsque vous construisez l'exécutable, les répertoires suivants seront créés :
asm
- Code d'assemblage démonté de l'elfe.assets
- Données binaires extraites de l'elfe.obj
- Fichiers objets compilés.out
- Exécutables compilés. Lorsque les développeurs ont créé le jeu, ils ont écrit le code source et l'ont compilé en code assembleur pouvant s'exécuter sur la PS2. Une décompilation implique une rétro-ingénierie du code assembleur pour produire un nouveau code original qui se compile en assembly correspondant. Ce processus nous laisse avec un code source similaire et se comportant de la même manière (mais pas nécessairement identique), ce qui nous aide à comprendre ce que pensaient les programmeurs lorsqu'ils ont créé le jeu.
Nous utilisons un outil appelé Splat pour diviser le binaire en fichiers assembleur représentant chaque fonction individuelle. Nous réimplémentons ensuite chaque fonction et structure de données en écrivant du code C++ qui se compile dans le même code assembleur. Nous n'incluons aucune donnée ou code du binaire original du jeu dans la décompilation.
Ce fut l'une des premières décompilations PS2 ; Plusieurs autres ont été lancés depuis nos débuts en 2020. Notre inspiration principale était d'autres projets tels que la décomp. Super Mario 64 pour la N64 et la décomp. Breath of the Wild pour la Wii U (cette dernière ayant une portée plus similaire à celle de ce projet). . Il existe également un port de décomp/PC Jak & Daxter appelé OpenGOAL, bien que ce jeu soit à 98 % en langage GOAL plutôt qu'en C/C++.
Oui. Il s'agissait du premier projet de décompilation PS2 ciblant la PS2 et utilisant la correspondance de fonctions, avant même qu'il ne soit possible de produire un exécutable de correspondance d'octets. Nous construisons un elfe correspondant depuis juillet 2024. Le but ultime est de faire correspondre 100 % des fonctions du jeu.
Si vous souhaitez contribuer, consultez CONTRIBUTING.md et n'hésitez pas à rejoindre notre serveur Discord si vous avez des questions !