Penting
Repositori kami di GitHub terutama ditujukan untuk pengembangan proyek dan melacak isu-isu aktif. Sebagian besar informasi yang Anda temukan di sini berkaitan dengan pengaturan proyek untuk tujuan pengembangan dan tidak relevan bagi pengguna akhir.
Untuk panduan setup cara install dan memainkan gamenya ada video berikut yang bisa kalian simak: https://youtu.be/K84UUMnkJc4
Untuk pertanyaan atau informasi tambahan terkait proyek, kami memiliki Discord untuk diskusi di sini: https://discord.gg/VZbXMHXzWv
Selain itu, Anda dapat menemukan dokumentasi lebih lanjut dan jawaban atas pertanyaan umum di situs web utama proyek: https://opengoal.dev
Peringatan
Jangan gunakan proyek dekompilasi ini tanpa memberikan salinan permainan Anda yang dibeli secara sah. Kami tidak mendistribusikan aset apa pun dari game tersebut - Anda harus menggunakan salinan game PS2 Anda yang diperoleh secara sah. Kami mendukung setiap versi ritel PAL, NTSC, dan NTSC-J, termasuk salinan Greatest Hits.
goalc
decompiler
goal_src/
game
Proyek ini adalah untuk mem-porting Jak dan Daxter asli dan Jak II ke PC. Lebih dari 98% game ditulis dalam GOAL, bahasa Lisp khusus yang dikembangkan oleh Naughty Dog. Strategi kami adalah:
Tujuan kami adalah:
Kami mendukung Linux dan Windows pada x86-64.
Kami tidak mendukung, atau berencana untuk mendukung arsitektur ARM. Artinya ini tidak akan berjalan di perangkat seperti perangkat seluler.
Jak 1 sebagian besar dapat dimainkan dari awal hingga akhir dengan beberapa bug yang terus diperbaiki. Jak 2 sedang dalam pengembangan.
Daftar putar YouTube: https://www.youtube.com/playlist?list=PLWx9T30aAT50cLnCTY1SAbt2TtWQzKfXX
Untuk membantu dekompilasi, kami telah membuat dekompiler yang dapat memproses kode GOAL dan membongkar aset game. Kami secara manual menentukan tipe fungsi dan lokasi di mana kami yakin kode asli memiliki tipe cast (atau jika dirasa sesuai) hingga dekompiler berhasil, kemudian kami membersihkan output dari kode yang didekompilasi dengan menambahkan komentar dan menyesuaikan format, lalu menyimpannya di goal_src
.
Dekompiler kami dirancang khusus untuk memproses keluaran kompiler GOAL asli. Akibatnya, ketika diberikan cast yang benar, sering kali menghasilkan kode yang dapat langsung dimasukkan ke dalam compiler dan berfungsi dengan sempurna. Ini terus diuji sebagai bagian dari pengujian unit kami.
Sisa dari README ini diperuntukkan bagi orang-orang yang tertarik untuk membangun proyek dari sumbernya, biasanya dengan tujuan berkontribusi sebagai pengembang.
Jika ini tidak terdengar seperti Anda dan Anda hanya ingin bermain game, lihat bagian Mulai Cepat di atas
Ketiga sistem Linux didukung menggunakan Docker.
Pilih citarasa linux pilihan Anda yang didukung dan bangun image pilihan Anda
docker build -f docker/(Arch|Fedora|Ubuntu)/Dockerfile -t jak .
Ini akan membuat gambar dengan semua dependensi yang diperlukan dan sudah dibuat.
docker run -v "$(pwd)"/build:/home/jak/jak-project/build -it jak bash
Catatan: Jika Anda mengubah konten direktori build/
Anda harus menjalankan kembali perintah build
. Alternatifnya, Anda bisa mendapatkan build melalui docker cp
.
Ini akan menghubungkan folder build/
Anda ke gambar sehingga dapat memvalidasi build Anda atau mengujinya pada perangkat eksternal.
Gambar Docker dapat dihubungkan ke IDE Anda (misalnya CLion) untuk membantu mengendus kode, analisis statis, menjalankan pengujian, dan pembangunan berkelanjutan.
Sayangnya Anda masih memerlukan task runner di mesin lokal Anda untuk menjalankan game atau sebagai gantinya, jalankan game secara manual melalui perintah yang ada di Taskfile.yml
.
Instal paket dan init repositori:
sudo apt install gcc make cmake ninja-build build-essential g++ nasm clang-format libxrandr-dev libxinerama-dev libxcursor-dev libpulse-dev libxi-dev python libgl1-mesa-dev libssl-dev
sudo sh -c " $( curl --location https://taskfile.dev/install.sh ) " -- -d -b /usr/local/bin
Menyusun:
cmake -B build && cmake --build build -j 8
Jalankan tes:
./test.sh
Catatan: kami menemukan bahwa clang
dan lld
jauh lebih cepat untuk dikompilasi dan ditautkan dibandingkan gcc
, menghasilkan kode lebih cepat, dan memiliki pesan peringatan yang lebih baik. Untuk menginstalnya:
sudo apt install lld clang
dan jalankan cmake
(dalam direktori build baru) dengan:
cmake -DCMAKE_SHARED_LINKER_FLAGS= " -fuse-ld=lld " -DCMAKE_EXE_LINKER_FLAGS= " -fuse-ld=lld " -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
Instal paket dan init repositori:
sudo pacman -S cmake libpulse base-devel nasm python libx11 libxrandr libxinerama libxcursor libxi
yay -S go-task
Hanya untuk Arch, ganti task
dengan go-task
di instruksi selanjutnya.
Menyusun:
cmake -B build && cmake --build build -j 8
Jalankan tes:
./test.sh
Instal paket dan init repositori:
sudo dnf install cmake python lld clang nasm libX11-devel libXrandr-devel libXinerama-devel libXcursor-devel libXi-devel pulseaudio-libs-devel mesa-libGL-devel
sudo sh -c " $( curl --location https://taskfile.dev/install.sh ) " -- -d -b /usr/local/bin
Kompilasi dengan clang
:
cmake -DCMAKE_SHARED_LINKER_FLAGS= " -fuse-ld=lld " -DCMAKE_EXE_LINKER_FLAGS= " -fuse-ld=lld " -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -B build
cmake --build build -j $( nproc )
Jalankan tes:
./test.sh
Kami terutama menggunakan Visual Studio di Windows untuk pengembangan C++. Unduh edisi komunitas terbaru dari sini. Pada saat penulisan ini adalah Visual Studio 2022.
Anda akan memerlukan Desktop development with C++
. Ini dapat dipilih selama instalasi, atau setelah melalui Visual Studio Installer
, memodifikasi Instalasi Visual Studio.
Kalau di Windows disarankan pakai package manager, kita pakai Scoop. Ikuti langkah-langkah di bagian bawah beranda di sini untuk mendapatkannya.
Setelah Scoop diinstal, jalankan perintah berikut:
scoop install git llvm nasm python task
Kloning repositori dengan menjalankan perintah berikut di folder pilihan Anda.
git clone https://github.com/open-goal/jak-project.git
Ini akan membuat folder jak-project
, buka proyek sebagai proyek CMake melalui Visual Studio.
Kemudian bangun seluruh proyek sebagai Windows Release (clang)
. Anda juga dapat menekan Ctrl+Shift+B sebagai tombol pintas untuk Build All. Saat ini kami lebih memilih clang
di Windows dibandingkan msvc
, meskipun itu juga bisa digunakan!
CATATAN: Menjalankan game memerlukan Apple Silicon Mac yang menjalankan macOS Sequoia, atau Intel Mac.
Pastikan Anda telah menginstal alat baris perintah Xcode (ini menginstal hal-hal seperti Apple Clang). Jika tidak, Anda dapat menjalankan perintah berikut:
xcode-select --install
Di Apple Silicon, Rosetta 2 juga harus diinstal:
softwareupdate --install-rosetta
brew install cmake nasm ninja go-task clang-format
cmake -B build --preset=Release-macos-x86_64-clang
cmake --build build --parallel $(( `sysctl - n hw.logicalcpu` ))
brew install cmake ninja go-task clang-format
cmake -B build --preset=Release-macos-arm64-clang
cmake --build build --parallel $(( `sysctl - n hw.logicalcpu` ))
Anda mungkin harus menambahkan MacOS SDK ke LIBRARY_PATH
:
export LIBRARY_PATH="$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"
Jika Anda tidak ingin atau tidak bisa menggunakan Visual Studio untuk bekerja dengan proyek C++, VSCode adalah alternatif yang baik.
Ekstensi clangd
direkomendasikan dan mengharuskan clangd
berada di $PATH
Anda. Jika Anda berhasil menjalankan clangd
di terminal maka Anda sebaiknya melakukannya.
Setelah Anda membuat CMake untuk pertama kalinya, LSP clangd seharusnya dapat mengindeks proyek dan memberi Anda kecerdasan.
TODO - Pertimbangkan untuk Menyumbang Dokumentasi :)
Mendapatkan permainan berjalan melibatkan 4 langkah:
Pertama, atur pengaturan Anda sehingga skrip berikut mengetahui game mana yang Anda gunakan, dan versi apa. Untuk versi game label hitam, jalankan perintah berikut di terminal:
task set-game-jak1
task set-decomp-ntscv1
Untuk versi game lainnya, Anda perlu menggunakan perintah -set-decomp-<VERSION>
yang berbeda. Contoh untuk versi PAL:
task set-game-jak1
task set-decomp-pal
Jalankan
task --list
untuk melihat opsi lain yang tersedia
Pada saat artikel ini ditulis, hanya Jak 1 yang diharapkan dapat bekerja secara end-to-end!
Langkah pertama adalah mengekstrak isi file ISO Anda ke dalam folder iso_data/<game-name>
. Dalam kasus Jak 1 ini adalah iso_data/jak1
.
Setelah ini selesai, buka terminal di folder jak-project
dan jalankan perintah berikut:
task extract
Langkah selanjutnya adalah membangun game itu sendiri. Untuk melakukannya, di terminal yang sama jalankan perintah berikut:
task repl
Anda akan disambut dengan prompt seperti ini:
_____ _____ _____ _____ __
| | ___ ___ ___ | __ | | _ | |
| | | . | -_ | | | | | | | | __
| _____ | _ | ___ | _ | _ | _____ | _____ | __ | __ | _____ |
| _ |
Welcome to OpenGOAL 0.8 !
Run (repl-help) for help with common commands and REPL usage.
Run (lt) to connect to the local target.
g >
Jalankan perintah berikut untuk membuat game:
g > (mi)
CATATAN PENTING! Jika Anda tidak menggunakan versi game non-default, Anda mungkin mengalami masalah saat mencoba menjalankan
(mi)
pada langkah ini. Contoh kesalahan mungkin mencakup sesuatu seperti:
Input file iso_data/jak1/MUS/TWEAKVAL.MUS does not exist.
Hal ini karena input/output dekompiler menggunakan bidang JSON
gameName
di konfigurasi dekompiler. Misalnya jika Anda menggunakan Jak 1 PAL, maka akan diasumsikaniso_data/jak1_pal
dandecompiler_out/jak1_pal
. Oleh karena itu, Anda dapat memberi tahu REPL/kompiler mengenai hal ini melalui kolom konfigurasigameVersionFolder
yang dijelaskan di sini
Akhirnya permainan dapat dijalankan. Buka terminal kedua dari direktori jak-project
dan jalankan perintah berikut:
task boot-game
Permainan akan boot secara otomatis jika semuanya dilakukan dengan benar.
Menghubungkan REPL ke game memungkinkan Anda memeriksa dan mengubah kode atau data saat game sedang berjalan.
Untuk melakukannya, di REPL setelah berhasil (mi)
, jalankan perintah berikut:
g > (lt)
Jika berhasil, perintah Anda akan berubah menjadi:
gc >
Misalnya, menjalankan perintah berikut akan mencetak beberapa informasi dasar tentang Jak:
gc > * target *
Anda juga dapat memulai permainan tanpa melakukan booting. Untuk melakukannya, jalankan yang berikut ini di satu terminal
task run-game
Dan kemudian di REPL Anda jalankan perintah berikut (setelah berhasil (mi)
):
g > (lt)
[Listener] Socket connected established ! (took 0 tries). Waiting for version...
Got version 0.8 OK !
[Debugger] Context: valid = true, s7 = 0x147d24, base = 0x2123000000, tid = 2438049
gc > (lg)
10836466 # xa559f2 0.0000 ("game" "kernel")
gc > (test-play)
(play :use-vis # t :init-game #f) has been called!
0 # x0 0.0000 0
gc >
Di jendela grafis, Anda dapat menggunakan tombol titik untuk membuka menu debug. Pengontrol juga berfungsi, menggunakan pemetaan yang sama seperti game aslinya.
Lihat pc_debug
, examples
dan folder pc
di bawah goal_src
untuk beberapa contoh kode GOAL yang kami tulis. File debug yang tidak dimuat secara otomatis oleh mesin memiliki petunjuk cara menjalankannya.
Ada empat komponen utama proyek ini.
goalc
- kompiler GOAL untuk x86-64decompiler
- dekompiler kamigoal_src/
- folder yang berisi semua kode OpenGOAL / GOOSgame
- alias runtime yang ditulis dalam C++Mari kita uraikan setiap komponennya.
goalc
Implementasi GOAL kami disebut OpenGOAL.
Semua kode sumber kompiler ada di goalc/
. Kompiler dikontrol melalui prompt yang dapat digunakan untuk memasukkan perintah untuk dikompilasi, terhubung ke program GOAL yang sedang berjalan untuk berinteraksi, menjalankan debugger OpenGOAL, atau, jika Anda terhubung ke program GOAL yang sedang berjalan, dapat digunakan sebagai REPL untuk menjalankan kode secara interaktif. Selain mengkompilasi file kode, compiler memiliki fitur untuk mengemas dan membangun file data.
Agnostik Lingkungan
Jika Anda telah menginstal task
seperti yang direkomendasikan di atas, Anda dapat menjalankan kompiler dengan task repl
Linux
Untuk menjalankan compiler di Linux, terdapat skrip scripts/shell/gc.sh
.
jendela
Di Windows, terdapat skrip scripts/batch/gc.bat
dan skrip scripts/batch/gc-no-lt.bat
, yang terakhir tidak akan mencoba melampirkan secara otomatis ke target yang sedang berjalan.
decompiler
Komponen kedua pada proyek ini adalah decompiler.
Decompiler akan mengeluarkan kode dan data lain yang dimaksudkan untuk diperiksa oleh manusia di folder decompiler_out
. File dalam folder ini tidak akan digunakan oleh compiler.
Anda harus memiliki salinan game PS2 dan menempatkan semua file dari DVD di dalam folder yang sesuai dengan game tersebut di dalam folder iso_data
( jak1
untuk Jak 1 Black Label, dll.), seperti terlihat pada gambar ini:
Dekompiler akan mengekstrak aset ke folder assets
. Aset ini akan digunakan oleh kompiler saat membuat port, dan Anda mungkin ingin menonaktifkan ekstraksi aset setelah menjalankannya satu kali.
Agnostik Lingkungan
Jika Anda telah menginstal task
seperti yang direkomendasikan di atas, Anda dapat menjalankan kompiler dengan task decomp
Linux
Untuk menjalankannya, Anda dapat menggunakan scripts/shell/decomp.sh
untuk menjalankan decompiler
jendela
Untuk menjalankannya, Anda dapat menggunakan scripts/shell/decomp-jak1.bat
untuk menjalankan decompiler
goal_src/
Kode sumber permainan, yang ditulis dalam OpenGOAL, terletak di goal_src
. Semua kode GOAL dan GOOS harus ada di folder ini.
game
Komponen terakhir adalah "runtime", yang terletak di game
. Ini adalah bagian dari permainan yang ditulis dalam C++.
Di pelabuhan, itu meliputi:
game/kernel
. Ini harus sedekat mungkin dengan permainan, dan semua perbedaan harus dicatat dengan komentar.game/sce
. Implementasi fitur perpustakaan khusus untuk port PC terletak di game/system
.game/overlord
. Seperti kernel C, kami mencoba membuatnya sedekat mungkin dengan game sebenarnya.989SND
. Kode untuk perpustakaan dan antarmukanya terletak di game/sound
.game/graphics
. Meskipun banyak kebebasan yang akan diambil agar ini berhasil, hasil akhirnya harus sangat sesuai dengan permainan sebenarnya.game/assets
. Ini termasuk file teks tambahan, ikon, dll.