นี่เป็นการถอดรหัสที่อยู่ระหว่างดำเนินการของ 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) ทำตามคำแนะนำด้านล่างเพื่อตั้งค่าสภาพแวดล้อมบิลด์
โคลน repo ไปยังเครื่องของคุณ:
git clone https://github.com/TheOnlyZac/sly1
cd sly1
ในการสร้างโปรเจ็กต์ คุณจะต้องแยกไฟล์ ELF ต้นฉบับออกจากสำเนาเกมที่คุณได้รับอย่างถูกกฎหมาย ติดตั้งแผ่นดิสก์บนพีซีของคุณและคัดลอกไฟล์ 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 คุณต้องมีสำเนาของเกมต้นฉบับและ BIOS จาก PS2 ของคุณเอง สิ่งเหล่านี้ไม่รวมอยู่ใน repo นี้ และเราไม่สามารถจัดหาให้คุณได้
เมื่อคุณมีสิ่งเหล่านี้และได้สร้างไฟล์ปฏิบัติการแล้ว คุณสามารถรันมันได้ด้วยวิธีใดวิธีหนึ่งจากสามวิธี:
สคริปต์ run.sh
ใน scripts
dir จะสร้างไฟล์ปฏิบัติการขึ้นมาใหม่โดยอัตโนมัติและรันในโปรแกรมจำลอง 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
dir ไปยังโฟลเดอร์ PCSX2 Games ของคุณ และเปลี่ยนชื่อเป็น SCUS_971.98.elf
คลิกขวาที่เกมใน PCSX2 แล้วคลิก "Properties..." ไปที่ "เส้นทางของดิสก์" คลิก "เรียกดู" และเลือก 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 สำหรับ N64 และการแยกส่วน Breath of the Wild สำหรับ Wii U (อย่างหลังมีขอบเขตคล้ายกับโปรเจ็กต์นี้มากกว่า) . นอกจากนี้ยังมีพอร์ต Jak & Daxter decomp/PC ที่เรียกว่า OpenGOAL แม้ว่าเกมนั้นจะเป็นภาษา GOAL 98% แทนที่จะเป็น C/C++
ใช่. นี่เป็นโปรเจ็กต์การแยกคอมไพล์ PS2 แรกที่กำหนดเป้าหมายไปที่ PS2 และใช้การจับคู่ฟังก์ชัน ก่อนที่จะสามารถสร้างไฟล์ปฏิบัติการที่จับคู่ไบต์ได้ เราได้สร้างเอลฟ์ที่ตรงกันตั้งแต่เดือนกรกฎาคม 2024 เป้าหมายสูงสุดคือการจับคู่ฟังก์ชันของเกมให้ครบ 100%
หากคุณต้องการมีส่วนร่วม ลองดูที่ CONTRIBUTING.md และอย่าลังเลที่จะเข้าร่วมเซิร์ฟเวอร์ Discord ของเราหากคุณมีคำถามใดๆ!