← Todas las notas

Cómo metí una Game Boy Advance en mi web

Emulador, partidas que no se pierden, sincronización entre móvil y PC y controles que se sienten como una consola. Lo que aprendí montándolo.

2 min de lecturaGBAWebAssemblyIndexedDB

Quería una cosa muy concreta: abrir la web en el móvil, girarlo y seguir la partida donde la dejé en el PC. Sin instalar nada. Parecía un fin de semana. No lo fue, pero el resultado me gusta bastante.

El motor: mGBA en WebAssembly

No tenía sentido escribir un emulador desde cero. Uso EmulatorJS 4.2.3 con el núcleo mGBA, compilado a WebAssembly. Lo sirvo desde la propia web, fijado a una versión concreta: si el núcleo cambia, los estados guardados pueden dejar de ser compatibles, así que actualizarlo es una decisión, no un accidente.

El emulador vive dentro de un iframe propio. Así su ciclo de vida queda aislado del resto de la página y puedo reiniciarlo sin recargar nada más.

Guardar sin miedo

Lo que más me preocupaba era perder partidas. El reproductor guarda el estado completo en IndexedDB:

  • automáticamente cada pocos minutos mientras juegas,
  • al pausar, al ocultar la pestaña y al cerrar con Guardar y cerrar,
  • y en cualquier momento con Guardar ahora.

Las copias automáticas y las manuales rotan por separado, cinco de cada tipo, así que muchos autoguardados nunca se comen un punto que guardaste a propósito. Cada copia va identificada por el hash SHA-256 de la ROM: si cambias de edición, las partidas no se mezclan.

Un detalle que me salvó más de una vez: Web Locks impide abrir la misma partida en dos pestañas a la vez. Dos pestañas escribiendo el mismo guardado es la forma más rápida de perderlo.

Del móvil al PC

Con una cuenta iniciada, cada guardado se sube también a la nube. Si no hay conexión, queda en una cola y se reintenta al volver. Y si dos dispositivos han avanzado por caminos distintos, la web no decide por ti: te pregunta con cuál te quedas. Nada de sobrescrituras silenciosas.

Lo importante es lo que no se sube: el archivo del juego se queda siempre en tu dispositivo.

Que se sienta como una consola

La parte más divertida fue el tacto:

  • En horizontal, la consola ocupa toda la pantalla, con los controles translúcidos encima o a los lados.
  • Controles editables: hasta tres teclas y tres botones de mando por cada botón de la GBA.
  • Mandos físicos con la Gamepad API: conectas uno y funciona.

Lo que aprendí

Casi nada de esto es “emular”. Es guardar bien, sincronizar bien y respetar el tiempo de quien juega. El emulador es la parte fácil; la confianza de que tu partida sigue ahí es lo difícil.

Si quieres probarlo, está en la sección de juegos.

↑↓ moverse · Enter abrir