Osegi
Yazılım·2 dk okuma

Doom, Telegram mesajında çalıştı: Her kare 1024 bayta sığıyor

Bir geliştirici Doom'u tek bir Telegram mesajının içinde oynanır hale getirdi. Oyun motoru Mac'te çalışıyor, her kare ise 1024 baytlık bot yanıtına sığmak zorunda.

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

Doom artık tek bir Telegram mesajının içinde oynanabiliyor. Oyun motoru geliştiricinin Mac'inde kalıyor, sohbete yalnızca görüntü ve altı düğme gönderiliyor. «Sağa» düğmesine basıldığında aynı mesajda bir sonraki kare beliriyor. Botun tüm yanıt için kullanabileceği alan ise sadece 1024 bayt.

Kontroller nasıl çalışıyor

Oyuncu ileri ya da geri adım atabiliyor, dönebiliyor, ateş edebiliyor veya kapıyı açabiliyor. Sağa dönüldüğünde widget TelegramWidget.request("right") çağrısını yapıyor. Bot oyun oturumunu bulup dönüş tuşunu ViZDoom'a iletiyor. Motor simülasyonu beş tik ilerletiyor: oyuncu dönüyor, düşmanlar hareket ediyor, mermiler uçuyor. Ardından dünya yeniden duruyor.

Bot kareyi ekran arabelleğinden alıp answerWidgetQuery ile geri gönderiyor. Widget aynı img öğesindeki kaynağı değiştiriyor; bu yüzden onlarca hamleden sonra bile sohbette tek bir oyun mesajı var. Yanıt yoldayken yeni basışlar yok sayılıyor ve istekler arasında en az 1010 ms geçiyor. Ağ gecikmesi dönüşlerde hemen hissediliyor, ancak beklerken canavar yaklaşmıyor.

1024 baytlık sınır

ViZDoom 320 × 200 boyutunda RGB kare veriyor; bu, sıkıştırma öncesinde 192.000 bayt demek. Sorgu sonucu için ise 1024 bayt var ve içine Base64 dizgisi sığmalı. Görüntünün her üç baytı dört karaktere dönüştüğü için WebP dosyasına en fazla 768 bayt kalıyor.

Geliştirici WebP kalitesini sabit tutuyor, çözünürlüğü her kare için ayrı seçiyor. Önce 120 piksel genişliği deniyor; dize çok uzunsa sırasıyla 96, 80, 64, 48 ve 32'ye iniyor, yüksekliği orantılı değiştiriyor. Bu yüzden boş bir duvar ile düşmanlı bir salon farklı çözünürlükte gelebiliyor. Kontrol, kodlamadan sonra Telegram'ın alacağı dizgi üzerinde yapılıyor. Küçük görüntüde uzaktaki düşmanı seçmek zor, ama kapıyı açıp arkasında kimin olduğuna bakmak mümkün. Çarpışmaları, kapıları ve isabetleri motor hesaplıyor.

Geliştirici başlangıç salonundan kapıya yürümeyi, dönmeyi ve ateş etmeyi macOS için Telegram'da denedi. Tüm bölümü ise aynı altı düğme ve hamle başına beş tikle yerel ViZDoom'da ayrıca geçti. Çıkış anahtarına 537 hamlede ulaştı, sağlığı yüzde 48 kaldı ve sayaç altı öldürülen düşman gösterdi.

Çalıştırmak için Python 3.12, kendi bot belirteciniz ve Doom Shareware 1.9'daki orijinal DOOM1.WAD gerekiyor; oyun dosyaları depoda yer almıyor. Bot en fazla altı oturumu tutuyor ve on dakika hareketsizlikten sonra serbest bırakıyor. Proje, Doom'un yanı sıra sıra tabanlı Pacman ve hesap makinesi gibi örnekler içeren Awesome Telegram Widgets kataloğunun parçası.

Göz atmaya değer uygulamalar

SUMO: sayı bulmacası

Doğru kareleri seçin, toplayın, hedefe ulaşın. Öğrenmesi kolay, ustalaşması zor. Ücretsiz, her yaşa uygun.

Dialo: konuşarak dil öğrenin

Yapay zekâ sohbet partneriyle konuşun; her cümleniz düzeltilip kendi dilinizde açıklanarak geri gelsin. 9 dil, A1'den C2'ye.

Etiketler:doomtelegramvizdoomtelegram widgetswebpbots

Aynı günden diğer haberler

Tümünü gör →

Daha fazla: Yazılım

Tümünü gör →