✓ Inglés | Coreano (한국어)
Pikachu Volleyball (対戦ぴかちゅ~ ビーチバレー編) es un antiguo juego de Windows desarrollado por "(C) SACHI SOFT / SAWAYAKAN Programmers" y "(C) Satoshi Takenouchi" en 1997. El código fuente de este repositorio se obtuvo de forma inversa. diseñar la parte central de el código de máquina, incluido el motor de física y la IA, del juego original e implementarlo en JavaScript.
Puedes jugar a este juego en el sitio web: https://gorisanson.github.io/pikachu-volleyball/en/
git clone https://github.com/gorisanson/pikachu-volleyball.git
cd pikachu-volleyball
node v16
y npm v8
). npm install
npm run build
npx http-server dist
http://localhost:8080
. La URL exacta se supone que se encuentra en los mensajes impresos en su terminal). Motor de física: El motor de física, que calcula la posición de la pelota y los jugadores (Pikachus), está contenido en el archivo src/resources/js/physics.js
. (Este archivo también contiene la IA que determina la entrada del teclado de la computadora cuando juegas contra tu computadora). Este archivo de código fuente se obtiene mediante ingeniería inversa de la función en la dirección 00403dd0 del código de máquina del juego original.
Representación: la biblioteca PixiJS se utiliza para renderizar el juego.
Consulte los comentarios en src/resources/js/main.js
para obtener otros detalles.
Las principales herramientas utilizadas para la ingeniería inversa son las siguientes.
Ghidra se utiliza para descompilar el código de máquina en código C. A primera vista, el código C descompilado parecía incomprensible. Una de las razones fue que los nombres de las variables ( iVar1
, iVar2
, ...) y los nombres de las funciones ( FUN_00402dc0
, FUN_00403070
, ...) en el código C descompilado no tienen sentido. Pero, con la ayuda de Cheat Engine, pude encontrar la ubicación de algunas variables significativas: las coordenadas x, y de la pelota y los jugadores. Y al leer la ubicación de las variables, ¡el código C descompilado era comprensible! OllyDbg se utilizó para alterar una parte específica del código de máquina. Por ejemplo, hacer una versión más lenta del juego para que sea más fácil contar el número de fotogramas de "¿Listo?" Mensaje al inicio de una nueva ronda en el juego. Se utilizó Resource Hacker para extraer los activos (sprites y sonidos) del juego.
Si no hay entrada de teclado, la coincidencia AI vs AI se inicia después de un tiempo. En el juego original, la partida dura sólo unos 40 segundos. Pero en esta versión de JavaScript, no hay límite de tiempo para el partido AI vs AI, por lo que puedes verlo todo el tiempo que quieras.