이것은 PlayStation 2용 Sly Cooper와 Thievius Raccoonus 의 진행 중인 디컴파일입니다. 게임의 NTSC-U 버전 SCUS_971.98
(SHA1: 57dc305d
)을 빌드합니다.
이 프로젝트의 목표는 게임 엔진을 더 잘 이해하는 것입니다. 이 저장소에는 게임 자산이나 게임 실행 파일의 원본 코드가 포함되어 있지 않습니다. 빌드하고 실행하려면 자신만의 게임 복사본이 필요합니다.
코드 문서는 theonlyzac.github.io/sly1에서 찾을 수 있습니다. 게임의 내부 구조와 메커니즘에 대해 더 자세히 알아보려면 SlyMods Wiki를 방문하세요.
새로운 기여자를 환영하며 끌어오기 요청을 하도록 권장합니다! 도움을 주고 싶지만 어디서부터 시작해야 할지 모르겠다면 CONTRIBUTING.md를 확인하고 Discord 서버에 자유롭게 가입하여 안내를 받으세요.
빠른 시작 스크립트를 사용하여 Linux(또는 WSL)에서 프로젝트를 빠르게 설정할 수 있습니다. 시작하려면 다음 세 단계를 따르세요.
다음 명령을 복사하여 실행합니다. 종속성을 설치하려면 비밀번호를 물어볼 수 있습니다.
git clone https://github.com/theonlyzac/sly1 &&
cd sly1 &&
./scripts/quickstart.sh
Sly 1 게임 디스크의 SCUS_971.98
파일을 프로젝트의 disc
디렉터리에 복사합니다. 구축하는 데 필요합니다.
./scripts/build.sh
작동하면 다음과 같이 표시됩니다.
[XXX/XXX] sha1sum config/checksum.sha1
out/SCUS_971.98: OK
문제가 있거나 프로젝트를 수동으로 설정하려는 경우 아래 지침을 따르세요. 게임 실행 지침도 아래에 제공됩니다.
프로젝트는 Linux(또는 WSL을 사용하는 Windows)에서 빌드할 수 있습니다. 아래 지침에 따라 빌드 환경을 설정하세요.
저장소를 로컬 머신에 복제합니다.
git clone https://github.com/TheOnlyZac/sly1
cd sly1
프로젝트를 빌드하려면 합법적으로 얻은 게임 복사본에서 원본 ELF 파일을 추출해야 합니다. PC에 디스크를 마운트하고 디스크의 SCUS_971.98
파일을 이 프로젝트의 disc
디렉터리에 복사합니다.
Python 3.8 이상이 없으면 설치하세요.
sudo apt-get install python3 python3-pip
그런 다음 필요한 Python 패키지를 설치합니다.
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
프로젝트는 SCUS_971.98
실행 파일을 빌드합니다.
python3 configure.py
ninja
구성 파일을 업데이트하거나 소스 파일을 추가하는 경우 완전한 재구성을 실행해야 합니다.
python3 configure.py --clean
재구성하지 않고 정리만 하려면(예: 빌드 파일 삭제) 다음을 사용하십시오.
python3 configure.py --only-clean
실행 파일을 실행하려면 PCSX2 2.0이 필요합니다. 자신의 PS2에 있는 원본 게임과 BIOS의 사본이 있어야 합니다. 이는 이 저장소에 포함되어 있지 않으며 귀하에게 제공할 수 없습니다.
해당 항목이 있고 실행 파일을 빌드한 후에는 다음 세 가지 방법 중 하나로 실행할 수 있습니다.
scripts
디렉토리의 run.sh
스크립트는 실행 파일을 자동으로 다시 빌드하고 PCSX2 에뮬레이터에서 실행합니다. 이를 사용하려면 먼저 스크립트를 편집하여 PCSX2_PATH
및 ISO_PATH
변수를 시스템의 올바른 경로로 설정해야 합니다.
명령줄에서 PCSX2의 elf를 부팅하려면 다음 명령을 사용하십시오.
pcsx2.exe -elf " .../sly1/bin/debug/SCUS_971.98 " " /path/to/game/backup.iso "
pcsx2.exe
PCSX2 v2.0 실행 파일의 경로로 바꾸십시오(Linux의 경우 .appimage 파일임).
-elf
매개변수는 이 프로젝트에서 빌드한 SCUS_971.98에 대한 경로를 지정합니다. ...
이 저장소의 경로로 바꾸십시오. 에뮬레이터는 이 ELF를 사용하여 게임을 부팅합니다./path/to/game/backup.iso
자신의 게임 디스크 백업 경로로 바꾸십시오. 게임이 자산을 로드하는 위치입니다. out
디렉터리의 SCUS_971.98
PCSX2 Games 폴더에 복사하고 이름을 SCUS_971.98.elf
로 바꿉니다. PCSX2에서 게임을 마우스 오른쪽 버튼으로 클릭하고 "속성..."을 클릭합니다. "디스크 경로"로 이동하여 "찾아보기"를 클릭하고 게임 백업의 ISO를 선택하세요. 그런 다음 "닫기"를 클릭하고 정상적으로 게임을 시작하십시오.
프로젝트는 다음 디렉터리로 구분됩니다.
include
- 게임 엔진용 헤더 파일입니다.src
- 디컴파일된 소스 코드입니다.src/P2
에 있습니다.src/P2/splice
에 있습니다.config
- Splat(바이너리 분할 도구)용 구성 파일입니다.scripts
- 빌드 환경을 설정하기 위한 유틸리티 스크립트입니다.docs
- 기여를 위한 문서 및 지침.tools
- 기능 일치를 위한 유틸리티입니다.reference
- 함수 및 데이터 구조에 대한 참조 파일입니다.실행 파일을 빌드하면 다음 디렉터리가 생성됩니다.
asm
- elf에서 분해된 어셈블리 코드입니다.assets
- 엘프에서 추출된 바이너리 데이터입니다.obj
- 컴파일된 개체 파일입니다.out
- 컴파일된 실행 파일입니다. 개발자들은 게임을 만들 때 소스 코드를 작성하고 이를 PS2에서 실행할 수 있는 어셈블리 코드로 컴파일했습니다. 디컴파일에는 어셈블리 코드를 리버스 엔지니어링하여 일치하는 어셈블리로 컴파일되는 새로운 원본 코드를 생성하는 작업이 포함됩니다. 이 프로세스를 통해 소스 코드와 유사하고 동일하게 작동하는(반드시 동일하지는 않지만) 소스 코드가 남게 되며, 이는 프로그래머가 게임을 만들 때 무슨 생각을 했는지 이해하는 데 도움이 됩니다.
우리는 Splat이라는 도구를 사용하여 바이너리를 각 개별 기능을 나타내는 어셈블리 파일로 분할합니다. 그런 다음 동일한 어셈블리 코드로 컴파일되는 C++ 코드를 작성하여 모든 함수와 데이터 구조를 다시 구현합니다. 디컴파일에는 원본 게임 바이너리의 데이터나 코드가 포함되지 않습니다.
이것은 최초의 PS2 디컴파일 중 하나였습니다. 2020년에 시작한 이래로 다른 여러 프로젝트가 시작되었습니다. 우리의 주요 영감은 N64용 Super Mario 64 분해 및 Wii U용 Breath of the Wild 분해와 같은 다른 프로젝트에서 나왔습니다(후자가 이 프로젝트와 범위가 더 유사함). . OpenGOAL이라는 Jak & Daxter 분해/PC 포트도 있지만 해당 게임은 C/C++가 아닌 98% GOAL 언어입니다.
예. 이것은 바이트 일치 실행 파일을 생성하는 것이 가능하기도 전에 PS2를 대상으로 하고 기능 일치를 활용한 최초의 PS2 디컴파일 프로젝트였습니다. 저희는 2024년 7월부터 매칭 엘프를 구축해왔습니다. 최종 목표는 게임 기능을 100% 매칭하는 것입니다.
기여하고 싶다면 CONTRIBUTING.md를 확인하고 궁금한 점이 있으면 언제든지 Discord 서버에 가입하세요!