これは、PlayStation 2 用のSly Cooper and the Thievius Raccoonusの進行中の逆コンパイルです。これは、ゲームの NTSC-U バージョンSCUS_971.98
(SHA1: 57dc305d
) をビルドします。
このプロジェクトの目標は、ゲーム エンジンをより深く理解することです。このリポジトリには、ゲーム アセットやゲームの実行可能ファイルの元のコードは含まれません。ビルドして実行するには、独自のゲームのコピーが必要です。
コードのドキュメントは、theonlyzac.github.io/sly1 にあります。ゲームの内部構造と仕組みの詳細については、SlyMods Wiki を参照してください。
新しいコントリビューターは歓迎されており、プル リクエストを行うことをお勧めします。支援したいがどこから始めればよいかわからない場合は、CONTRIBUTING.md をチェックし、ガイダンスのためにお気軽に Discord サーバーに参加してください。
クイックスタート スクリプトを使用すると、Linux (または WSL) 上でプロジェクトをすばやくセットアップできます。次の 3 つの手順に従って開始してください。
次のコマンドをコピーして実行します。依存関係をインストールするためにパスワードを要求される場合があります。
git clone https://github.com/theonlyzac/sly1 &&
cd sly1 &&
./scripts/quickstart.sh
ファイルSCUS_971.98
Sly 1 ゲーム ディスクからプロジェクトの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 が必要です。これらはこのリポジトリには含まれていないため、提供することはできません。
これらを入手して実行可能ファイルをビルドしたら、次の 3 つの方法のいずれかで実行できます。
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 逆コンパイルの 1 つでした。 2020 年に開始して以来、他にもいくつかのプロジェクトが開始されました。私たちの主なインスピレーションは、N64 用のスーパー マリオ 64 デコンプや Wii U 用のブレス オブ ザ ワイルド デコンプなどの他のプロジェクトでした (後者はこのプロジェクトと範囲がより似ています)。 。 OpenGOAL と呼ばれる Jak & Daxter のデコンプ/PC ポートもありますが、そのゲームは 98% が C/C++ ではなく GOAL 言語です。
はい。これは、バイト マッチングの実行可能ファイルを作成することさえ可能になる前に、PS2 をターゲットにし、関数マッチングを利用した最初の PS2 逆コンパイル プロジェクトでした。私たちは 2024 年 7 月から一致するエルフを構築してきました。最終的な目標は、ゲームの機能を 100% 一致させることです。
貢献したい場合は、CONTRIBUTING.md をチェックしてください。質問がある場合は、お気軽に Discord サーバーに参加してください。