Esta é uma descompilação em andamento de Sly Cooper e Thievius Raccoonus para o PlayStation 2. Ela constrói a versão NTSC-U do jogo, SCUS_971.98
(SHA1: 57dc305d
).
O objetivo deste projeto é entender melhor o motor do jogo. Este repositório não contém nenhum ativo do jogo ou código original do executável do jogo; Requer sua própria cópia do jogo para ser construída e executada.
A documentação do código pode ser encontrada em theonlyzac.github.io/sly1. Para ler mais sobre as estruturas e mecânicas internas do jogo, visite o SlyMods Wiki.
Novos contribuidores são bem-vindos e incentivados a fazer uma solicitação pull! Se você gostaria de ajudar, mas não sabe por onde começar, confira CONTRIBUTING.md e sinta-se à vontade para entrar em nosso servidor Discord para obter orientação.
Você pode configurar rapidamente o projeto no Linux (ou WSL) usando o script de início rápido. Siga estas três etapas para começar.
Copie e execute o seguinte comando. Pode solicitar sua senha para instalar dependências.
git clone https://github.com/theonlyzac/sly1 &&
cd sly1 &&
./scripts/quickstart.sh
Copie o arquivo SCUS_971.98
do disco do jogo Sly 1 para o diretório disc
do projeto. É necessário construir.
./scripts/build.sh
Se funcionar, você verá isto:
[XXX/XXX] sha1sum config/checksum.sha1
out/SCUS_971.98: OK
Se você tiver algum problema ou preferir configurar o projeto manualmente, siga as instruções abaixo. Instruções para executar o jogo também são fornecidas abaixo.
O projeto pode ser construído em Linux (ou Windows usando WSL). Siga as instruções abaixo para configurar o ambiente de construção.
Clone o repositório em sua máquina local:
git clone https://github.com/TheOnlyZac/sly1
cd sly1
Para construir o projeto, você precisará extrair o arquivo ELF original de sua cópia do jogo obtida legalmente. Monte o disco no seu PC e copie o arquivo SCUS_971.98
do seu disco para o diretório disc
deste projeto.
Se você não possui o Python 3.8 ou superior, instale-o:
sudo apt-get install python3 python3-pip
Em seguida, instale os pacotes Python necessários:
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
O projeto constrói o executável SCUS_971.98
.
python3 configure.py
ninja
Se você atualizar algum arquivo de configuração ou adicionar qualquer arquivo de origem, precisará executar uma reconfiguração limpa:
python3 configure.py --clean
Para limpar apenas sem reconfigurar (ou seja, excluir arquivos de compilação), use:
python3 configure.py --only-clean
A execução do executável requer PCSX2 2.0. Você deve ter sua própria cópia do jogo original e o BIOS do seu próprio PS2. Eles não estão incluídos neste repositório e não podemos fornecê-los para você.
Depois de obtê-los e criar o executável, você pode executá-lo de uma das três maneiras:
O script run.sh
no diretório scripts
reconstruirá automaticamente o executável e o executará no emulador PCSX2. Para usá-lo, você deve primeiro editar o script para definir as variáveis PCSX2_PATH
e ISO_PATH
para os caminhos corretos em seu sistema.
Para inicializar o elf no PCSX2 a partir da linha de comando, use o seguinte comando:
pcsx2.exe -elf " .../sly1/bin/debug/SCUS_971.98 " " /path/to/game/backup.iso "
Substitua pcsx2.exe
pelo caminho do executável PCSX2 v2.0 (para Linux será um arquivo .appimage ).
-elf
especifica o caminho para o SCUS_971.98 que você construiu a partir deste projeto. Substitua ...
pelo caminho para este repositório. O emulador usará este ELF para inicializar o jogo./path/to/game/backup.iso
pelo caminho para um backup do seu próprio disco de jogo. É aqui que o jogo carregará os ativos. Copie SCUS_971.98
do diretório out
para a pasta PCSX2 Games e renomeie-o para SCUS_971.98.elf
. Clique com o botão direito no jogo no PCSX2 e clique em "Propriedades...". Vá em “Caminho do disco”, clique em “Navegar” e selecione o ISO do backup do seu jogo. Em seguida, clique em “Fechar” e inicie o jogo normalmente.
O projeto está dividido nos seguintes diretórios:
include
- Arquivos de cabeçalho para o mecanismo de jogo.src
- O código-fonte descompilado.src/P2
.src/P2/splice
.config
- Arquivos de configuração para Splat (ferramenta de divisão binária).scripts
- Scripts utilitários para configurar o ambiente de construção.docs
- Documentação e instruções para contribuir.tools
- Utilitários para correspondência de funções.reference
- Arquivos de referência para funções e estruturas de dados.Ao construir o executável, os seguintes diretórios serão criados:
asm
- Código assembly desmontado do elfo.assets
- Dados binários extraídos do elfo.obj
- Arquivos de objetos compilados.out
- Executáveis compilados. Quando os desenvolvedores criaram o jogo, eles escreveram o código-fonte e o compilaram em um código assembly que pode ser executado no PS2. Uma descompilação envolve a engenharia reversa do código assembly para produzir um código novo e original que é compilado no assembly correspondente. Esse processo nos deixa com um código-fonte semelhante e que se comporta da mesma forma que o código-fonte (embora não necessariamente idêntico), o que nos ajuda a entender o que os programadores estavam pensando quando criaram o jogo.
Usamos uma ferramenta chamada Splat para dividir o binário em arquivos assembly que representam cada função individual. Em seguida, reimplementamos todas as funções e estruturas de dados escrevendo código C++ que compila no mesmo código assembly. Não incluímos nenhum dado ou código do binário original do jogo na descompilação.
Esta foi uma das primeiras descompilação do PS2; Vários outros foram iniciados desde que começamos em 2020. Nossa principal inspiração foram outros projetos, como a decomposição de Super Mario 64 para o N64 e a decomposição de Breath of the Wild para o Wii U (este último sendo mais semelhante em escopo a este projeto) . Há também uma porta decomp/PC Jak & Daxter chamada OpenGOAL, embora esse jogo seja 98% da linguagem GOAL em vez de C/C++.
Sim. Este foi o primeiro projeto de descompilação do PS2 direcionado ao PS2 e utilizou correspondência de funções, antes mesmo de ser possível produzir um executável de correspondência de bytes. Construímos um elfo correspondente desde julho de 2024. O objetivo final é combinar 100% das funções do jogo.
Se você quiser contribuir, confira CONTRIBUTING.md e fique à vontade para entrar em nosso servidor discord se tiver alguma dúvida!