هذا هو تفكيك قيد التنفيذ لـ Sly Cooper وThievius Raccoonus لجهاز PlayStation 2. وهو يبني إصدار 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
انسخ الملف SCUS_971.98
من قرص لعبة Sly 1 إلى دليل disc
الخاص بالمشروع. هناك حاجة للبناء.
./scripts/build.sh
إذا نجح الأمر، سترى هذا:
[XXX/XXX] sha1sum config/checksum.sha1
out/SCUS_971.98: OK
إذا كانت لديك أية مشكلات، أو كنت تفضل إعداد المشروع يدويًا، فاتبع الإرشادات أدناه. يتم أيضًا توفير تعليمات تشغيل اللعبة أدناه.
يمكن بناء المشروع على Linux (أو Windows باستخدام WSL). اتبع الإرشادات أدناه لإعداد بيئة البناء.
استنساخ الريبو على جهازك المحلي:
git clone https://github.com/TheOnlyZac/sly1
cd sly1
لبناء المشروع، ستحتاج إلى استخراج ملف ELF الأصلي من نسختك القانونية من اللعبة. قم بتثبيت القرص على جهاز الكمبيوتر الخاص بك وانسخ الملف SCUS_971.98
من القرص الخاص بك إلى دليل disc
الخاص بهذا المشروع.
إذا لم يكن لديك Python 3.8 أو أعلى، فقم بتثبيته:
sudo apt-get install python3 python3-pip
ثم قم بتثبيت حزم بايثون المطلوبة:
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. يجب أن يكون لديك نسختك الخاصة من اللعبة الأصلية ونظام BIOS من جهاز PS2 الخاص بك. لم يتم تضمينها في هذا الريبو ولا يمكننا توفيرها لك.
بمجرد حصولك على هذه العناصر وإنشاء الملف القابل للتنفيذ، يمكنك تشغيله بإحدى الطرق الثلاث:
سيقوم البرنامج النصي run.sh
الموجود في دليل scripts
تلقائيًا بإعادة إنشاء الملف القابل للتنفيذ وتشغيله في محاكي PCSX2. لاستخدامه، يجب عليك أولاً تحرير البرنامج النصي لتعيين متغيرات PCSX2_PATH
و ISO_PATH
على المسارات الصحيحة على نظامك.
لتشغيل القزم في PCSX2 من سطر الأوامر، استخدم الأمر التالي:
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 الخاص بك وأعد تسميته إلى SCUS_971.98.elf
. انقر بزر الماوس الأيمن على اللعبة في PCSX2 وانقر على "خصائص...". انتقل إلى "مسار القرص"، وانقر فوق "استعراض"، وحدد ISO للنسخة الاحتياطية للعبة. ثم انقر فوق "إغلاق" وابدأ اللعبة كالمعتاد.
وينقسم المشروع إلى الدلائل التالية:
include
- ملفات الرأس لمحرك اللعبة.src
- كود المصدر الذي تم فك ترجمته.src/P2
.src/P2/splice
.config
- ملفات التكوين لـ Splat (أداة التقسيم الثنائي).scripts
- البرامج النصية المساعدة لإعداد بيئة البناء.docs
- وثائق وتعليمات المساهمة.tools
- أدوات مساعدة لمطابقة الوظائف.reference
- الملفات المرجعية للوظائف وهياكل البيانات.عند إنشاء الملف القابل للتنفيذ، سيتم إنشاء الدلائل التالية:
asm
- رمز التجميع المفكك من العفريت.assets
- البيانات الثنائية المستخرجة من القزم.obj
- ملفات الكائنات المترجمة.out
- الملفات التنفيذية المترجمة. عندما أنشأ المطورون اللعبة، كتبوا كود المصدر وقاموا بتجميعه إلى كود التجميع الذي يمكن تشغيله على PS2. يتضمن فك التجميع إجراء هندسة عكسية لرمز التجميع لإنتاج كود أصلي جديد يتم تجميعه لتجميع مطابق. تتركنا هذه العملية مع كود المصدر الذي يشبه الكود المصدري ويتصرف بنفس الطريقة (على الرغم من أنه ليس متطابقًا بالضرورة)، مما يساعدنا على فهم ما كان يفكر فيه المبرمجون عندما صنعوا اللعبة.
نحن نستخدم أداة تسمى Splat لتقسيم الملف الثنائي إلى ملفات تجميع تمثل كل وظيفة على حدة. نقوم بعد ذلك بإعادة تنفيذ كل وظيفة وبنية بيانات عن طريق كتابة كود C++ الذي يتم تجميعه إلى نفس رمز التجميع. نحن لا نقوم بتضمين أي بيانات أو تعليمات برمجية من اللعبة الثنائية الأصلية في عملية التفكيك.
كانت هذه واحدة من أولى عمليات إلغاء تجميع PS2؛ بدأ العديد من المشاريع الأخرى منذ أن بدأنا في عام 2020. كان مصدر إلهامنا الرئيسي هو مشاريع أخرى مثل Super Mario 64 decomp لجهاز N64 وBreath of the Wild decomp لجهاز Wii U (الأخير أكثر تشابهًا في نطاقه مع هذا المشروع) . يوجد أيضًا منفذ Jak & Daxter decomp/PC يسمى OpenGOAL، على الرغم من أن هذه اللعبة تعتمد لغة GOAL بنسبة 98% بدلاً من لغة C/C++.
نعم. كان هذا أول مشروع لتفكيك PS2 يستهدف PS2 ويستخدم مطابقة الوظائف، قبل أن يكون من الممكن إنتاج ملف قابل للتنفيذ لمطابقة البايت. لقد بنينا قزمًا مطابقًا منذ يوليو 2024. الهدف النهائي هو مطابقة وظائف اللعبة بنسبة 100%.
إذا كنت ترغب في المساهمة، قم بزيارة CONTRIBUTING.md ولا تتردد في الانضمام إلى خادم Discord الخاص بنا إذا كانت لديك أي أسئلة!