- The Backdooms es un juego HTML que se ejecuta directamente desde un código QR, desarrollado con inspiración en DOOM 1993 y The Backrooms
- Este proyecto fue diseñado para poner a prueba los límites de almacenamiento y compresión de los códigos QR, y para mostrar una forma innovadora de alojar aplicaciones web ligeras dentro de un código QR
- El juego puede jugarse escaneando el código QR sin conexión a internet, y se ofrece en una forma extremadamente comprimida
- Usa la API DecompressionStream para ejecutar el juego dinámicamente dentro del navegador
- Es compatible con navegadores móviles modernos, y se pueden generar códigos QR usando Python y librerías de código QR
Resumen del proyecto
- The Backdooms es un juego HTML que se ejecuta directamente desde un código QR, desarrollado con inspiración en DOOM 1993 y The Backrooms
- Fue diseñado para poner a prueba los límites de almacenamiento y compresión de los códigos QR, y para mostrar una forma innovadora de alojar aplicaciones web ligeras dentro de un código QR
Funciones
- Totalmente offline: después de escanear el código QR, se puede jugar sin conexión a internet
- Compresión extrema: usa compresión Zlib, flujo de descompresión Gzip y codificación base64 para comprimir al máximo el resultado final
- Página web autoextraíble: usa la API
DecompressionStream para ejecutar el juego dinámicamente dentro del navegador
- Compatible con móviles: funciona en navegadores móviles modernos que soportan la API Decompressionstream (Edge, Yandex, Opera)
Instalación y dependencias
- Técnicamente solo se necesita un navegador web moderno, pero para generar el código QR de un juego de aproximadamente 2.5kb se requieren Python 3.7+, la librería
qrcode y pillow
Uso
1️⃣ Convertir el juego a código QR
- Ejecuta el script con el siguiente comando:
python3 QRGEN.py <your-game.html> <output-qrcode.png>
2️⃣ Escanear el código QR
- Usa un smartphone o un lector QR para abrir el juego directamente en el navegador web
3️⃣ Jugar al instante 🎮
- Puedes disfrutar The Backdooms sin descargas ni instalación
Análisis técnico
Flujo de trabajo de compresión
- Lectura del HTML de entrada: lee el contenido HTML proporcionado desde un archivo o una fuente de entrada
- Compresión Zlib + descompresión GZip: comprime el HTML con Zlib y usa Decompressionstream de GZip para lograr la mejor compresión
- Codificación Base64: codifica los datos comprimidos en Base64 para mantenerlos en formato de texto y poder incluirlos de forma segura dentro del archivo HTML
- Inclusión en un wrapper HTML: se genera un wrapper HTML autoextraíble basado en JavaScript. Este wrapper incluye una función de la API DecompressionStream que descomprime automáticamente el contenido al abrirse en el navegador
- Conversión a Data URI: convierte el HTML completo al formato
data:text/html;base64,... para que pueda almacenarse y compartirse fácilmente sin un archivo físico
Lógica de generación del código QR
- El sistema primero intenta generar la versión más pequeña posible del QR usando
qr.make(fit=True), ajustando dinámicamente el tamaño según la longitud del contenido
- Si la versión requerida supera la 40 (límite del estándar de códigos QR), fuerza la versión 40 con
fit=False
- Usa el nivel de corrección de errores L, el más bajo, para permitir la mayor capacidad de datos posible
- Si los datos siguen sin caber en un QR v40 nivel L, el proceso falla y devuelve un mensaje de error indicando que los datos son demasiado grandes para codificarse en el código QR
Resultado
- Si tiene éxito, el código QR se genera y se muestra
- Si falla, el proceso termina con un mensaje de error indicando que los datos son demasiado grandes para codificarse en el código QR
Licencia
- Este proyecto se publica bajo la licencia MIT y puede usarse, modificarse y compartirse libremente
Créditos
- id Software, desarrollador de DOOM
- matttkc, quien propuso esta idea hace 5 años
- Toby Fox, creador de la increíble música de Undertale; la versión alojada en GitHub de este juego usa una versión de 8 bits de Bonetrousle
- Desarrollado por Kuber Mehta
1 comentarios
Opiniones de Hacker News
A veces empiezo proyectos al azar, y este fue uno de esos casos. Lo hice durante una semana a inicios de este año, pero no lo había compartido; ahora decidí hacerlo
DecompressionstreamSiguiente proyecto: convertir un LLM en un código QR
Proyecto realmente genial. Aprendí sobre los URL
data:. Ya conocía el esquema URIdata:, pero no sabía que se podía usar como URL completa. Había pensado en si se podría meter un juego completo dentro de un código QR, pero lo había dejado de lado porque erróneamente asumí que se necesitaba un enlace HTTP(s). Esto me inspiró muchísimo: ¿se puede meter un juego completo dentro de un código QR? [enlace de YouTube]Ojalá agregues algunas capturas de pantalla al repositorio. Lo estoy viendo desde el celular y, no sé por qué, solo vi 3 botones y una pantalla negra
Lo escaneé con el lector de QR predeterminado del iPhone y me apareció "No hay datos disponibles"
Deberías actualizar el CSS del canvas a
image-rendering: pixelatedpara que la imagen no se vea borrosa sino nítidaSigue creando cosas geniales, kuberwastaken
Tremendo proyecto. Estoy esperando que un "código QR autocontenido" se agregue a canitrundoom (aunque no sé si técnicamente podría ser aceptado)
Siento que este proyecto se está acercando a Snow Crash. Me pregunté si ver el código QR estaba alterando mi cerebro :-D trabajo increíble
Está muy genial. Solo una observación pequeña: DOOM no usaba raycasting. Este proyecto se parece más a Wolfenstein 3D, y Wolf3D sí usaba raycasting