✓ Bahasa Inggris | Korea (한국어)
Bola Voli Pikachu (対戦ぴかちゅ~ ビーチバレー編) adalah permainan Windows lama yang dikembangkan oleh "(C) SACHI SOFT / SAWAAYAKAN Programmer" dan "(C) Satoshi Takenouchi" pada tahun 1997. Kode sumber pada repositori ini diperoleh secara terbalik merekayasa bagian inti kode mesin — termasuk mesin fisika dan AI — dari game asli dan mengimplementasikannya ke dalam JavaScript.
Anda dapat memainkan permainan ini di website: https://gorisanson.github.io/pikachu-volleyball/en/
git clone https://github.com/gorisanson/pikachu-volleyball.git
cd pikachu-volleyball
node v16
dan npm v8
.) npm install
npm run build
npx http-server dist
http://localhost:8080
. Untuk URL persisnya, URL tersebut seharusnya dapat ditemukan pada pesan tercetak di terminal Anda.) Mesin Fisika: Mesin fisika yang menghitung posisi bola dan pemain (Pikachus), terdapat dalam file src/resources/js/physics.js
. (File ini juga berisi AI yang menentukan input keyboard komputer saat Anda bermain melawan komputer.) File kode sumber ini diperoleh dengan merekayasa balik fungsi di alamat 00403dd0 dari kode mesin game aslinya.
Rendering: Pustaka PixiJS digunakan untuk merender game.
Lihat komentar di src/resources/js/main.js
untuk detail lainnya.
Alat utama yang digunakan untuk rekayasa balik adalah sebagai berikut.
Ghidra digunakan untuk mendekompilasi kode mesin ke kode C. Pada pandangan pertama, kode C yang didekompilasi tampak tidak dapat dipahami. Salah satu alasannya adalah nama variabel ( iVar1
, iVar2
, ...) dan nama fungsi ( FUN_00402dc0
, FUN_00403070
, ...) dalam kode C yang didekompilasi tidak ada artinya. Namun, dengan bantuan Cheat Engine, saya dapat menemukan lokasi beberapa variabel penting — koordinat x, y bola dan pemain. Dan membaca dari lokasi variabel, kode C yang didekompilasi dapat dipahami! OllyDbg digunakan untuk mengubah bagian tertentu dari kode mesin. Misalnya, untuk membuat versi game lebih lambat sehingga lebih mudah menghitung jumlah frame "Siap?" pesan di awal babak baru dalam permainan. Resource Hacker digunakan untuk mengekstrak aset (sprite dan suara) game.
Jika tidak ada input keyboard, pencocokan AI vs AI dimulai setelah beberapa saat. Pada game aslinya, pertandingan hanya berlangsung sekitar 40 detik saja. Namun pada versi JavaScript ini, tidak ada batasan waktu untuk pertandingan AI vs AI sehingga Anda dapat menontonnya selama yang Anda mau.