Osegi
Software·2 Min. Lesezeit

Doom läuft in einer Telegram-Nachricht – Frames in 1.024 Byte

Ein Entwickler spielt Doom in einer einzelnen Telegram-Nachricht. Die Engine läuft auf einem Mac, jeder Frame muss in eine 1.024 Byte große Bot-Antwort passen.

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

Ein Entwickler hat Doom in einer einzelnen Telegram-Nachricht spielbar gemacht. Die Engine bleibt auf seinem Mac, im Chat erscheinen nur ein kleines Bild und sechs Buttons: vor, zurück, links drehen, rechts drehen, schießen und Tür öffnen.

Drückt man einen Button, ruft das Widget etwa TelegramWidget.request("right") auf. Der Bot findet die Spielsitzung und gibt die Eingabe an ViZDoom weiter, das die Simulation um fünf Ticks voranbringt. Der Spieler dreht sich, Gegner bewegen sich, Geschosse fliegen – danach steht die Welt wieder still. Den Frame holt der Bot aus dem Bildschirmpuffer und liefert ihn über answerWidgetQuery zurück. Das Widget tauscht die Bildquelle im selben Element aus, sodass der Chat auch nach Dutzenden Zügen nur eine Spielnachricht enthält.

Das 1.024-Byte-Limit

ViZDoom liefert einen RGB-Frame mit 320 × 200 Pixeln, unkomprimiert 192.000 Byte. Die gesamte Antwort darf nur 1.024 Byte groß sein und muss das Bild als Base64-String enthalten. Weil aus je drei Bytes vier Zeichen werden, bleiben für das WebP höchstens 768 Byte.

Der Autor hält die WebP-Qualität konstant und passt stattdessen die Auflösung pro Frame an. Zuerst versucht er 120 Pixel Breite, dann 96, 80, 64, 48 und 32; die Höhe skaliert proportional. Geprüft wird der fertig kodierte String. Eine leere Wand und ein Raum mit Gegner können daher in unterschiedlicher Auflösung ankommen. Ferne Gegner sind kaum zu erkennen, dafür lässt sich eine Tür öffnen und nachsehen, wer dahinter steht. Während eine Antwort unterwegs ist, ignoriert das Widget neue Eingaben; zwischen Anfragen liegen mindestens 1.010 ms. Da das Spiel rundenbasiert ist, rücken Monster in dieser Zeit nicht näher.

Test und Einrichtung

In Telegram für macOS prüfte der Autor den Weg vom Startraum zur Tür, Drehen und Schießen. Das gesamte Level spielte er separat in lokalem ViZDoom mit denselben sechs Buttons und fünf Ticks pro Zug: Bis zum Ausgangsschalter waren es 537 Züge, am Ende blieben 48 % Gesundheit und sechs getötete Gegner.

Für den eigenen Betrieb braucht man Python 3.12, ein eigenes Bot-Token und die originale DOOM1.WAD aus Doom Shareware 1.9, die nicht im Repository liegt. Der Pfad wird über DOOM_WAD gesetzt. Der Spielbot hält bis zu sechs Sitzungen und gibt sie nach zehn Minuten Inaktivität frei.

Aus dem Projekt entstand Awesome Telegram Widgets. Im @awesomewidget_bot gibt es Doom, rundenbasiertes Pacman, Taschenrechner, Demo-Wetter, Routenwahl und Demo-Mail, mit Kategorien, Suche und Links zu den Originalprojekten. Eigene Widgets können Entwickler für den Katalog einreichen.

Apps, die sich lohnen

SUMO: das Zahlenrätsel

Tippe die richtigen Felder, addiere, triff das Ziel. Leicht zu lernen, schwer zu meistern. Kostenlos, für jedes Alter.

Schlagwörter:doomtelegramvizdoomtelegram widgetswebpbots

Mehr von diesem Tag

Alle anzeigen →

Mehr aus: Software

Alle anzeigen →