Osegi
소프트웨어·2 분 소요

Telegram 메시지 안에서 Doom 실행, 프레임당 1024바이트

한 개발자가 Telegram 메시지 하나 안에서 Doom을 구동했다. 엔진은 Mac에서 돌아가고, 각 프레임은 봇 응답 1024바이트에 담겨야 한다.

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

한 개발자가 Telegram 메시지 안에서 곧바로 Doom을 즐길 수 있게 만들었다. 게임 엔진은 자신의 Mac에서 돌리고, 채팅에는 화면과 버튼 여섯 개만 보낸다. "오른쪽"을 누르면 같은 메시지에 다음 프레임이 나타난다. 봇의 전체 응답에 허용된 크기는 1024바이트다.

버튼에서 프레임까지

버튼은 전진, 후진, 회전, 사격, 문 열기에 대응한다. 오른쪽으로 돌면 위젯이 TelegramWidget.request("right")를 호출한다. 봇은 게임 세션을 찾아 ViZDoom에 회전 버튼을 전달하고, 엔진은 시뮬레이션을 5틱 진행한다. 이 사이 플레이어가 회전하고 적이 움직이며 발사체가 날아간 뒤 세계는 다시 멈춘다.

봇은 화면 버퍼에서 프레임을 가져와 answerWidgetQuery로 돌려준다. 위젯은 같은 img 요소의 이미지 소스만 교체하므로, 수십 번 움직여도 채팅에는 게임 메시지가 하나만 남는다. 응답이 오는 동안에는 새 입력을 무시하며, 요청 간격은 최소 1010ms다.

768바이트의 한계

ViZDoom은 320×200 RGB 프레임을 내놓는데, 압축 전 크기는 19만 2000바이트다. 결과에는 Base64 문자열이 들어가야 하고, 3바이트가 4글자로 바뀐다. 따라서 WebP에 쓸 수 있는 크기는 최대 768바이트다.

작성자는 WebP 품질을 고정하고 프레임마다 해상도를 바꾼다. 너비 120픽셀부터 시작해 96, 80, 64, 48, 32 순으로 시도한다. 검사는 인코딩 후 Telegram이 실제로 받는 문자열 기준으로 한다. 작은 이미지에서는 먼 적이 잘 보이지 않지만, 문을 열어 뒤에 무엇이 있는지는 확인할 수 있다. 충돌과 문, 명중 판정은 모두 엔진이 처리한다.

검증과 실행 방법

Telegram for macOS에서는 시작 홀에서 문까지의 이동, 회전, 사격을 확인했다. 전체 레벨은 같은 6개 버튼과 5틱 조건으로 로컬 ViZDoom에서 따로 검증했다. 출구 스위치까지 537수가 걸렸고 체력은 48% 남았으며 처치한 적은 6마리였다.

직접 실행하려면 Python 3.12, 자신의 봇 토큰, Doom Shareware 1.9의 원본 DOOM1.WAD가 필요하다. 게임 리소스는 저장소에 포함되지 않는다. 게임 봇은 최대 6개 세션을 유지하고 10분간 입력이 없으면 해제한다. 작성자는 Awesome Telegram Widgets도 함께 공개했으며, @awesomewidget_bot에서 Doom, Pacman, 계산기 등을 체험할 수 있다.

주목할 만한 앱

SUMO: 숫자 퍼즐

올바른 칸을 고르고 더해 목표 숫자를 맞추세요. 배우긴 쉽고 마스터하긴 어렵습니다. 무료, 전 연령.

태그:doomtelegramvizdoomtelegram widgetswebpbots

같은 날의 다른 뉴스

전체 보기 →

관련 카테고리: 소프트웨어

전체 보기 →