topcat:~/p/poke-recomp$ cat README.md
poke recomp
Go · Lua 2026Poké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.
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
topcat:~/p/poke-recomp$ cd ..