Osegi
Software·2 min de lectura

Doom en un mensaje de Telegram: fotogramas de 1.024 bytes

Un desarrollador ha logrado jugar a Doom dentro de un solo mensaje de Telegram. El motor corre en un Mac y cada fotograma debe caber en 1.024 bytes.

A tiny low-resolution Doom hangar frame with a door and muzzle flash shown inside a Telegram chat message with six control buttons.
Imagen: Хабр

Un desarrollador ha conseguido que Doom sea jugable dentro de un único mensaje de Telegram. El motor se queda en su Mac; en el chat solo aparecen una imagen pequeña y seis botones: avanzar, retroceder, girar a izquierda o derecha, disparar y abrir la puerta.

Al pulsar un botón, el widget llama, por ejemplo, a TelegramWidget.request("right"). El bot localiza la sesión de juego y pasa la orden a ViZDoom, que avanza la simulación cinco ticks. El jugador gira, los enemigos se mueven, los proyectiles vuelan y después el mundo vuelve a congelarse. El bot toma el fotograma del búfer de pantalla y lo devuelve mediante answerWidgetQuery; el widget cambia la fuente de la imagen en el mismo elemento. Así, tras decenas de movimientos, el chat sigue teniendo un solo mensaje de juego.

El límite de 1.024 bytes

ViZDoom entrega un fotograma RGB de 320 × 200, es decir, 192.000 bytes sin comprimir. La respuesta completa debe caber en 1.024 bytes e incluir la imagen como cadena Base64. Como cada tres bytes se convierten en cuatro caracteres, el WebP puede ocupar como máximo 768 bytes.

El autor mantiene constante la calidad del WebP y ajusta la resolución en cada fotograma. Prueba primero con 120 píxeles de ancho y luego con 96, 80, 64, 48 y 32, escalando la altura de forma proporcional. La comprobación se hace sobre la cadena ya codificada, de modo que una pared vacía y una sala con un enemigo pueden llegar con resoluciones distintas. Los enemigos lejanos apenas se distinguen, pero se puede abrir una puerta y ver quién hay detrás. Mientras una respuesta está en camino, el widget ignora nuevas pulsaciones, con al menos 1.010 ms entre solicitudes. Al ser por turnos, los monstruos no se acercan durante la espera.

Pruebas y puesta en marcha

En Telegram para macOS, el autor comprobó el recorrido desde la sala inicial hasta la puerta, el giro y el disparo. El nivel completo lo probó aparte, en ViZDoom local, con los mismos seis botones y cinco ticks por turno: llegar al interruptor de salida requirió 537 turnos, con un 48 % de salud restante y seis enemigos abatidos.

Para ejecutarlo hacen falta Python 3.12, el token de un bot propio y el DOOM1.WAD original de Doom Shareware 1.9, que no está en el repositorio. La ruta se indica con DOOM_WAD. El bot de juego admite hasta seis sesiones y las libera tras diez minutos de inactividad.

Del proyecto nació Awesome Telegram Widgets. En @awesomewidget_bot hay Doom, un Pacman por turnos, una calculadora, un pronóstico del tiempo de demostración, selección de rutas y correo de demostración, con categorías, búsqueda y enlaces a cada proyecto original. Los desarrolladores pueden proponer sus propios widgets para el catálogo.

Apps que merecen la pena

SUMO: el puzle de números

Toca las casillas correctas, suma y alcanza el objetivo. Fácil de aprender, difícil de dominar. Gratis, para todas las edades.

Etiquetas:doomtelegramvizdoomtelegram widgetswebpbots

Más de este día

Ver todas →

Más en: Software

Ver todas →