Doom запустили в сообщении Telegram: кадр уместился в 1024 байта
Разработчик запустил Doom в одном сообщении Telegram. Движок работает на Mac, а каждый кадр должен поместиться в ответ бота размером 1024 байта.

Doom теперь можно пройти прямо в одном сообщении Telegram. Игровой движок остался на Mac автора, а в чат уходят только изображение и шесть кнопок. После нажатия «Вправо» в том же сообщении появляется следующий кадр. На весь ответ у бота есть всего 1024 байта.
Как устроено управление
Игрок может шагнуть вперёд или назад, повернуться, выстрелить или открыть дверь. При повороте вправо виджет вызывает TelegramWidget.request("right"). Бот находит игровую сессию и передаёт в ViZDoom кнопку поворота. Движок продвигает симуляцию на пять тиков: игрок поворачивается, противники двигаются, летят снаряды. Затем мир снова замирает.
Бот берёт кадр из экранного буфера и возвращает его через answerWidgetQuery. Виджет подменяет источник картинки в том же элементе img, поэтому и после десятка ходов в переписке остаётся одно игровое сообщение. Пока ответ в пути, новые нажатия игнорируются, а между запросами проходит не меньше 1010 мс. Сетевую задержку при повороте видно сразу, но монстр за время ожидания не приближается.
Бюджет в 1024 байта
ViZDoom отдаёт RGB-кадр 320 × 200, то есть 192 000 байт до сжатия. На результат запроса отведено 1024 байта, и в них должна поместиться строка Base64: каждые три байта изображения превращаются в четыре символа. Поэтому на сам WebP остаётся максимум 768 байт.
Автор держит качество WebP постоянным и подбирает разрешение для каждого кадра. Сначала пробуется ширина 120 пикселей, затем 96, 80, 64, 48 и 32, высота меняется пропорционально. Пустая стена и зал с противником могут прийти в разном разрешении. Длину проверяют после кодирования, на той строке, которую получит Telegram. На крошечной картинке трудно разглядеть дальнего врага, зато можно открыть дверь и увидеть, кто за ней. Столкновения, двери и попадания считает движок.
Путь от стартового зала до двери, поворот и выстрел автор проверил в Telegram для macOS. Весь уровень прошёл отдельно, в локальном ViZDoom, с теми же шестью кнопками и пятью тиками на ход: до выходного выключателя потребовалось 537 ходов, осталось 48% здоровья, счётчик показал шесть убитых противников.
Для запуска нужны Python 3.12, токен собственного бота и оригинальный DOOM1.WAD из Doom Shareware 1.9, в репозиторий ресурсы игры не входят. Бот держит до шести сессий и освобождает их после десяти минут бездействия. Проект входит в каталог Awesome Telegram Widgets, где рядом с Doom есть пошаговый Pacman и калькулятор.
Приложения, на которые стоит взглянуть
Выбирайте нужные клетки, складывайте, достигайте цели. Легко понять, сложно освоить. Бесплатно, для любого возраста.
Общайтесь с ИИ-собеседником: каждая фраза возвращается исправленной и объяснённой на вашем языке. 9 языков, от A1 до C2.
Открывайте сообщения EDIFACT и X12, каждый сегмент объяснён, конвертация в JSON/XML, экспорт в PDF и Excel. Работает локально, без загрузки.
Выберите, кому, по какому поводу и с каким характером. Поисковик читает описания товаров местных магазинов и выводит то, что подходит. Бесплатно, без регистрации.
Ещё за этот день
Показать все →
Steam показывает среднюю частоту кадров игр на Steam Deck

QuantumDiamonds: мюнхенский стартап ищет дефекты чипов алмазными датчиками

Parloa расширяет партнёрство с OpenAI и получит ранний доступ к моделям

Paribu представила ИИ Paribu Intelligence и бесплатный Terminal
Ещё в рубрике: Софт
Показать все →
Глава WhatsApp Кунал Шах рассказал о упрощении приложения и ИИ

Linkbricks выпустила VORA AI DOCS — бесплатный офис с поддержкой HWP

Asahi Linux переходит на copyleft, чтобы ограничить копирование кода
