✓英語|韓国語(한국어)
ピカチュウバレーボール (対戦ぴかちゅ~ 比ベロチュウバーレー編) は、1997 年に「(C) SACHI SOFT / SAWAYAKAN Programmers」と「(C) Takeshi Takenouchi」によって開発された古い Windows ゲームです。このリポジトリのソース コードは逆引きで取得されています。オリジナル ゲームの物理エンジンや AI を含むマシン コードのコア部分をエンジニアリングし、それを JavaScript に実装します。
このゲームはウェブサイトでプレイできます: https://gorisanson.github.io/pikachu-volleyball/en/
git clone https://github.com/gorisanson/pikachu-volleyball.git
cd pikachu-volleyball
node v16
およびnpm v8
を試してください。) npm install
npm run build
npx http-server dist
http://localhost:8080
になります。正確な URL については、端末に出力されるメッセージに記載されているはずです。) 物理エンジン: ボールとプレーヤー (ピカチュウ) の位置を計算する物理エンジンは、ファイルsrc/resources/js/physics.js
に含まれています。 (このファイルには、コンピュータと対戦するときにコンピュータのキーボード入力を決定する AI も含まれています。) このソース コード ファイルは、元のゲームのマシン コードのアドレス 00403dd0 にある関数をリバース エンジニアリングすることによって取得されます。
レンダリング: ゲームのレンダリングには PixiJS ライブラリが使用されます。
その他の詳細については、 src/resources/js/main.js
のコメントを参照してください。
リバースエンジニアリングに使用される主なツールは以下のとおりです。
Ghidra は、マシン コードを C コードに逆コンパイルするために使用されます。逆コンパイルされた C コードは、一見すると理解できないように見えました。理由の 1 つは、逆コンパイルされた C コード内の変数名 ( iVar1
、 iVar2
、 ...) と関数名 ( FUN_00402dc0
、 FUN_00403070
、 ...) が無意味であることでした。しかし、Cheat Engine の助けを借りて、いくつかの重要な変数 (ボールと選手の x、y 座標) の位置を見つけることができました。変数の位置から読み取ると、逆コンパイルされた C コードは理解できました。 OllyDbg は、マシンコードの特定の部分を変更するために使用されました。たとえば、「準備完了?」のフレーム数を数えやすくするために、ゲームの遅いバージョンを作成します。ゲームの新しいラウンドの開始に関するメッセージ。ゲームのアセット (スプライトとサウンド) を抽出するために Resource Hacker が使用されました。
キーボード入力がない場合は、しばらくしてからAI対AIの対戦が開始されます。オリジナルのゲームでは、試合は約 40 秒しか続きません。ただし、この JavaScript バージョンでは、AI 対 AI の試合に時間制限がないため、好きなだけ見ることができます。