✓ Inglês | Coreano (한국어)
Pikachu Volleyball (対戦ぴかちゅ~ ビーチバレー編) é um antigo jogo do Windows que foi desenvolvido por "(C) SACHI SOFT / SAWAYAKAN Programmers" e "(C) Satoshi Takenouchi" em 1997. O código-fonte neste repositório é obtido por reverso engenharia a parte central do o código de máquina – incluindo o mecanismo de física e a IA – do jogo original e implementá-lo em JavaScript.
Você pode jogar este jogo no site: https://gorisanson.github.io/pikachu-volleyball/en/
git clone https://github.com/gorisanson/pikachu-volleyball.git
cd pikachu-volleyball
node v16
e npm v8
.) npm install
npm run build
npx http-server dist
http://localhost:8080
. Para o URL exato, ele deve ser encontrado nas mensagens impressas em seu terminal.) Motor de Física: O motor de física, que calcula a posição da bola e dos jogadores (Pikachus), está contido no arquivo src/resources/js/physics.js
. (Este arquivo também contém a IA que determina a entrada do teclado do computador quando você está jogando contra o seu computador.) Este arquivo de código-fonte é obtido pela engenharia reversa da função no endereço 00403dd0 do código de máquina do jogo original.
Renderização: a biblioteca PixiJS é usada para renderizar o jogo.
Consulte os comentários em src/resources/js/main.js
para obter outros detalhes.
As principais ferramentas utilizadas para engenharia reversa estão a seguir.
Ghidra é usado para descompilar o código de máquina em código C. À primeira vista, o código C descompilado parecia incompreensível. Um dos motivos foi que os nomes de variáveis ( iVar1
, iVar2
, ...) e nomes de funções ( FUN_00402dc0
, FUN_00403070
, ...) no código C descompilado não têm sentido. Mas, com a ajuda do Cheat Engine, consegui encontrar a localização de algumas variáveis significativas - coordenadas x, y da bola e dos jogadores. E lendo a localização das variáveis, o código C descompilado ficou compreensível! OllyDbg foi usado para alterar uma parte específica do código da máquina. Por exemplo, para tornar a versão mais lenta do jogo para que seja mais fácil contar o número de frames de "Pronto?" mensagem no início de uma nova rodada do jogo. O Resource Hacker foi utilizado para extrair os assets (sprites e sons) do jogo.
Se não houver entrada de teclado, a partida AI vs AI será iniciada após um tempo. No jogo original, a partida dura apenas cerca de 40 segundos. Mas nesta versão JavaScript, não há limite de tempo para a partida AI vs AI, então você pode assisti-la pelo tempo que quiser.