Pokemon Emerald 已移植至 WebAssembly

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

此移植版本提供高效率能的體驗,並具備加速功能,讓使用者可以加快遊戲進度。目前的鍵盤對應如下:

  • 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: 雖然已確認儲存功能可以運作,但使用者要求能夠匯出與重新載入儲存檔,以防止在清除瀏覽器快取時造成數據遺失。
  • PWA Support: 部分使用者回報該專案目前在 Android Firefox 上無法作為 Progressive Web App (PWA) 運作。

Community Insights

社群成員討論了這種方法對於提升遊戲易用性的潛力。一位使用者指出,使用 LLM (例如 Claude) 已使得協助移植過程或增加如音訊等功能變得可能,因為最終的驗證是穩定且客觀的(遊戲要嘛能跑,要嘛不能跑)。

"I threw Claude at the problem and it worked!"

此外,該專案也開啟了關於加入現代觸控控制項以及透過原始專案的分支 (forks) 來加入音訊的可能性討論。

Sources