https://github.com/gorisanson/pikachu-volleyball Skip to content Toggle navigation Sign in * Product + Actions Automate any workflow + Packages Host and manage packages + Security Find and fix vulnerabilities + Codespaces Instant dev environments + Copilot Write better code with AI + Code review Manage code changes + Issues Plan and track work + Discussions Collaborate outside of code Explore + All features + Documentation + GitHub Skills + Blog * Solutions For + Enterprise + Teams + Startups + Education By Solution + CI/CD & Automation + DevOps + DevSecOps Resources + Learning Pathways + White papers, Ebooks, Webinars + Customer Stories + Partners * Open Source + GitHub Sponsors Fund open source developers + The ReadME Project GitHub community articles Repositories + Topics + Trending + Collections * Pricing Search or jump to... Search code, repositories, users, issues, pull requests... Search [ ] Clear Search syntax tips Provide feedback We read every piece of feedback, and take your input very seriously. [ ] [ ] Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly Name [ ] Query [ ] To see all available qualifiers, see our documentation. Cancel Create saved search Sign in Sign up You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} gorisanson / pikachu-volleyball Public * Notifications * Fork 90 * Star 684 * Pikachu Volleyball implemented into JavaScript by reverse engineering the original game gorisanson.github.io/pikachu-volleyball/en/ 684 stars 90 forks Branches Tags Activity Star Notifications * Code * Issues 1 * Pull requests 0 * Actions * Security * Insights Additional navigation options * Code * Issues * Pull requests * Actions * Security * Insights gorisanson/pikachu-volleyball This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. main BranchesTags Go to file Code Folders and files Name Name Last commit Last commit message date Latest commit History 625 Commits .vscode .vscode src src .eslintrc.json .eslintrc.json .gitignore .gitignore .prettierrc.json .prettierrc.json README.ko.md README.ko.md README.md README.md jsconfig.json jsconfig.json package-lock.json package-lock.json package.json package.json webpack.common.js webpack.common.js webpack.dev.js webpack.dev.js webpack.prod.js webpack.prod.js View all files Repository files navigation * README Pikachu Volleyball English | Korean(hangugeo) Pikachu Volleyball (Dui Zhan pikachiyu~ hi:+tiha:re+Bian ) is an old Windows game which was developed by "(C) SACHI SOFT / SAWAYAKAN Programmers" and "(C) Satoshi Takenouchi" in 1997. The source code on this repository is gained by reverse engineering the core part of the machine code -- including the physics engine and the AI -- of the original game and implementing it into JavaScript. You can play this game on the website: https://gorisanson.github.io/ pikachu-volleyball/en/ Pikachu Volleyball game screenshot How to run locally 1. Clone this repository and get into the directory. git clone https://github.com/gorisanson/pikachu-volleyball.git cd pikachu-volleyball 2. Install dependencies. (If errors occur, you can try with node v16 and npm v8.) npm install 3. Bundle the code. npm run build 4. Run a local web server. npx http-server dist 5. Connect to the local web server on a web browser. (In most cases, the URL for connecting to the server would be http:// localhost:8080. For the exact URL, it is supposed to be found on the printed messages on your terminal.) Game structure * Physics Engine: The physics engine, which calculates the position of the ball and the players (Pikachus), is contained in the file src/resources/js/physics.js. (This file also containes the AI which determines the keyboard input of the computer when you are playing against your computer.) This source code file is gained by reverse engineering the function at the address 00403dd0 of the machine code of the original game. * Rendering: PixiJS library is used for rendering the game. Refer comments on src/resources/js/main.js for other details. Methods used for reverse engineering The main tools used for reverse engineering are following. * Ghidra * Cheat Engine * OllyDbg * Resource Hacker Ghidra is used for decompiling the machine code to C code. At first look, the decompiled C code looked incomprehensible. One of the reason was that the variable names (iVar1, iVar2, ...) and function names (FUN_00402dc0, FUN_00403070, ...) in the decompiled C code are meaningless. But, with the aid of Cheat Engine, I could find the location of some significant variables -- x, y coordinate of the ball and the players. And reading from the location of the variables, the decompiled C code was comprehensible! OllyDbg was used for altering a specific part of the machine code. For example, to make slower version of the game so that it would be easier to count the number of frames of "Ready?" message on the start of new round in the game. Resource Hacker was used for extract the assets (sprites and sounds) of the game. An intended deviation from the original game If there is no keyboard input, AI vs AI match is started after a while. In the original game, the match lasts only for about 40 seconds. But in this JavaScript version, there's no time limit to the AI vs AI match so you can watch it as long as you want. About Pikachu Volleyball implemented into JavaScript by reverse engineering the original game gorisanson.github.io/pikachu-volleyball/en/ Topics game video-game reverse-engineering pikachu-volleyball Resources Readme Activity Stars 684 stars Watchers 8 watching Forks 90 forks Report repository Contributors 6 * @gorisanson * @oToToT * @dependabot[bot] * @disjukr * @helpingstar * @andrewpollack Languages * JavaScript 62.2% * HTML 31.7% * CSS 6.1% Footer (c) 2024 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact * Manage cookies * Do not share my personal information You can't perform that action at this time.