这是针对 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
替换为您自己的游戏光盘备份的路径。这是游戏加载资源的地方。将SCUS_971.98
从out
目录复制到您的 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 的《超级马里奥 64》分解和 Wii U 的《荒野之息》分解(后者在范围上与本项目更相似) 。还有一个名为 OpenGOAL 的 Jak & Daxter decomp/PC 移植版,尽管该游戏 98% 是 GOAL 语言而不是 C/C++。
是的。这是第一个针对 PS2 并利用函数匹配的 PS2 反编译项目,甚至在它能够生成字节匹配的可执行文件之前。我们从2024年7月开始打造匹配精灵,最终目标是100%匹配游戏功能。
如果您想做出贡献,请查看 CONTRIBUTING.md,如果有任何问题,请随时加入我们的 Discord 服务器!