Osegi
Logiciels·2 min de lecture

Doom dans un message Telegram : des images de 1 024 octets

Un développeur fait tourner Doom dans un seul message Telegram. Le moteur reste sur un Mac et chaque image doit tenir dans une réponse de bot de 1 024 octets.

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

Un développeur a rendu Doom jouable dans un seul message Telegram. Le moteur reste sur son Mac ; dans la conversation, on ne voit qu'une petite image et six boutons : avancer, reculer, tourner à gauche, tourner à droite, tirer et ouvrir la porte.

Un appui déclenche, par exemple, TelegramWidget.request("right"). Le bot retrouve la session de jeu et transmet la commande à ViZDoom, qui fait avancer la simulation de cinq ticks. Le joueur pivote, les ennemis bougent, les projectiles volent, puis le monde se fige de nouveau. Le bot prélève l'image dans le tampon d'écran et la renvoie via answerWidgetQuery ; le widget remplace la source de l'image dans le même élément. Même après des dizaines de coups, la conversation ne contient donc qu'un seul message de jeu.

La limite de 1 024 octets

ViZDoom produit une image RVB de 320 × 200 pixels, soit 192 000 octets avant compression. La réponse entière doit tenir en 1 024 octets et contenir l'image sous forme de chaîne Base64. Comme trois octets deviennent quatre caractères, le WebP ne peut dépasser 768 octets.

L'auteur garde une qualité WebP constante et ajuste la résolution image par image. Il essaie d'abord 120 pixels de large, puis 96, 80, 64, 48 et 32, la hauteur suivant les proportions. La vérification porte sur la chaîne finale encodée : un mur vide et une salle avec un ennemi peuvent donc arriver en résolutions différentes. Les ennemis lointains sont difficiles à distinguer, mais on peut ouvrir une porte et voir qui se cache derrière. Tant qu'une réponse est en route, le widget ignore les nouveaux appuis, avec au moins 1 010 ms entre deux requêtes. Le jeu étant au tour par tour, les monstres n'avancent pas pendant l'attente.

Tests et installation

Dans Telegram pour macOS, l'auteur a vérifié le trajet de la salle de départ à la porte, la rotation et le tir. Il a testé le niveau complet à part, dans ViZDoom en local, avec les mêmes six boutons et cinq ticks par tour : 537 tours jusqu'à l'interrupteur de sortie, avec 48 % de santé restante et six ennemis éliminés.

Pour l'installer, il faut Python 3.12, le jeton de son propre bot et le fichier original DOOM1.WAD de Doom Shareware 1.9, absent du dépôt. Le chemin se règle via DOOM_WAD. Le bot de jeu gère jusqu'à six sessions et les libère après dix minutes d'inactivité.

Le projet a donné naissance à Awesome Telegram Widgets. Le bot @awesomewidget_bot propose Doom, un Pacman au tour par tour, une calculatrice, une météo de démonstration, un choix d'itinéraire et une messagerie de démonstration, avec catégories, recherche et liens vers les projets d'origine. Les développeurs peuvent proposer leurs propres widgets au catalogue.

Des apps à découvrir

SUMO : le puzzle de nombres

Touche les bonnes cases, additionne, atteins l'objectif. Facile à apprendre, difficile à maîtriser. Gratuit, pour tous les âges.

Mots-clés:doomtelegramvizdoomtelegram widgetswebpbots

Plus d'actus de ce jour

Tout voir →

Plus dans: Logiciels

Tout voir →