✓ 영어 | 한국어(한국어)
피카츄 배구(対戦ぴikaちゅ~ ビーチバレー編)는 "(C) SACHI SOFT / SAWAYAKAN Programmers"와 "(C) Satoshi Takenouchi"가 1997년에 개발한 오래된 Windows 게임입니다. 이 저장소의 소스 코드는 역방향으로 얻습니다. 기계 코드의 핵심 부분을 엔지니어링 — 물리 엔진과 AI를 포함하여 — 원래 게임의 내용을 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는 기계어 코드의 특정 부분을 변경하는 데 사용되었습니다. 예를 들어, "Ready?"의 프레임 수를 계산하기 쉽도록 느린 버전의 게임을 만들려는 경우입니다. 게임의 새로운 라운드 시작에 대한 메시지입니다. Resource Hacker는 게임의 자산(스프라이트 및 사운드)을 추출하는 데 사용되었습니다.
키보드 입력이 없으면 잠시 후 AI vs AI 매치가 시작됩니다. 원작 게임에서는 경기가 약 40초 동안만 지속됩니다. 하지만 이 JavaScript 버전에서는 AI 대 AI 경기에 시간 제한이 없으므로 원하는 만큼 오랫동안 시청할 수 있습니다.