github.com/blasdecrespo

topcat:~/p/poke-recomp$ cat README.md

poke recomp

Go · Lua 2026

Pokémon Rojo, Azul y Amarillo —y Oro, Plata y Cristal— recompilados de forma nativa, con un mod 3D voxel, y llevados al navegador con WebAssembly. La ROM la pones tú; el servidor no aloja ninguna.

  • web
  • wasm
  • pokemon
  • love2d
  • 3d

Gen1Recomp++ y Gen2Recomped son recreaciones nativas de los juegos de Game Boy escritas a mano en Lua sobre LÖVE: el motor, la máquina virtual de scripts y el comportamiento de los mapas son código propio, y los datos y los gráficos se decodifican de la ROM que aporta el jugador. Sobre ellos, el mod voxel convierte el mundo en un diorama 3D con tilt-shift, batallas sobre el propio mapa y cámara en primera y tercera persona.

Aquí viven compilados a WebAssembly con love.js y servidos por un binario Go de un solo fichero con los bundles incrustados. Es el mismo esquema que el resto del sitio: sin dependencias, sin escritura en disco, sin salida a internet.

topcat:~/p/poke-recomp$ git remote -v

Trabajo sobre código de otra persona. El original es bryanthaboi/gen1recomp, y lo que hay abajo es lo que aporté yo.

topcat:~/p/poke-recomp$ git log --oneline --author=blasdecrespo

  • Port a navegador: empaquetado del motor y los mods con love.js (LÖVE 11.5), puente de entorno para que los interruptores POKEPORT_* funcionen sin proceso, y parches para que el ritmo del bucle lo lleve requestAnimationFrame en vez de sleeps.
  • Capa de compatibilidad para Lua 5.1 estándar sobre un motor escrito para LuaJIT: librería bit en Lua puro, load(cadena), pcall/xpcall que dejan hacer yield a la importación, y guardas para que ninguna excepción C++ de LÖVE cruce un pcall en el runtime wasm.
  • Servidor Go de un binario con los bundles incrustados (go:embed) y las cabeceras COOP/COEP; contenedor scratch sin privilegios, integrado en este sitio bajo /poke/.
  • Tres arreglos en los mods 3D: un módulo eliminado del motor (GBCFX) que el mod aún requería, un manifest que se declaraba en conflicto consigo mismo y un global sin declarar que tumbaba el pipeline voxel de Gen 2 en cada fotograma.

topcat:~/p/poke-recomp$ cat NOTES

  • Gen 1 (Rojo, Azul, Amarillo) y Gen 2 (Oro, Plata, Cristal), cada uno con su mod 3D voxel.
  • La ROM se verifica por SHA-1 en el navegador y sus datos se quedan en tu IndexedDB: nada sube al servidor.
  • El servicio envía las cabeceras de aislamiento cross-origin (COOP/COEP) que exigen los hilos de WebAssembly, solo bajo /poke/.
  • Funciona en el navegador: se elige la ROM, se importa en unos segundos (Gen 1) o un par de minutos (Gen 2) y arranca el juego. El progreso queda en el IndexedDB del navegador al cerrar la pestaña.
  • Límites conocidos de la versión web: las ediciones del editor de mapas no se aplican, y en Gen 2 la música se sintetiza en el hilo principal.

topcat:~/p/poke-recomp$ cat INSTALL

./build.sh gen1 && ./build.sh gen2          # bundles en dist/
go build -o pokeweb . && ./pokeweb -addr :8080

topcat:~/p/poke-recomp$ ls -l

lenguaje
Go · Lua
año
2026

topcat:~/p/poke-recomp$ cd ..