✓英语|韩语(한국어)
皮卡丘排球(対戦ぴかちゅ~ ビーチバレー编)是一款古老的 Windows 游戏,由“(C) SACHI SOFT / SAWAYAKAN 程序员”和“(C) Satoshi Takenouchi”于 1997 年开发。此存储库上的源代码是通过反向获取的工程机器代码的核心部分- 包括原始游戏的物理引擎和人工智能,并将其实现为 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 代码看起来难以理解。原因之一是反编译的 C 代码中的变量名( iVar1
、 iVar2
、...)和函数名( FUN_00402dc0
、 FUN_00403070
、...)没有意义。但是,在作弊引擎的帮助下,我可以找到一些重要变量的位置——球和球员的 x、y 坐标。从变量的位置读取,反编译的 C 代码是可以理解的! OllyDbg 用于更改机器代码的特定部分。例如,制作较慢的游戏版本,以便更容易计算“准备好了吗?”的帧数。游戏新一轮开始的消息。 Resource Hacker 用于提取游戏的资产(精灵和声音)。
如果没有键盘输入,一段时间后开始AI对AI比赛。原版游戏中,比赛时间只有40秒左右。但在此 JavaScript 版本中,AI 与 AI 的比赛没有时间限制,因此您可以随意观看。