Esta es una descompilación en progreso de Sly Cooper y Thievius Raccoonus para PlayStation 2. Crea la versión NTSC-U del juego, SCUS_971.98
(SHA1: 57dc305d
).
El objetivo de este proyecto es comprender mejor el motor del juego. Este repositorio no contiene ningún activo del juego ni código original del ejecutable del juego; Requiere tu propia copia del juego para compilarlo y ejecutarlo.
La documentación del código se puede encontrar en theonlyzac.github.io/sly1. Para obtener más información sobre las estructuras y mecánicas internas del juego, visita SlyMods Wiki.
¡Los nuevos contribuyentes son bienvenidos y se les anima a realizar una solicitud de extracción! Si desea ayudar pero no está seguro de por dónde empezar, consulte CONTRIBUTING.md y no dude en unirse a nuestro servidor de Discord para obtener orientación.
Puede configurar rápidamente el proyecto en Linux (o WSL) utilizando el script de inicio rápido. Siga estos tres pasos para comenzar.
Copie y ejecute el siguiente comando. Es posible que le solicite su contraseña para instalar dependencias.
git clone https://github.com/theonlyzac/sly1 &&
cd sly1 &&
./scripts/quickstart.sh
Copie el archivo SCUS_971.98
del disco del juego Sly 1 al directorio disc
del proyecto. Es necesario construir.
./scripts/build.sh
Si funciona, verás esto:
[XXX/XXX] sha1sum config/checksum.sha1
out/SCUS_971.98: OK
Si tiene algún problema o prefiere configurar el proyecto manualmente, siga las instrucciones a continuación. Las instrucciones para ejecutar el juego también se proporcionan a continuación.
El proyecto se puede construir en Linux (o Windows usando WSL). Siga las instrucciones a continuación para configurar el entorno de compilación.
Clona el repositorio en tu máquina local:
git clone https://github.com/TheOnlyZac/sly1
cd sly1
Para construir el proyecto, necesitarás extraer el archivo ELF original de tu propia copia del juego obtenida legalmente. Monte el disco en su PC y copie el archivo SCUS_971.98
de su disco al directorio disc
de este proyecto.
Si no tienes Python 3.8 o superior, instálalo:
sudo apt-get install python3 python3-pip
Luego instale los paquetes de Python necesarios:
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
El proyecto construye el ejecutable SCUS_971.98
.
python3 configure.py
ninja
Si actualiza algún archivo de configuración o agrega algún archivo fuente, necesitará ejecutar una reconfiguración limpia:
python3 configure.py --clean
Para limpiar solo sin reconfigurar (es decir, eliminar archivos de compilación), use:
python3 configure.py --only-clean
La ejecución del ejecutable requiere PCSX2 2.0. Debes tener tu propia copia del juego original y la BIOS de tu propia PS2. No están incluidos en este repositorio y no podemos proporcionárselos.
Una vez que los tenga y haya creado el ejecutable, puede ejecutarlo de una de estas tres maneras:
El script run.sh
en el directorio scripts
reconstruirá automáticamente el ejecutable y lo ejecutará en el emulador PCSX2. Para usarlo, primero debe editar el script para configurar las variables PCSX2_PATH
e ISO_PATH
en las rutas correctas en su sistema.
Para iniciar elf en PCSX2 desde la línea de comando, use el siguiente comando:
pcsx2.exe -elf " .../sly1/bin/debug/SCUS_971.98 " " /path/to/game/backup.iso "
Reemplace pcsx2.exe
con la ruta a su ejecutable PCSX2 v2.0 (para Linux será un archivo .appimage ).
-elf
especifica la ruta al SCUS_971.98 que creó a partir de este proyecto. Reemplace ...
con la ruta a este repositorio. El emulador utilizará este ELF para iniciar el juego./path/to/game/backup.iso
con la ruta a una copia de seguridad de tu propio disco de juego. Aquí es desde donde el juego cargará los recursos. Copie SCUS_971.98
del directorio out
a su carpeta de Juegos PCSX2 y cámbiele el nombre a SCUS_971.98.elf
. Haz clic derecho en el juego en PCSX2 y haz clic en "Propiedades...". Vaya a "Ruta del disco", haga clic en "Examinar" y seleccione la ISO de la copia de seguridad de su juego. Luego haz clic en "Cerrar" y comienza el juego normalmente.
El proyecto se divide en los siguientes directorios:
include
: archivos de encabezado para el motor del juego.src
: el código fuente descompilado.src/P2
.src/P2/splice
.config
: archivos de configuración para Splat (herramienta de división binaria).scripts
: scripts de utilidad para configurar el entorno de compilación.docs
: documentación e instrucciones para contribuir.tools
- Utilidades para la coincidencia de funciones.reference
: archivos de referencia para funciones y estructuras de datos.Cuando construya el ejecutable, se crearán los siguientes directorios:
asm
: código ensamblador desensamblado del elf.assets
: datos binarios extraídos del elfo.obj
: archivos objeto compilados.out
: ejecutables compilados. Cuando los desarrolladores crearon el juego, escribieron el código fuente y lo compilaron en código ensamblador que puede ejecutarse en la PS2. Una descompilación implica aplicar ingeniería inversa al código ensamblador para producir código nuevo y original que se compila en un ensamblador coincidente. Este proceso nos deja con un código fuente que es similar y se comporta igual que el código fuente (aunque no necesariamente idéntico), lo que nos ayuda a comprender qué estaban pensando los programadores cuando crearon el juego.
Usamos una herramienta llamada Splat para dividir el binario en archivos ensambladores que representan cada función individual. Luego volvemos a implementar cada función y estructura de datos escribiendo código C++ que se compila en el mismo código ensamblador. No incluimos ningún dato o código del binario original del juego en la descompilación.
Esta fue una de las primeras descompilaciones de PS2; Se han iniciado varios otros desde que comenzamos en 2020. Nuestra principal inspiración fueron otros proyectos como la descomposición de Super Mario 64 para N64 y la descomposición de Breath of the Wild para Wii U (este último tiene un alcance más similar a este proyecto). . También hay un puerto de descomp/PC de Jak & Daxter llamado OpenGOAL, aunque ese juego es 98% lenguaje GOAL en lugar de C/C++.
Sí. Este fue el primer proyecto de descompilación de PS2 que se centró en la PS2 y utilizó la coincidencia de funciones, antes de que fuera posible producir un ejecutable de coincidencia de bytes. Hemos construido un elfo coincidente desde julio de 2024. El objetivo final es igualar el 100% de las funciones del juego.
Si desea contribuir, visite CONTRIBUTING.md y siéntase libre de unirse a nuestro servidor de Discord si tiene alguna pregunta.