
Pokemon Emerald запущено в браузері через WebAssembly на 100 000 FPS
Гра Pokemon Emerald 2004 року з Game Boy Advance тепер працює у вкладці браузера. Проєкт pokeemerald-wasm — не емулятор: він перекомпільовує декомпіляцію pret/pokeemerald у WebAssembly через Emscripten і сягає 100 000 FPS.
Гра Pokemon Emerald, що вийшла 2004 року на Game Boy Advance, тепер працює у вкладці браузера — за поширеними даними, зі швидкістю 100 000 кадрів за секунду. Проєкт pokeemerald-wasm з'явився на Hacker News на початку червня 2026 року і розміщений на pokeemerald.com; його репозиторій на GitHub створено 29 травня 2026 року, і відтоді він зібрав сотні зірок.
Скомпільовано, а не емульовано
Цифра із заголовка легко вводить в оману. pokeemerald-wasm не є емулятором Game Boy Advance: він не симулює процесор ARM7, карту пам'яті чи звукові чипи консолі. Натомість він бере pret/pokeemerald — декомпіляцію гри спільнотою до читабельного коду C та ARM-асемблера — і перекомпільовує цей код у WebAssembly за допомогою Emscripten, додаючи браузерний інтерфейс. Ланцюг виглядає так: оригінальний ROM → декомпільований код C → WebAssembly → браузер. На жодному з цих етапів апаратне забезпечення GBA не відтворюється.
Саме ця різниця й дає швидкість. Емулятор платить за інтерпретацію кожної інструкції та покадрово імітує тайминги апаратури; перекомпільований код — це власна логіка гри, яку хост виконує безпосередньо. В обговоренні на Hacker News це сформульовано прямо: це сама гра, скомпільована у Wasm, а не емулятор на базі Wasm.
Що насправді вимірює «100k FPS»
Згідно з технічними оглядами проєкту, 100 000 FPS стосується пропускної здатності ігрової логіки після зняття обмеження на кількість кадрів, а не 100 000 реально намальованих зображень за секунду. Оригінальне обладнання було прив'язане до оновлення 60 Гц; зняття обмеження дозволяє перекомпільованому циклу працювати на максимальній швидкості процесора, тож ця цифра — показник запасу продуктивності порівняно з емуляцією, а не ігровий режим. Реальна гра синхронізується назад на 60 FPS, а надлишок іде на прискорене прокручування, миттєву реакцію на введення та роботу на слабких пристроях.
У браузері збірка не потребує плагінів чи завантажень: керування стрілками, Z — кнопка A, X — B, Enter — Start, Shift — Select.
Збереження, мобільні пристрої та подальші кроки
Коментатори на Hacker News підтверджують, що збереження гри справді працює — це свідчить, що порт зберігає реальний стан гравця, а не є лише графічною демонстрацією. На мобільних усе складніше: один користувач Firefox для Android зазначив, що сторінка не поводиться як встановлюваний PWA-застосунок, і йому порадили скористатися опцією браузера «Add to home». Обмін між іграми поки не працює — саме цю функцію користувачі просять найчастіше.
Репозиторій призначений не лише для браузера. Одна ціль Makefile збирає нативний бінарник, перетворюючи модуль WebAssembly на C за допомогою wasm2c з WABT і лінкуючи хост Raylib, інша створює фронтенд для framebuffer Linux, розрахований на зламані електронні книги Kindle Scribe. Як і в інших проєктах декомпіляції, ROM та захищені авторським правом ресурси не розповсюджуються — користувач використовує власну легальну копію.
Чому це важливо: це працююча демонстрація того, що повноцінну комерційну гру можна перекомпілювати у WebAssembly і запускати у вкладці браузера із запасом продуктивності — аргумент на користь читабельного коду як довговічної форми збереження ігор.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.