WebAssembly로 포팅된 Pokemon Emerald
Overview
Pokemon Emerald가 pokeemerald-wasm 프로젝트를 통해 WebAssembly (WASM)로 포팅되었습니다. Game Boy Advance (GBA) 하드웨어를 시뮬레이션하는 기존의 브라우저 기반 에뮬레이터와 달리, 이 프로젝트는 실제 게임 로직을 WASM으로 직접 컴파일하여 브라우저에서 매우 높은 성능으로 실행할 수 있게 합니다. 특정 환경에서는 잠재적으로 100k FPS에 도달할 수 있습니다.
Technical Implementation
Native Compilation vs. Emulation
이 포팅의 핵심적인 차이점은 이것이 GBA 에뮬레이터가 아니라는 점입니다. 대신, Pokemon Emerald의 커뮤니티 주도 디컴파일 버전을 활용합니다. 디컴파일된 소스 코드를 WebAssembly로 직접 컴파일함으로써, 프로젝트는 휴대용 콘솔의 CPU와 메모리 버스를 시뮬레이션하는 것보다 훨씬 효율적인 하드웨어 에뮬레이션 레이어를 우회합니다.
Performance and Controls
이 포팅은 사용자가 게임 플레이를 속도를 높일 수 있는 speed-up 기능을 제공하여 고성능 경험을 제공합니다. 현재 키보드 매핑은 다음과 같습니다:
- Arrows: 이동 및 탐색
- Z: A Button
- X: B Button
- X: Enter (Start)
- Shift: Select
User Experience and Current State
게임의 기능적 핵심은 성공적이지만, 초기 사용자들은 현재 빌드에서 몇 가지 기술적 장애물과 안정성 문제를 보고했습니다:
Stability and Bugs
- Crashes: 사용자들이 전투 메뉴에서 "Pokemon" 옵션에 접근하거나 전투 중 포션을 사용할 때 충돌이 발생한다고 보고했습니다.
- Input Lag: 일부 사용자는 빠른 A-button 누름이 브라우저에서 항상 등록되지 않을 수 있다고 언급했습니다.
- Input Navigation: 이름 선택 중에 일부 버그가 있는 동작이 보고되었습니다.
- Visual Glitches: 일부 사용자는 특정 아이템 획득 시 텍스트 대신 숫자가 보이는 현상을 보고했습니다 (예: "You received a 6").
Missing Features
- Audio: 현재 구현에는 사운드가 부족하며, 사용자들이 이를 경험의 핵심적인 누락된 구성 요소로 식별했습니다.
- Save State Management: 저장은 작동하는 것으로 확인되었지만, 사용자들이 브라우저 캐시 삭제 시 데이터 손실을 방지하기 위해 저장 파일을 수출(export)하고 다시 불러오기(reload)할 수 있는 기능을 요청했습니다.
- PWA Support: 일부 사용자는 이 프로젝트가 Android Firefox에서 Progressive Web App (PWA)으로 현재 작동하지 않는다고 보고했습니다.
Community Insights
커뮤니티 구성원들은 이 방식이 게임의 접근성을 실제로 개선할 수 있는 잠재력이 있다고 논의했습니다. 한 사용자는 최종 검증이 안정적이고 객관적이기 때문에 (게임이 실행되거나 실행되지 않거나 둘 중 하나임), 포팅 과정이나 오디오와 같은 기능을 추가하는 데 LLM (예: Claude)을 사용하는 것이 가능해졌다고 언급했습니다.
"I threw Claude at the problem and it worked!"
또한, 프로젝트는 현대적인 터치 컨트롤을 추가할하는 가능성과 원본 프로젝트의 포크(fork)를 통해 오디오를 추가할 수 있는 가능성에 대해 논의를 시작했습니다.