✓ Английский | Корейский (한국어)
Волейбол Пикачу (対戦ぴかちゅ~ ビーチバレー編) — старая игра для Windows, разработанная «(C) SACHI SOFT / SAWAYAKAN Programmers» и «(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
. (Этот файл также содержит искусственный интеллект, который определяет ввод с клавиатуры компьютера, когда вы играете против своего компьютера.) Этот файл исходного кода получен путем обратного проектирования функции по адресу 00403dd0 машинного кода исходной игры.
Рендеринг: для рендеринга игры используется библиотека PixiJS.
Дополнительную информацию см. в комментариях к src/resources/js/main.js
.
Ниже приведены основные инструменты, используемые для обратного проектирования.
Ghidra используется для декомпиляции машинного кода в код C. На первый взгляд декомпилированный код C выглядел непонятным. Одна из причин заключалась в том, что имена переменных ( iVar1
, iVar2
, ...) и имена функций ( FUN_00402dc0
, FUN_00403070
, ...) в декомпилированном коде C бессмысленны. Но с помощью Cheat Engine мне удалось найти расположение некоторых важных переменных — координат x, y мяча и игроков. И, судя по расположению переменных, декомпилированный код C был понятен! OllyDbg использовался для изменения определенной части машинного кода. Например, сделать более медленную версию игры, чтобы было легче считать количество кадров «Готов?» сообщение о начале нового раунда в игре. Resource Hacker использовался для извлечения ресурсов (спрайтов и звуков) игры.
Если ввод с клавиатуры отсутствует, через некоторое время начинается сопоставление AI vs AI. В оригинальной игре матч длится всего около 40 секунд. Но в этой версии JavaScript нет ограничений по времени для матча ИИ против ИИ, поэтому вы можете смотреть его столько, сколько захотите.